janet_abstract_begin:
 1389|  7.23k|void *janet_abstract_begin(const JanetAbstractType *atype, size_t size) {
 1390|  7.23k|    JanetAbstractHead *header = janet_gcalloc(JANET_MEMORY_NONE,
 1391|  7.23k|        sizeof(JanetAbstractHead) + size);
 1392|  7.23k|    header->size = size;
 1393|  7.23k|    header->type = atype;
 1394|  7.23k|    return (void *) & (header->data);
 1395|  7.23k|}
janet_abstract_end:
 1397|  7.23k|void *janet_abstract_end(void *x) {
 1398|  7.23k|    janet_gc_settype((void *)(janet_abstract_head(x)), JANET_MEMORY_ABSTRACT);
  ------------------
  |  |  679|  7.23k|#define janet_gc_settype(m, t) ((janet_gc_header(m)->flags |= (0xFF & (t))))
  |  |  ------------------
  |  |  |  |  673|  7.23k|#define janet_gc_header(mem) ((JanetGCObject *)(mem))
  |  |  ------------------
  ------------------
 1399|  7.23k|    return x;
 1400|  7.23k|}
janet_abstract:
 1402|  7.23k|void *janet_abstract(const JanetAbstractType *atype, size_t size) {
 1403|  7.23k|    return janet_abstract_end(janet_abstract_begin(atype, size));
 1404|  7.23k|}
janet_array:
 1621|  18.1k|JanetArray *janet_array(int32_t capacity) {
 1622|  18.1k|    JanetArray *array = janet_gcalloc(JANET_MEMORY_ARRAY, sizeof(JanetArray));
 1623|  18.1k|    janet_array_impl(array, capacity);
 1624|  18.1k|    return array;
 1625|  18.1k|}
janet_array_n:
 1635|  1.42M|JanetArray *janet_array_n(const Janet *elements, int32_t n) {
 1636|  1.42M|    JanetArray *array = janet_gcalloc(JANET_MEMORY_ARRAY, sizeof(JanetArray));
 1637|  1.42M|    array->capacity = n;
 1638|  1.42M|    array->count = n;
 1639|  1.42M|    array->data = array_allocate(sizeof(Janet), (size_t) n);
 1640|  1.42M|    if (!array->data) {
  ------------------
  |  Branch (1640:9): [True: 0, False: 1.42M]
  ------------------
 1641|      0|        JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1642|      0|    }
 1643|  1.42M|    safe_memcpy(array->data, elements, sizeof(Janet) * n);
 1644|  1.42M|    return array;
 1645|  1.42M|}
janet_array_ensure:
 1648|  5.29M|void janet_array_ensure(JanetArray *array, int32_t capacity, int32_t growth) {
 1649|  5.29M|    Janet *newData;
 1650|  5.29M|    Janet *old = array->data;
 1651|  5.29M|    if (capacity <= array->capacity) return;
  ------------------
  |  Branch (1651:9): [True: 4.27M, False: 1.02M]
  ------------------
 1652|  1.02M|    int64_t new_capacity = ((int64_t) capacity) * growth;
 1653|  1.02M|    if (new_capacity > INT32_MAX) new_capacity = INT32_MAX;
  ------------------
  |  Branch (1653:9): [True: 0, False: 1.02M]
  ------------------
 1654|  1.02M|    capacity = (int32_t) new_capacity;
 1655|  1.02M|    newData = janet_realloc(old, capacity * sizeof(Janet));
  ------------------
  |  | 2409|  1.02M|#define janet_realloc(X, Y) realloc((X), (Y))
  ------------------
 1656|  1.02M|    if (NULL == newData) {
  ------------------
  |  Branch (1656:9): [True: 0, False: 1.02M]
  ------------------
 1657|      0|        JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1658|      0|    }
 1659|  1.02M|    janet_vm.next_collection += (capacity - array->capacity) * sizeof(Janet);
 1660|  1.02M|    array->data = newData;
 1661|  1.02M|    array->capacity = capacity;
 1662|  1.02M|}
janet_array_push:
 1679|   478k|void janet_array_push(JanetArray *array, Janet x) {
 1680|   478k|    if (array->count == INT32_MAX) {
  ------------------
  |  Branch (1680:9): [True: 0, False: 478k]
  ------------------
 1681|      0|        janet_panic("array overflow");
 1682|      0|    }
 1683|   478k|    int32_t newcount = array->count + 1;
 1684|   478k|    janet_array_ensure(array, newcount, 2);
 1685|   478k|    array->data[array->count] = x;
 1686|   478k|    array->count = newcount;
 1687|   478k|}
cfun_array_new_filled:
 1734|      1|              "`val`, which defaults to nil.") {
 1735|      1|    janet_arity(argc, 1, 2);
 1736|      1|    int32_t count = janet_getnat(argv, 0);
 1737|      1|    Janet x = (argc == 2) ? argv[1] : janet_wrap_nil();
  ------------------
  |  |  831|      1|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      1|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      1|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      1|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1737:15): [True: 0, False: 1]
  ------------------
 1738|      1|    JanetArray *array = janet_array(count);
 1739|  4.46k|    for (int32_t i = 0; i < count; i++) {
  ------------------
  |  Branch (1739:25): [True: 4.46k, False: 1]
  ------------------
 1740|  4.46k|        array->data[i] = x;
 1741|  4.46k|    }
 1742|      1|    array->count = count;
 1743|      1|    return janet_wrap_array(array);
  ------------------
  |  |  845|      1|#define janet_wrap_array(s) janet_nanbox_wrap_((s), JANET_ARRAY)
  |  |  ------------------
  |  |  |  |  825|      1|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      1|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      1|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1744|      1|}
cfun_array_push:
 1781|  4.82M|              "Returns `arr`.") {
 1782|  4.82M|    janet_arity(argc, 1, -1);
 1783|  4.82M|    JanetArray *array = janet_getarray(argv, 0);
 1784|  4.82M|    if (INT32_MAX - argc + 1 <= array->count) {
  ------------------
  |  Branch (1784:9): [True: 0, False: 4.82M]
  ------------------
 1785|      0|        janet_panic("array overflow");
 1786|      0|    }
 1787|  4.82M|    int32_t newcount = array->count - 1 + argc;
 1788|  4.82M|    janet_array_ensure(array, newcount, 2);
 1789|  4.82M|    if (argc > 1) memcpy(array->data + array->count, argv + 1, (size_t)(argc - 1) * sizeof(Janet));
  ------------------
  |  Branch (1789:9): [True: 4.82M, False: 0]
  ------------------
 1790|  4.82M|    array->count = newcount;
 1791|  4.82M|    return argv[0];
 1792|  4.82M|}
cfun_array_slice:
 1813|  16.8k|              "Same as `tuple/slice`, but returns an array.") {
 1814|  16.8k|    JanetView view = janet_getindexed(argv, 0);
 1815|  16.8k|    JanetRange range = janet_getslice(argc, argv);
 1816|  16.8k|    JanetArray *array = janet_array(range.end - range.start);
 1817|  16.8k|    if (array->data)
  ------------------
  |  Branch (1817:9): [True: 16.8k, False: 2]
  ------------------
 1818|  16.8k|        memcpy(array->data, view.items + range.start, sizeof(Janet) * (range.end - range.start));
 1819|  16.8k|    array->count = range.end - range.start;
 1820|  16.8k|    return janet_wrap_array(array);
  ------------------
  |  |  845|  16.8k|#define janet_wrap_array(s) janet_nanbox_wrap_((s), JANET_ARRAY)
  |  |  ------------------
  |  |  |  |  825|  16.8k|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  16.8k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  16.8k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1821|  16.8k|}
cfun_array_concat:
 1829|  71.6k|              "will be appended to `arr` in order. Returns `arr`.") {
 1830|  71.6k|    int32_t i;
 1831|  71.6k|    janet_arity(argc, 1, -1);
 1832|  71.6k|    JanetArray *array = janet_getarray(argv, 0);
 1833|   190k|    for (i = 1; i < argc; i++) {
  ------------------
  |  Branch (1833:17): [True: 118k, False: 71.6k]
  ------------------
 1834|   118k|        switch (janet_type(argv[i])) {
  ------------------
  |  |  795|   118k|    (isnan((x).number) \
  |  |  796|   118k|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|   118k|        : JANET_NUMBER)
  ------------------
  |  Branch (1834:17): [True: 118k, False: 0]
  ------------------
 1835|      0|            default:
  ------------------
  |  Branch (1835:13): [True: 0, False: 118k]
  ------------------
 1836|      0|                janet_array_push(array, argv[i]);
 1837|      0|                break;
 1838|  78.2k|            case JANET_ARRAY:
  ------------------
  |  Branch (1838:13): [True: 78.2k, False: 40.5k]
  ------------------
 1839|   118k|            case JANET_TUPLE: {
  ------------------
  |  Branch (1839:13): [True: 40.5k, False: 78.2k]
  ------------------
 1840|   118k|                int32_t j, len = 0;
 1841|   118k|                const Janet *vals = NULL;
 1842|   118k|                janet_indexed_view(argv[i], &vals, &len);
 1843|   118k|                if (array->data == vals) {
  ------------------
  |  Branch (1843:21): [True: 0, False: 118k]
  ------------------
 1844|      0|                    int32_t newcount = array->count + len;
 1845|      0|                    janet_array_ensure(array, newcount, 2);
 1846|      0|                    janet_indexed_view(argv[i], &vals, &len);
 1847|      0|                }
 1848|   597k|                for (j = 0; j < len; j++)
  ------------------
  |  Branch (1848:29): [True: 478k, False: 118k]
  ------------------
 1849|   478k|                    janet_array_push(array, vals[j]);
 1850|   118k|            }
 1851|   118k|            break;
 1852|   118k|        }
 1853|   118k|    }
 1854|  71.6k|    return janet_wrap_array(array);
  ------------------
  |  |  845|  71.6k|#define janet_wrap_array(s) janet_nanbox_wrap_((s), JANET_ARRAY)
  |  |  ------------------
  |  |  |  |  825|  71.6k|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  71.6k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  71.6k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1855|  71.6k|}
janet_lib_array:
 1978|    267|void janet_lib_array(JanetTable *env) {
 1979|    267|    JanetRegExt array_cfuns[] = {
 1980|    267|        JANET_CORE_REG("array/new", cfun_array_new),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 1981|    267|        JANET_CORE_REG("array/weak", cfun_array_weak),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 1982|    267|        JANET_CORE_REG("array/new-filled", cfun_array_new_filled),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 1983|    267|        JANET_CORE_REG("array/fill", cfun_array_fill),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 1984|    267|        JANET_CORE_REG("array/pop", cfun_array_pop),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 1985|    267|        JANET_CORE_REG("array/peek", cfun_array_peek),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 1986|    267|        JANET_CORE_REG("array/push", cfun_array_push),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 1987|    267|        JANET_CORE_REG("array/ensure", cfun_array_ensure),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 1988|    267|        JANET_CORE_REG("array/slice", cfun_array_slice),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 1989|    267|        JANET_CORE_REG("array/concat", cfun_array_concat),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 1990|    267|        JANET_CORE_REG("array/insert", cfun_array_insert),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 1991|    267|        JANET_CORE_REG("array/remove", cfun_array_remove),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 1992|    267|        JANET_CORE_REG("array/trim", cfun_array_trim),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 1993|    267|        JANET_CORE_REG("array/clear", cfun_array_clear),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 1994|    267|        JANET_CORE_REG("array/join", cfun_array_join),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 1995|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
 1996|    267|    };
 1997|       |    janet_core_cfuns_ext(env, NULL, array_cfuns);
 1998|    267|}
janet_lib_asm:
 3143|    267|void janet_lib_asm(JanetTable *env) {
 3144|    267|    JanetRegExt asm_cfuns[] = {
 3145|    267|        JANET_CORE_REG("asm", cfun_asm),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3146|    267|        JANET_CORE_REG("disasm", cfun_disasm),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3147|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
 3148|    267|    };
 3149|       |    janet_core_cfuns_ext(env, NULL, asm_cfuns);
 3150|    267|}
janet_buffer_init:
 3211|  94.7k|JanetBuffer *janet_buffer_init(JanetBuffer *buffer, int32_t capacity) {
 3212|  94.7k|    janet_buffer_init_impl(buffer, capacity);
 3213|  94.7k|    buffer->gc.data.next = NULL;
 3214|  94.7k|    buffer->gc.flags = JANET_MEM_DISABLED;
  ------------------
  |  |  677|  94.7k|#define JANET_MEM_DISABLED 0x200
  ------------------
 3215|  94.7k|    return buffer;
 3216|  94.7k|}
janet_buffer_deinit:
 3231|   103k|void janet_buffer_deinit(JanetBuffer *buffer) {
 3232|   103k|    if (!(buffer->gc.flags & JANET_BUFFER_FLAG_NO_REALLOC)) {
  ------------------
  |  | 1780|   103k|#define JANET_BUFFER_FLAG_NO_REALLOC 0x10000
  ------------------
  |  Branch (3232:9): [True: 103k, False: 0]
  ------------------
 3233|   103k|        janet_free(buffer->data);
  ------------------
  |  | 2415|   103k|#define janet_free(X) free((X))
  ------------------
 3234|       |        buffer->data = NULL;
 3235|   103k|    }
 3236|   103k|}
janet_buffer:
 3239|  8.60k|JanetBuffer *janet_buffer(int32_t capacity) {
 3240|  8.60k|    JanetBuffer *buffer = janet_gcalloc(JANET_MEMORY_BUFFER, sizeof(JanetBuffer));
 3241|  8.60k|    return janet_buffer_init_impl(buffer, capacity);
 3242|  8.60k|}
janet_buffer_ensure:
 3245|      4|void janet_buffer_ensure(JanetBuffer *buffer, int32_t capacity, int32_t growth) {
 3246|      4|    uint8_t *new_data;
 3247|      4|    uint8_t *old = buffer->data;
 3248|      4|    if (capacity <= buffer->capacity) return;
  ------------------
  |  Branch (3248:9): [True: 4, False: 0]
  ------------------
 3249|      0|    janet_buffer_can_realloc(buffer);
 3250|      0|    int64_t big_capacity = ((int64_t) capacity) * growth;
 3251|      0|    capacity = big_capacity > INT32_MAX ? INT32_MAX : (int32_t) big_capacity;
  ------------------
  |  Branch (3251:16): [True: 0, False: 0]
  ------------------
 3252|      0|    janet_gcpressure(capacity - buffer->capacity);
 3253|      0|    new_data = janet_realloc(old, (size_t) capacity * sizeof(uint8_t));
  ------------------
  |  | 2409|      0|#define janet_realloc(X, Y) realloc((X), (Y))
  ------------------
 3254|      0|    if (NULL == new_data) {
  ------------------
  |  Branch (3254:9): [True: 0, False: 0]
  ------------------
 3255|      0|        JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3256|      0|    }
 3257|      0|    buffer->data = new_data;
 3258|      0|    buffer->capacity = capacity;
 3259|      0|}
janet_buffer_extra:
 3275|  7.81M|void janet_buffer_extra(JanetBuffer *buffer, int32_t n) {
 3276|       |    /* Check for buffer overflow */
 3277|  7.81M|    if ((int64_t)n + buffer->count > INT32_MAX) {
  ------------------
  |  Branch (3277:9): [True: 0, False: 7.81M]
  ------------------
 3278|      0|        janet_panic("buffer overflow");
 3279|      0|    }
 3280|  7.81M|    int32_t new_size = buffer->count + n;
 3281|  7.81M|    if (new_size > buffer->capacity) {
  ------------------
  |  Branch (3281:9): [True: 21.3k, False: 7.79M]
  ------------------
 3282|  21.3k|        janet_buffer_can_realloc(buffer);
 3283|  21.3k|        int32_t new_capacity = (new_size > (INT32_MAX / 2)) ? INT32_MAX : (new_size * 2);
  ------------------
  |  Branch (3283:32): [True: 0, False: 21.3k]
  ------------------
 3284|  21.3k|        uint8_t *new_data = janet_realloc(buffer->data, new_capacity * sizeof(uint8_t));
  ------------------
  |  | 2409|  21.3k|#define janet_realloc(X, Y) realloc((X), (Y))
  ------------------
 3285|  21.3k|        janet_gcpressure(new_capacity - buffer->capacity);
 3286|  21.3k|        if (NULL == new_data) {
  ------------------
  |  Branch (3286:13): [True: 0, False: 21.3k]
  ------------------
 3287|      0|            JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3288|      0|        }
 3289|  21.3k|        buffer->data = new_data;
 3290|  21.3k|        buffer->capacity = new_capacity;
 3291|  21.3k|    }
 3292|  7.81M|}
janet_buffer_push_cstring:
 3295|  88.6k|void janet_buffer_push_cstring(JanetBuffer *buffer, const char *cstring) {
 3296|  88.6k|    int32_t len = (int32_t) strlen(cstring);
 3297|  88.6k|    janet_buffer_push_bytes(buffer, (const uint8_t *) cstring, len);
 3298|  88.6k|}
janet_buffer_push_bytes:
 3301|  1.07M|void janet_buffer_push_bytes(JanetBuffer *buffer, const uint8_t *string, int32_t length) {
 3302|  1.07M|    if (0 == length) return;
  ------------------
  |  Branch (3302:9): [True: 346, False: 1.07M]
  ------------------
 3303|  1.07M|    janet_buffer_extra(buffer, length);
 3304|  1.07M|    memcpy(buffer->data + buffer->count, string, length);
 3305|  1.07M|    buffer->count += length;
 3306|  1.07M|}
janet_buffer_push_u8:
 3313|  6.58M|void janet_buffer_push_u8(JanetBuffer *buffer, uint8_t byte) {
 3314|  6.58M|    janet_buffer_extra(buffer, 1);
 3315|  6.58M|    buffer->data[buffer->count] = byte;
 3316|  6.58M|    buffer->count++;
 3317|  6.58M|}
cfun_buffer_chars:
 3466|  53.3k|              "`buf` as needed. Throws an error if size limit is exceeded.") {
 3467|  53.3k|    int32_t i;
 3468|  53.3k|    janet_arity(argc, 1, -1);
 3469|  53.3k|    JanetBuffer *buffer = janet_getbuffer(argv, 0);
 3470|   106k|    for (i = 1; i < argc; i++) {
  ------------------
  |  Branch (3470:17): [True: 53.3k, False: 53.3k]
  ------------------
 3471|  53.3k|        JanetByteView view = janet_getbytes(argv, i);
 3472|  53.3k|        if (view.bytes == buffer->data) {
  ------------------
  |  Branch (3472:13): [True: 0, False: 53.3k]
  ------------------
 3473|      0|            janet_buffer_ensure(buffer, buffer->count + view.len, 2);
 3474|      0|            view.bytes = buffer->data;
 3475|      0|        }
 3476|  53.3k|        janet_buffer_push_bytes(buffer, view.bytes, view.len);
 3477|  53.3k|    }
 3478|  53.3k|    return argv[0];
 3479|  53.3k|}
cfun_buffer_format:
 3808|  53.3k|              "buffer `buf`. Returns buf.") {
 3809|  53.3k|    janet_arity(argc, 2, -1);
 3810|  53.3k|    JanetBuffer *buffer = janet_getbuffer(argv, 0);
 3811|  53.3k|    const char *strfrmt = (const char *) janet_getstring(argv, 1);
 3812|  53.3k|    janet_buffer_format(buffer, strfrmt, 1, argc, argv);
 3813|  53.3k|    return argv[0];
 3814|  53.3k|}
janet_lib_buffer:
 3837|    267|void janet_lib_buffer(JanetTable *env) {
 3838|    267|    JanetRegExt buffer_cfuns[] = {
 3839|    267|        JANET_CORE_REG("buffer/new", cfun_buffer_new),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3840|    267|        JANET_CORE_REG("buffer/new-filled", cfun_buffer_new_filled),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3841|    267|        JANET_CORE_REG("buffer/from-bytes", cfun_buffer_frombytes),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3842|    267|        JANET_CORE_REG("buffer/fill", cfun_buffer_fill),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3843|    267|        JANET_CORE_REG("buffer/trim", cfun_buffer_trim),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3844|    267|        JANET_CORE_REG("buffer/push-byte", cfun_buffer_u8),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3845|    267|        JANET_CORE_REG("buffer/push-word", cfun_buffer_word),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3846|    267|        JANET_CORE_REG("buffer/push-string", cfun_buffer_chars),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3847|    267|        JANET_CORE_REG("buffer/push-uint16", cfun_buffer_push_uint16),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3848|    267|        JANET_CORE_REG("buffer/push-uint32", cfun_buffer_push_uint32),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3849|    267|        JANET_CORE_REG("buffer/push-uint64", cfun_buffer_push_uint64),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3850|    267|        JANET_CORE_REG("buffer/push-float32", cfun_buffer_push_float32),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3851|    267|        JANET_CORE_REG("buffer/push-float64", cfun_buffer_push_float64),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3852|    267|        JANET_CORE_REG("buffer/push", cfun_buffer_push),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3853|    267|        JANET_CORE_REG("buffer/push-at", cfun_buffer_push_at),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3854|    267|        JANET_CORE_REG("buffer/popn", cfun_buffer_popn),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3855|    267|        JANET_CORE_REG("buffer/clear", cfun_buffer_clear),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3856|    267|        JANET_CORE_REG("buffer/slice", cfun_buffer_slice),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3857|    267|        JANET_CORE_REG("buffer/bit-set", cfun_buffer_bitset),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3858|    267|        JANET_CORE_REG("buffer/bit-clear", cfun_buffer_bitclear),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3859|    267|        JANET_CORE_REG("buffer/bit", cfun_buffer_bitget),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3860|    267|        JANET_CORE_REG("buffer/bit-toggle", cfun_buffer_bittoggle),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3861|    267|        JANET_CORE_REG("buffer/blit", cfun_buffer_blit),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3862|    267|        JANET_CORE_REG("buffer/format", cfun_buffer_format),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3863|    267|        JANET_CORE_REG("buffer/format-at", cfun_buffer_format_at),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 3864|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
 3865|    267|    };
 3866|       |    janet_core_cfuns_ext(env, NULL, buffer_cfuns);
 3867|    267|}
janet_bytecode_dead_code:
 4714|   194k|void janet_bytecode_dead_code(JanetFuncDef *def) {
 4715|   194k|    int32_t *pcstack = NULL;
 4716|   194k|    uint32_t *code = def->bytecode;
 4717|   194k|    int32_t *codes = (int32_t *)code;
 4718|   194k|    int32_t len = def->bytecode_length;
 4719|   194k|    int32_t words = ((len - 1) / 32) + 1;
 4720|   194k|    uint32_t *visited_bitmap = array_allocate(sizeof(uint32_t), words);
 4721|   194k|    memset(visited_bitmap, 0, words * sizeof(uint32_t));
 4722|   194k|    janet_v_push(pcstack, 0);
  ------------------
  |  |  757|   194k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|   194k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|   194k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|      0|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 194k, False: 0]
  |  |  |  |  |  |  |  Branch (768:50): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|   194k|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|   194k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   194k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4723|   414k|    while (janet_v_count(pcstack)) {
  ------------------
  |  |  759|   414k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|   414k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   414k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:33): [True: 219k, False: 194k]
  |  |  |  Branch (759:34): [True: 414k, False: 0]
  |  |  ------------------
  ------------------
 4724|   219k|        int32_t pc = janet_v_last(pcstack);
  ------------------
  |  |  760|   219k|#define janet_v_last(v)         ((v)[janet_v__cnt(v) - 1])
  |  |  ------------------
  |  |  |  |  766|   219k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   219k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4725|   219k|        janet_v_pop(pcstack);
  ------------------
  |  |  758|   219k|#define janet_v_pop(v)          (janet_v_count(v) ? janet_v__cnt(v)-- : 0)
  |  |  ------------------
  |  |  |  |  759|   219k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  766|   219k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  764|   219k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (759:33): [True: 219k, False: 0]
  |  |  |  |  |  Branch (759:34): [True: 219k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_pop(v)          (janet_v_count(v) ? janet_v__cnt(v)-- : 0)
  |  |  ------------------
  |  |  |  |  766|   219k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   219k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4726|  35.5M|        while (pc < len) {
  ------------------
  |  Branch (4726:16): [True: 35.3M, False: 208k]
  ------------------
 4727|  35.3M|            int32_t index = pc >> 5;
 4728|  35.3M|            int32_t mask = ((uint32_t)1) << (pc & 0x1F);
 4729|  35.3M|            if (visited_bitmap[index] & mask) break;
  ------------------
  |  Branch (4729:17): [True: 11.6k, False: 35.3M]
  ------------------
 4730|  35.3M|            visited_bitmap[index] |= mask;
 4731|  35.3M|            switch (code[pc] & 0x7F) {
 4732|  35.0M|                default:
  ------------------
  |  Branch (4732:17): [True: 35.0M, False: 232k]
  ------------------
 4733|  35.0M|                    pc++;
 4734|  35.0M|                    continue;
 4735|  13.5k|                case JOP_RETURN_NIL:
  ------------------
  |  Branch (4735:17): [True: 13.5k, False: 35.2M]
  ------------------
 4736|   192k|                case JOP_RETURN:
  ------------------
  |  Branch (4736:17): [True: 179k, False: 35.1M]
  ------------------
 4737|   193k|                case JOP_ERROR:
  ------------------
  |  Branch (4737:17): [True: 604, False: 35.3M]
  ------------------
 4738|   207k|                case JOP_TAILCALL:
  ------------------
  |  Branch (4738:17): [True: 13.5k, False: 35.2M]
  ------------------
 4739|   207k|                    pc = len;
 4740|   207k|                    continue;
 4741|  1.06k|                case JOP_JUMP:
  ------------------
  |  Branch (4741:17): [True: 1.06k, False: 35.3M]
  ------------------
 4742|  1.06k|                    janet_v_push(pcstack, pc + (codes[pc] >> 8));
  ------------------
  |  |  757|  1.06k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  1.06k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  1.06k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  1.06k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.06k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  1.06k|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.06k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 0, False: 1.06k]
  |  |  |  |  |  |  |  Branch (768:50): [True: 17, False: 1.05k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|     17|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  1.06k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.06k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4743|  1.06k|                    pc = len;
 4744|  1.06k|                    continue;
 4745|      0|                case JOP_JUMP_IF:
  ------------------
  |  Branch (4745:17): [True: 0, False: 35.3M]
  ------------------
 4746|  1.06k|                case JOP_JUMP_IF_NIL:
  ------------------
  |  Branch (4746:17): [True: 1.06k, False: 35.3M]
  ------------------
 4747|  11.6k|                case JOP_JUMP_IF_NOT:
  ------------------
  |  Branch (4747:17): [True: 10.6k, False: 35.2M]
  ------------------
 4748|  24.2k|                case JOP_JUMP_IF_NOT_NIL:
  ------------------
  |  Branch (4748:17): [True: 12.5k, False: 35.2M]
  ------------------
 4749|  24.2k|                    janet_v_push(pcstack, pc + (codes[pc] >> 16));
  ------------------
  |  |  757|  24.2k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  24.2k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  24.2k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  24.2k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  24.2k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  24.2k|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  24.2k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 0, False: 24.2k]
  |  |  |  |  |  |  |  Branch (768:50): [True: 13.5k, False: 10.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|  13.5k|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  24.2k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  24.2k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4750|  24.2k|                    pc++;
 4751|  24.2k|                    continue;
 4752|  35.3M|            }
 4753|  35.3M|        }
 4754|   219k|    }
 4755|  35.4M|    for (int32_t pc = 0; pc < len; pc++) {
  ------------------
  |  Branch (4755:26): [True: 35.3M, False: 194k]
  ------------------
 4756|  35.3M|        if (!(visited_bitmap[pc >> 5] & (((uint32_t)1) << (pc & 0x1F)))) {
  ------------------
  |  Branch (4756:13): [True: 436, False: 35.3M]
  ------------------
 4757|    436|            code[pc] = JOP_NOOP;
 4758|    436|        }
 4759|  35.3M|    }
 4760|   194k|    janet_free(visited_bitmap);
  ------------------
  |  | 2415|   194k|#define janet_free(X) free((X))
  ------------------
 4761|       |    janet_v_free(pcstack);
  ------------------
  |  |  756|   194k|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|   194k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 194k, False: 0]
  |  |  ------------------
  ------------------
 4762|   194k|}
janet_bytecode_remove_unused_closures:
 4785|   180k|void janet_bytecode_remove_unused_closures(JanetFuncDef *def) {
 4786|   180k|    if (def->defs_length < 1) return;
  ------------------
  |  Branch (4786:9): [True: 91.6k, False: 88.9k]
  ------------------
 4787|  88.9k|    uint32_t *code = def->bytecode;
 4788|  88.9k|    int32_t words = ((def->defs_length - 1) >> 5) + 1;
 4789|  88.9k|    janet_assert(words > 0, "bad length");
  ------------------
  |  |  389|  88.9k|#define janet_assert(c, m) do { \
  |  |  390|  88.9k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 88.9k]
  |  |  ------------------
  |  |  391|  88.9k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 88.9k]
  |  |  ------------------
  ------------------
 4790|  88.9k|    uint32_t *bitset = array_allocate(sizeof(uint32_t), words);
 4791|  88.9k|    memset(bitset, 0, words * sizeof(uint32_t));
 4792|  2.20M|    for (int32_t pc = 0; pc < def->bytecode_length; pc++) {
  ------------------
  |  Branch (4792:26): [True: 2.11M, False: 88.9k]
  ------------------
 4793|  2.11M|        uint32_t E = code[pc] >> 16;
 4794|  2.11M|        switch (code[pc] & 0x7F) {
 4795|  2.02M|            default:
  ------------------
  |  Branch (4795:13): [True: 2.02M, False: 89.5k]
  ------------------
 4796|  2.02M|                continue;
 4797|  2.02M|            case JOP_CLOSURE:
  ------------------
  |  Branch (4797:13): [True: 89.5k, False: 2.02M]
  ------------------
 4798|  89.5k|                bs_set_bit(bitset, E);
 4799|  89.5k|                continue;
 4800|  2.11M|        }
 4801|  2.11M|    }
 4802|       |
 4803|       |    /* Check if we need to compress closures */
 4804|  88.9k|    int remap = 0;
 4805|   177k|    for (int32_t i = 0; i < def->defs_length; i++) {
  ------------------
  |  Branch (4805:25): [True: 90.2k, False: 87.7k]
  ------------------
 4806|  90.2k|        if (!bs_read_bit(bitset, i)) {
  ------------------
  |  Branch (4806:13): [True: 1.23k, False: 89.0k]
  ------------------
 4807|  1.23k|            remap = 1;
 4808|  1.23k|            break;
 4809|  1.23k|        }
 4810|  90.2k|    }
 4811|       |
 4812|       |    /* Remap closures */
 4813|  88.9k|    if (remap) {
  ------------------
  |  Branch (4813:9): [True: 1.23k, False: 87.7k]
  ------------------
 4814|  1.23k|        uint32_t *def_remaps = array_allocate(sizeof(uint32_t), def->defs_length);
 4815|  1.23k|        int32_t j = 0;
 4816|  3.96k|        for (int32_t i = 0; i < def->defs_length; i++) {
  ------------------
  |  Branch (4816:29): [True: 2.73k, False: 1.23k]
  ------------------
 4817|  2.73k|            def_remaps[i] = j;
 4818|  2.73k|            def->defs[j] = def->defs[i];
 4819|  2.73k|            if (bs_read_bit(bitset, i)) {
  ------------------
  |  Branch (4819:17): [True: 550, False: 2.18k]
  ------------------
 4820|    550|                j++;
 4821|    550|            }
 4822|  2.73k|        }
 4823|  1.23k|        def->defs_length = j;
 4824|  18.6k|        for (int32_t pc = 0; pc < def->bytecode_length; pc++) {
  ------------------
  |  Branch (4824:30): [True: 17.3k, False: 1.23k]
  ------------------
 4825|  17.3k|            uint32_t E = code[pc] >> 16;
 4826|  17.3k|            switch (code[pc] & 0x7F) {
 4827|  16.8k|                default:
  ------------------
  |  Branch (4827:17): [True: 16.8k, False: 550]
  ------------------
 4828|  16.8k|                    continue;
 4829|  16.8k|                case JOP_CLOSURE:
  ------------------
  |  Branch (4829:17): [True: 550, False: 16.8k]
  ------------------
 4830|    550|                    code[pc] = (code[pc] & 0xFFFF) | (def_remaps[E] << 16);
 4831|    550|                    continue;
 4832|  17.3k|            }
 4833|  17.3k|        }
 4834|  1.23k|        janet_free(def_remaps);
  ------------------
  |  | 2415|  1.23k|#define janet_free(X) free((X))
  ------------------
 4835|       |
 4836|       |        /* TODO - recalculate closure bitset and do more optimization */
 4837|  1.23k|    }
 4838|       |
 4839|  88.9k|    janet_free(bitset);
  ------------------
  |  | 2415|  88.9k|#define janet_free(X) free((X))
  ------------------
 4840|  88.9k|}
janet_bytecode_remove_unused_constants:
 4843|   180k|void janet_bytecode_remove_unused_constants(JanetFuncDef *def) {
 4844|   180k|    if (def->constants_length < 1) return;
  ------------------
  |  Branch (4844:9): [True: 96.0k, False: 84.5k]
  ------------------
 4845|  84.5k|    uint32_t *code = def->bytecode;
 4846|  84.5k|    int32_t words = ((def->constants_length - 1) >> 5) + 1;
 4847|  84.5k|    janet_assert(words > 0, "bad length");
  ------------------
  |  |  389|  84.5k|#define janet_assert(c, m) do { \
  |  |  390|  84.5k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 84.5k]
  |  |  ------------------
  |  |  391|  84.5k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 84.5k]
  |  |  ------------------
  ------------------
 4848|  84.5k|    uint32_t *bitset = array_allocate(sizeof(uint32_t), words);
 4849|  84.5k|    memset(bitset, 0, words * sizeof(uint32_t));
 4850|       |
 4851|       |    /* Quirk: We rely on the first N constants being the named arguments of a function for warnings
 4852|       |     * while making function calls. Preserve these in the case we have named arguments so we don't get
 4853|       |     * spurious warnings for unused named arguments (or miss warnings!) */
 4854|  84.5k|    if (def->flags & JANET_FUNCDEF_FLAG_NAMEDARGS) {
  ------------------
  |  | 1107|  84.5k|#define JANET_FUNCDEF_FLAG_NAMEDARGS 0x4000000
  ------------------
  |  Branch (4854:9): [True: 0, False: 84.5k]
  ------------------
 4855|      0|        for (int32_t index = 0; index < def->named_args_count; index++) {
  ------------------
  |  Branch (4855:33): [True: 0, False: 0]
  ------------------
 4856|      0|            bs_set_bit(bitset, index);
 4857|      0|        }
 4858|      0|    }
 4859|       |
 4860|  2.68M|    for (int32_t pc = 0; pc < def->bytecode_length; pc++) {
  ------------------
  |  Branch (4860:26): [True: 2.59M, False: 84.5k]
  ------------------
 4861|  2.59M|        uint32_t E = code[pc] >> 16;
 4862|  2.59M|        switch (code[pc] & 0x7F) {
 4863|  1.76M|            default:
  ------------------
  |  Branch (4863:13): [True: 1.76M, False: 831k]
  ------------------
 4864|  1.76M|                continue;
 4865|  1.76M|            case JOP_LOAD_CONSTANT:
  ------------------
  |  Branch (4865:13): [True: 831k, False: 1.76M]
  ------------------
 4866|   831k|                bs_set_bit(bitset, E);
 4867|   831k|                continue;
 4868|  2.59M|        }
 4869|  2.59M|    }
 4870|       |
 4871|       |    /* Check if we need to compress constants */
 4872|  84.5k|    int remap = 0;
 4873|   173k|    for (int32_t i = 0; i < def->constants_length; i++) {
  ------------------
  |  Branch (4873:25): [True: 89.5k, False: 84.2k]
  ------------------
 4874|  89.5k|        if (!bs_read_bit(bitset, i)) {
  ------------------
  |  Branch (4874:13): [True: 282, False: 89.2k]
  ------------------
 4875|    282|            remap = 1;
 4876|    282|            break;
 4877|    282|        }
 4878|  89.5k|    }
 4879|       |
 4880|       |    /* Remap constants */
 4881|  84.5k|    if (remap) {
  ------------------
  |  Branch (4881:9): [True: 282, False: 84.2k]
  ------------------
 4882|    282|        uint32_t *constant_remaps = array_allocate(sizeof(uint32_t), def->constants_length);
 4883|    282|        int32_t j = 0;
 4884|  1.27k|        for (int32_t i = 0; i < def->constants_length; i++) {
  ------------------
  |  Branch (4884:29): [True: 992, False: 282]
  ------------------
 4885|    992|            constant_remaps[i] = j;
 4886|    992|            def->constants[j] = def->constants[i];
 4887|    992|            if (bs_read_bit(bitset, i)) {
  ------------------
  |  Branch (4887:17): [True: 153, False: 839]
  ------------------
 4888|    153|                j++;
 4889|    153|            }
 4890|    992|        }
 4891|    282|        def->constants_length = j;
 4892|  1.59k|        for (int32_t pc = 0; pc < def->bytecode_length; pc++) {
  ------------------
  |  Branch (4892:30): [True: 1.31k, False: 282]
  ------------------
 4893|  1.31k|            uint32_t E = code[pc] >> 16;
 4894|  1.31k|            switch (code[pc] & 0x7F) {
 4895|  1.16k|                default:
  ------------------
  |  Branch (4895:17): [True: 1.16k, False: 155]
  ------------------
 4896|  1.16k|                    continue;
 4897|  1.16k|                case JOP_LOAD_CONSTANT:
  ------------------
  |  Branch (4897:17): [True: 155, False: 1.16k]
  ------------------
 4898|    155|                    code[pc] = (code[pc] & 0xFFFF) | (constant_remaps[E] << 16);
 4899|    155|                    continue;
 4900|  1.31k|            }
 4901|  1.31k|        }
 4902|    282|        janet_free(constant_remaps);
  ------------------
  |  | 2415|    282|#define janet_free(X) free((X))
  ------------------
 4903|    282|    }
 4904|       |
 4905|  84.5k|    janet_free(bitset);
  ------------------
  |  | 2415|  84.5k|#define janet_free(X) free((X))
  ------------------
 4906|  84.5k|}
janet_bytecode_remove_noops:
 4910|   194k|void janet_bytecode_remove_noops(JanetFuncDef *def) {
 4911|       |
 4912|       |    /* Get an instruction rewrite map so we can rewrite jumps */
 4913|   194k|    uint32_t *pc_map = janet_smalloc(sizeof(uint32_t) * (1 + def->bytecode_length));
 4914|   194k|    uint32_t new_bytecode_length = 0;
 4915|  35.4M|    for (int32_t i = 0; i < def->bytecode_length; i++) {
  ------------------
  |  Branch (4915:25): [True: 35.3M, False: 194k]
  ------------------
 4916|  35.3M|        uint32_t instr = def->bytecode[i];
 4917|  35.3M|        uint32_t opcode = instr & 0x7F;
 4918|  35.3M|        pc_map[i] = new_bytecode_length;
 4919|  35.3M|        if (opcode != JOP_NOOP) {
  ------------------
  |  Branch (4919:13): [True: 33.3M, False: 1.97M]
  ------------------
 4920|  33.3M|            new_bytecode_length++;
 4921|  33.3M|        }
 4922|  35.3M|    }
 4923|   194k|    pc_map[def->bytecode_length] = new_bytecode_length;
 4924|       |
 4925|       |    /* Linear scan rewrite bytecode and sourcemap. Also fix jumps. */
 4926|   194k|    int32_t j = 0;
 4927|  35.4M|    for (int32_t i = 0; i < def->bytecode_length; i++) {
  ------------------
  |  Branch (4927:25): [True: 35.3M, False: 194k]
  ------------------
 4928|  35.3M|        uint32_t instr = def->bytecode[i];
 4929|  35.3M|        uint32_t opcode = instr & 0x7F;
 4930|  35.3M|        int32_t old_jump_target = 0;
 4931|  35.3M|        int32_t new_jump_target = 0;
 4932|  35.3M|        switch (opcode) {
 4933|  1.97M|            case JOP_NOOP:
  ------------------
  |  Branch (4933:13): [True: 1.97M, False: 33.3M]
  ------------------
 4934|  1.97M|                continue;
 4935|  1.06k|            case JOP_JUMP:
  ------------------
  |  Branch (4935:13): [True: 1.06k, False: 35.3M]
  ------------------
 4936|       |                /* relative pc is in DS field of instruction */
 4937|  1.06k|                old_jump_target = i + (((int32_t)instr) >> 8);
 4938|  1.06k|                janet_assert(old_jump_target >= 0, "bounds");
  ------------------
  |  |  389|  1.06k|#define janet_assert(c, m) do { \
  |  |  390|  1.06k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 1.06k]
  |  |  ------------------
  |  |  391|  1.06k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 1.06k]
  |  |  ------------------
  ------------------
 4939|  1.06k|                janet_assert(old_jump_target < def->bytecode_length, "bounds");
  ------------------
  |  |  389|  1.06k|#define janet_assert(c, m) do { \
  |  |  390|  1.06k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 1.06k]
  |  |  ------------------
  |  |  391|  1.06k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 1.06k]
  |  |  ------------------
  ------------------
 4940|  1.06k|                new_jump_target = pc_map[old_jump_target];
 4941|  1.06k|                instr += (uint32_t)(new_jump_target - old_jump_target + (i - j)) << 8;
 4942|  1.06k|                break;
 4943|      0|            case JOP_JUMP_IF:
  ------------------
  |  Branch (4943:13): [True: 0, False: 35.3M]
  ------------------
 4944|  1.06k|            case JOP_JUMP_IF_NIL:
  ------------------
  |  Branch (4944:13): [True: 1.06k, False: 35.3M]
  ------------------
 4945|  11.6k|            case JOP_JUMP_IF_NOT:
  ------------------
  |  Branch (4945:13): [True: 10.6k, False: 35.2M]
  ------------------
 4946|  24.2k|            case JOP_JUMP_IF_NOT_NIL:
  ------------------
  |  Branch (4946:13): [True: 12.5k, False: 35.2M]
  ------------------
 4947|       |                /* relative pc is in ES field of instruction */
 4948|  24.2k|                old_jump_target = i + (((int32_t)instr) >> 16);
 4949|  24.2k|                janet_assert(old_jump_target >= 0, "bounds");
  ------------------
  |  |  389|  24.2k|#define janet_assert(c, m) do { \
  |  |  390|  24.2k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 24.2k]
  |  |  ------------------
  |  |  391|  24.2k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 24.2k]
  |  |  ------------------
  ------------------
 4950|  24.2k|                janet_assert(old_jump_target < def->bytecode_length, "bounds");
  ------------------
  |  |  389|  24.2k|#define janet_assert(c, m) do { \
  |  |  390|  24.2k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 24.2k]
  |  |  ------------------
  |  |  391|  24.2k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 24.2k]
  |  |  ------------------
  ------------------
 4951|  24.2k|                new_jump_target = pc_map[old_jump_target];
 4952|  24.2k|                instr += (uint32_t)(new_jump_target - old_jump_target + (i - j)) << 16;
 4953|  24.2k|                break;
 4954|  33.3M|            default:
  ------------------
  |  Branch (4954:13): [True: 33.3M, False: 1.99M]
  ------------------
 4955|  33.3M|                break;
 4956|  35.3M|        }
 4957|  33.3M|        def->bytecode[j] = instr;
 4958|  33.3M|        if (def->sourcemap != NULL) {
  ------------------
  |  Branch (4958:13): [True: 33.3M, False: 0]
  ------------------
 4959|  33.3M|            def->sourcemap[j] = def->sourcemap[i];
 4960|  33.3M|        }
 4961|  33.3M|        j++;
 4962|  33.3M|    }
 4963|       |
 4964|       |    /* Rewrite symbolmap */
 4965|   194k|    rewrite_symbolmap(def, pc_map);
 4966|       |
 4967|   194k|    def->bytecode_length = new_bytecode_length;
 4968|   194k|    def->bytecode = janet_realloc(def->bytecode, def->bytecode_length * sizeof(uint32_t));
  ------------------
  |  | 2409|   194k|#define janet_realloc(X, Y) realloc((X), (Y))
  ------------------
 4969|   194k|    janet_sfree(pc_map);
 4970|   194k|}
janet_bytecode_jump_threading:
 4974|   194k|void janet_bytecode_jump_threading(JanetFuncDef *def) {
 4975|   194k|    int32_t blen = def->bytecode_length;
 4976|   194k|    uint32_t *code = def->bytecode;
 4977|   194k|    int32_t *codes = (int32_t *)code;
 4978|   194k|    int recur = 1;
 4979|   389k|    while (recur) {
  ------------------
  |  Branch (4979:12): [True: 194k, False: 194k]
  ------------------
 4980|   194k|        recur = 0;
 4981|  35.4M|        for (int32_t i = 0; i < blen; i++) {
  ------------------
  |  Branch (4981:29): [True: 35.3M, False: 194k]
  ------------------
 4982|  35.3M|            int32_t target;
 4983|  35.3M|            int is_branch = 0;
 4984|  35.3M|            switch (code[i] & 0x7F) {
 4985|  28.9M|                default:
  ------------------
  |  Branch (4985:17): [True: 28.9M, False: 6.31M]
  ------------------
 4986|  28.9M|                    continue;
 4987|  28.9M|                case JOP_MOVE_NEAR:
  ------------------
  |  Branch (4987:17): [True: 3.20M, False: 32.0M]
  ------------------
 4988|  6.29M|                case JOP_MOVE_FAR:
  ------------------
  |  Branch (4988:17): [True: 3.08M, False: 32.2M]
  ------------------
 4989|  6.29M|                    if (((codes[i] >> 8) & 0xFF) == (codes[i] >> 16)) {
  ------------------
  |  Branch (4989:25): [True: 0, False: 6.29M]
  ------------------
 4990|       |                        /* Not really jump threading, but an easy optimization */
 4991|      0|                        code[i] = JOP_NOOP;
 4992|      0|                    }
 4993|  6.29M|                    continue;
 4994|  1.06k|                case JOP_JUMP:
  ------------------
  |  Branch (4994:17): [True: 1.06k, False: 35.3M]
  ------------------
 4995|  1.06k|                    target = i + (codes[i] >> 8);
 4996|  1.06k|                    break;
 4997|      0|                case JOP_JUMP_IF:
  ------------------
  |  Branch (4997:17): [True: 0, False: 35.3M]
  ------------------
 4998|  10.6k|                case JOP_JUMP_IF_NOT:
  ------------------
  |  Branch (4998:17): [True: 10.6k, False: 35.2M]
  ------------------
 4999|  11.6k|                case JOP_JUMP_IF_NIL:
  ------------------
  |  Branch (4999:17): [True: 1.06k, False: 35.3M]
  ------------------
 5000|  24.2k|                case JOP_JUMP_IF_NOT_NIL:
  ------------------
  |  Branch (5000:17): [True: 12.5k, False: 35.2M]
  ------------------
 5001|  24.2k|                    is_branch = 1;
 5002|  24.2k|                    target = i + (codes[i] >> 16);
 5003|  24.2k|                    break;
 5004|  35.3M|            }
 5005|  25.2k|            if (target == i) continue; /* infinite loop */
  ------------------
  |  Branch (5005:17): [True: 0, False: 25.2k]
  ------------------
 5006|  25.2k|            if (target == i + 1) {
  ------------------
  |  Branch (5006:17): [True: 0, False: 25.2k]
  ------------------
 5007|      0|                code[i] = JOP_NOOP;
 5008|      0|                recur = 1;
 5009|      0|                continue;
 5010|      0|            }
 5011|  25.2k|            while ((code[target] & 0x7F) == JOP_NOOP) { /* Skip noops */
  ------------------
  |  Branch (5011:20): [True: 0, False: 25.2k]
  ------------------
 5012|      0|                target++;
 5013|      0|            }
 5014|  25.2k|            if ((code[target] & 0x7F) == JOP_RETURN_NIL && !is_branch) {
  ------------------
  |  Branch (5014:17): [True: 516, False: 24.7k]
  |  Branch (5014:60): [True: 0, False: 516]
  ------------------
 5015|      0|                code[i] = JOP_RETURN_NIL;
 5016|      0|                recur = 1;
 5017|      0|                continue;
 5018|      0|            }
 5019|       |            /* update target */
 5020|  25.2k|            if ((code[target] & 0x7F) == JOP_JUMP) {
  ------------------
  |  Branch (5020:17): [True: 0, False: 25.2k]
  ------------------
 5021|      0|                target += (codes[target] >> 8);
 5022|      0|            }
 5023|  25.2k|            uint32_t newcode;
 5024|  25.2k|            if (is_branch) {
  ------------------
  |  Branch (5024:17): [True: 24.2k, False: 1.06k]
  ------------------
 5025|  24.2k|                newcode = (code[i] & 0xFFFF) | ((uint32_t)(target - i) << 16);
 5026|  24.2k|            } else {
 5027|  1.06k|                newcode = (code[i] & 0xFF) | ((uint32_t)(target - i) << 8);
 5028|  1.06k|            }
 5029|  25.2k|            if (newcode != code[i]) recur = 1;
  ------------------
  |  Branch (5029:17): [True: 0, False: 25.2k]
  ------------------
 5030|  25.2k|            code[i] = newcode;
 5031|  25.2k|        }
 5032|   194k|    }
 5033|   194k|}
janet_bytecode_movopt_full:
 5275|   194k|void janet_bytecode_movopt_full(JanetFuncDef *def, BytecodeBB *blocks, int32_t nblocks) {
 5276|       |
 5277|       |    /* Allocate nblocks bitmaps */
 5278|   194k|    int32_t wordlen = ((def->slotcount - 1) >> 5) + 1;
 5279|   194k|    janet_assert(wordlen > 0, "bad len");
  ------------------
  |  |  389|   194k|#define janet_assert(c, m) do { \
  |  |  390|   194k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 194k]
  |  |  ------------------
  |  |  391|   194k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 194k]
  |  |  ------------------
  ------------------
 5280|   194k|    uint32_t **bitsets = array_allocate(sizeof(uint32_t *), nblocks);
 5281|   428k|    for (int32_t block_i = 0; block_i < nblocks; block_i++) {
  ------------------
  |  Branch (5281:31): [True: 234k, False: 194k]
  ------------------
 5282|   234k|        bitsets[block_i] = array_allocate(sizeof(uint32_t), wordlen);
 5283|   234k|        memset(bitsets[block_i], 0, wordlen * sizeof(uint32_t));
 5284|   234k|    }
 5285|       |
 5286|       |    /* Find all local block inputs */
 5287|   428k|    for (int32_t block_i = 0; block_i < nblocks; block_i++) {
  ------------------
  |  Branch (5287:31): [True: 234k, False: 194k]
  ------------------
 5288|   234k|        janet_bytecode_movopt_basic_block(def, blocks[block_i], bitsets[block_i], 1);
 5289|   234k|    }
 5290|       |
 5291|       |    /* Propagate inputs to predecessors */
 5292|   194k|    int recur = 1;
 5293|   391k|    while (recur) {
  ------------------
  |  Branch (5293:12): [True: 197k, False: 194k]
  ------------------
 5294|   197k|        recur = 0;
 5295|   704k|        for (int32_t block_i = 0; block_i < nblocks; block_i++) {
  ------------------
  |  Branch (5295:35): [True: 507k, False: 197k]
  ------------------
 5296|  1.52M|            for (int j = 0; j < 2; j++) {
  ------------------
  |  Branch (5296:29): [True: 1.01M, False: 507k]
  ------------------
 5297|  1.01M|                int32_t block_next = blocks[block_i].next[j];
 5298|  1.01M|                if (block_next != -1) {
  ------------------
  |  Branch (5298:21): [True: 577k, False: 436k]
  ------------------
 5299|  3.32M|                    for (int32_t i = 0; i < wordlen; i++) {
  ------------------
  |  Branch (5299:41): [True: 2.74M, False: 577k]
  ------------------
 5300|  2.74M|                        uint32_t before = bitsets[block_i][i];
 5301|  2.74M|                        bitsets[block_i][i] |= bitsets[block_next][i];
 5302|  2.74M|                        if (before != bitsets[block_i][i]) recur = 1;
  ------------------
  |  Branch (5302:29): [True: 61.3k, False: 2.68M]
  ------------------
 5303|  2.74M|                    }
 5304|   577k|                }
 5305|  1.01M|            }
 5306|   507k|        }
 5307|   197k|    }
 5308|       |
 5309|       |    /* Remove extra writes */
 5310|   428k|    for (int32_t block_i = 0; block_i < nblocks; block_i++) {
  ------------------
  |  Branch (5310:31): [True: 234k, False: 194k]
  ------------------
 5311|   234k|        janet_bytecode_movopt_basic_block(def, blocks[block_i], bitsets[block_i], 0);
 5312|   234k|    }
 5313|       |
 5314|       |    /* Cleanup */
 5315|   428k|    for (int32_t block_i = 0; block_i < nblocks; block_i++) {
  ------------------
  |  Branch (5315:31): [True: 234k, False: 194k]
  ------------------
 5316|   234k|        janet_free(bitsets[block_i]);
  ------------------
  |  | 2415|   234k|#define janet_free(X) free((X))
  ------------------
 5317|   234k|    }
 5318|   194k|    janet_free(bitsets);
  ------------------
  |  | 2415|   194k|#define janet_free(X) free((X))
  ------------------
 5319|   194k|}
janet_bytecode_compact_slots:
 5322|   180k|void janet_bytecode_compact_slots(JanetFuncDef *def) {
 5323|       |    /* TODO - we would need to be somewhat careful in that case. */
 5324|   180k|    if (def->slotcount > 256) return;
  ------------------
  |  Branch (5324:9): [True: 312, False: 180k]
  ------------------
 5325|       |    /* Remap: old slot -> new slot */
 5326|       |    /* Invert: new slot -> old slot */
 5327|   180k|    int32_t *remap = array_allocate(sizeof(int32_t), def->slotcount * 2);
 5328|   180k|    int32_t *invert = remap + def->slotcount;
 5329|   180k|    uint32_t *code = def->bytecode;
 5330|   180k|    int32_t len = def->bytecode_length;
 5331|   180k|    int32_t next_slot = def->arity;
 5332|   180k|    int32_t greatest = 0;
 5333|   628k|    for (int32_t i = 0; i < def->slotcount * 2; i++) remap[i] = -1;
  ------------------
  |  Branch (5333:25): [True: 447k, False: 180k]
  ------------------
 5334|       |    /* Pin closure slots for now */
 5335|   180k|    if (def->closure_bitset) {
  ------------------
  |  Branch (5335:9): [True: 691, False: 179k]
  ------------------
 5336|  20.6k|        for (int32_t i = 0; i < def->slotcount; i++) {
  ------------------
  |  Branch (5336:29): [True: 19.9k, False: 691]
  ------------------
 5337|  19.9k|            if (bs_read_bit(def->closure_bitset, i)) {
  ------------------
  |  Branch (5337:17): [True: 1.17k, False: 18.7k]
  ------------------
 5338|  1.17k|                remap[i] = i;
 5339|  1.17k|                invert[i] = i;
 5340|  1.17k|                greatest = i;
 5341|  1.17k|            }
 5342|  19.9k|        }
 5343|    691|    }
 5344|       |    /* Pin arguments - TODO slots for unused arguments could be reused */
 5345|   184k|    for (int32_t i = 0; i < def->arity && i < def->slotcount; i++) {
  ------------------
  |  Branch (5345:25): [True: 4.30k, False: 180k]
  |  Branch (5345:43): [True: 4.30k, False: 0]
  ------------------
 5346|  4.30k|        remap[i] = i;
 5347|  4.30k|        invert[i] = i;
 5348|  4.30k|        if (i > greatest) greatest = i;
  ------------------
  |  Branch (5348:13): [True: 1.92k, False: 2.38k]
  ------------------
 5349|  4.30k|    }
 5350|   180k|    if (def->flags & (JANET_FUNCDEF_FLAG_VARARG | JANET_FUNCDEF_FLAG_NAMEDARGS | JANET_FUNCDEF_FLAG_STRUCTARG)) {
  ------------------
  |  | 1097|   180k|#define JANET_FUNCDEF_FLAG_VARARG 0x10000
  ------------------
                  if (def->flags & (JANET_FUNCDEF_FLAG_VARARG | JANET_FUNCDEF_FLAG_NAMEDARGS | JANET_FUNCDEF_FLAG_STRUCTARG)) {
  ------------------
  |  | 1107|   180k|#define JANET_FUNCDEF_FLAG_NAMEDARGS 0x4000000
  ------------------
                  if (def->flags & (JANET_FUNCDEF_FLAG_VARARG | JANET_FUNCDEF_FLAG_NAMEDARGS | JANET_FUNCDEF_FLAG_STRUCTARG)) {
  ------------------
  |  | 1105|   180k|#define JANET_FUNCDEF_FLAG_STRUCTARG 0x1000000
  ------------------
  |  Branch (5350:9): [True: 6, False: 180k]
  ------------------
 5351|      6|        remap[def->arity] = def->arity;
 5352|      6|        invert[def->arity] = def->arity;
 5353|      6|        next_slot++;
 5354|      6|    }
 5355|       |    /* Rename 8 bit slots first, then larger slots */
 5356|   641k|    for (int32_t pc = 0; pc < len; pc++) {
  ------------------
  |  Branch (5356:26): [True: 461k, False: 180k]
  ------------------
 5357|   461k|        enum JanetInstructionType itype = janet_instructions[code[pc] & 0x7F];
 5358|   461k|        int nslots = 0;
 5359|   461k|        uint32_t slots[3];
 5360|       |        /* rewrite slots. For now, assume adding slot delta will not overflow any slot indices */
 5361|   461k|        switch (itype) {
  ------------------
  |  Branch (5361:17): [True: 461k, False: 0]
  ------------------
 5362|    946|            case JINT_0:
  ------------------
  |  Branch (5362:13): [True: 946, False: 460k]
  ------------------
 5363|  1.21k|            case JINT_L:
  ------------------
  |  Branch (5363:13): [True: 269, False: 460k]
  ------------------
 5364|  1.21k|                continue;
 5365|   185k|            case JINT_S:
  ------------------
  |  Branch (5365:13): [True: 185k, False: 275k]
  ------------------
 5366|   185k|                nslots = 1;
 5367|   185k|                slots[0] = (code[pc] >> 8) & 0xFFFFFFU;
 5368|   185k|                break;
 5369|  7.16k|            case JINT_SES:
  ------------------
  |  Branch (5369:13): [True: 7.16k, False: 454k]
  ------------------
 5370|  11.5k|            case JINT_SI:
  ------------------
  |  Branch (5370:13): [True: 4.33k, False: 456k]
  ------------------
 5371|  11.5k|            case JINT_SU:
  ------------------
  |  Branch (5371:13): [True: 0, False: 461k]
  ------------------
 5372|  11.5k|            case JINT_ST:
  ------------------
  |  Branch (5372:13): [True: 0, False: 461k]
  ------------------
 5373|  22.8k|            case JINT_SL:
  ------------------
  |  Branch (5373:13): [True: 11.3k, False: 449k]
  ------------------
 5374|   111k|            case JINT_SD:
  ------------------
  |  Branch (5374:13): [True: 88.2k, False: 372k]
  ------------------
 5375|   236k|            case JINT_SC:
  ------------------
  |  Branch (5375:13): [True: 124k, False: 336k]
  ------------------
 5376|   236k|                nslots = 1;
 5377|   236k|                slots[0] = (code[pc] >> 8) & 0xFFU;
 5378|   236k|                break;
 5379|  6.91k|            case JINT_SS:
  ------------------
  |  Branch (5379:13): [True: 6.91k, False: 454k]
  ------------------
 5380|  6.91k|                nslots = 2;
 5381|  6.91k|                slots[0] = (code[pc] >> 8) & 0xFFU;
 5382|  6.91k|                slots[1] = (code[pc] >> 16) & 0xFFFFU;
 5383|  6.91k|                break;
 5384|    585|            case JINT_SSI:
  ------------------
  |  Branch (5384:13): [True: 585, False: 460k]
  ------------------
 5385|  2.71k|            case JINT_SSU:
  ------------------
  |  Branch (5385:13): [True: 2.12k, False: 459k]
  ------------------
 5386|  2.71k|                nslots = 2;
 5387|  2.71k|                slots[0] = (code[pc] >> 8) & 0xFFU;
 5388|  2.71k|                slots[1] = (code[pc] >> 16) & 0xFFU;
 5389|  2.71k|                break;
 5390|  28.7k|            case JINT_SSS:
  ------------------
  |  Branch (5390:13): [True: 28.7k, False: 432k]
  ------------------
 5391|  28.7k|                nslots = 3;
 5392|  28.7k|                slots[0] = (code[pc] >> 8) & 0xFFU;
 5393|  28.7k|                slots[1] = (code[pc] >> 16) & 0xFFU;
 5394|  28.7k|                slots[2] = code[pc] >> 24;
 5395|  28.7k|                break;
 5396|   461k|        }
 5397|       |        /* Find new slots */
 5398|   987k|        for (int i = 0; i < nslots; i++) {
  ------------------
  |  Branch (5398:25): [True: 527k, False: 460k]
  ------------------
 5399|   527k|            if (remap[slots[i]] == -1) {
  ------------------
  |  Branch (5399:17): [True: 190k, False: 336k]
  ------------------
 5400|   191k|                while (invert[next_slot] != -1) next_slot++;
  ------------------
  |  Branch (5400:24): [True: 549, False: 190k]
  ------------------
 5401|   190k|                remap[slots[i]] = next_slot;
 5402|   190k|                invert[next_slot] = slots[i];
 5403|   190k|                next_slot++;
 5404|   190k|            }
 5405|   527k|            slots[i] = remap[slots[i]];
 5406|   527k|        }
 5407|       |        /* Now rewrite */
 5408|   460k|        switch (itype) {
  ------------------
  |  Branch (5408:17): [True: 460k, False: 0]
  ------------------
 5409|      0|            case JINT_0:
  ------------------
  |  Branch (5409:13): [True: 0, False: 460k]
  ------------------
 5410|      0|            case JINT_L:
  ------------------
  |  Branch (5410:13): [True: 0, False: 460k]
  ------------------
 5411|      0|                continue;
 5412|   185k|            case JINT_S:
  ------------------
  |  Branch (5412:13): [True: 185k, False: 274k]
  ------------------
 5413|   185k|                code[pc] = (code[pc] & 0xFFU) | (slots[0] << 8);
 5414|   185k|                break;
 5415|  7.16k|            case JINT_SES:
  ------------------
  |  Branch (5415:13): [True: 7.16k, False: 452k]
  ------------------
 5416|  11.5k|            case JINT_SI:
  ------------------
  |  Branch (5416:13): [True: 4.33k, False: 455k]
  ------------------
 5417|  11.5k|            case JINT_SU:
  ------------------
  |  Branch (5417:13): [True: 0, False: 460k]
  ------------------
 5418|  11.5k|            case JINT_ST:
  ------------------
  |  Branch (5418:13): [True: 0, False: 460k]
  ------------------
 5419|  22.8k|            case JINT_SL:
  ------------------
  |  Branch (5419:13): [True: 11.3k, False: 448k]
  ------------------
 5420|   111k|            case JINT_SD:
  ------------------
  |  Branch (5420:13): [True: 88.2k, False: 371k]
  ------------------
 5421|   236k|            case JINT_SC:
  ------------------
  |  Branch (5421:13): [True: 124k, False: 335k]
  ------------------
 5422|   236k|                code[pc] = (code[pc] & 0xFFFF00FFU) | ((slots[0] & 0xFF) << 8);
 5423|   236k|                break;
 5424|  6.91k|            case JINT_SS:
  ------------------
  |  Branch (5424:13): [True: 6.91k, False: 453k]
  ------------------
 5425|  6.91k|                code[pc] = (code[pc] & 0xFFU) | ((slots[0] & 0xFF) << 8) | (slots[1] << 16);
 5426|  6.91k|                break;
 5427|    585|            case JINT_SSI:
  ------------------
  |  Branch (5427:13): [True: 585, False: 459k]
  ------------------
 5428|  2.71k|            case JINT_SSU:
  ------------------
  |  Branch (5428:13): [True: 2.12k, False: 457k]
  ------------------
 5429|  2.71k|                code[pc] = (code[pc] & 0xFF0000FFU) | ((slots[0] & 0xFF) << 8) | ((slots[1] & 0xFF) << 16);
 5430|  2.71k|                break;
 5431|  28.7k|            case JINT_SSS:
  ------------------
  |  Branch (5431:13): [True: 28.7k, False: 431k]
  ------------------
 5432|  28.7k|                code[pc] = (code[pc] & 0xFFU) | ((slots[0] & 0xFF) << 8)  | ((slots[1] & 0xFF) << 16) | (slots[2] << 24);
 5433|  28.7k|                break;
 5434|   460k|        }
 5435|   460k|    }
 5436|       |    /* Fix symbol mappings */
 5437|   180k|    int32_t smout = 0;
 5438|  2.55M|    for (int32_t i = 0; i < def->symbolmap_length; i++) {
  ------------------
  |  Branch (5438:25): [True: 2.37M, False: 180k]
  ------------------
 5439|  2.37M|        if (def->symbolmap[i].birth_pc == UINT32_MAX) {
  ------------------
  |  Branch (5439:13): [True: 2.34M, False: 33.5k]
  ------------------
 5440|  2.34M|            smout++;
 5441|  2.34M|            continue; /* upvalue */
 5442|  2.34M|        }
 5443|  33.5k|        JanetSymbolMap sm = def->symbolmap[i];
 5444|  33.5k|        uint32_t old_slot = sm.slot_index;
 5445|  33.5k|        if (remap[old_slot] != -1) { /* If not remapped, drop! */
  ------------------
  |  Branch (5445:13): [True: 6.20k, False: 27.3k]
  ------------------
 5446|  6.20k|            sm.slot_index = (uint32_t) remap[old_slot];
 5447|  6.20k|            def->symbolmap[smout++] = sm;
 5448|  6.20k|        }
 5449|  33.5k|    }
 5450|   180k|    def->symbolmap_length = smout;
 5451|   180k|    if (greatest + 1 > next_slot) next_slot = greatest + 1;
  ------------------
  |  Branch (5451:9): [True: 497, False: 179k]
  ------------------
 5452|   180k|    def->slotcount = next_slot;
 5453|   180k|    janet_free(remap);
  ------------------
  |  | 2415|   180k|#define janet_free(X) free((X))
  ------------------
 5454|   180k|}
janet_bytecode_optimize:
 5596|   180k|void janet_bytecode_optimize(JanetFuncDef *def, int32_t level) {
 5597|   180k|    int32_t delta;
 5598|       |#ifdef JANET_DEBUG
 5599|       |    int result = janet_verify(def);
 5600|       |    if (result != 0) {
 5601|       |        for (int32_t i = 0; i < def->bytecode_length; i++) {
 5602|       |            janet_eprintf("%4d: %Q\n", i, janet_asm_decode_instruction(def->bytecode[i]));
 5603|       |        }
 5604|       |    }
 5605|       |    janet_assert(result == 0, "input bytecode bad");
 5606|       |#endif
 5607|   180k|    if (level >= 0) {
  ------------------
  |  Branch (5607:9): [True: 180k, False: 0]
  ------------------
 5608|   194k|        do { /* Fixpoint for instruction removal */
 5609|   194k|            int32_t before = def->bytecode_length;
 5610|   194k|            janet_bytecode_jump_threading(def);
 5611|   194k|            {
 5612|   194k|                int32_t nblocks = 0;
 5613|   194k|                BytecodeBB *basic_blocks = janet_bytecode_basic_blocks(def, &nblocks);
 5614|   194k|                janet_assert(nblocks > 0, "no blocks");
  ------------------
  |  |  389|   194k|#define janet_assert(c, m) do { \
  |  |  390|   194k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 194k]
  |  |  ------------------
  |  |  391|   194k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 194k]
  |  |  ------------------
  ------------------
 5615|   194k|                if (level >= 1) {
  ------------------
  |  Branch (5615:21): [True: 0, False: 194k]
  ------------------
 5616|       |                    /* TODO - allow limited value numbering at optimize = 0.
 5617|       |                     * Constant folding can currently remove named slots which can break debug info */
 5618|      0|                    janet_bytecode_local_value_numbering(def, basic_blocks, nblocks);
 5619|      0|                }
 5620|       |                /* This will currently also break debug info, although less severely than
 5621|       |                 * value numbering. At optimize=0, we should pin all named slots but allow
 5622|       |                 * constant propogation for anonymous intermediate computations */
 5623|   194k|                janet_bytecode_movopt_full(def, basic_blocks, nblocks);
 5624|   194k|                janet_free(basic_blocks);
  ------------------
  |  | 2415|   194k|#define janet_free(X) free((X))
  ------------------
 5625|   194k|            }
 5626|      0|            janet_bytecode_dead_code(def);
 5627|   194k|            janet_bytecode_remove_noops(def);
 5628|   194k|            delta = def->bytecode_length - before;
 5629|       |#ifdef JANET_BOOTSTRAP
 5630|       |            total_optimize_fixpoint_loops++;
 5631|       |#endif
 5632|   194k|        } while (delta < 0);
  ------------------
  |  Branch (5632:18): [True: 13.9k, False: 180k]
  ------------------
 5633|   180k|        janet_bytecode_remove_unused_constants(def);
 5634|   180k|        janet_bytecode_remove_unused_closures(def);
 5635|   180k|        janet_bytecode_compact_slots(def);
 5636|   180k|    }
 5637|       |#ifdef JANET_BOOTSTRAP
 5638|       |    total_instruction_count += def->bytecode_length;
 5639|       |    total_funcdefs_optimized++;
 5640|       |#endif
 5641|   180k|}
janet_verify:
 5644|   142k|int janet_verify(JanetFuncDef *def) {
 5645|   142k|    int vargs = !!(def->flags & JANET_FUNCDEF_FLAG_VARARG);
  ------------------
  |  | 1097|   142k|#define JANET_FUNCDEF_FLAG_VARARG 0x10000
  ------------------
 5646|   142k|    int32_t i;
 5647|   142k|    int32_t maxslot = def->arity + vargs;
 5648|   142k|    int32_t sc = def->slotcount;
 5649|       |
 5650|   142k|    if (def->environments_length > 256) return 15;
  ------------------
  |  Branch (5650:9): [True: 0, False: 142k]
  ------------------
 5651|   142k|    if (def->bytecode_length == 0) return 1;
  ------------------
  |  Branch (5651:9): [True: 0, False: 142k]
  ------------------
 5652|       |
 5653|   142k|    if (maxslot > sc) return 2;
  ------------------
  |  Branch (5653:9): [True: 0, False: 142k]
  ------------------
 5654|       |
 5655|       |    /* Verify each instruction */
 5656|  4.08M|    for (i = 0; i < def->bytecode_length; i++) {
  ------------------
  |  Branch (5656:17): [True: 3.94M, False: 142k]
  ------------------
 5657|  3.94M|        uint32_t instr = def->bytecode[i];
 5658|       |        /* Check for invalid instructions */
 5659|  3.94M|        if ((instr & 0x7F) >= JOP_INSTRUCTION_COUNT) {
  ------------------
  |  Branch (5659:13): [True: 0, False: 3.94M]
  ------------------
 5660|      0|            return 3;
 5661|      0|        }
 5662|  3.94M|        enum JanetInstructionType type = janet_instructions[instr & 0x7F];
 5663|  3.94M|        switch (type) {
  ------------------
  |  Branch (5663:17): [True: 3.94M, False: 0]
  ------------------
 5664|  20.5k|            case JINT_0:
  ------------------
  |  Branch (5664:13): [True: 20.5k, False: 3.92M]
  ------------------
 5665|  20.5k|                continue;
 5666|   758k|            case JINT_S: {
  ------------------
  |  Branch (5666:13): [True: 758k, False: 3.18M]
  ------------------
 5667|   758k|                if ((int32_t)(instr >> 8) >= sc) return 4;
  ------------------
  |  Branch (5667:21): [True: 0, False: 758k]
  ------------------
 5668|   758k|                continue;
 5669|   758k|            }
 5670|   758k|            case JINT_SI:
  ------------------
  |  Branch (5670:13): [True: 90.5k, False: 3.85M]
  ------------------
 5671|  90.5k|            case JINT_SU:
  ------------------
  |  Branch (5671:13): [True: 0, False: 3.94M]
  ------------------
 5672|  90.5k|            case JINT_ST: {
  ------------------
  |  Branch (5672:13): [True: 0, False: 3.94M]
  ------------------
 5673|  90.5k|                if ((int32_t)((instr >> 8) & 0xFF) >= sc) return 4;
  ------------------
  |  Branch (5673:21): [True: 0, False: 90.5k]
  ------------------
 5674|  90.5k|                continue;
 5675|  90.5k|            }
 5676|   166k|            case JINT_L: {
  ------------------
  |  Branch (5676:13): [True: 166k, False: 3.78M]
  ------------------
 5677|   166k|                int32_t jumpdest = i + (((int32_t)instr) >> 8);
 5678|   166k|                if (jumpdest < 0 || jumpdest >= def->bytecode_length) return 5;
  ------------------
  |  Branch (5678:21): [True: 0, False: 166k]
  |  Branch (5678:37): [True: 0, False: 166k]
  ------------------
 5679|   166k|                continue;
 5680|   166k|            }
 5681|  1.05M|            case JINT_SS: {
  ------------------
  |  Branch (5681:13): [True: 1.05M, False: 2.89M]
  ------------------
 5682|  1.05M|                if ((int32_t)((instr >> 8) & 0xFF) >= sc ||
  ------------------
  |  Branch (5682:21): [True: 0, False: 1.05M]
  ------------------
 5683|  1.05M|                        (int32_t)(instr >> 16) >= sc) return 4;
  ------------------
  |  Branch (5683:25): [True: 0, False: 1.05M]
  ------------------
 5684|  1.05M|                continue;
 5685|  1.05M|            }
 5686|  1.05M|            case JINT_SSI:
  ------------------
  |  Branch (5686:13): [True: 69.6k, False: 3.87M]
  ------------------
 5687|   111k|            case JINT_SSU: {
  ------------------
  |  Branch (5687:13): [True: 41.3k, False: 3.90M]
  ------------------
 5688|   111k|                if ((int32_t)((instr >> 8) & 0xFF) >= sc ||
  ------------------
  |  Branch (5688:21): [True: 0, False: 111k]
  ------------------
 5689|   111k|                        (int32_t)((instr >> 16) & 0xFF) >= sc) return 4;
  ------------------
  |  Branch (5689:25): [True: 0, False: 111k]
  ------------------
 5690|   111k|                continue;
 5691|   111k|            }
 5692|   288k|            case JINT_SL: {
  ------------------
  |  Branch (5692:13): [True: 288k, False: 3.65M]
  ------------------
 5693|   288k|                int32_t jumpdest = i + (((int32_t)instr) >> 16);
 5694|   288k|                if ((int32_t)((instr >> 8) & 0xFF) >= sc) return 4;
  ------------------
  |  Branch (5694:21): [True: 0, False: 288k]
  ------------------
 5695|   288k|                if (jumpdest < 0 || jumpdest >= def->bytecode_length) return 5;
  ------------------
  |  Branch (5695:21): [True: 0, False: 288k]
  |  Branch (5695:37): [True: 0, False: 288k]
  ------------------
 5696|   288k|                continue;
 5697|   288k|            }
 5698|   531k|            case JINT_SSS: {
  ------------------
  |  Branch (5698:13): [True: 531k, False: 3.41M]
  ------------------
 5699|   531k|                if (((int32_t)(instr >> 8) & 0xFF) >= sc ||
  ------------------
  |  Branch (5699:21): [True: 0, False: 531k]
  ------------------
 5700|   531k|                        ((int32_t)(instr >> 16) & 0xFF) >= sc ||
  ------------------
  |  Branch (5700:25): [True: 0, False: 531k]
  ------------------
 5701|   531k|                        ((int32_t)(instr >> 24) & 0xFF) >= sc) return 4;
  ------------------
  |  Branch (5701:25): [True: 0, False: 531k]
  ------------------
 5702|   531k|                continue;
 5703|   531k|            }
 5704|   531k|            case JINT_SD: {
  ------------------
  |  Branch (5704:13): [True: 41.6k, False: 3.90M]
  ------------------
 5705|  41.6k|                if ((int32_t)((instr >> 8) & 0xFF) >= sc) return 4;
  ------------------
  |  Branch (5705:21): [True: 0, False: 41.6k]
  ------------------
 5706|  41.6k|                if ((int32_t)(instr >> 16) >= def->defs_length) return 6;
  ------------------
  |  Branch (5706:21): [True: 0, False: 41.6k]
  ------------------
 5707|  41.6k|                continue;
 5708|  41.6k|            }
 5709|   720k|            case JINT_SC: {
  ------------------
  |  Branch (5709:13): [True: 720k, False: 3.22M]
  ------------------
 5710|   720k|                if ((int32_t)((instr >> 8) & 0xFF) >= sc) return 4;
  ------------------
  |  Branch (5710:21): [True: 0, False: 720k]
  ------------------
 5711|   720k|                if ((int32_t)(instr >> 16) >= def->constants_length) return 7;
  ------------------
  |  Branch (5711:21): [True: 0, False: 720k]
  ------------------
 5712|   720k|                continue;
 5713|   720k|            }
 5714|   720k|            case JINT_SES: {
  ------------------
  |  Branch (5714:13): [True: 162k, False: 3.78M]
  ------------------
 5715|       |                /* How can we check the last slot index? We need info parent funcdefs. Resort
 5716|       |                 * to runtime checks for now. Maybe invalid upvalue references could be defaulted
 5717|       |                 * to nil? (don't commit to this in the long term, though) */
 5718|   162k|                if ((int32_t)((instr >> 8) & 0xFF) >= sc) return 4;
  ------------------
  |  Branch (5718:21): [True: 0, False: 162k]
  ------------------
 5719|   162k|                if ((int32_t)((instr >> 16) & 0xFF) >= def->environments_length) return 8;
  ------------------
  |  Branch (5719:21): [True: 0, False: 162k]
  ------------------
 5720|   162k|                continue;
 5721|   162k|            }
 5722|  3.94M|        }
 5723|  3.94M|    }
 5724|       |
 5725|       |    /* Verify last instruction is either a jump, return, return-nil, or tailcall. Eventually,
 5726|       |     * some real flow analysis would be ideal, but this should be very effective. Will completely
 5727|       |     * prevent running over the end of bytecode. However, valid functions with dead code will
 5728|       |     * be rejected. */
 5729|   142k|    {
 5730|   142k|        uint32_t lastop = def->bytecode[def->bytecode_length - 1] & 0xFF;
 5731|   142k|        switch (lastop) {
 5732|      0|            default:
  ------------------
  |  Branch (5732:13): [True: 0, False: 142k]
  ------------------
 5733|      0|                return 9;
 5734|  84.1k|            case JOP_RETURN:
  ------------------
  |  Branch (5734:13): [True: 84.1k, False: 58.7k]
  ------------------
 5735|  95.0k|            case JOP_RETURN_NIL:
  ------------------
  |  Branch (5735:13): [True: 10.9k, False: 131k]
  ------------------
 5736|  95.3k|            case JOP_JUMP:
  ------------------
  |  Branch (5736:13): [True: 267, False: 142k]
  ------------------
 5737|  97.1k|            case JOP_ERROR:
  ------------------
  |  Branch (5737:13): [True: 1.86k, False: 140k]
  ------------------
 5738|   142k|            case JOP_TAILCALL:
  ------------------
  |  Branch (5738:13): [True: 45.6k, False: 97.1k]
  ------------------
 5739|   142k|                break;
 5740|   142k|        }
 5741|   142k|    }
 5742|       |
 5743|       |    /* Verify debug info - slotmapping, etc. */
 5744|  1.50M|    for (int32_t i = def->symbolmap_length - 1; i >= 0; i--) {
  ------------------
  |  Branch (5744:49): [True: 1.35M, False: 142k]
  ------------------
 5745|  1.35M|        JanetSymbolMap jsm = def->symbolmap[i];
 5746|  1.35M|        if (jsm.birth_pc == UINT32_MAX) {
  ------------------
  |  Branch (5746:13): [True: 700k, False: 658k]
  ------------------
 5747|   700k|            if (jsm.death_pc >= (uint32_t) def->environments_length) {
  ------------------
  |  Branch (5747:17): [True: 0, False: 700k]
  ------------------
 5748|      0|                return 10;
 5749|       |                /* We should also check jsm.slot_index */
 5750|      0|            }
 5751|   700k|        } else {
 5752|   658k|            if (jsm.slot_index >= (uint32_t) def->slotcount) {
  ------------------
  |  Branch (5752:17): [True: 0, False: 658k]
  ------------------
 5753|      0|                return 11;
 5754|      0|            }
 5755|   658k|            if (jsm.birth_pc != UINT32_MAX && jsm.birth_pc >= (uint32_t) def->bytecode_length) {
  ------------------
  |  Branch (5755:17): [True: 658k, False: 0]
  |  Branch (5755:47): [True: 0, False: 658k]
  ------------------
 5756|      0|                return 12;
 5757|      0|            }
 5758|   658k|            if (jsm.death_pc != UINT32_MAX && jsm.death_pc > (uint32_t) def->bytecode_length) {
  ------------------
  |  Branch (5758:17): [True: 658k, False: 0]
  |  Branch (5758:47): [True: 0, False: 658k]
  ------------------
 5759|      0|                return 13;
 5760|      0|            }
 5761|   658k|        }
 5762|  1.35M|        if (jsm.symbol == NULL) {
  ------------------
  |  Branch (5762:13): [True: 0, False: 1.35M]
  ------------------
 5763|      0|            return 14;
 5764|      0|        }
 5765|  1.35M|    }
 5766|       |
 5767|   142k|    return 0;
 5768|   142k|}
janet_funcdef_alloc:
 5772|   180k|JanetFuncDef *janet_funcdef_alloc(void) {
 5773|   180k|    JanetFuncDef *def = janet_gcalloc(JANET_MEMORY_FUNCDEF, sizeof(JanetFuncDef));
 5774|   180k|    def->environments = NULL;
 5775|   180k|    def->constants = NULL;
 5776|   180k|    def->bytecode = NULL;
 5777|   180k|    def->closure_bitset = NULL;
 5778|   180k|    def->flags = 0;
 5779|   180k|    def->slotcount = 0;
 5780|   180k|    def->symbolmap = NULL;
 5781|   180k|    def->arity = 0;
 5782|   180k|    def->min_arity = 0;
 5783|   180k|    def->max_arity = INT32_MAX;
 5784|   180k|    def->source = NULL;
 5785|   180k|    def->sourcemap = NULL;
 5786|   180k|    def->name = NULL;
 5787|       |    def->defs = NULL;
 5788|   180k|    def->defs_length = 0;
 5789|   180k|    def->constants_length = 0;
 5790|   180k|    def->bytecode_length = 0;
 5791|   180k|    def->environments_length = 0;
 5792|   180k|    def->symbolmap_length = 0;
 5793|   180k|    def->named_args_count = 0;
 5794|   180k|    return def;
 5795|   180k|}
janet_signalv:
 5878|  1.21k|void janet_signalv(JanetSignal sig, Janet message) {
 5879|  1.21k|    if (janet_vm.return_reg != NULL) {
  ------------------
  |  Branch (5879:9): [True: 1.21k, False: 0]
  ------------------
 5880|       |        /* Should match logic in janet_call for coercing everything not ok to an error (no awaits, yields, etc.) */
 5881|  1.21k|        if (janet_vm.coerce_error && sig != JANET_SIGNAL_OK) {
  ------------------
  |  Branch (5881:13): [True: 0, False: 1.21k]
  |  Branch (5881:38): [True: 0, False: 0]
  ------------------
 5882|      0|#ifdef JANET_EV
 5883|      0|            if (NULL != janet_vm.root_fiber && sig == JANET_SIGNAL_EVENT) {
  ------------------
  |  Branch (5883:17): [True: 0, False: 0]
  |  Branch (5883:48): [True: 0, False: 0]
  ------------------
 5884|      0|                janet_vm.root_fiber->sched_id++;
 5885|      0|            }
 5886|      0|#endif
 5887|      0|            if (sig != JANET_SIGNAL_ERROR) {
  ------------------
  |  Branch (5887:17): [True: 0, False: 0]
  ------------------
 5888|      0|                message = janet_wrap_string(janet_formatc("%v coerced from %s to error", message, janet_signal_names[sig]));
  ------------------
  |  |  848|      0|#define janet_wrap_string(s) janet_nanbox_wrap_c((s), JANET_STRING)
  |  |  ------------------
  |  |  |  |  828|      0|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5889|      0|            }
 5890|      0|            sig = JANET_SIGNAL_ERROR;
 5891|      0|        }
 5892|  1.21k|        *janet_vm.return_reg = message;
 5893|  1.21k|        if (NULL != janet_vm.fiber) {
  ------------------
  |  Branch (5893:13): [True: 1.21k, False: 0]
  ------------------
 5894|  1.21k|            janet_vm.fiber->flags |= JANET_FIBER_DID_LONGJUMP;
  ------------------
  |  |  837|  1.21k|#define JANET_FIBER_DID_LONGJUMP     0x8000000
  ------------------
 5895|  1.21k|        }
 5896|       |#if defined(JANET_BSD) || defined(JANET_APPLE)
 5897|       |        _longjmp(*janet_vm.signal_buf, sig);
 5898|       |#else
 5899|  1.21k|        longjmp(*janet_vm.signal_buf, sig);
 5900|  1.21k|#endif
 5901|  1.21k|    } else {
 5902|      0|        const char *str = (const char *)janet_formatc("janet top level signal - %v\n", message);
 5903|      0|        janet_top_level_signal(str);
 5904|      0|    }
 5905|  1.21k|}
janet_panicv:
 5907|  1.21k|void janet_panicv(Janet message) {
 5908|  1.21k|    janet_signalv(JANET_SIGNAL_ERROR, message);
 5909|  1.21k|}
janet_panicf:
 5911|  1.21k|void janet_panicf(const char *format, ...) {
 5912|  1.21k|    va_list args;
 5913|  1.21k|    const uint8_t *ret;
 5914|  1.21k|    JanetBuffer buffer;
 5915|  1.21k|    int32_t len = 0;
 5916|  36.8k|    while (format[len]) len++;
  ------------------
  |  Branch (5916:12): [True: 35.5k, False: 1.21k]
  ------------------
 5917|  1.21k|    janet_buffer_init(&buffer, len);
 5918|  1.21k|    va_start(args, format);
 5919|  1.21k|    janet_formatbv(&buffer, format, args);
 5920|       |    va_end(args);
 5921|  1.21k|    ret = janet_string(buffer.data, buffer.count);
 5922|  1.21k|    janet_buffer_deinit(&buffer);
 5923|  1.21k|    janet_panics(ret);
 5924|  1.21k|}
janet_panics:
 5930|  1.21k|void janet_panics(const uint8_t *message) {
 5931|  1.21k|    janet_panicv(janet_wrap_string(message));
  ------------------
  |  |  848|  1.21k|#define janet_wrap_string(s) janet_nanbox_wrap_c((s), JANET_STRING)
  |  |  ------------------
  |  |  |  |  828|  1.21k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.21k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.21k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5932|  1.21k|}
janet_fixarity:
 5942|  22.6M|void janet_fixarity(int32_t arity, int32_t fix) {
 5943|  22.6M|    if (arity != fix)
  ------------------
  |  Branch (5943:9): [True: 0, False: 22.6M]
  ------------------
 5944|      0|        janet_panicf("arity mismatch, expected %d, got %d", fix, arity);
 5945|  22.6M|}
janet_arity:
 5947|  8.27M|void janet_arity(int32_t arity, int32_t min, int32_t max) {
 5948|  8.27M|    if (min >= 0 && arity < min)
  ------------------
  |  Branch (5948:9): [True: 8.27M, False: 0]
  |  Branch (5948:21): [True: 0, False: 8.27M]
  ------------------
 5949|      0|        janet_panicf("arity mismatch, expected at least %d, got %d", min, arity);
 5950|  8.27M|    if (max >= 0 && arity > max)
  ------------------
  |  Branch (5950:9): [True: 3.27M, False: 4.99M]
  |  Branch (5950:21): [True: 0, False: 3.27M]
  ------------------
 5951|      0|        janet_panicf("arity mismatch, expected at most %d, got %d", max, arity);
 5952|  8.27M|}
janet_getcbytes:
 6055|      1|const char *janet_getcbytes(const Janet *argv, int32_t n) {
 6056|       |    /* Ensure buffer 0-padded */
 6057|      1|    if (janet_checktype(argv[n], JANET_BUFFER)) {
  ------------------
  |  |  806|      1|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 1]
  |  |  |  Branch (806:6): [Folded, False: 1]
  |  |  ------------------
  |  |  807|      1|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      1|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      1|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      1|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      1|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      1|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6058|      0|        JanetBuffer *b = janet_unwrap_buffer(argv[n]);
  ------------------
  |  |  862|      0|#define janet_unwrap_buffer(x) ((JanetBuffer *)janet_nanbox_to_pointer(x))
  ------------------
 6059|      0|        if ((b->gc.flags & JANET_BUFFER_FLAG_NO_REALLOC) && b->count == b->capacity) {
  ------------------
  |  | 1780|      0|#define JANET_BUFFER_FLAG_NO_REALLOC 0x10000
  ------------------
  |  Branch (6059:13): [True: 0, False: 0]
  |  Branch (6059:61): [True: 0, False: 0]
  ------------------
 6060|       |            /* Make a copy with janet_smalloc in the rare case we have a buffer that
 6061|       |             * cannot be realloced and pushing a 0 byte would panic. */
 6062|      0|            char *new_string = janet_smalloc(b->count + 1);
 6063|      0|            memcpy(new_string, b->data, b->count);
 6064|      0|            new_string[b->count] = 0;
 6065|      0|            if (strlen(new_string) != (size_t) b->count) goto badzeros;
  ------------------
  |  Branch (6065:17): [True: 0, False: 0]
  ------------------
 6066|      0|            return new_string;
 6067|      0|        } else {
 6068|       |            /* Ensure trailing 0 */
 6069|      0|            janet_buffer_push_u8(b, 0);
 6070|      0|            b->count--;
 6071|      0|            if (strlen((char *)b->data) != (size_t) b->count) goto badzeros;
  ------------------
  |  Branch (6071:17): [True: 0, False: 0]
  ------------------
 6072|      0|            return (const char *) b->data;
 6073|      0|        }
 6074|      0|    }
 6075|      1|    JanetByteView view = janet_getbytes(argv, n);
 6076|      1|    const char *cstr = (const char *)view.bytes;
 6077|      1|    if (strlen(cstr) != (size_t) view.len) goto badzeros;
  ------------------
  |  Branch (6077:9): [True: 0, False: 1]
  ------------------
 6078|      1|    return cstr;
 6079|       |
 6080|      0|badzeros:
 6081|      0|    janet_panic("bytes contain embedded 0s");
 6082|      1|}
janet_getnat:
 6091|      1|int32_t janet_getnat(const Janet *argv, int32_t n) {
 6092|      1|    Janet x = argv[n];
 6093|      1|    if (!janet_checkint(x)) goto bad;
  ------------------
  |  Branch (6093:9): [True: 0, False: 1]
  ------------------
 6094|      1|    int32_t ret = janet_unwrap_integer(x);
  ------------------
  |  |  966|      1|#define janet_unwrap_integer(x) ((int32_t) janet_unwrap_number(x))
  |  |  ------------------
  |  |  |  |  839|      1|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  ------------------
 6095|      1|    if (ret < 0) goto bad;
  ------------------
  |  Branch (6095:9): [True: 0, False: 1]
  ------------------
 6096|      1|    return ret;
 6097|      0|bad:
 6098|      0|    janet_panicf("bad slot #%d, expected non-negative 32 bit signed integer, got %v", n, x);
 6099|      1|}
janet_symeq:
 6121|   208k|int janet_symeq(Janet x, const char *cstring) {
 6122|   208k|    return janet_strlike_cmp(JANET_SYMBOL, x, cstring);
 6123|   208k|}
janet_getinteger:
 6125|  2.90M|int32_t janet_getinteger(const Janet *argv, int32_t n) {
 6126|  2.90M|    Janet x = argv[n];
 6127|  2.90M|    if (!janet_checkint(x)) {
  ------------------
  |  Branch (6127:9): [True: 0, False: 2.90M]
  ------------------
 6128|      0|        janet_panicf("bad slot #%d, expected 32 bit signed integer, got %v", n, x);
 6129|      0|    }
 6130|  2.90M|    return janet_unwrap_integer(x);
  ------------------
  |  |  966|  2.90M|#define janet_unwrap_integer(x) ((int32_t) janet_unwrap_number(x))
  |  |  ------------------
  |  |  |  |  839|  2.90M|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  ------------------
 6131|  2.90M|}
janet_gethalfrange:
 6205|   817k|int32_t janet_gethalfrange(const Janet *argv, int32_t n, int32_t length, const char *which) {
 6206|   817k|    int32_t raw = janet_getinteger(argv, n);
 6207|   817k|    int32_t not_raw = raw;
 6208|   817k|    if (not_raw < 0) not_raw += length + 1;
  ------------------
  |  Branch (6208:9): [True: 35.9k, False: 781k]
  ------------------
 6209|   817k|    if (not_raw < 0 || not_raw > length)
  ------------------
  |  Branch (6209:9): [True: 0, False: 817k]
  |  Branch (6209:24): [True: 0, False: 817k]
  ------------------
 6210|      0|        janet_panicf("%s index %d out of range [%d,%d]", which, (int64_t) raw, -(int64_t)length - 1, (int64_t) length);
 6211|   817k|    return not_raw;
 6212|   817k|}
janet_getstartrange:
 6214|  2.38M|int32_t janet_getstartrange(const Janet *argv, int32_t argc, int32_t n, int32_t length) {
 6215|  2.38M|    if (n >= argc || janet_checktype(argv[n], JANET_NIL)) {
  ------------------
  |  |  806|   776k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 776k]
  |  |  |  Branch (806:6): [Folded, False: 776k]
  |  |  ------------------
  |  |  807|   776k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   776k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   776k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   776k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   776k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   776k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6215:9): [True: 1.60M, False: 776k]
  ------------------
 6216|  1.60M|        return 0;
 6217|  1.60M|    }
 6218|   776k|    return janet_gethalfrange(argv, n, length, "start");
 6219|  2.38M|}
janet_getendrange:
 6221|  2.38M|int32_t janet_getendrange(const Janet *argv, int32_t argc, int32_t n, int32_t length) {
 6222|  2.38M|    if (n >= argc || janet_checktype(argv[n], JANET_NIL)) {
  ------------------
  |  |  806|  40.4k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 40.4k]
  |  |  |  Branch (806:6): [Folded, False: 40.4k]
  |  |  ------------------
  |  |  807|  40.4k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  40.4k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  40.4k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  40.4k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  40.4k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  40.4k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6222:9): [True: 2.34M, False: 40.4k]
  ------------------
 6223|  2.34M|        return length;
 6224|  2.34M|    }
 6225|  40.4k|    return janet_gethalfrange(argv, n, length, "end");
 6226|  2.38M|}
janet_getindexed:
 6237|  2.38M|JanetView janet_getindexed(const Janet *argv, int32_t n) {
 6238|  2.38M|    Janet x = argv[n];
 6239|  2.38M|    JanetView view;
 6240|  2.38M|    if (!janet_indexed_view(x, &view.items, &view.len)) {
  ------------------
  |  Branch (6240:9): [True: 0, False: 2.38M]
  ------------------
 6241|      0|        janet_panic_type(x, n, JANET_TFLAG_INDEXED);
  ------------------
  |  |  613|      0|#define JANET_TFLAG_INDEXED (JANET_TFLAG_ARRAY | JANET_TFLAG_TUPLE)
  |  |  ------------------
  |  |  |  |  602|      0|#define JANET_TFLAG_ARRAY (1 << JANET_ARRAY)
  |  |  ------------------
  |  |               #define JANET_TFLAG_INDEXED (JANET_TFLAG_ARRAY | JANET_TFLAG_TUPLE)
  |  |  ------------------
  |  |  |  |  603|      0|#define JANET_TFLAG_TUPLE (1 << JANET_TUPLE)
  |  |  ------------------
  ------------------
 6242|      0|    }
 6243|  2.38M|    return view;
 6244|  2.38M|}
janet_getbytes:
 6246|  2.10M|JanetByteView janet_getbytes(const Janet *argv, int32_t n) {
 6247|  2.10M|    Janet x = argv[n];
 6248|  2.10M|    JanetByteView view;
 6249|  2.10M|    if (!janet_bytes_view(x, &view.bytes, &view.len)) {
  ------------------
  |  Branch (6249:9): [True: 0, False: 2.10M]
  ------------------
 6250|      0|        janet_panic_type(x, n, JANET_TFLAG_BYTES);
  ------------------
  |  |  612|      0|#define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  ------------------
  |  |  |  |  599|      0|#define JANET_TFLAG_STRING (1 << JANET_STRING)
  |  |  ------------------
  |  |               #define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  ------------------
  |  |  |  |  600|      0|#define JANET_TFLAG_SYMBOL (1 << JANET_SYMBOL)
  |  |  ------------------
  |  |               #define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  ------------------
  |  |  |  |  606|      0|#define JANET_TFLAG_BUFFER (1 << JANET_BUFFER)
  |  |  ------------------
  |  |               #define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  ------------------
  |  |  |  |  601|      0|#define JANET_TFLAG_KEYWORD (1 << JANET_KEYWORD)
  |  |  ------------------
  ------------------
 6251|      0|    }
 6252|  2.10M|    return view;
 6253|  2.10M|}
janet_getslice:
 6276|  2.38M|JanetRange janet_getslice(int32_t argc, const Janet *argv) {
 6277|  2.38M|    janet_arity(argc, 1, 3);
 6278|  2.38M|    JanetRange range;
 6279|  2.38M|    int32_t length = janet_length(argv[0]);
 6280|  2.38M|    range.start = janet_getstartrange(argv, argc, 1, length);
 6281|  2.38M|    range.end = janet_getendrange(argv, argc, 2, length);
 6282|  2.38M|    if (range.end < range.start)
  ------------------
  |  Branch (6282:9): [True: 0, False: 2.38M]
  ------------------
 6283|      0|        range.end = range.start;
 6284|  2.38M|    return range;
 6285|  2.38M|}
janet_optnat:
 6360|  7.81k|int32_t janet_optnat(const Janet *argv, int32_t argc, int32_t n, int32_t dflt) {
 6361|  7.81k|    if (argc <= n) return dflt;
  ------------------
  |  Branch (6361:9): [True: 7.81k, False: 0]
  ------------------
 6362|      0|    if (janet_checktype(argv[n], JANET_NIL)) return dflt;
  ------------------
  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  ------------------
  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6363|      0|    return janet_getnat(argv, n);
 6364|      0|}
janet_optinteger:
 6366|    838|int32_t janet_optinteger(const Janet *argv, int32_t argc, int32_t n, int32_t dflt) {
 6367|    838|    if (argc <= n) return dflt;
  ------------------
  |  Branch (6367:9): [True: 838, False: 0]
  ------------------
 6368|      0|    if (janet_checktype(argv[n], JANET_NIL)) return dflt;
  ------------------
  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  ------------------
  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6369|      0|    return janet_getinteger(argv, n);
 6370|      0|}
janet_atomic_load_relaxed:
 6440|  62.0M|JanetAtomicInt janet_atomic_load_relaxed(JanetAtomicInt volatile *x) {
 6441|       |#ifdef _MSC_VER
 6442|       |    return _InterlockedOr(x, 0);
 6443|       |#elif defined(JANET_PLAN9)
 6444|       |    return agetl((void *)x);
 6445|       |#elif defined(JANET_USE_STDATOMIC)
 6446|       |    return atomic_load_explicit(x, memory_order_relaxed);
 6447|       |#else
 6448|  62.0M|    return __atomic_load_n(x, __ATOMIC_RELAXED);
 6449|  62.0M|#endif
 6450|  62.0M|}
janetc_funopt:
 6883|   217k|const JanetFunOptimizer *janetc_funopt(uint32_t flags) {
 6884|   217k|    uint32_t tag = flags & JANET_FUNCDEF_FLAG_TAG;
  ------------------
  |  | 1108|   217k|#define JANET_FUNCDEF_FLAG_TAG 0xFFFF
  ------------------
 6885|   217k|    if (tag == 0)
  ------------------
  |  Branch (6885:9): [True: 0, False: 217k]
  ------------------
 6886|      0|        return NULL;
 6887|   217k|    uint32_t index = tag - 1;
 6888|   217k|    if (index >= (sizeof(optimizers) / sizeof(optimizers[0])))
  ------------------
  |  Branch (6888:9): [True: 0, False: 217k]
  ------------------
 6889|      0|        return NULL;
 6890|   217k|    return optimizers + index;
 6891|   217k|}
janetc_fopts_default:
 6931|  1.22M|JanetFopts janetc_fopts_default(JanetCompiler *c) {
 6932|  1.22M|    JanetFopts ret;
 6933|  1.22M|    ret.compiler = c;
 6934|  1.22M|    ret.flags = 0;
 6935|  1.22M|    ret.hint = janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|  1.22M|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  1.22M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.22M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.22M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6936|  1.22M|    return ret;
 6937|  1.22M|}
janetc_error:
 6940|   856k|void janetc_error(JanetCompiler *c, const uint8_t *m) {
 6941|       |    /* Don't override first error */
 6942|   856k|    if (c->result.status == JANET_COMPILE_ERROR) {
  ------------------
  |  Branch (6942:9): [True: 842k, False: 14.2k]
  ------------------
 6943|   842k|        return;
 6944|   842k|    }
 6945|  14.2k|    c->result.status = JANET_COMPILE_ERROR;
 6946|  14.2k|    c->result.error = m;
 6947|  14.2k|}
janetc_cerror:
 6950|   763k|void janetc_cerror(JanetCompiler *c, const char *m) {
 6951|   763k|    janetc_error(c, janet_cstring(m));
 6952|   763k|}
janetc_lintf:
 6961|  1.79M|void janetc_lintf(JanetCompiler *c, JanetCompileLintLevel level, const char *format, ...) {
 6962|  1.79M|    if (NULL != c->lints) {
  ------------------
  |  Branch (6962:9): [True: 0, False: 1.79M]
  ------------------
 6963|       |        /* format message */
 6964|      0|        va_list args;
 6965|      0|        JanetBuffer buffer;
 6966|      0|        int32_t len = 0;
 6967|      0|        while (format[len]) len++;
  ------------------
  |  Branch (6967:16): [True: 0, False: 0]
  ------------------
 6968|      0|        janet_buffer_init(&buffer, len);
 6969|      0|        va_start(args, format);
 6970|      0|        janet_formatbv(&buffer, format, args);
 6971|      0|        va_end(args);
 6972|      0|        const uint8_t *str = janet_string(buffer.data, buffer.count);
 6973|      0|        janet_buffer_deinit(&buffer);
 6974|       |        /* construct linting payload */
 6975|      0|        Janet *payload = janet_tuple_begin(4);
 6976|      0|        payload[0] = janet_ckeywordv(janet_lint_level_names[level]);
  ------------------
  |  | 1843|      0|#define janet_ckeywordv(cstr) janet_wrap_keyword(janet_ckeyword(cstr))
  |  |  ------------------
  |  |  |  |  850|      0|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|      0|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6977|      0|        payload[1] = c->current_mapping.line == -1 ? janet_wrap_nil() : janet_wrap_integer(c->current_mapping.line);
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      payload[1] = c->current_mapping.line == -1 ? janet_wrap_nil() : janet_wrap_integer(c->current_mapping.line);
  ------------------
  |  |  967|      0|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
  |  Branch (6977:22): [True: 0, False: 0]
  ------------------
 6978|      0|        payload[2] = c->current_mapping.column == -1 ? janet_wrap_nil() : janet_wrap_integer(c->current_mapping.column);
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      payload[2] = c->current_mapping.column == -1 ? janet_wrap_nil() : janet_wrap_integer(c->current_mapping.column);
  ------------------
  |  |  967|      0|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
  |  Branch (6978:22): [True: 0, False: 0]
  ------------------
 6979|      0|        payload[3] = janet_wrap_string(str);
  ------------------
  |  |  848|      0|#define janet_wrap_string(s) janet_nanbox_wrap_c((s), JANET_STRING)
  |  |  ------------------
  |  |  |  |  828|      0|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6980|      0|        janet_array_push(c->lints, janet_wrap_tuple(janet_tuple_end(payload)));
  ------------------
  |  |  843|      0|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|      0|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6981|      0|    }
 6982|  1.79M|}
janetc_freeslot:
 6985|  7.60M|void janetc_freeslot(JanetCompiler *c, JanetSlot s) {
 6986|  7.60M|    if (s.flags & (JANET_SLOT_CONSTANT | JANET_SLOT_REF | JANET_SLOT_NAMED)) return;
  ------------------
  |  | 1038|  7.60M|#define JANET_SLOT_CONSTANT 0x10000
  ------------------
                  if (s.flags & (JANET_SLOT_CONSTANT | JANET_SLOT_REF | JANET_SLOT_NAMED)) return;
  ------------------
  |  | 1041|  7.60M|#define JANET_SLOT_REF 0x80000
  ------------------
                  if (s.flags & (JANET_SLOT_CONSTANT | JANET_SLOT_REF | JANET_SLOT_NAMED)) return;
  ------------------
  |  | 1039|  7.60M|#define JANET_SLOT_NAMED 0x20000
  ------------------
  |  Branch (6986:9): [True: 3.90M, False: 3.70M]
  ------------------
 6987|  3.70M|    if (s.envindex >= 0) return;
  ------------------
  |  Branch (6987:9): [True: 0, False: 3.70M]
  ------------------
 6988|  3.70M|    janetc_regalloc_free(&c->scope->ra, s.index);
 6989|  3.70M|}
janetc_nameslot:
 6992|  1.25M|void janetc_nameslot(JanetCompiler *c, const uint8_t *sym, JanetSlot s, uint32_t flags) {
 6993|  1.25M|    if (!(flags & JANET_DEFFLAG_NO_SHADOWCHECK)) {
  ------------------
  |  | 1182|  1.25M|#define JANET_DEFFLAG_NO_SHADOWCHECK 1
  ------------------
  |  Branch (6993:9): [True: 1.25M, False: 846]
  ------------------
 6994|  1.25M|        if (sym[0] != '_') {
  ------------------
  |  Branch (6994:13): [True: 1.12M, False: 137k]
  ------------------
 6995|  1.12M|            switch (janetc_shadowcheck(c, sym)) {
 6996|  6.76k|                default:
  ------------------
  |  Branch (6996:17): [True: 6.76k, False: 1.11M]
  ------------------
 6997|  6.76k|                    break;
 6998|  6.76k|                case JANETC_SHADOW_MACRO:
  ------------------
  |  Branch (6998:17): [True: 3.72k, False: 1.11M]
  ------------------
 6999|  3.72k|                    janetc_lintf(c, JANET_C_LINT_NORMAL, "binding %q is shadowing a macro", janet_wrap_symbol(sym));
  ------------------
  |  |  849|  3.72k|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  ------------------
  |  |  |  |  828|  3.72k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  3.72k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  3.72k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7000|  3.72k|                    break;
 7001|  1.10M|                case JANETC_SHADOW_LOCAL_HIDES_LOCAL:
  ------------------
  |  Branch (7001:17): [True: 1.10M, False: 15.9k]
  ------------------
 7002|  1.10M|                    janetc_lintf(c, JANET_C_LINT_STRICT, "binding %q is shadowing a binding", janet_wrap_symbol(sym));
  ------------------
  |  |  849|  1.10M|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  ------------------
  |  |  |  |  828|  1.10M|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.10M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.10M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7003|  1.10M|                    break;
 7004|  3.84k|                case JANETC_SHADOW_LOCAL_HIDES_GLOBAL:
  ------------------
  |  Branch (7004:17): [True: 3.84k, False: 1.11M]
  ------------------
 7005|  3.84k|                    janetc_lintf(c, JANET_C_LINT_STRICT, "binding %q is shadowing a top-level binding", janet_wrap_symbol(sym));
  ------------------
  |  |  849|  3.84k|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  ------------------
  |  |  |  |  828|  3.84k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  3.84k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  3.84k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7006|  3.84k|                    break;
 7007|  1.58k|                case JANETC_SHADOW_GLOBAL_HIDES_GLOBAL:
  ------------------
  |  Branch (7007:17): [True: 1.58k, False: 1.11M]
  ------------------
 7008|  1.58k|                    janetc_lintf(c, JANET_C_LINT_STRICT, "top-level binding %q is shadowing another top-level binding", janet_wrap_symbol(sym));
  ------------------
  |  |  849|  1.58k|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  ------------------
  |  |  |  |  828|  1.58k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.58k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.58k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7009|  1.58k|                    break;
 7010|  1.12M|            }
 7011|  1.12M|        }
 7012|  1.25M|    }
 7013|  1.25M|    SymPair sp;
 7014|  1.25M|    int32_t cnt = janet_v_count(c->buffer);
  ------------------
  |  |  759|  1.25M|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  1.25M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.25M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 1.25M, False: 672]
  |  |  ------------------
  ------------------
 7015|  1.25M|    sp.sym = sym;
 7016|  1.25M|    sp.sym2 = sym;
 7017|  1.25M|    sp.slot = s;
 7018|  1.25M|    sp.keep = 0;
 7019|  1.25M|    if (flags & JANET_DEFFLAG_NO_UNUSED) {
  ------------------
  |  | 1183|  1.25M|#define JANET_DEFFLAG_NO_UNUSED 2
  ------------------
  |  Branch (7019:9): [True: 2.45k, False: 1.25M]
  ------------------
 7020|  2.45k|        sp.referenced = 1;
 7021|  1.25M|    } else {
 7022|  1.25M|        sp.referenced = sym[0] == '_'; /* Fake ref if symbol starts with _ to avoid lints */
 7023|  1.25M|    }
 7024|  1.25M|    sp.slot.flags |= JANET_SLOT_NAMED;
  ------------------
  |  | 1039|  1.25M|#define JANET_SLOT_NAMED 0x20000
  ------------------
 7025|  1.25M|    sp.birth_pc = cnt ? cnt - 1 : 0;
  ------------------
  |  Branch (7025:19): [True: 1.25M, False: 672]
  ------------------
 7026|  1.25M|    sp.death_pc = UINT32_MAX;
 7027|       |    janet_v_push(c->scope->syms, sp);
  ------------------
  |  |  757|  1.25M|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  1.25M|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  1.25M|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  1.25M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.25M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  1.25M|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.25M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 7.99k, False: 1.25M]
  |  |  |  |  |  |  |  Branch (768:50): [True: 17.4k, False: 1.23M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|  25.4k|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  1.25M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.25M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7028|  1.25M|}
janetc_cslot:
 7031|  6.03M|JanetSlot janetc_cslot(Janet x) {
 7032|  6.03M|    JanetSlot ret;
 7033|  6.03M|    ret.flags = (1 << janet_type(x)) | JANET_SLOT_CONSTANT;
  ------------------
  |  |  795|  6.03M|    (isnan((x).number) \
  |  |  796|  6.03M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  6.03M|        : JANET_NUMBER)
  ------------------
                  ret.flags = (1 << janet_type(x)) | JANET_SLOT_CONSTANT;
  ------------------
  |  | 1038|  6.03M|#define JANET_SLOT_CONSTANT 0x10000
  ------------------
  |  Branch (7033:23): [True: 5.50M, False: 522k]
  ------------------
 7034|  6.03M|    ret.index = -1;
 7035|  6.03M|    ret.constant = x;
 7036|  6.03M|    ret.envindex = -1;
 7037|  6.03M|    return ret;
 7038|  6.03M|}
janetc_farslot:
 7041|  3.10M|JanetSlot janetc_farslot(JanetCompiler *c) {
 7042|  3.10M|    JanetSlot ret;
 7043|  3.10M|    ret.flags = JANET_SLOTTYPE_ANY;
  ------------------
  |  | 1048|  3.10M|#define JANET_SLOTTYPE_ANY 0xFFFF
  ------------------
 7044|  3.10M|    ret.index = janetc_allocfar(c);
 7045|  3.10M|    ret.constant = janet_wrap_nil();
  ------------------
  |  |  831|  3.10M|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  3.10M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  3.10M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  3.10M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7046|  3.10M|    ret.envindex = -1;
 7047|  3.10M|    return ret;
 7048|  3.10M|}
janetc_scope:
 7051|   225k|void janetc_scope(JanetScope *s, JanetCompiler *c, int flags, const char *name) {
 7052|   225k|    JanetScope scope;
 7053|   225k|    scope.name = name;
 7054|   225k|    scope.child = NULL;
 7055|   225k|    scope.consts = NULL;
 7056|   225k|    scope.syms = NULL;
 7057|   225k|    scope.envs = NULL;
 7058|   225k|    scope.defs = NULL;
 7059|   225k|    scope.bytecode_start = janet_v_count(c->buffer);
  ------------------
  |  |  759|   225k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|   163k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   163k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 163k, False: 61.2k]
  |  |  ------------------
  ------------------
 7060|   225k|    scope.flags = flags;
 7061|   225k|    scope.parent = c->scope;
 7062|   225k|    janetc_regalloc_init(&scope.ua);
 7063|       |    /* Inherit slots */
 7064|   225k|    if ((!(flags & JANET_SCOPE_FUNCTION)) && c->scope) {
  ------------------
  |  | 1058|   225k|#define JANET_SCOPE_FUNCTION 1
  ------------------
  |  Branch (7064:9): [True: 22.5k, False: 202k]
  |  Branch (7064:46): [True: 22.5k, False: 0]
  ------------------
 7065|  22.5k|        janetc_regalloc_clone(&scope.ra, &(c->scope->ra));
 7066|   202k|    } else {
 7067|   202k|        janetc_regalloc_init(&scope.ra);
 7068|   202k|    }
 7069|       |    /* Link parent and child and update pointer */
 7070|   225k|    if (c->scope)
  ------------------
  |  Branch (7070:9): [True: 195k, False: 30.0k]
  ------------------
 7071|   195k|        c->scope->child = s;
 7072|   225k|    c->scope = s;
 7073|   225k|    *s = scope;
 7074|   225k|}
janetc_popscope:
 7077|   225k|void janetc_popscope(JanetCompiler *c) {
 7078|   225k|    JanetScope *oldscope = c->scope;
 7079|   225k|    JanetScope *newscope = oldscope->parent;
 7080|       |    /* Move free slots to parent scope if not a new function.
 7081|       |     * We need to know the total number of slots used when compiling the function. */
 7082|   225k|    if (!(oldscope->flags & (JANET_SCOPE_FUNCTION | JANET_SCOPE_UNUSED)) && newscope) {
  ------------------
  |  | 1058|   225k|#define JANET_SCOPE_FUNCTION 1
  ------------------
                  if (!(oldscope->flags & (JANET_SCOPE_FUNCTION | JANET_SCOPE_UNUSED)) && newscope) {
  ------------------
  |  | 1061|   225k|#define JANET_SCOPE_UNUSED 8
  ------------------
  |  Branch (7082:9): [True: 21.4k, False: 203k]
  |  Branch (7082:77): [True: 21.4k, False: 0]
  ------------------
 7083|       |        /* Parent scopes inherit child's closure flag. Needed
 7084|       |         * for while loops. (if a while loop creates a closure, it
 7085|       |         * is compiled to a tail recursive iife) */
 7086|  21.4k|        if (oldscope->flags & JANET_SCOPE_CLOSURE) {
  ------------------
  |  | 1062|  21.4k|#define JANET_SCOPE_CLOSURE 16
  ------------------
  |  Branch (7086:13): [True: 11.8k, False: 9.60k]
  ------------------
 7087|  11.8k|            newscope->flags |= JANET_SCOPE_CLOSURE;
  ------------------
  |  | 1062|  11.8k|#define JANET_SCOPE_CLOSURE 16
  ------------------
 7088|  11.8k|        }
 7089|  21.4k|        if (newscope->ra.max < oldscope->ra.max) {
  ------------------
  |  Branch (7089:13): [True: 13.0k, False: 8.42k]
  ------------------
 7090|  13.0k|            newscope->ra.max = oldscope->ra.max;
 7091|  13.0k|        }
 7092|       |
 7093|       |        /* Keep upvalue slots and symbols for debugging. */
 7094|  1.09M|        for (int32_t i = 0; i < janet_v_count(oldscope->syms); i++) {
  ------------------
  |  |  759|  1.09M|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  1.08M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.08M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 1.08M, False: 13.8k]
  |  |  ------------------
  ------------------
  |  Branch (7094:29): [True: 1.07M, False: 21.4k]
  ------------------
 7095|  1.07M|            SymPair pair = oldscope->syms[i];
 7096|       |            /* Check for unused symbols */
 7097|  1.07M|            if (pair.referenced == 0 && pair.sym) {
  ------------------
  |  Branch (7097:17): [True: 896k, False: 180k]
  |  Branch (7097:41): [True: 362k, False: 533k]
  ------------------
 7098|   362k|                janetc_lintf(c, JANET_C_LINT_STRICT, "binding %q is unused", janet_wrap_symbol(pair.sym));
  ------------------
  |  |  849|   362k|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  ------------------
  |  |  |  |  828|   362k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   362k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   362k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7099|   362k|            }
 7100|       |            /* The variable should not be lexically accessible */
 7101|  1.07M|            pair.sym = NULL;
 7102|  1.07M|            if (pair.death_pc == UINT32_MAX) {
  ------------------
  |  Branch (7102:17): [True: 499k, False: 577k]
  ------------------
 7103|   499k|                pair.death_pc = (uint32_t) janet_v_count(c->buffer);
  ------------------
  |  |  759|   499k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|   499k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   499k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 499k, False: 0]
  |  |  ------------------
  ------------------
 7104|   499k|            }
 7105|  1.07M|            if (pair.keep) {
  ------------------
  |  Branch (7105:17): [True: 21.2k, False: 1.05M]
  ------------------
 7106|       |                /* The variable should also not be included in the locals */
 7107|  21.2k|                pair.sym2 = NULL;
 7108|  21.2k|                janetc_regalloc_touch(&newscope->ra, pair.slot.index);
 7109|  21.2k|            }
 7110|  1.07M|            janet_v_push(newscope->syms, pair);
  ------------------
  |  |  757|  1.07M|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  1.07M|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  1.07M|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  1.07M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.07M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  1.07M|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.07M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 6.23k, False: 1.07M]
  |  |  |  |  |  |  |  Branch (768:50): [True: 19.7k, False: 1.05M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|  25.9k|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  1.07M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.07M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7111|  1.07M|        }
 7112|  21.4k|    }
 7113|       |
 7114|       |    /* Free the old scope */
 7115|   225k|    janet_v_free(oldscope->consts);
  ------------------
  |  |  756|   225k|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|  85.5k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 85.5k, False: 139k]
  |  |  ------------------
  ------------------
 7116|   225k|    janet_v_free(oldscope->syms);
  ------------------
  |  |  756|   225k|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|  14.2k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 14.2k, False: 211k]
  |  |  ------------------
  ------------------
 7117|   225k|    janet_v_free(oldscope->envs);
  ------------------
  |  |  756|   225k|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|  7.22k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 7.22k, False: 218k]
  |  |  ------------------
  ------------------
 7118|   225k|    janet_v_free(oldscope->defs);
  ------------------
  |  |  756|   225k|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|  89.5k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 89.5k, False: 135k]
  |  |  ------------------
  ------------------
 7119|   225k|    janetc_regalloc_deinit(&oldscope->ra);
 7120|   225k|    janetc_regalloc_deinit(&oldscope->ua);
 7121|       |    /* Update pointer */
 7122|   225k|    if (newscope)
  ------------------
  |  Branch (7122:9): [True: 195k, False: 30.0k]
  ------------------
 7123|   195k|        newscope->child = NULL;
 7124|   225k|    c->scope = newscope;
 7125|   225k|}
janetc_popscope_keepslot:
 7128|  9.64k|void janetc_popscope_keepslot(JanetCompiler *c, JanetSlot retslot) {
 7129|  9.64k|    JanetScope *scope;
 7130|  9.64k|    janetc_popscope(c);
 7131|  9.64k|    scope = c->scope;
 7132|  9.64k|    if (scope && retslot.envindex < 0 && retslot.index >= 0) {
  ------------------
  |  Branch (7132:9): [True: 9.64k, False: 0]
  |  Branch (7132:18): [True: 9.64k, False: 0]
  |  Branch (7132:42): [True: 3.06k, False: 6.58k]
  ------------------
 7133|  3.06k|        janetc_regalloc_touch(&scope->ra, retslot.index);
 7134|  3.06k|    }
 7135|  9.64k|}
janetc_shadowcheck:
 7172|  1.12M|Shadowing janetc_shadowcheck(JanetCompiler *c, const uint8_t *sym) {
 7173|       |    /* Check locals */
 7174|  1.12M|    JanetScope *scope = c->scope;
 7175|  1.12M|    int is_global = (scope->flags & JANET_SCOPE_TOP);
  ------------------
  |  | 1060|  1.12M|#define JANET_SCOPE_TOP 4
  ------------------
 7176|  1.22M|    while (scope) {
  ------------------
  |  Branch (7176:12): [True: 1.21M, False: 14.3k]
  ------------------
 7177|  1.21M|        int32_t len = janet_v_count(scope->syms);
  ------------------
  |  |  759|  1.21M|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  1.15M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.15M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 1.15M, False: 60.1k]
  |  |  ------------------
  ------------------
 7178|  17.5M|        for (int32_t i = len - 1; i >= 0; i--) {
  ------------------
  |  Branch (7178:35): [True: 17.4M, False: 105k]
  ------------------
 7179|  17.4M|            SymPair *pair = scope->syms + i;
 7180|  17.4M|            if (pair->sym == sym) {
  ------------------
  |  Branch (7180:17): [True: 1.10M, False: 16.3M]
  ------------------
 7181|  1.10M|                if (is_global) {
  ------------------
  |  Branch (7181:21): [True: 1.57k, False: 1.10M]
  ------------------
 7182|       |                    /* This can happen in a top level form like (def [x [x y]] [1 [2 3]])` where a symbol is reused in one expression */
 7183|       |                    /* janet_assert(!is_global, "shadowing analysis is incorrect. compiler bug"); */
 7184|  1.57k|                    return JANETC_SHADOW_GLOBAL_HIDES_GLOBAL;
 7185|  1.57k|                }
 7186|  1.10M|                return JANETC_SHADOW_LOCAL_HIDES_LOCAL;
 7187|  1.10M|            }
 7188|  17.4M|        }
 7189|   105k|        scope = scope->parent;
 7190|   105k|    }
 7191|       |    /* Check globals */
 7192|  14.3k|    JanetBinding binding = janet_resolve_ext(c->env, sym);
 7193|  14.3k|    if (binding.type == JANET_BINDING_MACRO || binding.type == JANET_BINDING_DYNAMIC_MACRO) {
  ------------------
  |  Branch (7193:9): [True: 3.72k, False: 10.6k]
  |  Branch (7193:48): [True: 0, False: 10.6k]
  ------------------
 7194|  3.72k|        return JANETC_SHADOW_MACRO;
 7195|  10.6k|    } else if (binding.type == JANET_BINDING_NONE) {
  ------------------
  |  Branch (7195:16): [True: 6.76k, False: 3.84k]
  ------------------
 7196|  6.76k|        return JANETC_SHADOW_NONE;
 7197|  6.76k|    } else {
 7198|  3.84k|        if (is_global) {
  ------------------
  |  Branch (7198:13): [True: 4, False: 3.84k]
  ------------------
 7199|      4|            return JANETC_SHADOW_GLOBAL_HIDES_GLOBAL;
 7200|  3.84k|        } else {
 7201|  3.84k|            return JANETC_SHADOW_LOCAL_HIDES_GLOBAL;
 7202|  3.84k|        }
 7203|  3.84k|    }
 7204|  14.3k|}
janetc_resolve:
 7209|   527k|    const uint8_t *sym) {
 7210|       |
 7211|   527k|    JanetSlot ret = janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|   527k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|   527k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   527k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   527k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7212|   527k|    JanetScope *scope = c->scope;
 7213|   527k|    SymPair *pair;
 7214|   527k|    int foundlocal = 1;
 7215|   527k|    int unused = 0;
 7216|       |
 7217|       |    /* Search scopes for symbol, starting from top */
 7218|  1.10M|    while (scope) {
  ------------------
  |  Branch (7218:12): [True: 810k, False: 292k]
  ------------------
 7219|   810k|        int32_t i, len;
 7220|   810k|        if (scope->flags & JANET_SCOPE_UNUSED)
  ------------------
  |  | 1061|   810k|#define JANET_SCOPE_UNUSED 8
  ------------------
  |  Branch (7220:13): [True: 294, False: 809k]
  ------------------
 7221|    294|            unused = 1;
 7222|   810k|        len = janet_v_count(scope->syms);
  ------------------
  |  |  759|   810k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|   246k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   246k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 246k, False: 563k]
  |  |  ------------------
  ------------------
 7223|       |        /* Search in reverse order */
 7224|  2.79M|        for (i = len - 1; i >= 0; i--) {
  ------------------
  |  Branch (7224:27): [True: 2.21M, False: 575k]
  ------------------
 7225|  2.21M|            pair = scope->syms + i;
 7226|  2.21M|            if (pair->sym == sym) {
  ------------------
  |  Branch (7226:17): [True: 234k, False: 1.98M]
  ------------------
 7227|   234k|                ret = pair->slot;
 7228|   234k|                pair->referenced = 1;
 7229|   234k|                goto found;
 7230|   234k|            }
 7231|  2.21M|        }
 7232|   575k|        if (scope->flags & JANET_SCOPE_FUNCTION)
  ------------------
  |  | 1058|   575k|#define JANET_SCOPE_FUNCTION 1
  ------------------
  |  Branch (7232:13): [True: 544k, False: 31.1k]
  ------------------
 7233|   544k|            foundlocal = 0;
 7234|   575k|        scope = scope->parent;
 7235|   575k|    }
 7236|       |
 7237|       |    /* Symbol not found - check for global */
 7238|   292k|    {
 7239|   292k|        JanetBinding binding = janet_resolve_ext(c->env, sym);
 7240|   292k|        if (binding.type == JANET_BINDING_NONE) {
  ------------------
  |  Branch (7240:13): [True: 8.23k, False: 284k]
  ------------------
 7241|  8.23k|            Janet handler = janet_table_get_keyword(c->env, "missing-symbol");
 7242|  8.23k|            switch (janet_type(handler)) {
  ------------------
  |  |  795|  8.23k|    (isnan((x).number) \
  |  |  796|  8.23k|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  8.23k|        : JANET_NUMBER)
  ------------------
  |  Branch (7242:21): [True: 8.23k, False: 0]
  ------------------
 7243|  8.23k|                case JANET_NIL:
  ------------------
  |  Branch (7243:17): [True: 8.23k, False: 0]
  ------------------
 7244|  8.23k|                    break;
 7245|      0|                case JANET_FUNCTION:
  ------------------
  |  Branch (7245:17): [True: 0, False: 8.23k]
  ------------------
 7246|      0|                    if (!lookup_missing(c, sym, janet_unwrap_function(handler), &binding))
  ------------------
  |  |  868|      0|#define janet_unwrap_function(x) ((JanetFunction *)janet_nanbox_to_pointer(x))
  ------------------
  |  Branch (7246:25): [True: 0, False: 0]
  ------------------
 7247|      0|                        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7248|      0|                    break;
 7249|      0|                default:
  ------------------
  |  Branch (7249:17): [True: 0, False: 8.23k]
  ------------------
 7250|      0|                    janetc_error(c, janet_formatc("invalid lookup handler %V", handler));
 7251|      0|                    return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7252|  8.23k|            }
 7253|  8.23k|        }
 7254|       |
 7255|   292k|        switch (binding.type) {
 7256|      0|            default:
  ------------------
  |  Branch (7256:13): [True: 0, False: 292k]
  ------------------
 7257|  8.23k|            case JANET_BINDING_NONE:
  ------------------
  |  Branch (7257:13): [True: 8.23k, False: 284k]
  ------------------
 7258|  8.23k|                janetc_error(c, janet_formatc("unknown symbol %q", janet_wrap_symbol(sym)));
  ------------------
  |  |  849|  8.23k|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  ------------------
  |  |  |  |  828|  8.23k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  8.23k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  8.23k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7259|  8.23k|                return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|  8.23k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  8.23k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  8.23k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  8.23k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7260|   252k|            case JANET_BINDING_DEF:
  ------------------
  |  Branch (7260:13): [True: 252k, False: 40.5k]
  ------------------
 7261|   253k|            case JANET_BINDING_MACRO: /* Macro should function like defs when not in calling pos */
  ------------------
  |  Branch (7261:13): [True: 1.00k, False: 291k]
  ------------------
 7262|   253k|                ret = janetc_cslot(binding.value);
 7263|   253k|                break;
 7264|      0|            case JANET_BINDING_DYNAMIC_DEF:
  ------------------
  |  Branch (7264:13): [True: 0, False: 292k]
  ------------------
 7265|      0|            case JANET_BINDING_DYNAMIC_MACRO:
  ------------------
  |  Branch (7265:13): [True: 0, False: 292k]
  ------------------
 7266|      0|                ret = janetc_cslot(binding.value);
 7267|      0|                ret.flags |= JANET_SLOT_REF | JANET_SLOT_NAMED | JANET_SLOTTYPE_ANY;
  ------------------
  |  | 1041|      0|#define JANET_SLOT_REF 0x80000
  ------------------
                              ret.flags |= JANET_SLOT_REF | JANET_SLOT_NAMED | JANET_SLOTTYPE_ANY;
  ------------------
  |  | 1039|      0|#define JANET_SLOT_NAMED 0x20000
  ------------------
                              ret.flags |= JANET_SLOT_REF | JANET_SLOT_NAMED | JANET_SLOTTYPE_ANY;
  ------------------
  |  | 1048|      0|#define JANET_SLOTTYPE_ANY 0xFFFF
  ------------------
 7268|      0|                ret.flags &= ~JANET_SLOT_CONSTANT;
  ------------------
  |  | 1038|      0|#define JANET_SLOT_CONSTANT 0x10000
  ------------------
 7269|      0|                break;
 7270|  31.2k|            case JANET_BINDING_VAR: {
  ------------------
  |  Branch (7270:13): [True: 31.2k, False: 261k]
  ------------------
 7271|  31.2k|                ret = janetc_cslot(binding.value);
 7272|  31.2k|                ret.flags |= JANET_SLOT_REF | JANET_SLOT_NAMED | JANET_SLOT_MUTABLE | JANET_SLOTTYPE_ANY;
  ------------------
  |  | 1041|  31.2k|#define JANET_SLOT_REF 0x80000
  ------------------
                              ret.flags |= JANET_SLOT_REF | JANET_SLOT_NAMED | JANET_SLOT_MUTABLE | JANET_SLOTTYPE_ANY;
  ------------------
  |  | 1039|  31.2k|#define JANET_SLOT_NAMED 0x20000
  ------------------
                              ret.flags |= JANET_SLOT_REF | JANET_SLOT_NAMED | JANET_SLOT_MUTABLE | JANET_SLOTTYPE_ANY;
  ------------------
  |  | 1040|  31.2k|#define JANET_SLOT_MUTABLE 0x40000
  ------------------
                              ret.flags |= JANET_SLOT_REF | JANET_SLOT_NAMED | JANET_SLOT_MUTABLE | JANET_SLOTTYPE_ANY;
  ------------------
  |  | 1048|  31.2k|#define JANET_SLOTTYPE_ANY 0xFFFF
  ------------------
 7273|  31.2k|                ret.flags &= ~JANET_SLOT_CONSTANT;
  ------------------
  |  | 1038|  31.2k|#define JANET_SLOT_CONSTANT 0x10000
  ------------------
 7274|  31.2k|                break;
 7275|      0|            }
 7276|   292k|        }
 7277|   284k|        JanetCompileLintLevel depLevel = JANET_C_LINT_RELAXED;
 7278|   284k|        switch (binding.deprecation) {
  ------------------
  |  Branch (7278:17): [True: 284k, False: 0]
  ------------------
 7279|   284k|            case JANET_BINDING_DEP_NONE:
  ------------------
  |  Branch (7279:13): [True: 284k, False: 0]
  ------------------
 7280|   284k|                break;
 7281|      0|            case JANET_BINDING_DEP_RELAXED:
  ------------------
  |  Branch (7281:13): [True: 0, False: 284k]
  ------------------
 7282|      0|                depLevel = JANET_C_LINT_RELAXED;
 7283|      0|                break;
 7284|      0|            case JANET_BINDING_DEP_NORMAL:
  ------------------
  |  Branch (7284:13): [True: 0, False: 284k]
  ------------------
 7285|      0|                depLevel = JANET_C_LINT_NORMAL;
 7286|      0|                break;
 7287|      0|            case JANET_BINDING_DEP_STRICT:
  ------------------
  |  Branch (7287:13): [True: 0, False: 284k]
  ------------------
 7288|      0|                depLevel = JANET_C_LINT_STRICT;
 7289|      0|                break;
 7290|   284k|        }
 7291|   284k|        if (binding.deprecation != JANET_BINDING_DEP_NONE) {
  ------------------
  |  Branch (7291:13): [True: 0, False: 284k]
  ------------------
 7292|      0|            janetc_lintf(c, depLevel, "%q is deprecated", janet_wrap_symbol(sym));
  ------------------
  |  |  849|      0|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  ------------------
  |  |  |  |  828|      0|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7293|      0|        }
 7294|   284k|        return ret;
 7295|   284k|    }
 7296|       |
 7297|       |    /* Symbol was found */
 7298|   234k|found:
 7299|       |
 7300|       |    /* Constants can be returned immediately (they are stateless) */
 7301|   234k|    if (ret.flags & (JANET_SLOT_CONSTANT | JANET_SLOT_REF))
  ------------------
  |  | 1038|   234k|#define JANET_SLOT_CONSTANT 0x10000
  ------------------
                  if (ret.flags & (JANET_SLOT_CONSTANT | JANET_SLOT_REF))
  ------------------
  |  | 1041|   234k|#define JANET_SLOT_REF 0x80000
  ------------------
  |  Branch (7301:9): [True: 0, False: 234k]
  ------------------
 7302|      0|        return ret;
 7303|       |
 7304|       |    /* Unused references and locals shouldn't add captured envs. */
 7305|   234k|    if (foundlocal) {
  ------------------
  |  Branch (7305:9): [True: 224k, False: 10.3k]
  ------------------
 7306|   224k|        ret.envindex = -1;
 7307|   224k|        return ret;
 7308|   224k|    }
 7309|  10.3k|    if (unused) {
  ------------------
  |  Branch (7309:9): [True: 0, False: 10.3k]
  ------------------
 7310|      0|        ret.index = 0; /* we must have at least 1 slot if we are calling resolve in scope */
 7311|      0|        ret.envindex = -1;
 7312|      0|        return ret;
 7313|      0|    }
 7314|       |
 7315|       |    /* non-local scope needs to expose its environment */
 7316|  10.3k|    JanetScope *original_scope = scope;
 7317|  10.3k|    pair->keep = 1;
 7318|  10.3k|    pair->referenced = 1;
 7319|  42.5k|    while (scope && !(scope->flags & JANET_SCOPE_FUNCTION))
  ------------------
  |  | 1058|  42.5k|#define JANET_SCOPE_FUNCTION 1
  ------------------
  |  Branch (7319:12): [True: 42.5k, False: 0]
  |  Branch (7319:21): [True: 32.1k, False: 10.3k]
  ------------------
 7320|  32.1k|        scope = scope->parent;
 7321|  10.3k|    janet_assert(scope, "invalid scopes");
  ------------------
  |  |  389|  10.3k|#define janet_assert(c, m) do { \
  |  |  390|  10.3k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 10.3k]
  |  |  ------------------
  |  |  391|  10.3k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 10.3k]
  |  |  ------------------
  ------------------
 7322|  10.3k|    scope->flags |= JANET_SCOPE_ENV;
  ------------------
  |  | 1059|  10.3k|#define JANET_SCOPE_ENV 2
  ------------------
 7323|       |
 7324|       |    /* In the function scope, allocate the slot as an upvalue */
 7325|  10.3k|    janetc_regalloc_touch(&scope->ua, ret.index);
 7326|       |
 7327|       |    /* Iterate through child scopes and make sure environment is propagated */
 7328|  10.3k|    scope = scope->child;
 7329|       |
 7330|       |    /* Propagate env up to current scope */
 7331|  10.3k|    int32_t envindex = -1;
 7332|  64.1k|    while (scope) {
  ------------------
  |  Branch (7332:12): [True: 53.7k, False: 10.3k]
  ------------------
 7333|  53.7k|        if (scope->flags & JANET_SCOPE_FUNCTION) {
  ------------------
  |  | 1058|  53.7k|#define JANET_SCOPE_FUNCTION 1
  ------------------
  |  Branch (7333:13): [True: 13.5k, False: 40.2k]
  ------------------
 7334|  13.5k|            int32_t j, len;
 7335|  13.5k|            int scopefound = 0;
 7336|       |            /* Check if scope already has env. If so, break */
 7337|  13.5k|            len = janet_v_count(scope->envs);
  ------------------
  |  |  759|  13.5k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  6.35k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  6.35k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 6.35k, False: 7.22k]
  |  |  ------------------
  ------------------
 7338|  13.6k|            for (j = 0; j < len; j++) {
  ------------------
  |  Branch (7338:25): [True: 6.37k, False: 7.23k]
  ------------------
 7339|  6.37k|                if (scope->envs[j].envindex == envindex) {
  ------------------
  |  Branch (7339:21): [True: 6.33k, False: 32]
  ------------------
 7340|  6.33k|                    scopefound = 1;
 7341|  6.33k|                    envindex = j;
 7342|  6.33k|                    break;
 7343|  6.33k|                }
 7344|  6.37k|            }
 7345|       |            /* Add the environment if it is not already referenced */
 7346|  13.5k|            if (!scopefound) {
  ------------------
  |  Branch (7346:17): [True: 7.23k, False: 6.33k]
  ------------------
 7347|  7.23k|                len = janet_v_count(scope->envs);
  ------------------
  |  |  759|  7.23k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|     12|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|     12|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 12, False: 7.22k]
  |  |  ------------------
  ------------------
 7348|  7.23k|                JanetEnvRef ref;
 7349|  7.23k|                ref.envindex = envindex;
 7350|  7.23k|                ref.scope = original_scope;
 7351|  7.23k|                janet_v_push(scope->envs, ref);
  ------------------
  |  |  757|  7.23k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  7.23k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  7.23k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|     12|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|     12|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|     12|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|     12|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 7.22k, False: 12]
  |  |  |  |  |  |  |  Branch (768:50): [True: 12, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|  7.23k|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  7.23k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  7.23k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7352|  7.23k|                envindex = len;
 7353|  7.23k|            }
 7354|  13.5k|        }
 7355|  53.7k|        scope = scope->child;
 7356|  53.7k|    }
 7357|       |
 7358|  10.3k|    ret.envindex = envindex;
 7359|  10.3k|    return ret;
 7360|  10.3k|}
janetc_return:
 7363|   181k|JanetSlot janetc_return(JanetCompiler *c, JanetSlot s) {
 7364|   181k|    if (!(s.flags & JANET_SLOT_RETURNED)) {
  ------------------
  |  | 1042|   181k|#define JANET_SLOT_RETURNED 0x100000
  ------------------
  |  Branch (7364:9): [True: 179k, False: 2.07k]
  ------------------
 7365|   179k|        if (s.flags & JANET_SLOT_CONSTANT && janet_checktype(s.constant, JANET_NIL))
  ------------------
  |  | 1038|   359k|#define JANET_SLOT_CONSTANT 0x10000
  ------------------
                      if (s.flags & JANET_SLOT_CONSTANT && janet_checktype(s.constant, JANET_NIL))
  ------------------
  |  |  806|  84.3k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 911, False: 83.4k]
  |  |  |  Branch (806:6): [Folded, False: 84.3k]
  |  |  ------------------
  |  |  807|  84.3k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  84.3k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  84.3k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  84.3k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  84.3k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  84.3k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (7365:13): [True: 84.3k, False: 95.4k]
  ------------------
 7366|    911|            janetc_emit(c, JOP_RETURN_NIL);
 7367|   178k|        else
 7368|   178k|            janetc_emit_s(c, JOP_RETURN, s, 0);
 7369|   179k|        s.flags |= JANET_SLOT_RETURNED;
  ------------------
  |  | 1042|   179k|#define JANET_SLOT_RETURNED 0x100000
  ------------------
 7370|   179k|    }
 7371|   181k|    return s;
 7372|   181k|}
janetc_gettarget:
 7375|  2.07M|JanetSlot janetc_gettarget(JanetFopts opts) {
 7376|  2.07M|    JanetSlot slot;
 7377|  2.07M|    if ((opts.flags & JANET_FOPTS_HINT) &&
  ------------------
  |  | 1148|  2.07M|#define JANET_FOPTS_HINT 0x20000
  ------------------
  |  Branch (7377:9): [True: 1.80k, False: 2.07M]
  ------------------
 7378|  1.80k|            (opts.hint.envindex < 0) &&
  ------------------
  |  Branch (7378:13): [True: 1.04k, False: 763]
  ------------------
 7379|  1.04k|            (opts.hint.index >= 0 && opts.hint.index <= 0xFF)) {
  ------------------
  |  Branch (7379:14): [True: 1.04k, False: 0]
  |  Branch (7379:38): [True: 1.04k, False: 0]
  ------------------
 7380|  1.04k|        slot = opts.hint;
 7381|  2.07M|    } else {
 7382|  2.07M|        slot.envindex = -1;
 7383|  2.07M|        slot.constant = janet_wrap_nil();
  ------------------
  |  |  831|  2.07M|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  2.07M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.07M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.07M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7384|  2.07M|        slot.flags = 0;
 7385|  2.07M|        slot.index = janetc_allocfar(opts.compiler);
 7386|  2.07M|    }
 7387|  2.07M|    return slot;
 7388|  2.07M|}
janetc_toslots:
 7391|   341k|JanetSlot *janetc_toslots(JanetCompiler *c, const Janet *vals, int32_t len) {
 7392|   341k|    int32_t i;
 7393|   341k|    JanetSlot *ret = NULL;
 7394|   341k|    JanetFopts subopts = janetc_fopts_default(c);
 7395|   341k|    subopts.flags |= JANET_FOPTS_ACCEPT_SPLICE;
  ------------------
  |  | 1150|   341k|#define JANET_FOPTS_ACCEPT_SPLICE 0x80000
  ------------------
 7396|  1.81M|    for (i = 0; i < len; i++) {
  ------------------
  |  Branch (7396:17): [True: 1.47M, False: 341k]
  ------------------
 7397|       |        janet_v_push(ret, janetc_value(subopts, vals[i]));
  ------------------
  |  |  757|  1.47M|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  1.47M|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  1.47M|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  1.13M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.13M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  1.13M|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.13M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 341k, False: 1.13M]
  |  |  |  |  |  |  |  Branch (768:50): [True: 310k, False: 826k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|   651k|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  1.47M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.47M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7398|  1.47M|    }
 7399|   341k|    return ret;
 7400|   341k|}
janetc_toslotskv:
 7403|     35|JanetSlot *janetc_toslotskv(JanetCompiler *c, Janet ds) {
 7404|     35|    JanetSlot *ret = NULL;
 7405|     35|    JanetFopts subopts = janetc_fopts_default(c);
 7406|     35|    subopts.flags |= JANET_FOPTS_ACCEPT_SPLICE;
  ------------------
  |  | 1150|     35|#define JANET_FOPTS_ACCEPT_SPLICE 0x80000
  ------------------
 7407|     35|    const JanetKV *kvs = NULL;
 7408|     35|    int32_t cap = 0, len = 0;
 7409|     35|    janet_dictionary_view(ds, &kvs, &len, &cap);
 7410|       |    /* Sort keys for stability of order? */
 7411|     35|    int32_t *index_buf;
 7412|     35|    int32_t index_buf_stack[32];
 7413|     35|    int32_t *index_buf_heap = NULL;
 7414|     35|    if (len < 32) {
  ------------------
  |  Branch (7414:9): [True: 32, False: 3]
  ------------------
 7415|     32|        index_buf = index_buf_stack;
 7416|     32|    } else {
 7417|      3|        index_buf_heap = janet_smalloc(sizeof(int32_t) * len);
 7418|      3|        index_buf = index_buf_heap;
 7419|      3|    }
 7420|     35|    if (len) janet_sorted_keys(kvs, cap, index_buf);
  ------------------
  |  Branch (7420:9): [True: 27, False: 8]
  ------------------
 7421|  1.95k|    for (int32_t i = 0; i < len; i++) {
  ------------------
  |  Branch (7421:25): [True: 1.91k, False: 35]
  ------------------
 7422|  1.91k|        janet_v_push(ret, janetc_value(subopts, kvs[index_buf[i]].key));
  ------------------
  |  |  757|  1.91k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  1.91k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  1.91k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  1.88k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.88k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  1.88k|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.88k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 27, False: 1.88k]
  |  |  |  |  |  |  |  Branch (768:50): [True: 17, False: 1.87k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|     44|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  1.91k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.91k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7423|  1.91k|        janet_v_push(ret, janetc_value(subopts, kvs[index_buf[i]].value));
  ------------------
  |  |  757|  1.91k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  1.91k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  1.91k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  1.91k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.91k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  1.91k|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.91k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 0, False: 1.91k]
  |  |  |  |  |  |  |  Branch (768:50): [True: 87, False: 1.82k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|     87|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  1.91k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.91k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7424|  1.91k|    }
 7425|     35|    if (index_buf_heap) janet_sfree(index_buf_heap);
  ------------------
  |  Branch (7425:9): [True: 3, False: 32]
  ------------------
 7426|     35|    return ret;
 7427|     35|}
janetc_pushslots:
 7432|  1.69M|int32_t janetc_pushslots(JanetCompiler *c, JanetSlot *slots) {
 7433|  1.69M|    int32_t i;
 7434|  1.69M|    int32_t count = janet_v_count(slots);
  ------------------
  |  |  759|  1.69M|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  1.69M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.69M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 1.69M, False: 51]
  |  |  ------------------
  ------------------
 7435|  1.69M|    int32_t min_arity = 0;
 7436|  1.69M|    int has_splice = 0;
 7437|  3.74M|    for (i = 0; i < count;) {
  ------------------
  |  Branch (7437:17): [True: 2.05M, False: 1.69M]
  ------------------
 7438|  2.05M|        if (slots[i].flags & JANET_SLOT_SPLICED) {
  ------------------
  |  | 1046|  2.05M|#define JANET_SLOT_SPLICED 0x1000000
  ------------------
  |  Branch (7438:13): [True: 15.3k, False: 2.03M]
  ------------------
 7439|  15.3k|            janetc_emit_s(c, JOP_PUSH_ARRAY, slots[i], 0);
 7440|  15.3k|            i++;
 7441|  15.3k|            has_splice = 1;
 7442|  2.03M|        } else if (i + 1 == count) {
  ------------------
  |  Branch (7442:20): [True: 35.7k, False: 2.00M]
  ------------------
 7443|  35.7k|            janetc_emit_s(c, JOP_PUSH, slots[i], 0);
 7444|  35.7k|            i++;
 7445|  35.7k|            min_arity++;
 7446|  2.00M|        } else if (slots[i + 1].flags & JANET_SLOT_SPLICED) {
  ------------------
  |  | 1046|  2.00M|#define JANET_SLOT_SPLICED 0x1000000
  ------------------
  |  Branch (7446:20): [True: 68.1k, False: 1.93M]
  ------------------
 7447|  68.1k|            janetc_emit_s(c, JOP_PUSH, slots[i], 0);
 7448|  68.1k|            janetc_emit_s(c, JOP_PUSH_ARRAY, slots[i + 1], 0);
 7449|  68.1k|            i += 2;
 7450|  68.1k|            min_arity++;
 7451|  68.1k|            has_splice = 1;
 7452|  1.93M|        } else if (i + 2 == count) {
  ------------------
  |  Branch (7452:20): [True: 1.65M, False: 277k]
  ------------------
 7453|  1.65M|            janetc_emit_ss(c, JOP_PUSH_2, slots[i], slots[i + 1], 0);
 7454|  1.65M|            i += 2;
 7455|  1.65M|            min_arity += 2;
 7456|  1.65M|        } else if (slots[i + 2].flags & JANET_SLOT_SPLICED) {
  ------------------
  |  | 1046|   277k|#define JANET_SLOT_SPLICED 0x1000000
  ------------------
  |  Branch (7456:20): [True: 2.54k, False: 275k]
  ------------------
 7457|  2.54k|            janetc_emit_ss(c, JOP_PUSH_2, slots[i], slots[i + 1], 0);
 7458|  2.54k|            janetc_emit_s(c, JOP_PUSH_ARRAY, slots[i + 2], 0);
 7459|  2.54k|            i += 3;
 7460|  2.54k|            min_arity += 2;
 7461|  2.54k|            has_splice = 1;
 7462|   275k|        } else {
 7463|   275k|            janetc_emit_sss(c, JOP_PUSH_3, slots[i], slots[i + 1], slots[i + 2], 0);
 7464|   275k|            i += 3;
 7465|   275k|            min_arity += 3;
 7466|   275k|        }
 7467|  2.05M|    }
 7468|  1.69M|    return has_splice ? (-1 - min_arity) : min_arity;
  ------------------
  |  Branch (7468:12): [True: 171, False: 1.69M]
  ------------------
 7469|  1.69M|}
janetc_freeslots:
 7482|  1.91M|void janetc_freeslots(JanetCompiler *c, JanetSlot *slots) {
 7483|  1.91M|    int32_t i;
 7484|  6.74M|    for (i = 0; i < janet_v_count(slots); i++) {
  ------------------
  |  |  759|  6.74M|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  6.74M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  6.74M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 6.74M, False: 886]
  |  |  ------------------
  ------------------
  |  Branch (7484:17): [True: 4.83M, False: 1.91M]
  ------------------
 7485|  4.83M|        janetc_freeslot(c, slots[i]);
 7486|  4.83M|    }
 7487|       |    janet_v_free(slots);
  ------------------
  |  |  756|  1.91M|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|  1.91M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 1.91M, False: 886]
  |  |  ------------------
  ------------------
 7488|  1.91M|}
janetc_throwaway:
 7493|    285|void janetc_throwaway(JanetFopts opts, Janet x) {
 7494|    285|    JanetCompiler *c = opts.compiler;
 7495|    285|    JanetScope unusedScope;
 7496|    285|    int32_t bufstart = janet_v_count(c->buffer);
  ------------------
  |  |  759|    285|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|    270|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|    270|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 270, False: 15]
  |  |  ------------------
  ------------------
 7497|    285|    int32_t mapbufstart = janet_v_count(c->mapbuffer);
  ------------------
  |  |  759|    285|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|    270|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|    270|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 270, False: 15]
  |  |  ------------------
  ------------------
 7498|    285|    janetc_scope(&unusedScope, c, JANET_SCOPE_UNUSED, "unused");
  ------------------
  |  | 1061|    285|#define JANET_SCOPE_UNUSED 8
  ------------------
 7499|    285|    janetc_value(opts, x);
 7500|    285|    janetc_lintf(c, JANET_C_LINT_STRICT, "dead code, consider removing %.4q", x);
 7501|    285|    janetc_popscope(c);
 7502|    285|    if (c->buffer) {
  ------------------
  |  Branch (7502:9): [True: 270, False: 15]
  ------------------
 7503|    270|        janet_v__cnt(c->buffer) = bufstart;
  ------------------
  |  |  766|    270|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  ------------------
  |  |  |  |  764|    270|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  ------------------
 7504|    270|        if (c->mapbuffer)
  ------------------
  |  Branch (7504:13): [True: 270, False: 0]
  ------------------
 7505|    270|            janet_v__cnt(c->mapbuffer) = mapbufstart;
  ------------------
  |  |  766|    270|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  ------------------
  |  |  |  |  764|    270|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  ------------------
 7506|    270|    }
 7507|    285|}
janetc_value:
 7880|  3.16M|JanetSlot janetc_value(JanetFopts opts, Janet x) {
 7881|  3.16M|    JanetSlot ret;
 7882|  3.16M|    JanetCompiler *c = opts.compiler;
 7883|  3.16M|    JanetSourceMapping last_mapping = c->current_mapping;
 7884|  3.16M|    c->recursion_guard--;
 7885|       |
 7886|       |    /* Guard against previous errors and unbounded recursion */
 7887|  3.16M|    if (c->result.status == JANET_COMPILE_ERROR) return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|   805k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|   805k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   805k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   805k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (7887:9): [True: 805k, False: 2.35M]
  ------------------
 7888|  2.35M|    if (c->recursion_guard <= 0) {
  ------------------
  |  Branch (7888:9): [True: 28, False: 2.35M]
  ------------------
 7889|     28|        janetc_cerror(c, "recursed too deeply");
 7890|     28|        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|     28|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|     28|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|     28|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|     28|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7891|     28|    }
 7892|       |
 7893|       |    /* Macro expand. Also gets possible special form and
 7894|       |     * refines source mapping cursor if possible. */
 7895|  2.35M|    const JanetSpecial *spec = NULL;
 7896|  2.35M|    int macroi = JANET_MAX_MACRO_EXPAND;
  ------------------
  |  |  302|  2.35M|#define JANET_MAX_MACRO_EXPAND 200
  ------------------
 7897|  2.44M|    while (macroi &&
  ------------------
  |  Branch (7897:12): [True: 2.44M, False: 0]
  ------------------
 7898|  2.44M|            c->result.status != JANET_COMPILE_ERROR &&
  ------------------
  |  Branch (7898:13): [True: 2.44M, False: 0]
  ------------------
 7899|  2.44M|            macroexpand1(c, x, &x, &spec))
  ------------------
  |  Branch (7899:13): [True: 85.2k, False: 2.35M]
  ------------------
 7900|  85.2k|        macroi--;
 7901|  2.35M|    if (macroi == 0) {
  ------------------
  |  Branch (7901:9): [True: 0, False: 2.35M]
  ------------------
 7902|      0|        janetc_cerror(c, "recursed too deeply in macro expansion");
 7903|      0|        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7904|      0|    }
 7905|       |
 7906|       |    /* Special forms */
 7907|  2.35M|    if (spec) {
  ------------------
  |  Branch (7907:9): [True: 509k, False: 1.84M]
  ------------------
 7908|   509k|        const Janet *tup = janet_unwrap_tuple(x);
  ------------------
  |  |  858|   509k|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
 7909|   509k|        ret = spec->compile(opts, janet_tuple_length(tup) - 1, tup + 1);
  ------------------
  |  | 1802|   509k|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|   509k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
 7910|  1.84M|    } else {
 7911|  1.84M|        switch (janet_type(x)) {
  ------------------
  |  |  795|  1.84M|    (isnan((x).number) \
  |  |  796|  1.84M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  1.84M|        : JANET_NUMBER)
  ------------------
  |  Branch (7911:17): [True: 1.53M, False: 308k]
  ------------------
 7912|   343k|            case JANET_TUPLE: {
  ------------------
  |  Branch (7912:13): [True: 343k, False: 1.50M]
  ------------------
 7913|   343k|                JanetFopts subopts = janetc_fopts_default(c);
 7914|   343k|                const Janet *tup = janet_unwrap_tuple(x);
  ------------------
  |  |  858|   343k|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
 7915|       |                /* Empty tuple is tuple literal */
 7916|   343k|                if (janet_tuple_length(tup) == 0) {
  ------------------
  |  | 1802|   343k|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|   343k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (7916:21): [True: 2.03k, False: 341k]
  ------------------
 7917|  2.03k|                    ret = janetc_cslot(janet_wrap_tuple(janet_tuple_n(NULL, 0)));
  ------------------
  |  |  843|  2.03k|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|  2.03k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.03k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.03k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7918|   341k|                } else if (janet_tuple_flag(tup) & JANET_TUPLE_FLAG_BRACKETCTOR) { /* [] tuples are not function call */
  ------------------
  |  | 1806|   341k|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|   341k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                              } else if (janet_tuple_flag(tup) & JANET_TUPLE_FLAG_BRACKETCTOR) { /* [] tuples are not function call */
  ------------------
  |  | 1798|   341k|#define JANET_TUPLE_FLAG_BRACKETCTOR 0x10000
  ------------------
  |  Branch (7918:28): [True: 504, False: 341k]
  ------------------
 7919|    504|                    ret = janetc_tuple(opts, x);
 7920|   341k|                } else {
 7921|       |                    /* Function calls */
 7922|   341k|                    JanetSlot head = janetc_value(subopts, tup[0]);
 7923|   341k|                    ret = janetc_call(opts, janetc_toslots(c, tup + 1, janet_tuple_length(tup) - 1), head, tup);
  ------------------
  |  | 1802|   341k|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|   341k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
 7924|   341k|                    janetc_freeslot(c, head);
 7925|   341k|                }
 7926|   343k|                ret.flags &= ~JANET_SLOT_SPLICED;
  ------------------
  |  | 1046|   343k|#define JANET_SLOT_SPLICED 0x1000000
  ------------------
 7927|   343k|            }
 7928|   343k|            break;
 7929|       |            /* Data Constructors */
 7930|   525k|            case JANET_SYMBOL:
  ------------------
  |  Branch (7930:13): [True: 525k, False: 1.32M]
  ------------------
 7931|   525k|                ret = janetc_resolve(c, janet_unwrap_symbol(x));
  ------------------
  |  |  864|   525k|#define janet_unwrap_symbol(x) ((JanetSymbol)janet_nanbox_to_pointer(x))
  ------------------
 7932|   525k|                break;
 7933|      1|            case JANET_ARRAY:
  ------------------
  |  Branch (7933:13): [True: 1, False: 1.84M]
  ------------------
 7934|      1|                ret = janetc_array(opts, x);
 7935|      1|                break;
 7936|     24|            case JANET_STRUCT:
  ------------------
  |  Branch (7936:13): [True: 24, False: 1.84M]
  ------------------
 7937|     24|                ret = janetc_tablector(opts, x, JOP_MAKE_STRUCT);
 7938|     24|                break;
 7939|     11|            case JANET_TABLE:
  ------------------
  |  Branch (7939:13): [True: 11, False: 1.84M]
  ------------------
 7940|     11|                ret = janetc_tablector(opts, x, JOP_MAKE_TABLE);
 7941|     11|                break;
 7942|     28|            case JANET_BUFFER:
  ------------------
  |  Branch (7942:13): [True: 28, False: 1.84M]
  ------------------
 7943|     28|                ret = janetc_bufferctor(opts, x);
 7944|     28|                break;
 7945|   977k|            default:
  ------------------
  |  Branch (7945:13): [True: 977k, False: 869k]
  ------------------
 7946|   977k|                ret = janetc_cslot(x);
 7947|   977k|                break;
 7948|  1.84M|        }
 7949|  1.84M|    }
 7950|       |
 7951|  2.35M|    if (c->result.status == JANET_COMPILE_ERROR)
  ------------------
  |  Branch (7951:9): [True: 64.6k, False: 2.29M]
  ------------------
 7952|  64.6k|        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|  64.6k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  64.6k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  64.6k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  64.6k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7953|  2.29M|    if (opts.flags & JANET_FOPTS_TAIL)
  ------------------
  |  | 1147|  2.29M|#define JANET_FOPTS_TAIL 0x10000
  ------------------
  |  Branch (7953:9): [True: 181k, False: 2.11M]
  ------------------
 7954|   181k|        ret = janetc_return(c, ret);
 7955|  2.29M|    if (opts.flags & JANET_FOPTS_HINT) {
  ------------------
  |  | 1148|  2.29M|#define JANET_FOPTS_HINT 0x20000
  ------------------
  |  Branch (7955:9): [True: 1.80k, False: 2.29M]
  ------------------
 7956|  1.80k|        janetc_copy(c, opts.hint, ret);
 7957|  1.80k|        ret = opts.hint;
 7958|  1.80k|    }
 7959|  2.29M|    c->current_mapping = last_mapping;
 7960|  2.29M|    c->recursion_guard++;
 7961|  2.29M|    return ret;
 7962|  2.35M|}
janet_def_addflags:
 7965|   180k|void janet_def_addflags(JanetFuncDef *def) {
 7966|   180k|    int32_t set_flags = 0;
 7967|   180k|    int32_t unset_flags = 0;
 7968|       |    /* pos checks */
 7969|   180k|    if (def->name)              set_flags |= JANET_FUNCDEF_FLAG_HASNAME;
  ------------------
  |  | 1100|   178k|#define JANET_FUNCDEF_FLAG_HASNAME 0x80000
  ------------------
  |  Branch (7969:9): [True: 178k, False: 1.94k]
  ------------------
 7970|   180k|    if (def->source)            set_flags |= JANET_FUNCDEF_FLAG_HASSOURCE;
  ------------------
  |  | 1101|   180k|#define JANET_FUNCDEF_FLAG_HASSOURCE 0x100000
  ------------------
  |  Branch (7970:9): [True: 180k, False: 0]
  ------------------
 7971|   180k|    if (def->defs)              set_flags |= JANET_FUNCDEF_FLAG_HASDEFS;
  ------------------
  |  | 1102|  88.9k|#define JANET_FUNCDEF_FLAG_HASDEFS 0x200000
  ------------------
  |  Branch (7971:9): [True: 88.9k, False: 91.6k]
  ------------------
 7972|   180k|    if (def->environments)      set_flags |= JANET_FUNCDEF_FLAG_HASENVS;
  ------------------
  |  | 1103|   180k|#define JANET_FUNCDEF_FLAG_HASENVS 0x400000
  ------------------
  |  Branch (7972:9): [True: 180k, False: 0]
  ------------------
 7973|   180k|    if (def->sourcemap)         set_flags |= JANET_FUNCDEF_FLAG_HASSOURCEMAP;
  ------------------
  |  | 1104|   180k|#define JANET_FUNCDEF_FLAG_HASSOURCEMAP 0x800000
  ------------------
  |  Branch (7973:9): [True: 180k, False: 0]
  ------------------
 7974|   180k|    if (def->closure_bitset)    set_flags |= JANET_FUNCDEF_FLAG_HASCLOBITSET;
  ------------------
  |  | 1106|    975|#define JANET_FUNCDEF_FLAG_HASCLOBITSET 0x2000000
  ------------------
  |  Branch (7974:9): [True: 975, False: 179k]
  ------------------
 7975|   180k|    if (def->named_args_count)  set_flags |= JANET_FUNCDEF_FLAG_NAMEDARGS;
  ------------------
  |  | 1107|      0|#define JANET_FUNCDEF_FLAG_NAMEDARGS 0x4000000
  ------------------
  |  Branch (7975:9): [True: 0, False: 180k]
  ------------------
 7976|       |    /* negative checks */
 7977|   180k|    if (!def->name)             unset_flags |= JANET_FUNCDEF_FLAG_HASNAME;
  ------------------
  |  | 1100|  1.94k|#define JANET_FUNCDEF_FLAG_HASNAME 0x80000
  ------------------
  |  Branch (7977:9): [True: 1.94k, False: 178k]
  ------------------
 7978|   180k|    if (!def->source)           unset_flags |= JANET_FUNCDEF_FLAG_HASSOURCE;
  ------------------
  |  | 1101|      0|#define JANET_FUNCDEF_FLAG_HASSOURCE 0x100000
  ------------------
  |  Branch (7978:9): [True: 0, False: 180k]
  ------------------
 7979|   180k|    if (!def->defs)             unset_flags |= JANET_FUNCDEF_FLAG_HASDEFS;
  ------------------
  |  | 1102|  91.6k|#define JANET_FUNCDEF_FLAG_HASDEFS 0x200000
  ------------------
  |  Branch (7979:9): [True: 91.6k, False: 88.9k]
  ------------------
 7980|   180k|    if (!def->environments)     unset_flags |= JANET_FUNCDEF_FLAG_HASENVS;
  ------------------
  |  | 1103|      0|#define JANET_FUNCDEF_FLAG_HASENVS 0x400000
  ------------------
  |  Branch (7980:9): [True: 0, False: 180k]
  ------------------
 7981|   180k|    if (!def->sourcemap)        unset_flags |= JANET_FUNCDEF_FLAG_HASSOURCEMAP;
  ------------------
  |  | 1104|      0|#define JANET_FUNCDEF_FLAG_HASSOURCEMAP 0x800000
  ------------------
  |  Branch (7981:9): [True: 0, False: 180k]
  ------------------
 7982|   180k|    if (!def->closure_bitset)   unset_flags |= JANET_FUNCDEF_FLAG_HASCLOBITSET;
  ------------------
  |  | 1106|   179k|#define JANET_FUNCDEF_FLAG_HASCLOBITSET 0x2000000
  ------------------
  |  Branch (7982:9): [True: 179k, False: 975]
  ------------------
 7983|   180k|    if (!def->named_args_count) unset_flags |= JANET_FUNCDEF_FLAG_NAMEDARGS;
  ------------------
  |  | 1107|   180k|#define JANET_FUNCDEF_FLAG_NAMEDARGS 0x4000000
  ------------------
  |  Branch (7983:9): [True: 180k, False: 0]
  ------------------
 7984|       |    /* Update flags */
 7985|   180k|    def->flags |= set_flags;
 7986|   180k|    def->flags &= ~unset_flags;
 7987|   180k|}
janetc_pop_funcdef:
 7992|   180k|JanetFuncDef *janetc_pop_funcdef(JanetCompiler *c, JanetString name) {
 7993|   180k|    JanetScope *scope = c->scope;
 7994|   180k|    JanetFuncDef *def = janet_funcdef_alloc();
 7995|   180k|    def->slotcount = scope->ra.max + 1;
 7996|       |
 7997|   180k|    janet_assert(scope->flags & JANET_SCOPE_FUNCTION, "expected function scope");
  ------------------
  |  |  389|   180k|#define janet_assert(c, m) do { \
  |  |  390|   180k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 180k]
  |  |  ------------------
  |  |  391|   180k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 180k]
  |  |  ------------------
  ------------------
 7998|       |
 7999|       |    /* Copy envs */
 8000|   180k|    def->environments_length = janet_v_count(scope->envs);
  ------------------
  |  |  759|   180k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  7.18k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  7.18k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 7.18k, False: 173k]
  |  |  ------------------
  ------------------
 8001|   180k|    def->environments = janet_malloc(sizeof(int32_t) * def->environments_length);
  ------------------
  |  | 2406|   180k|#define janet_malloc(X) malloc((X))
  ------------------
 8002|   187k|    for (int32_t i = 0; i < def->environments_length; i++) {
  ------------------
  |  Branch (8002:25): [True: 7.20k, False: 180k]
  ------------------
 8003|  7.20k|        def->environments[i] = scope->envs[i].envindex;
 8004|  7.20k|    }
 8005|       |
 8006|   180k|    def->constants_length = janet_v_count(scope->consts);
  ------------------
  |  |  759|   180k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  84.5k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  84.5k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 84.5k, False: 96.0k]
  |  |  ------------------
  ------------------
 8007|   180k|    def->constants = janet_v_flatten(scope->consts);
  ------------------
  |  |  762|   180k|#define janet_v_flatten(v)      (janet_v_flattenmem((v), sizeof(*(v))))
  ------------------
 8008|       |
 8009|   180k|    def->defs_length = janet_v_count(scope->defs);
  ------------------
  |  |  759|   180k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  88.9k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  88.9k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 88.9k, False: 91.6k]
  |  |  ------------------
  ------------------
 8010|   180k|    def->defs = janet_v_flatten(scope->defs);
  ------------------
  |  |  762|   180k|#define janet_v_flatten(v)      (janet_v_flattenmem((v), sizeof(*(v))))
  ------------------
 8011|       |
 8012|       |    /* Copy bytecode (only last chunk) */
 8013|   180k|    def->bytecode_length = janet_v_count(c->buffer) - scope->bytecode_start;
  ------------------
  |  |  759|   180k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|   180k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   180k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 180k, False: 0]
  |  |  ------------------
  ------------------
 8014|   180k|    if (def->bytecode_length) {
  ------------------
  |  Branch (8014:9): [True: 180k, False: 0]
  ------------------
 8015|   180k|        size_t s = sizeof(int32_t) * (size_t) def->bytecode_length;
 8016|   180k|        def->bytecode = janet_malloc(s);
  ------------------
  |  | 2406|   180k|#define janet_malloc(X) malloc((X))
  ------------------
 8017|   180k|        if (NULL == def->bytecode) {
  ------------------
  |  Branch (8017:13): [True: 0, False: 180k]
  ------------------
 8018|      0|            JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
 8019|      0|        }
 8020|   180k|        safe_memcpy(def->bytecode, c->buffer + scope->bytecode_start, s);
 8021|   180k|        janet_v__cnt(c->buffer) = scope->bytecode_start;
  ------------------
  |  |  766|   180k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  ------------------
  |  |  |  |  764|   180k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  ------------------
 8022|   180k|        if (NULL != c->mapbuffer && c->source) {
  ------------------
  |  Branch (8022:13): [True: 180k, False: 0]
  |  Branch (8022:37): [True: 180k, False: 0]
  ------------------
 8023|   180k|            size_t s = sizeof(JanetSourceMapping) * (size_t) def->bytecode_length;
 8024|   180k|            def->sourcemap = janet_malloc(s);
  ------------------
  |  | 2406|   180k|#define janet_malloc(X) malloc((X))
  ------------------
 8025|   180k|            if (NULL == def->sourcemap) {
  ------------------
  |  Branch (8025:17): [True: 0, False: 180k]
  ------------------
 8026|      0|                JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
 8027|      0|            }
 8028|   180k|            safe_memcpy(def->sourcemap, c->mapbuffer + scope->bytecode_start, s);
 8029|   180k|            janet_v__cnt(c->mapbuffer) = scope->bytecode_start;
  ------------------
  |  |  766|   180k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  ------------------
  |  |  |  |  764|   180k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  ------------------
 8030|   180k|        }
 8031|   180k|    }
 8032|       |
 8033|       |    /* Get source from parser */
 8034|   180k|    def->source = c->source;
 8035|       |
 8036|   180k|    def->arity = 0;
 8037|   180k|    def->min_arity = 0;
 8038|   180k|    def->flags = 0;
 8039|   180k|    if (scope->flags & JANET_SCOPE_ENV) {
  ------------------
  |  | 1059|   180k|#define JANET_SCOPE_ENV 2
  ------------------
  |  Branch (8039:9): [True: 975, False: 179k]
  ------------------
 8040|    975|        def->flags |= JANET_FUNCDEF_FLAG_NEEDSENV;
  ------------------
  |  | 1098|    975|#define JANET_FUNCDEF_FLAG_NEEDSENV 0x20000
  ------------------
 8041|    975|    }
 8042|       |
 8043|       |    /* Copy upvalue bitset */
 8044|   180k|    if (scope->ua.count) {
  ------------------
  |  Branch (8044:9): [True: 975, False: 179k]
  ------------------
 8045|       |        /* Number of u32s we need to create a bitmask for all slots */
 8046|    975|        int32_t slotchunks = ((def->slotcount - 1) >> 5) + 1;
 8047|       |        /* numchunks is min of slotchunks and scope->ua.count */
 8048|    975|        int32_t numchunks = slotchunks > scope->ua.count ? scope->ua.count : slotchunks;
  ------------------
  |  Branch (8048:29): [True: 0, False: 975]
  ------------------
 8049|    975|        uint32_t *chunks = janet_calloc(slotchunks, sizeof(uint32_t));
  ------------------
  |  | 2412|    975|#define janet_calloc(X, Y) calloc((X), (Y))
  ------------------
 8050|    975|        if (NULL == chunks) {
  ------------------
  |  Branch (8050:13): [True: 0, False: 975]
  ------------------
 8051|      0|            JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
 8052|      0|        }
 8053|    975|        memcpy(chunks, scope->ua.chunks, sizeof(uint32_t) * numchunks);
 8054|       |        /* fprintf(stderr, "slot chunks: %d, scope->ua.count: %d, numchunks: %d\n", slotchunks, scope->ua.count, numchunks); */
 8055|       |        /* Register allocator preallocates some registers [240-255, high 16 bits of chunk index 7], we can ignore those. */
 8056|    975|        if (scope->ua.count > 7 && slotchunks > 7) chunks[7] &= 0xFFFFU;
  ------------------
  |  Branch (8056:13): [True: 568, False: 407]
  |  Branch (8056:36): [True: 284, False: 284]
  ------------------
 8057|    975|        def->closure_bitset = chunks;
 8058|    975|    }
 8059|       |
 8060|       |    /* Capture symbol to local mapping */
 8061|   180k|    JanetSymbolMap *locals = NULL;
 8062|       |
 8063|       |    /* Symbol -> upvalue mapping */
 8064|   180k|    JanetScope *top = c->scope;
 8065|   541k|    while (top->parent) top = top->parent;
  ------------------
  |  Branch (8065:12): [True: 360k, False: 180k]
  ------------------
 8066|   721k|    for (JanetScope *s = top; s != NULL; s = s->child) {
  ------------------
  |  Branch (8066:31): [True: 541k, False: 180k]
  ------------------
 8067|   605k|        for (int32_t j = 0; j < janet_v_count(scope->envs); j++) {
  ------------------
  |  |  759|   605k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|   127k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   127k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 127k, False: 477k]
  |  |  ------------------
  ------------------
  |  Branch (8067:29): [True: 63.9k, False: 541k]
  ------------------
 8068|  63.9k|            JanetEnvRef ref = scope->envs[j];
 8069|  63.9k|            JanetScope *upscope = ref.scope;
 8070|  63.9k|            if (upscope != s) continue;
  ------------------
  |  Branch (8070:17): [True: 56.7k, False: 7.20k]
  ------------------
 8071|  2.36M|            for (int32_t i = 0; i < janet_v_count(upscope->syms); i++) {
  ------------------
  |  |  759|  2.36M|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  2.36M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  2.36M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 2.36M, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (8071:33): [True: 2.35M, False: 7.20k]
  ------------------
 8072|  2.35M|                SymPair pair = upscope->syms[i];
 8073|  2.35M|                if (pair.sym2) {
  ------------------
  |  Branch (8073:21): [True: 2.34M, False: 9.02k]
  ------------------
 8074|  2.34M|                    JanetSymbolMap jsm;
 8075|  2.34M|                    jsm.birth_pc = UINT32_MAX;
 8076|  2.34M|                    jsm.death_pc = j; /* Use death_pc to encode environment index */
 8077|  2.34M|                    jsm.slot_index = pair.slot.index;
 8078|  2.34M|                    jsm.symbol = pair.sym2;
 8079|  2.34M|                    janet_v_push(locals, jsm);
  ------------------
  |  |  757|  2.34M|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  2.34M|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  2.34M|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  2.33M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  2.33M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  2.33M|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  2.33M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 7.18k, False: 2.33M]
  |  |  |  |  |  |  |  Branch (768:50): [True: 24.3k, False: 2.31M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|  31.4k|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  2.34M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  2.34M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8080|  2.34M|                }
 8081|  2.35M|            }
 8082|  7.20k|        }
 8083|   541k|    }
 8084|       |
 8085|       |    /* Symbol -> slot mapping */
 8086|   508k|    for (int32_t i = 0; i < janet_v_count(scope->syms); i++) {
  ------------------
  |  |  759|   508k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|   333k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   333k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 333k, False: 175k]
  |  |  ------------------
  ------------------
  |  Branch (8086:25): [True: 328k, False: 180k]
  ------------------
 8087|   328k|        SymPair pair = scope->syms[i];
 8088|   328k|        if (pair.sym2) {
  ------------------
  |  Branch (8088:13): [True: 327k, False: 1.09k]
  ------------------
 8089|   327k|            JanetSymbolMap jsm;
 8090|       |            /* Check for unused symbols */
 8091|   327k|            if (pair.referenced == 0 && pair.sym) {
  ------------------
  |  Branch (8091:17): [True: 321k, False: 5.77k]
  |  Branch (8091:41): [True: 321k, False: 274]
  ------------------
 8092|   321k|                janetc_lintf(c, JANET_C_LINT_STRICT, "binding %q is unused", janet_wrap_symbol(pair.sym));
  ------------------
  |  |  849|   321k|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  ------------------
  |  |  |  |  828|   321k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   321k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   321k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8093|   321k|            }
 8094|   327k|            if (pair.death_pc == UINT32_MAX) {
  ------------------
  |  Branch (8094:17): [True: 325k, False: 1.80k]
  ------------------
 8095|   325k|                jsm.death_pc = def->bytecode_length;
 8096|   325k|            } else {
 8097|  1.80k|                jsm.death_pc = pair.death_pc - scope->bytecode_start;
 8098|  1.80k|            }
 8099|       |            /* Handle birth_pc == 0 correctly */
 8100|   327k|            if ((uint32_t) scope->bytecode_start > pair.birth_pc) {
  ------------------
  |  Branch (8100:17): [True: 3.76k, False: 323k]
  ------------------
 8101|  3.76k|                jsm.birth_pc = 0;
 8102|   323k|            } else {
 8103|   323k|                jsm.birth_pc = pair.birth_pc - scope->bytecode_start;
 8104|   323k|            }
 8105|   327k|            janet_assert(jsm.birth_pc <= jsm.death_pc, "birth pc after death pc");
  ------------------
  |  |  389|   327k|#define janet_assert(c, m) do { \
  |  |  390|   327k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 327k]
  |  |  ------------------
  |  |  391|   327k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 327k]
  |  |  ------------------
  ------------------
 8106|   327k|            janet_assert(jsm.birth_pc < (uint32_t) def->bytecode_length, "bad birth pc");
  ------------------
  |  |  389|   327k|#define janet_assert(c, m) do { \
  |  |  390|   327k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 327k]
  |  |  ------------------
  |  |  391|   327k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 327k]
  |  |  ------------------
  ------------------
 8107|   327k|            janet_assert(jsm.death_pc <= (uint32_t) def->bytecode_length, "bad death pc");
  ------------------
  |  |  389|   327k|#define janet_assert(c, m) do { \
  |  |  390|   327k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 327k]
  |  |  ------------------
  |  |  391|   327k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 327k]
  |  |  ------------------
  ------------------
 8108|   327k|            jsm.slot_index = pair.slot.index;
 8109|   327k|            jsm.symbol = pair.sym2;
 8110|   327k|            janet_v_push(locals, jsm);
  ------------------
  |  |  757|   327k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|   327k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|   327k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|   326k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|   326k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|   326k|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|   326k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 1.12k, False: 326k]
  |  |  |  |  |  |  |  Branch (768:50): [True: 10.3k, False: 315k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|  11.4k|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|   327k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   327k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8111|   327k|        }
 8112|   328k|    }
 8113|   180k|    def->symbolmap_length = janet_v_count(locals);
  ------------------
  |  |  759|   180k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  8.31k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  8.31k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 8.31k, False: 172k]
  |  |  ------------------
  ------------------
 8114|   180k|    def->symbolmap = janet_v_flatten(locals);
  ------------------
  |  |  762|   180k|#define janet_v_flatten(v)      (janet_v_flattenmem((v), sizeof(*(v))))
  ------------------
 8115|   180k|    if (def->symbolmap_length) def->flags |= JANET_FUNCDEF_FLAG_HASSYMBOLMAP;
  ------------------
  |  | 1099|  8.31k|#define JANET_FUNCDEF_FLAG_HASSYMBOLMAP 0x40000
  ------------------
  |  Branch (8115:9): [True: 8.31k, False: 172k]
  ------------------
 8116|       |
 8117|       |    /* Pop the scope */
 8118|   180k|    janetc_popscope(c);
 8119|       |
 8120|       |    /* Add a name _before_ optimization for debugging */
 8121|   180k|    def->name = name;
 8122|       |
 8123|       |#ifdef JANET_DEBUG
 8124|       |    janet_verify(def);
 8125|       |#endif
 8126|       |
 8127|   180k|    return def;
 8128|   180k|}
janet_compile_lint:
 8167|  30.0k|                                      JanetTable *env, const uint8_t *where, JanetArray *lints) {
 8168|  30.0k|    JanetCompiler c;
 8169|  30.0k|    JanetScope rootscope;
 8170|  30.0k|    JanetFopts fopts;
 8171|       |
 8172|  30.0k|    janetc_init(&c, env, where, lints);
 8173|       |
 8174|       |    /* Push a function scope */
 8175|  30.0k|    janetc_scope(&rootscope, &c, JANET_SCOPE_FUNCTION | JANET_SCOPE_TOP, "root");
  ------------------
  |  | 1058|  30.0k|#define JANET_SCOPE_FUNCTION 1
  ------------------
                  janetc_scope(&rootscope, &c, JANET_SCOPE_FUNCTION | JANET_SCOPE_TOP, "root");
  ------------------
  |  | 1060|  30.0k|#define JANET_SCOPE_TOP 4
  ------------------
 8176|       |
 8177|       |    /* Set initial form options */
 8178|  30.0k|    fopts.compiler = &c;
 8179|  30.0k|    fopts.flags = JANET_FOPTS_TAIL | JANET_SLOTTYPE_ANY;
  ------------------
  |  | 1147|  30.0k|#define JANET_FOPTS_TAIL 0x10000
  ------------------
                  fopts.flags = JANET_FOPTS_TAIL | JANET_SLOTTYPE_ANY;
  ------------------
  |  | 1048|  30.0k|#define JANET_SLOTTYPE_ANY 0xFFFF
  ------------------
 8180|  30.0k|    fopts.hint = janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|  30.0k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  30.0k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  30.0k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  30.0k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8181|       |
 8182|       |    /* Compile the value */
 8183|  30.0k|    janetc_value(fopts, source);
 8184|       |
 8185|  30.0k|    if (c.result.status == JANET_COMPILE_OK) {
  ------------------
  |  Branch (8185:9): [True: 15.7k, False: 14.2k]
  ------------------
 8186|  15.7k|        JanetFuncDef *def = janetc_pop_funcdef(&c, janet_cstring("thunk"));
 8187|  15.7k|        janet_def_addflags(def);
 8188|  15.7k|        janet_bytecode_optimize(def, c.optimize);
 8189|  15.7k|        c.result.funcdef = def;
 8190|  15.7k|    } else {
 8191|  14.2k|        c.result.error_mapping = c.current_mapping;
 8192|  14.2k|        janetc_popscope(&c);
 8193|  14.2k|    }
 8194|       |
 8195|  30.0k|    janetc_deinit(&c);
 8196|       |
 8197|  30.0k|    return c.result;
 8198|  30.0k|}
janet_compile:
 8200|  30.0k|JanetCompileResult janet_compile(Janet source, JanetTable *env, const uint8_t *where) {
 8201|       |    return janet_compile_lint(source, env, where, NULL);
 8202|  30.0k|}
janet_lib_compile:
 8256|    267|void janet_lib_compile(JanetTable *env) {
 8257|    267|    JanetRegExt cfuns[] = {
 8258|    267|        JANET_CORE_REG("compile", cfun_compile),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 8259|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
 8260|    267|    };
 8261|       |    janet_core_cfuns_ext(env, NULL, cfuns);
 8262|    267|}
janet_core_dyn:
 8532|   885k|              "returns `dflt` (or nil).") {
 8533|   885k|    janet_arity(argc, 1, 2);
 8534|   885k|    Janet value;
 8535|   885k|    if (janet_vm.fiber->env) {
  ------------------
  |  Branch (8535:9): [True: 885k, False: 0]
  ------------------
 8536|   885k|        value = janet_table_get(janet_vm.fiber->env, argv[0]);
 8537|   885k|    } else {
 8538|      0|        value = janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8539|      0|    }
 8540|   885k|    if (argc == 2 && janet_checktype(value, JANET_NIL)) {
  ------------------
  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  ------------------
  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (8540:9): [True: 0, False: 885k]
  ------------------
 8541|      0|        return argv[1];
 8542|      0|    }
 8543|   885k|    return value;
 8544|   885k|}
janet_core_setdyn:
 8548|   363k|              "Set a dynamic binding for `key` to `val`. Returns `val`.") {
 8549|   363k|    janet_fixarity(argc, 2);
 8550|   363k|    if (!janet_vm.fiber->env) {
  ------------------
  |  Branch (8550:9): [True: 0, False: 363k]
  ------------------
 8551|      0|        janet_vm.fiber->env = janet_table(2);
 8552|      0|    }
 8553|   363k|    janet_table_put(janet_vm.fiber->env, argv[0], argv[1]);
 8554|   363k|    return argv[1];
 8555|   363k|}
janet_core_string:
 8602|    111|              "Returns the new string.") {
 8603|    111|    JanetBuffer *b = janet_buffer(0);
 8604|    440|    for (int32_t i = 0; i < argc; ++i)
  ------------------
  |  Branch (8604:25): [True: 329, False: 111]
  ------------------
 8605|    329|        janet_to_string_b(b, argv[i]);
 8606|    111|    return janet_stringv(b->data, b->count);
  ------------------
  |  | 1827|    111|#define janet_stringv(str, len) janet_wrap_string(janet_string((str), (len)))
  |  |  ------------------
  |  |  |  |  848|    111|#define janet_wrap_string(s) janet_nanbox_wrap_c((s), JANET_STRING)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|    111|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|    111|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|    111|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8607|    111|}
janet_core_symbol:
 8613|  3.87k|              "Returns the new symbol.") {
 8614|  3.87k|    JanetBuffer *b = janet_buffer(0);
 8615|  15.1k|    for (int32_t i = 0; i < argc; ++i)
  ------------------
  |  Branch (8615:25): [True: 11.2k, False: 3.87k]
  ------------------
 8616|  11.2k|        janet_to_string_b(b, argv[i]);
 8617|  3.87k|    return janet_symbolv(b->data, b->count);
  ------------------
  |  | 1836|  3.87k|#define janet_symbolv(str, len) janet_wrap_symbol(janet_symbol((str), (len)))
  |  |  ------------------
  |  |  |  |  849|  3.87k|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|  3.87k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  3.87k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  3.87k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8618|  3.87k|}
janet_core_buffer:
 8635|    107|              "Returns the new buffer.") {
 8636|    107|    JanetBuffer *b = janet_buffer(0);
 8637|    321|    for (int32_t i = 0; i < argc; ++i)
  ------------------
  |  Branch (8637:25): [True: 214, False: 107]
  ------------------
 8638|    214|        janet_to_string_b(b, argv[i]);
 8639|    107|    return janet_wrap_buffer(b);
  ------------------
  |  |  847|    107|#define janet_wrap_buffer(s) janet_nanbox_wrap_((s), JANET_BUFFER)
  |  |  ------------------
  |  |  |  |  825|    107|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    107|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    107|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8640|    107|}
janet_core_scannumber:
 8655|    838|              "radix specifier is expected at the beginning of the number.") {
 8656|    838|    double number;
 8657|    838|    janet_arity(argc, 1, 2);
 8658|    838|    JanetByteView view = janet_getbytes(argv, 0);
 8659|    838|    int32_t base = janet_optinteger(argv, argc, 1, 0);
 8660|    838|    int valid = base == 0 || (base >= 2 && base <= 36);
  ------------------
  |  Branch (8660:17): [True: 838, False: 0]
  |  Branch (8660:31): [True: 0, False: 0]
  |  Branch (8660:44): [True: 0, False: 0]
  ------------------
 8661|    838|    if (!valid) {
  ------------------
  |  Branch (8661:9): [True: 0, False: 838]
  ------------------
 8662|      0|        janet_panicf("expected base between 2 and 36, got %d", base);
 8663|      0|    }
 8664|    838|    if (janet_scan_number_base(view.bytes, view.len, base, &number))
  ------------------
  |  Branch (8664:9): [True: 834, False: 4]
  ------------------
 8665|    834|        return janet_wrap_nil();
  ------------------
  |  |  831|    834|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|    834|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    834|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    834|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8666|      4|    return janet_wrap_number(number);
  ------------------
  |  |  835|      4|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  ------------------
 8667|    838|}
janet_core_tuple:
 8671|   873k|              "Creates and returns a tuple that contains values from `xs`.") {
 8672|   873k|    return janet_wrap_tuple(janet_tuple_n(argv, argc));
  ------------------
  |  |  843|   873k|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|   873k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   873k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   873k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8673|   873k|}
janet_core_struct:
 8796|    219|              "thrown.") {
 8797|    219|    int32_t i;
 8798|    219|    if (argc & 1) {
  ------------------
  |  Branch (8798:9): [True: 0, False: 219]
  ------------------
 8799|      0|        janet_panic("expected even number of arguments");
 8800|      0|    }
 8801|    219|    JanetKV *st = janet_struct_begin(argc >> 1);
 8802|  1.66k|    for (i = 0; i < argc; i += 2) {
  ------------------
  |  Branch (8802:17): [True: 1.44k, False: 219]
  ------------------
 8803|  1.44k|        janet_struct_put(st, argv[i], argv[i + 1]);
 8804|  1.44k|    }
 8805|    219|    return janet_wrap_struct(janet_struct_end(st));
  ------------------
  |  |  842|    219|#define janet_wrap_struct(s) janet_nanbox_wrap_c((s), JANET_STRUCT)
  |  |  ------------------
  |  |  |  |  828|    219|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    219|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    219|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8806|    219|}
janet_core_gensym:
 8812|   736k|              "it can be used in macros to generate automatic bindings.") {
 8813|   736k|    (void) argv;
 8814|   736k|    janet_fixarity(argc, 0);
 8815|   736k|    return janet_wrap_symbol(janet_symbol_gen());
  ------------------
  |  |  849|   736k|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  ------------------
  |  |  |  |  828|   736k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   736k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   736k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8816|   736k|}
janet_core_type:
 8871|  16.0M|              "or another keyword for an abstract type.") {
 8872|  16.0M|    janet_fixarity(argc, 1);
 8873|  16.0M|    JanetType t = janet_type(argv[0]);
  ------------------
  |  |  795|  16.0M|    (isnan((x).number) \
  |  |  796|  16.0M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  16.0M|        : JANET_NUMBER)
  ------------------
  |  Branch (8873:19): [True: 15.9M, False: 77.7k]
  ------------------
 8874|  16.0M|    if (t == JANET_ABSTRACT) {
  ------------------
  |  Branch (8874:9): [True: 26, False: 16.0M]
  ------------------
 8875|     26|        return janet_ckeywordv(janet_abstract_type(janet_unwrap_abstract(argv[0]))->name);
  ------------------
  |  | 1843|     26|#define janet_ckeywordv(cstr) janet_wrap_keyword(janet_ckeyword(cstr))
  |  |  ------------------
  |  |  |  |  850|     26|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|     26|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|     26|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|     26|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8876|  16.0M|    } else {
 8877|  16.0M|        return janet_ckeywordv(janet_type_names[t]);
  ------------------
  |  | 1843|  16.0M|#define janet_ckeywordv(cstr) janet_wrap_keyword(janet_ckeyword(cstr))
  |  |  ------------------
  |  |  |  |  850|  16.0M|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|  16.0M|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  16.0M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  16.0M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8878|  16.0M|    }
 8879|  16.0M|}
janet_core_check_nat:
 8950|      4|              "Check if x can be exactly represented as a non-negative 32 bit signed two's complement integer.") {
 8951|      4|    janet_fixarity(argc, 1);
 8952|      4|    if (!janet_checkint(argv[0])) return janet_wrap_false();
  ------------------
  |  |  833|      0|#define janet_wrap_false() janet_nanbox_from_payload(JANET_BOOLEAN, 0)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (8952:9): [True: 0, False: 4]
  ------------------
 8953|      4|    return janet_wrap_boolean(janet_unwrap_integer(argv[0]) >= 0);
  ------------------
  |  |  834|      4|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  ------------------
  |  |  |  |  822|      4|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      4|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      4|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8954|      4|}
janet_core_is_indexed:
 8965|      1|              "Check if x is an array or tuple.") {
 8966|      1|    janet_fixarity(argc, 1);
 8967|      1|    return janet_wrap_boolean(janet_checktypes(argv[0], JANET_TFLAG_INDEXED));
  ------------------
  |  |  834|      1|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  ------------------
  |  |  |  |  822|      2|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      1|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      1|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (822:51): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8968|      1|}
janet_core_memcmp:
 9019|  2.60k|              "to compare slices of the bytes sequences.") {
 9020|  2.60k|    janet_arity(argc, 2, 5);
 9021|  2.60k|    JanetByteView a = janet_getbytes(argv, 0);
 9022|  2.60k|    JanetByteView b = janet_getbytes(argv, 1);
 9023|  2.60k|    int32_t len = janet_optnat(argv, argc, 2, a.len < b.len ? a.len : b.len);
  ------------------
  |  Branch (9023:47): [True: 0, False: 2.60k]
  ------------------
 9024|  2.60k|    int32_t offset_a = janet_optnat(argv, argc, 3, 0);
 9025|  2.60k|    int32_t offset_b = janet_optnat(argv, argc, 4, 0);
 9026|  2.60k|    if (offset_a + len > a.len) janet_panicf("invalid offset-a: %d", offset_a);
  ------------------
  |  Branch (9026:9): [True: 0, False: 2.60k]
  ------------------
 9027|  2.60k|    if (offset_b + len > b.len) janet_panicf("invalid offset-b: %d", offset_b);
  ------------------
  |  Branch (9027:9): [True: 0, False: 2.60k]
  ------------------
 9028|  2.60k|    return janet_wrap_integer(memcmp(a.bytes + offset_a, b.bytes + offset_b, (size_t) len));
  ------------------
  |  |  967|  2.60k|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|  2.60k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
 9029|  2.60k|}
janet_core_env:
 9667|    267|JanetTable *janet_core_env(JanetTable *replacements) {
 9668|       |    /* Memoize core env, ignoring replacements the second time around. */
 9669|    267|    if (NULL != janet_vm.core_env) {
  ------------------
  |  Branch (9669:9): [True: 0, False: 267]
  ------------------
 9670|      0|        return janet_vm.core_env;
 9671|      0|    }
 9672|       |
 9673|    267|    JanetTable *dict = janet_core_lookup_table(replacements);
 9674|       |
 9675|       |    /* Unmarshal bytecode */
 9676|    267|    Janet marsh_out = janet_unmarshal(
 9677|    267|                          janet_core_image,
 9678|    267|                          janet_core_image_size,
 9679|    267|                          0,
 9680|    267|                          dict,
 9681|    267|                          NULL);
 9682|       |
 9683|       |    /* Memoize */
 9684|    267|    janet_gcroot(marsh_out);
 9685|    267|    JanetTable *env = janet_unwrap_table(marsh_out);
  ------------------
  |  |  861|    267|#define janet_unwrap_table(x) ((JanetTable *)janet_nanbox_to_pointer(x))
  ------------------
 9686|    267|    janet_vm.core_env = env;
 9687|       |
 9688|       |    /* Invert image dict manually here. We can't do this in boot.janet as it
 9689|       |     * breaks deterministic builds */
 9690|    267|    Janet lidv, midv;
 9691|    267|    lidv = midv = janet_wrap_nil();
  ------------------
  |  |  831|    267|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|    267|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    267|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    267|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9692|    267|    janet_resolve(env, janet_csymbol("load-image-dict"), &lidv);
 9693|    267|    janet_resolve(env, janet_csymbol("make-image-dict"), &midv);
 9694|       |
 9695|       |    /* Check that we actually got tables - if we are using a smaller corelib, may not exist */
 9696|    267|    if (janet_checktype(lidv, JANET_TABLE) && janet_checktype(midv, JANET_TABLE)) {
  ------------------
  |  |  806|    534|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 267, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 267]
  |  |  ------------------
  |  |  807|    534|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|    534|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|    267|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|    267|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    267|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    267|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (janet_checktype(lidv, JANET_TABLE) && janet_checktype(midv, JANET_TABLE)) {
  ------------------
  |  |  806|    267|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 267, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 267]
  |  |  ------------------
  |  |  807|    267|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|    267|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|    267|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|    267|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    267|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    267|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9697|    267|        JanetTable *lid = janet_unwrap_table(lidv);
  ------------------
  |  |  861|    267|#define janet_unwrap_table(x) ((JanetTable *)janet_nanbox_to_pointer(x))
  ------------------
 9698|    267|        JanetTable *mid = janet_unwrap_table(midv);
  ------------------
  |  |  861|    267|#define janet_unwrap_table(x) ((JanetTable *)janet_nanbox_to_pointer(x))
  ------------------
 9699|   547k|        for (int32_t i = 0; i < lid->capacity; i++) {
  ------------------
  |  Branch (9699:29): [True: 546k, False: 267]
  ------------------
 9700|   546k|            const JanetKV *kv = lid->data + i;
 9701|   546k|            if (!janet_checktype(kv->key, JANET_NIL)) {
  ------------------
  |  |  806|   546k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 546k]
  |  |  ------------------
  |  |  807|   546k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   546k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   546k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   546k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   546k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   546k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (9701:17): [True: 175k, False: 370k]
  ------------------
 9702|   175k|                janet_table_put(mid, kv->value, kv->key);
 9703|   175k|            }
 9704|   546k|        }
 9705|    267|    }
 9706|       |
 9707|    267|    return env;
 9708|    267|}
janet_core_lookup_table:
 9712|    267|JanetTable *janet_core_lookup_table(JanetTable *replacements) {
 9713|    267|    JanetTable *dict = janet_table(512);
 9714|    267|    janet_load_libs(dict);
 9715|       |
 9716|       |    /* Add replacements */
 9717|    267|    if (replacements != NULL) {
  ------------------
  |  Branch (9717:9): [True: 0, False: 267]
  ------------------
 9718|      0|        for (int32_t i = 0; i < replacements->capacity; i++) {
  ------------------
  |  Branch (9718:29): [True: 0, False: 0]
  ------------------
 9719|      0|            JanetKV kv = replacements->data[i];
 9720|      0|            if (!janet_checktype(kv.key, JANET_NIL)) {
  ------------------
  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  ------------------
  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (9720:17): [True: 0, False: 0]
  ------------------
 9721|      0|                janet_table_put(dict, kv.key, kv.value);
 9722|       |                /* Add replacement functions to registry? */
 9723|      0|            }
 9724|      0|        }
 9725|      0|    }
 9726|       |
 9727|    267|    return dict;
 9728|    267|}
janet_lib_debug:
10180|    267|void janet_lib_debug(JanetTable *env) {
10181|    267|    JanetRegExt debug_cfuns[] = {
10182|    267|        JANET_CORE_REG("debug/break", cfun_debug_break),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
10183|    267|        JANET_CORE_REG("debug/unbreak", cfun_debug_unbreak),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
10184|    267|        JANET_CORE_REG("debug/fbreak", cfun_debug_fbreak),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
10185|    267|        JANET_CORE_REG("debug/unfbreak", cfun_debug_unfbreak),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
10186|    267|        JANET_CORE_REG("debug/arg-stack", cfun_debug_argstack),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
10187|    267|        JANET_CORE_REG("debug/stack", cfun_debug_stack),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
10188|    267|        JANET_CORE_REG("debug/stacktrace", cfun_debug_stacktrace),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
10189|    267|        JANET_CORE_REG("debug/lineage", cfun_debug_lineage),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
10190|    267|        JANET_CORE_REG("debug/step", cfun_debug_step),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
10191|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
10192|    267|    };
10193|       |    janet_core_cfuns_ext(env, NULL, debug_cfuns);
10194|    267|}
janetc_allocfar:
10232|  5.95M|int32_t janetc_allocfar(JanetCompiler *c) {
10233|  5.95M|    int32_t reg = janetc_regalloc_1(&c->scope->ra);
10234|  5.95M|    if (reg > 0xFFFF) {
  ------------------
  |  Branch (10234:9): [True: 761k, False: 5.19M]
  ------------------
10235|   761k|        janetc_cerror(c, "ran out of internal registers");
10236|   761k|    }
10237|  5.95M|    return reg;
10238|  5.95M|}
janetc_allocnear:
10241|  1.05M|int32_t janetc_allocnear(JanetCompiler *c, JanetcRegisterTemp tag) {
10242|  1.05M|    return janetc_regalloc_temp(&c->scope->ra, tag);
10243|  1.05M|}
janetc_emit:
10246|  18.5M|void janetc_emit(JanetCompiler *c, uint32_t instr) {
10247|  18.5M|    janet_v_push(c->buffer, instr);
  ------------------
  |  |  757|  18.5M|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  18.5M|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  18.5M|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  18.5M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  18.5M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  18.5M|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  18.5M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 21.8k, False: 18.5M]
  |  |  |  |  |  |  |  Branch (768:50): [True: 52.1k, False: 18.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|  73.9k|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  18.5M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  18.5M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10248|       |    janet_v_push(c->mapbuffer, c->current_mapping);
  ------------------
  |  |  757|  18.5M|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  18.5M|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  18.5M|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  18.5M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  18.5M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  18.5M|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  18.5M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 21.8k, False: 18.5M]
  |  |  |  |  |  |  |  Branch (768:50): [True: 52.1k, False: 18.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|  73.9k|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  18.5M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  18.5M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10249|  18.5M|}
janetc_sequal:
10423|  1.26M|int janetc_sequal(JanetSlot lhs, JanetSlot rhs) {
10424|  1.26M|    if ((lhs.flags & ~JANET_SLOTTYPE_ANY) == (rhs.flags & ~JANET_SLOTTYPE_ANY) &&
  ------------------
  |  | 1048|  1.26M|#define JANET_SLOTTYPE_ANY 0xFFFF
  ------------------
                  if ((lhs.flags & ~JANET_SLOTTYPE_ANY) == (rhs.flags & ~JANET_SLOTTYPE_ANY) &&
  ------------------
  |  | 1048|  1.26M|#define JANET_SLOTTYPE_ANY 0xFFFF
  ------------------
  |  Branch (10424:9): [True: 1.12M, False: 143k]
  ------------------
10425|  1.12M|            lhs.index == rhs.index &&
  ------------------
  |  Branch (10425:13): [True: 2.85k, False: 1.11M]
  ------------------
10426|  2.85k|            lhs.envindex == rhs.envindex) {
  ------------------
  |  Branch (10426:13): [True: 2.85k, False: 0]
  ------------------
10427|  2.85k|        if (lhs.flags & (JANET_SLOT_REF | JANET_SLOT_CONSTANT)) {
  ------------------
  |  | 1041|  2.85k|#define JANET_SLOT_REF 0x80000
  ------------------
                      if (lhs.flags & (JANET_SLOT_REF | JANET_SLOT_CONSTANT)) {
  ------------------
  |  | 1038|  2.85k|#define JANET_SLOT_CONSTANT 0x10000
  ------------------
  |  Branch (10427:13): [True: 0, False: 2.85k]
  ------------------
10428|      0|            return janet_equals(lhs.constant, rhs.constant);
10429|  2.85k|        } else {
10430|  2.85k|            return 1;
10431|  2.85k|        }
10432|  2.85k|    }
10433|  1.26M|    return 0;
10434|  1.26M|}
janetc_copy:
10441|  1.26M|    JanetSlot src) {
10442|  1.26M|    if (dest.flags & JANET_SLOT_CONSTANT) {
  ------------------
  |  | 1038|  1.26M|#define JANET_SLOT_CONSTANT 0x10000
  ------------------
  |  Branch (10442:9): [True: 0, False: 1.26M]
  ------------------
10443|      0|        janetc_cerror(c, "cannot write to constant");
10444|      0|        return;
10445|      0|    }
10446|  1.26M|    if (janetc_sequal(dest, src)) return;
  ------------------
  |  Branch (10446:9): [True: 2.85k, False: 1.26M]
  ------------------
10447|       |    /* If dest is a near register */
10448|  1.26M|    if (dest.envindex < 0 && dest.index >= 0 && dest.index <= 0xFF) {
  ------------------
  |  Branch (10448:9): [True: 1.25M, False: 763]
  |  Branch (10448:30): [True: 1.25M, False: 0]
  |  Branch (10448:49): [True: 183k, False: 1.07M]
  ------------------
10449|   183k|        janetc_movenear(c, dest.index, src);
10450|   183k|        return;
10451|   183k|    }
10452|       |    /* If src is a near register */
10453|  1.07M|    if (src.envindex < 0 && src.index >= 0 && src.index <= 0xFF) {
  ------------------
  |  Branch (10453:9): [True: 1.07M, False: 0]
  |  Branch (10453:29): [True: 943k, False: 132k]
  |  Branch (10453:47): [True: 18.8k, False: 924k]
  ------------------
10454|  18.8k|        janetc_moveback(c, dest, src.index);
10455|  18.8k|        return;
10456|  18.8k|    }
10457|       |    /* Process: src -> near -> dest */
10458|  1.05M|    int32_t nearreg = janetc_allocnear(c, JANETC_REGTEMP_3);
10459|  1.05M|    janetc_movenear(c, nearreg, src);
10460|  1.05M|    janetc_moveback(c, dest, nearreg);
10461|       |    /* Cleanup */
10462|  1.05M|    janetc_regalloc_freetemp(&c->scope->ra, nearreg, JANETC_REGTEMP_3);
10463|  1.05M|}
janetc_emit_s:
10477|  2.14M|int32_t janetc_emit_s(JanetCompiler *c, uint8_t op, JanetSlot s, int wr) {
10478|  2.14M|    int32_t reg = janetc_regfar(c, s, JANETC_REGTEMP_0);
10479|  2.14M|    int32_t label = janet_v_count(c->buffer);
  ------------------
  |  |  759|  2.14M|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  2.14M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  2.14M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 2.14M, False: 394]
  |  |  ------------------
  ------------------
10480|  2.14M|    janetc_emit(c, op | ((uint32_t) reg << 8));
10481|  2.14M|    if (wr)
  ------------------
  |  Branch (10481:9): [True: 1.57M, False: 577k]
  ------------------
10482|  1.57M|        janetc_moveback(c, s, reg);
10483|  2.14M|    janetc_free_regnear(c, s, reg, JANETC_REGTEMP_0);
10484|  2.14M|    return label;
10485|  2.14M|}
janetc_emit_si:
10500|  53.5k|int32_t janetc_emit_si(JanetCompiler *c, uint8_t op, JanetSlot s, int16_t immediate, int wr) {
10501|  53.5k|    return emit1s(c, op, s, immediate, wr);
10502|  53.5k|}
janetc_emit_su:
10504|   164k|int32_t janetc_emit_su(JanetCompiler *c, uint8_t op, JanetSlot s, uint16_t immediate, int wr) {
10505|   164k|    return emit1s(c, op, s, (int32_t) immediate, wr);
10506|   164k|}
janetc_emit_ss:
10520|  1.99M|int32_t janetc_emit_ss(JanetCompiler *c, uint8_t op, JanetSlot s1, JanetSlot s2, int wr) {
10521|  1.99M|    int32_t reg1 = janetc_regnear(c, s1, JANETC_REGTEMP_0);
10522|  1.99M|    int32_t reg2 = janetc_regfar(c, s2, JANETC_REGTEMP_1);
10523|  1.99M|    int32_t label = janet_v_count(c->buffer);
  ------------------
  |  |  759|  1.99M|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  1.99M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.99M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 1.99M, False: 0]
  |  |  ------------------
  ------------------
10524|  1.99M|    janetc_emit(c, op | ((uint32_t) reg1 << 8) | ((uint32_t) reg2 << 16));
10525|  1.99M|    janetc_free_regnear(c, s2, reg2, JANETC_REGTEMP_1);
10526|  1.99M|    if (wr)
  ------------------
  |  Branch (10526:9): [True: 330k, False: 1.66M]
  ------------------
10527|   330k|        janetc_moveback(c, s1, reg1);
10528|  1.99M|    janetc_free_regnear(c, s1, reg1, JANETC_REGTEMP_0);
10529|  1.99M|    return label;
10530|  1.99M|}
janetc_emit_ssi:
10532|    753|int32_t janetc_emit_ssi(JanetCompiler *c, uint8_t op, JanetSlot s1, JanetSlot s2, int8_t immediate, int wr) {
10533|    753|    return emit2s(c, op, s1, s2, immediate, wr);
10534|    753|}
janetc_emit_ssu:
10536|  1.73M|int32_t janetc_emit_ssu(JanetCompiler *c, uint8_t op, JanetSlot s1, JanetSlot s2, uint8_t immediate, int wr) {
10537|  1.73M|    return emit2s(c, op, s1, s2, (int32_t) immediate, wr);
10538|  1.73M|}
janetc_emit_sss:
10540|   410k|int32_t janetc_emit_sss(JanetCompiler *c, uint8_t op, JanetSlot s1, JanetSlot s2, JanetSlot s3, int wr) {
10541|   410k|    int32_t reg1 = janetc_regnear(c, s1, JANETC_REGTEMP_0);
10542|   410k|    int32_t reg2 = janetc_regnear(c, s2, JANETC_REGTEMP_1);
10543|   410k|    int32_t reg3 = janetc_regnear(c, s3, JANETC_REGTEMP_2);
10544|   410k|    int32_t label = janet_v_count(c->buffer);
  ------------------
  |  |  759|   410k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|   410k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   410k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 410k, False: 0]
  |  |  ------------------
  ------------------
10545|   410k|    janetc_emit(c, op | ((uint32_t) reg1 << 8) | ((uint32_t) reg2 << 16) | ((uint32_t) reg3 << 24));
10546|   410k|    janetc_free_regnear(c, s2, reg2, JANETC_REGTEMP_1);
10547|   410k|    janetc_free_regnear(c, s3, reg3, JANETC_REGTEMP_2);
10548|   410k|    if (wr)
  ------------------
  |  Branch (10548:9): [True: 133k, False: 276k]
  ------------------
10549|   133k|        janetc_moveback(c, s1, reg1);
10550|   410k|    janetc_free_regnear(c, s1, reg1, JANETC_REGTEMP_0);
10551|   410k|    return label;
10552|   410k|}
janet_async_end:
10824|  86.4k|void janet_async_end(JanetFiber *fiber) {
10825|  86.4k|    if (fiber->ev_callback) {
  ------------------
  |  Branch (10825:9): [True: 0, False: 86.4k]
  ------------------
10826|      0|        if (fiber->ev_stream->read_fiber == fiber) {
  ------------------
  |  Branch (10826:13): [True: 0, False: 0]
  ------------------
10827|      0|            fiber->ev_stream->read_fiber = NULL;
10828|      0|        }
10829|      0|        if (fiber->ev_stream->write_fiber == fiber) {
  ------------------
  |  Branch (10829:13): [True: 0, False: 0]
  ------------------
10830|      0|            fiber->ev_stream->write_fiber = NULL;
10831|      0|        }
10832|      0|        fiber->ev_callback(fiber, JANET_ASYNC_EVENT_DEINIT);
10833|      0|        janet_gcunroot(janet_wrap_abstract(fiber->ev_stream));
  ------------------
  |  |  851|      0|#define janet_wrap_abstract(s) janet_nanbox_wrap_((s), JANET_ABSTRACT)
  |  |  ------------------
  |  |  |  |  825|      0|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10834|      0|        fiber->ev_callback = NULL;
10835|      0|        if (!(fiber->flags & JANET_FIBER_EV_FLAG_IN_FLIGHT)) {
  ------------------
  |  |  847|      0|#define JANET_FIBER_EV_FLAG_IN_FLIGHT 0x1
  ------------------
  |  Branch (10835:13): [True: 0, False: 0]
  ------------------
10836|      0|            if (fiber->ev_state) {
  ------------------
  |  Branch (10836:17): [True: 0, False: 0]
  ------------------
10837|      0|                janet_free(fiber->ev_state);
  ------------------
  |  | 2415|      0|#define janet_free(X) free((X))
  ------------------
10838|       |                fiber->ev_state = NULL;
10839|      0|            }
10840|      0|            janet_ev_dec_refcount();
10841|      0|        }
10842|      0|    }
10843|  86.4k|}
janet_fiber_did_resume:
10874|  86.4k|void janet_fiber_did_resume(JanetFiber *fiber) {
10875|  86.4k|    janet_async_end(fiber);
10876|  86.4k|}
janet_ev_init_common:
11153|    267|void janet_ev_init_common(void) {
11154|    267|    janet_q_init(&janet_vm.spawn);
11155|    267|    janet_vm.tq = NULL;
11156|    267|    janet_vm.tq_count = 0;
11157|    267|    janet_vm.tq_capacity = 0;
11158|    267|    janet_table_init_raw(&janet_vm.threaded_abstracts, 0);
11159|    267|    janet_table_init_raw(&janet_vm.active_tasks, 0);
11160|    267|    janet_table_init_raw(&janet_vm.signal_handlers, 0);
11161|    267|    janet_rng_seed(&janet_vm.ev_rng, 0);
11162|    267|#ifndef JANET_WINDOWS
11163|    267|    pthread_attr_init(&janet_vm.new_thread_attr);
11164|       |    pthread_attr_setdetachstate(&janet_vm.new_thread_attr, PTHREAD_CREATE_DETACHED);
11165|    267|#endif
11166|    267|}
janet_ev_deinit_common:
11199|    267|void janet_ev_deinit_common(void) {
11200|    267|    JanetTimeout to;
11201|    267|    while (peek_timeout(&to)) {
  ------------------
  |  Branch (11201:12): [True: 0, False: 267]
  ------------------
11202|      0|        handle_timeout_worker(to, 1);
11203|      0|        pop_timeout(0);
11204|      0|    }
11205|    267|    janet_q_deinit(&janet_vm.spawn);
11206|    267|    janet_free(janet_vm.tq);
  ------------------
  |  | 2415|    267|#define janet_free(X) free((X))
  ------------------
11207|    267|    janet_table_deinit(&janet_vm.threaded_abstracts);
11208|    267|    janet_table_deinit(&janet_vm.active_tasks);
11209|    267|    janet_table_deinit(&janet_vm.signal_handlers);
11210|    267|#ifndef JANET_WINDOWS
11211|    267|    pthread_attr_destroy(&janet_vm.new_thread_attr);
11212|    267|#endif
11213|    267|}
janet_ev_init:
12490|    267|void janet_ev_init(void) {
12491|    267|    janet_ev_init_common();
12492|    267|    janet_ev_setup_selfpipe();
12493|    267|    janet_vm.epoll = epoll_create1(EPOLL_CLOEXEC);
12494|    267|    janet_vm.timerfd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC | TFD_NONBLOCK);
12495|    267|    janet_vm.timer_enabled = 0;
12496|    267|    if (janet_vm.epoll == -1 || janet_vm.timerfd == -1) goto error;
  ------------------
  |  Branch (12496:9): [True: 0, False: 267]
  |  Branch (12496:33): [True: 0, False: 267]
  ------------------
12497|    267|    struct epoll_event ev;
12498|    267|    ev.events = EPOLLIN | EPOLLET;
12499|    267|    ev.data.ptr = &janet_vm.timerfd;
12500|    267|    if (-1 == epoll_ctl(janet_vm.epoll, EPOLL_CTL_ADD, janet_vm.timerfd, &ev)) goto error;
  ------------------
  |  Branch (12500:9): [True: 0, False: 267]
  ------------------
12501|    267|    ev.events = EPOLLIN | EPOLLET;
12502|    267|    ev.data.ptr = janet_vm.selfpipe;
12503|    267|    if (-1 == epoll_ctl(janet_vm.epoll, EPOLL_CTL_ADD, janet_vm.selfpipe[0], &ev)) goto error;
  ------------------
  |  Branch (12503:9): [True: 0, False: 267]
  ------------------
12504|    267|    return;
12505|    267|error:
12506|       |    JANET_EXIT("failed to initialize event loop");
  ------------------
  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  380|      0|        __FILE__,\
  |  |  381|      0|        __LINE__,\
  |  |  382|      0|        (m));\
  |  |  383|      0|    abort();\
  |  |  384|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
12507|      0|}
janet_ev_deinit:
12509|    267|void janet_ev_deinit(void) {
12510|    267|    janet_ev_deinit_common();
12511|    267|    close(janet_vm.epoll);
12512|    267|    close(janet_vm.timerfd);
12513|    267|    janet_ev_cleanup_selfpipe();
12514|    267|    janet_vm.epoll = 0;
12515|    267|}
janet_make_pipe:
13612|    267|int janet_make_pipe(JanetHandle handles[2], int mode) {
13613|       |#ifdef JANET_WINDOWS
13614|       |    /*
13615|       |     * On windows, the built in CreatePipe function doesn't support overlapped IO
13616|       |     * so we lift from the windows source code and modify for our own version.
13617|       |     */
13618|       |    JanetHandle shandle, chandle;
13619|       |    CHAR PipeNameBuffer[MAX_PATH];
13620|       |    SECURITY_ATTRIBUTES saAttr;
13621|       |    memset(&saAttr, 0, sizeof(saAttr));
13622|       |    saAttr.nLength = sizeof(saAttr);
13623|       |    saAttr.bInheritHandle = TRUE;
13624|       |    if (mode == 3) {
13625|       |        /* No overlapped IO involved, just call CreatePipe */
13626|       |        if (!CreatePipe(handles, handles + 1, &saAttr, 0)) return -1;
13627|       |        return 0;
13628|       |    }
13629|       |    snprintf(PipeNameBuffer,
13630|       |             sizeof(PipeNameBuffer),
13631|       |             "\\\\.\\Pipe\\JanetPipeFile.%08x.%08x",
13632|       |             (unsigned int) GetCurrentProcessId(),
13633|       |             (unsigned int) InterlockedIncrement(&PipeSerialNumber));
13634|       |
13635|       |    /* server handle goes to subprocess */
13636|       |    shandle = CreateNamedPipeA(
13637|       |                  PipeNameBuffer,
13638|       |                  (mode == 2 ? PIPE_ACCESS_INBOUND : PIPE_ACCESS_OUTBOUND) | FILE_FLAG_OVERLAPPED,
13639|       |                  PIPE_TYPE_BYTE | PIPE_WAIT,
13640|       |                  255,           /* Max number of pipes for duplication. */
13641|       |                  4096,          /* Out buffer size */
13642|       |                  4096,          /* In buffer size */
13643|       |                  120 * 1000,    /* Timeout in ms */
13644|       |                  &saAttr);
13645|       |    if (shandle == INVALID_HANDLE_VALUE) {
13646|       |        return -1;
13647|       |    }
13648|       |
13649|       |    /* we keep client handle */
13650|       |    chandle = CreateFileA(
13651|       |                  PipeNameBuffer,
13652|       |                  (mode == 2 ? GENERIC_WRITE : GENERIC_READ),
13653|       |                  0,
13654|       |                  &saAttr,
13655|       |                  OPEN_EXISTING,
13656|       |                  FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
13657|       |                  NULL);
13658|       |
13659|       |    if (chandle == INVALID_HANDLE_VALUE) {
13660|       |        CloseHandle(shandle);
13661|       |        return -1;
13662|       |    }
13663|       |    if (mode == 2) {
13664|       |        handles[0] = shandle;
13665|       |        handles[1] = chandle;
13666|       |    } else {
13667|       |        handles[0] = chandle;
13668|       |        handles[1] = shandle;
13669|       |    }
13670|       |    return 0;
13671|       |#else
13672|    267|    if (pipe(handles)) return -1;
  ------------------
  |  Branch (13672:9): [True: 0, False: 267]
  ------------------
13673|    267|    if (mode != 2 && fcntl(handles[0], F_SETFD, FD_CLOEXEC)) goto error;
  ------------------
  |  Branch (13673:9): [True: 267, False: 0]
  |  Branch (13673:22): [True: 0, False: 267]
  ------------------
13674|    267|    if (mode != 1 && fcntl(handles[1], F_SETFD, FD_CLOEXEC)) goto error;
  ------------------
  |  Branch (13674:9): [True: 0, False: 267]
  |  Branch (13674:22): [True: 0, False: 0]
  ------------------
13675|    267|    if (mode != 2 && mode != 3 && fcntl(handles[0], F_SETFL, O_NONBLOCK)) goto error;
  ------------------
  |  Branch (13675:9): [True: 267, False: 0]
  |  Branch (13675:22): [True: 267, False: 0]
  |  Branch (13675:35): [True: 0, False: 267]
  ------------------
13676|    267|    if (mode != 1 && mode != 3 && fcntl(handles[1], F_SETFL, O_NONBLOCK)) goto error;
  ------------------
  |  Branch (13676:9): [True: 0, False: 267]
  |  Branch (13676:22): [True: 0, False: 0]
  |  Branch (13676:35): [True: 0, False: 0]
  ------------------
13677|    267|    return 0;
13678|      0|error:
13679|      0|    close(handles[0]);
13680|      0|    close(handles[1]);
13681|      0|    return -1;
13682|    267|#endif
13683|    267|}
janet_lib_ev:
14268|    267|void janet_lib_ev(JanetTable *env) {
14269|    267|    JanetRegExt ev_cfuns_ext[] = {
14270|    267|        JANET_CORE_REG("ev/give", cfun_channel_push),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14271|    267|        JANET_CORE_REG("ev/take", cfun_channel_pop),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14272|    267|        JANET_CORE_REG("ev/full", cfun_channel_full),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14273|    267|        JANET_CORE_REG("ev/capacity", cfun_channel_capacity),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14274|    267|        JANET_CORE_REG("ev/count", cfun_channel_count),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14275|    267|        JANET_CORE_REG("ev/select", cfun_channel_choice),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14276|    267|        JANET_CORE_REG("ev/rselect", cfun_channel_rchoice),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14277|    267|        JANET_CORE_REG("ev/chan", cfun_channel_new),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14278|    267|        JANET_CORE_REG("ev/thread-chan", cfun_channel_new_threaded),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14279|    267|        JANET_CORE_REG("ev/chan-close", cfun_channel_close),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14280|    267|        JANET_CORE_REG("ev/go", cfun_ev_go),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14281|    267|        JANET_CORE_REG("ev/thread", cfun_ev_thread),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14282|    267|        JANET_CORE_REG("ev/give-supervisor", cfun_ev_give_supervisor),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14283|    267|        JANET_CORE_REG("ev/sleep", cfun_ev_sleep),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14284|    267|        JANET_CORE_REG("ev/deadline", cfun_ev_deadline),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14285|    267|        JANET_CORE_REG("ev/cancel", cfun_ev_cancel),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14286|    267|        JANET_CORE_REG("ev/close", janet_cfun_stream_close),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14287|    267|        JANET_CORE_REG("ev/read", janet_cfun_stream_read),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14288|    267|        JANET_CORE_REG("ev/chunk", janet_cfun_stream_chunk),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14289|    267|        JANET_CORE_REG("ev/write", janet_cfun_stream_write),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14290|    267|        JANET_CORE_REG("ev/lock", janet_cfun_mutex),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14291|    267|        JANET_CORE_REG("ev/acquire-lock", janet_cfun_mutex_acquire),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14292|    267|        JANET_CORE_REG("ev/release-lock", janet_cfun_mutex_release),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14293|    267|        JANET_CORE_REG("ev/rwlock", janet_cfun_rwlock),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14294|    267|        JANET_CORE_REG("ev/acquire-rlock", janet_cfun_rwlock_read_lock),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14295|    267|        JANET_CORE_REG("ev/acquire-wlock", janet_cfun_rwlock_write_lock),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14296|    267|        JANET_CORE_REG("ev/release-rlock", janet_cfun_rwlock_read_release),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14297|    267|        JANET_CORE_REG("ev/release-wlock", janet_cfun_rwlock_write_release),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14298|    267|        JANET_CORE_REG("ev/to-file", janet_cfun_to_file),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14299|    267|        JANET_CORE_REG("ev/all-tasks", janet_cfun_ev_all_tasks),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
14300|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
14301|    267|    };
14302|       |
14303|       |    janet_core_cfuns_ext(env, NULL, ev_cfuns_ext);
14304|    267|    janet_register_abstract_type(&janet_stream_type);
14305|    267|    janet_register_abstract_type(&janet_channel_type);
14306|    267|    janet_register_abstract_type(&janet_mutex_type);
14307|    267|    janet_register_abstract_type(&janet_rwlock_type);
14308|    267|}
janet_lib_ffi:
16241|    267|void janet_lib_ffi(JanetTable *env) {
16242|    267|    JanetRegExt ffi_cfuns[] = {
16243|    267|        JANET_CORE_REG("ffi/native", janet_core_raw_native),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16244|    267|        JANET_CORE_REG("ffi/lookup", janet_core_native_lookup),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16245|    267|        JANET_CORE_REG("ffi/close", janet_core_native_close),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16246|    267|        JANET_CORE_REG("ffi/signature", cfun_ffi_signature),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16247|    267|        JANET_CORE_REG("ffi/call", cfun_ffi_call),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16248|    267|        JANET_CORE_REG("ffi/struct", cfun_ffi_struct),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16249|    267|        JANET_CORE_REG("ffi/write", cfun_ffi_buffer_write),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16250|    267|        JANET_CORE_REG("ffi/read", cfun_ffi_buffer_read),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16251|    267|        JANET_CORE_REG("ffi/size", cfun_ffi_size),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16252|    267|        JANET_CORE_REG("ffi/align", cfun_ffi_align),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16253|    267|        JANET_CORE_REG("ffi/trampoline", cfun_ffi_get_callback_trampoline),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16254|    267|        JANET_CORE_REG("ffi/jitfn", cfun_ffi_jitfn),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16255|    267|        JANET_CORE_REG("ffi/malloc", cfun_ffi_malloc),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16256|    267|        JANET_CORE_REG("ffi/free", cfun_ffi_free),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16257|    267|        JANET_CORE_REG("ffi/pointer-buffer", cfun_ffi_pointer_buffer),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16258|    267|        JANET_CORE_REG("ffi/pointer-cfunction", cfun_ffi_pointer_cfunction),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16259|    267|        JANET_CORE_REG("ffi/calling-conventions", cfun_ffi_supported_calling_conventions),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16260|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
16261|    267|    };
16262|       |    janet_core_cfuns_ext(env, NULL, ffi_cfuns);
16263|    267|}
janet_fiber_reset:
16338|  86.4k|JanetFiber *janet_fiber_reset(JanetFiber *fiber, JanetFunction *callee, int32_t argc, const Janet *argv) {
16339|  86.4k|    int32_t newstacktop;
16340|  86.4k|    fiber_reset(fiber);
16341|  86.4k|    if (argc) {
  ------------------
  |  Branch (16341:9): [True: 86.4k, False: 0]
  ------------------
16342|  86.4k|        newstacktop = fiber->stacktop + argc;
16343|  86.4k|        if (newstacktop >= fiber->capacity) {
  ------------------
  |  Branch (16343:13): [True: 262, False: 86.2k]
  ------------------
16344|    262|            janet_fiber_setcapacity(fiber, 2 * newstacktop);
16345|    262|        }
16346|  86.4k|        if (argv) {
  ------------------
  |  Branch (16346:13): [True: 86.4k, False: 0]
  ------------------
16347|  86.4k|            memcpy(fiber->data + fiber->stacktop, argv, argc * sizeof(Janet));
16348|  86.4k|        } else {
16349|       |            /* If argv not given, fill with nil */
16350|      0|            for (int32_t i = 0; i < argc; i++) {
  ------------------
  |  Branch (16350:33): [True: 0, False: 0]
  ------------------
16351|      0|                fiber->data[fiber->stacktop + i] = janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
16352|      0|            }
16353|      0|        }
16354|  86.4k|        fiber->stacktop = newstacktop;
16355|  86.4k|    }
16356|       |    /* Don't panic on failure since we use this to implement janet_pcall */
16357|  86.4k|    if (janet_fiber_funcframe(fiber, callee)) return NULL;
  ------------------
  |  Branch (16357:9): [True: 3, False: 86.4k]
  ------------------
16358|  86.4k|    janet_fiber_frame(fiber)->flags |= JANET_STACKFRAME_ENTRANCE;
  ------------------
  |  |  855|  86.4k|#define janet_fiber_frame(f) janet_stack_frame((f)->data + (f)->frame)
  |  |  ------------------
  |  |  |  |  854|  86.4k|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  86.4k|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  janet_fiber_frame(fiber)->flags |= JANET_STACKFRAME_ENTRANCE;
  ------------------
  |  | 1013|  86.4k|#define JANET_STACKFRAME_ENTRANCE 2
  ------------------
16359|  86.4k|#ifdef JANET_EV
16360|       |    fiber->supervisor_channel = NULL;
16361|  86.4k|#endif
16362|  86.4k|    return fiber;
16363|  86.4k|}
janet_fiber:
16366|  86.4k|JanetFiber *janet_fiber(JanetFunction *callee, int32_t capacity, int32_t argc, const Janet *argv) {
16367|  86.4k|    return janet_fiber_reset(fiber_alloc(capacity), callee, argc, argv);
16368|  86.4k|}
janet_fiber_setcapacity:
16387|   159k|void janet_fiber_setcapacity(JanetFiber *fiber, int32_t n) {
16388|   159k|    int32_t old_size = fiber->capacity;
16389|   159k|    int32_t diff = n - old_size;
16390|   159k|    Janet *newData = janet_realloc(fiber->data, sizeof(Janet) * n);
  ------------------
  |  | 2409|   159k|#define janet_realloc(X, Y) realloc((X), (Y))
  ------------------
16391|   159k|    if (NULL == newData) {
  ------------------
  |  Branch (16391:9): [True: 0, False: 159k]
  ------------------
16392|      0|        JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
16393|      0|    }
16394|   159k|    fiber->data = newData;
16395|   159k|    fiber->capacity = n;
16396|   159k|    janet_vm.next_collection += sizeof(Janet) * diff;
16397|   159k|}
janet_fiber_push:
16406|  36.4M|void janet_fiber_push(JanetFiber *fiber, Janet x) {
16407|  36.4M|    if (fiber->stacktop == INT32_MAX) janet_panic("stack overflow");
  ------------------
  |  Branch (16407:9): [True: 0, False: 36.4M]
  ------------------
16408|  36.4M|    if (fiber->stacktop >= fiber->capacity) {
  ------------------
  |  Branch (16408:9): [True: 1.97k, False: 36.4M]
  ------------------
16409|  1.97k|        janet_fiber_grow(fiber, fiber->stacktop);
16410|  1.97k|    }
16411|  36.4M|    fiber->data[fiber->stacktop++] = x;
16412|  36.4M|}
janet_fiber_push2:
16415|  17.2M|void janet_fiber_push2(JanetFiber *fiber, Janet x, Janet y) {
16416|  17.2M|    if (fiber->stacktop >= INT32_MAX - 1) janet_panic("stack overflow");
  ------------------
  |  Branch (16416:9): [True: 0, False: 17.2M]
  ------------------
16417|  17.2M|    int32_t newtop = fiber->stacktop + 2;
16418|  17.2M|    if (newtop > fiber->capacity) {
  ------------------
  |  Branch (16418:9): [True: 1, False: 17.2M]
  ------------------
16419|      1|        janet_fiber_grow(fiber, newtop);
16420|      1|    }
16421|  17.2M|    fiber->data[fiber->stacktop] = x;
16422|  17.2M|    fiber->data[fiber->stacktop + 1] = y;
16423|  17.2M|    fiber->stacktop = newtop;
16424|  17.2M|}
janet_fiber_push3:
16427|  14.2M|void janet_fiber_push3(JanetFiber *fiber, Janet x, Janet y, Janet z) {
16428|  14.2M|    if (fiber->stacktop >= INT32_MAX - 2) janet_panic("stack overflow");
  ------------------
  |  Branch (16428:9): [True: 0, False: 14.2M]
  ------------------
16429|  14.2M|    int32_t newtop = fiber->stacktop + 3;
16430|  14.2M|    if (newtop > fiber->capacity) {
  ------------------
  |  Branch (16430:9): [True: 2.78k, False: 14.2M]
  ------------------
16431|  2.78k|        janet_fiber_grow(fiber, newtop);
16432|  2.78k|    }
16433|  14.2M|    fiber->data[fiber->stacktop] = x;
16434|  14.2M|    fiber->data[fiber->stacktop + 1] = y;
16435|  14.2M|    fiber->data[fiber->stacktop + 2] = z;
16436|  14.2M|    fiber->stacktop = newtop;
16437|  14.2M|}
janet_fiber_pushn:
16440|  2.56M|void janet_fiber_pushn(JanetFiber *fiber, const Janet *arr, int32_t n) {
16441|  2.56M|    if (fiber->stacktop > INT32_MAX - n) janet_panic("stack overflow");
  ------------------
  |  Branch (16441:9): [True: 0, False: 2.56M]
  ------------------
16442|  2.56M|    int32_t newtop = fiber->stacktop + n;
16443|  2.56M|    if (newtop > fiber->capacity) {
  ------------------
  |  Branch (16443:9): [True: 30, False: 2.56M]
  ------------------
16444|     30|        janet_fiber_grow(fiber, newtop);
16445|     30|    }
16446|  2.56M|    safe_memcpy(fiber->data + fiber->stacktop, arr, n * sizeof(Janet));
16447|  2.56M|    fiber->stacktop = newtop;
16448|  2.56M|}
janet_fiber_funcframe:
16462|  13.2M|int janet_fiber_funcframe(JanetFiber *fiber, JanetFunction *func) {
16463|  13.2M|    JanetStackFrame *newframe;
16464|       |
16465|  13.2M|    int32_t i;
16466|  13.2M|    int32_t oldtop = fiber->stacktop;
16467|  13.2M|    int32_t oldframe = fiber->frame;
16468|  13.2M|    int32_t nextframe = fiber->stackstart;
16469|  13.2M|    int32_t nextstacktop = nextframe + func->def->slotcount + JANET_FRAME_SIZE;
  ------------------
  |  | 1026|  13.2M|#define JANET_FRAME_SIZE 4
  ------------------
16470|  13.2M|    int32_t next_arity = fiber->stacktop - fiber->stackstart;
16471|       |
16472|       |    /* Check strict arity before messing with state */
16473|  13.2M|    if (next_arity < func->def->min_arity) return 1;
  ------------------
  |  Branch (16473:9): [True: 0, False: 13.2M]
  ------------------
16474|  13.2M|    if (next_arity > func->def->max_arity) return 1;
  ------------------
  |  Branch (16474:9): [True: 3, False: 13.2M]
  ------------------
16475|       |
16476|  13.2M|    if (fiber->capacity < nextstacktop) {
  ------------------
  |  Branch (16476:9): [True: 154k, False: 13.1M]
  ------------------
16477|   154k|        janet_fiber_setcapacity(fiber, 2 * nextstacktop);
16478|       |#ifdef JANET_DEBUG
16479|       |    } else {
16480|       |        janet_fiber_refresh_memory(fiber);
16481|       |#endif
16482|   154k|    }
16483|       |
16484|       |    /* Nil unset stack arguments (Needed for gc correctness) */
16485|   196M|    for (i = fiber->stacktop; i < nextstacktop; ++i) {
  ------------------
  |  Branch (16485:31): [True: 183M, False: 13.2M]
  ------------------
16486|   183M|        fiber->data[i] = janet_wrap_nil();
  ------------------
  |  |  831|   183M|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|   183M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   183M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   183M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
16487|   183M|    }
16488|       |
16489|       |    /* Set up the next frame */
16490|  13.2M|    fiber->frame = nextframe;
16491|  13.2M|    fiber->stacktop = fiber->stackstart = nextstacktop;
16492|  13.2M|    newframe = janet_fiber_frame(fiber);
  ------------------
  |  |  855|  13.2M|#define janet_fiber_frame(f) janet_stack_frame((f)->data + (f)->frame)
  |  |  ------------------
  |  |  |  |  854|  13.2M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  13.2M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
16493|  13.2M|    newframe->prevframe = oldframe;
16494|  13.2M|    newframe->pc = func->def->bytecode;
16495|  13.2M|    newframe->func = func;
16496|  13.2M|    newframe->env = NULL;
16497|  13.2M|    newframe->flags = 0;
16498|       |
16499|       |    /* Check varargs */
16500|  13.2M|    if (func->def->flags & JANET_FUNCDEF_FLAG_VARARG) {
  ------------------
  |  | 1097|  13.2M|#define JANET_FUNCDEF_FLAG_VARARG 0x10000
  ------------------
  |  Branch (16500:9): [True: 1.12M, False: 12.1M]
  ------------------
16501|  1.12M|        int32_t tuplehead = fiber->frame + func->def->arity;
16502|  1.12M|        janet_assert(tuplehead > 0, "fiber stack overflow");
  ------------------
  |  |  389|  1.12M|#define janet_assert(c, m) do { \
  |  |  390|  1.12M|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 1.12M]
  |  |  ------------------
  |  |  391|  1.12M|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 1.12M]
  |  |  ------------------
  ------------------
16503|  1.12M|        int st = func->def->flags & JANET_FUNCDEF_FLAG_STRUCTARG;
  ------------------
  |  | 1105|  1.12M|#define JANET_FUNCDEF_FLAG_STRUCTARG 0x1000000
  ------------------
16504|  1.12M|        if (tuplehead >= oldtop) {
  ------------------
  |  Branch (16504:13): [True: 1.11M, False: 5.18k]
  ------------------
16505|  1.11M|            fiber->data[tuplehead] = st
  ------------------
  |  Branch (16505:38): [True: 0, False: 1.11M]
  ------------------
16506|  1.11M|                                     ? make_struct_n(NULL, 0)
16507|  1.11M|                                     : janet_wrap_tuple(janet_tuple_n(NULL, 0));
  ------------------
  |  |  843|  1.11M|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|  2.23M|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.11M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.11M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
16508|  1.11M|        } else {
16509|  5.18k|            fiber->data[tuplehead] = st
  ------------------
  |  Branch (16509:38): [True: 0, False: 5.18k]
  ------------------
16510|  5.18k|                                     ? make_struct_n(
16511|      0|                                         fiber->data + tuplehead,
16512|      0|                                         oldtop - tuplehead)
16513|  5.18k|                                     : janet_wrap_tuple(janet_tuple_n(
  ------------------
  |  |  843|  5.18k|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|  10.3k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  5.18k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  5.18k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
16514|  5.18k|                                             fiber->data + tuplehead,
16515|  5.18k|                                             oldtop - tuplehead));
16516|  5.18k|        }
16517|  1.12M|    }
16518|       |
16519|       |    /* Good return */
16520|  13.2M|    return 0;
16521|  13.2M|}
janet_env_valid:
16556|  7.92M|int janet_env_valid(JanetFuncEnv *env) {
16557|  7.92M|    if (env->offset < 0) {
  ------------------
  |  Branch (16557:9): [True: 0, False: 7.92M]
  ------------------
16558|      0|        int32_t real_offset = -(env->offset);
16559|      0|        JanetFiber *fiber = env->as.fiber;
16560|      0|        int32_t i = fiber->frame;
16561|      0|        while (i > 0) {
  ------------------
  |  Branch (16561:16): [True: 0, False: 0]
  ------------------
16562|      0|            JanetStackFrame *frame = (JanetStackFrame *)(fiber->data + i - JANET_FRAME_SIZE);
  ------------------
  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  ------------------
16563|      0|            if (real_offset == i &&
  ------------------
  |  Branch (16563:17): [True: 0, False: 0]
  ------------------
16564|      0|                    frame->env == env &&
  ------------------
  |  Branch (16564:21): [True: 0, False: 0]
  ------------------
16565|      0|                    frame->func &&
  ------------------
  |  Branch (16565:21): [True: 0, False: 0]
  ------------------
16566|      0|                    frame->func->def->slotcount == env->length) {
  ------------------
  |  Branch (16566:21): [True: 0, False: 0]
  ------------------
16567|      0|                env->offset = real_offset;
16568|      0|                return 1;
16569|      0|            }
16570|      0|            i = frame->prevframe;
16571|      0|        }
16572|       |        /* Invalid, set to empty off-stack variant. */
16573|      0|        env->offset = 0;
16574|      0|        env->length = 0;
16575|      0|        env->as.values = NULL;
16576|      0|        return 0;
16577|  7.92M|    } else {
16578|  7.92M|        return 1;
16579|  7.92M|    }
16580|  7.92M|}
janet_fiber_funcframe_tail:
16602|  5.41M|int janet_fiber_funcframe_tail(JanetFiber *fiber, JanetFunction *func) {
16603|  5.41M|    int32_t i;
16604|  5.41M|    int32_t nextframetop = fiber->frame + func->def->slotcount;
16605|  5.41M|    int32_t nextstacktop = nextframetop + JANET_FRAME_SIZE;
  ------------------
  |  | 1026|  5.41M|#define JANET_FRAME_SIZE 4
  ------------------
16606|  5.41M|    int32_t next_arity = fiber->stacktop - fiber->stackstart;
16607|  5.41M|    int32_t stacksize;
16608|       |
16609|       |    /* Check strict arity before messing with state */
16610|  5.41M|    if (next_arity < func->def->min_arity) return 1;
  ------------------
  |  Branch (16610:9): [True: 2, False: 5.41M]
  ------------------
16611|  5.41M|    if (next_arity > func->def->max_arity) return 1;
  ------------------
  |  Branch (16611:9): [True: 0, False: 5.41M]
  ------------------
16612|       |
16613|  5.41M|    if (fiber->capacity < nextstacktop) {
  ------------------
  |  Branch (16613:9): [True: 17, False: 5.41M]
  ------------------
16614|     17|        janet_fiber_setcapacity(fiber, 2 * nextstacktop);
16615|       |#ifdef JANET_DEBUG
16616|       |    } else {
16617|       |        janet_fiber_refresh_memory(fiber);
16618|       |#endif
16619|     17|    }
16620|       |
16621|       |    /* Detach old function */
16622|  5.41M|    if (NULL != janet_fiber_frame(fiber)->func)
  ------------------
  |  |  855|  5.41M|#define janet_fiber_frame(f) janet_stack_frame((f)->data + (f)->frame)
  |  |  ------------------
  |  |  |  |  854|  5.41M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  5.41M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (16622:9): [True: 5.41M, False: 0]
  ------------------
16623|  5.41M|        janet_env_detach(janet_fiber_frame(fiber)->env);
  ------------------
  |  |  855|  5.41M|#define janet_fiber_frame(f) janet_stack_frame((f)->data + (f)->frame)
  |  |  ------------------
  |  |  |  |  854|  5.41M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  5.41M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
16624|  5.41M|    janet_fiber_frame(fiber)->env = NULL;
  ------------------
  |  |  855|  5.41M|#define janet_fiber_frame(f) janet_stack_frame((f)->data + (f)->frame)
  |  |  ------------------
  |  |  |  |  854|  5.41M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  5.41M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
16625|       |
16626|       |    /* Check varargs */
16627|  5.41M|    if (func->def->flags & JANET_FUNCDEF_FLAG_VARARG) {
  ------------------
  |  | 1097|  5.41M|#define JANET_FUNCDEF_FLAG_VARARG 0x10000
  ------------------
  |  Branch (16627:9): [True: 8.83k, False: 5.40M]
  ------------------
16628|  8.83k|        int32_t tuplehead = fiber->stackstart + func->def->arity;
16629|  8.83k|        int st = func->def->flags & JANET_FUNCDEF_FLAG_STRUCTARG;
  ------------------
  |  | 1105|  8.83k|#define JANET_FUNCDEF_FLAG_STRUCTARG 0x1000000
  ------------------
16630|  8.83k|        if (tuplehead >= fiber->stacktop) {
  ------------------
  |  Branch (16630:13): [True: 9, False: 8.82k]
  ------------------
16631|      9|            if (tuplehead >= fiber->capacity) janet_fiber_setcapacity(fiber, 2 * (tuplehead + 1));
  ------------------
  |  Branch (16631:17): [True: 0, False: 9]
  ------------------
16632|      9|            for (i = fiber->stacktop; i < tuplehead; ++i) fiber->data[i] = janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (16632:39): [True: 0, False: 9]
  ------------------
16633|      9|            fiber->data[tuplehead] = st
  ------------------
  |  Branch (16633:38): [True: 0, False: 9]
  ------------------
16634|      9|                                     ? make_struct_n(NULL, 0)
16635|      9|                                     : janet_wrap_tuple(janet_tuple_n(NULL, 0));
  ------------------
  |  |  843|      9|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|     18|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      9|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      9|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
16636|  8.82k|        } else {
16637|  8.82k|            fiber->data[tuplehead] = st
  ------------------
  |  Branch (16637:38): [True: 0, False: 8.82k]
  ------------------
16638|  8.82k|                                     ? make_struct_n(
16639|      0|                                         fiber->data + tuplehead,
16640|      0|                                         fiber->stacktop - tuplehead)
16641|  8.82k|                                     : janet_wrap_tuple(janet_tuple_n(
  ------------------
  |  |  843|  8.82k|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|  17.6k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  8.82k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  8.82k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
16642|  8.82k|                                             fiber->data + tuplehead,
16643|  8.82k|                                             fiber->stacktop - tuplehead));
16644|  8.82k|        }
16645|  8.83k|        stacksize = tuplehead - fiber->stackstart + 1;
16646|  5.40M|    } else {
16647|  5.40M|        stacksize = fiber->stacktop - fiber->stackstart;
16648|  5.40M|    }
16649|       |
16650|  5.41M|    if (stacksize) memmove(fiber->data + fiber->frame, fiber->data + fiber->stackstart, stacksize * sizeof(Janet));
  ------------------
  |  Branch (16650:9): [True: 5.41M, False: 84]
  ------------------
16651|       |
16652|       |    /* Nil unset locals (Needed for functional correctness) */
16653|  92.8M|    for (i = fiber->frame + stacksize; i < nextframetop; ++i)
  ------------------
  |  Branch (16653:40): [True: 87.3M, False: 5.41M]
  ------------------
16654|  87.3M|        fiber->data[i] = janet_wrap_nil();
  ------------------
  |  |  831|  87.3M|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  92.8M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  87.3M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  87.3M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
16655|       |
16656|       |    /* Set stack stuff */
16657|  5.41M|    fiber->stacktop = fiber->stackstart = nextstacktop;
16658|       |
16659|       |    /* Set frame stuff */
16660|  5.41M|    janet_fiber_frame(fiber)->func = func;
  ------------------
  |  |  855|  5.41M|#define janet_fiber_frame(f) janet_stack_frame((f)->data + (f)->frame)
  |  |  ------------------
  |  |  |  |  854|  5.41M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  5.41M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
16661|  5.41M|    janet_fiber_frame(fiber)->pc = func->def->bytecode;
  ------------------
  |  |  855|  5.41M|#define janet_fiber_frame(f) janet_stack_frame((f)->data + (f)->frame)
  |  |  ------------------
  |  |  |  |  854|  5.41M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  5.41M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
16662|  5.41M|    janet_fiber_frame(fiber)->flags |= JANET_STACKFRAME_TAILCALL;
  ------------------
  |  |  855|  5.41M|#define janet_fiber_frame(f) janet_stack_frame((f)->data + (f)->frame)
  |  |  ------------------
  |  |  |  |  854|  5.41M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  5.41M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  janet_fiber_frame(fiber)->flags |= JANET_STACKFRAME_TAILCALL;
  ------------------
  |  | 1010|  5.41M|#define JANET_STACKFRAME_TAILCALL 1
  ------------------
16663|       |
16664|       |    /* Good return */
16665|  5.41M|    return 0;
16666|  5.41M|}
janet_fiber_cframe:
16669|  32.1M|void janet_fiber_cframe(JanetFiber *fiber, JanetCFunction cfun) {
16670|  32.1M|    JanetStackFrame *newframe;
16671|       |
16672|  32.1M|    int32_t oldframe = fiber->frame;
16673|  32.1M|    int32_t nextframe = fiber->stackstart;
16674|  32.1M|    int32_t nextstacktop = fiber->stacktop + JANET_FRAME_SIZE;
  ------------------
  |  | 1026|  32.1M|#define JANET_FRAME_SIZE 4
  ------------------
16675|       |
16676|  32.1M|    if (fiber->capacity < nextstacktop) {
  ------------------
  |  Branch (16676:9): [True: 34, False: 32.1M]
  ------------------
16677|     34|        janet_fiber_setcapacity(fiber, 2 * nextstacktop);
16678|       |#ifdef JANET_DEBUG
16679|       |    } else {
16680|       |        janet_fiber_refresh_memory(fiber);
16681|       |#endif
16682|     34|    }
16683|       |
16684|       |    /* Set the next frame */
16685|  32.1M|    fiber->frame = nextframe;
16686|  32.1M|    fiber->stacktop = fiber->stackstart = nextstacktop;
16687|  32.1M|    newframe = janet_fiber_frame(fiber);
  ------------------
  |  |  855|  32.1M|#define janet_fiber_frame(f) janet_stack_frame((f)->data + (f)->frame)
  |  |  ------------------
  |  |  |  |  854|  32.1M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  32.1M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
16688|       |
16689|       |    /* Set up the new frame */
16690|  32.1M|    newframe->prevframe = oldframe;
16691|  32.1M|    newframe->pc = (uint32_t *) cfun;
16692|  32.1M|    newframe->func = NULL;
16693|       |    newframe->env = NULL;
16694|  32.1M|    newframe->flags = 0;
16695|  32.1M|}
janet_fiber_popframe:
16698|  44.6M|void janet_fiber_popframe(JanetFiber *fiber) {
16699|  44.6M|    JanetStackFrame *frame = janet_fiber_frame(fiber);
  ------------------
  |  |  855|  44.6M|#define janet_fiber_frame(f) janet_stack_frame((f)->data + (f)->frame)
  |  |  ------------------
  |  |  |  |  854|  44.6M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  44.6M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
16700|  44.6M|    if (fiber->frame == 0) return;
  ------------------
  |  Branch (16700:9): [True: 0, False: 44.6M]
  ------------------
16701|       |
16702|       |    /* Clean up the frame (detach environments) */
16703|  44.6M|    if (NULL != frame->func)
  ------------------
  |  Branch (16703:9): [True: 12.5M, False: 32.1M]
  ------------------
16704|  12.5M|        janet_env_detach(frame->env);
16705|       |
16706|       |    /* Shrink stack */
16707|  44.6M|    fiber->stacktop = fiber->stackstart = fiber->frame;
16708|  44.6M|    fiber->frame = frame->prevframe;
16709|  44.6M|}
janet_fiber_status:
16711|   172k|JanetFiberStatus janet_fiber_status(JanetFiber *f) {
16712|   172k|    return ((f)->flags & JANET_FIBER_STATUS_MASK) >> JANET_FIBER_STATUS_OFFSET;
  ------------------
  |  |  830|   172k|#define JANET_FIBER_STATUS_MASK 0x3F0000
  ------------------
                  return ((f)->flags & JANET_FIBER_STATUS_MASK) >> JANET_FIBER_STATUS_OFFSET;
  ------------------
  |  |  832|   172k|#define JANET_FIBER_STATUS_OFFSET 16
  ------------------
16713|   172k|}
janet_lib_fiber:
16943|    267|void janet_lib_fiber(JanetTable *env) {
16944|    267|    JanetRegExt fiber_cfuns[] = {
16945|    267|        JANET_CORE_REG("fiber/new", cfun_fiber_new),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16946|    267|        JANET_CORE_REG("fiber/status", cfun_fiber_status),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16947|    267|        JANET_CORE_REG("fiber/root", cfun_fiber_root),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16948|    267|        JANET_CORE_REG("fiber/current", cfun_fiber_current),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16949|    267|        JANET_CORE_REG("fiber/maxstack", cfun_fiber_maxstack),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16950|    267|        JANET_CORE_REG("fiber/setmaxstack", cfun_fiber_setmaxstack),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16951|    267|        JANET_CORE_REG("fiber/getenv", cfun_fiber_getenv),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16952|    267|        JANET_CORE_REG("fiber/setenv", cfun_fiber_setenv),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16953|    267|        JANET_CORE_REG("fiber/can-resume?", cfun_fiber_can_resume),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16954|    267|        JANET_CORE_REG("fiber/last-value", cfun_fiber_last_value),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
16955|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
16956|    267|    };
16957|       |    janet_core_cfuns_ext(env, NULL, fiber_cfuns);
16958|    267|}
janet_lib_filewatch:
17953|    267|void janet_lib_filewatch(JanetTable *env) {
17954|    267|    JanetRegExt cfuns[] = {
17955|    267|        JANET_CORE_REG("filewatch/new", cfun_filewatch_make),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
17956|    267|        JANET_CORE_REG("filewatch/add", cfun_filewatch_add),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
17957|    267|        JANET_CORE_REG("filewatch/remove", cfun_filewatch_remove),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
17958|    267|        JANET_CORE_REG("filewatch/listen", cfun_filewatch_listen),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
17959|    267|        JANET_CORE_REG("filewatch/unlisten", cfun_filewatch_unlisten),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
17960|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
17961|    267|    };
17962|       |    janet_core_cfuns_ext(env, NULL, cfuns);
17963|    267|}
janet_gcpressure:
18023|   124k|void janet_gcpressure(size_t s) {
18024|   124k|    janet_vm.next_collection += s;
18025|   124k|}
janet_gcalloc:
18497|  37.0M|void *janet_gcalloc(enum JanetMemoryType type, size_t size) {
18498|  37.0M|    JanetGCObject *mem;
18499|       |
18500|       |    /* Make sure everything is inited */
18501|  37.0M|    janet_assert(NULL != janet_vm.cache, "please initialize janet before use");
  ------------------
  |  |  389|  37.0M|#define janet_assert(c, m) do { \
  |  |  390|  37.0M|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 37.0M]
  |  |  ------------------
  |  |  391|  37.0M|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 37.0M]
  |  |  ------------------
  ------------------
18502|  37.0M|    mem = janet_malloc(size);
  ------------------
  |  | 2406|  37.0M|#define janet_malloc(X) malloc((X))
  ------------------
18503|       |
18504|       |    /* Check for bad malloc */
18505|  37.0M|    if (NULL == mem) {
  ------------------
  |  Branch (18505:9): [True: 0, False: 37.0M]
  ------------------
18506|      0|        JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
18507|      0|    }
18508|       |
18509|       |    /* Configure block */
18510|  37.0M|    mem->flags = type;
18511|       |
18512|       |    /* Prepend block to heap list */
18513|  37.0M|    janet_vm.next_collection += size;
18514|  37.0M|    if (type < JANET_MEMORY_TABLE_WEAKK) {
  ------------------
  |  Branch (18514:9): [True: 37.0M, False: 0]
  ------------------
18515|       |        /* normal heap */
18516|  37.0M|        mem->data.next = janet_vm.blocks;
18517|  37.0M|        janet_vm.blocks = mem;
18518|  37.0M|    } else {
18519|       |        /* weak heap */
18520|      0|        mem->data.next = janet_vm.weak_blocks;
18521|      0|        janet_vm.weak_blocks = mem;
18522|      0|    }
18523|  37.0M|    janet_vm.block_count++;
18524|       |
18525|  37.0M|    return (void *)mem;
18526|  37.0M|}
janet_collect:
18549|   142M|void janet_collect(void) {
18550|   142M|    uint32_t i;
18551|   142M|    if (janet_vm.gc_suspend) return;
  ------------------
  |  Branch (18551:9): [True: 142M, False: 0]
  ------------------
18552|      0|    depth = JANET_RECURSION_GUARD;
  ------------------
  |  |  296|      0|#define JANET_RECURSION_GUARD 1024
  ------------------
18553|      0|    janet_vm.gc_mark_phase = 1;
18554|       |    /* Try to prevent many major collections back to back.
18555|       |     * A full collection will take O(janet_vm.block_count) time.
18556|       |     * If we have a large heap, make sure our interval is not too
18557|       |     * small so we won't make many collections over it. This is just a
18558|       |     * heuristic for automatically changing the gc interval */
18559|      0|    if (janet_vm.block_count * 8 > janet_vm.gc_interval) {
  ------------------
  |  Branch (18559:9): [True: 0, False: 0]
  ------------------
18560|      0|        janet_vm.gc_interval = janet_vm.block_count * sizeof(JanetGCObject);
18561|      0|    }
18562|      0|    orig_rootcount = janet_vm.root_count;
18563|      0|#ifdef JANET_EV
18564|      0|    janet_ev_mark();
18565|      0|#endif
18566|      0|    if (janet_vm.top_dyns) {
  ------------------
  |  Branch (18566:9): [True: 0, False: 0]
  ------------------
18567|      0|        janet_mark(janet_wrap_table(janet_vm.top_dyns));
  ------------------
  |  |  846|      0|#define janet_wrap_table(s) janet_nanbox_wrap_((s), JANET_TABLE)
  |  |  ------------------
  |  |  |  |  825|      0|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
18568|      0|    }
18569|      0|    if (janet_vm.root_fiber != NULL) { /* Can be NULL if janet_collect called outside of interpreter loop */
  ------------------
  |  Branch (18569:9): [True: 0, False: 0]
  ------------------
18570|      0|        janet_mark_fiber(janet_vm.root_fiber);
18571|      0|    }
18572|      0|    for (i = 0; i < orig_rootcount; i++)
  ------------------
  |  Branch (18572:17): [True: 0, False: 0]
  ------------------
18573|      0|        janet_mark(janet_vm.roots[i]);
18574|      0|    while (orig_rootcount < janet_vm.root_count) {
  ------------------
  |  Branch (18574:12): [True: 0, False: 0]
  ------------------
18575|      0|        Janet x = janet_vm.roots[--janet_vm.root_count];
18576|      0|        janet_mark(x);
18577|      0|    }
18578|      0|    janet_vm.gc_mark_phase = 0;
18579|      0|    janet_sweep();
18580|      0|    janet_vm.next_collection = 0;
18581|      0|    janet_free_all_scratch();
18582|      0|}
janet_gcroot:
18587|    534|void janet_gcroot(Janet root) {
18588|    534|    size_t newcount = janet_vm.root_count + 1;
18589|    534|    if (newcount > janet_vm.root_capacity) {
  ------------------
  |  Branch (18589:9): [True: 267, False: 267]
  ------------------
18590|    267|        size_t newcap = 2 * newcount;
18591|    267|        janet_vm.roots = janet_realloc(janet_vm.roots, sizeof(Janet) * newcap);
  ------------------
  |  | 2409|    267|#define janet_realloc(X, Y) realloc((X), (Y))
  ------------------
18592|    267|        if (NULL == janet_vm.roots) {
  ------------------
  |  Branch (18592:13): [True: 0, False: 267]
  ------------------
18593|      0|            JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
18594|      0|        }
18595|    267|        janet_vm.root_capacity = newcap;
18596|    267|    }
18597|    534|    janet_vm.roots[janet_vm.root_count] = root;
18598|    534|    janet_vm.root_count = newcount;
18599|    534|}
janet_clear_memory:
18645|    267|void janet_clear_memory(void) {
18646|    267|#ifdef JANET_EV
18647|    267|    JanetKV *items = janet_vm.threaded_abstracts.data;
18648|    534|    for (int32_t i = 0; i < janet_vm.threaded_abstracts.capacity; i++) {
  ------------------
  |  Branch (18648:25): [True: 267, False: 267]
  ------------------
18649|    267|        if (janet_checktype(items[i].key, JANET_ABSTRACT)) {
  ------------------
  |  |  806|    267|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 267]
  |  |  |  Branch (806:6): [Folded, False: 267]
  |  |  ------------------
  |  |  807|    267|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|    267|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|    267|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|    267|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    267|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    267|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
18650|      0|            void *abst = janet_unwrap_abstract(items[i].key);
  ------------------
  |  |  866|      0|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
18651|      0|            JanetAbstractHead *head = janet_abstract_head(abst);
  ------------------
  |  | 1897|      0|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  ------------------
18652|      0|            if (head->type->gcperthread) {
  ------------------
  |  Branch (18652:17): [True: 0, False: 0]
  ------------------
18653|      0|                janet_assert(!head->type->gcperthread(head->data, head->size), "per-thread finalizer failed");
  ------------------
  |  |  389|      0|#define janet_assert(c, m) do { \
  |  |  390|      0|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  391|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
18654|      0|            }
18655|      0|            janet_abstract_decref_maybe_free(abst);
18656|      0|        }
18657|    267|    }
18658|    267|#endif
18659|    267|    JanetGCObject *current = janet_vm.blocks;
18660|  37.0M|    while (NULL != current) {
  ------------------
  |  Branch (18660:12): [True: 37.0M, False: 267]
  ------------------
18661|  37.0M|        janet_deinit_block(current);
18662|  37.0M|        JanetGCObject *next = current->data.next;
18663|  37.0M|        janet_free(current);
  ------------------
  |  | 2415|  37.0M|#define janet_free(X) free((X))
  ------------------
18664|  37.0M|        current = next;
18665|  37.0M|    }
18666|    267|    janet_vm.blocks = NULL;
18667|    267|    janet_free_all_scratch();
18668|    267|    janet_free(janet_vm.scratch_mem);
  ------------------
  |  | 2415|    267|#define janet_free(X) free((X))
  ------------------
18669|    267|}
janet_gclock:
18672|  86.4k|int janet_gclock(void) {
18673|  86.4k|    return janet_vm.gc_suspend++;
18674|  86.4k|}
janet_gcunlock:
18675|  86.4k|void janet_gcunlock(int handle) {
18676|  86.4k|    janet_vm.gc_suspend = handle;
18677|  86.4k|}
janet_smalloc:
18683|  2.75M|void *janet_smalloc(size_t size) {
18684|  2.75M|    JanetScratch *s = janet_malloc(sizeof(JanetScratch) + size);
  ------------------
  |  | 2406|  2.75M|#define janet_malloc(X) malloc((X))
  ------------------
18685|  2.75M|    if (NULL == s) {
  ------------------
  |  Branch (18685:9): [True: 0, False: 2.75M]
  ------------------
18686|      0|        JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
18687|      0|    }
18688|  2.75M|    s->finalize = NULL;
18689|  2.75M|    if (janet_vm.scratch_len == janet_vm.scratch_cap) {
  ------------------
  |  Branch (18689:9): [True: 833, False: 2.75M]
  ------------------
18690|    833|        size_t newcap = 2 * janet_vm.scratch_cap + 2;
18691|    833|        JanetScratch **newmem = (JanetScratch **) janet_realloc(janet_vm.scratch_mem, newcap * sizeof(JanetScratch));
  ------------------
  |  | 2409|    833|#define janet_realloc(X, Y) realloc((X), (Y))
  ------------------
18692|    833|        if (NULL == newmem) {
  ------------------
  |  Branch (18692:13): [True: 0, False: 833]
  ------------------
18693|      0|            JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
18694|      0|        }
18695|    833|        janet_vm.scratch_cap = newcap;
18696|    833|        janet_vm.scratch_mem = newmem;
18697|    833|    }
18698|  2.75M|    janet_vm.scratch_mem[janet_vm.scratch_len++] = s;
18699|  2.75M|    return (char *)(s->mem);
18700|  2.75M|}
janet_srealloc:
18712|  4.59M|void *janet_srealloc(void *mem, size_t size) {
18713|  4.59M|    if (NULL == mem) return janet_smalloc(size);
  ------------------
  |  Branch (18713:9): [True: 2.49M, False: 2.09M]
  ------------------
18714|  2.09M|    JanetScratch *s = janet_mem2scratch(mem);
18715|  2.09M|    if (janet_vm.scratch_len) {
  ------------------
  |  Branch (18715:9): [True: 2.09M, False: 0]
  ------------------
18716|  2.28M|        for (size_t i = janet_vm.scratch_len - 1; ; i--) {
18717|  2.28M|            if (janet_vm.scratch_mem[i] == s) {
  ------------------
  |  Branch (18717:17): [True: 2.09M, False: 189k]
  ------------------
18718|  2.09M|                JanetScratch *news = janet_realloc(s, size + sizeof(JanetScratch));
  ------------------
  |  | 2409|  2.09M|#define janet_realloc(X, Y) realloc((X), (Y))
  ------------------
18719|  2.09M|                if (NULL == news) {
  ------------------
  |  Branch (18719:21): [True: 0, False: 2.09M]
  ------------------
18720|      0|                    JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
18721|      0|                }
18722|  2.09M|                janet_vm.scratch_mem[i] = news;
18723|  2.09M|                return (char *)(news->mem);
18724|  2.09M|            }
18725|   189k|            if (i == 0) break;
  ------------------
  |  Branch (18725:17): [True: 0, False: 189k]
  ------------------
18726|   189k|        }
18727|  2.09M|    }
18728|      0|    JANET_EXIT("invalid janet_srealloc");
  ------------------
  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  380|      0|        __FILE__,\
  |  |  381|      0|        __LINE__,\
  |  |  382|      0|        (m));\
  |  |  383|      0|    abort();\
  |  |  384|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
18729|      0|}
janet_sfree:
18736|  2.75M|void janet_sfree(void *mem) {
18737|  2.75M|    if (NULL == mem) return;
  ------------------
  |  Branch (18737:9): [True: 0, False: 2.75M]
  ------------------
18738|  2.75M|    JanetScratch *s = janet_mem2scratch(mem);
18739|  2.75M|    if (janet_vm.scratch_len) {
  ------------------
  |  Branch (18739:9): [True: 2.75M, False: 0]
  ------------------
18740|  3.10M|        for (size_t i = janet_vm.scratch_len - 1; ; i--) {
18741|  3.10M|            if (janet_vm.scratch_mem[i] == s) {
  ------------------
  |  Branch (18741:17): [True: 2.75M, False: 358k]
  ------------------
18742|  2.75M|                janet_vm.scratch_mem[i] = janet_vm.scratch_mem[--janet_vm.scratch_len];
18743|  2.75M|                free_one_scratch(s);
18744|  2.75M|                return;
18745|  2.75M|            }
18746|   358k|            if (i == 0) break;
  ------------------
  |  Branch (18746:17): [True: 0, False: 358k]
  ------------------
18747|   358k|        }
18748|  2.75M|    }
18749|      0|    JANET_EXIT("invalid janet_sfree");
  ------------------
  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  380|      0|        __FILE__,\
  |  |  381|      0|        __LINE__,\
  |  |  382|      0|        (m));\
  |  |  383|      0|    abort();\
  |  |  384|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
18750|      0|}
janet_unwrap_u64:
18899|      4|uint64_t janet_unwrap_u64(Janet x) {
18900|      4|    switch (janet_type(x)) {
  ------------------
  |  |  795|      4|    (isnan((x).number) \
  |  |  796|      4|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|      4|        : JANET_NUMBER)
  ------------------
  |  Branch (18900:13): [True: 4, False: 0]
  ------------------
18901|      0|        default:
  ------------------
  |  Branch (18901:9): [True: 0, False: 4]
  ------------------
18902|      0|            break;
18903|      0|        case JANET_NUMBER : {
  ------------------
  |  Branch (18903:9): [True: 0, False: 4]
  ------------------
18904|      0|            double d = janet_unwrap_number(x);
  ------------------
  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  ------------------
18905|      0|            if (!janet_checkuint64range(d)) break;
  ------------------
  |  |  965|      0|#define janet_checkuint64range(x) ((x) >= 0 && (x) <= JANET_INTMAX_DOUBLE && (x) == (uint64_t)(x))
  |  |  ------------------
  |  |  |  |  165|      0|#define JANET_INTMAX_DOUBLE 9007199254740992.0
  |  |  ------------------
  |  |  |  Branch (965:36): [True: 0, False: 0]
  |  |  |  Branch (965:48): [True: 0, False: 0]
  |  |  |  Branch (965:78): [True: 0, False: 0]
  |  |  ------------------
  ------------------
18906|      0|            return (uint64_t) d;
18907|      0|        }
18908|      0|        case JANET_STRING: {
  ------------------
  |  Branch (18908:9): [True: 0, False: 4]
  ------------------
18909|      0|            uint64_t value;
18910|      0|            const uint8_t *str = janet_unwrap_string(x);
  ------------------
  |  |  863|      0|#define janet_unwrap_string(x) ((JanetString)janet_nanbox_to_pointer(x))
  ------------------
18911|      0|            if (janet_scan_uint64(str, janet_string_length(str), &value))
  ------------------
  |  | 1813|      0|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|      0|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (18911:17): [True: 0, False: 0]
  ------------------
18912|      0|                return value;
18913|      0|            break;
18914|      0|        }
18915|      4|        case JANET_ABSTRACT: {
  ------------------
  |  Branch (18915:9): [True: 4, False: 0]
  ------------------
18916|      4|            void *abst = janet_unwrap_abstract(x);
  ------------------
  |  |  866|      4|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
18917|      4|            if (janet_abstract_type(abst) == &janet_s64_type ||
  ------------------
  |  | 1899|      4|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|      4|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (18917:17): [True: 0, False: 4]
  ------------------
18918|      4|                    (janet_abstract_type(abst) == &janet_u64_type))
  ------------------
  |  | 1899|      4|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|      4|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (18918:21): [True: 4, False: 0]
  ------------------
18919|      4|                return *(uint64_t *)abst;
18920|      0|            break;
18921|      4|        }
18922|      4|    }
18923|      0|    janet_panicf("can not convert %t %q to a 64 bit unsigned integer", x, x);
18924|      0|    return 0;
18925|      4|}
janet_wrap_s64:
18935|  6.27k|Janet janet_wrap_s64(int64_t x) {
18936|  6.27k|    int64_t *box = janet_abstract(&janet_s64_type, sizeof(int64_t));
18937|  6.27k|    *box = (int64_t)x;
18938|  6.27k|    return janet_wrap_abstract(box);
  ------------------
  |  |  851|  6.27k|#define janet_wrap_abstract(s) janet_nanbox_wrap_((s), JANET_ABSTRACT)
  |  |  ------------------
  |  |  |  |  825|  6.27k|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  6.27k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  6.27k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
18939|  6.27k|}
janet_wrap_u64:
18941|    157|Janet janet_wrap_u64(uint64_t x) {
18942|    157|    uint64_t *box = janet_abstract(&janet_u64_type, sizeof(uint64_t));
18943|    157|    *box = (uint64_t)x;
18944|    157|    return janet_wrap_abstract(box);
  ------------------
  |  |  851|    157|#define janet_wrap_abstract(s) janet_nanbox_wrap_((s), JANET_ABSTRACT)
  |  |  ------------------
  |  |  |  |  825|    157|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    157|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    157|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
18945|    157|}
janet_lib_inttypes:
19427|    267|void janet_lib_inttypes(JanetTable *env) {
19428|    267|    JanetRegExt it_cfuns[] = {
19429|    267|        JANET_CORE_REG("int/s64", cfun_it_s64_new),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
19430|    267|        JANET_CORE_REG("int/u64", cfun_it_u64_new),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
19431|    267|        JANET_CORE_REG("int/to-number", cfun_to_number),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
19432|    267|        JANET_CORE_REG("int/to-bytes", cfun_to_bytes),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
19433|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
19434|    267|    };
19435|       |    janet_core_cfuns_ext(env, NULL, it_cfuns);
19436|    267|    janet_register_abstract_type(&janet_s64_type);
19437|    267|    janet_register_abstract_type(&janet_u64_type);
19438|    267|}
janet_file_close:
19754|    801|int janet_file_close(JanetFile *file) {
19755|    801|    int ret = 0;
19756|    801|    if (!(file->flags & (JANET_FILE_NOT_CLOSEABLE | JANET_FILE_CLOSED))) {
  ------------------
  |  | 2278|    801|#define JANET_FILE_NOT_CLOSEABLE 16
  ------------------
                  if (!(file->flags & (JANET_FILE_NOT_CLOSEABLE | JANET_FILE_CLOSED))) {
  ------------------
  |  | 2279|    801|#define JANET_FILE_CLOSED 32
  ------------------
  |  Branch (19756:9): [True: 0, False: 801]
  ------------------
19757|      0|        ret = fclose(file->file);
19758|      0|        file->flags |= JANET_FILE_CLOSED;
  ------------------
  |  | 2279|      0|#define JANET_FILE_CLOSED 32
  ------------------
19759|      0|        file->file = NULL; /* NULL dereference is easier to debug then other problems */
19760|      0|        return ret;
19761|      0|    }
19762|    801|    return 0;
19763|    801|}
janet_makefile:
20262|    801|Janet janet_makefile(FILE *f, int32_t flags) {
20263|    801|    return janet_wrap_abstract(makef(f, flags, BUFSIZ));
  ------------------
  |  |  851|    801|#define janet_wrap_abstract(s) janet_nanbox_wrap_((s), JANET_ABSTRACT)
  |  |  ------------------
  |  |  |  |  825|    801|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    801|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    801|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
20264|    801|}
janet_lib_io:
20277|    267|void janet_lib_io(JanetTable *env) {
20278|    267|    JanetRegExt io_cfuns[] = {
20279|    267|        JANET_CORE_REG("print", cfun_io_print),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20280|    267|        JANET_CORE_REG("prin", cfun_io_prin),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20281|    267|        JANET_CORE_REG("printf", cfun_io_printf),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20282|    267|        JANET_CORE_REG("prinf", cfun_io_prinf),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20283|    267|        JANET_CORE_REG("eprin", cfun_io_eprin),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20284|    267|        JANET_CORE_REG("eprint", cfun_io_eprint),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20285|    267|        JANET_CORE_REG("eprintf", cfun_io_eprintf),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20286|    267|        JANET_CORE_REG("eprinf", cfun_io_eprinf),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20287|    267|        JANET_CORE_REG("xprint", cfun_io_xprint),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20288|    267|        JANET_CORE_REG("xprin", cfun_io_xprin),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20289|    267|        JANET_CORE_REG("xprintf", cfun_io_xprintf),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20290|    267|        JANET_CORE_REG("xprinf", cfun_io_xprinf),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20291|    267|        JANET_CORE_REG("flush", cfun_io_flush),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20292|    267|        JANET_CORE_REG("eflush", cfun_io_eflush),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20293|    267|        JANET_CORE_REG("file/temp", cfun_io_temp),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20294|    267|        JANET_CORE_REG("file/open", cfun_io_fopen),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20295|    267|        JANET_CORE_REG("file/close", cfun_io_fclose),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20296|    267|        JANET_CORE_REG("file/read", cfun_io_fread),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20297|    267|        JANET_CORE_REG("file/write", cfun_io_fwrite),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20298|    267|        JANET_CORE_REG("file/flush", cfun_io_fflush),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20299|    267|        JANET_CORE_REG("file/seek", cfun_io_fseek),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20300|    267|        JANET_CORE_REG("file/tell", cfun_io_ftell),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
20301|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
20302|    267|    };
20303|    267|    janet_core_cfuns_ext(env, NULL, io_cfuns);
20304|    267|    janet_register_abstract_type(&janet_file_type);
20305|    267|    int default_flags = JANET_FILE_NOT_CLOSEABLE | JANET_FILE_SERIALIZABLE;
  ------------------
  |  | 2278|    267|#define JANET_FILE_NOT_CLOSEABLE 16
  ------------------
                  int default_flags = JANET_FILE_NOT_CLOSEABLE | JANET_FILE_SERIALIZABLE;
  ------------------
  |  | 2281|    267|#define JANET_FILE_SERIALIZABLE 128
  ------------------
20306|       |    /* stdout */
20307|    267|    JANET_CORE_DEF(env, "stdout",
  ------------------
  |  |  520|    267|#define JANET_CORE_DEF(ENV, NAME, X, DOC) janet_core_def_sm(ENV, NAME, X, DOC, NULL, 0)
  ------------------
20308|    267|                   janet_makefile(stdout, JANET_FILE_APPEND | default_flags),
20309|    267|                   "The standard output file.");
20310|       |    /* stderr */
20311|    267|    JANET_CORE_DEF(env, "stderr",
  ------------------
  |  |  520|    267|#define JANET_CORE_DEF(ENV, NAME, X, DOC) janet_core_def_sm(ENV, NAME, X, DOC, NULL, 0)
  ------------------
20312|    267|                   janet_makefile(stderr, JANET_FILE_APPEND | default_flags),
20313|    267|                   "The standard error file.");
20314|       |    /* stdin */
20315|    267|    JANET_CORE_DEF(env, "stdin",
  ------------------
  |  |  520|    267|#define JANET_CORE_DEF(ENV, NAME, X, DOC) janet_core_def_sm(ENV, NAME, X, DOC, NULL, 0)
  ------------------
20316|    267|                   janet_makefile(stdin, JANET_FILE_READ | default_flags),
20317|    267|                   "The standard input file.");
20318|       |
20319|    267|}
janet_unmarshal:
21978|    267|    const uint8_t **next) {
21979|    267|    UnmarshalState st;
21980|    267|    st.start = bytes;
21981|    267|    st.end = bytes + len;
21982|    267|    st.lookup_defs = NULL;
21983|    267|    st.lookup_envs = NULL;
21984|    267|    st.lookup = NULL;
21985|    267|    st.reg = reg;
21986|    267|    Janet out;
21987|    267|    const uint8_t *nextbytes = unmarshal_one(&st, bytes, &out, flags);
21988|    267|    if (next) *next = nextbytes;
  ------------------
  |  Branch (21988:9): [True: 0, False: 267]
  ------------------
21989|    267|    janet_v_free(st.lookup_defs);
  ------------------
  |  |  756|    267|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|    267|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 267, False: 0]
  |  |  ------------------
  ------------------
21990|    267|    janet_v_free(st.lookup_envs);
  ------------------
  |  |  756|    267|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|    267|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 267, False: 0]
  |  |  ------------------
  ------------------
21991|       |    janet_v_free(st.lookup);
  ------------------
  |  |  756|    267|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|    267|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 267, False: 0]
  |  |  ------------------
  ------------------
21992|    267|    return out;
21993|    267|}
janet_lib_marsh:
22054|    267|void janet_lib_marsh(JanetTable *env) {
22055|    267|    JanetRegExt marsh_cfuns[] = {
22056|    267|        JANET_CORE_REG("marshal", cfun_marshal),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22057|    267|        JANET_CORE_REG("unmarshal", cfun_unmarshal),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22058|    267|        JANET_CORE_REG("env-lookup", cfun_env_lookup),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22059|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
22060|    267|    };
22061|       |    janet_core_cfuns_ext(env, NULL, marsh_cfuns);
22062|    267|}
janet_default_rng:
22137|    267|JanetRNG *janet_default_rng(void) {
22138|    267|    return &janet_vm.rng;
22139|    267|}
janet_rng_seed:
22141|    534|void janet_rng_seed(JanetRNG *rng, uint32_t seed) {
22142|    534|    rng->a = seed;
22143|    534|    rng->b = 0x97654321u;
22144|    534|    rng->c = 123871873u;
22145|    534|    rng->d = 0xf23f56c8u;
22146|    534|    rng->counter = 0u;
22147|       |    /* First several numbers aren't that random. */
22148|  9.07k|    for (int i = 0; i < 16; i++) janet_rng_u32(rng);
  ------------------
  |  Branch (22148:21): [True: 8.54k, False: 534]
  ------------------
22149|    534|}
janet_rng_u32:
22165|  8.54k|uint32_t janet_rng_u32(JanetRNG *rng) {
22166|       |    /* Algorithm "xorwow" from p. 5 of Marsaglia, "Xorshift RNGs" */
22167|  8.54k|    uint32_t t = rng->d;
22168|  8.54k|    uint32_t const s = rng->a;
22169|  8.54k|    rng->d = rng->c;
22170|  8.54k|    rng->c = rng->b;
22171|  8.54k|    rng->b = s;
22172|  8.54k|    t ^= t >> 2;
22173|  8.54k|    t ^= t << 1;
22174|  8.54k|    t ^= s ^ (s << 4);
22175|  8.54k|    rng->a = t;
22176|  8.54k|    rng->counter += 362437;
22177|  8.54k|    return t + rng->counter;
22178|  8.54k|}
janet_not:
22382|  1.80k|JANET_CORE_FN(janet_not, "(not x)", "Returns the boolean inverse of x.") {
22383|  1.80k|    janet_fixarity(argc, 1);
22384|  1.80k|    return janet_wrap_boolean(!janet_truthy(argv[0]));
  ------------------
  |  |  834|  1.80k|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  ------------------
  |  |  |  |  822|  13.6k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.80k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.80k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (822:51): [True: 0, False: 0]
  |  |  |  |  |  Branch (822:51): [True: 0, False: 0]
  |  |  |  |  |  Branch (822:51): [Folded, False: 1.80k]
  |  |  |  |  |  Branch (822:51): [True: 0, False: 0]
  |  |  |  |  |  Branch (822:51): [True: 0, False: 0]
  |  |  |  |  |  Branch (822:51): [Folded, False: 1.65k]
  |  |  |  |  |  Branch (822:51): [True: 0, False: 1.65k]
  |  |  |  |  |  Branch (822:51): [True: 1.65k, False: 0]
  |  |  |  |  |  Branch (822:51): [True: 1.65k, False: 151]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
22385|  1.80k|}
janet_lib_math:
22445|    267|void janet_lib_math(JanetTable *env) {
22446|    267|    JanetRegExt math_cfuns[] = {
22447|    267|        JANET_CORE_REG("not", janet_not),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22448|    267|        JANET_CORE_REG("math/random", janet_rand),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22449|    267|        JANET_CORE_REG("math/seedrandom", janet_srand),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22450|    267|        JANET_CORE_REG("math/cos", janet_cos),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22451|    267|        JANET_CORE_REG("math/sin", janet_sin),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22452|    267|        JANET_CORE_REG("math/tan", janet_tan),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22453|    267|        JANET_CORE_REG("math/acos", janet_acos),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22454|    267|        JANET_CORE_REG("math/asin", janet_asin),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22455|    267|        JANET_CORE_REG("math/atan", janet_atan),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22456|    267|        JANET_CORE_REG("math/exp", janet_exp),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22457|    267|        JANET_CORE_REG("math/log", janet_log),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22458|    267|        JANET_CORE_REG("math/log10", janet_log10),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22459|    267|        JANET_CORE_REG("math/log2", janet_log2),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22460|    267|        JANET_CORE_REG("math/sqrt", janet_sqrt),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22461|    267|#ifndef JANET_PLAN9
22462|    267|        JANET_CORE_REG("math/cbrt", janet_cbrt),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22463|    267|        JANET_CORE_REG("math/gamma", janet_tgamma),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22464|    267|        JANET_CORE_REG("math/log-gamma", janet_lgamma),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22465|    267|        JANET_CORE_REG("math/erfc", janet_erfc),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22466|    267|        JANET_CORE_REG("math/erf", janet_erf),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22467|    267|        JANET_CORE_REG("math/expm1", janet_expm1),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22468|    267|        JANET_CORE_REG("math/atanh", janet_atanh),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22469|    267|        JANET_CORE_REG("math/asinh", janet_asinh),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22470|    267|        JANET_CORE_REG("math/next", janet_nextafter),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22471|    267|#endif
22472|    267|        JANET_CORE_REG("math/floor", janet_floor),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22473|    267|        JANET_CORE_REG("math/ceil", janet_ceil),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22474|    267|        JANET_CORE_REG("math/pow", janet_pow),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22475|    267|        JANET_CORE_REG("math/abs", janet_fabs),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22476|    267|        JANET_CORE_REG("math/sinh", janet_sinh),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22477|    267|        JANET_CORE_REG("math/cosh", janet_cosh),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22478|    267|        JANET_CORE_REG("math/tanh", janet_tanh),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22479|    267|        JANET_CORE_REG("math/acosh", janet_acosh),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22480|    267|        JANET_CORE_REG("math/atan2", janet_atan2),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22481|    267|        JANET_CORE_REG("math/rng", cfun_rng_make),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22482|    267|        JANET_CORE_REG("math/rng-uniform", cfun_rng_uniform),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22483|    267|        JANET_CORE_REG("math/rng-int", cfun_rng_int),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22484|    267|        JANET_CORE_REG("math/rng-buffer", cfun_rng_buffer),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22485|    267|        JANET_CORE_REG("math/hypot", janet_hypot),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22486|    267|        JANET_CORE_REG("math/exp2", janet_exp2),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22487|    267|        JANET_CORE_REG("math/log1p", janet_log1p),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22488|    267|        JANET_CORE_REG("math/trunc", janet_trunc),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22489|    267|        JANET_CORE_REG("math/round", janet_round),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22490|    267|        JANET_CORE_REG("math/gcd", janet_cfun_gcd),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22491|    267|        JANET_CORE_REG("math/lcm", janet_cfun_lcm),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22492|    267|        JANET_CORE_REG("math/frexp", janet_cfun_frexp),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22493|    267|        JANET_CORE_REG("math/ldexp", janet_cfun_ldexp),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
22494|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
22495|    267|    };
22496|    267|    janet_core_cfuns_ext(env, NULL, math_cfuns);
22497|    267|    janet_register_abstract_type(&janet_rng_type);
22498|       |#ifdef JANET_BOOTSTRAP
22499|       |    JANET_CORE_DEF(env, "math/pi", janet_wrap_number(3.1415926535897931),
22500|       |                   "The value pi.");
22501|       |    JANET_CORE_DEF(env, "math/e", janet_wrap_number(2.7182818284590451),
22502|       |                   "The base of the natural log.");
22503|       |    JANET_CORE_DEF(env, "math/inf", janet_wrap_number(INFINITY),
22504|       |                   "The number representing positive infinity");
22505|       |    JANET_CORE_DEF(env, "math/-inf", janet_wrap_number(-INFINITY),
22506|       |                   "The number representing negative infinity");
22507|       |    JANET_CORE_DEF(env, "math/int32-min", janet_wrap_number(INT32_MIN),
22508|       |                   "The minimum contiguous integer representable by a 32 bit signed integer");
22509|       |    JANET_CORE_DEF(env, "math/int32-max", janet_wrap_number(INT32_MAX),
22510|       |                   "The maximum contiguous integer representable by a 32 bit signed integer");
22511|       |    JANET_CORE_DEF(env, "math/int-min", janet_wrap_number(JANET_INTMIN_DOUBLE),
22512|       |                   "The minimum contiguous integer representable by a double (-(2^53))");
22513|       |    JANET_CORE_DEF(env, "math/int-max", janet_wrap_number(JANET_INTMAX_DOUBLE),
22514|       |                   "The maximum contiguous integer representable by a double (2^53)");
22515|       |#ifdef NAN
22516|       |    JANET_CORE_DEF(env, "math/nan", janet_wrap_number(NAN), "Not a number (IEEE-754 NaN)");
22517|       |#else
22518|       |    JANET_CORE_DEF(env, "math/nan", janet_wrap_number(0.0 / 0.0), "Not a number (IEEE-754 NaN)");
22519|       |#endif
22520|       |#endif
22521|    267|}
janet_lib_net:
23792|    267|void janet_lib_net(JanetTable *env) {
23793|    267|    JanetRegExt net_cfuns[] = {
23794|    267|        JANET_CORE_REG("net/address", cfun_net_sockaddr),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
23795|    267|        JANET_CORE_REG("net/listen", cfun_net_listen),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
23796|    267|        JANET_CORE_REG("net/socket", cfun_net_socket),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
23797|    267|        JANET_CORE_REG("net/accept", cfun_stream_accept),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
23798|    267|        JANET_CORE_REG("net/accept-loop", cfun_stream_accept_loop),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
23799|    267|        JANET_CORE_REG("net/read", cfun_stream_read),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
23800|    267|        JANET_CORE_REG("net/chunk", cfun_stream_chunk),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
23801|    267|        JANET_CORE_REG("net/write", cfun_stream_write),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
23802|    267|        JANET_CORE_REG("net/send-to", cfun_stream_send_to),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
23803|    267|        JANET_CORE_REG("net/recv-from", cfun_stream_recv_from),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
23804|    267|        JANET_CORE_REG("net/flush", cfun_stream_flush),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
23805|    267|        JANET_CORE_REG("net/connect", cfun_net_connect),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
23806|    267|        JANET_CORE_REG("net/shutdown", cfun_net_shutdown),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
23807|    267|        JANET_CORE_REG("net/peername", cfun_net_getpeername),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
23808|    267|        JANET_CORE_REG("net/localname", cfun_net_getsockname),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
23809|    267|        JANET_CORE_REG("net/address-unpack", cfun_net_address_unpack),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
23810|    267|        JANET_CORE_REG("net/setsockopt", cfun_net_setsockopt),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
23811|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
23812|    267|    };
23813|       |    janet_core_cfuns_ext(env, NULL, net_cfuns);
23814|    267|}
janet_net_init:
23816|    267|void janet_net_init(void) {
23817|       |#ifdef JANET_WINDOWS
23818|       |    WSADATA wsaData;
23819|       |    janet_assert(!WSAStartup(MAKEWORD(2, 2), &wsaData), "could not start winsock");
23820|       |    janet_vm.connect_ex_loaded = 0;
23821|       |    janet_vm.connect_ex = NULL;
23822|       |#endif
23823|    267|}
janet_net_deinit:
23825|    267|void janet_net_deinit(void) {
23826|       |#ifdef JANET_WINDOWS
23827|       |    WSACleanup();
23828|       |#endif
23829|    267|}
janet_lib_os:
26841|    267|void janet_lib_os(JanetTable *env) {
26842|       |#if !defined(JANET_REDUCED_OS) && defined(JANET_WINDOWS) && defined(JANET_THREADS)
26843|       |    /* During start up, the top-most abstract machine (thread)
26844|       |     * in the thread tree sets up the critical section. */
26845|       |    static volatile long env_lock_initializing = 0;
26846|       |    static volatile long env_lock_initialized = 0;
26847|       |    if (!InterlockedExchange(&env_lock_initializing, 1)) {
26848|       |        InitializeCriticalSection(&env_lock);
26849|       |        InterlockedOr(&env_lock_initialized, 1);
26850|       |    } else {
26851|       |        while (!InterlockedOr(&env_lock_initialized, 0)) {
26852|       |            Sleep(0);
26853|       |        }
26854|       |    }
26855|       |
26856|       |#endif
26857|    267|#ifndef JANET_NO_PROCESSES
26858|    267|#endif
26859|    267|    JanetRegExt os_cfuns[] = {
26860|    267|        JANET_CORE_REG("os/exit", os_exit),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26861|    267|        JANET_CORE_REG("os/which", os_which),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26862|    267|        JANET_CORE_REG("os/arch", os_arch),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26863|    267|        JANET_CORE_REG("os/compiler", os_compiler),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26864|    267|#ifndef JANET_REDUCED_OS
26865|       |
26866|       |        /* misc (un-sandboxed) */
26867|    267|        JANET_CORE_REG("os/cpu-count", os_cpu_count),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26868|    267|        JANET_CORE_REG("os/cwd", os_cwd),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26869|    267|        JANET_CORE_REG("os/cryptorand", os_cryptorand),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26870|    267|        JANET_CORE_REG("os/perm-string", os_permission_string),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26871|    267|        JANET_CORE_REG("os/perm-int", os_permission_int),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26872|    267|        JANET_CORE_REG("os/mktime", os_mktime),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26873|    267|        JANET_CORE_REG("os/time", os_time), /* not high resolution */
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26874|    267|        JANET_CORE_REG("os/date", os_date), /* not high resolution */
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26875|    267|        JANET_CORE_REG("os/strftime", os_strftime),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26876|    267|        JANET_CORE_REG("os/sleep", os_sleep),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26877|    267|        JANET_CORE_REG("os/isatty", os_isatty),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26878|    267|#ifndef JANET_NO_LOCALES
26879|    267|        JANET_CORE_REG("os/setlocale", os_setlocale),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26880|    267|#endif
26881|       |
26882|       |        /* env functions */
26883|    267|#ifndef JANET_PLAN9
26884|    267|        JANET_CORE_REG("os/environ", os_environ),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26885|    267|#endif
26886|    267|        JANET_CORE_REG("os/getenv", os_getenv),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26887|    267|        JANET_CORE_REG("os/setenv", os_setenv),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26888|       |
26889|       |        /* fs read */
26890|    267|        JANET_CORE_REG("os/dir", os_dir),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26891|    267|        JANET_CORE_REG("os/stat", os_stat),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26892|    267|        JANET_CORE_REG("os/lstat", os_lstat),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26893|    267|        JANET_CORE_REG("os/realpath", os_realpath),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26894|    267|        JANET_CORE_REG("os/cd", os_cd),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26895|    267|#ifndef JANET_NO_UMASK
26896|    267|        JANET_CORE_REG("os/umask", os_umask),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26897|    267|#endif
26898|    267|#ifndef JANET_NO_SYMLINKS
26899|    267|        JANET_CORE_REG("os/readlink", os_readlink),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26900|    267|#endif
26901|       |
26902|       |        /* fs write */
26903|    267|        JANET_CORE_REG("os/mkdir", os_mkdir),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26904|    267|        JANET_CORE_REG("os/rmdir", os_rmdir),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26905|    267|        JANET_CORE_REG("os/rm", os_remove),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26906|    267|        JANET_CORE_REG("os/link", os_link),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26907|    267|        JANET_CORE_REG("os/rename", os_rename),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26908|    267|        JANET_CORE_REG("os/chmod", os_chmod),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26909|    267|        JANET_CORE_REG("os/touch", os_touch),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26910|    267|#ifndef JANET_NO_SYMLINKS
26911|    267|        JANET_CORE_REG("os/symlink", os_symlink),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26912|    267|#endif
26913|       |
26914|       |        /* processes */
26915|    267|#ifndef JANET_NO_PROCESSES
26916|    267|        JANET_CORE_REG("os/execute", os_execute),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26917|    267|        JANET_CORE_REG("os/spawn", os_spawn),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26918|    267|        JANET_CORE_REG("os/shell", os_shell),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26919|    267|        JANET_CORE_REG("os/posix-fork", os_posix_fork),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26920|    267|        JANET_CORE_REG("os/posix-exec", os_posix_exec),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26921|    267|        JANET_CORE_REG("os/posix-chroot", os_posix_chroot),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26922|       |        /* no need to sandbox process management if you can't create processes
26923|       |         * (allows for limited functionality if use exposes C-functions to create specific processes) */
26924|    267|        JANET_CORE_REG("os/proc-wait", os_proc_wait),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26925|    267|        JANET_CORE_REG("os/proc-kill", os_proc_kill),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26926|    267|        JANET_CORE_REG("os/proc-close", os_proc_close),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26927|    267|        JANET_CORE_REG("os/getpid", os_proc_getpid),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26928|    267|#ifdef JANET_EV
26929|    267|        JANET_CORE_REG("os/sigaction", os_sigaction),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26930|    267|#endif
26931|    267|#endif
26932|       |
26933|       |        /* high resolution timers */
26934|    267|        JANET_CORE_REG("os/clock", os_clock),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26935|       |
26936|    267|#ifdef JANET_EV
26937|    267|        JANET_CORE_REG("os/open", os_open), /* fs read and write */
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26938|    267|        JANET_CORE_REG("os/pipe", os_pipe),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
26939|    267|#endif
26940|    267|#endif
26941|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
26942|    267|    };
26943|       |    janet_core_cfuns_ext(env, NULL, os_cfuns);
26944|    267|}
janet_is_symbol_char:
27004|  16.6M|int janet_is_symbol_char(uint8_t c) {
27005|  16.6M|    return symchars[c >> 5] & ((uint32_t)1 << (c & 0x1F));
27006|  16.6M|}
janet_valid_utf8:
27011|   798k|int janet_valid_utf8(const uint8_t *str, int32_t len) {
27012|   798k|    int32_t i = 0;
27013|   798k|    int32_t j;
27014|  8.02M|    while (i < len) {
  ------------------
  |  Branch (27014:12): [True: 7.22M, False: 798k]
  ------------------
27015|  7.22M|        int32_t nexti;
27016|  7.22M|        uint8_t c = str[i];
27017|       |
27018|       |        /* Check the number of bytes in code point */
27019|  7.22M|        if (c < 0x80) nexti = i + 1;
  ------------------
  |  Branch (27019:13): [True: 7.22M, False: 2.89k]
  ------------------
27020|  2.89k|        else if ((c >> 5) == 0x06) nexti = i + 2;
  ------------------
  |  Branch (27020:18): [True: 1.45k, False: 1.43k]
  ------------------
27021|  1.43k|        else if ((c >> 4) == 0x0E) nexti = i + 3;
  ------------------
  |  Branch (27021:18): [True: 328, False: 1.10k]
  ------------------
27022|  1.10k|        else if ((c >> 3) == 0x1E) nexti = i + 4;
  ------------------
  |  Branch (27022:18): [True: 1.05k, False: 50]
  ------------------
27023|       |        /* Don't allow 5 or 6 byte code points */
27024|     50|        else return 0;
27025|       |
27026|       |        /* No overflow */
27027|  7.22M|        if (nexti > len) return 0;
  ------------------
  |  Branch (27027:13): [True: 16, False: 7.22M]
  ------------------
27028|       |
27029|       |        /* Ensure trailing bytes are well formed (10XX XXXX) */
27030|  7.23M|        for (j = i + 1; j < nexti; j++) {
  ------------------
  |  Branch (27030:25): [True: 5.26k, False: 7.22M]
  ------------------
27031|  5.26k|            if ((str[j] >> 6) != 2) return 0;
  ------------------
  |  Branch (27031:17): [True: 5, False: 5.26k]
  ------------------
27032|  5.26k|        }
27033|       |
27034|       |        /* Check for overlong encoding */
27035|  7.22M|        if ((nexti == i + 2) && str[i] < 0xC2) return 0;
  ------------------
  |  Branch (27035:13): [True: 1.44k, False: 7.22M]
  |  Branch (27035:33): [True: 0, False: 1.44k]
  ------------------
27036|  7.22M|        if ((str[i] == 0xE0) && str[i + 1] < 0xA0) return 0;
  ------------------
  |  Branch (27036:13): [True: 214, False: 7.22M]
  |  Branch (27036:33): [True: 0, False: 214]
  ------------------
27037|  7.22M|        if ((str[i] == 0xF0) && str[i + 1] < 0x90) return 0;
  ------------------
  |  Branch (27037:13): [True: 29, False: 7.22M]
  |  Branch (27037:33): [True: 0, False: 29]
  ------------------
27038|       |
27039|  7.22M|        i = nexti;
27040|  7.22M|    }
27041|   798k|    return 1;
27042|   798k|}
janet_parser_consume:
27646|  23.5M|void janet_parser_consume(JanetParser *parser, uint8_t c) {
27647|  23.5M|    int consumed = 0;
27648|  23.5M|    janet_parser_checkdead(parser);
27649|  23.5M|    if (c == '\r') {
  ------------------
  |  Branch (27649:9): [True: 136k, False: 23.4M]
  ------------------
27650|   136k|        parser->line++;
27651|   136k|        parser->column = 0;
27652|  23.4M|    } else if (c == '\n') {
  ------------------
  |  Branch (27652:16): [True: 142k, False: 23.2M]
  ------------------
27653|   142k|        parser->column = 0;
27654|   142k|        if (parser->lookback != '\r')
  ------------------
  |  Branch (27654:13): [True: 141k, False: 1.06k]
  ------------------
27655|   141k|            parser->line++;
27656|  23.2M|    } else {
27657|  23.2M|        parser->column++;
27658|  23.2M|    }
27659|  51.7M|    while (!consumed && !parser->error) {
  ------------------
  |  Branch (27659:12): [True: 28.1M, False: 23.5M]
  |  Branch (27659:25): [True: 28.1M, False: 80]
  ------------------
27660|  28.1M|        JanetParseState *state = parser->states + parser->statecount - 1;
27661|  28.1M|        consumed = state->consumer(parser, state, c);
27662|  28.1M|    }
27663|  23.5M|    parser->lookback = c;
27664|  23.5M|}
janet_parser_status:
27679|  23.5M|enum JanetParserStatus janet_parser_status(JanetParser *parser) {
27680|  23.5M|    if (parser->error) return JANET_PARSE_ERROR;
  ------------------
  |  Branch (27680:9): [True: 178, False: 23.5M]
  ------------------
27681|  23.5M|    if (parser->flag) return JANET_PARSE_DEAD;
  ------------------
  |  Branch (27681:9): [True: 0, False: 23.5M]
  ------------------
27682|  23.5M|    if (parser->statecount > 1) return JANET_PARSE_PENDING;
  ------------------
  |  Branch (27682:9): [True: 23.5M, False: 32.3k]
  ------------------
27683|  32.3k|    return JANET_PARSE_ROOT;
27684|  23.5M|}
janet_parser_produce:
27705|  30.0k|Janet janet_parser_produce(JanetParser *parser) {
27706|  30.0k|    Janet ret;
27707|  30.0k|    size_t i;
27708|  30.0k|    if (parser->pending == 0) return janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (27708:9): [True: 0, False: 30.0k]
  ------------------
27709|  30.0k|    ret = janet_unwrap_tuple(parser->args[0])[0];
  ------------------
  |  |  858|  30.0k|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
27710|  30.0k|    for (i = 1; i < parser->argcount; i++) {
  ------------------
  |  Branch (27710:17): [True: 0, False: 30.0k]
  ------------------
27711|      0|        parser->args[i - 1] = parser->args[i];
27712|      0|    }
27713|  30.0k|    parser->pending--;
27714|  30.0k|    parser->argcount--;
27715|  30.0k|    parser->states[0].argn--;
27716|  30.0k|    return ret;
27717|  30.0k|}
janet_parser_init:
27733|    267|void janet_parser_init(JanetParser *parser) {
27734|    267|    parser->args = NULL;
27735|    267|    parser->states = NULL;
27736|    267|    parser->buf = NULL;
27737|    267|    parser->argcount = 0;
27738|    267|    parser->argcap = 0;
27739|    267|    parser->bufcount = 0;
27740|    267|    parser->bufcap = 0;
27741|    267|    parser->statecount = 0;
27742|    267|    parser->statecap = 0;
27743|    267|    parser->error = NULL;
27744|    267|    parser->lookback = -1;
27745|    267|    parser->line = 1;
27746|    267|    parser->column = 0;
27747|    267|    parser->pending = 0;
27748|    267|    parser->flag = 0;
27749|       |
27750|    267|    pushstate(parser, root, PFLAG_CONTAINER);
  ------------------
  |  |27083|    267|#define PFLAG_CONTAINER 0x100
  ------------------
27751|    267|}
janet_parser_deinit:
27753|    267|void janet_parser_deinit(JanetParser *parser) {
27754|    267|    janet_free(parser->args);
  ------------------
  |  | 2415|    267|#define janet_free(X) free((X))
  ------------------
27755|    267|    janet_free(parser->buf);
  ------------------
  |  | 2415|    267|#define janet_free(X) free((X))
  ------------------
27756|    267|    janet_free(parser->states);
  ------------------
  |  | 2415|    267|#define janet_free(X) free((X))
  ------------------
27757|    267|}
janet_parser_has_more:
27804|  23.5M|int janet_parser_has_more(JanetParser *parser) {
27805|  23.5M|    return !!parser->pending;
27806|  23.5M|}
janet_lib_parse:
28258|    267|void janet_lib_parse(JanetTable *env) {
28259|    267|    JanetRegExt parse_cfuns[] = {
28260|    267|        JANET_CORE_REG("parser/new", cfun_parse_parser),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
28261|    267|        JANET_CORE_REG("parser/clone", cfun_parse_clone),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
28262|    267|        JANET_CORE_REG("parser/has-more", cfun_parse_has_more),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
28263|    267|        JANET_CORE_REG("parser/produce", cfun_parse_produce),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
28264|    267|        JANET_CORE_REG("parser/consume", cfun_parse_consume),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
28265|    267|        JANET_CORE_REG("parser/byte", cfun_parse_byte),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
28266|    267|        JANET_CORE_REG("parser/error", cfun_parse_error),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
28267|    267|        JANET_CORE_REG("parser/status", cfun_parse_status),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
28268|    267|        JANET_CORE_REG("parser/flush", cfun_parse_flush),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
28269|    267|        JANET_CORE_REG("parser/state", cfun_parse_state),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
28270|    267|        JANET_CORE_REG("parser/where", cfun_parse_where),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
28271|    267|        JANET_CORE_REG("parser/eof", cfun_parse_eof),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
28272|    267|        JANET_CORE_REG("parser/insert", cfun_parse_insert),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
28273|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
28274|    267|    };
28275|       |    janet_core_cfuns_ext(env, NULL, parse_cfuns);
28276|    267|}
janet_lib_peg:
30376|    267|void janet_lib_peg(JanetTable *env) {
30377|    267|    JanetRegExt cfuns[] = {
30378|    267|        JANET_CORE_REG("peg/compile", cfun_peg_compile),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
30379|    267|        JANET_CORE_REG("peg/match", cfun_peg_match),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
30380|    267|        JANET_CORE_REG("peg/find", cfun_peg_find),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
30381|    267|        JANET_CORE_REG("peg/find-all", cfun_peg_find_all),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
30382|    267|        JANET_CORE_REG("peg/replace", cfun_peg_replace),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
30383|    267|        JANET_CORE_REG("peg/replace-all", cfun_peg_replace_all),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
30384|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
30385|    267|    };
30386|       |    janet_core_cfuns_ext(env, NULL, cfuns);
30387|    267|    janet_register_abstract_type(&janet_peg_type);
30388|    267|}
janet_to_string_b:
30618|   929k|void janet_to_string_b(JanetBuffer *buffer, Janet x) {
30619|   929k|    switch (janet_type(x)) {
  ------------------
  |  |  795|   929k|    (isnan((x).number) \
  |  |  796|   929k|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|   929k|        : JANET_NUMBER)
  ------------------
  |  Branch (30619:13): [True: 910k, False: 18.7k]
  ------------------
30620|      0|        case JANET_NIL:
  ------------------
  |  Branch (30620:9): [True: 0, False: 929k]
  ------------------
30621|      0|            janet_buffer_push_cstring(buffer, "");
30622|      0|            break;
30623|     71|        case JANET_BOOLEAN:
  ------------------
  |  Branch (30623:9): [True: 71, False: 929k]
  ------------------
30624|     71|            janet_buffer_push_cstring(buffer,
30625|     71|                                      janet_unwrap_boolean(x) ? "true" : "false");
  ------------------
  |  |  838|     71|#define janet_unwrap_boolean(x) ((x).u64 & 0x1)
  |  |  ------------------
  |  |  |  Branch (838:33): [True: 54, False: 17]
  |  |  ------------------
  ------------------
30626|     71|            break;
30627|  18.7k|        case JANET_NUMBER:
  ------------------
  |  Branch (30627:9): [True: 18.7k, False: 910k]
  ------------------
30628|  18.7k|            number_to_string_b(buffer, janet_unwrap_number(x));
  ------------------
  |  |  839|  18.7k|#define janet_unwrap_number(x) ((x).number)
  ------------------
30629|  18.7k|            break;
30630|  1.55k|        case JANET_STRING:
  ------------------
  |  Branch (30630:9): [True: 1.55k, False: 927k]
  ------------------
30631|   908k|        case JANET_SYMBOL:
  ------------------
  |  Branch (30631:9): [True: 907k, False: 22.0k]
  ------------------
30632|   909k|        case JANET_KEYWORD:
  ------------------
  |  Branch (30632:9): [True: 982, False: 928k]
  ------------------
30633|   909k|            janet_buffer_push_bytes(buffer,
30634|   909k|                                    janet_unwrap_string(x),
  ------------------
  |  |  863|   909k|#define janet_unwrap_string(x) ((JanetString)janet_nanbox_to_pointer(x))
  ------------------
30635|   909k|                                    janet_string_length(janet_unwrap_string(x)));
  ------------------
  |  | 1813|   909k|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|   909k|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
30636|   909k|            break;
30637|    107|        case JANET_BUFFER: {
  ------------------
  |  Branch (30637:9): [True: 107, False: 929k]
  ------------------
30638|    107|            JanetBuffer *to = janet_unwrap_buffer(x);
  ------------------
  |  |  862|    107|#define janet_unwrap_buffer(x) ((JanetBuffer *)janet_nanbox_to_pointer(x))
  ------------------
30639|       |            /* Prevent resizing buffer while appending */
30640|    107|            if (buffer == to) janet_buffer_extra(buffer, to->count);
  ------------------
  |  Branch (30640:17): [True: 0, False: 107]
  ------------------
30641|    107|            janet_buffer_push_bytes(buffer, to->data, to->count);
30642|    107|            break;
30643|   908k|        }
30644|      0|        case JANET_ABSTRACT: {
  ------------------
  |  Branch (30644:9): [True: 0, False: 929k]
  ------------------
30645|      0|            JanetAbstract p = janet_unwrap_abstract(x);
  ------------------
  |  |  866|      0|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
30646|      0|            const JanetAbstractType *t = janet_abstract_type(p);
  ------------------
  |  | 1899|      0|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|      0|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
30647|      0|            if (t->tostring != NULL) {
  ------------------
  |  Branch (30647:17): [True: 0, False: 0]
  ------------------
30648|      0|                t->tostring(p, buffer);
30649|      0|            } else {
30650|      0|                string_description_b(buffer, t->name, p);
30651|      0|            }
30652|      0|        }
30653|      0|        return;
30654|      0|        case JANET_CFUNCTION: {
  ------------------
  |  Branch (30654:9): [True: 0, False: 929k]
  ------------------
30655|      0|            JanetCFunRegistry *reg = janet_registry_get(janet_unwrap_cfunction(x));
  ------------------
  |  |  869|      0|#define janet_unwrap_cfunction(x) ((JanetCFunction)janet_nanbox_to_pointer(x))
  ------------------
30656|      0|            if (NULL != reg) {
  ------------------
  |  Branch (30656:17): [True: 0, False: 0]
  ------------------
30657|      0|                janet_buffer_push_cstring(buffer, "<cfunction ");
30658|      0|                if (NULL != reg->name_prefix) {
  ------------------
  |  Branch (30658:21): [True: 0, False: 0]
  ------------------
30659|      0|                    janet_buffer_push_cstring(buffer, reg->name_prefix);
30660|      0|                    janet_buffer_push_u8(buffer, '/');
30661|      0|                }
30662|      0|                janet_buffer_push_cstring(buffer, reg->name);
30663|      0|                janet_buffer_push_u8(buffer, '>');
30664|      0|                break;
30665|      0|            }
30666|      0|            goto fallthrough;
30667|      0|        }
30668|    407|        case JANET_FUNCTION: {
  ------------------
  |  Branch (30668:9): [True: 407, False: 928k]
  ------------------
30669|    407|            JanetFunction *fun = janet_unwrap_function(x);
  ------------------
  |  |  868|    407|#define janet_unwrap_function(x) ((JanetFunction *)janet_nanbox_to_pointer(x))
  ------------------
30670|    407|            JanetFuncDef *def = fun->def;
30671|    407|            if (def == NULL) {
  ------------------
  |  Branch (30671:17): [True: 0, False: 407]
  ------------------
30672|      0|                janet_buffer_push_cstring(buffer, "<incomplete function>");
30673|      0|                break;
30674|      0|            }
30675|    407|            if (def->name) {
  ------------------
  |  Branch (30675:17): [True: 407, False: 0]
  ------------------
30676|    407|                const uint8_t *n = def->name;
30677|    407|                janet_buffer_push_cstring(buffer, "<function ");
30678|    407|                janet_buffer_push_bytes(buffer, n, janet_string_length(n));
  ------------------
  |  | 1813|    407|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|    407|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
30679|    407|                janet_buffer_push_u8(buffer, '>');
30680|    407|                break;
30681|    407|            }
30682|      0|            goto fallthrough;
30683|    407|        }
30684|      0|    fallthrough:
30685|    209|        default:
  ------------------
  |  Branch (30685:9): [True: 209, False: 929k]
  ------------------
30686|    209|            string_description_b(buffer, janet_type_names[janet_type(x)], janet_unwrap_pointer(x));
  ------------------
  |  |  795|    209|    (isnan((x).number) \
  |  |  796|    209|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|    209|        : JANET_NUMBER)
  ------------------
                          string_description_b(buffer, janet_type_names[janet_type(x)], janet_unwrap_pointer(x));
  ------------------
  |  |  867|    209|#define janet_unwrap_pointer(x) (janet_nanbox_to_pointer(x))
  ------------------
  |  Branch (30686:59): [True: 209, False: 0]
  ------------------
30687|    209|            break;
30688|   929k|    }
30689|   929k|}
janet_description_b:
30704|  1.15M|void janet_description_b(JanetBuffer *buffer, Janet x) {
30705|  1.15M|    switch (janet_type(x)) {
  ------------------
  |  |  795|  1.15M|    (isnan((x).number) \
  |  |  796|  1.15M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  1.15M|        : JANET_NUMBER)
  ------------------
  |  Branch (30705:13): [True: 1.14M, False: 15.2k]
  ------------------
30706|   915k|        default:
  ------------------
  |  Branch (30706:9): [True: 915k, False: 241k]
  ------------------
30707|   915k|            break;
30708|   915k|        case JANET_NIL:
  ------------------
  |  Branch (30708:9): [True: 472, False: 1.15M]
  ------------------
30709|    472|            janet_buffer_push_cstring(buffer, "nil");
30710|    472|            return;
30711|    982|        case JANET_KEYWORD:
  ------------------
  |  Branch (30711:9): [True: 982, False: 1.15M]
  ------------------
30712|    982|            janet_buffer_push_u8(buffer, ':');
30713|    982|            break;
30714|   239k|        case JANET_STRING:
  ------------------
  |  Branch (30714:9): [True: 239k, False: 916k]
  ------------------
30715|   239k|            janet_escape_string_b(buffer, janet_unwrap_string(x));
  ------------------
  |  |  863|   239k|#define janet_unwrap_string(x) ((JanetString)janet_nanbox_to_pointer(x))
  ------------------
30716|   239k|            return;
30717|     94|        case JANET_BUFFER: {
  ------------------
  |  Branch (30717:9): [True: 94, False: 1.15M]
  ------------------
30718|     94|            JanetBuffer *b = janet_unwrap_buffer(x);
  ------------------
  |  |  862|     94|#define janet_unwrap_buffer(x) ((JanetBuffer *)janet_nanbox_to_pointer(x))
  ------------------
30719|     94|            janet_escape_buffer_b(buffer, b);
30720|     94|            return;
30721|      0|        }
30722|      6|        case JANET_ABSTRACT: {
  ------------------
  |  Branch (30722:9): [True: 6, False: 1.15M]
  ------------------
30723|      6|            JanetAbstract p = janet_unwrap_abstract(x);
  ------------------
  |  |  866|      6|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
30724|      6|            const JanetAbstractType *t = janet_abstract_type(p);
  ------------------
  |  | 1899|      6|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|      6|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
30725|      6|            if (t->tostring != NULL) {
  ------------------
  |  Branch (30725:17): [True: 6, False: 0]
  ------------------
30726|      6|                janet_buffer_push_cstring(buffer, "<");
30727|      6|                janet_buffer_push_cstring(buffer, t->name);
30728|      6|                janet_buffer_push_cstring(buffer, " ");
30729|      6|                t->tostring(p, buffer);
30730|      6|                janet_buffer_push_cstring(buffer, ">");
30731|      6|            } else {
30732|      0|                string_description_b(buffer, t->name, p);
30733|      0|            }
30734|      6|            return;
30735|      0|        }
30736|  1.15M|    }
30737|   916k|    janet_to_string_b(buffer, x);
30738|   916k|}
janet_formatbv:
31391|  94.7k|void janet_formatbv(JanetBuffer *b, const char *format, va_list args) {
31392|  94.7k|    const char *format_end = format + strlen(format);
31393|  94.7k|    const char *c = format;
31394|  94.7k|    int32_t startlen = b->count;
31395|  3.54M|    while (c < format_end) {
  ------------------
  |  Branch (31395:12): [True: 3.45M, False: 94.7k]
  ------------------
31396|  3.45M|        if (*c != '%') {
  ------------------
  |  Branch (31396:13): [True: 3.35M, False: 97.7k]
  ------------------
31397|  3.35M|            janet_buffer_push_u8(b, (uint8_t) *c++);
31398|  3.35M|        } else if (*++c == '%') {
  ------------------
  |  Branch (31398:20): [True: 0, False: 97.7k]
  ------------------
31399|      0|            janet_buffer_push_u8(b, (uint8_t) *c++);
31400|  97.7k|        } else {
31401|  97.7k|            char form[MAX_FORMAT], item[MAX_ITEM];
31402|  97.7k|            char width[3], precision[3];
31403|  97.7k|            int nb = 0; /* number of bytes in added item */
31404|  97.7k|            c = scanformat(c, form, width, precision);
31405|  97.7k|            switch (*c++) {
31406|      0|                case 'c': {
  ------------------
  |  Branch (31406:17): [True: 0, False: 97.7k]
  ------------------
31407|      0|                    int n = va_arg(args, int);
31408|      0|                    nb = snprintf(item, MAX_ITEM, form, n);
  ------------------
  |  |31314|      0|#define MAX_ITEM  256
  ------------------
31409|      0|                    break;
31410|      0|                }
31411|  1.32k|                case 'd':
  ------------------
  |  Branch (31411:17): [True: 1.32k, False: 96.3k]
  ------------------
31412|  1.32k|                case 'i': {
  ------------------
  |  Branch (31412:17): [True: 0, False: 97.7k]
  ------------------
31413|  1.32k|                    int64_t n = (int64_t) va_arg(args, int32_t);
31414|  1.32k|                    nb = snprintf(item, MAX_ITEM, form, n);
  ------------------
  |  |31314|  1.32k|#define MAX_ITEM  256
  ------------------
31415|  1.32k|                    break;
31416|  1.32k|                }
31417|      0|                case 'D':
  ------------------
  |  Branch (31417:17): [True: 0, False: 97.7k]
  ------------------
31418|      0|                case 'I': {
  ------------------
  |  Branch (31418:17): [True: 0, False: 97.7k]
  ------------------
31419|      0|                    int64_t n = va_arg(args, int64_t);
31420|      0|                    nb = snprintf(item, MAX_ITEM, form, n);
  ------------------
  |  |31314|      0|#define MAX_ITEM  256
  ------------------
31421|      0|                    break;
31422|      0|                }
31423|      0|                case 'x':
  ------------------
  |  Branch (31423:17): [True: 0, False: 97.7k]
  ------------------
31424|      0|                case 'X':
  ------------------
  |  Branch (31424:17): [True: 0, False: 97.7k]
  ------------------
31425|      0|                case 'o':
  ------------------
  |  Branch (31425:17): [True: 0, False: 97.7k]
  ------------------
31426|      0|                case 'u': {
  ------------------
  |  Branch (31426:17): [True: 0, False: 97.7k]
  ------------------
31427|      0|                    uint64_t n = va_arg(args, uint64_t);
31428|      0|                    nb = snprintf(item, MAX_ITEM, form, n);
  ------------------
  |  |31314|      0|#define MAX_ITEM  256
  ------------------
31429|      0|                    break;
31430|      0|                }
31431|      0|                case 'a':
  ------------------
  |  Branch (31431:17): [True: 0, False: 97.7k]
  ------------------
31432|      0|                case 'A':
  ------------------
  |  Branch (31432:17): [True: 0, False: 97.7k]
  ------------------
31433|      0|                case 'e':
  ------------------
  |  Branch (31433:17): [True: 0, False: 97.7k]
  ------------------
31434|      0|                case 'E':
  ------------------
  |  Branch (31434:17): [True: 0, False: 97.7k]
  ------------------
31435|      0|                case 'f':
  ------------------
  |  Branch (31435:17): [True: 0, False: 97.7k]
  ------------------
31436|      0|                case 'g':
  ------------------
  |  Branch (31436:17): [True: 0, False: 97.7k]
  ------------------
31437|      0|                case 'G': {
  ------------------
  |  Branch (31437:17): [True: 0, False: 97.7k]
  ------------------
31438|      0|                    double d = va_arg(args, double);
31439|      0|                    nb = snprintf(item, MAX_ITEM, form, d);
  ------------------
  |  |31314|      0|#define MAX_ITEM  256
  ------------------
31440|      0|                    break;
31441|      0|                }
31442|    654|                case 's':
  ------------------
  |  Branch (31442:17): [True: 654, False: 97.0k]
  ------------------
31443|    654|                case 'S': {
  ------------------
  |  Branch (31443:17): [True: 0, False: 97.7k]
  ------------------
31444|    654|                    const char *str = va_arg(args, const char *);
31445|    654|                    int32_t len = (c[-1] == 's')
  ------------------
  |  Branch (31445:35): [True: 654, False: 0]
  ------------------
31446|    654|                                  ? (int32_t) strlen(str)
31447|    654|                                  : janet_string_length((JanetString) str);
  ------------------
  |  | 1813|      0|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|      0|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
31448|    654|                    if (form[2] == '\0')
  ------------------
  |  Branch (31448:25): [True: 654, False: 0]
  ------------------
31449|    654|                        janet_buffer_push_bytes(b, (const uint8_t *) str, len);
31450|      0|                    else {
31451|      0|                        if (len != (int32_t) strlen((const char *) str))
  ------------------
  |  Branch (31451:29): [True: 0, False: 0]
  ------------------
31452|      0|                            janet_panic("string contains zeros");
31453|      0|                        if (!strchr(form, '.') && len >= 100) {
  ------------------
  |  Branch (31453:29): [True: 0, False: 0]
  |  Branch (31453:51): [True: 0, False: 0]
  ------------------
31454|      0|                            janet_panic("no precision and string is too long to be formatted");
31455|      0|                        } else {
31456|      0|                            nb = snprintf(item, MAX_ITEM, form, str);
  ------------------
  |  |31314|      0|#define MAX_ITEM  256
  ------------------
31457|      0|                        }
31458|      0|                    }
31459|    654|                    break;
31460|    654|                }
31461|  1.22k|                case 'V':
  ------------------
  |  Branch (31461:17): [True: 1.22k, False: 96.4k]
  ------------------
31462|  1.22k|                    janet_to_string_b(b, va_arg(args, Janet));
31463|  1.22k|                    break;
31464|  85.6k|                case 'v':
  ------------------
  |  Branch (31464:17): [True: 85.6k, False: 12.0k]
  ------------------
31465|  85.6k|                    janet_description_b(b, va_arg(args, Janet));
31466|  85.6k|                    break;
31467|      0|                case 't':
  ------------------
  |  Branch (31467:17): [True: 0, False: 97.7k]
  ------------------
31468|      0|                    janet_buffer_push_cstring(b, typestr(va_arg(args, Janet)));
31469|      0|                    break;
31470|    579|                case 'T': {
  ------------------
  |  Branch (31470:17): [True: 579, False: 97.1k]
  ------------------
31471|    579|                    int types = va_arg(args, int);
31472|    579|                    pushtypes(b, types);
31473|    579|                    break;
31474|    654|                }
31475|      0|                case 'M':
  ------------------
  |  Branch (31475:17): [True: 0, False: 97.7k]
  ------------------
31476|      0|                case 'm':
  ------------------
  |  Branch (31476:17): [True: 0, False: 97.7k]
  ------------------
31477|      0|                case 'N':
  ------------------
  |  Branch (31477:17): [True: 0, False: 97.7k]
  ------------------
31478|      0|                case 'n':
  ------------------
  |  Branch (31478:17): [True: 0, False: 97.7k]
  ------------------
31479|      0|                case 'Q':
  ------------------
  |  Branch (31479:17): [True: 0, False: 97.7k]
  ------------------
31480|  8.27k|                case 'q':
  ------------------
  |  Branch (31480:17): [True: 8.27k, False: 89.4k]
  ------------------
31481|  8.27k|                case 'P':
  ------------------
  |  Branch (31481:17): [True: 0, False: 97.7k]
  ------------------
31482|  8.27k|                case 'p': { /* janet pretty , precision = depth */
  ------------------
  |  Branch (31482:17): [True: 0, False: 97.7k]
  ------------------
31483|  8.27k|                    int depth = atoi(precision);
31484|  8.27k|                    if (depth < 1) depth = JANET_RECURSION_GUARD;
  ------------------
  |  |  296|  8.27k|#define JANET_RECURSION_GUARD 1024
  ------------------
  |  Branch (31484:25): [True: 8.27k, False: 0]
  ------------------
31485|  8.27k|                    char d = c[-1];
31486|  8.27k|                    int has_color = (d == 'P') || (d == 'Q') || (d == 'M') || (d == 'N');
  ------------------
  |  Branch (31486:37): [True: 0, False: 8.27k]
  |  Branch (31486:51): [True: 0, False: 8.27k]
  |  Branch (31486:65): [True: 0, False: 8.27k]
  |  Branch (31486:79): [True: 0, False: 8.27k]
  ------------------
31487|  8.27k|                    int has_oneline = (d == 'Q') || (d == 'q') || (d == 'N') || (d == 'n');
  ------------------
  |  Branch (31487:39): [True: 0, False: 8.27k]
  |  Branch (31487:53): [True: 8.27k, False: 0]
  |  Branch (31487:67): [True: 0, False: 0]
  |  Branch (31487:81): [True: 0, False: 0]
  ------------------
31488|  8.27k|                    int has_notrunc = (d == 'M') || (d == 'm') || (d == 'N') || (d == 'n');
  ------------------
  |  Branch (31488:39): [True: 0, False: 8.27k]
  |  Branch (31488:53): [True: 0, False: 8.27k]
  |  Branch (31488:67): [True: 0, False: 8.27k]
  |  Branch (31488:81): [True: 0, False: 8.27k]
  ------------------
31489|  8.27k|                    int columns = atoi(width);
31490|  8.27k|                    if (columns == 0) {
  ------------------
  |  Branch (31490:25): [True: 8.27k, False: 0]
  ------------------
31491|  8.27k|                        columns = JANET_COLUMNS;
  ------------------
  |  |31227|  8.27k|#define JANET_COLUMNS 80
  ------------------
31492|  8.27k|                    } else if (columns < 0) {
  ------------------
  |  Branch (31492:32): [True: 0, False: 0]
  ------------------
31493|      0|                        has_oneline = 1;
31494|      0|                    }
31495|  8.27k|                    int flags = 0;
31496|  8.27k|                    flags |= has_color ? JANET_PRETTY_COLOR : 0;
  ------------------
  |  | 1967|      0|#define JANET_PRETTY_COLOR 1
  ------------------
  |  Branch (31496:30): [True: 0, False: 8.27k]
  ------------------
31497|  8.27k|                    flags |= has_oneline ? JANET_PRETTY_ONELINE : 0;
  ------------------
  |  | 1968|  8.27k|#define JANET_PRETTY_ONELINE 2
  ------------------
  |  Branch (31497:30): [True: 8.27k, False: 0]
  ------------------
31498|  8.27k|                    flags |= has_notrunc ? JANET_PRETTY_NOTRUNC : 0;
  ------------------
  |  | 1969|      0|#define JANET_PRETTY_NOTRUNC 4
  ------------------
  |  Branch (31498:30): [True: 0, False: 8.27k]
  ------------------
31499|  8.27k|                    janet_pretty_(b, depth, columns, flags,
31500|  8.27k|                                  va_arg(args, Janet), startlen, b->count);
31501|  8.27k|                    break;
31502|  8.27k|                }
31503|      0|                case 'j': {
  ------------------
  |  Branch (31503:17): [True: 0, False: 97.7k]
  ------------------
31504|      0|                    int depth = atoi(precision);
31505|      0|                    if (depth < 1) {
  ------------------
  |  Branch (31505:25): [True: 0, False: 0]
  ------------------
31506|      0|                        depth = JANET_RECURSION_GUARD;
  ------------------
  |  |  296|      0|#define JANET_RECURSION_GUARD 1024
  ------------------
31507|      0|                    }
31508|      0|                    janet_jdn_(b, depth, va_arg(args, Janet), startlen, b->count);
31509|      0|                    break;
31510|  8.27k|                }
31511|      0|                default: {
  ------------------
  |  Branch (31511:17): [True: 0, False: 97.7k]
  ------------------
31512|       |                    /* also treat cases 'nLlh' */
31513|      0|                    janet_panicf("invalid conversion '%s' to 'format'",
31514|      0|                                 form);
31515|  8.27k|                }
31516|  97.7k|            }
31517|  97.7k|            if (nb >= MAX_ITEM)
  ------------------
  |  |31314|  97.7k|#define MAX_ITEM  256
  ------------------
  |  Branch (31517:17): [True: 0, False: 97.7k]
  ------------------
31518|      0|                janet_panic("format buffer overflow");
31519|  97.7k|            if (nb > 0)
  ------------------
  |  Branch (31519:17): [True: 1.32k, False: 96.3k]
  ------------------
31520|  1.32k|                janet_buffer_push_bytes(b, (uint8_t *) item, nb);
31521|  97.7k|        }
31522|       |
31523|  3.45M|    }
31524|  94.7k|}
janet_formatc:
31528|  93.5k|const uint8_t *janet_formatc(const char *format, ...) {
31529|  93.5k|    va_list args;
31530|  93.5k|    const uint8_t *ret;
31531|  93.5k|    JanetBuffer buffer;
31532|  93.5k|    int32_t len = 0;
31533|       |
31534|       |    /* Calculate length, init buffer and args */
31535|  3.60M|    while (format[len]) len++;
  ------------------
  |  Branch (31535:12): [True: 3.51M, False: 93.5k]
  ------------------
31536|  93.5k|    janet_buffer_init(&buffer, len);
31537|  93.5k|    va_start(args, format);
31538|       |
31539|       |    /* Run format */
31540|  93.5k|    janet_formatbv(&buffer, format, args);
31541|       |
31542|       |    /* Iterate length */
31543|  93.5k|    va_end(args);
31544|       |
31545|  93.5k|    ret = janet_string(buffer.data, buffer.count);
31546|  93.5k|    janet_buffer_deinit(&buffer);
31547|  93.5k|    return ret;
31548|  93.5k|}
janet_formatb:
31550|      4|JanetBuffer *janet_formatb(JanetBuffer *buffer, const char *format, ...) {
31551|      4|    va_list args;
31552|      4|    va_start(args, format);
31553|      4|    janet_formatbv(buffer, format, args);
31554|       |    va_end(args);
31555|      4|    return buffer;
31556|      4|}
janet_buffer_format:
31565|  53.3k|    Janet *argv) {
31566|  53.3k|    size_t sfl = strlen(strfrmt);
31567|  53.3k|    const char *strfrmt_end = strfrmt + sfl;
31568|  53.3k|    int32_t arg = argstart;
31569|  53.3k|    int32_t startlen = b->count;
31570|   106k|    while (strfrmt < strfrmt_end) {
  ------------------
  |  Branch (31570:12): [True: 53.4k, False: 53.3k]
  ------------------
31571|  53.4k|        if (*strfrmt != '%')
  ------------------
  |  Branch (31571:13): [True: 24, False: 53.3k]
  ------------------
31572|     24|            janet_buffer_push_u8(b, (uint8_t) * strfrmt++);
31573|  53.3k|        else if (*++strfrmt == '%')
  ------------------
  |  Branch (31573:18): [True: 0, False: 53.3k]
  ------------------
31574|      0|            janet_buffer_push_u8(b, (uint8_t) * strfrmt++); /* %% */
31575|  53.3k|        else { /* format item */
31576|  53.3k|            char form[MAX_FORMAT], item[MAX_ITEM];
31577|  53.3k|            char width[3], precision[3];
31578|  53.3k|            int nb = 0; /* number of bytes in added item */
31579|       |#ifdef JANET_PLAN9
31580|       |            if (*strfrmt == 'r') {
31581|       |                rerrstr(item, MAX_ITEM);
31582|       |                nb = strlen(item);
31583|       |            } else
31584|       |#endif
31585|  53.3k|                if (++arg >= argc)
  ------------------
  |  Branch (31585:21): [True: 0, False: 53.3k]
  ------------------
31586|      0|                    janet_panic("not enough values for format");
31587|  53.3k|            strfrmt = scanformat(strfrmt, form, width, precision);
31588|  53.3k|            switch (*strfrmt++) {
31589|       |#ifdef JANET_PLAN9
31590|       |                case 'r':
31591|       |                    break;
31592|       |#endif
31593|      0|                case 'c': {
  ------------------
  |  Branch (31593:17): [True: 0, False: 53.3k]
  ------------------
31594|      0|                    nb = snprintf(item, MAX_ITEM, form, (int)
  ------------------
  |  |31314|      0|#define MAX_ITEM  256
  ------------------
31595|      0|                                  janet_getinteger(argv, arg));
31596|      0|                    break;
31597|      0|                }
31598|      0|                case 'D':
  ------------------
  |  Branch (31598:17): [True: 0, False: 53.3k]
  ------------------
31599|      0|                case 'I':
  ------------------
  |  Branch (31599:17): [True: 0, False: 53.3k]
  ------------------
31600|      0|                case 'd':
  ------------------
  |  Branch (31600:17): [True: 0, False: 53.3k]
  ------------------
31601|      0|                case 'i': {
  ------------------
  |  Branch (31601:17): [True: 0, False: 53.3k]
  ------------------
31602|      0|                    int64_t n = janet_getinteger64(argv, arg);
31603|      0|                    nb = snprintf(item, MAX_ITEM, form, n);
  ------------------
  |  |31314|      0|#define MAX_ITEM  256
  ------------------
31604|      0|                    break;
31605|      0|                }
31606|      0|                case 'x':
  ------------------
  |  Branch (31606:17): [True: 0, False: 53.3k]
  ------------------
31607|      0|                case 'X':
  ------------------
  |  Branch (31607:17): [True: 0, False: 53.3k]
  ------------------
31608|      0|                case 'o':
  ------------------
  |  Branch (31608:17): [True: 0, False: 53.3k]
  ------------------
31609|      0|                case 'u': {
  ------------------
  |  Branch (31609:17): [True: 0, False: 53.3k]
  ------------------
31610|      0|                    uint64_t n = janet_getuinteger64(argv, arg);
31611|      0|                    nb = snprintf(item, MAX_ITEM, form, n);
  ------------------
  |  |31314|      0|#define MAX_ITEM  256
  ------------------
31612|      0|                    break;
31613|      0|                }
31614|      0|                case 'a':
  ------------------
  |  Branch (31614:17): [True: 0, False: 53.3k]
  ------------------
31615|      0|                case 'A':
  ------------------
  |  Branch (31615:17): [True: 0, False: 53.3k]
  ------------------
31616|      0|                case 'e':
  ------------------
  |  Branch (31616:17): [True: 0, False: 53.3k]
  ------------------
31617|      0|                case 'E':
  ------------------
  |  Branch (31617:17): [True: 0, False: 53.3k]
  ------------------
31618|      0|                case 'f':
  ------------------
  |  Branch (31618:17): [True: 0, False: 53.3k]
  ------------------
31619|      0|                case 'g':
  ------------------
  |  Branch (31619:17): [True: 0, False: 53.3k]
  ------------------
31620|      0|                case 'G': {
  ------------------
  |  Branch (31620:17): [True: 0, False: 53.3k]
  ------------------
31621|      0|                    double d = janet_getnumber(argv, arg);
31622|      0|                    nb = snprintf(item, MAX_ITEM, form, d);
  ------------------
  |  |31314|      0|#define MAX_ITEM  256
  ------------------
31623|      0|                    break;
31624|      0|                }
31625|      1|                case 's': {
  ------------------
  |  Branch (31625:17): [True: 1, False: 53.3k]
  ------------------
31626|      1|                    const char *s = janet_getcbytes(argv, arg);
31627|      1|                    if (form[2] == '\0')
  ------------------
  |  Branch (31627:25): [True: 1, False: 0]
  ------------------
31628|      1|                        janet_buffer_push_cstring(b, s);
31629|      0|                    else {
31630|      0|                        nb = snprintf(item, MAX_ITEM, form, s);
  ------------------
  |  |31314|      0|#define MAX_ITEM  256
  ------------------
31631|      0|                    }
31632|      1|                    break;
31633|      0|                }
31634|      0|                case 'V': {
  ------------------
  |  Branch (31634:17): [True: 0, False: 53.3k]
  ------------------
31635|      0|                    janet_to_string_b(b, argv[arg]);
31636|      0|                    break;
31637|      0|                }
31638|      0|                case 'v': {
  ------------------
  |  Branch (31638:17): [True: 0, False: 53.3k]
  ------------------
31639|      0|                    janet_description_b(b, argv[arg]);
31640|      0|                    break;
31641|      0|                }
31642|      0|                case 't':
  ------------------
  |  Branch (31642:17): [True: 0, False: 53.3k]
  ------------------
31643|      0|                    janet_buffer_push_cstring(b, typestr(argv[arg]));
31644|      0|                    break;
31645|      0|                case 'M':
  ------------------
  |  Branch (31645:17): [True: 0, False: 53.3k]
  ------------------
31646|      0|                case 'm':
  ------------------
  |  Branch (31646:17): [True: 0, False: 53.3k]
  ------------------
31647|      0|                case 'N':
  ------------------
  |  Branch (31647:17): [True: 0, False: 53.3k]
  ------------------
31648|      1|                case 'n':
  ------------------
  |  Branch (31648:17): [True: 1, False: 53.3k]
  ------------------
31649|      1|                case 'Q':
  ------------------
  |  Branch (31649:17): [True: 0, False: 53.3k]
  ------------------
31650|      1|                case 'q':
  ------------------
  |  Branch (31650:17): [True: 0, False: 53.3k]
  ------------------
31651|      1|                case 'P':
  ------------------
  |  Branch (31651:17): [True: 0, False: 53.3k]
  ------------------
31652|      1|                case 'p': { /* janet pretty , precision = depth */
  ------------------
  |  Branch (31652:17): [True: 0, False: 53.3k]
  ------------------
31653|      1|                    int depth = atoi(precision);
31654|      1|                    if (depth < 1) depth = JANET_RECURSION_GUARD;
  ------------------
  |  |  296|      1|#define JANET_RECURSION_GUARD 1024
  ------------------
  |  Branch (31654:25): [True: 1, False: 0]
  ------------------
31655|      1|                    char d = strfrmt[-1];
31656|      1|                    int has_color = (d == 'P') || (d == 'Q') || (d == 'M') || (d == 'N');
  ------------------
  |  Branch (31656:37): [True: 0, False: 1]
  |  Branch (31656:51): [True: 0, False: 1]
  |  Branch (31656:65): [True: 0, False: 1]
  |  Branch (31656:79): [True: 0, False: 1]
  ------------------
31657|      1|                    int has_oneline = (d == 'Q') || (d == 'q') || (d == 'N') || (d == 'n');
  ------------------
  |  Branch (31657:39): [True: 0, False: 1]
  |  Branch (31657:53): [True: 0, False: 1]
  |  Branch (31657:67): [True: 0, False: 1]
  |  Branch (31657:81): [True: 1, False: 0]
  ------------------
31658|      1|                    int has_notrunc = (d == 'M') || (d == 'm') || (d == 'N') || (d == 'n');
  ------------------
  |  Branch (31658:39): [True: 0, False: 1]
  |  Branch (31658:53): [True: 0, False: 1]
  |  Branch (31658:67): [True: 0, False: 1]
  |  Branch (31658:81): [True: 1, False: 0]
  ------------------
31659|      1|                    int columns = atoi(width);
31660|      1|                    if (columns == 0)
  ------------------
  |  Branch (31660:25): [True: 1, False: 0]
  ------------------
31661|      1|                        columns = JANET_COLUMNS;
  ------------------
  |  |31227|      1|#define JANET_COLUMNS 80
  ------------------
31662|      0|                    else if (columns < 0)
  ------------------
  |  Branch (31662:30): [True: 0, False: 0]
  ------------------
31663|      0|                        has_oneline = 1;
31664|      1|                    int flags = 0;
31665|      1|                    flags |= has_color ? JANET_PRETTY_COLOR : 0;
  ------------------
  |  | 1967|      0|#define JANET_PRETTY_COLOR 1
  ------------------
  |  Branch (31665:30): [True: 0, False: 1]
  ------------------
31666|      1|                    flags |= has_oneline ? JANET_PRETTY_ONELINE : 0;
  ------------------
  |  | 1968|      1|#define JANET_PRETTY_ONELINE 2
  ------------------
  |  Branch (31666:30): [True: 1, False: 0]
  ------------------
31667|      1|                    flags |= has_notrunc ? JANET_PRETTY_NOTRUNC : 0;
  ------------------
  |  | 1969|      1|#define JANET_PRETTY_NOTRUNC 4
  ------------------
  |  Branch (31667:30): [True: 1, False: 0]
  ------------------
31668|      1|                    janet_pretty_(b, depth, columns, flags,
31669|      1|                                  argv[arg], startlen, b->count);
31670|      1|                    break;
31671|      1|                }
31672|  53.3k|                case 'j': {
  ------------------
  |  Branch (31672:17): [True: 53.3k, False: 2]
  ------------------
31673|  53.3k|                    int depth = atoi(precision);
31674|  53.3k|                    if (depth < 1)
  ------------------
  |  Branch (31674:25): [True: 53.3k, False: 0]
  ------------------
31675|  53.3k|                        depth = JANET_RECURSION_GUARD;
  ------------------
  |  |  296|  53.3k|#define JANET_RECURSION_GUARD 1024
  ------------------
31676|  53.3k|                    janet_jdn_(b, depth, argv[arg], startlen, b->count);
31677|  53.3k|                    break;
31678|      1|                }
31679|      0|                default: {
  ------------------
  |  Branch (31679:17): [True: 0, False: 53.3k]
  ------------------
31680|       |                    /* also treat cases 'nLlh' */
31681|      0|                    janet_panicf("invalid conversion '%s' to 'format'",
31682|      0|                                 form);
31683|      1|                }
31684|  53.3k|            }
31685|  53.3k|            if (nb >= MAX_ITEM)
  ------------------
  |  |31314|  53.3k|#define MAX_ITEM  256
  ------------------
  |  Branch (31685:17): [True: 0, False: 53.3k]
  ------------------
31686|      0|                janet_panic("format buffer overflow");
31687|  53.3k|            if (nb > 0)
  ------------------
  |  Branch (31687:17): [True: 0, False: 53.3k]
  ------------------
31688|      0|                janet_buffer_push_bytes(b, (uint8_t *) item, nb);
31689|  53.3k|        }
31690|  53.4k|    }
31691|  53.3k|}
janetc_regalloc_init:
31731|   427k|void janetc_regalloc_init(JanetcRegisterAllocator *ra) {
31732|       |    ra->chunks = NULL;
31733|   427k|    ra->count = 0;
31734|   427k|    ra->capacity = 0;
31735|   427k|    ra->max = 0;
31736|   427k|    ra->regtemps = 0;
31737|   427k|}
janetc_regalloc_deinit:
31739|   450k|void janetc_regalloc_deinit(JanetcRegisterAllocator *ra) {
31740|   450k|    janet_free(ra->chunks);
  ------------------
  |  | 2415|   450k|#define janet_free(X) free((X))
  ------------------
31741|   450k|}
janetc_regalloc_clone:
31766|  22.5k|void janetc_regalloc_clone(JanetcRegisterAllocator *dest, JanetcRegisterAllocator *src) {
31767|  22.5k|    size_t size;
31768|  22.5k|    dest->count = src->count;
31769|  22.5k|    dest->capacity = src->capacity;
31770|  22.5k|    dest->max = src->max;
31771|  22.5k|    size = sizeof(uint32_t) * (size_t) dest->capacity;
31772|  22.5k|    dest->regtemps = 0;
31773|  22.5k|    if (size) {
  ------------------
  |  Branch (31773:9): [True: 14.0k, False: 8.46k]
  ------------------
31774|  14.0k|        dest->chunks = janet_malloc(size);
  ------------------
  |  | 2406|  14.0k|#define janet_malloc(X) malloc((X))
  ------------------
31775|  14.0k|        if (!dest->chunks) {
  ------------------
  |  Branch (31775:13): [True: 0, False: 14.0k]
  ------------------
31776|      0|            JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
31777|      0|        }
31778|  14.0k|        memcpy(dest->chunks, src->chunks, size);
31779|  14.0k|    } else {
31780|       |        dest->chunks = NULL;
31781|  8.46k|    }
31782|  22.5k|}
janetc_regalloc_touch:
31802|   170k|void janetc_regalloc_touch(JanetcRegisterAllocator *ra, int32_t reg) {
31803|   170k|    int32_t chunk = reg >> 5;
31804|   170k|    int32_t bit = reg & 0x1F;
31805|   252k|    while (chunk >= ra->count) pushchunk(ra);
  ------------------
  |  Branch (31805:12): [True: 81.9k, False: 170k]
  ------------------
31806|   170k|    ra->chunks[chunk] |= ithbit(bit);
  ------------------
  |  |31760|   170k|#define ithbit(I) ((uint32_t)1 << (I))
  ------------------
31807|   170k|}
janetc_regalloc_1:
31810|  14.0M|int32_t janetc_regalloc_1(JanetcRegisterAllocator *ra) {
31811|       |    /* Get the nth bit in the array */
31812|  14.0M|    int32_t bit, chunk, nchunks, reg;
31813|  14.0M|    bit = -1;
31814|  14.0M|    nchunks = ra->count;
31815|  14.5G|    for (chunk = 0; chunk < nchunks; chunk++) {
  ------------------
  |  Branch (31815:21): [True: 14.5G, False: 512k]
  ------------------
31816|  14.5G|        uint32_t block = ra->chunks[chunk];
31817|  14.5G|        if (block == 0xFFFFFFFF) continue;
  ------------------
  |  Branch (31817:13): [True: 14.5G, False: 13.5M]
  ------------------
31818|  13.5M|        bit = count_trailing_ones(block);
  ------------------
  |  |31746|  13.5M|#define count_trailing_ones(x) __builtin_ctz(~(x))
  ------------------
31819|  13.5M|        break;
31820|  14.5G|    }
31821|       |    /* No reg found */
31822|  14.0M|    if (bit == -1) {
  ------------------
  |  Branch (31822:9): [True: 512k, False: 13.5M]
  ------------------
31823|   512k|        pushchunk(ra);
31824|   512k|        bit = 0;
31825|   512k|        chunk = nchunks;
31826|   512k|    }
31827|       |    /* set the bit at index bit in chunk */
31828|  14.0M|    ra->chunks[chunk] |= ithbit(bit);
  ------------------
  |  |31760|  14.0M|#define ithbit(I) ((uint32_t)1 << (I))
  ------------------
31829|  14.0M|    reg = (chunk << 5) + bit;
31830|  14.0M|    if (reg > ra->max)
  ------------------
  |  Branch (31830:9): [True: 10.4M, False: 3.55M]
  ------------------
31831|  10.4M|        ra->max = reg;
31832|  14.0M|    return reg;
31833|  14.0M|}
janetc_regalloc_free:
31860|  4.25M|void janetc_regalloc_free(JanetcRegisterAllocator *ra, int32_t reg) {
31861|  4.25M|    int32_t chunk = reg >> 5;
31862|  4.25M|    int32_t bit = reg & 0x1F;
31863|  4.25M|    ra->chunks[chunk] &= ~ithbit(bit);
  ------------------
  |  |31760|  4.25M|#define ithbit(I) ((uint32_t)1 << (I))
  ------------------
31864|  4.25M|}
janetc_regalloc_temp:
31881|  8.06M|int32_t janetc_regalloc_temp(JanetcRegisterAllocator *ra, JanetcRegisterTemp nth) {
31882|  8.06M|    int32_t oldmax = ra->max;
31883|  8.06M|    if (ra->regtemps & (1 << nth)) {
  ------------------
  |  Branch (31883:9): [True: 0, False: 8.06M]
  ------------------
31884|      0|        JANET_EXIT("regtemp already allocated");
  ------------------
  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  380|      0|        __FILE__,\
  |  |  381|      0|        __LINE__,\
  |  |  382|      0|        (m));\
  |  |  383|      0|    abort();\
  |  |  384|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
31885|      0|    }
31886|  8.06M|    ra->regtemps |= 1 << nth;
31887|  8.06M|    int32_t reg = janetc_regalloc_1(ra);
31888|  8.06M|    if (reg > 0xFF) {
  ------------------
  |  Branch (31888:9): [True: 7.64M, False: 420k]
  ------------------
31889|  7.64M|        reg = 0xF0 + nth;
31890|  7.64M|        ra->max = (reg > oldmax) ? reg : oldmax;
  ------------------
  |  Branch (31890:19): [True: 250, False: 7.64M]
  ------------------
31891|  7.64M|    }
31892|  8.06M|    return reg;
31893|  8.06M|}
janetc_regalloc_freetemp:
31895|  8.97M|void janetc_regalloc_freetemp(JanetcRegisterAllocator *ra, int32_t reg, JanetcRegisterTemp nth) {
31896|  8.97M|    ra->regtemps &= ~(1 << nth);
31897|  8.97M|    if (reg < 0xF0)
  ------------------
  |  Branch (31897:9): [True: 555k, False: 8.41M]
  ------------------
31898|   555k|        janetc_regalloc_free(ra, reg);
31899|  8.97M|}
dohead_destructure:
32449|   349k|SlotHeadPair *dohead_destructure(JanetCompiler *c, SlotHeadPair *into, JanetFopts opts, Janet lhs, Janet rhs) {
32450|   349k|    if (c->recursion_guard <= 0) {
  ------------------
  |  Branch (32450:9): [True: 0, False: 349k]
  ------------------
32451|      0|        janetc_error(c, janet_cstring("C stack recursed too deeply"));
32452|      0|        return NULL;
32453|      0|    }
32454|       |    /* Detect if we can do an optimization to avoid some allocations */
32455|   349k|    int can_destructure_lhs = janet_checktype(lhs, JANET_TUPLE)
  ------------------
  |  |  806|   699k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 172k, False: 177k]
  |  |  |  Branch (806:6): [Folded, False: 349k]
  |  |  ------------------
  |  |  807|   699k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   699k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   349k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   349k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   349k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   349k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32456|   177k|                              || janet_checktype(lhs, JANET_ARRAY);
  ------------------
  |  |  806|   177k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 1, False: 177k]
  |  |  |  Branch (806:6): [Folded, False: 177k]
  |  |  ------------------
  |  |  807|   177k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   177k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   177k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   177k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   177k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   177k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32457|   349k|    int rhs_is_indexed = janet_checktype(rhs, JANET_ARRAY)
  ------------------
  |  |  806|   699k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 3, False: 349k]
  |  |  |  Branch (806:6): [Folded, False: 349k]
  |  |  ------------------
  |  |  807|   699k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   699k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   349k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   349k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   349k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   349k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32458|   349k|                         || (janet_checktype(rhs, JANET_TUPLE) && (janet_tuple_flag(janet_unwrap_tuple(rhs)) & JANET_TUPLE_FLAG_BRACKETCTOR));
  ------------------
  |  |  806|   699k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 10.6k, False: 339k]
  |  |  |  Branch (806:6): [Folded, False: 349k]
  |  |  ------------------
  |  |  807|   699k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   699k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   349k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   349k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   349k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   349k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                       || (janet_checktype(rhs, JANET_TUPLE) && (janet_tuple_flag(janet_unwrap_tuple(rhs)) & JANET_TUPLE_FLAG_BRACKETCTOR));
  ------------------
  |  | 1806|  10.6k|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|  10.6k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                                       || (janet_checktype(rhs, JANET_TUPLE) && (janet_tuple_flag(janet_unwrap_tuple(rhs)) & JANET_TUPLE_FLAG_BRACKETCTOR));
  ------------------
  |  | 1798|  10.6k|#define JANET_TUPLE_FLAG_BRACKETCTOR 0x10000
  ------------------
  |  Branch (32458:67): [True: 1.33k, False: 9.33k]
  ------------------
32459|   349k|    uint32_t has_drop = opts.flags & JANET_FOPTS_DROP;
  ------------------
  |  | 1149|   349k|#define JANET_FOPTS_DROP 0x40000
  ------------------
32460|       |
32461|   349k|    JanetFopts subopts = janetc_fopts_default(c);
32462|   349k|    subopts.flags = opts.flags & ~(JANET_FOPTS_TAIL | JANET_FOPTS_DROP);
  ------------------
  |  | 1147|   349k|#define JANET_FOPTS_TAIL 0x10000
  ------------------
                  subopts.flags = opts.flags & ~(JANET_FOPTS_TAIL | JANET_FOPTS_DROP);
  ------------------
  |  | 1149|   349k|#define JANET_FOPTS_DROP 0x40000
  ------------------
32463|       |
32464|   349k|    if (has_drop && can_destructure_lhs && rhs_is_indexed) {
  ------------------
  |  Branch (32464:9): [True: 142k, False: 207k]
  |  Branch (32464:21): [True: 1.90k, False: 140k]
  |  Branch (32464:44): [True: 1.19k, False: 710]
  ------------------
32465|       |        /* Code is of the form (def [a b] [1 2]), avoid the allocation of two tuples */
32466|  1.19k|        JanetView view_lhs = {0};
32467|  1.19k|        JanetView view_rhs = {0};
32468|  1.19k|        janet_indexed_view(lhs, &view_lhs.items, &view_lhs.len);
32469|  1.19k|        janet_indexed_view(rhs, &view_rhs.items, &view_rhs.len);
32470|  1.19k|        int found_amp = 0;
32471|  1.19k|        int found_splice = 0;
32472|       |        /* Check for (def [x y z] [(splice [1 2 3]) 4 5 6]), bail out of optimization */
32473|  4.18k|        for (int32_t i = 0; i < view_rhs.len; i++) {
  ------------------
  |  Branch (32473:29): [True: 2.99k, False: 1.19k]
  ------------------
32474|  2.99k|            if (!janet_checktype(view_rhs.items[i], JANET_TUPLE)) {
  ------------------
  |  |  806|  2.99k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 2.99k]
  |  |  ------------------
  |  |  807|  2.99k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  2.99k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  2.99k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  2.99k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.99k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.99k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (32474:17): [True: 1.19k, False: 1.79k]
  ------------------
32475|  1.19k|                continue;
32476|  1.19k|            }
32477|  1.79k|            JanetTuple tup = janet_unwrap_tuple(view_rhs.items[i]);
  ------------------
  |  |  858|  1.79k|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
32478|  1.79k|            if (janet_tuple_length(tup) == 0) {
  ------------------
  |  | 1802|  1.79k|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|  1.79k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (32478:17): [True: 0, False: 1.79k]
  ------------------
32479|      0|                continue;
32480|      0|            }
32481|  1.79k|            if (janet_symeq(tup[0], "splice")) {
  ------------------
  |  Branch (32481:17): [True: 1, False: 1.79k]
  ------------------
32482|      1|                found_splice = 1;
32483|       |                /* Good error will be generated later. */
32484|      1|                break;
32485|      1|            }
32486|  1.79k|        }
32487|       |        /* Check for (def [x & more] [1 2 3]), bail out of optimization */
32488|   208k|        for (int32_t i = 0; i < view_lhs.len; i++) {
  ------------------
  |  Branch (32488:29): [True: 207k, False: 1.19k]
  ------------------
32489|   207k|            if (janet_symeq(view_lhs.items[i], "&")) {
  ------------------
  |  Branch (32489:17): [True: 0, False: 207k]
  ------------------
32490|      0|                found_amp = 1;
32491|       |                /* Good error will be generated later. */
32492|      0|                break;
32493|      0|            }
32494|   207k|        }
32495|  1.19k|        if (!found_amp && !found_splice) {
  ------------------
  |  Branch (32495:13): [True: 1.19k, False: 0]
  |  Branch (32495:27): [True: 1.19k, False: 1]
  ------------------
32496|   208k|            for (int32_t i = 0; i < view_lhs.len; i++) {
  ------------------
  |  Branch (32496:33): [True: 207k, False: 1.19k]
  ------------------
32497|   207k|                Janet sub_rhs = view_rhs.len <= i ? janet_wrap_nil() : view_rhs.items[i];
  ------------------
  |  |  831|   204k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|   204k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   204k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   204k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (32497:33): [True: 204k, False: 2.39k]
  ------------------
32498|   207k|                c->recursion_guard--;
32499|   207k|                into = dohead_destructure(c, into, subopts, view_lhs.items[i], sub_rhs);
32500|   207k|                c->recursion_guard++;
32501|   207k|            }
32502|  1.19k|            return into;
32503|  1.19k|        }
32504|  1.19k|    }
32505|       |
32506|       |    /* No optimization, do the simple way */
32507|   348k|    subopts.hint = opts.hint;
32508|   348k|    JanetSlot ret = janetc_value(subopts, rhs);
32509|   348k|    SlotHeadPair shp = {lhs, ret};
32510|       |    janet_v_push(into, shp);
  ------------------
  |  |  757|   348k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|   348k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|   348k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|   205k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|   205k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|   205k|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|   205k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 142k, False: 205k]
  |  |  |  |  |  |  |  Branch (768:50): [True: 8.23k, False: 197k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|   151k|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|   348k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   348k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32511|   348k|    return into;
32512|   349k|}
janetc_special:
33323|   721k|const JanetSpecial *janetc_special(const uint8_t *name) {
33324|   721k|    return janet_strbinsearch(
33325|   721k|               &janetc_specials,
33326|   721k|               sizeof(janetc_specials) / sizeof(JanetSpecial),
33327|   721k|               sizeof(JanetSpecial),
33328|   721k|               name);
33329|   721k|}
janet_string:
33459|  3.06M|const uint8_t *janet_string(const uint8_t *buf, int32_t len) {
33460|  3.06M|    JanetStringHead *head = janet_gcalloc(JANET_MEMORY_STRING, sizeof(JanetStringHead) + (size_t) len + 1);
33461|  3.06M|    head->length = len;
33462|  3.06M|    head->hash = janet_string_calchash(buf, len);
33463|  3.06M|    uint8_t *data = (uint8_t *)head->data;
33464|  3.06M|    safe_memcpy(data, buf, len);
33465|  3.06M|    data[len] = 0;
33466|  3.06M|    return data;
33467|  3.06M|}
janet_string_compare:
33470|   970k|int janet_string_compare(const uint8_t *lhs, const uint8_t *rhs) {
33471|   970k|    int32_t xlen = janet_string_length(lhs);
  ------------------
  |  | 1813|   970k|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|   970k|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
33472|   970k|    int32_t ylen = janet_string_length(rhs);
  ------------------
  |  | 1813|   970k|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|   970k|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
33473|   970k|    int32_t len = xlen > ylen ? ylen : xlen;
  ------------------
  |  Branch (33473:19): [True: 221, False: 970k]
  ------------------
33474|   970k|    int res = memcmp(lhs, rhs, len);
33475|   970k|    if (res) return res > 0 ? 1 : -1;
  ------------------
  |  Branch (33475:9): [True: 963, False: 969k]
  |  Branch (33475:21): [True: 80, False: 883]
  ------------------
33476|   969k|    if (xlen == ylen) return 0;
  ------------------
  |  Branch (33476:9): [True: 969k, False: 106]
  ------------------
33477|    106|    return xlen < ylen ? -1 : 1;
  ------------------
  |  Branch (33477:12): [True: 60, False: 46]
  ------------------
33478|   969k|}
janet_string_equalconst:
33481|  45.4M|int janet_string_equalconst(const uint8_t *lhs, const uint8_t *rhs, int32_t rlen, int32_t rhash) {
33482|  45.4M|    int32_t lhash = janet_string_hash(lhs);
  ------------------
  |  | 1814|  45.4M|#define janet_string_hash(s) (janet_string_head(s)->hash)
  |  |  ------------------
  |  |  |  | 1812|  45.4M|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
33483|  45.4M|    int32_t llen = janet_string_length(lhs);
  ------------------
  |  | 1813|  45.4M|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|  45.4M|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
33484|  45.4M|    if (lhash != rhash || llen != rlen)
  ------------------
  |  Branch (33484:9): [True: 10.1M, False: 35.3M]
  |  Branch (33484:27): [True: 0, False: 35.3M]
  ------------------
33485|  10.1M|        return 0;
33486|  35.3M|    if (lhs == rhs)
  ------------------
  |  Branch (33486:9): [True: 2.27M, False: 33.0M]
  ------------------
33487|  2.27M|        return 1;
33488|  33.0M|    return !memcmp(lhs, rhs, rlen);
33489|  35.3M|}
janet_string_equal:
33492|  1.46M|int janet_string_equal(const uint8_t *lhs, const uint8_t *rhs) {
33493|  1.46M|    return janet_string_equalconst(lhs, rhs,
33494|  1.46M|                                   janet_string_length(rhs), janet_string_hash(rhs));
  ------------------
  |  | 1813|  1.46M|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|  1.46M|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
                                                 janet_string_length(rhs), janet_string_hash(rhs));
  ------------------
  |  | 1814|  1.46M|#define janet_string_hash(s) (janet_string_head(s)->hash)
  |  |  ------------------
  |  |  |  | 1812|  1.46M|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
33495|  1.46M|}
janet_cstring:
33498|   809k|const uint8_t *janet_cstring(const char *str) {
33499|   809k|    return janet_string((const uint8_t *)str, (int32_t)strlen(str));
33500|   809k|}
cfun_string_slice:
33597|    838|              "an error is raised.") {
33598|    838|    JanetByteView view = janet_getbytes(argv, 0);
33599|    838|    JanetRange range = janet_getslice(argc, argv);
33600|    838|    return janet_stringv(view.bytes + range.start, range.end - range.start);
  ------------------
  |  | 1827|    838|#define janet_stringv(str, len) janet_wrap_string(janet_string((str), (len)))
  |  |  ------------------
  |  |  |  |  848|    838|#define janet_wrap_string(s) janet_nanbox_wrap_c((s), JANET_STRING)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|    838|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|    838|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|    838|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
33601|    838|}
cfun_string_hasprefix:
33745|  1.02M|              "Tests whether `str` starts with `pfx`.") {
33746|  1.02M|    janet_fixarity(argc, 2);
33747|  1.02M|    JanetByteView prefix = janet_getbytes(argv, 0);
33748|  1.02M|    JanetByteView str = janet_getbytes(argv, 1);
33749|  1.02M|    return str.len < prefix.len
  ------------------
  |  Branch (33749:12): [True: 0, False: 1.02M]
  ------------------
33750|  1.02M|           ? janet_wrap_false()
  ------------------
  |  |  833|      0|#define janet_wrap_false() janet_nanbox_from_payload(JANET_BOOLEAN, 0)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
33751|  1.02M|           : janet_wrap_boolean(memcmp(prefix.bytes, str.bytes, prefix.len) == 0);
  ------------------
  |  |  834|  1.02M|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  ------------------
  |  |  |  |  822|  1.02M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.02M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.02M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
33752|  1.02M|}
cfun_string_format:
33990|      1|              "* `n`, `N` - pretty format on one line without truncation") {
33991|      1|    janet_arity(argc, 1, -1);
33992|      1|    JanetBuffer *buffer = janet_buffer(0);
33993|      1|    const char *strfrmt = (const char *) janet_getstring(argv, 0);
33994|      1|    janet_buffer_format(buffer, strfrmt, 0, argc, argv);
33995|      1|    return janet_stringv(buffer->data, buffer->count);
  ------------------
  |  | 1827|      1|#define janet_stringv(str, len) janet_wrap_string(janet_string((str), (len)))
  |  |  ------------------
  |  |  |  |  848|      1|#define janet_wrap_string(s) janet_nanbox_wrap_c((s), JANET_STRING)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|      1|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      1|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      1|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
33996|      1|}
janet_lib_string:
34067|    267|void janet_lib_string(JanetTable *env) {
34068|    267|    JanetRegExt string_cfuns[] = {
34069|    267|        JANET_CORE_REG("string/slice", cfun_string_slice),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34070|    267|        JANET_CORE_REG("keyword/slice", cfun_keyword_slice),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34071|    267|        JANET_CORE_REG("symbol/slice", cfun_symbol_slice),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34072|    267|        JANET_CORE_REG("string/repeat", cfun_string_repeat),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34073|    267|        JANET_CORE_REG("string/bytes", cfun_string_bytes),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34074|    267|        JANET_CORE_REG("string/from-bytes", cfun_string_frombytes),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34075|    267|        JANET_CORE_REG("string/ascii-lower", cfun_string_asciilower),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34076|    267|        JANET_CORE_REG("string/ascii-upper", cfun_string_asciiupper),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34077|    267|        JANET_CORE_REG("string/reverse", cfun_string_reverse),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34078|    267|        JANET_CORE_REG("string/find", cfun_string_find),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34079|    267|        JANET_CORE_REG("string/find-all", cfun_string_findall),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34080|    267|        JANET_CORE_REG("string/has-prefix?", cfun_string_hasprefix),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34081|    267|        JANET_CORE_REG("string/has-suffix?", cfun_string_hassuffix),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34082|    267|        JANET_CORE_REG("string/replace", cfun_string_replace),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34083|    267|        JANET_CORE_REG("string/replace-all", cfun_string_replaceall),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34084|    267|        JANET_CORE_REG("string/split", cfun_string_split),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34085|    267|        JANET_CORE_REG("string/check-set", cfun_string_checkset),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34086|    267|        JANET_CORE_REG("string/join", cfun_string_join),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34087|    267|        JANET_CORE_REG("string/format", cfun_string_format),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34088|    267|        JANET_CORE_REG("string/trim", cfun_string_trim),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34089|    267|        JANET_CORE_REG("string/triml", cfun_string_triml),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34090|    267|        JANET_CORE_REG("string/trimr", cfun_string_trimr),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34091|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
34092|    267|    };
34093|       |    janet_core_cfuns_ext(env, NULL, string_cfuns);
34094|    267|}
janet_scan_number_base:
34355|  1.17M|    double *out) {
34356|  1.17M|    const uint8_t *end = str + len;
34357|  1.17M|    int seenadigit = 0;
34358|  1.17M|    int ex = 0;
34359|  1.17M|    int seenpoint = 0;
34360|  1.17M|    int foundexp = 0;
34361|  1.17M|    int neg = 0;
34362|  1.17M|    struct BigNat mant;
34363|  1.17M|    bignat_zero(&mant);
34364|       |
34365|       |    /* Prevent some kinds of overflow bugs relating to the exponent
34366|       |     * overflowing.  For example, if a string was passed 2GB worth of 0s after
34367|       |     * the decimal point, exponent could wrap around and become positive. It's
34368|       |     * easier to reject ridiculously large inputs than to check for overflows.
34369|       |     * */
34370|  1.17M|    if (len > JANET_NUMBER_LENGTH_RIDICULOUS) goto error;
  ------------------
  |  |34151|  1.17M|#define JANET_NUMBER_LENGTH_RIDICULOUS 0xFFFF
  ------------------
  |  Branch (34370:9): [True: 211, False: 1.17M]
  ------------------
34371|       |
34372|       |    /* Get sign */
34373|  1.17M|    if (str >= end) goto error;
  ------------------
  |  Branch (34373:9): [True: 0, False: 1.17M]
  ------------------
34374|  1.17M|    if (*str == '-') {
  ------------------
  |  Branch (34374:9): [True: 719k, False: 456k]
  ------------------
34375|   719k|        neg = 1;
34376|   719k|        str++;
34377|   719k|    } else if (*str == '+') {
  ------------------
  |  Branch (34377:16): [True: 124k, False: 331k]
  ------------------
34378|   124k|        str++;
34379|   124k|    }
34380|       |
34381|       |    /* Check for leading 0x or digit digit r */
34382|  1.17M|    if (base == 0) {
  ------------------
  |  Branch (34382:9): [True: 1.17M, False: 0]
  ------------------
34383|  1.17M|        if (str + 1 < end && str[0] == '0' && str[1] == 'x') {
  ------------------
  |  Branch (34383:13): [True: 118k, False: 1.05M]
  |  Branch (34383:30): [True: 3.82k, False: 115k]
  |  Branch (34383:47): [True: 14, False: 3.81k]
  ------------------
34384|     14|            base = 16;
34385|     14|            str += 2;
34386|  1.17M|        } else if (str + 1 < end  &&
  ------------------
  |  Branch (34386:20): [True: 118k, False: 1.05M]
  ------------------
34387|   118k|                   str[0] >= '0' && str[0] <= '9' &&
  ------------------
  |  Branch (34387:20): [True: 25.6k, False: 93.2k]
  |  Branch (34387:37): [True: 23.7k, False: 1.88k]
  ------------------
34388|  23.7k|                   str[1] == 'r') {
  ------------------
  |  Branch (34388:20): [True: 202, False: 23.5k]
  ------------------
34389|    202|            base = str[0] - '0';
34390|    202|            str += 2;
34391|  1.17M|        } else if (str + 2 < end  &&
  ------------------
  |  Branch (34391:20): [True: 25.0k, False: 1.15M]
  ------------------
34392|  25.0k|                   str[0] >= '0' && str[0] <= '9' &&
  ------------------
  |  Branch (34392:20): [True: 22.9k, False: 2.05k]
  |  Branch (34392:37): [True: 22.4k, False: 482]
  ------------------
34393|  22.4k|                   str[1] >= '0' && str[1] <= '9' &&
  ------------------
  |  Branch (34393:20): [True: 21.4k, False: 1.07k]
  |  Branch (34393:37): [True: 21.3k, False: 55]
  ------------------
34394|  21.3k|                   str[2] == 'r') {
  ------------------
  |  Branch (34394:20): [True: 171, False: 21.1k]
  ------------------
34395|    171|            base = 10 * (str[0] - '0') + (str[1] - '0');
34396|    171|            if (base < 2 || base > 36) goto error;
  ------------------
  |  Branch (34396:17): [True: 0, False: 171]
  |  Branch (34396:29): [True: 0, False: 171]
  ------------------
34397|    171|            str += 3;
34398|    171|        }
34399|  1.17M|    }
34400|       |
34401|       |    /* If still base is 0, set to default (10) */
34402|  1.17M|    if (base == 0) {
  ------------------
  |  Branch (34402:9): [True: 1.17M, False: 185]
  ------------------
34403|  1.17M|        base = 10;
34404|  1.17M|    }
34405|  1.17M|    int exp_base = base;
34406|       |
34407|       |    /* Skip leading zeros */
34408|  1.50M|    while (str < end && (*str == '0' || *str == '.')) {
  ------------------
  |  Branch (34408:12): [True: 440k, False: 1.06M]
  |  Branch (34408:26): [True: 157k, False: 283k]
  |  Branch (34408:41): [True: 176k, False: 107k]
  ------------------
34409|   333k|        if (seenpoint) ex--;
  ------------------
  |  Branch (34409:13): [True: 90.2k, False: 243k]
  ------------------
34410|   333k|        if (*str == '.') {
  ------------------
  |  Branch (34410:13): [True: 176k, False: 157k]
  ------------------
34411|   176k|            if (seenpoint) goto error;
  ------------------
  |  Branch (34411:17): [True: 483, False: 175k]
  ------------------
34412|   175k|            seenpoint = 1;
34413|   175k|        } else {
34414|   157k|            seenadigit = 1;
34415|   157k|        }
34416|   333k|        str++;
34417|   333k|    }
34418|       |
34419|       |    /* Parse significant digits */
34420|  1.43M|    while (str < end) {
  ------------------
  |  Branch (34420:12): [True: 277k, False: 1.15M]
  ------------------
34421|   277k|        if (*str == '.') {
  ------------------
  |  Branch (34421:13): [True: 21, False: 277k]
  ------------------
34422|     21|            if (seenpoint) goto error;
  ------------------
  |  Branch (34422:17): [True: 0, False: 21]
  ------------------
34423|     21|            seenpoint = 1;
34424|   277k|        } else if (*str == '&') {
  ------------------
  |  Branch (34424:20): [True: 2.67k, False: 274k]
  ------------------
34425|  2.67k|            foundexp = 1;
34426|  2.67k|            break;
34427|   274k|        } else if (base == 16 && (*str == 'P' || *str == 'p')) { /* IEEE hex float */
  ------------------
  |  Branch (34427:20): [True: 28, False: 274k]
  |  Branch (34427:35): [True: 14, False: 14]
  |  Branch (34427:50): [True: 0, False: 14]
  ------------------
34428|     14|            foundexp = 1;
34429|     14|            exp_base = 10;
34430|     14|            base = 2;
34431|     14|            ex *= 4; /* We need to correct the current exponent after we change the base */
34432|     14|            break;
34433|   274k|        } else if (base == 10 && (*str == 'E' || *str == 'e')) {
  ------------------
  |  Branch (34433:20): [True: 269k, False: 5.14k]
  |  Branch (34433:35): [True: 708, False: 268k]
  |  Branch (34433:50): [True: 82, False: 268k]
  ------------------
34434|    790|            foundexp = 1;
34435|    790|            break;
34436|   273k|        } else if (*str == '_') {
  ------------------
  |  Branch (34436:20): [True: 1.44k, False: 272k]
  ------------------
34437|  1.44k|            if (!seenadigit) goto error;
  ------------------
  |  Branch (34437:17): [True: 548, False: 892]
  ------------------
34438|   272k|        } else {
34439|   272k|            int digit = digit_lookup[*str & 0x7F];
34440|   272k|            if (*str > 127 || digit >= base) goto error;
  ------------------
  |  Branch (34440:17): [True: 93, False: 272k]
  |  Branch (34440:31): [True: 11.2k, False: 261k]
  ------------------
34441|   261k|            if (seenpoint) ex--;
  ------------------
  |  Branch (34441:17): [True: 45.4k, False: 215k]
  ------------------
34442|   261k|            bignat_muladd(&mant, base, digit);
34443|   261k|            seenadigit = 1;
34444|   261k|        }
34445|   262k|        str++;
34446|   262k|    }
34447|       |
34448|  1.16M|    if (!seenadigit)
  ------------------
  |  Branch (34448:9): [True: 915k, False: 247k]
  ------------------
34449|   915k|        goto error;
34450|       |
34451|       |    /* Read exponent */
34452|   247k|    if (str < end && foundexp) {
  ------------------
  |  Branch (34452:9): [True: 2.85k, False: 244k]
  |  Branch (34452:22): [True: 2.85k, False: 0]
  ------------------
34453|  2.85k|        int eneg = 0;
34454|  2.85k|        int32_t ee = 0;
34455|  2.85k|        seenadigit = 0;
34456|  2.85k|        str++;
34457|  2.85k|        if (str >= end) goto error;
  ------------------
  |  Branch (34457:13): [True: 1, False: 2.85k]
  ------------------
34458|  2.85k|        if (*str == '-') {
  ------------------
  |  Branch (34458:13): [True: 0, False: 2.85k]
  ------------------
34459|      0|            eneg = 1;
34460|      0|            str++;
34461|  2.85k|        } else if (*str == '+') {
  ------------------
  |  Branch (34461:20): [True: 0, False: 2.85k]
  ------------------
34462|      0|            str++;
34463|      0|        }
34464|       |        /* Skip leading 0s in exponent */
34465|  3.59k|        while (str < end && *str == '0') {
  ------------------
  |  Branch (34465:16): [True: 2.86k, False: 725]
  |  Branch (34465:29): [True: 734, False: 2.13k]
  ------------------
34466|    734|            str++;
34467|    734|            seenadigit = 1;
34468|    734|        }
34469|  7.48k|        while (str < end) {
  ------------------
  |  Branch (34469:16): [True: 4.64k, False: 2.84k]
  ------------------
34470|  4.64k|            int digit = digit_lookup[*str & 0x7F];
34471|  4.64k|            if (*str > 127 || digit >= exp_base) goto error;
  ------------------
  |  Branch (34471:17): [True: 0, False: 4.64k]
  |  Branch (34471:31): [True: 13, False: 4.62k]
  ------------------
34472|  4.62k|            if (ee < (INT32_MAX / 40)) {
  ------------------
  |  Branch (34472:17): [True: 4.40k, False: 222]
  ------------------
34473|  4.40k|                ee = exp_base * ee + digit;
34474|  4.40k|            }
34475|  4.62k|            str++;
34476|  4.62k|            seenadigit = 1;
34477|  4.62k|        }
34478|  2.84k|        if (eneg) ex -= ee;
  ------------------
  |  Branch (34478:13): [True: 0, False: 2.84k]
  ------------------
34479|  2.84k|        else ex += ee;
34480|  2.84k|    }
34481|       |
34482|   247k|    if (!seenadigit)
  ------------------
  |  Branch (34482:9): [True: 0, False: 247k]
  ------------------
34483|      0|        goto error;
34484|       |
34485|   247k|    *out = convert(neg, &mant, base, ex);
34486|   247k|    janet_free(mant.digits);
  ------------------
  |  | 2415|   247k|#define janet_free(X) free((X))
  ------------------
34487|   247k|    return 0;
34488|       |
34489|   928k|error:
34490|   928k|    janet_free(mant.digits);
  ------------------
  |  | 2415|   928k|#define janet_free(X) free((X))
  ------------------
34491|   928k|    return 1;
34492|   247k|}
janet_scan_int64:
34565|  6.27k|int janet_scan_int64(const uint8_t *str, int32_t len, int64_t *out) {
34566|  6.27k|    int neg;
34567|  6.27k|    uint64_t bi;
34568|  6.27k|    if (scan_uint64(str, len, &bi, &neg)) {
  ------------------
  |  Branch (34568:9): [True: 5.06k, False: 1.20k]
  ------------------
34569|  5.06k|        if (neg && bi <= ((UINT64_MAX / 2) + 1)) {
  ------------------
  |  Branch (34569:13): [True: 344, False: 4.72k]
  |  Branch (34569:20): [True: 344, False: 0]
  ------------------
34570|    344|            if (bi > INT64_MAX) {
  ------------------
  |  Branch (34570:17): [True: 0, False: 344]
  ------------------
34571|      0|                *out = INT64_MIN;
34572|    344|            } else {
34573|    344|                *out = -((int64_t) bi);
34574|    344|            }
34575|    344|            return 1;
34576|    344|        }
34577|  4.72k|        if (!neg && bi <= INT64_MAX) {
  ------------------
  |  Branch (34577:13): [True: 4.72k, False: 0]
  |  Branch (34577:21): [True: 4.72k, False: 0]
  ------------------
34578|  4.72k|            *out = (int64_t) bi;
34579|  4.72k|            return 1;
34580|  4.72k|        }
34581|  4.72k|    }
34582|  1.20k|    return 0;
34583|  6.27k|}
janet_scan_uint64:
34585|    157|int janet_scan_uint64(const uint8_t *str, int32_t len, uint64_t *out) {
34586|    157|    int neg;
34587|    157|    uint64_t bi;
34588|    157|    if (scan_uint64(str, len, &bi, &neg)) {
  ------------------
  |  Branch (34588:9): [True: 7, False: 150]
  ------------------
34589|      7|        if (!neg) {
  ------------------
  |  Branch (34589:13): [True: 7, False: 0]
  ------------------
34590|      7|            *out = bi;
34591|      7|            return 1;
34592|      7|        }
34593|      7|    }
34594|    150|    return 0;
34595|    157|}
janet_scan_numeric:
34602|  1.18M|    Janet *out) {
34603|  1.18M|    int result;
34604|  1.18M|    double num;
34605|  1.18M|    int64_t i64 = 0;
34606|  1.18M|    uint64_t u64 = 0;
34607|  1.18M|    if (len < 2 || str[len - 2] != ':') {
  ------------------
  |  Branch (34607:9): [True: 1.04M, False: 133k]
  |  Branch (34607:20): [True: 126k, False: 6.53k]
  ------------------
34608|  1.17M|        result = janet_scan_number_base(str, len, 0, &num);
34609|  1.17M|        *out = janet_wrap_number(num);
  ------------------
  |  |  835|  1.17M|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  ------------------
34610|  1.17M|        return result;
34611|  1.17M|    }
34612|  6.53k|    switch (str[len - 1]) {
34613|    102|        default:
  ------------------
  |  Branch (34613:9): [True: 102, False: 6.43k]
  ------------------
34614|    102|            return 1;
34615|      0|        case 'n':
  ------------------
  |  Branch (34615:9): [True: 0, False: 6.53k]
  ------------------
34616|      0|            result = janet_scan_number_base(str, len - 2, 0, &num);
34617|      0|            *out = janet_wrap_number(num);
  ------------------
  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  ------------------
34618|      0|            return result;
34619|       |        /* Condition is inverted janet_scan_int64 and janet_scan_uint64 */
34620|  6.27k|        case 's':
  ------------------
  |  Branch (34620:9): [True: 6.27k, False: 259]
  ------------------
34621|  6.27k|            result = !janet_scan_int64(str, len - 2, &i64);
34622|  6.27k|            *out = janet_wrap_s64(i64);
34623|  6.27k|            return result;
34624|    157|        case 'u':
  ------------------
  |  Branch (34624:9): [True: 157, False: 6.37k]
  ------------------
34625|    157|            result = !janet_scan_uint64(str, len - 2, &u64);
34626|    157|            *out = janet_wrap_u64(u64);
34627|    157|            return result;
34628|  6.53k|    }
34629|  6.53k|}
janet_buffer_dtostr:
34633|  69.9k|void janet_buffer_dtostr(JanetBuffer *buffer, double x) {
34634|  69.9k|#define BUFSIZE 32
34635|  69.9k|    janet_buffer_extra(buffer, BUFSIZE);
  ------------------
  |  |34634|  69.9k|#define BUFSIZE 32
  ------------------
34636|  69.9k|    int count = snprintf((char *) buffer->data + buffer->count, BUFSIZE, "%.17g", x);
  ------------------
  |  |34634|  69.9k|#define BUFSIZE 32
  ------------------
34637|  69.9k|#undef BUFSIZE
34638|       |    /* fix locale issues with commas */
34639|   148k|    for (int i = 0; i < count; i++) {
  ------------------
  |  Branch (34639:21): [True: 78.1k, False: 69.9k]
  ------------------
34640|  78.1k|        char c = buffer->data[buffer->count + i];
34641|  78.1k|        if (c == ',') {
  ------------------
  |  Branch (34641:13): [True: 0, False: 78.1k]
  ------------------
34642|      0|            buffer->data[buffer->count + i] = '.';
34643|      0|        }
34644|  78.1k|    }
34645|  69.9k|    buffer->count += count;
34646|  69.9k|}
janet_struct_begin:
34683|  1.74M|JanetKV *janet_struct_begin(int32_t count) {
34684|       |    /* Calculate capacity as power of 2 after 2 * count. */
34685|  1.74M|    int32_t capacity = janet_tablen(2 * count);
34686|  1.74M|    if (capacity < 0) capacity = janet_tablen(count + 1);
  ------------------
  |  Branch (34686:9): [True: 0, False: 1.74M]
  ------------------
34687|       |
34688|  1.74M|    size_t size = sizeof(JanetStructHead) + (size_t) capacity * sizeof(JanetKV);
34689|  1.74M|    JanetStructHead *head = janet_gcalloc(JANET_MEMORY_STRUCT, size);
34690|  1.74M|    head->length = count;
34691|  1.74M|    head->capacity = capacity;
34692|  1.74M|    head->hash = 0;
34693|  1.74M|    head->proto = NULL;
34694|       |
34695|  1.74M|    JanetKV *st = (JanetKV *)(head->data);
34696|  1.74M|    janet_memempty(st, capacity);
34697|  1.74M|    return st;
34698|  1.74M|}
janet_struct_find:
34701|  2.48M|const JanetKV *janet_struct_find(const JanetKV *st, Janet key) {
34702|       |    return janet_dict_find(st, janet_struct_capacity(st), key);
  ------------------
  |  | 1849|  2.48M|#define janet_struct_capacity(t) (janet_struct_head(t)->capacity)
  |  |  ------------------
  |  |  |  | 1846|  2.48M|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
34703|  2.48M|}
janet_struct_put_ext:
34713|  19.6M|void janet_struct_put_ext(JanetKV *st, Janet key, Janet value, int replace) {
34714|  19.6M|    int32_t cap = janet_struct_capacity(st);
  ------------------
  |  | 1849|  19.6M|#define janet_struct_capacity(t) (janet_struct_head(t)->capacity)
  |  |  ------------------
  |  |  |  | 1846|  19.6M|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
34715|  19.6M|    int32_t hash = janet_hash(key);
34716|  19.6M|    int32_t index = janet_maphash(cap, hash);
  ------------------
  |  |  396|  19.6M|#define janet_maphash(cap, hash) ((uint32_t)(hash) & (cap - 1))
  ------------------
34717|  19.6M|    int32_t i, j, dist;
34718|  19.6M|    int32_t bounds[4] = {index, cap, 0, index};
34719|  19.6M|    if (janet_checktype(key, JANET_NIL) || janet_checktype(value, JANET_NIL)) return;
  ------------------
  |  |  806|  39.2M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 748, False: 19.6M]
  |  |  |  Branch (806:6): [Folded, False: 19.6M]
  |  |  ------------------
  |  |  807|  39.2M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  39.2M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  19.6M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  19.6M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  19.6M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  19.6M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (janet_checktype(key, JANET_NIL) || janet_checktype(value, JANET_NIL)) return;
  ------------------
  |  |  806|  19.6M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 8, False: 19.6M]
  |  |  |  Branch (806:6): [Folded, False: 19.6M]
  |  |  ------------------
  |  |  807|  19.6M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  19.6M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  19.6M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  19.6M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  19.6M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  19.6M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
34720|  19.6M|    if (janet_checktype(key, JANET_NUMBER) && isnan(janet_unwrap_number(key))) return;
  ------------------
  |  |  806|  39.2M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 242, False: 19.6M]
  |  |  |  Branch (806:6): [True: 19.6M, Folded]
  |  |  ------------------
  |  |  807|  39.2M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|  19.6M|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 242, False: 19.6M]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 19.6M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  39.2M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (34720:47): [True: 0, False: 242]
  ------------------
34721|       |    /* Avoid extra items */
34722|  19.6M|    if (janet_struct_hash(st) == janet_struct_length(st)) return;
  ------------------
  |  | 1850|  19.6M|#define janet_struct_hash(t) (janet_struct_head(t)->hash)
  |  |  ------------------
  |  |  |  | 1846|  19.6M|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
                  if (janet_struct_hash(st) == janet_struct_length(st)) return;
  ------------------
  |  | 1848|  19.6M|#define janet_struct_length(t) (janet_struct_head(t)->length)
  |  |  ------------------
  |  |  |  | 1846|  19.6M|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (34722:9): [True: 0, False: 19.6M]
  ------------------
34723|  19.6M|    for (dist = 0, j = 0; j < 4; j += 2)
  ------------------
  |  Branch (34723:27): [True: 19.6M, False: 0]
  ------------------
34724|  21.3M|        for (i = bounds[j]; i < bounds[j + 1]; i++, dist++) {
  ------------------
  |  Branch (34724:29): [True: 21.3M, False: 250]
  ------------------
34725|  21.3M|            int status;
34726|  21.3M|            int32_t otherhash;
34727|  21.3M|            int32_t otherindex, otherdist;
34728|  21.3M|            JanetKV *kv = st + i;
34729|       |            /* We found an empty slot, so just add key and value */
34730|  21.3M|            if (janet_checktype(kv->key, JANET_NIL)) {
  ------------------
  |  |  806|  21.3M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 19.1M, False: 2.24M]
  |  |  |  Branch (806:6): [Folded, False: 21.3M]
  |  |  ------------------
  |  |  807|  21.3M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  21.3M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  21.3M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  21.3M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  21.3M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  21.3M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
34731|  19.1M|                kv->key = key;
34732|  19.1M|                kv->value = value;
34733|       |                /* Update the temporary count */
34734|  19.1M|                janet_struct_hash(st)++;
  ------------------
  |  | 1850|  19.1M|#define janet_struct_hash(t) (janet_struct_head(t)->hash)
  |  |  ------------------
  |  |  |  | 1846|  19.1M|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
34735|  19.1M|                return;
34736|  19.1M|            }
34737|       |            /* Robinhood hashing - check if colliding kv pair
34738|       |             * is closer to their source than current. We use robinhood
34739|       |             * hashing to ensure that equivalent structs that are constructed
34740|       |             * with different order have the same internal layout, and therefor
34741|       |             * will compare properly - i.e., {1 2 3 4} should equal {3 4 1 2}.
34742|       |             * Collisions are resolved via an insertion sort insertion. */
34743|  2.24M|            otherhash = janet_hash(kv->key);
34744|  2.24M|            otherindex = janet_maphash(cap, otherhash);
  ------------------
  |  |  396|  2.24M|#define janet_maphash(cap, hash) ((uint32_t)(hash) & (cap - 1))
  ------------------
34745|  2.24M|            otherdist = (i + cap - otherindex) & (cap - 1);
34746|  2.24M|            if (dist < otherdist)
  ------------------
  |  Branch (34746:17): [True: 3.46k, False: 2.23M]
  ------------------
34747|  3.46k|                status = -1;
34748|  2.23M|            else if (otherdist < dist)
  ------------------
  |  Branch (34748:22): [True: 293, False: 2.23M]
  ------------------
34749|    293|                status = 1;
34750|  2.23M|            else if (hash < otherhash)
  ------------------
  |  Branch (34750:22): [True: 1.74M, False: 497k]
  ------------------
34751|  1.74M|                status = -1;
34752|   497k|            else if (otherhash < hash)
  ------------------
  |  Branch (34752:22): [True: 500, False: 497k]
  ------------------
34753|    500|                status = 1;
34754|   497k|            else
34755|   497k|                status = janet_compare(key, kv->key);
34756|       |            /* If other is closer to their ideal slot */
34757|  2.24M|            if (status == 1) {
  ------------------
  |  Branch (34757:17): [True: 793, False: 2.24M]
  ------------------
34758|       |                /* Swap current kv pair with pair in slot */
34759|    793|                JanetKV temp = *kv;
34760|    793|                kv->key = key;
34761|    793|                kv->value = value;
34762|    793|                key = temp.key;
34763|    793|                value = temp.value;
34764|       |                /* Save dist and hash of new kv pair */
34765|    793|                dist = otherdist;
34766|    793|                hash = otherhash;
34767|  2.24M|            } else if (status == 0) {
  ------------------
  |  Branch (34767:24): [True: 491k, False: 1.75M]
  ------------------
34768|   491k|                if (replace) {
  ------------------
  |  Branch (34768:21): [True: 491k, False: 0]
  ------------------
34769|       |                    /* A key was added to the struct more than once - replace old value */
34770|   491k|                    kv->value = value;
34771|   491k|                }
34772|   491k|                return;
34773|   491k|            }
34774|  2.24M|        }
34775|  19.6M|}
janet_struct_put:
34777|  19.6M|void janet_struct_put(JanetKV *st, Janet key, Janet value) {
34778|  19.6M|    janet_struct_put_ext(st, key, value, 1);
34779|  19.6M|}
janet_struct_end:
34782|  1.74M|const JanetKV *janet_struct_end(JanetKV *st) {
34783|  1.74M|    if (janet_struct_hash(st) != janet_struct_length(st)) {
  ------------------
  |  | 1850|  1.74M|#define janet_struct_hash(t) (janet_struct_head(t)->hash)
  |  |  ------------------
  |  |  |  | 1846|  1.74M|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
                  if (janet_struct_hash(st) != janet_struct_length(st)) {
  ------------------
  |  | 1848|  1.74M|#define janet_struct_length(t) (janet_struct_head(t)->length)
  |  |  ------------------
  |  |  |  | 1846|  1.74M|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (34783:9): [True: 78, False: 1.73M]
  ------------------
34784|       |        /* Error building struct, probably duplicate values. We need to rebuild
34785|       |         * the struct using only the values that went in. The second creation should always
34786|       |         * succeed. */
34787|     78|        JanetKV *newst = janet_struct_begin(janet_struct_hash(st));
  ------------------
  |  | 1850|     78|#define janet_struct_hash(t) (janet_struct_head(t)->hash)
  |  |  ------------------
  |  |  |  | 1846|     78|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
34788|  1.51M|        for (int32_t i = 0; i < janet_struct_capacity(st); i++) {
  ------------------
  |  | 1849|  1.51M|#define janet_struct_capacity(t) (janet_struct_head(t)->capacity)
  |  |  ------------------
  |  |  |  | 1846|  1.51M|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (34788:29): [True: 1.51M, False: 78]
  ------------------
34789|  1.51M|            JanetKV *kv = st + i;
34790|  1.51M|            if (!janet_checktype(kv->key, JANET_NIL)) {
  ------------------
  |  |  806|  1.51M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 1.51M]
  |  |  ------------------
  |  |  807|  1.51M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  1.51M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  1.51M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  1.51M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.51M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.51M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (34790:17): [True: 2.18k, False: 1.51M]
  ------------------
34791|  2.18k|                janet_struct_put(newst, kv->key, kv->value);
34792|  2.18k|            }
34793|  1.51M|        }
34794|     78|        janet_struct_proto(newst) = janet_struct_proto(st);
  ------------------
  |  | 1851|     78|#define janet_struct_proto(t) (janet_struct_head(t)->proto)
  |  |  ------------------
  |  |  |  | 1846|     78|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
                      janet_struct_proto(newst) = janet_struct_proto(st);
  ------------------
  |  | 1851|     78|#define janet_struct_proto(t) (janet_struct_head(t)->proto)
  |  |  ------------------
  |  |  |  | 1846|     78|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
34795|     78|        st = newst;
34796|     78|    }
34797|  1.74M|    janet_struct_hash(st) = janet_kv_calchash(st, janet_struct_capacity(st));
  ------------------
  |  | 1850|  1.74M|#define janet_struct_hash(t) (janet_struct_head(t)->hash)
  |  |  ------------------
  |  |  |  | 1846|  1.74M|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
                  janet_struct_hash(st) = janet_kv_calchash(st, janet_struct_capacity(st));
  ------------------
  |  | 1849|  1.74M|#define janet_struct_capacity(t) (janet_struct_head(t)->capacity)
  |  |  ------------------
  |  |  |  | 1846|  1.74M|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
34798|  1.74M|    if (janet_struct_proto(st)) {
  ------------------
  |  | 1851|  1.74M|#define janet_struct_proto(t) (janet_struct_head(t)->proto)
  |  |  ------------------
  |  |  |  | 1846|  1.74M|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  |  |  |  Branch (1851:31): [True: 0, False: 1.74M]
  |  |  ------------------
  ------------------
34799|      0|        janet_struct_hash(st) += 2654435761u * janet_struct_hash(janet_struct_proto(st));
  ------------------
  |  | 1850|      0|#define janet_struct_hash(t) (janet_struct_head(t)->hash)
  |  |  ------------------
  |  |  |  | 1846|      0|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
                      janet_struct_hash(st) += 2654435761u * janet_struct_hash(janet_struct_proto(st));
  ------------------
  |  | 1850|      0|#define janet_struct_hash(t) (janet_struct_head(t)->hash)
  |  |  ------------------
  |  |  |  | 1846|      0|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
34800|      0|    }
34801|  1.74M|    return (const JanetKV *)st;
34802|  1.74M|}
janet_struct_rawget:
34805|  7.74k|Janet janet_struct_rawget(const JanetKV *st, Janet key) {
34806|  7.74k|    const JanetKV *kv = janet_struct_find(st, key);
34807|  7.74k|    return kv ? kv->value : janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (34807:12): [True: 7.74k, False: 0]
  ------------------
34808|  7.74k|}
janet_struct_get:
34811|  2.47M|Janet janet_struct_get(const JanetKV *st, Janet key) {
34812|  4.50M|    for (int i = JANET_MAX_PROTO_DEPTH; st && i; --i, st = janet_struct_proto(st)) {
  ------------------
  |  |  299|  2.47M|#define JANET_MAX_PROTO_DEPTH 200
  ------------------
                  for (int i = JANET_MAX_PROTO_DEPTH; st && i; --i, st = janet_struct_proto(st)) {
  ------------------
  |  | 1851|  2.02M|#define janet_struct_proto(t) (janet_struct_head(t)->proto)
  |  |  ------------------
  |  |  |  | 1846|  2.02M|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (34812:41): [True: 2.47M, False: 2.02M]
  |  Branch (34812:47): [True: 2.47M, False: 0]
  ------------------
34813|  2.47M|        const JanetKV *kv = janet_struct_find(st, key);
34814|  2.47M|        if (NULL != kv && !janet_checktype(kv->key, JANET_NIL)) {
  ------------------
  |  |  806|  2.47M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 2.47M]
  |  |  ------------------
  |  |  807|  2.47M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  2.47M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  2.47M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  2.47M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.47M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.47M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (34814:13): [True: 2.47M, False: 0]
  |  Branch (34814:27): [True: 448k, False: 2.02M]
  ------------------
34815|   448k|            return kv->value;
34816|   448k|        }
34817|  2.47M|    }
34818|  2.02M|    return janet_wrap_nil();
  ------------------
  |  |  831|  2.02M|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  2.02M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.02M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.02M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
34819|  2.47M|}
cfun_struct_rawget:
34942|  7.74k|              "nil without checking the prototype. Returns the value in the struct.") {
34943|  7.74k|    janet_fixarity(argc, 2);
34944|  7.74k|    JanetStruct st = janet_getstruct(argv, 0);
34945|  7.74k|    return janet_struct_rawget(st, argv[1]);
34946|  7.74k|}
janet_lib_struct:
34949|    267|void janet_lib_struct(JanetTable *env) {
34950|    267|    JanetRegExt struct_cfuns[] = {
34951|    267|        JANET_CORE_REG("struct/with-proto", cfun_struct_with_proto),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34952|    267|        JANET_CORE_REG("struct/getproto", cfun_struct_getproto),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34953|    267|        JANET_CORE_REG("struct/proto-flatten", cfun_struct_flatten),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34954|    267|        JANET_CORE_REG("struct/to-table", cfun_struct_to_table),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34955|    267|        JANET_CORE_REG("struct/rawget", cfun_struct_rawget),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
34956|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
34957|    267|    };
34958|       |    janet_core_cfuns_ext(env, NULL, struct_cfuns);
34959|    267|}
janet_symcache_init:
35004|    267|void janet_symcache_init() {
35005|    267|    janet_vm.cache_capacity = 1024;
35006|    267|    janet_vm.cache = janet_calloc(1, (size_t) janet_vm.cache_capacity * sizeof(const uint8_t *));
  ------------------
  |  | 2412|    267|#define janet_calloc(X, Y) calloc((X), (Y))
  ------------------
35007|    267|    if (NULL == janet_vm.cache) {
  ------------------
  |  Branch (35007:9): [True: 0, False: 267]
  ------------------
35008|      0|        JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
35009|      0|    }
35010|    267|    memset(&janet_vm.gensym_counter, '0', sizeof(janet_vm.gensym_counter));
35011|    267|    janet_vm.gensym_counter[0] = '_';
35012|    267|    janet_vm.cache_count = 0;
35013|    267|    janet_vm.cache_deleted = 0;
35014|    267|}
janet_symcache_deinit:
35017|    267|void janet_symcache_deinit() {
35018|    267|    janet_free((void *)janet_vm.cache);
  ------------------
  |  | 2415|    267|#define janet_free(X) free((X))
  ------------------
35019|       |    janet_vm.cache = NULL;
35020|    267|    janet_vm.cache_capacity = 0;
35021|    267|    janet_vm.cache_count = 0;
35022|    267|    janet_vm.cache_deleted = 0;
35023|    267|}
janet_symbol_deinit:
35125|  1.27M|void janet_symbol_deinit(const uint8_t *sym) {
35126|  1.27M|    int status = 0;
35127|  1.27M|    const uint8_t **bucket = janet_symcache_find(sym, &status);
  ------------------
  |  |35080|  1.27M|    janet_symcache_findmem((str), janet_string_length(str), janet_string_hash(str), (success))
  |  |  ------------------
  |  |  |  | 1813|  1.27M|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1812|  1.27M|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   janet_symcache_findmem((str), janet_string_length(str), janet_string_hash(str), (success))
  |  |  ------------------
  |  |  |  | 1814|  1.27M|#define janet_string_hash(s) (janet_string_head(s)->hash)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1812|  1.27M|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35128|  1.27M|    if (status) {
  ------------------
  |  Branch (35128:9): [True: 1.27M, False: 0]
  ------------------
35129|  1.27M|        janet_vm.cache_count--;
35130|  1.27M|        janet_vm.cache_deleted++;
35131|  1.27M|        *bucket = JANET_SYMCACHE_DELETED;
35132|  1.27M|    }
35133|  1.27M|}
janet_symbol:
35136|  25.7M|const uint8_t *janet_symbol(const uint8_t *str, int32_t len) {
35137|  25.7M|    int32_t hash = janet_string_calchash(str, len);
35138|  25.7M|    uint8_t *newstr;
35139|  25.7M|    int success = 0;
35140|  25.7M|    const uint8_t **bucket = janet_symcache_findmem(str, len, hash, &success);
35141|  25.7M|    if (success)
  ------------------
  |  Branch (35141:9): [True: 25.1M, False: 539k]
  ------------------
35142|  25.1M|        return *bucket;
35143|   539k|    JanetStringHead *head = janet_gcalloc(JANET_MEMORY_SYMBOL, sizeof(JanetStringHead) + (size_t) len + 1);
35144|   539k|    head->hash = hash;
35145|   539k|    head->length = len;
35146|   539k|    newstr = (uint8_t *)(head->data);
35147|   539k|    safe_memcpy(newstr, str, len);
35148|   539k|    newstr[len] = 0;
35149|   539k|    janet_symcache_put((const uint8_t *)newstr, bucket);
35150|   539k|    return newstr;
35151|  25.7M|}
janet_csymbol:
35154|  23.1M|const uint8_t *janet_csymbol(const char *cstr) {
35155|  23.1M|    return janet_symbol((const uint8_t *)cstr, (int32_t) strlen(cstr));
35156|  23.1M|}
janet_symbol_gen:
35179|   736k|const uint8_t *janet_symbol_gen(void) {
35180|   736k|    const uint8_t **bucket = NULL;
35181|   736k|    uint8_t *sym;
35182|   736k|    int32_t hash = 0;
35183|   736k|    int status;
35184|       |    /* Leave spaces for 6 base 64 digits and two dashes. That means 64^6 possible suffixes, which
35185|       |     * is enough for resolving collisions. */
35186|  1.51M|    do {
35187|  1.51M|        hash = janet_string_calchash(
35188|  1.51M|                   janet_vm.gensym_counter,
35189|  1.51M|                   sizeof(janet_vm.gensym_counter) - 1);
35190|  1.51M|        bucket = janet_symcache_findmem(
35191|  1.51M|                     janet_vm.gensym_counter,
35192|  1.51M|                     sizeof(janet_vm.gensym_counter) - 1,
35193|  1.51M|                     hash,
35194|  1.51M|                     &status);
35195|  1.51M|    } while (status && (inc_gensym(), 1));
  ------------------
  |  Branch (35195:14): [True: 782k, False: 736k]
  |  Branch (35195:24): [True: 782k, False: 0]
  ------------------
35196|   736k|    JanetStringHead *head = janet_gcalloc(JANET_MEMORY_SYMBOL, sizeof(JanetStringHead) + sizeof(janet_vm.gensym_counter));
35197|   736k|    head->length = sizeof(janet_vm.gensym_counter) - 1;
35198|   736k|    head->hash = hash;
35199|   736k|    sym = (uint8_t *)(head->data);
35200|   736k|    memcpy(sym, janet_vm.gensym_counter, sizeof(janet_vm.gensym_counter));
35201|   736k|    sym[head->length] = 0;
35202|   736k|    janet_symcache_put((const uint8_t *)sym, bucket);
35203|   736k|    return (const uint8_t *)sym;
35204|   736k|}
janet_table_init:
35280|  61.6k|JanetTable *janet_table_init(JanetTable *table, int32_t capacity) {
35281|  61.6k|    return janet_table_init_impl(table, capacity, 1);
35282|  61.6k|}
janet_table_init_raw:
35285|    801|JanetTable *janet_table_init_raw(JanetTable *table, int32_t capacity) {
35286|    801|    return janet_table_init_impl(table, capacity, 0);
35287|    801|}
janet_table_deinit:
35290|  62.4k|void janet_table_deinit(JanetTable *table) {
35291|  62.4k|    if (table->gc.flags & JANET_TABLE_FLAG_STACK) {
  ------------------
  |  |35240|  62.4k|#define JANET_TABLE_FLAG_STACK 0x10000
  ------------------
  |  Branch (35291:9): [True: 61.6k, False: 801]
  ------------------
35292|  61.6k|        janet_sfree(table->data);
35293|  61.6k|    } else {
35294|    801|        janet_free(table->data);
  ------------------
  |  | 2415|    801|#define janet_free(X) free((X))
  ------------------
35295|    801|    }
35296|  62.4k|}
janet_table:
35300|   342k|JanetTable *janet_table(int32_t capacity) {
35301|   342k|    JanetTable *table = janet_gcalloc(JANET_MEMORY_TABLE, sizeof(JanetTable));
35302|   342k|    return janet_table_init_impl(table, capacity, 0);
35303|   342k|}
janet_table_find:
35322|  6.87M|JanetKV *janet_table_find(JanetTable *t, Janet key) {
35323|  6.87M|    return (JanetKV *) janet_dict_find(t->data, t->capacity, key);
35324|  6.87M|}
janet_table_get:
35358|  2.68M|Janet janet_table_get(JanetTable *t, Janet key) {
35359|  3.67M|    for (int i = JANET_MAX_PROTO_DEPTH; t && i; t = t->proto, --i) {
  ------------------
  |  |  299|  2.68M|#define JANET_MAX_PROTO_DEPTH 200
  ------------------
  |  Branch (35359:41): [True: 2.68M, False: 988k]
  |  Branch (35359:46): [True: 2.68M, False: 0]
  ------------------
35360|  2.68M|        JanetKV *bucket = janet_table_find(t, key);
35361|  2.68M|        if (NULL != bucket && !janet_checktype(bucket->key, JANET_NIL))
  ------------------
  |  |  806|  2.68M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 2.68M]
  |  |  ------------------
  |  |  807|  2.68M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  2.68M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  2.68M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  2.68M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.68M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.68M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (35361:13): [True: 2.68M, False: 0]
  |  Branch (35361:31): [True: 1.69M, False: 988k]
  ------------------
35362|  1.69M|            return bucket->value;
35363|  2.68M|    }
35364|   988k|    return janet_wrap_nil();
  ------------------
  |  |  831|   988k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|   988k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   988k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   988k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35365|  2.68M|}
janet_table_get_keyword:
35368|  2.31M|Janet janet_table_get_keyword(JanetTable *t, const char *keyword) {
35369|  2.31M|    int32_t keyword_len = (int32_t) strlen(keyword);
35370|  3.86M|    for (int i = JANET_MAX_PROTO_DEPTH; t && i; t = t->proto, --i) {
  ------------------
  |  |  299|  2.31M|#define JANET_MAX_PROTO_DEPTH 200
  ------------------
  |  Branch (35370:41): [True: 2.31M, False: 1.54M]
  |  Branch (35370:46): [True: 2.31M, False: 0]
  ------------------
35371|  2.31M|        JanetKV *bucket = (JanetKV *) janet_dict_find_keyword(t->data, t->capacity, (const uint8_t *) keyword, keyword_len);
35372|  2.31M|        if (NULL != bucket && !janet_checktype(bucket->key, JANET_NIL))
  ------------------
  |  |  806|  2.31M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 2.31M]
  |  |  ------------------
  |  |  807|  2.31M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  2.31M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  2.31M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  2.31M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.31M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.31M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (35372:13): [True: 2.31M, False: 0]
  |  Branch (35372:31): [True: 774k, False: 1.54M]
  ------------------
35373|   774k|            return bucket->value;
35374|  2.31M|    }
35375|  1.54M|    return janet_wrap_nil();
  ------------------
  |  |  831|  1.54M|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  1.54M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.54M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.54M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35376|  2.31M|}
janet_table_rawget:
35391|  1.15k|Janet janet_table_rawget(JanetTable *t, Janet key) {
35392|  1.15k|    JanetKV *bucket = janet_table_find(t, key);
35393|  1.15k|    if (NULL != bucket && !janet_checktype(bucket->key, JANET_NIL))
  ------------------
  |  |  806|  1.15k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 1.15k]
  |  |  ------------------
  |  |  807|  1.15k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  1.15k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  1.15k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  1.15k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.15k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.15k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (35393:9): [True: 1.15k, False: 0]
  |  Branch (35393:27): [True: 1.15k, False: 4]
  ------------------
35394|  1.15k|        return bucket->value;
35395|      4|    else
35396|      4|        return janet_wrap_nil();
  ------------------
  |  |  831|      4|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      4|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      4|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      4|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35397|  1.15k|}
janet_table_remove:
35401|   364k|Janet janet_table_remove(JanetTable *t, Janet key) {
35402|   364k|    JanetKV *bucket = janet_table_find(t, key);
35403|   364k|    if (NULL != bucket && !janet_checktype(bucket->key, JANET_NIL)) {
  ------------------
  |  |  806|   364k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 364k]
  |  |  ------------------
  |  |  807|   364k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   364k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   364k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   364k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   364k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   364k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (35403:9): [True: 364k, False: 0]
  |  Branch (35403:27): [True: 165k, False: 199k]
  ------------------
35404|   165k|        Janet ret = bucket->value;
35405|   165k|        t->count--;
35406|   165k|        t->deleted++;
35407|   165k|        bucket->key = janet_wrap_nil();
  ------------------
  |  |  831|   165k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|   165k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   165k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   165k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35408|   165k|        bucket->value = janet_wrap_false();
  ------------------
  |  |  833|   165k|#define janet_wrap_false() janet_nanbox_from_payload(JANET_BOOLEAN, 0)
  |  |  ------------------
  |  |  |  |  822|   165k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   165k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   165k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35409|   165k|        return ret;
35410|   199k|    } else {
35411|   199k|        return janet_wrap_nil();
  ------------------
  |  |  831|   199k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|   199k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   199k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   199k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35412|   199k|    }
35413|   364k|}
janet_table_put:
35416|  2.38M|void janet_table_put(JanetTable *t, Janet key, Janet value) {
35417|  2.38M|    if (janet_checktype(key, JANET_NIL)) return;
  ------------------
  |  |  806|  2.38M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 2.38M]
  |  |  |  Branch (806:6): [Folded, False: 2.38M]
  |  |  ------------------
  |  |  807|  2.38M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  2.38M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  2.38M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  2.38M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.38M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.38M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35418|  2.38M|    if (janet_checktype(key, JANET_NUMBER) && isnan(janet_unwrap_number(key))) return;
  ------------------
  |  |  806|  4.76M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 1.09k, False: 2.38M]
  |  |  |  Branch (806:6): [True: 2.38M, Folded]
  |  |  ------------------
  |  |  807|  4.76M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|  2.38M|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 1.09k, False: 2.38M]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 2.38M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  4.76M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (35418:47): [True: 0, False: 1.09k]
  ------------------
35419|  2.38M|    if (janet_checktype(value, JANET_NIL)) {
  ------------------
  |  |  806|  2.38M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 172k, False: 2.21M]
  |  |  |  Branch (806:6): [Folded, False: 2.38M]
  |  |  ------------------
  |  |  807|  2.38M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  2.38M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  2.38M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  2.38M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.38M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.38M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35420|   172k|        janet_table_remove(t, key);
35421|  2.21M|    } else {
35422|  2.21M|        JanetKV *bucket = janet_table_find(t, key);
35423|  2.21M|        if (NULL != bucket && !janet_checktype(bucket->key, JANET_NIL)) {
  ------------------
  |  |  806|  2.21M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 2.21M]
  |  |  ------------------
  |  |  807|  2.21M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  2.21M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  2.21M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  2.21M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.21M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.21M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (35423:13): [True: 2.21M, False: 0]
  |  Branch (35423:31): [True: 760k, False: 1.45M]
  ------------------
35424|   760k|            bucket->value = value;
35425|  1.45M|        } else {
35426|  1.45M|            if (NULL == bucket || 2 * (t->count + t->deleted + 1) > t->capacity) {
  ------------------
  |  Branch (35426:17): [True: 0, False: 1.45M]
  |  Branch (35426:35): [True: 168k, False: 1.28M]
  ------------------
35427|   168k|                janet_table_rehash(t, janet_tablen(2 * t->count + 2));
35428|   168k|                bucket = janet_table_find(t, key);
35429|   168k|            }
35430|  1.45M|            if (janet_checktype(bucket->value, JANET_BOOLEAN))
  ------------------
  |  |  806|  1.45M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 1.45M]
  |  |  |  Branch (806:6): [Folded, False: 1.45M]
  |  |  ------------------
  |  |  807|  1.45M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  1.45M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  1.45M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  1.45M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.45M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.45M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35431|      0|                --t->deleted;
35432|  1.45M|            bucket->key = key;
35433|  1.45M|            bucket->value = value;
35434|  1.45M|            ++t->count;
35435|  1.45M|        }
35436|  2.21M|    }
35437|  2.38M|}
janet_table_clone:
35466|  1.80k|JanetTable *janet_table_clone(JanetTable *table) {
35467|  1.80k|    JanetTable *newTable = janet_gcalloc(JANET_MEMORY_TABLE, sizeof(JanetTable));
35468|  1.80k|    newTable->count = table->count;
35469|  1.80k|    newTable->capacity = table->capacity;
35470|  1.80k|    newTable->deleted = table->deleted;
35471|  1.80k|    newTable->proto = table->proto;
35472|  1.80k|    newTable->data = array_allocate(sizeof(JanetKV), newTable->capacity);
35473|  1.80k|    if (NULL == newTable->data) {
  ------------------
  |  Branch (35473:9): [True: 0, False: 1.80k]
  ------------------
35474|      0|        JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
35475|      0|    }
35476|  1.80k|    memcpy(newTable->data, table->data, (size_t) table->capacity * sizeof(JanetKV));
35477|  1.80k|    return newTable;
35478|  1.80k|}
janet_table_to_struct:
35502|  1.76k|const JanetKV *janet_table_to_struct(JanetTable *t) {
35503|  1.76k|    JanetKV *st = janet_struct_begin(t->count);
35504|  1.76k|    JanetKV *kv = t->data;
35505|  1.76k|    JanetKV *end = t->data + t->capacity;
35506|  75.4k|    while (kv < end) {
  ------------------
  |  Branch (35506:12): [True: 73.6k, False: 1.76k]
  ------------------
35507|  73.6k|        if (!janet_checktype(kv->key, JANET_NIL))
  ------------------
  |  |  806|  73.6k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 73.6k]
  |  |  ------------------
  |  |  807|  73.6k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  73.6k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  73.6k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  73.6k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  73.6k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  73.6k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (35507:13): [True: 21.7k, False: 51.8k]
  ------------------
35508|  21.7k|            janet_struct_put(st, kv->key, kv->value);
35509|  73.6k|        kv++;
35510|  73.6k|    }
35511|  1.76k|    return janet_struct_end(st);
35512|  1.76k|}
cfun_table_tostruct:
35600|  1.76k|              "prototype.") {
35601|  1.76k|    janet_arity(argc, 1, 2);
35602|  1.76k|    JanetTable *t = janet_gettable(argv, 0);
35603|  1.76k|    JanetStruct proto = janet_optstruct(argv, argc, 1, NULL);
35604|  1.76k|    JanetStruct st = janet_table_to_struct(t);
35605|  1.76k|    janet_struct_proto(st) = proto;
  ------------------
  |  | 1851|  1.76k|#define janet_struct_proto(t) (janet_struct_head(t)->proto)
  |  |  ------------------
  |  |  |  | 1846|  1.76k|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
35606|  1.76k|    return janet_wrap_struct(st);
  ------------------
  |  |  842|  1.76k|#define janet_wrap_struct(s) janet_nanbox_wrap_c((s), JANET_STRUCT)
  |  |  ------------------
  |  |  |  |  828|  1.76k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.76k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.76k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35607|  1.76k|}
cfun_table_rawget:
35613|  1.15k|              "nil without checking the prototype. Returns the value in the table.") {
35614|  1.15k|    janet_fixarity(argc, 2);
35615|  1.15k|    JanetTable *table = janet_gettable(argv, 0);
35616|  1.15k|    return janet_table_rawget(table, argv[1]);
35617|  1.15k|}
janet_lib_table:
35646|    267|void janet_lib_table(JanetTable *env) {
35647|    267|    JanetRegExt table_cfuns[] = {
35648|    267|        JANET_CORE_REG("table/new", cfun_table_new),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
35649|    267|        JANET_CORE_REG("table/weak", cfun_table_weak),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
35650|    267|        JANET_CORE_REG("table/weak-keys", cfun_table_weak_keys),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
35651|    267|        JANET_CORE_REG("table/weak-values", cfun_table_weak_values),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
35652|    267|        JANET_CORE_REG("table/to-struct", cfun_table_tostruct),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
35653|    267|        JANET_CORE_REG("table/getproto", cfun_table_getproto),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
35654|    267|        JANET_CORE_REG("table/setproto", cfun_table_setproto),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
35655|    267|        JANET_CORE_REG("table/rawget", cfun_table_rawget),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
35656|    267|        JANET_CORE_REG("table/clone", cfun_table_clone),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
35657|    267|        JANET_CORE_REG("table/clear", cfun_table_clear),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
35658|    267|        JANET_CORE_REG("table/proto-flatten", cfun_table_proto_flatten),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
35659|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
35660|    267|    };
35661|       |    janet_core_cfuns_ext(env, NULL, table_cfuns);
35662|    267|}
janet_tuple_begin:
35701|  11.6M|Janet *janet_tuple_begin(int32_t length) {
35702|  11.6M|    size_t size = sizeof(JanetTupleHead) + ((size_t) length * sizeof(Janet));
35703|  11.6M|    JanetTupleHead *head = janet_gcalloc(JANET_MEMORY_TUPLE, size);
35704|  11.6M|    head->sm_line = -1;
35705|  11.6M|    head->sm_column = -1;
35706|  11.6M|    head->length = length;
35707|  11.6M|    return (Janet *)(head->data);
35708|  11.6M|}
janet_tuple_end:
35711|  11.6M|const Janet *janet_tuple_end(Janet *tuple) {
35712|  11.6M|    janet_tuple_hash(tuple) = janet_array_calchash(tuple, janet_tuple_length(tuple));
  ------------------
  |  | 1803|  11.6M|#define janet_tuple_hash(t) (janet_tuple_head(t)->hash)
  |  |  ------------------
  |  |  |  | 1800|  11.6M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                  janet_tuple_hash(tuple) = janet_array_calchash(tuple, janet_tuple_length(tuple));
  ------------------
  |  | 1802|  11.6M|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|  11.6M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
35713|  11.6M|    return (const Janet *)tuple;
35714|  11.6M|}
janet_tuple_n:
35717|  7.51M|const Janet *janet_tuple_n(const Janet *values, int32_t n) {
35718|  7.51M|    Janet *t = janet_tuple_begin(n);
35719|  7.51M|    safe_memcpy(t, values, sizeof(Janet) * n);
35720|  7.51M|    return janet_tuple_end(t);
35721|  7.51M|}
cfun_tuple_brackets:
35727|   268k|              "Creates a new bracketed tuple containing the elements xs.") {
35728|   268k|    const Janet *tup = janet_tuple_n(argv, argc);
35729|   268k|    janet_tuple_flag(tup) |= JANET_TUPLE_FLAG_BRACKETCTOR;
  ------------------
  |  | 1806|   268k|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|   268k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                  janet_tuple_flag(tup) |= JANET_TUPLE_FLAG_BRACKETCTOR;
  ------------------
  |  | 1798|   268k|#define JANET_TUPLE_FLAG_BRACKETCTOR 0x10000
  ------------------
35730|   268k|    return janet_wrap_tuple(tup);
  ------------------
  |  |  843|   268k|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|   268k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   268k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   268k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35731|   268k|}
cfun_tuple_slice:
35747|  2.36M|              "raised.") {
35748|  2.36M|    JanetView view = janet_getindexed(argv, 0);
35749|  2.36M|    JanetRange range = janet_getslice(argc, argv);
35750|  2.36M|    return janet_wrap_tuple(janet_tuple_n(view.items + range.start, range.end - range.start));
  ------------------
  |  |  843|  2.36M|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|  2.36M|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.36M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.36M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35751|  2.36M|}
cfun_tuple_type:
35759|  2.39M|              "the compiler.") {
35760|  2.39M|    janet_fixarity(argc, 1);
35761|  2.39M|    const Janet *tup = janet_gettuple(argv, 0);
35762|  2.39M|    if (janet_tuple_flag(tup) & JANET_TUPLE_FLAG_BRACKETCTOR) {
  ------------------
  |  | 1806|  2.39M|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|  2.39M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                  if (janet_tuple_flag(tup) & JANET_TUPLE_FLAG_BRACKETCTOR) {
  ------------------
  |  | 1798|  2.39M|#define JANET_TUPLE_FLAG_BRACKETCTOR 0x10000
  ------------------
  |  Branch (35762:9): [True: 268k, False: 2.13M]
  ------------------
35763|   268k|        return janet_ckeywordv("brackets");
  ------------------
  |  | 1843|   268k|#define janet_ckeywordv(cstr) janet_wrap_keyword(janet_ckeyword(cstr))
  |  |  ------------------
  |  |  |  |  850|   268k|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|   268k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|   268k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|   268k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35764|  2.13M|    } else {
35765|  2.13M|        return janet_ckeywordv("parens");
  ------------------
  |  | 1843|  2.13M|#define janet_ckeywordv(cstr) janet_wrap_keyword(janet_ckeyword(cstr))
  |  |  ------------------
  |  |  |  |  850|  2.13M|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|  2.13M|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  2.13M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  2.13M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35766|  2.13M|    }
35767|  2.39M|}
cfun_tuple_sourcemap:
35772|  1.04M|              "which is another tuple `[line column]`.") {
35773|  1.04M|    janet_fixarity(argc, 1);
35774|  1.04M|    const Janet *tup = janet_gettuple(argv, 0);
35775|  1.04M|    Janet contents[2];
35776|  1.04M|    contents[0] = janet_wrap_integer(janet_tuple_head(tup)->sm_line);
  ------------------
  |  |  967|  1.04M|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|  1.04M|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
35777|  1.04M|    contents[1] = janet_wrap_integer(janet_tuple_head(tup)->sm_column);
  ------------------
  |  |  967|  1.04M|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|  1.04M|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
35778|  1.04M|    return janet_wrap_tuple(janet_tuple_n(contents, 2));
  ------------------
  |  |  843|  1.04M|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|  1.04M|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.04M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.04M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35779|  1.04M|}
cfun_tuple_setmap:
35784|  1.04M|              "`col` should be integers.") {
35785|  1.04M|    janet_fixarity(argc, 3);
35786|  1.04M|    const Janet *tup = janet_gettuple(argv, 0);
35787|  1.04M|    janet_tuple_head(tup)->sm_line = janet_getinteger(argv, 1);
  ------------------
  |  | 1800|  1.04M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  ------------------
35788|       |    janet_tuple_head(tup)->sm_column = janet_getinteger(argv, 2);
  ------------------
  |  | 1800|  1.04M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  ------------------
35789|  1.04M|    return argv[0];
35790|  1.04M|}
janet_lib_tuple:
35821|    267|void janet_lib_tuple(JanetTable *env) {
35822|    267|    JanetRegExt tuple_cfuns[] = {
35823|    267|        JANET_CORE_REG("tuple/brackets", cfun_tuple_brackets),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
35824|    267|        JANET_CORE_REG("tuple/slice", cfun_tuple_slice),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
35825|    267|        JANET_CORE_REG("tuple/type", cfun_tuple_type),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
35826|    267|        JANET_CORE_REG("tuple/sourcemap", cfun_tuple_sourcemap),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
35827|    267|        JANET_CORE_REG("tuple/setmap", cfun_tuple_setmap),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
35828|    267|        JANET_CORE_REG("tuple/join", cfun_tuple_join),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
35829|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
35830|    267|    };
35831|       |    janet_core_cfuns_ext(env, NULL, tuple_cfuns);
35832|    267|}
janet_hash_mix:
35958|   174M|uint32_t janet_hash_mix(uint32_t input, uint32_t more) {
35959|   174M|    uint32_t mix1 = (more + 0x9e3779b9 + (input << 6) + (input >> 2));
35960|   174M|    return input ^ (0x9e3779b9 + (mix1 << 6) + (mix1 >> 2));
35961|   174M|}
janet_string_calchash:
35965|  32.6M|int32_t janet_string_calchash(const uint8_t *str, int32_t len) {
35966|  32.6M|    if (NULL == str || len == 0) return 5381;
  ------------------
  |  Branch (35966:9): [True: 0, False: 32.6M]
  |  Branch (35966:24): [True: 1.56M, False: 31.0M]
  ------------------
35967|  31.0M|    const uint8_t *end = str + len;
35968|  31.0M|    uint32_t hash = 5381;
35969|   311M|    while (str < end)
  ------------------
  |  Branch (35969:12): [True: 280M, False: 31.0M]
  ------------------
35970|   280M|        hash = (hash << 5) + hash + *str++;
35971|  31.0M|    hash = janet_hash_mix(hash, (uint32_t) len);
35972|  31.0M|    return (int32_t) hash;
35973|  32.6M|}
janet_array_calchash:
36088|  11.6M|int32_t janet_array_calchash(const Janet *array, int32_t len) {
36089|  11.6M|    const Janet *end = array + len;
36090|  11.6M|    uint32_t hash = 33;
36091|  43.5M|    while (array < end) {
  ------------------
  |  Branch (36091:12): [True: 31.8M, False: 11.6M]
  ------------------
36092|  31.8M|        hash = janet_hash_mix(hash, janet_hash(*array++));
36093|  31.8M|    }
36094|  11.6M|    return (int32_t) hash;
36095|  11.6M|}
janet_kv_calchash:
36098|  1.74M|int32_t janet_kv_calchash(const JanetKV *kvs, int32_t len) {
36099|  1.74M|    const JanetKV *end = kvs + len;
36100|  1.74M|    uint32_t hash = 33;
36101|  57.4M|    while (kvs < end) {
  ------------------
  |  Branch (36101:12): [True: 55.6M, False: 1.74M]
  ------------------
36102|  55.6M|        hash = janet_hash_mix(hash, janet_hash(kvs->key));
36103|  55.6M|        hash = janet_hash_mix(hash, janet_hash(kvs->value));
36104|  55.6M|        kvs++;
36105|  55.6M|    }
36106|  1.74M|    return (int32_t) hash;
36107|  1.74M|}
janet_tablen:
36111|  2.31M|int32_t janet_tablen(int32_t n) {
36112|  2.31M|    if (n < 0) return 0;
  ------------------
  |  Branch (36112:9): [True: 0, False: 2.31M]
  ------------------
36113|  2.31M|    n |= n >> 1;
36114|  2.31M|    n |= n >> 2;
36115|  2.31M|    n |= n >> 4;
36116|  2.31M|    n |= n >> 8;
36117|  2.31M|    n |= n >> 16;
36118|  2.31M|    return n == INT32_MAX ? INT32_MAX : n + 1;
  ------------------
  |  Branch (36118:12): [True: 0, False: 2.31M]
  ------------------
36119|  2.31M|}
safe_memcpy:
36122|  17.2M|void safe_memcpy(void *dest, const void *src, size_t len) {
36123|  17.2M|    if (!len) return;
  ------------------
  |  Branch (36123:9): [True: 5.08M, False: 12.2M]
  ------------------
36124|  12.2M|    memcpy(dest, src, len);
36125|  12.2M|}
janet_dict_find_deep:
36129|   724k|const JanetKV *janet_dict_find_deep(const JanetKV *buckets, int32_t cap, Janet key) {
36130|   724k|    int32_t index = janet_maphash(cap, janet_hash(key));
  ------------------
  |  |  396|   724k|#define janet_maphash(cap, hash) ((uint32_t)(hash) & (cap - 1))
  ------------------
36131|   724k|    int32_t i;
36132|   724k|    const JanetKV *first_bucket = NULL;
36133|       |    /* Higher half */
36134|  1.60M|    for (i = index; i < cap; i++) {
  ------------------
  |  Branch (36134:21): [True: 1.60M, False: 4.03k]
  ------------------
36135|  1.60M|        const JanetKV *kv = buckets + i;
36136|  1.60M|        if (janet_checktype(kv->key, JANET_NIL)) {
  ------------------
  |  |  806|  1.60M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 1.02M, False: 581k]
  |  |  |  Branch (806:6): [Folded, False: 1.60M]
  |  |  ------------------
  |  |  807|  1.60M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  1.60M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  1.60M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  1.60M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.60M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.60M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36137|  1.02M|            if (janet_checktype(kv->value, JANET_NIL)) {
  ------------------
  |  |  806|  1.02M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 575k, False: 447k]
  |  |  |  Branch (806:6): [Folded, False: 1.02M]
  |  |  ------------------
  |  |  807|  1.02M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  1.02M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  1.02M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  1.02M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.02M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.02M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36138|   575k|                return kv;
36139|   575k|            } else if (NULL == first_bucket) {
  ------------------
  |  Branch (36139:24): [True: 115k, False: 331k]
  ------------------
36140|   115k|                first_bucket = kv;
36141|   115k|            }
36142|  1.02M|        } else if (janet_bitwise_same(kv->key, key) || janet_equals(kv->key, key)) {
  ------------------
  |  |  401|  1.16M|#define janet_bitwise_same(x, y) (janet_u64(x) == janet_u64(y))
  |  |  ------------------
  |  |  |  |  788|   581k|#define janet_u64(x) ((x).u64)
  |  |  ------------------
  |  |               #define janet_bitwise_same(x, y) (janet_u64(x) == janet_u64(y))
  |  |  ------------------
  |  |  |  |  788|   581k|#define janet_u64(x) ((x).u64)
  |  |  ------------------
  |  |  |  Branch (401:34): [True: 137k, False: 443k]
  |  |  ------------------
  ------------------
  |  Branch (36142:56): [True: 6.78k, False: 437k]
  ------------------
36143|   144k|            return buckets + i;
36144|   144k|        }
36145|  1.60M|    }
36146|       |    /* Lower half */
36147|  5.82k|    for (i = 0; i < index; i++) {
  ------------------
  |  Branch (36147:17): [True: 5.82k, False: 0]
  ------------------
36148|  5.82k|        const JanetKV *kv = buckets + i;
36149|  5.82k|        if (janet_checktype(kv->key, JANET_NIL)) {
  ------------------
  |  |  806|  5.82k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 2.98k, False: 2.84k]
  |  |  |  Branch (806:6): [Folded, False: 5.82k]
  |  |  ------------------
  |  |  807|  5.82k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  5.82k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  5.82k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  5.82k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  5.82k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  5.82k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36150|  2.98k|            if (janet_checktype(kv->value, JANET_NIL)) {
  ------------------
  |  |  806|  2.98k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 2.56k, False: 420]
  |  |  |  Branch (806:6): [Folded, False: 2.98k]
  |  |  ------------------
  |  |  807|  2.98k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  2.98k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  2.98k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  2.98k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.98k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.98k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36151|  2.56k|                return kv;
36152|  2.56k|            } else if (NULL == first_bucket) {
  ------------------
  |  Branch (36152:24): [True: 106, False: 314]
  ------------------
36153|    106|                first_bucket = kv;
36154|    106|            }
36155|  2.98k|        } else if (janet_bitwise_same(kv->key, key) || janet_equals(kv->key, key)) {
  ------------------
  |  |  401|  5.68k|#define janet_bitwise_same(x, y) (janet_u64(x) == janet_u64(y))
  |  |  ------------------
  |  |  |  |  788|  2.84k|#define janet_u64(x) ((x).u64)
  |  |  ------------------
  |  |               #define janet_bitwise_same(x, y) (janet_u64(x) == janet_u64(y))
  |  |  ------------------
  |  |  |  |  788|  2.84k|#define janet_u64(x) ((x).u64)
  |  |  ------------------
  |  |  |  Branch (401:34): [True: 1.42k, False: 1.42k]
  |  |  ------------------
  ------------------
  |  Branch (36155:56): [True: 49, False: 1.37k]
  ------------------
36156|  1.46k|            return buckets + i;
36157|  1.46k|        }
36158|  5.82k|    }
36159|      0|    return first_bucket;
36160|  4.03k|}
janet_dict_find_keyword:
36166|  2.31M|    const uint8_t *cstr, int32_t cstr_len) {
36167|  2.31M|    int32_t hash = janet_string_calchash(cstr, cstr_len);
36168|  2.31M|    int32_t index = janet_maphash(cap, hash);
  ------------------
  |  |  396|  2.31M|#define janet_maphash(cap, hash) ((uint32_t)(hash) & (cap - 1))
  ------------------
36169|  2.31M|    int32_t i;
36170|  2.31M|    const JanetKV *first_bucket = NULL;
36171|       |    /* Higher half */
36172|  3.69M|    for (i = index; i < cap; i++) {
  ------------------
  |  Branch (36172:21): [True: 3.32M, False: 370k]
  ------------------
36173|  3.32M|        const JanetKV *kv = buckets + i;
36174|  3.32M|        if (janet_checktype(kv->key, JANET_NIL)) {
  ------------------
  |  |  806|  3.32M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 1.17M, False: 2.14M]
  |  |  |  Branch (806:6): [Folded, False: 3.32M]
  |  |  ------------------
  |  |  807|  3.32M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  3.32M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  3.32M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  3.32M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  3.32M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  3.32M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36175|  1.17M|            if (janet_checktype(kv->value, JANET_NIL)) {
  ------------------
  |  |  806|  1.17M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 1.17M, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 1.17M]
  |  |  ------------------
  |  |  807|  1.17M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  1.17M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  1.17M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  1.17M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.17M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.17M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36176|  1.17M|                return kv;
36177|  1.17M|            } else if (NULL == first_bucket) {
  ------------------
  |  Branch (36177:24): [True: 0, False: 0]
  ------------------
36178|      0|                first_bucket = kv;
36179|      0|            }
36180|  2.14M|        } else if (janet_checktype(kv->key, JANET_KEYWORD)) {
  ------------------
  |  |  806|  2.14M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 2.14M, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 2.14M]
  |  |  ------------------
  |  |  807|  2.14M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  2.14M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  2.14M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  2.14M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.14M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.14M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36181|       |            /* Works for symbol and keyword, too */
36182|  2.14M|            JanetString str = janet_unwrap_string(kv->key);
  ------------------
  |  |  863|  2.14M|#define janet_unwrap_string(x) ((JanetString)janet_nanbox_to_pointer(x))
  ------------------
36183|  2.14M|            int32_t len = janet_string_length(str);
  ------------------
  |  | 1813|  2.14M|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|  2.14M|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
36184|  2.14M|            if (hash == janet_string_hash(str) && len == cstr_len && !memcmp(str, cstr, len)) {
  ------------------
  |  | 1814|  4.29M|#define janet_string_hash(s) (janet_string_head(s)->hash)
  |  |  ------------------
  |  |  |  | 1812|  2.14M|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (36184:17): [True: 774k, False: 1.37M]
  |  Branch (36184:51): [True: 774k, False: 0]
  |  Branch (36184:70): [True: 774k, False: 0]
  ------------------
36185|   774k|                return buckets + i;
36186|   774k|            }
36187|  2.14M|        }
36188|  3.32M|    }
36189|       |    /* Lower half */
36190|   370k|    for (i = 0; i < index; i++) {
  ------------------
  |  Branch (36190:17): [True: 370k, False: 0]
  ------------------
36191|   370k|        const JanetKV *kv = buckets + i;
36192|   370k|        if (janet_checktype(kv->key, JANET_NIL)) {
  ------------------
  |  |  806|   370k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 370k, False: 70]
  |  |  |  Branch (806:6): [Folded, False: 370k]
  |  |  ------------------
  |  |  807|   370k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   370k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   370k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   370k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   370k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   370k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36193|   370k|            if (janet_checktype(kv->value, JANET_NIL)) {
  ------------------
  |  |  806|   370k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 370k, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 370k]
  |  |  ------------------
  |  |  807|   370k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   370k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   370k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   370k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   370k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   370k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36194|   370k|                return kv;
36195|   370k|            } else if (NULL == first_bucket) {
  ------------------
  |  Branch (36195:24): [True: 0, False: 0]
  ------------------
36196|      0|                first_bucket = kv;
36197|      0|            }
36198|   370k|        } else if (janet_checktype(kv->key, JANET_KEYWORD)) {
  ------------------
  |  |  806|     70|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 70, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 70]
  |  |  ------------------
  |  |  807|     70|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|     70|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|     70|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|     70|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|     70|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|     70|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36199|       |            /* Works for symbol and keyword, too */
36200|     70|            JanetString str = janet_unwrap_string(kv->key);
  ------------------
  |  |  863|     70|#define janet_unwrap_string(x) ((JanetString)janet_nanbox_to_pointer(x))
  ------------------
36201|     70|            int32_t len = janet_string_length(str);
  ------------------
  |  | 1813|     70|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|     70|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
36202|     70|            if (hash == janet_string_hash(str) && len == cstr_len && !memcmp(str, cstr, len)) {
  ------------------
  |  | 1814|    140|#define janet_string_hash(s) (janet_string_head(s)->hash)
  |  |  ------------------
  |  |  |  | 1812|     70|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (36202:17): [True: 0, False: 70]
  |  Branch (36202:51): [True: 0, False: 0]
  |  Branch (36202:70): [True: 0, False: 0]
  ------------------
36203|      0|                return buckets + i;
36204|      0|            }
36205|     70|        }
36206|   370k|    }
36207|      0|    return first_bucket;
36208|   370k|}
janet_dictionary_next:
36220|    316|const JanetKV *janet_dictionary_next(const JanetKV *kvs, int32_t cap, const JanetKV *kv) {
36221|    316|    const JanetKV *end = kvs + cap;
36222|    316|    kv = (kv == NULL) ? kvs : kv + 1;
  ------------------
  |  Branch (36222:10): [True: 60, False: 256]
  ------------------
36223|    668|    while (kv < end) {
  ------------------
  |  Branch (36223:12): [True: 608, False: 60]
  ------------------
36224|    608|        if (!janet_checktype(kv->key, JANET_NIL))
  ------------------
  |  |  806|    608|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 608]
  |  |  ------------------
  |  |  807|    608|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|    608|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|    608|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|    608|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    608|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    608|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (36224:13): [True: 256, False: 352]
  ------------------
36225|    256|            return kv;
36226|    352|        kv++;
36227|    352|    }
36228|     60|    return NULL;
36229|    316|}
janet_cstrcmp:
36233|  6.45M|int janet_cstrcmp(const uint8_t *str, const char *other) {
36234|  6.45M|    int32_t len = janet_string_length(str);
  ------------------
  |  | 1813|  6.45M|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|  6.45M|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
36235|  6.45M|    int32_t index;
36236|  9.96M|    for (index = 0; index < len; index++) {
  ------------------
  |  Branch (36236:21): [True: 9.43M, False: 537k]
  ------------------
36237|  9.43M|        uint8_t c = str[index];
36238|  9.43M|        uint8_t k = ((const uint8_t *)other)[index];
36239|  9.43M|        if (c < k) return -1;
  ------------------
  |  Branch (36239:13): [True: 2.65M, False: 6.77M]
  ------------------
36240|  6.77M|        if (c > k) return 1;
  ------------------
  |  Branch (36240:13): [True: 3.26M, False: 3.51M]
  ------------------
36241|  3.51M|        if (k == '\0') break;
  ------------------
  |  Branch (36241:13): [True: 0, False: 3.51M]
  ------------------
36242|  3.51M|    }
36243|   537k|    return (other[index] == '\0') ? 0 : -1;
  ------------------
  |  Branch (36243:12): [True: 536k, False: 684]
  ------------------
36244|  6.45M|}
janet_strbinsearch:
36253|   721k|    const uint8_t *key) {
36254|   721k|    size_t low = 0;
36255|   721k|    size_t hi = tabcount;
36256|   721k|    const char *t = (const char *)tab;
36257|  2.40M|    while (low < hi) {
  ------------------
  |  Branch (36257:12): [True: 2.19M, False: 211k]
  ------------------
36258|  2.19M|        size_t mid = low + ((hi - low) / 2);
36259|  2.19M|        const char **item = (const char **)(t + mid * itemsize);
36260|  2.19M|        const char *name = *item;
36261|  2.19M|        int comp = janet_cstrcmp(key, name);
36262|  2.19M|        if (comp < 0) {
  ------------------
  |  Branch (36262:13): [True: 1.08M, False: 1.11M]
  ------------------
36263|  1.08M|            hi = mid;
36264|  1.11M|        } else if (comp > 0) {
  ------------------
  |  Branch (36264:20): [True: 606k, False: 509k]
  ------------------
36265|   606k|            low = mid + 1;
36266|   606k|        } else {
36267|   509k|            return (const void *)item;
36268|   509k|        }
36269|  2.19M|    }
36270|   211k|    return NULL;
36271|   721k|}
janet_registry_put:
36333|  93.9k|    int32_t source_line) {
36334|  93.9k|    if (janet_vm.registry_count == janet_vm.registry_cap) {
  ------------------
  |  Branch (36334:9): [True: 267, False: 93.7k]
  ------------------
36335|    267|        size_t newcap = (janet_vm.registry_count + 1) * 2;
36336|       |        /* Size it nicely with core by default */
36337|    267|        if (newcap < 512) {
  ------------------
  |  Branch (36337:13): [True: 267, False: 0]
  ------------------
36338|    267|            newcap = 512;
36339|    267|        }
36340|    267|        void *newmem = janet_realloc(janet_vm.registry, newcap * sizeof(JanetCFunRegistry));
  ------------------
  |  | 2409|    267|#define janet_realloc(X, Y) realloc((X), (Y))
  ------------------
36341|    267|        if (NULL == newmem) {
  ------------------
  |  Branch (36341:13): [True: 0, False: 267]
  ------------------
36342|      0|            JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
36343|      0|        }
36344|    267|        janet_vm.registry = newmem;
36345|    267|        janet_vm.registry_cap = newcap;
36346|    267|    }
36347|  93.9k|    JanetCFunRegistry value = {
36348|  93.9k|        key,
36349|  93.9k|        name,
36350|  93.9k|        name_prefix,
36351|  93.9k|        source_file,
36352|  93.9k|        source_line
36353|  93.9k|    };
36354|  93.9k|    janet_vm.registry[janet_vm.registry_count++] = value;
36355|  93.9k|    janet_vm.registry_dirty = 1;
36356|  93.9k|}
janet_register_abstract_type:
36482|  2.40k|void janet_register_abstract_type(const JanetAbstractType *at) {
36483|  2.40k|    janet_check_pointer_align((void *) at);
36484|  2.40k|    Janet sym = janet_csymbolv(at->name);
  ------------------
  |  | 1837|  2.40k|#define janet_csymbolv(cstr) janet_wrap_symbol(janet_csymbol(cstr))
  |  |  ------------------
  |  |  |  |  849|  2.40k|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|  2.40k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  2.40k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  2.40k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36485|  2.40k|    Janet check = janet_table_get(janet_vm.abstract_registry, sym);
36486|  2.40k|    if (!janet_checktype(check, JANET_NIL) && at != janet_unwrap_pointer(check)) {
  ------------------
  |  |  806|  4.80k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 2.40k]
  |  |  ------------------
  |  |  807|  4.80k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  4.80k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  2.40k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  2.40k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.40k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.40k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (!janet_checktype(check, JANET_NIL) && at != janet_unwrap_pointer(check)) {
  ------------------
  |  |  867|      0|#define janet_unwrap_pointer(x) (janet_nanbox_to_pointer(x))
  ------------------
  |  Branch (36486:9): [True: 0, False: 2.40k]
  |  Branch (36486:47): [True: 0, False: 0]
  ------------------
36487|      0|        janet_panicf("cannot register abstract type %s, "
36488|      0|                     "a type with the same name exists", at->name);
36489|      0|    }
36490|  2.40k|    janet_table_put(janet_vm.abstract_registry, sym, janet_wrap_pointer((void *) at));
  ------------------
  |  |  854|  2.40k|#define janet_wrap_pointer(s) janet_nanbox_wrap_((s), JANET_POINTER)
  |  |  ------------------
  |  |  |  |  825|  2.40k|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.40k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.40k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36491|  2.40k|}
janet_core_def_sm:
36502|    801|void janet_core_def_sm(JanetTable *env, const char *name, Janet x, const void *p, const void *sf, int32_t sl) {
36503|    801|    (void) sf;
36504|    801|    (void) sl;
36505|    801|    (void) p;
36506|    801|    Janet key = janet_csymbolv(name);
  ------------------
  |  | 1837|    801|#define janet_csymbolv(cstr) janet_wrap_symbol(janet_csymbol(cstr))
  |  |  ------------------
  |  |  |  |  849|    801|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|    801|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|    801|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|    801|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36507|    801|    janet_table_put(env, key, x);
36508|    801|    if (janet_checktype(x, JANET_CFUNCTION)) {
  ------------------
  |  |  806|    801|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 801]
  |  |  |  Branch (806:6): [Folded, False: 801]
  |  |  ------------------
  |  |  807|    801|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|    801|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|    801|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|    801|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    801|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    801|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36509|      0|        janet_registry_put(janet_unwrap_cfunction(x), name, NULL, NULL, 0);
  ------------------
  |  |  869|      0|#define janet_unwrap_cfunction(x) ((JanetCFunction)janet_nanbox_to_pointer(x))
  ------------------
36510|      0|    }
36511|    801|}
janet_core_cfuns_ext:
36513|  5.87k|void janet_core_cfuns_ext(JanetTable *env, const char *regprefix, const JanetRegExt *cfuns) {
36514|  5.87k|    (void) regprefix;
36515|  99.8k|    while (cfuns->name) {
  ------------------
  |  Branch (36515:12): [True: 93.9k, False: 5.87k]
  ------------------
36516|  93.9k|        janet_check_pointer_align(cfuns->cfun);
36517|  93.9k|        Janet fun = janet_wrap_cfunction(cfuns->cfun);
  ------------------
  |  |  853|  93.9k|#define janet_wrap_cfunction(s) janet_nanbox_wrap_((s), JANET_CFUNCTION)
  |  |  ------------------
  |  |  |  |  825|  93.9k|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  93.9k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  93.9k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36518|  93.9k|        janet_table_put(env, janet_csymbolv(cfuns->name), fun);
  ------------------
  |  | 1837|  93.9k|#define janet_csymbolv(cstr) janet_wrap_symbol(janet_csymbol(cstr))
  |  |  ------------------
  |  |  |  |  849|  93.9k|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|  93.9k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  93.9k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  93.9k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36519|  93.9k|        janet_registry_put(cfuns->cfun, cfuns->name, regprefix, cfuns->source_file, cfuns->source_line);
36520|  93.9k|        cfuns++;
36521|  93.9k|    }
36522|  5.87k|}
janet_binding_from_entry:
36525|   519k|JanetBinding janet_binding_from_entry(Janet entry) {
36526|   519k|    JanetTable *entry_table;
36527|   519k|    JanetBinding binding = {
36528|   519k|        JANET_BINDING_NONE,
36529|   519k|        janet_wrap_nil(),
  ------------------
  |  |  831|   519k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|   519k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   519k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   519k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36530|   519k|        JANET_BINDING_DEP_NONE
36531|   519k|    };
36532|       |
36533|       |    /* Check environment for entry */
36534|   519k|    if (!janet_checktype(entry, JANET_TABLE))
  ------------------
  |  |  806|   519k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 519k]
  |  |  ------------------
  |  |  807|   519k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   519k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   519k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   519k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   519k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   519k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (36534:9): [True: 17.9k, False: 501k]
  ------------------
36535|  17.9k|        return binding;
36536|   501k|    entry_table = janet_unwrap_table(entry);
  ------------------
  |  |  861|   501k|#define janet_unwrap_table(x) ((JanetTable *)janet_nanbox_to_pointer(x))
  ------------------
36537|       |
36538|   501k|    Janet deprecate = janet_table_get_keyword(entry_table, "deprecated");
36539|   501k|    int macro = janet_truthy(janet_table_get_keyword(entry_table, "macro"));
  ------------------
  |  |  818|   501k|    (!janet_checktype((x), JANET_NIL) && \
  |  |  ------------------
  |  |  |  |  806|  1.00M|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 501k]
  |  |  |  |  ------------------
  |  |  |  |  807|  1.00M|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|  1.00M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|   501k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|   501k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|   501k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|   501k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (818:6): [True: 91.2k, False: 410k]
  |  |  ------------------
  |  |  819|   501k|     (!janet_checktype((x), JANET_BOOLEAN) || ((x).u64 & 0x1)))
  |  |  ------------------
  |  |  |  |  806|   182k|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 91.2k]
  |  |  |  |  ------------------
  |  |  |  |  807|   182k|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|   182k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|  91.2k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|  91.2k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  91.2k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  91.2k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (819:7): [True: 0, False: 91.2k]
  |  |  |  Branch (819:47): [True: 91.2k, False: 0]
  |  |  ------------------
  ------------------
36540|   501k|    Janet value = janet_table_get_keyword(entry_table, "value");
36541|   501k|    Janet ref = janet_table_get_keyword(entry_table, "ref");
36542|       |
36543|   501k|    if (janet_checktype(deprecate, JANET_KEYWORD)) {
  ------------------
  |  |  806|   501k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 501k]
  |  |  |  Branch (806:6): [Folded, False: 501k]
  |  |  ------------------
  |  |  807|   501k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   501k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   501k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   501k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   501k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   501k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36544|      0|        JanetKeyword depkw = janet_unwrap_keyword(deprecate);
  ------------------
  |  |  865|      0|#define janet_unwrap_keyword(x) ((const uint8_t *)janet_nanbox_to_pointer(x))
  ------------------
36545|      0|        if (!janet_cstrcmp(depkw, "relaxed")) {
  ------------------
  |  Branch (36545:13): [True: 0, False: 0]
  ------------------
36546|      0|            binding.deprecation = JANET_BINDING_DEP_RELAXED;
36547|      0|        } else if (!janet_cstrcmp(depkw, "normal")) {
  ------------------
  |  Branch (36547:20): [True: 0, False: 0]
  ------------------
36548|      0|            binding.deprecation = JANET_BINDING_DEP_NORMAL;
36549|      0|        } else if (!janet_cstrcmp(depkw, "strict")) {
  ------------------
  |  Branch (36549:20): [True: 0, False: 0]
  ------------------
36550|      0|            binding.deprecation = JANET_BINDING_DEP_STRICT;
36551|      0|        }
36552|   501k|    } else if (!janet_checktype(deprecate, JANET_NIL)) {
  ------------------
  |  |  806|   501k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 501k]
  |  |  ------------------
  |  |  807|   501k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   501k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   501k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   501k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   501k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   501k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (36552:16): [True: 0, False: 501k]
  ------------------
36553|      0|        binding.deprecation = JANET_BINDING_DEP_NORMAL;
36554|      0|    }
36555|       |
36556|   501k|    int ref_is_valid = janet_checktype(ref, JANET_ARRAY);
  ------------------
  |  |  806|   501k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 501k]
  |  |  ------------------
  |  |  807|   501k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   501k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   501k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   501k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   501k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   501k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36557|   501k|    int redef = ref_is_valid && janet_truthy(janet_table_get_keyword(entry_table, "redef"));
  ------------------
  |  |  818|   563k|    (!janet_checktype((x), JANET_NIL) && \
  |  |  ------------------
  |  |  |  |  806|   125k|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 62.6k]
  |  |  |  |  ------------------
  |  |  |  |  807|   125k|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|   125k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|  62.6k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|  62.6k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  62.6k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  62.6k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (818:6): [True: 0, False: 62.6k]
  |  |  ------------------
  |  |  819|   563k|     (!janet_checktype((x), JANET_BOOLEAN) || ((x).u64 & 0x1)))
  |  |  ------------------
  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (819:7): [True: 0, False: 0]
  |  |  |  Branch (819:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (36557:17): [True: 62.6k, False: 438k]
  ------------------
36558|       |
36559|   501k|    if (macro) {
  ------------------
  |  Branch (36559:9): [True: 91.2k, False: 410k]
  ------------------
36560|  91.2k|        binding.value = redef ? ref : value;
  ------------------
  |  Branch (36560:25): [True: 0, False: 91.2k]
  ------------------
36561|  91.2k|        binding.type = redef ? JANET_BINDING_DYNAMIC_MACRO : JANET_BINDING_MACRO;
  ------------------
  |  Branch (36561:24): [True: 0, False: 91.2k]
  ------------------
36562|  91.2k|        return binding;
36563|  91.2k|    }
36564|       |
36565|   410k|    if (ref_is_valid) {
  ------------------
  |  Branch (36565:9): [True: 62.6k, False: 347k]
  ------------------
36566|  62.6k|        binding.value = ref;
36567|  62.6k|        binding.type = redef ? JANET_BINDING_DYNAMIC_DEF : JANET_BINDING_VAR;
  ------------------
  |  Branch (36567:24): [True: 0, False: 62.6k]
  ------------------
36568|   347k|    } else {
36569|   347k|        binding.value = value;
36570|   347k|        binding.type = JANET_BINDING_DEF;
36571|   347k|    }
36572|       |
36573|   410k|    return binding;
36574|   501k|}
janet_resolve_ext:
36629|   519k|JanetBinding janet_resolve_ext(JanetTable *env, const uint8_t *sym) {
36630|   519k|    Janet entry = janet_table_get(env, janet_wrap_symbol(sym));
  ------------------
  |  |  849|   519k|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  ------------------
  |  |  |  |  828|   519k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   519k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   519k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36631|   519k|    return janet_binding_from_entry(entry);
36632|   519k|}
janet_resolve:
36634|   212k|JanetBindingType janet_resolve(JanetTable *env, const uint8_t *sym, Janet *out) {
36635|   212k|    JanetBinding binding = janet_resolve_ext(env, sym);
36636|   212k|    if (binding.type == JANET_BINDING_DYNAMIC_DEF || binding.type == JANET_BINDING_DYNAMIC_MACRO) {
  ------------------
  |  Branch (36636:9): [True: 0, False: 212k]
  |  Branch (36636:54): [True: 0, False: 212k]
  ------------------
36637|      0|        *out = janet_array_peek(janet_unwrap_array(binding.value));
  ------------------
  |  |  860|      0|#define janet_unwrap_array(x) ((JanetArray *)janet_nanbox_to_pointer(x))
  ------------------
36638|   212k|    } else {
36639|   212k|        *out = binding.value;
36640|   212k|    }
36641|   212k|    return binding.type;
36642|   212k|}
janet_indexed_view:
36654|  6.00M|int janet_indexed_view(Janet seq, const Janet **data, int32_t *len) {
36655|  6.00M|    if (janet_checktype(seq, JANET_ARRAY)) {
  ------------------
  |  |  806|  6.00M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 1.44M, False: 4.55M]
  |  |  |  Branch (806:6): [Folded, False: 6.00M]
  |  |  ------------------
  |  |  807|  6.00M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  6.00M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  6.00M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  6.00M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  6.00M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  6.00M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36656|  1.44M|        *data = janet_unwrap_array(seq)->data;
  ------------------
  |  |  860|  1.44M|#define janet_unwrap_array(x) ((JanetArray *)janet_nanbox_to_pointer(x))
  ------------------
36657|  1.44M|        *len = janet_unwrap_array(seq)->count;
  ------------------
  |  |  860|  1.44M|#define janet_unwrap_array(x) ((JanetArray *)janet_nanbox_to_pointer(x))
  ------------------
36658|  1.44M|        return 1;
36659|  4.55M|    } else if (janet_checktype(seq, JANET_TUPLE)) {
  ------------------
  |  |  806|  4.55M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 4.55M, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 4.55M]
  |  |  ------------------
  |  |  807|  4.55M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  4.55M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  4.55M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  4.55M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  4.55M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  4.55M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36660|  4.55M|        *data = janet_unwrap_tuple(seq);
  ------------------
  |  |  858|  4.55M|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
36661|  4.55M|        *len = janet_tuple_length(janet_unwrap_tuple(seq));
  ------------------
  |  | 1802|  4.55M|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|  4.55M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
36662|  4.55M|        return 1;
36663|  4.55M|    }
36664|      0|    return 0;
36665|  6.00M|}
janet_bytes_view:
36669|  2.10M|int janet_bytes_view(Janet str, const uint8_t **data, int32_t *len) {
36670|  2.10M|    JanetType t = janet_type(str);
  ------------------
  |  |  795|  2.10M|    (isnan((x).number) \
  |  |  796|  2.10M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  2.10M|        : JANET_NUMBER)
  ------------------
  |  Branch (36670:19): [True: 2.10M, False: 0]
  ------------------
36671|  2.10M|    if (t == JANET_STRING || t == JANET_SYMBOL || t == JANET_KEYWORD) {
  ------------------
  |  Branch (36671:9): [True: 54.2k, False: 2.04M]
  |  Branch (36671:30): [True: 2.04M, False: 5.21k]
  |  Branch (36671:51): [True: 1, False: 5.21k]
  ------------------
36672|  2.09M|        *data = janet_unwrap_string(str);
  ------------------
  |  |  863|  2.09M|#define janet_unwrap_string(x) ((JanetString)janet_nanbox_to_pointer(x))
  ------------------
36673|  2.09M|        *len = janet_string_length(janet_unwrap_string(str));
  ------------------
  |  | 1813|  2.09M|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|  2.09M|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
36674|  2.09M|        return 1;
36675|  2.09M|    } else if (t == JANET_BUFFER) {
  ------------------
  |  Branch (36675:16): [True: 5.21k, False: 0]
  ------------------
36676|  5.21k|        *data = janet_unwrap_buffer(str)->data;
  ------------------
  |  |  862|  5.21k|#define janet_unwrap_buffer(x) ((JanetBuffer *)janet_nanbox_to_pointer(x))
  ------------------
36677|  5.21k|        *len = janet_unwrap_buffer(str)->count;
  ------------------
  |  |  862|  5.21k|#define janet_unwrap_buffer(x) ((JanetBuffer *)janet_nanbox_to_pointer(x))
  ------------------
36678|  5.21k|        return 1;
36679|  5.21k|    } else if (t == JANET_ABSTRACT) {
  ------------------
  |  Branch (36679:16): [True: 0, False: 0]
  ------------------
36680|      0|        void *abst = janet_unwrap_abstract(str);
  ------------------
  |  |  866|      0|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
36681|      0|        const JanetAbstractType *atype = janet_abstract_type(abst);
  ------------------
  |  | 1899|      0|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|      0|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
36682|      0|        if (NULL == atype->bytes) {
  ------------------
  |  Branch (36682:13): [True: 0, False: 0]
  ------------------
36683|      0|            return 0;
36684|      0|        }
36685|      0|        JanetByteView view = atype->bytes(abst, janet_abstract_size(abst));
  ------------------
  |  | 1900|      0|#define janet_abstract_size(u) (janet_abstract_head(u)->size)
  |  |  ------------------
  |  |  |  | 1897|      0|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
36686|      0|        *data = view.bytes;
36687|      0|        *len = view.len;
36688|      0|        return 1;
36689|      0|    }
36690|      0|    return 0;
36691|  2.10M|}
janet_dictionary_view:
36696|    688|int janet_dictionary_view(Janet tab, const JanetKV **data, int32_t *len, int32_t *cap) {
36697|    688|    if (janet_checktype(tab, JANET_TABLE)) {
  ------------------
  |  |  806|    688|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 563, False: 125]
  |  |  |  Branch (806:6): [Folded, False: 688]
  |  |  ------------------
  |  |  807|    688|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|    688|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|    688|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|    688|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    688|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    688|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36698|    563|        *data = janet_unwrap_table(tab)->data;
  ------------------
  |  |  861|    563|#define janet_unwrap_table(x) ((JanetTable *)janet_nanbox_to_pointer(x))
  ------------------
36699|    563|        *cap = janet_unwrap_table(tab)->capacity;
  ------------------
  |  |  861|    563|#define janet_unwrap_table(x) ((JanetTable *)janet_nanbox_to_pointer(x))
  ------------------
36700|    563|        *len = janet_unwrap_table(tab)->count;
  ------------------
  |  |  861|    563|#define janet_unwrap_table(x) ((JanetTable *)janet_nanbox_to_pointer(x))
  ------------------
36701|    563|        return 1;
36702|    563|    } else if (janet_checktype(tab, JANET_STRUCT)) {
  ------------------
  |  |  806|    125|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 125, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 125]
  |  |  ------------------
  |  |  807|    125|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|    125|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|    125|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|    125|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    125|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    125|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
36703|    125|        *data = janet_unwrap_struct(tab);
  ------------------
  |  |  857|    125|#define janet_unwrap_struct(x) ((JanetStruct)janet_nanbox_to_pointer(x))
  ------------------
36704|    125|        *cap = janet_struct_capacity(janet_unwrap_struct(tab));
  ------------------
  |  | 1849|    125|#define janet_struct_capacity(t) (janet_struct_head(t)->capacity)
  |  |  ------------------
  |  |  |  | 1846|    125|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
36705|    125|        *len = janet_struct_length(janet_unwrap_struct(tab));
  ------------------
  |  | 1848|    125|#define janet_struct_length(t) (janet_struct_head(t)->length)
  |  |  ------------------
  |  |  |  | 1846|    125|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
36706|    125|        return 1;
36707|    125|    }
36708|      0|    return 0;
36709|    688|}
janet_checkint:
36711|  20.9M|int janet_checkint(Janet x) {
36712|  20.9M|    if (!janet_checktype(x, JANET_NUMBER))
  ------------------
  |  |  806|  20.9M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [True: 20.9M, Folded]
  |  |  ------------------
  |  |  807|  20.9M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|  20.9M|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 20.9M, False: 49.4k]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 49.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  20.9M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (36712:9): [True: 49.4k, False: 20.9M]
  ------------------
36713|  49.4k|        return 0;
36714|  20.9M|    double dval = janet_unwrap_number(x);
  ------------------
  |  |  839|  20.9M|#define janet_unwrap_number(x) ((x).number)
  ------------------
36715|       |    return janet_checkintrange(dval);
  ------------------
  |  |  962|  20.9M|#define janet_checkintrange(x) ((x) >= INT32_MIN && (x) <= INT32_MAX && (x) == (int32_t)(x))
  |  |  ------------------
  |  |  |  Branch (962:33): [True: 20.9M, False: 335]
  |  |  |  Branch (962:53): [True: 20.9M, False: 945]
  |  |  |  Branch (962:73): [True: 20.9M, False: 269]
  |  |  ------------------
  ------------------
36716|  20.9M|}
janet_sorted_keys:
36793|    455|int32_t janet_sorted_keys(const JanetKV *dict, int32_t cap, int32_t *index_buffer) {
36794|       |
36795|       |    /* First, put populated indices into index_buffer */
36796|    455|    int32_t next_index = 0;
36797|  8.03k|    for (int32_t i = 0; i < cap; i++) {
  ------------------
  |  Branch (36797:25): [True: 7.57k, False: 455]
  ------------------
36798|  7.57k|        if (!janet_checktype(dict[i].key, JANET_NIL)) {
  ------------------
  |  |  806|  7.57k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 7.57k]
  |  |  ------------------
  |  |  807|  7.57k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  7.57k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  7.57k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  7.57k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  7.57k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  7.57k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (36798:13): [True: 2.36k, False: 5.21k]
  ------------------
36799|  2.36k|            index_buffer[next_index++] = i;
36800|  2.36k|        }
36801|  7.57k|    }
36802|       |
36803|       |    /* Next, sort those (simple insertion sort here for now) */
36804|  2.39k|    for (int32_t i = 1; i < next_index; i++) {
  ------------------
  |  Branch (36804:25): [True: 1.94k, False: 455]
  ------------------
36805|  1.94k|        int32_t index_to_insert = index_buffer[i];
36806|  1.94k|        Janet lhs = dict[index_to_insert].key;
36807|   275k|        for (int32_t j = i - 1; j >= 0; j--) {
  ------------------
  |  Branch (36807:33): [True: 275k, False: 45]
  ------------------
36808|   275k|            index_buffer[j + 1] = index_buffer[j];
36809|   275k|            Janet rhs = dict[index_buffer[j]].key;
36810|   275k|            if (janet_compare(lhs, rhs) >= 0) {
  ------------------
  |  Branch (36810:17): [True: 1.89k, False: 274k]
  ------------------
36811|  1.89k|                index_buffer[j + 1] = index_to_insert;
36812|  1.89k|                break;
36813|   274k|            } else if (j == 0) {
  ------------------
  |  Branch (36813:24): [True: 45, False: 273k]
  ------------------
36814|     45|                index_buffer[0] = index_to_insert;
36815|     45|            }
36816|   275k|        }
36817|  1.94k|    }
36818|       |
36819|       |    /* Return number of indices found */
36820|    455|    return next_index;
36821|       |
36822|    455|}
array_allocate:
37055|  4.04M|void *array_allocate(size_t element_size, int32_t count) {
37056|  4.04M|    if (count < 0) return NULL;
  ------------------
  |  Branch (37056:9): [True: 0, False: 4.04M]
  ------------------
37057|  4.04M|    if ((size_t) count > (SIZE_MAX / element_size)) return NULL;
  ------------------
  |  Branch (37057:9): [True: 0, False: 4.04M]
  ------------------
37058|  4.04M|    return janet_malloc(element_size * count);
  ------------------
  |  | 2406|  4.04M|#define janet_malloc(X) malloc((X))
  ------------------
37059|  4.04M|}
janet_next_impl:
37194|  5.24M|Janet janet_next_impl(Janet ds, Janet key, int is_interpreter) {
37195|  5.24M|    JanetType t = janet_type(ds);
  ------------------
  |  |  795|  5.24M|    (isnan((x).number) \
  |  |  796|  5.24M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  5.24M|        : JANET_NUMBER)
  ------------------
  |  Branch (37195:19): [True: 5.24M, False: 0]
  ------------------
37196|  5.24M|    switch (t) {
37197|      0|        default:
  ------------------
  |  Branch (37197:9): [True: 0, False: 5.24M]
  ------------------
37198|      0|            janet_panicf("expected iterable type, got %v", ds);
37199|  6.51k|        case JANET_TABLE:
  ------------------
  |  Branch (37199:9): [True: 6.51k, False: 5.23M]
  ------------------
37200|  39.6k|        case JANET_STRUCT: {
  ------------------
  |  Branch (37200:9): [True: 33.0k, False: 5.20M]
  ------------------
37201|  39.6k|            const JanetKV *start;
37202|  39.6k|            int32_t cap;
37203|  39.6k|            if (t == JANET_TABLE) {
  ------------------
  |  Branch (37203:17): [True: 6.51k, False: 33.0k]
  ------------------
37204|  6.51k|                JanetTable *tab = janet_unwrap_table(ds);
  ------------------
  |  |  861|  6.51k|#define janet_unwrap_table(x) ((JanetTable *)janet_nanbox_to_pointer(x))
  ------------------
37205|  6.51k|                cap = tab->capacity;
37206|  6.51k|                start = tab->data;
37207|  33.0k|            } else {
37208|  33.0k|                JanetStruct st = janet_unwrap_struct(ds);
  ------------------
  |  |  857|  33.0k|#define janet_unwrap_struct(x) ((JanetStruct)janet_nanbox_to_pointer(x))
  ------------------
37209|  33.0k|                cap = janet_struct_capacity(st);
  ------------------
  |  | 1849|  33.0k|#define janet_struct_capacity(t) (janet_struct_head(t)->capacity)
  |  |  ------------------
  |  |  |  | 1846|  33.0k|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
37210|  33.0k|                start = st;
37211|  33.0k|            }
37212|  39.6k|            const JanetKV *end = start + cap;
37213|  39.6k|            const JanetKV *kv = janet_checktype(key, JANET_NIL)
  ------------------
  |  |  806|  39.6k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 4.83k, False: 34.7k]
  |  |  |  Branch (806:6): [Folded, False: 39.6k]
  |  |  ------------------
  |  |  807|  39.6k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  39.6k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  39.6k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  39.6k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  39.6k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  39.6k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37214|  39.6k|                                ? start
37215|  39.6k|                                : janet_dict_find(start, cap, key) + 1;
37216|   122k|            while (kv < end) {
  ------------------
  |  Branch (37216:20): [True: 117k, False: 4.20k]
  ------------------
37217|   117k|                if (!janet_checktype(kv->key, JANET_NIL)) return kv->key;
  ------------------
  |  |  806|   117k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 117k]
  |  |  ------------------
  |  |  807|   117k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   117k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   117k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   117k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   117k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   117k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (37217:21): [True: 35.4k, False: 82.5k]
  ------------------
37218|  82.5k|                kv++;
37219|  82.5k|            }
37220|  4.20k|            break;
37221|  39.6k|        }
37222|  4.20k|        case JANET_STRING:
  ------------------
  |  Branch (37222:9): [True: 0, False: 5.24M]
  ------------------
37223|      0|        case JANET_KEYWORD:
  ------------------
  |  Branch (37223:9): [True: 0, False: 5.24M]
  ------------------
37224|      0|        case JANET_SYMBOL:
  ------------------
  |  Branch (37224:9): [True: 0, False: 5.24M]
  ------------------
37225|      0|        case JANET_BUFFER:
  ------------------
  |  Branch (37225:9): [True: 0, False: 5.24M]
  ------------------
37226|  3.16k|        case JANET_ARRAY:
  ------------------
  |  Branch (37226:9): [True: 3.16k, False: 5.23M]
  ------------------
37227|  5.20M|        case JANET_TUPLE: {
  ------------------
  |  Branch (37227:9): [True: 5.19M, False: 42.7k]
  ------------------
37228|  5.20M|            int32_t i;
37229|  5.20M|            if (janet_checktype(key, JANET_NIL)) {
  ------------------
  |  |  806|  5.20M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 2.00M, False: 3.19M]
  |  |  |  Branch (806:6): [Folded, False: 5.20M]
  |  |  ------------------
  |  |  807|  5.20M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  5.20M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  5.20M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  5.20M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  5.20M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  5.20M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37230|  2.00M|                i = 0;
37231|  3.19M|            } else if (janet_checkint(key)) {
  ------------------
  |  Branch (37231:24): [True: 3.19M, False: 0]
  ------------------
37232|  3.19M|                i = janet_unwrap_integer(key) + 1;
  ------------------
  |  |  966|  3.19M|#define janet_unwrap_integer(x) ((int32_t) janet_unwrap_number(x))
  |  |  ------------------
  |  |  |  |  839|  3.19M|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  ------------------
37233|  3.19M|            } else {
37234|      0|                break;
37235|      0|            }
37236|  5.20M|            int32_t len;
37237|  5.20M|            if (t == JANET_BUFFER) {
  ------------------
  |  Branch (37237:17): [True: 0, False: 5.20M]
  ------------------
37238|      0|                len = janet_unwrap_buffer(ds)->count;
  ------------------
  |  |  862|      0|#define janet_unwrap_buffer(x) ((JanetBuffer *)janet_nanbox_to_pointer(x))
  ------------------
37239|  5.20M|            } else if (t == JANET_ARRAY) {
  ------------------
  |  Branch (37239:24): [True: 3.16k, False: 5.19M]
  ------------------
37240|  3.16k|                len = janet_unwrap_array(ds)->count;
  ------------------
  |  |  860|  3.16k|#define janet_unwrap_array(x) ((JanetArray *)janet_nanbox_to_pointer(x))
  ------------------
37241|  5.19M|            } else if (t == JANET_TUPLE) {
  ------------------
  |  Branch (37241:24): [True: 5.19M, False: 0]
  ------------------
37242|  5.19M|                len = janet_tuple_length(janet_unwrap_tuple(ds));
  ------------------
  |  | 1802|  5.19M|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|  5.19M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
37243|  5.19M|            } else {
37244|      0|                len = janet_string_length(janet_unwrap_string(ds));
  ------------------
  |  | 1813|      0|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|      0|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
37245|      0|            }
37246|  5.20M|            if (i < len && i >= 0) {
  ------------------
  |  Branch (37246:17): [True: 4.08M, False: 1.11M]
  |  Branch (37246:28): [True: 4.08M, False: 0]
  ------------------
37247|  4.08M|                return janet_wrap_integer(i);
  ------------------
  |  |  967|  4.08M|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|  4.08M|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
37248|  4.08M|            }
37249|  1.11M|            break;
37250|  5.20M|        }
37251|  1.11M|        case JANET_ABSTRACT: {
  ------------------
  |  Branch (37251:9): [True: 0, False: 5.24M]
  ------------------
37252|      0|            JanetAbstract abst = janet_unwrap_abstract(ds);
  ------------------
  |  |  866|      0|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
37253|      0|            const JanetAbstractType *at = janet_abstract_type(abst);
  ------------------
  |  | 1899|      0|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|      0|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
37254|      0|            if (NULL == at->next) break;
  ------------------
  |  Branch (37254:17): [True: 0, False: 0]
  ------------------
37255|      0|            return at->next(abst, key);
37256|      0|        }
37257|      0|        case JANET_FIBER: {
  ------------------
  |  Branch (37257:9): [True: 0, False: 5.24M]
  ------------------
37258|      0|            JanetFiber *child = janet_unwrap_fiber(ds);
  ------------------
  |  |  859|      0|#define janet_unwrap_fiber(x) ((JanetFiber *)janet_nanbox_to_pointer(x))
  ------------------
37259|      0|            Janet retreg;
37260|      0|            JanetFiberStatus status = janet_fiber_status(child);
37261|      0|            if (status == JANET_STATUS_ALIVE ||
  ------------------
  |  Branch (37261:17): [True: 0, False: 0]
  ------------------
37262|      0|                    status == JANET_STATUS_DEAD ||
  ------------------
  |  Branch (37262:21): [True: 0, False: 0]
  ------------------
37263|      0|                    status == JANET_STATUS_ERROR ||
  ------------------
  |  Branch (37263:21): [True: 0, False: 0]
  ------------------
37264|      0|                    status == JANET_STATUS_USER0 ||
  ------------------
  |  Branch (37264:21): [True: 0, False: 0]
  ------------------
37265|      0|                    status == JANET_STATUS_USER1 ||
  ------------------
  |  Branch (37265:21): [True: 0, False: 0]
  ------------------
37266|      0|                    status == JANET_STATUS_USER2 ||
  ------------------
  |  Branch (37266:21): [True: 0, False: 0]
  ------------------
37267|      0|                    status == JANET_STATUS_USER3 ||
  ------------------
  |  Branch (37267:21): [True: 0, False: 0]
  ------------------
37268|      0|                    status == JANET_STATUS_USER4) {
  ------------------
  |  Branch (37268:21): [True: 0, False: 0]
  ------------------
37269|      0|                return janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37270|      0|            }
37271|      0|            janet_vm.fiber->child = child;
37272|      0|            JanetSignal sig = janet_continue(child, janet_wrap_nil(), &retreg);
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37273|      0|            if (sig != JANET_SIGNAL_OK && !(child->flags & (1 << sig))) {
  ------------------
  |  Branch (37273:17): [True: 0, False: 0]
  |  Branch (37273:43): [True: 0, False: 0]
  ------------------
37274|      0|                if (is_interpreter) {
  ------------------
  |  Branch (37274:21): [True: 0, False: 0]
  ------------------
37275|      0|                    janet_signalv(sig, retreg);
37276|      0|                } else {
37277|      0|                    janet_vm.fiber->child = NULL;
37278|      0|                    janet_panicv(retreg);
37279|      0|                }
37280|      0|            }
37281|      0|            janet_vm.fiber->child = NULL;
37282|      0|            if (sig == JANET_SIGNAL_OK ||
  ------------------
  |  Branch (37282:17): [True: 0, False: 0]
  ------------------
37283|      0|                    sig == JANET_SIGNAL_ERROR ||
  ------------------
  |  Branch (37283:21): [True: 0, False: 0]
  ------------------
37284|      0|                    sig == JANET_SIGNAL_USER0 ||
  ------------------
  |  Branch (37284:21): [True: 0, False: 0]
  ------------------
37285|      0|                    sig == JANET_SIGNAL_USER1 ||
  ------------------
  |  Branch (37285:21): [True: 0, False: 0]
  ------------------
37286|      0|                    sig == JANET_SIGNAL_USER2 ||
  ------------------
  |  Branch (37286:21): [True: 0, False: 0]
  ------------------
37287|      0|                    sig == JANET_SIGNAL_USER3 ||
  ------------------
  |  Branch (37287:21): [True: 0, False: 0]
  ------------------
37288|      0|                    sig == JANET_SIGNAL_USER4) {
  ------------------
  |  Branch (37288:21): [True: 0, False: 0]
  ------------------
37289|       |                /* Fiber cannot be resumed, so discard last value. */
37290|      0|                return janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37291|      0|            } else {
37292|      0|                return janet_wrap_integer(0);
  ------------------
  |  |  967|      0|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
37293|      0|            }
37294|      0|        }
37295|  5.24M|    }
37296|  1.12M|    return janet_wrap_nil();
  ------------------
  |  |  831|  1.12M|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  1.12M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.12M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.12M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37297|  5.24M|}
janet_equals:
37361|  44.9M|int janet_equals(Janet x, Janet y) {
37362|  44.9M|    if (janet_type(x) != janet_type(y)) return 0;
  ------------------
  |  |  795|  44.9M|    (isnan((x).number) \
  |  |  796|  44.9M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  44.9M|        : JANET_NUMBER)
  ------------------
                  if (janet_type(x) != janet_type(y)) return 0;
  ------------------
  |  |  795|  44.9M|    (isnan((x).number) \
  |  |  796|  44.9M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  44.9M|        : JANET_NUMBER)
  ------------------
  |  Branch (37362:9): [True: 43.4M, False: 1.52M]
  |  Branch (37362:9): [True: 2.49M, False: 42.4M]
  |  Branch (37362:26): [True: 42.4M, False: 2.49M]
  ------------------
37363|  42.4M|    if (janet_checktypes(x, JANET_TFLAG_TUPLE | JANET_TFLAG_STRUCT)) return janet_equals_containers(x, y);
  ------------------
  |  |  969|  42.4M|#define janet_checktypes(x, tps) ((1 << janet_type(x)) & (tps))
  |  |  ------------------
  |  |  |  |  795|  42.4M|    (isnan((x).number) \
  |  |  |  |  796|  42.4M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  |  |  797|  42.4M|        : JANET_NUMBER)
  |  |  ------------------
  |  |  |  Branch (969:34): [True: 441k, False: 42.0M]
  |  |  ------------------
  ------------------
  |  Branch (37363:9): [True: 40.9M, False: 1.51M]
  ------------------
37364|  42.0M|    return janet_equals_leaf(x, y);
37365|  42.4M|}
janet_hash:
37377|   166M|int32_t janet_hash(Janet x) {
37378|   166M|    int32_t hash = 0;
37379|   166M|    switch (janet_type(x)) {
  ------------------
  |  |  795|   166M|    (isnan((x).number) \
  |  |  796|   166M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|   166M|        : JANET_NUMBER)
  ------------------
  |  Branch (37379:13): [True: 161M, False: 4.94M]
  ------------------
37380|  73.0M|        case JANET_NIL:
  ------------------
  |  Branch (37380:9): [True: 73.0M, False: 93.4M]
  ------------------
37381|  73.0M|            hash = 0;
37382|  73.0M|            break;
37383|  1.64k|        case JANET_BOOLEAN:
  ------------------
  |  Branch (37383:9): [True: 1.64k, False: 166M]
  ------------------
37384|  1.64k|            hash = janet_unwrap_boolean(x);
  ------------------
  |  |  838|  1.64k|#define janet_unwrap_boolean(x) ((x).u64 & 0x1)
  ------------------
37385|  1.64k|            break;
37386|  5.78M|        case JANET_STRING:
  ------------------
  |  Branch (37386:9): [True: 5.78M, False: 160M]
  ------------------
37387|  56.6M|        case JANET_SYMBOL:
  ------------------
  |  Branch (37387:9): [True: 50.8M, False: 115M]
  ------------------
37388|  57.5M|        case JANET_KEYWORD:
  ------------------
  |  Branch (37388:9): [True: 933k, False: 165M]
  ------------------
37389|  57.5M|            hash = janet_string_hash(janet_unwrap_string(x));
  ------------------
  |  | 1814|  57.5M|#define janet_string_hash(s) (janet_string_head(s)->hash)
  |  |  ------------------
  |  |  |  | 1812|  57.5M|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
37390|  57.5M|            break;
37391|  10.3M|        case JANET_TUPLE:
  ------------------
  |  Branch (37391:9): [True: 10.3M, False: 156M]
  ------------------
37392|  10.3M|            hash = janet_tuple_hash(janet_unwrap_tuple(x));
  ------------------
  |  | 1803|  10.3M|#define janet_tuple_hash(t) (janet_tuple_head(t)->hash)
  |  |  ------------------
  |  |  |  | 1800|  10.3M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
37393|  10.3M|            uint32_t inc = (janet_tuple_flag(janet_unwrap_tuple(x)) & JANET_TUPLE_FLAG_BRACKETCTOR) ? 1 : 0;
  ------------------
  |  | 1806|  10.3M|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|  10.3M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                          uint32_t inc = (janet_tuple_flag(janet_unwrap_tuple(x)) & JANET_TUPLE_FLAG_BRACKETCTOR) ? 1 : 0;
  ------------------
  |  | 1798|  10.3M|#define JANET_TUPLE_FLAG_BRACKETCTOR 0x10000
  ------------------
  |  Branch (37393:28): [True: 1.30M, False: 9.04M]
  ------------------
37394|  10.3M|            hash = (int32_t)((uint32_t)hash + inc); /* avoid overflow undefined behavior */
37395|  10.3M|            break;
37396|  8.96k|        case JANET_STRUCT:
  ------------------
  |  Branch (37396:9): [True: 8.96k, False: 166M]
  ------------------
37397|  8.96k|            hash = janet_struct_hash(janet_unwrap_struct(x));
  ------------------
  |  | 1850|  8.96k|#define janet_struct_hash(t) (janet_struct_head(t)->hash)
  |  |  ------------------
  |  |  |  | 1846|  8.96k|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
37398|  8.96k|            break;
37399|  4.94M|        case JANET_NUMBER: {
  ------------------
  |  Branch (37399:9): [True: 4.94M, False: 161M]
  ------------------
37400|  4.94M|            union {
37401|  4.94M|                double d;
37402|  4.94M|                uint64_t u;
37403|  4.94M|            } as;
37404|  4.94M|            as.d = janet_unwrap_number(x);
  ------------------
  |  |  839|  4.94M|#define janet_unwrap_number(x) ((x).number)
  ------------------
37405|  4.94M|            as.d += 0.0; /* normalize negative 0 */
37406|  4.94M|            as.u = murmur64(as.u);
37407|  4.94M|            uint32_t hi = (uint32_t)(as.u >> 32);
37408|  4.94M|            hash = (int32_t)hi;
37409|  4.94M|            break;
37410|  56.6M|        }
37411|  5.33k|        case JANET_ABSTRACT: {
  ------------------
  |  Branch (37411:9): [True: 5.33k, False: 166M]
  ------------------
37412|  5.33k|            JanetAbstract xx = janet_unwrap_abstract(x);
  ------------------
  |  |  866|  5.33k|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
37413|  5.33k|            const JanetAbstractType *at = janet_abstract_type(xx);
  ------------------
  |  | 1899|  5.33k|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|  5.33k|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
37414|  5.33k|            if (at->hash != NULL) {
  ------------------
  |  Branch (37414:17): [True: 3.73k, False: 1.60k]
  ------------------
37415|  3.73k|                hash = at->hash(xx, janet_abstract_size(xx));
  ------------------
  |  | 1900|  3.73k|#define janet_abstract_size(u) (janet_abstract_head(u)->size)
  |  |  ------------------
  |  |  |  | 1897|  3.73k|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
37416|  3.73k|                break;
37417|  3.73k|            }
37418|  5.33k|        }
37419|       |        /* fallthrough */
37420|  20.5M|        default:
  ------------------
  |  Branch (37420:9): [True: 20.5M, False: 145M]
  ------------------
37421|  20.5M|            if (sizeof(double) == sizeof(void *)) {
  ------------------
  |  Branch (37421:17): [True: 20.5M, Folded]
  ------------------
37422|       |                /* Assuming 8 byte pointer (8 byte aligned) */
37423|  20.5M|                uint64_t i = murmur64(janet_u64(x));
  ------------------
  |  |  788|  20.5M|#define janet_u64(x) ((x).u64)
  ------------------
37424|  20.5M|                hash = (int32_t)(i >> 32);
37425|  20.5M|            } else {
37426|       |                /* Assuming 4 byte pointer (or smaller) */
37427|      0|                uintptr_t diff = (uintptr_t) janet_unwrap_pointer(x);
  ------------------
  |  |  867|      0|#define janet_unwrap_pointer(x) (janet_nanbox_to_pointer(x))
  ------------------
37428|      0|                uint32_t hilo = (uint32_t) diff * 2654435769u;
37429|      0|                hash = (int32_t)((hilo << 16) | (hilo >> 16));
37430|      0|            }
37431|  20.5M|            break;
37432|   166M|    }
37433|   166M|    return hash;
37434|   166M|}
janet_compare:
37439|   773k|int janet_compare(Janet x, Janet y) {
37440|   773k|    janet_vm.traversal = janet_vm.traversal_base;
37441|   773k|    int status;
37442|  1.72M|    do {
37443|  1.72M|        JanetType tx = janet_type(x);
  ------------------
  |  |  795|  1.72M|    (isnan((x).number) \
  |  |  796|  1.72M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  1.72M|        : JANET_NUMBER)
  ------------------
  |  Branch (37443:24): [True: 1.72M, False: 410]
  ------------------
37444|  1.72M|        JanetType ty = janet_type(y);
  ------------------
  |  |  795|  1.72M|    (isnan((x).number) \
  |  |  796|  1.72M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  1.72M|        : JANET_NUMBER)
  ------------------
  |  Branch (37444:24): [True: 1.72M, False: 375]
  ------------------
37445|  1.72M|        if (tx != ty) return tx < ty ? -1 : 1;
  ------------------
  |  Branch (37445:13): [True: 40.9k, False: 1.68M]
  |  Branch (37445:30): [True: 40.8k, False: 92]
  ------------------
37446|  1.68M|        switch (tx) {
37447|      0|            case JANET_NIL:
  ------------------
  |  Branch (37447:13): [True: 0, False: 1.68M]
  ------------------
37448|      0|                break;
37449|      0|            case JANET_BOOLEAN: {
  ------------------
  |  Branch (37449:13): [True: 0, False: 1.68M]
  ------------------
37450|      0|                int diff = janet_unwrap_boolean(x) - janet_unwrap_boolean(y);
  ------------------
  |  |  838|      0|#define janet_unwrap_boolean(x) ((x).u64 & 0x1)
  ------------------
                              int diff = janet_unwrap_boolean(x) - janet_unwrap_boolean(y);
  ------------------
  |  |  838|      0|#define janet_unwrap_boolean(x) ((x).u64 & 0x1)
  ------------------
37451|      0|                if (diff) return diff;
  ------------------
  |  Branch (37451:21): [True: 0, False: 0]
  ------------------
37452|      0|                break;
37453|      0|            }
37454|    375|            case JANET_NUMBER: {
  ------------------
  |  Branch (37454:13): [True: 375, False: 1.68M]
  ------------------
37455|    375|                double xx = janet_unwrap_number(x);
  ------------------
  |  |  839|    375|#define janet_unwrap_number(x) ((x).number)
  ------------------
37456|    375|                double yy = janet_unwrap_number(y);
  ------------------
  |  |  839|    375|#define janet_unwrap_number(x) ((x).number)
  ------------------
37457|    375|                if (xx == yy) {
  ------------------
  |  Branch (37457:21): [True: 374, False: 1]
  ------------------
37458|    374|                    break;
37459|    374|                } else {
37460|      1|                    return (xx < yy) ? -1 : 1;
  ------------------
  |  Branch (37460:28): [True: 1, False: 0]
  ------------------
37461|      1|                }
37462|    375|            }
37463|   185k|            case JANET_STRING:
  ------------------
  |  Branch (37463:13): [True: 185k, False: 1.50M]
  ------------------
37464|   970k|            case JANET_SYMBOL:
  ------------------
  |  Branch (37464:13): [True: 785k, False: 903k]
  ------------------
37465|   970k|            case JANET_KEYWORD: {
  ------------------
  |  Branch (37465:13): [True: 12, False: 1.68M]
  ------------------
37466|   970k|                int diff = janet_string_compare(janet_unwrap_string(x), janet_unwrap_string(y));
  ------------------
  |  |  863|   970k|#define janet_unwrap_string(x) ((JanetString)janet_nanbox_to_pointer(x))
  ------------------
                              int diff = janet_string_compare(janet_unwrap_string(x), janet_unwrap_string(y));
  ------------------
  |  |  863|   970k|#define janet_unwrap_string(x) ((JanetString)janet_nanbox_to_pointer(x))
  ------------------
37467|   970k|                if (diff) return diff;
  ------------------
  |  Branch (37467:21): [True: 1.06k, False: 969k]
  ------------------
37468|   969k|                break;
37469|   970k|            }
37470|   969k|            case JANET_ABSTRACT: {
  ------------------
  |  Branch (37470:13): [True: 0, False: 1.68M]
  ------------------
37471|      0|                int diff = janet_compare_abstract(janet_unwrap_abstract(x), janet_unwrap_abstract(y));
  ------------------
  |  |  866|      0|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
                              int diff = janet_compare_abstract(janet_unwrap_abstract(x), janet_unwrap_abstract(y));
  ------------------
  |  |  866|      0|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
37472|      0|                if (diff) return diff;
  ------------------
  |  Branch (37472:21): [True: 0, False: 0]
  ------------------
37473|      0|                break;
37474|      0|            }
37475|   239k|            default: {
  ------------------
  |  Branch (37475:13): [True: 239k, False: 1.44M]
  ------------------
37476|   239k|                if (janet_unwrap_pointer(x) == janet_unwrap_pointer(y)) {
  ------------------
  |  |  867|   239k|#define janet_unwrap_pointer(x) (janet_nanbox_to_pointer(x))
  ------------------
                              if (janet_unwrap_pointer(x) == janet_unwrap_pointer(y)) {
  ------------------
  |  |  867|   239k|#define janet_unwrap_pointer(x) (janet_nanbox_to_pointer(x))
  ------------------
  |  Branch (37476:21): [True: 0, False: 239k]
  ------------------
37477|      0|                    break;
37478|   239k|                } else {
37479|   239k|                    return janet_unwrap_pointer(x) > janet_unwrap_pointer(y) ? 1 : -1;
  ------------------
  |  |  867|   239k|#define janet_unwrap_pointer(x) (janet_nanbox_to_pointer(x))
  ------------------
                                  return janet_unwrap_pointer(x) > janet_unwrap_pointer(y) ? 1 : -1;
  ------------------
  |  |  867|   239k|#define janet_unwrap_pointer(x) (janet_nanbox_to_pointer(x))
  ------------------
  |  Branch (37479:28): [True: 1.67k, False: 237k]
  ------------------
37480|   239k|                }
37481|   239k|            }
37482|   478k|            case JANET_TUPLE: {
  ------------------
  |  Branch (37482:13): [True: 478k, False: 1.21M]
  ------------------
37483|   478k|                const Janet *lhs = janet_unwrap_tuple(x);
  ------------------
  |  |  858|   478k|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
37484|   478k|                const Janet *rhs = janet_unwrap_tuple(y);
  ------------------
  |  |  858|   478k|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
37485|   478k|                if (JANET_TUPLE_FLAG_BRACKETCTOR & (janet_tuple_flag(lhs) ^ janet_tuple_flag(rhs))) {
  ------------------
  |  | 1798|   478k|#define JANET_TUPLE_FLAG_BRACKETCTOR 0x10000
  ------------------
                              if (JANET_TUPLE_FLAG_BRACKETCTOR & (janet_tuple_flag(lhs) ^ janet_tuple_flag(rhs))) {
  ------------------
  |  | 1806|   478k|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|   478k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                              if (JANET_TUPLE_FLAG_BRACKETCTOR & (janet_tuple_flag(lhs) ^ janet_tuple_flag(rhs))) {
  ------------------
  |  | 1806|   478k|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|   478k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (37485:21): [True: 204, False: 478k]
  ------------------
37486|    204|                    return (janet_tuple_flag(lhs) & JANET_TUPLE_FLAG_BRACKETCTOR) ? 1 : -1;
  ------------------
  |  | 1806|    204|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|    204|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                                  return (janet_tuple_flag(lhs) & JANET_TUPLE_FLAG_BRACKETCTOR) ? 1 : -1;
  ------------------
  |  | 1798|    204|#define JANET_TUPLE_FLAG_BRACKETCTOR 0x10000
  ------------------
  |  Branch (37486:28): [True: 1, False: 203]
  ------------------
37487|    204|                }
37488|   478k|                push_traversal_node(janet_tuple_head(lhs), janet_tuple_head(rhs), 1);
  ------------------
  |  | 1800|   478k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  ------------------
                              push_traversal_node(janet_tuple_head(lhs), janet_tuple_head(rhs), 1);
  ------------------
  |  | 1800|   478k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  ------------------
37489|   478k|                break;
37490|   478k|            }
37491|      1|            case JANET_STRUCT: {
  ------------------
  |  Branch (37491:13): [True: 1, False: 1.68M]
  ------------------
37492|      1|                const JanetKV *lhs = janet_unwrap_struct(x);
  ------------------
  |  |  857|      1|#define janet_unwrap_struct(x) ((JanetStruct)janet_nanbox_to_pointer(x))
  ------------------
37493|      1|                const JanetKV *rhs = janet_unwrap_struct(y);
  ------------------
  |  |  857|      1|#define janet_unwrap_struct(x) ((JanetStruct)janet_nanbox_to_pointer(x))
  ------------------
37494|      1|                int32_t llen = janet_struct_capacity(lhs);
  ------------------
  |  | 1849|      1|#define janet_struct_capacity(t) (janet_struct_head(t)->capacity)
  |  |  ------------------
  |  |  |  | 1846|      1|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
37495|      1|                int32_t rlen = janet_struct_capacity(rhs);
  ------------------
  |  | 1849|      1|#define janet_struct_capacity(t) (janet_struct_head(t)->capacity)
  |  |  ------------------
  |  |  |  | 1846|      1|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
37496|      1|                int32_t lhash = janet_struct_hash(lhs);
  ------------------
  |  | 1850|      1|#define janet_struct_hash(t) (janet_struct_head(t)->hash)
  |  |  ------------------
  |  |  |  | 1846|      1|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
37497|      1|                int32_t rhash = janet_struct_hash(rhs);
  ------------------
  |  | 1850|      1|#define janet_struct_hash(t) (janet_struct_head(t)->hash)
  |  |  ------------------
  |  |  |  | 1846|      1|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
37498|      1|                if (llen < rlen) return -1;
  ------------------
  |  Branch (37498:21): [True: 0, False: 1]
  ------------------
37499|      1|                if (llen > rlen) return 1;
  ------------------
  |  Branch (37499:21): [True: 1, False: 0]
  ------------------
37500|      0|                if (lhash < rhash) return -1;
  ------------------
  |  Branch (37500:21): [True: 0, False: 0]
  ------------------
37501|      0|                if (lhash > rhash) return 1;
  ------------------
  |  Branch (37501:21): [True: 0, False: 0]
  ------------------
37502|      0|                push_traversal_node(janet_struct_head(lhs), janet_struct_head(rhs), 0);
  ------------------
  |  | 1846|      0|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  ------------------
                              push_traversal_node(janet_struct_head(lhs), janet_struct_head(rhs), 0);
  ------------------
  |  | 1846|      0|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  ------------------
37503|      0|                break;
37504|      0|            }
37505|  1.68M|        }
37506|  1.68M|    } while (!(status = traversal_next(&x, &y)));
  ------------------
  |  Branch (37506:14): [True: 956k, False: 491k]
  ------------------
37507|   491k|    return status - 2;
37508|   773k|}
janet_in:
37521|  16.4M|Janet janet_in(Janet ds, Janet key) {
37522|  16.4M|    Janet value;
37523|  16.4M|    JanetType type = janet_type(ds);
  ------------------
  |  |  795|  16.4M|    (isnan((x).number) \
  |  |  796|  16.4M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  16.4M|        : JANET_NUMBER)
  ------------------
  |  Branch (37523:22): [True: 16.4M, False: 0]
  ------------------
37524|  16.4M|    switch (type) {
37525|      0|        default:
  ------------------
  |  Branch (37525:9): [True: 0, False: 16.4M]
  ------------------
37526|      0|            janet_panicf("expected %T, got %v", JANET_TFLAG_LENGTHABLE, ds);
  ------------------
  |  |  615|      0|#define JANET_TFLAG_LENGTHABLE (JANET_TFLAG_BYTES | JANET_TFLAG_INDEXED | JANET_TFLAG_DICTIONARY)
  |  |  ------------------
  |  |  |  |  612|      0|#define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  599|      0|#define JANET_TFLAG_STRING (1 << JANET_STRING)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  600|      0|#define JANET_TFLAG_SYMBOL (1 << JANET_SYMBOL)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  606|      0|#define JANET_TFLAG_BUFFER (1 << JANET_BUFFER)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  601|      0|#define JANET_TFLAG_KEYWORD (1 << JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define JANET_TFLAG_LENGTHABLE (JANET_TFLAG_BYTES | JANET_TFLAG_INDEXED | JANET_TFLAG_DICTIONARY)
  |  |  ------------------
  |  |  |  |  613|      0|#define JANET_TFLAG_INDEXED (JANET_TFLAG_ARRAY | JANET_TFLAG_TUPLE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  602|      0|#define JANET_TFLAG_ARRAY (1 << JANET_ARRAY)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_INDEXED (JANET_TFLAG_ARRAY | JANET_TFLAG_TUPLE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  603|      0|#define JANET_TFLAG_TUPLE (1 << JANET_TUPLE)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define JANET_TFLAG_LENGTHABLE (JANET_TFLAG_BYTES | JANET_TFLAG_INDEXED | JANET_TFLAG_DICTIONARY)
  |  |  ------------------
  |  |  |  |  614|      0|#define JANET_TFLAG_DICTIONARY (JANET_TFLAG_TABLE | JANET_TFLAG_STRUCT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  604|      0|#define JANET_TFLAG_TABLE (1 << JANET_TABLE)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_DICTIONARY (JANET_TFLAG_TABLE | JANET_TFLAG_STRUCT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  605|      0|#define JANET_TFLAG_STRUCT (1 << JANET_STRUCT)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37527|      0|            break;
37528|  1.43M|        case JANET_STRUCT:
  ------------------
  |  Branch (37528:9): [True: 1.43M, False: 15.0M]
  ------------------
37529|  1.43M|            value = janet_struct_get(janet_unwrap_struct(ds), key);
  ------------------
  |  |  857|  1.43M|#define janet_unwrap_struct(x) ((JanetStruct)janet_nanbox_to_pointer(x))
  ------------------
37530|  1.43M|            break;
37531|   371k|        case JANET_TABLE:
  ------------------
  |  Branch (37531:9): [True: 371k, False: 16.0M]
  ------------------
37532|   371k|            value = janet_table_get(janet_unwrap_table(ds), key);
  ------------------
  |  |  861|   371k|#define janet_unwrap_table(x) ((JanetTable *)janet_nanbox_to_pointer(x))
  ------------------
37533|   371k|            break;
37534|   570k|        case JANET_ARRAY: {
  ------------------
  |  Branch (37534:9): [True: 570k, False: 15.8M]
  ------------------
37535|   570k|            JanetArray *array = janet_unwrap_array(ds);
  ------------------
  |  |  860|   570k|#define janet_unwrap_array(x) ((JanetArray *)janet_nanbox_to_pointer(x))
  ------------------
37536|   570k|            int32_t index = getter_checkint(type, key, array->count);
37537|   570k|            value = array->data[index];
37538|   570k|            break;
37539|      0|        }
37540|  11.9M|        case JANET_TUPLE: {
  ------------------
  |  Branch (37540:9): [True: 11.9M, False: 4.53M]
  ------------------
37541|  11.9M|            const Janet *tuple = janet_unwrap_tuple(ds);
  ------------------
  |  |  858|  11.9M|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
37542|  11.9M|            int32_t len = janet_tuple_length(tuple);
  ------------------
  |  | 1802|  11.9M|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|  11.9M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
37543|  11.9M|            value = tuple[getter_checkint(type, key, len)];
37544|  11.9M|            break;
37545|      0|        }
37546|   359k|        case JANET_BUFFER: {
  ------------------
  |  Branch (37546:9): [True: 359k, False: 16.0M]
  ------------------
37547|   359k|            JanetBuffer *buffer = janet_unwrap_buffer(ds);
  ------------------
  |  |  862|   359k|#define janet_unwrap_buffer(x) ((JanetBuffer *)janet_nanbox_to_pointer(x))
  ------------------
37548|   359k|            int32_t index = getter_checkint(type, key, buffer->count);
37549|   359k|            value = janet_wrap_integer(buffer->data[index]);
  ------------------
  |  |  967|   359k|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|   359k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
37550|   359k|            break;
37551|      0|        }
37552|  1.79M|        case JANET_STRING:
  ------------------
  |  Branch (37552:9): [True: 1.79M, False: 14.6M]
  ------------------
37553|  1.79M|        case JANET_SYMBOL:
  ------------------
  |  Branch (37553:9): [True: 0, False: 16.4M]
  ------------------
37554|  1.79M|        case JANET_KEYWORD: {
  ------------------
  |  Branch (37554:9): [True: 0, False: 16.4M]
  ------------------
37555|  1.79M|            const uint8_t *str = janet_unwrap_string(ds);
  ------------------
  |  |  863|  1.79M|#define janet_unwrap_string(x) ((JanetString)janet_nanbox_to_pointer(x))
  ------------------
37556|  1.79M|            int32_t index = getter_checkint(type, key, janet_string_length(str));
  ------------------
  |  | 1813|  1.79M|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|  1.79M|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
37557|  1.79M|            value = janet_wrap_integer(str[index]);
  ------------------
  |  |  967|  1.79M|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|  1.79M|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
37558|  1.79M|            break;
37559|  1.79M|        }
37560|      0|        case JANET_ABSTRACT: {
  ------------------
  |  Branch (37560:9): [True: 0, False: 16.4M]
  ------------------
37561|      0|            JanetAbstractType *type = (JanetAbstractType *)janet_abstract_type(janet_unwrap_abstract(ds));
  ------------------
  |  | 1899|      0|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|      0|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
37562|      0|            if (type->get) {
  ------------------
  |  Branch (37562:17): [True: 0, False: 0]
  ------------------
37563|      0|                if (!(type->get)(janet_unwrap_abstract(ds), key, &value))
  ------------------
  |  |  866|      0|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
  |  Branch (37563:21): [True: 0, False: 0]
  ------------------
37564|      0|                    janet_panicf("key %v not found in %v ", key, ds);
37565|      0|            } else {
37566|      0|                janet_panicf("no getter for %v", ds);
37567|      0|            }
37568|      0|            break;
37569|      0|        }
37570|      0|        case JANET_FIBER: {
  ------------------
  |  Branch (37570:9): [True: 0, False: 16.4M]
  ------------------
37571|       |            /* Bit of a hack to allow iterating over fibers. */
37572|      0|            if (janet_equals(key, janet_wrap_integer(0))) {
  ------------------
  |  |  967|      0|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
  |  Branch (37572:17): [True: 0, False: 0]
  ------------------
37573|      0|                return janet_unwrap_fiber(ds)->last_value;
  ------------------
  |  |  859|      0|#define janet_unwrap_fiber(x) ((JanetFiber *)janet_nanbox_to_pointer(x))
  ------------------
37574|      0|            } else {
37575|      0|                janet_panicf("expected key 0, got %v", key);
37576|      0|            }
37577|      0|        }
37578|  16.4M|    }
37579|  16.4M|    return value;
37580|  16.4M|}
janet_get:
37582|  1.97M|Janet janet_get(Janet ds, Janet key) {
37583|  1.97M|    JanetType t = janet_type(ds);
  ------------------
  |  |  795|  1.97M|    (isnan((x).number) \
  |  |  796|  1.97M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  1.97M|        : JANET_NUMBER)
  ------------------
  |  Branch (37583:19): [True: 1.97M, False: 427]
  ------------------
37584|  1.97M|    switch (t) {
37585|    427|        default:
  ------------------
  |  Branch (37585:9): [True: 427, False: 1.97M]
  ------------------
37586|    427|            return janet_wrap_nil();
  ------------------
  |  |  831|    427|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|    427|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    427|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    427|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37587|      0|        case JANET_STRING:
  ------------------
  |  Branch (37587:9): [True: 0, False: 1.97M]
  ------------------
37588|      0|        case JANET_SYMBOL:
  ------------------
  |  Branch (37588:9): [True: 0, False: 1.97M]
  ------------------
37589|      0|        case JANET_KEYWORD: {
  ------------------
  |  Branch (37589:9): [True: 0, False: 1.97M]
  ------------------
37590|      0|            if (!janet_checkint(key)) return janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (37590:17): [True: 0, False: 0]
  ------------------
37591|      0|            int32_t index = janet_unwrap_integer(key);
  ------------------
  |  |  966|      0|#define janet_unwrap_integer(x) ((int32_t) janet_unwrap_number(x))
  |  |  ------------------
  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  ------------------
37592|      0|            if (index < 0) return janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (37592:17): [True: 0, False: 0]
  ------------------
37593|      0|            const uint8_t *str = janet_unwrap_string(ds);
  ------------------
  |  |  863|      0|#define janet_unwrap_string(x) ((JanetString)janet_nanbox_to_pointer(x))
  ------------------
37594|      0|            if (index >= janet_string_length(str)) return janet_wrap_nil();
  ------------------
  |  | 1813|      0|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|      0|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
                          if (index >= janet_string_length(str)) return janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (37594:17): [True: 0, False: 0]
  ------------------
37595|      0|            return janet_wrap_integer(str[index]);
  ------------------
  |  |  967|      0|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
37596|      0|        }
37597|      0|        case JANET_ABSTRACT: {
  ------------------
  |  Branch (37597:9): [True: 0, False: 1.97M]
  ------------------
37598|      0|            Janet value;
37599|      0|            void *abst = janet_unwrap_abstract(ds);
  ------------------
  |  |  866|      0|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
37600|      0|            JanetAbstractType *type = (JanetAbstractType *)janet_abstract_type(abst);
  ------------------
  |  | 1899|      0|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|      0|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
37601|      0|            if (!type->get) return janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (37601:17): [True: 0, False: 0]
  ------------------
37602|      0|            if ((type->get)(abst, key, &value))
  ------------------
  |  Branch (37602:17): [True: 0, False: 0]
  ------------------
37603|      0|                return value;
37604|      0|            return janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37605|      0|        }
37606|      0|        case JANET_ARRAY:
  ------------------
  |  Branch (37606:9): [True: 0, False: 1.97M]
  ------------------
37607|   200k|        case JANET_TUPLE:
  ------------------
  |  Branch (37607:9): [True: 200k, False: 1.77M]
  ------------------
37608|   200k|        case JANET_BUFFER: {
  ------------------
  |  Branch (37608:9): [True: 0, False: 1.97M]
  ------------------
37609|   200k|            if (!janet_checkint(key)) return janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (37609:17): [True: 0, False: 200k]
  ------------------
37610|   200k|            int32_t index = janet_unwrap_integer(key);
  ------------------
  |  |  966|   200k|#define janet_unwrap_integer(x) ((int32_t) janet_unwrap_number(x))
  |  |  ------------------
  |  |  |  |  839|   200k|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  ------------------
37611|   200k|            if (index < 0) return janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (37611:17): [True: 0, False: 200k]
  ------------------
37612|   200k|            if (t == JANET_ARRAY) {
  ------------------
  |  Branch (37612:17): [True: 0, False: 200k]
  ------------------
37613|      0|                JanetArray *a = janet_unwrap_array(ds);
  ------------------
  |  |  860|      0|#define janet_unwrap_array(x) ((JanetArray *)janet_nanbox_to_pointer(x))
  ------------------
37614|      0|                if (index >= a->count) return janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (37614:21): [True: 0, False: 0]
  ------------------
37615|      0|                return a->data[index];
37616|   200k|            } else if (t == JANET_BUFFER) {
  ------------------
  |  Branch (37616:24): [True: 0, False: 200k]
  ------------------
37617|      0|                JanetBuffer *b = janet_unwrap_buffer(ds);
  ------------------
  |  |  862|      0|#define janet_unwrap_buffer(x) ((JanetBuffer *)janet_nanbox_to_pointer(x))
  ------------------
37618|      0|                if (index >= b->count) return janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (37618:21): [True: 0, False: 0]
  ------------------
37619|      0|                return janet_wrap_integer(b->data[index]);
  ------------------
  |  |  967|      0|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
37620|   200k|            } else {
37621|   200k|                const Janet *t = janet_unwrap_tuple(ds);
  ------------------
  |  |  858|   200k|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
37622|   200k|                if (index >= janet_tuple_length(t)) return janet_wrap_nil();
  ------------------
  |  | 1802|   200k|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|   200k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                              if (index >= janet_tuple_length(t)) return janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (37622:21): [True: 0, False: 200k]
  ------------------
37623|   200k|                return t[index];
37624|   200k|            }
37625|   200k|        }
37626|   734k|        case JANET_TABLE: {
  ------------------
  |  Branch (37626:9): [True: 734k, False: 1.23M]
  ------------------
37627|   734k|            return janet_table_get(janet_unwrap_table(ds), key);
  ------------------
  |  |  861|   734k|#define janet_unwrap_table(x) ((JanetTable *)janet_nanbox_to_pointer(x))
  ------------------
37628|   200k|        }
37629|  1.03M|        case JANET_STRUCT: {
  ------------------
  |  Branch (37629:9): [True: 1.03M, False: 935k]
  ------------------
37630|  1.03M|            const JanetKV *st = janet_unwrap_struct(ds);
  ------------------
  |  |  857|  1.03M|#define janet_unwrap_struct(x) ((JanetStruct)janet_nanbox_to_pointer(x))
  ------------------
37631|  1.03M|            return janet_struct_get(st, key);
37632|   200k|        }
37633|      0|        case JANET_FIBER: {
  ------------------
  |  Branch (37633:9): [True: 0, False: 1.97M]
  ------------------
37634|       |            /* Bit of a hack to allow iterating over fibers. */
37635|      0|            if (janet_equals(key, janet_wrap_integer(0))) {
  ------------------
  |  |  967|      0|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
  |  Branch (37635:17): [True: 0, False: 0]
  ------------------
37636|      0|                return janet_unwrap_fiber(ds)->last_value;
  ------------------
  |  |  859|      0|#define janet_unwrap_fiber(x) ((JanetFiber *)janet_nanbox_to_pointer(x))
  ------------------
37637|      0|            } else {
37638|      0|                return janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37639|      0|            }
37640|      0|        }
37641|  1.97M|    }
37642|  1.97M|}
janet_getindex:
37644|  72.8k|Janet janet_getindex(Janet ds, int32_t index) {
37645|  72.8k|    Janet value;
37646|  72.8k|    if (index < 0) janet_panic("expected non-negative index");
  ------------------
  |  Branch (37646:9): [True: 0, False: 72.8k]
  ------------------
37647|  72.8k|    switch (janet_type(ds)) {
  ------------------
  |  |  795|  72.8k|    (isnan((x).number) \
  |  |  796|  72.8k|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  72.8k|        : JANET_NUMBER)
  ------------------
  |  Branch (37647:13): [True: 72.4k, False: 416]
  ------------------
37648|    416|        default:
  ------------------
  |  Branch (37648:9): [True: 416, False: 72.4k]
  ------------------
37649|    416|            janet_panicf("expected %T, got %v", JANET_TFLAG_LENGTHABLE, ds);
  ------------------
  |  |  615|    416|#define JANET_TFLAG_LENGTHABLE (JANET_TFLAG_BYTES | JANET_TFLAG_INDEXED | JANET_TFLAG_DICTIONARY)
  |  |  ------------------
  |  |  |  |  612|    416|#define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  599|    416|#define JANET_TFLAG_STRING (1 << JANET_STRING)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  600|    416|#define JANET_TFLAG_SYMBOL (1 << JANET_SYMBOL)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  606|    416|#define JANET_TFLAG_BUFFER (1 << JANET_BUFFER)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  601|    416|#define JANET_TFLAG_KEYWORD (1 << JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define JANET_TFLAG_LENGTHABLE (JANET_TFLAG_BYTES | JANET_TFLAG_INDEXED | JANET_TFLAG_DICTIONARY)
  |  |  ------------------
  |  |  |  |  613|    416|#define JANET_TFLAG_INDEXED (JANET_TFLAG_ARRAY | JANET_TFLAG_TUPLE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  602|    416|#define JANET_TFLAG_ARRAY (1 << JANET_ARRAY)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_INDEXED (JANET_TFLAG_ARRAY | JANET_TFLAG_TUPLE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  603|    416|#define JANET_TFLAG_TUPLE (1 << JANET_TUPLE)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define JANET_TFLAG_LENGTHABLE (JANET_TFLAG_BYTES | JANET_TFLAG_INDEXED | JANET_TFLAG_DICTIONARY)
  |  |  ------------------
  |  |  |  |  614|    416|#define JANET_TFLAG_DICTIONARY (JANET_TFLAG_TABLE | JANET_TFLAG_STRUCT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  604|    416|#define JANET_TFLAG_TABLE (1 << JANET_TABLE)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_DICTIONARY (JANET_TFLAG_TABLE | JANET_TFLAG_STRUCT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  605|    416|#define JANET_TFLAG_STRUCT (1 << JANET_STRUCT)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37650|      0|            break;
37651|      0|        case JANET_STRING:
  ------------------
  |  Branch (37651:9): [True: 0, False: 72.8k]
  ------------------
37652|    429|        case JANET_SYMBOL:
  ------------------
  |  Branch (37652:9): [True: 429, False: 72.4k]
  ------------------
37653|  9.39k|        case JANET_KEYWORD:
  ------------------
  |  Branch (37653:9): [True: 8.96k, False: 63.8k]
  ------------------
37654|  9.39k|            if (index >= janet_string_length(janet_unwrap_string(ds))) {
  ------------------
  |  | 1813|  9.39k|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|  9.39k|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (37654:17): [True: 1.78k, False: 7.61k]
  ------------------
37655|  1.78k|                value = janet_wrap_nil();
  ------------------
  |  |  831|  1.78k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  1.78k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.78k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.78k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37656|  7.61k|            } else {
37657|  7.61k|                value = janet_wrap_integer(janet_unwrap_string(ds)[index]);
  ------------------
  |  |  967|  7.61k|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|  7.61k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
37658|  7.61k|            }
37659|  9.39k|            break;
37660|    304|        case JANET_ARRAY:
  ------------------
  |  Branch (37660:9): [True: 304, False: 72.5k]
  ------------------
37661|    304|            if (index >= janet_unwrap_array(ds)->count) {
  ------------------
  |  |  860|    304|#define janet_unwrap_array(x) ((JanetArray *)janet_nanbox_to_pointer(x))
  ------------------
  |  Branch (37661:17): [True: 0, False: 304]
  ------------------
37662|      0|                value = janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37663|    304|            } else {
37664|    304|                value = janet_unwrap_array(ds)->data[index];
  ------------------
  |  |  860|    304|#define janet_unwrap_array(x) ((JanetArray *)janet_nanbox_to_pointer(x))
  ------------------
37665|    304|            }
37666|    304|            break;
37667|      0|        case JANET_BUFFER:
  ------------------
  |  Branch (37667:9): [True: 0, False: 72.8k]
  ------------------
37668|      0|            if (index >= janet_unwrap_buffer(ds)->count) {
  ------------------
  |  |  862|      0|#define janet_unwrap_buffer(x) ((JanetBuffer *)janet_nanbox_to_pointer(x))
  ------------------
  |  Branch (37668:17): [True: 0, False: 0]
  ------------------
37669|      0|                value = janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37670|      0|            } else {
37671|      0|                value = janet_wrap_integer(janet_unwrap_buffer(ds)->data[index]);
  ------------------
  |  |  967|      0|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
37672|      0|            }
37673|      0|            break;
37674|  62.7k|        case JANET_TUPLE:
  ------------------
  |  Branch (37674:9): [True: 62.7k, False: 10.1k]
  ------------------
37675|  62.7k|            if (index >= janet_tuple_length(janet_unwrap_tuple(ds))) {
  ------------------
  |  | 1802|  62.7k|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|  62.7k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (37675:17): [True: 342, False: 62.3k]
  ------------------
37676|    342|                value = janet_wrap_nil();
  ------------------
  |  |  831|    342|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|    342|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    342|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    342|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37677|  62.3k|            } else {
37678|  62.3k|                value = janet_unwrap_tuple(ds)[index];
  ------------------
  |  |  858|  62.3k|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
37679|  62.3k|            }
37680|  62.7k|            break;
37681|      0|        case JANET_TABLE:
  ------------------
  |  Branch (37681:9): [True: 0, False: 72.8k]
  ------------------
37682|      0|            value = janet_table_get(janet_unwrap_table(ds), janet_wrap_integer(index));
  ------------------
  |  |  861|      0|#define janet_unwrap_table(x) ((JanetTable *)janet_nanbox_to_pointer(x))
  ------------------
                          value = janet_table_get(janet_unwrap_table(ds), janet_wrap_integer(index));
  ------------------
  |  |  967|      0|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
37683|      0|            break;
37684|      0|        case JANET_STRUCT:
  ------------------
  |  Branch (37684:9): [True: 0, False: 72.8k]
  ------------------
37685|      0|            value = janet_struct_get(janet_unwrap_struct(ds), janet_wrap_integer(index));
  ------------------
  |  |  857|      0|#define janet_unwrap_struct(x) ((JanetStruct)janet_nanbox_to_pointer(x))
  ------------------
                          value = janet_struct_get(janet_unwrap_struct(ds), janet_wrap_integer(index));
  ------------------
  |  |  967|      0|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
37686|      0|            break;
37687|      0|        case JANET_ABSTRACT: {
  ------------------
  |  Branch (37687:9): [True: 0, False: 72.8k]
  ------------------
37688|      0|            JanetAbstractType *type = (JanetAbstractType *)janet_abstract_type(janet_unwrap_abstract(ds));
  ------------------
  |  | 1899|      0|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|      0|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
37689|      0|            if (type->get) {
  ------------------
  |  Branch (37689:17): [True: 0, False: 0]
  ------------------
37690|      0|                if (!(type->get)(janet_unwrap_abstract(ds), janet_wrap_integer(index), &value))
  ------------------
  |  |  866|      0|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
                              if (!(type->get)(janet_unwrap_abstract(ds), janet_wrap_integer(index), &value))
  ------------------
  |  |  967|      0|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
  |  Branch (37690:21): [True: 0, False: 0]
  ------------------
37691|      0|                    value = janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37692|      0|            } else {
37693|      0|                janet_panicf("no getter for %v", ds);
37694|      0|            }
37695|      0|            break;
37696|      0|        }
37697|      0|        case JANET_FIBER: {
  ------------------
  |  Branch (37697:9): [True: 0, False: 72.8k]
  ------------------
37698|      0|            if (index == 0) {
  ------------------
  |  Branch (37698:17): [True: 0, False: 0]
  ------------------
37699|      0|                value = janet_unwrap_fiber(ds)->last_value;
  ------------------
  |  |  859|      0|#define janet_unwrap_fiber(x) ((JanetFiber *)janet_nanbox_to_pointer(x))
  ------------------
37700|      0|            } else {
37701|      0|                value = janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37702|      0|            }
37703|      0|            break;
37704|      0|        }
37705|  72.8k|    }
37706|  72.4k|    return value;
37707|  72.8k|}
janet_length:
37709|  2.38M|int32_t janet_length(Janet x) {
37710|  2.38M|    switch (janet_type(x)) {
  ------------------
  |  |  795|  2.38M|    (isnan((x).number) \
  |  |  796|  2.38M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  2.38M|        : JANET_NUMBER)
  ------------------
  |  Branch (37710:13): [True: 2.38M, False: 0]
  ------------------
37711|      0|        default:
  ------------------
  |  Branch (37711:9): [True: 0, False: 2.38M]
  ------------------
37712|      0|            janet_panicf("expected %T, got %v", JANET_TFLAG_LENGTHABLE, x);
  ------------------
  |  |  615|      0|#define JANET_TFLAG_LENGTHABLE (JANET_TFLAG_BYTES | JANET_TFLAG_INDEXED | JANET_TFLAG_DICTIONARY)
  |  |  ------------------
  |  |  |  |  612|      0|#define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  599|      0|#define JANET_TFLAG_STRING (1 << JANET_STRING)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  600|      0|#define JANET_TFLAG_SYMBOL (1 << JANET_SYMBOL)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  606|      0|#define JANET_TFLAG_BUFFER (1 << JANET_BUFFER)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  601|      0|#define JANET_TFLAG_KEYWORD (1 << JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define JANET_TFLAG_LENGTHABLE (JANET_TFLAG_BYTES | JANET_TFLAG_INDEXED | JANET_TFLAG_DICTIONARY)
  |  |  ------------------
  |  |  |  |  613|      0|#define JANET_TFLAG_INDEXED (JANET_TFLAG_ARRAY | JANET_TFLAG_TUPLE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  602|      0|#define JANET_TFLAG_ARRAY (1 << JANET_ARRAY)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_INDEXED (JANET_TFLAG_ARRAY | JANET_TFLAG_TUPLE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  603|      0|#define JANET_TFLAG_TUPLE (1 << JANET_TUPLE)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define JANET_TFLAG_LENGTHABLE (JANET_TFLAG_BYTES | JANET_TFLAG_INDEXED | JANET_TFLAG_DICTIONARY)
  |  |  ------------------
  |  |  |  |  614|      0|#define JANET_TFLAG_DICTIONARY (JANET_TFLAG_TABLE | JANET_TFLAG_STRUCT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  604|      0|#define JANET_TFLAG_TABLE (1 << JANET_TABLE)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_DICTIONARY (JANET_TFLAG_TABLE | JANET_TFLAG_STRUCT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  605|      0|#define JANET_TFLAG_STRUCT (1 << JANET_STRUCT)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37713|      0|        case JANET_STRING:
  ------------------
  |  Branch (37713:9): [True: 0, False: 2.38M]
  ------------------
37714|    838|        case JANET_SYMBOL:
  ------------------
  |  Branch (37714:9): [True: 838, False: 2.38M]
  ------------------
37715|    838|        case JANET_KEYWORD:
  ------------------
  |  Branch (37715:9): [True: 0, False: 2.38M]
  ------------------
37716|    838|            return janet_string_length(janet_unwrap_string(x));
  ------------------
  |  | 1813|    838|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|    838|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
37717|   568k|        case JANET_ARRAY:
  ------------------
  |  Branch (37717:9): [True: 568k, False: 1.81M]
  ------------------
37718|   568k|            return janet_unwrap_array(x)->count;
  ------------------
  |  |  860|   568k|#define janet_unwrap_array(x) ((JanetArray *)janet_nanbox_to_pointer(x))
  ------------------
37719|      0|        case JANET_BUFFER:
  ------------------
  |  Branch (37719:9): [True: 0, False: 2.38M]
  ------------------
37720|      0|            return janet_unwrap_buffer(x)->count;
  ------------------
  |  |  862|      0|#define janet_unwrap_buffer(x) ((JanetBuffer *)janet_nanbox_to_pointer(x))
  ------------------
37721|  1.81M|        case JANET_TUPLE:
  ------------------
  |  Branch (37721:9): [True: 1.81M, False: 568k]
  ------------------
37722|  1.81M|            return janet_tuple_length(janet_unwrap_tuple(x));
  ------------------
  |  | 1802|  1.81M|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|  1.81M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
37723|      0|        case JANET_STRUCT:
  ------------------
  |  Branch (37723:9): [True: 0, False: 2.38M]
  ------------------
37724|      0|            return janet_struct_length(janet_unwrap_struct(x));
  ------------------
  |  | 1848|      0|#define janet_struct_length(t) (janet_struct_head(t)->length)
  |  |  ------------------
  |  |  |  | 1846|      0|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
37725|      0|        case JANET_TABLE:
  ------------------
  |  Branch (37725:9): [True: 0, False: 2.38M]
  ------------------
37726|      0|            return janet_unwrap_table(x)->count;
  ------------------
  |  |  861|      0|#define janet_unwrap_table(x) ((JanetTable *)janet_nanbox_to_pointer(x))
  ------------------
37727|      0|        case JANET_ABSTRACT: {
  ------------------
  |  Branch (37727:9): [True: 0, False: 2.38M]
  ------------------
37728|      0|            void *abst = janet_unwrap_abstract(x);
  ------------------
  |  |  866|      0|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
37729|      0|            const JanetAbstractType *type = janet_abstract_type(abst);
  ------------------
  |  | 1899|      0|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|      0|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
37730|      0|            if (type->length != NULL) {
  ------------------
  |  Branch (37730:17): [True: 0, False: 0]
  ------------------
37731|      0|                size_t len = type->length(abst, janet_abstract_size(abst));
  ------------------
  |  | 1900|      0|#define janet_abstract_size(u) (janet_abstract_head(u)->size)
  |  |  ------------------
  |  |  |  | 1897|      0|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
37732|      0|                if (len > INT32_MAX) {
  ------------------
  |  Branch (37732:21): [True: 0, False: 0]
  ------------------
37733|      0|                    janet_panicf("invalid integer length %u", len);
37734|      0|                }
37735|      0|                return (int32_t)(len);
37736|      0|            }
37737|      0|            Janet argv[1] = { x };
37738|      0|            Janet len = janet_mcall("length", 1, argv);
37739|      0|            if (!janet_checkint(len))
  ------------------
  |  Branch (37739:17): [True: 0, False: 0]
  ------------------
37740|      0|                janet_panicf("invalid integer length %v", len);
37741|      0|            return janet_unwrap_integer(len);
  ------------------
  |  |  966|      0|#define janet_unwrap_integer(x) ((int32_t) janet_unwrap_number(x))
  |  |  ------------------
  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  ------------------
37742|      0|        }
37743|  2.38M|    }
37744|  2.38M|}
janet_lengthv:
37746|  5.45M|Janet janet_lengthv(Janet x) {
37747|  5.45M|    switch (janet_type(x)) {
  ------------------
  |  |  795|  5.45M|    (isnan((x).number) \
  |  |  796|  5.45M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  5.45M|        : JANET_NUMBER)
  ------------------
  |  Branch (37747:13): [True: 5.45M, False: 163]
  ------------------
37748|    163|        default:
  ------------------
  |  Branch (37748:9): [True: 163, False: 5.45M]
  ------------------
37749|    163|            janet_panicf("expected %T, got %v", JANET_TFLAG_LENGTHABLE, x);
  ------------------
  |  |  615|    163|#define JANET_TFLAG_LENGTHABLE (JANET_TFLAG_BYTES | JANET_TFLAG_INDEXED | JANET_TFLAG_DICTIONARY)
  |  |  ------------------
  |  |  |  |  612|    163|#define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  599|    163|#define JANET_TFLAG_STRING (1 << JANET_STRING)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  600|    163|#define JANET_TFLAG_SYMBOL (1 << JANET_SYMBOL)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  606|    163|#define JANET_TFLAG_BUFFER (1 << JANET_BUFFER)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_BYTES (JANET_TFLAG_STRING | JANET_TFLAG_SYMBOL | JANET_TFLAG_BUFFER | JANET_TFLAG_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  601|    163|#define JANET_TFLAG_KEYWORD (1 << JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define JANET_TFLAG_LENGTHABLE (JANET_TFLAG_BYTES | JANET_TFLAG_INDEXED | JANET_TFLAG_DICTIONARY)
  |  |  ------------------
  |  |  |  |  613|    163|#define JANET_TFLAG_INDEXED (JANET_TFLAG_ARRAY | JANET_TFLAG_TUPLE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  602|    163|#define JANET_TFLAG_ARRAY (1 << JANET_ARRAY)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_INDEXED (JANET_TFLAG_ARRAY | JANET_TFLAG_TUPLE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  603|    163|#define JANET_TFLAG_TUPLE (1 << JANET_TUPLE)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define JANET_TFLAG_LENGTHABLE (JANET_TFLAG_BYTES | JANET_TFLAG_INDEXED | JANET_TFLAG_DICTIONARY)
  |  |  ------------------
  |  |  |  |  614|    163|#define JANET_TFLAG_DICTIONARY (JANET_TFLAG_TABLE | JANET_TFLAG_STRUCT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  604|    163|#define JANET_TFLAG_TABLE (1 << JANET_TABLE)
  |  |  |  |  ------------------
  |  |  |  |               #define JANET_TFLAG_DICTIONARY (JANET_TFLAG_TABLE | JANET_TFLAG_STRUCT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  605|    163|#define JANET_TFLAG_STRUCT (1 << JANET_STRUCT)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37750|     25|        case JANET_STRING:
  ------------------
  |  Branch (37750:9): [True: 25, False: 5.45M]
  ------------------
37751|     25|        case JANET_SYMBOL:
  ------------------
  |  Branch (37751:9): [True: 0, False: 5.45M]
  ------------------
37752|    438|        case JANET_KEYWORD:
  ------------------
  |  Branch (37752:9): [True: 413, False: 5.45M]
  ------------------
37753|    438|            return janet_wrap_integer(janet_string_length(janet_unwrap_string(x)));
  ------------------
  |  |  967|    438|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|    438|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
37754|     42|        case JANET_ARRAY:
  ------------------
  |  Branch (37754:9): [True: 42, False: 5.45M]
  ------------------
37755|     42|            return janet_wrap_integer(janet_unwrap_array(x)->count);
  ------------------
  |  |  967|     42|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|     42|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
37756|  5.44k|        case JANET_BUFFER:
  ------------------
  |  Branch (37756:9): [True: 5.44k, False: 5.45M]
  ------------------
37757|  5.44k|            return janet_wrap_integer(janet_unwrap_buffer(x)->count);
  ------------------
  |  |  967|  5.44k|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|  5.44k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
37758|  5.44M|        case JANET_TUPLE:
  ------------------
  |  Branch (37758:9): [True: 5.44M, False: 9.27k]
  ------------------
37759|  5.44M|            return janet_wrap_integer(janet_tuple_length(janet_unwrap_tuple(x)));
  ------------------
  |  |  967|  5.44M|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|  5.44M|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
37760|  1.54k|        case JANET_STRUCT:
  ------------------
  |  Branch (37760:9): [True: 1.54k, False: 5.45M]
  ------------------
37761|  1.54k|            return janet_wrap_integer(janet_struct_length(janet_unwrap_struct(x)));
  ------------------
  |  |  967|  1.54k|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|  1.54k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
37762|  1.64k|        case JANET_TABLE:
  ------------------
  |  Branch (37762:9): [True: 1.64k, False: 5.45M]
  ------------------
37763|  1.64k|            return janet_wrap_integer(janet_unwrap_table(x)->count);
  ------------------
  |  |  967|  1.64k|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|  1.64k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
37764|      0|        case JANET_ABSTRACT: {
  ------------------
  |  Branch (37764:9): [True: 0, False: 5.45M]
  ------------------
37765|      0|            void *abst = janet_unwrap_abstract(x);
  ------------------
  |  |  866|      0|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
37766|      0|            const JanetAbstractType *type = janet_abstract_type(abst);
  ------------------
  |  | 1899|      0|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|      0|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
37767|      0|            if (type->length != NULL) {
  ------------------
  |  Branch (37767:17): [True: 0, False: 0]
  ------------------
37768|      0|                size_t len = type->length(abst, janet_abstract_size(abst));
  ------------------
  |  | 1900|      0|#define janet_abstract_size(u) (janet_abstract_head(u)->size)
  |  |  ------------------
  |  |  |  | 1897|      0|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
37769|       |                /* If len is always less then double, we can never overflow */
37770|       |#ifdef JANET_32
37771|       |                return janet_wrap_number(len);
37772|       |#else
37773|      0|                if (len < (size_t) JANET_INTMAX_INT64) {
  ------------------
  |  |  167|      0|#define JANET_INTMAX_INT64 9007199254740992
  ------------------
  |  Branch (37773:21): [True: 0, False: 0]
  ------------------
37774|      0|                    return janet_wrap_number((double) len);
  ------------------
  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  ------------------
37775|      0|                } else {
37776|      0|                    janet_panicf("integer length %u too large", len);
37777|      0|                }
37778|      0|#endif
37779|      0|            }
37780|      0|            Janet argv[1] = { x };
37781|      0|            return janet_mcall("length", 1, argv);
37782|      0|        }
37783|  5.45M|    }
37784|  5.45M|}
janet_put:
37832|  29.5k|void janet_put(Janet ds, Janet key, Janet value) {
37833|  29.5k|    JanetType type = janet_type(ds);
  ------------------
  |  |  795|  29.5k|    (isnan((x).number) \
  |  |  796|  29.5k|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  29.5k|        : JANET_NUMBER)
  ------------------
  |  Branch (37833:22): [True: 29.5k, False: 0]
  ------------------
37834|  29.5k|    switch (type) {
37835|      0|        default:
  ------------------
  |  Branch (37835:9): [True: 0, False: 29.5k]
  ------------------
37836|      0|            janet_panicf("expected %T, got %v",
37837|      0|                         JANET_TFLAG_ARRAY | JANET_TFLAG_BUFFER | JANET_TFLAG_TABLE, ds);
  ------------------
  |  |  602|      0|#define JANET_TFLAG_ARRAY (1 << JANET_ARRAY)
  ------------------
                                       JANET_TFLAG_ARRAY | JANET_TFLAG_BUFFER | JANET_TFLAG_TABLE, ds);
  ------------------
  |  |  606|      0|#define JANET_TFLAG_BUFFER (1 << JANET_BUFFER)
  ------------------
                                       JANET_TFLAG_ARRAY | JANET_TFLAG_BUFFER | JANET_TFLAG_TABLE, ds);
  ------------------
  |  |  604|      0|#define JANET_TFLAG_TABLE (1 << JANET_TABLE)
  ------------------
37838|  4.46k|        case JANET_ARRAY: {
  ------------------
  |  Branch (37838:9): [True: 4.46k, False: 25.0k]
  ------------------
37839|  4.46k|            JanetArray *array = janet_unwrap_array(ds);
  ------------------
  |  |  860|  4.46k|#define janet_unwrap_array(x) ((JanetArray *)janet_nanbox_to_pointer(x))
  ------------------
37840|  4.46k|            int32_t index = getter_checkint(type, key, INT32_MAX - 1);
37841|  4.46k|            if (index >= array->count) {
  ------------------
  |  Branch (37841:17): [True: 0, False: 4.46k]
  ------------------
37842|      0|                janet_array_ensure(array, index + 1, 2);
37843|      0|                for (int32_t i = array->count; i < index + 1; i++) {
  ------------------
  |  Branch (37843:48): [True: 0, False: 0]
  ------------------
37844|      0|                    array->data[i] = janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37845|      0|                }
37846|      0|                array->count = index + 1;
37847|      0|            }
37848|  4.46k|            array->data[index] = value;
37849|  4.46k|            break;
37850|      0|        }
37851|      0|        case JANET_BUFFER: {
  ------------------
  |  Branch (37851:9): [True: 0, False: 29.5k]
  ------------------
37852|      0|            JanetBuffer *buffer = janet_unwrap_buffer(ds);
  ------------------
  |  |  862|      0|#define janet_unwrap_buffer(x) ((JanetBuffer *)janet_nanbox_to_pointer(x))
  ------------------
37853|      0|            int32_t index = getter_checkint(type, key, INT32_MAX - 1);
37854|      0|            if (!janet_checkint(value))
  ------------------
  |  Branch (37854:17): [True: 0, False: 0]
  ------------------
37855|      0|                janet_panicf("can only put integers in buffers, got %v", value);
37856|      0|            if (index >= buffer->count) {
  ------------------
  |  Branch (37856:17): [True: 0, False: 0]
  ------------------
37857|      0|                janet_buffer_ensure(buffer, index + 1, 2);
37858|      0|                memset(buffer->data + buffer->count, 0, index + 1 - buffer->count);
37859|      0|                buffer->count = index + 1;
37860|      0|            }
37861|      0|            buffer->data[index] = (uint8_t)(janet_unwrap_integer(value) & 0xFF);
  ------------------
  |  |  966|      0|#define janet_unwrap_integer(x) ((int32_t) janet_unwrap_number(x))
  |  |  ------------------
  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  ------------------
37862|      0|            break;
37863|      0|        }
37864|  25.0k|        case JANET_TABLE:
  ------------------
  |  Branch (37864:9): [True: 25.0k, False: 4.46k]
  ------------------
37865|  25.0k|            janet_table_put(janet_unwrap_table(ds), key, value);
  ------------------
  |  |  861|  25.0k|#define janet_unwrap_table(x) ((JanetTable *)janet_nanbox_to_pointer(x))
  ------------------
37866|  25.0k|            break;
37867|      0|        case JANET_ABSTRACT: {
  ------------------
  |  Branch (37867:9): [True: 0, False: 29.5k]
  ------------------
37868|      0|            JanetAbstractType *type = (JanetAbstractType *)janet_abstract_type(janet_unwrap_abstract(ds));
  ------------------
  |  | 1899|      0|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|      0|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
37869|      0|            if (type->put) {
  ------------------
  |  Branch (37869:17): [True: 0, False: 0]
  ------------------
37870|      0|                (type->put)(janet_unwrap_abstract(ds), key, value);
  ------------------
  |  |  866|      0|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
37871|      0|            } else {
37872|      0|                janet_panicf("no setter for %v ", ds);
37873|      0|            }
37874|      0|            break;
37875|      0|        }
37876|  29.5k|    }
37877|  29.5k|}
janet_v_grow:
37912|  4.59M|void *janet_v_grow(void *v, int32_t increment, int32_t itemsize) {
37913|  4.59M|    int32_t dbl_cur = (NULL != v) ? 2 * janet_v__cap(v) : 0;
  ------------------
  |  |  765|  2.09M|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  ------------------
  |  |  |  |  764|  2.09M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  ------------------
  |  Branch (37913:23): [True: 2.09M, False: 2.49M]
  ------------------
37914|  4.59M|    int32_t min_needed = janet_v_count(v) + increment;
  ------------------
  |  |  759|  4.59M|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  2.09M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  2.09M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 2.09M, False: 2.49M]
  |  |  ------------------
  ------------------
37915|  4.59M|    int32_t m = dbl_cur > min_needed ? dbl_cur : min_needed;
  ------------------
  |  Branch (37915:17): [True: 152k, False: 4.44M]
  ------------------
37916|  4.59M|    size_t newsize = ((size_t) itemsize) * m + sizeof(int32_t) * 2;
37917|  4.59M|    int32_t *p = (int32_t *) janet_srealloc(v ? janet_v__raw(v) : 0, newsize);
  ------------------
  |  |  764|  2.09M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  ------------------
  |  Branch (37917:45): [True: 2.09M, False: 2.49M]
  ------------------
37918|  4.59M|    if (!v) p[1] = 0;
  ------------------
  |  Branch (37918:9): [True: 2.49M, False: 2.09M]
  ------------------
37919|  4.59M|    p[0] = m;
37920|  4.59M|    return p + 2;
37921|  4.59M|}
janet_v_flattenmem:
37924|   541k|void *janet_v_flattenmem(void *v, int32_t itemsize) {
37925|   541k|    char *p;
37926|   541k|    if (NULL == v) return NULL;
  ------------------
  |  Branch (37926:9): [True: 359k, False: 181k]
  ------------------
37927|   181k|    size_t size = (size_t) itemsize * janet_v__cnt(v);
  ------------------
  |  |  766|   181k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  ------------------
  |  |  |  |  764|   181k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  ------------------
37928|   181k|    p = janet_malloc(size);
  ------------------
  |  | 2406|   181k|#define janet_malloc(X) malloc((X))
  ------------------
37929|   181k|    if (NULL != p) {
  ------------------
  |  Branch (37929:9): [True: 181k, False: 0]
  ------------------
37930|   181k|        safe_memcpy(p, v, size);
37931|   181k|        return p;
37932|   181k|    } else {
37933|       |        JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
37934|      0|    }
37935|   181k|}
janet_try_init:
39428|  86.7k|void janet_try_init(JanetTryState *state) {
39429|  86.7k|    state->stackn = janet_vm.stackn++;
39430|  86.7k|    state->gc_handle = janet_vm.gc_suspend;
39431|  86.7k|    state->vm_fiber = janet_vm.fiber;
39432|  86.7k|    state->vm_jmp_buf = janet_vm.signal_buf;
39433|  86.7k|    state->vm_return_reg = janet_vm.return_reg;
39434|  86.7k|    state->coerce_error = janet_vm.coerce_error;
39435|  86.7k|    janet_vm.return_reg = &(state->payload);
39436|  86.7k|    janet_vm.signal_buf = &(state->buf);
39437|  86.7k|    janet_vm.coerce_error = 0;
39438|  86.7k|}
janet_restore:
39440|  86.7k|void janet_restore(JanetTryState *state) {
39441|  86.7k|    janet_vm.stackn = state->stackn;
39442|  86.7k|    janet_vm.gc_suspend = state->gc_handle;
39443|  86.7k|    janet_vm.fiber = state->vm_fiber;
39444|  86.7k|    janet_vm.signal_buf = state->vm_jmp_buf;
39445|  86.7k|    janet_vm.return_reg = state->vm_return_reg;
39446|  86.7k|    janet_vm.coerce_error = state->coerce_error;
39447|  86.7k|}
janet_continue:
39544|  86.4k|JanetSignal janet_continue(JanetFiber *fiber, Janet in, Janet *out) {
39545|       |    /* Check conditions */
39546|  86.4k|    JanetSignal tmp_signal = janet_check_can_resume(fiber, out, 0);
39547|  86.4k|    if (tmp_signal) return tmp_signal;
  ------------------
  |  Branch (39547:9): [True: 0, False: 86.4k]
  ------------------
39548|  86.4k|    return janet_continue_no_check(fiber, in, out);
39549|  86.4k|}
janet_init:
39602|    267|int janet_init(void) {
39603|       |
39604|       |    /* Garbage collection */
39605|    267|    janet_vm.blocks = NULL;
39606|    267|    janet_vm.weak_blocks = NULL;
39607|    267|    janet_vm.next_collection = 0;
39608|    267|    janet_vm.gc_interval = 0x400000;
39609|    267|    janet_vm.block_count = 0;
39610|    267|    janet_vm.gc_mark_phase = 0;
39611|       |
39612|    267|    janet_symcache_init();
39613|       |
39614|       |    /* Initialize gc roots */
39615|    267|    janet_vm.roots = NULL;
39616|    267|    janet_vm.root_count = 0;
39617|    267|    janet_vm.root_capacity = 0;
39618|       |
39619|       |    /* Scratch memory */
39620|    267|    janet_vm.user = NULL;
39621|    267|    janet_vm.scratch_mem = NULL;
39622|    267|    janet_vm.scratch_len = 0;
39623|    267|    janet_vm.scratch_cap = 0;
39624|       |
39625|       |    /* Sandbox flags */
39626|    267|    janet_vm.sandbox_flags = 0;
39627|       |
39628|       |    /* Initialize registry */
39629|    267|    janet_vm.registry = NULL;
39630|    267|    janet_vm.registry_cap = 0;
39631|    267|    janet_vm.registry_count = 0;
39632|    267|    janet_vm.registry_dirty = 0;
39633|       |
39634|       |    /* Initialize abstract registry */
39635|    267|    janet_vm.abstract_registry = janet_table(0);
39636|    267|    janet_gcroot(janet_wrap_table(janet_vm.abstract_registry));
  ------------------
  |  |  846|    267|#define janet_wrap_table(s) janet_nanbox_wrap_((s), JANET_TABLE)
  |  |  ------------------
  |  |  |  |  825|    267|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    267|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    267|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39637|       |
39638|       |    /* Traversal */
39639|    267|    janet_vm.traversal = NULL;
39640|    267|    janet_vm.traversal_base = NULL;
39641|    267|    janet_vm.traversal_top = NULL;
39642|       |
39643|       |    /* Core env */
39644|    267|    janet_vm.core_env = NULL;
39645|       |
39646|       |    /* Auto suspension */
39647|    267|    janet_vm.auto_suspend = 0;
39648|       |
39649|       |    /* Dynamic bindings */
39650|    267|    janet_vm.top_dyns = NULL;
39651|       |
39652|       |    /* Seed RNG */
39653|    267|    janet_rng_seed(janet_default_rng(), 0);
39654|       |
39655|       |    /* Fibers */
39656|    267|    janet_vm.fiber = NULL;
39657|    267|    janet_vm.root_fiber = NULL;
39658|    267|    janet_vm.stackn = 0;
39659|       |
39660|    267|#ifdef JANET_EV
39661|    267|    janet_ev_init();
39662|    267|#endif
39663|    267|#ifdef JANET_NET
39664|    267|    janet_net_init();
39665|    267|#endif
39666|    267|    return 0;
39667|    267|}
janet_deinit:
39682|    267|void janet_deinit(void) {
39683|    267|    janet_clear_memory();
39684|    267|    janet_symcache_deinit();
39685|    267|    janet_free(janet_vm.roots);
  ------------------
  |  | 2415|    267|#define janet_free(X) free((X))
  ------------------
39686|    267|    janet_vm.roots = NULL;
39687|    267|    janet_vm.root_count = 0;
39688|    267|    janet_vm.root_capacity = 0;
39689|    267|    janet_vm.abstract_registry = NULL;
39690|    267|    janet_vm.core_env = NULL;
39691|    267|    janet_vm.top_dyns = NULL;
39692|    267|    janet_vm.user = NULL;
39693|    267|    janet_free(janet_vm.traversal_base);
  ------------------
  |  | 2415|    267|#define janet_free(X) free((X))
  ------------------
39694|    267|    janet_vm.fiber = NULL;
39695|    267|    janet_vm.root_fiber = NULL;
39696|    267|    janet_free(janet_vm.registry);
  ------------------
  |  | 2415|    267|#define janet_free(X) free((X))
  ------------------
39697|       |    janet_vm.registry = NULL;
39698|    267|#ifdef JANET_EV
39699|    267|    janet_ev_deinit();
39700|    267|#endif
39701|    267|#ifdef JANET_NET
39702|    267|    janet_net_deinit();
39703|    267|#endif
39704|    267|}
janet_memalloc_empty:
39872|   507k|void *janet_memalloc_empty(int32_t count) {
39873|   507k|    int32_t i;
39874|   507k|    void *mem = array_allocate(sizeof(JanetKV), count);
39875|   507k|    janet_vm.next_collection += (size_t) count * sizeof(JanetKV);
39876|   507k|    if (NULL == mem) {
  ------------------
  |  Branch (39876:9): [True: 0, False: 507k]
  ------------------
39877|      0|        JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
39878|      0|    }
39879|   507k|    JanetKV *mmem = (JanetKV *)mem;
39880|  6.98M|    for (i = 0; i < count; i++) {
  ------------------
  |  Branch (39880:17): [True: 6.47M, False: 507k]
  ------------------
39881|  6.47M|        JanetKV *kv = mmem + i;
39882|  6.47M|        kv->key = janet_wrap_nil();
  ------------------
  |  |  831|  6.47M|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  6.47M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  6.47M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  6.47M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39883|  6.47M|        kv->value = janet_wrap_nil();
  ------------------
  |  |  831|  6.47M|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  6.47M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  6.47M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  6.47M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39884|  6.47M|    }
39885|   507k|    return mem;
39886|   507k|}
janet_memempty:
39888|  1.74M|void janet_memempty(JanetKV *mem, int32_t count) {
39889|  1.74M|    int32_t i;
39890|  58.9M|    for (i = 0; i < count; i++) {
  ------------------
  |  Branch (39890:17): [True: 57.1M, False: 1.74M]
  ------------------
39891|  57.1M|        mem[i].key = janet_wrap_nil();
  ------------------
  |  |  831|  57.1M|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  57.1M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  57.1M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  57.1M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39892|  57.1M|        mem[i].value = janet_wrap_nil();
  ------------------
  |  |  831|  57.1M|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  57.1M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  57.1M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  57.1M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39893|  57.1M|    }
39894|  1.74M|}
janet_wrap_number_safe:
39898|  1.86k|Janet janet_wrap_number_safe(double d) {
39899|  1.86k|    Janet ret;
39900|  1.86k|    ret.number = isnan(d) ? NAN : d;
  ------------------
  |  Branch (39900:18): [True: 267, False: 1.60k]
  ------------------
39901|  1.86k|    return ret;
39902|  1.86k|}
janet_nanbox_to_pointer:
39904|   259M|void *janet_nanbox_to_pointer(Janet x) {
39905|   259M|    x.i64 &= JANET_NANBOX_PAYLOADBITS;
  ------------------
  |  |  791|   259M|#define JANET_NANBOX_PAYLOADBITS 0x00007FFFFFFFFFFFllu
  ------------------
39906|   259M|    x.u64 <<= JANET_NANBOX_64_POINTER_SHIFT; /* Alignment, usually 0 */
  ------------------
  |  |  341|   259M|#define JANET_NANBOX_64_POINTER_SHIFT 0
  ------------------
39907|   259M|    return x.pointer;
39908|   259M|}
janet_nanbox_from_pointer:
39910|  24.3M|Janet janet_nanbox_from_pointer(void *p, uint64_t tagmask) {
39911|  24.3M|    Janet ret;
39912|  24.3M|    ret.pointer = p;
39913|       |    /* Should be noop when pointer shift is 0 */
39914|       |    /*
39915|       |    janet_assert(!(ret.u64 & (uint64_t) ((1 << JANET_NANBOX_64_POINTER_SHIFT) - 1)), "unaligned pointer wrap");
39916|       |    */
39917|  24.3M|    ret.u64 >>= JANET_NANBOX_64_POINTER_SHIFT; /* Alignment, usually 0 */
  ------------------
  |  |  341|  24.3M|#define JANET_NANBOX_64_POINTER_SHIFT 0
  ------------------
39918|  24.3M|    ret.u64 |= tagmask;
39919|  24.3M|    return ret;
39920|  24.3M|}
janet_nanbox_from_cpointer:
39922|  44.3M|Janet janet_nanbox_from_cpointer(const void *p, uint64_t tagmask) {
39923|  44.3M|    Janet ret;
39924|  44.3M|    ret.pointer = (void *)p;
39925|       |    /* Should be noop when pointer shift is 0 */
39926|       |    /*
39927|       |    janet_assert(!(ret.u64 & (uint64_t) ((1 << JANET_NANBOX_64_POINTER_SHIFT) - 1)), "unaligned pointer wrap");
39928|       |    */
39929|  44.3M|    ret.u64 >>= JANET_NANBOX_64_POINTER_SHIFT; /* Alignment, usually 0 */
  ------------------
  |  |  341|  44.3M|#define JANET_NANBOX_64_POINTER_SHIFT 0
  ------------------
39930|  44.3M|    ret.u64 |= tagmask;
39931|  44.3M|    return ret;
39932|  44.3M|}
janet_nanbox_from_double:
39934|  27.2M|Janet janet_nanbox_from_double(double d) {
39935|  27.2M|    Janet ret;
39936|  27.2M|    ret.number = d;
39937|  27.2M|    return ret;
39938|  27.2M|}
janet_nanbox_from_bits:
39940|   507M|Janet janet_nanbox_from_bits(uint64_t bits) {
39941|   507M|    Janet ret;
39942|   507M|    ret.u64 = bits;
39943|   507M|    return ret;
39944|   507M|}
janet.c:janet_array_impl:
 1606|  18.1k|static void janet_array_impl(JanetArray *array, int32_t capacity) {
 1607|  18.1k|    Janet *data = NULL;
 1608|  18.1k|    if (capacity > 0) {
  ------------------
  |  Branch (1608:9): [True: 17.8k, False: 288]
  ------------------
 1609|  17.8k|        janet_vm.next_collection += capacity * sizeof(Janet);
 1610|  17.8k|        data = (Janet *) array_allocate(sizeof(Janet), capacity);
 1611|  17.8k|        if (NULL == data) {
  ------------------
  |  Branch (1611:13): [True: 0, False: 17.8k]
  ------------------
 1612|      0|            JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1613|      0|        }
 1614|  17.8k|    }
 1615|  18.1k|    array->count = 0;
 1616|  18.1k|    array->capacity = capacity;
 1617|  18.1k|    array->data = data;
 1618|  18.1k|}
janet.c:janet_buffer_init_impl:
 3196|   103k|static JanetBuffer *janet_buffer_init_impl(JanetBuffer *buffer, int32_t capacity) {
 3197|   103k|    uint8_t *data = NULL;
 3198|   103k|    if (capacity < 4) capacity = 4;
  ------------------
  |  Branch (3198:9): [True: 8.27k, False: 95.0k]
  ------------------
 3199|   103k|    janet_gcpressure(capacity);
 3200|   103k|    data = array_allocate(sizeof(uint8_t), capacity);
 3201|   103k|    if (NULL == data) {
  ------------------
  |  Branch (3201:9): [True: 0, False: 103k]
  ------------------
 3202|      0|        JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3203|      0|    }
 3204|   103k|    buffer->count = 0;
 3205|   103k|    buffer->capacity = capacity;
 3206|   103k|    buffer->data = data;
 3207|   103k|    return buffer;
 3208|   103k|}
janet.c:janet_buffer_can_realloc:
 3189|  21.3k|static void janet_buffer_can_realloc(JanetBuffer *buffer) {
 3190|  21.3k|    if (buffer->gc.flags & JANET_BUFFER_FLAG_NO_REALLOC) {
  ------------------
  |  | 1780|  21.3k|#define JANET_BUFFER_FLAG_NO_REALLOC 0x10000
  ------------------
  |  Branch (3190:9): [True: 0, False: 21.3k]
  ------------------
 3191|      0|        janet_panic("buffer cannot reallocate foreign memory");
 3192|      0|    }
 3193|  21.3k|}
janet.c:bs_set_bit:
 3912|  53.7M|static void bs_set_bit(uint32_t *bitset, int32_t index) {
 3913|  53.7M|    bitset[bs_indx(index)] |= bs_mask(index);
 3914|  53.7M|}
janet.c:bs_mask:
 3906|   127M|static uint32_t bs_mask(int32_t index) {
 3907|   127M|    return ((uint32_t)1) << (index & 0x1F);
 3908|   127M|}
janet.c:bs_indx:
 3909|   127M|static uint32_t bs_indx(int32_t index) {
 3910|   127M|    return index >> 5;
 3911|   127M|}
janet.c:bs_read_bit:
 3918|  21.2M|static int bs_read_bit(uint32_t *bitset, int32_t index) {
 3919|  21.2M|    return (bitset[bs_indx(index)] & bs_mask(index)) ? 1 : 0;
  ------------------
  |  Branch (3919:12): [True: 2.18M, False: 19.0M]
  ------------------
 3920|  21.2M|}
janet.c:rewrite_symbolmap:
 4765|   194k|static void rewrite_symbolmap(JanetFuncDef *def, uint32_t *pc_map) {
 4766|   194k|    int32_t smout = 0;
 4767|  11.6M|    for (int32_t i = 0; i < def->symbolmap_length; i++) {
  ------------------
  |  Branch (4767:25): [True: 11.4M, False: 194k]
  ------------------
 4768|  11.4M|        JanetSymbolMap *sm = def->symbolmap + i;
 4769|  11.4M|        int keep = 1;
 4770|       |        /* Don't rewrite upvalue mappings */
 4771|  11.4M|        if (sm->birth_pc < UINT32_MAX) {
  ------------------
  |  Branch (4771:13): [True: 9.04M, False: 2.37M]
  ------------------
 4772|  9.04M|            sm->birth_pc = pc_map[sm->birth_pc];
 4773|  9.04M|            sm->death_pc = pc_map[sm->death_pc];
 4774|       |            /* entirely dead symbols can be removed from the symbol map. This can happen if a symbol is in dead code. */
 4775|  9.04M|            if (sm->death_pc > (uint32_t) def->bytecode_length) sm->death_pc = (uint32_t) def->bytecode_length;
  ------------------
  |  Branch (4775:17): [True: 0, False: 9.04M]
  ------------------
 4776|  9.04M|            if (sm->birth_pc >= sm->death_pc) keep = 0;
  ------------------
  |  Branch (4776:17): [True: 0, False: 9.04M]
  ------------------
 4777|  9.04M|        }
 4778|       |        /* Now shift if needed */
 4779|  11.4M|        if (keep) def->symbolmap[smout++] = *sm;
  ------------------
  |  Branch (4779:13): [True: 11.4M, False: 0]
  ------------------
 4780|  11.4M|    }
 4781|   194k|    def->symbolmap_length = smout;
 4782|   194k|}
janet.c:janet_bytecode_movopt_basic_block:
 5053|   468k|static void janet_bytecode_movopt_basic_block(JanetFuncDef *def, BytecodeBB bb, uint32_t *bitset, int mode) {
 5054|   468k|    if (bb.start >= bb.end) return; /* Degenerate block */
  ------------------
  |  Branch (5054:9): [True: 0, False: 468k]
  ------------------
 5055|   468k|    if (mode == 0) {
  ------------------
  |  Branch (5055:9): [True: 234k, False: 234k]
  ------------------
 5056|       |        /* Flip bits */
 5057|  3.96M|        for (int32_t word = 0; word < (((def->slotcount - 1) >> 5) + 1); word++) {
  ------------------
  |  Branch (5057:32): [True: 3.73M, False: 234k]
  ------------------
 5058|  3.73M|            bitset[word] = ~bitset[word];
 5059|  3.73M|        }
 5060|   234k|    } else {
 5061|   234k|        memset(bitset, 0x00, (def->slotcount + 7) / 8);
 5062|   234k|    }
 5063|  71.0M|    for (int32_t i = bb.end - 1; i >= bb.start; i--) {
  ------------------
  |  Branch (5063:34): [True: 70.6M, False: 468k]
  ------------------
 5064|  70.6M|        int32_t ins[3];
 5065|  70.6M|        int32_t out = -1;
 5066|  70.6M|        int nins = 0;
 5067|  70.6M|        int pin = 0; /* side effects, don't remove */
 5068|  70.6M|        uint32_t I = def->bytecode[i];
 5069|  70.6M|        uint32_t Iop = I & 0x7F;
 5070|  70.6M|        uint32_t Ia = (I >> 8) & 0xFF;
 5071|  70.6M|        uint32_t Ib = (I >> 16) & 0xFF;
 5072|  70.6M|        uint32_t Ic = (I >> 24);
 5073|  70.6M|        uint32_t Id = (I >> 8);
 5074|  70.6M|        uint32_t Ie = (I >> 16);
 5075|       |        /* Whenever we execute an instruction that can yield or await, clear the bitset.
 5076|       |         * Closures could read some slots that seem to be unused, and then control could
 5077|       |         * return to our function. */
 5078|  70.6M|        switch (Iop) {
 5079|      0|            default:
  ------------------
  |  Branch (5079:13): [True: 0, False: 70.6M]
  ------------------
 5080|      0|                janet_assert(0, "unhandled instruction");
  ------------------
  |  |  389|      0|#define janet_assert(c, m) do { \
  |  |  390|      0|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, Folded]
  |  |  ------------------
  |  |  391|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5081|      0|                continue;
 5082|  2.13k|            case JOP_JUMP:
  ------------------
  |  Branch (5082:13): [True: 2.13k, False: 70.6M]
  ------------------
 5083|  2.13k|            case JOP_NOOP:
  ------------------
  |  Branch (5083:13): [True: 0, False: 70.6M]
  ------------------
 5084|  30.0k|            case JOP_RETURN_NIL:
  ------------------
  |  Branch (5084:13): [True: 27.9k, False: 70.5M]
  ------------------
 5085|  30.0k|                continue;
 5086|       |
 5087|       |            /* Side effects, don't remove */
 5088|       |
 5089|       |            /* Write A, Read E */
 5090|  59.8k|            case JOP_CALL:
  ------------------
  |  Branch (5090:13): [True: 59.8k, False: 70.5M]
  ------------------
 5091|       |                /* Similar logic applies to tail calls, but they are always at the end of blocks anyway */
 5092|  59.8k|                out = Ia;
 5093|  59.8k|                pin = 1;
 5094|  59.8k|                nins = 1;
 5095|  59.8k|                ins[0] = Ie;
 5096|  59.8k|                break;
 5097|       |            /* Write A, Read B */
 5098|      2|            case JOP_SIGNAL:
  ------------------
  |  Branch (5098:13): [True: 2, False: 70.6M]
  ------------------
 5099|      2|                out = Ia;
 5100|      2|                nins = 1;
 5101|      2|                ins[0] = Ib;
 5102|      2|                pin = 1;
 5103|      2|                break;
 5104|       |            /* Read A */
 5105|      0|            case JOP_TYPECHECK:
  ------------------
  |  Branch (5105:13): [True: 0, False: 70.6M]
  ------------------
 5106|      0|            case JOP_JUMP_IF:
  ------------------
  |  Branch (5106:13): [True: 0, False: 70.6M]
  ------------------
 5107|  21.2k|            case JOP_JUMP_IF_NOT:
  ------------------
  |  Branch (5107:13): [True: 21.2k, False: 70.5M]
  ------------------
 5108|  23.3k|            case JOP_JUMP_IF_NIL:
  ------------------
  |  Branch (5108:13): [True: 2.13k, False: 70.6M]
  ------------------
 5109|  48.4k|            case JOP_JUMP_IF_NOT_NIL:
  ------------------
  |  Branch (5109:13): [True: 25.0k, False: 70.5M]
  ------------------
 5110|  73.5k|            case JOP_SET_UPVALUE:
  ------------------
  |  Branch (5110:13): [True: 25.0k, False: 70.5M]
  ------------------
 5111|  73.5k|                nins = 1;
 5112|  73.5k|                pin = 1;
 5113|  73.5k|                ins[0] = Ia;
 5114|  73.5k|                break;
 5115|       |            /* Read D */
 5116|  1.20k|            case JOP_ERROR:
  ------------------
  |  Branch (5116:13): [True: 1.20k, False: 70.6M]
  ------------------
 5117|   360k|            case JOP_RETURN:
  ------------------
  |  Branch (5117:13): [True: 358k, False: 70.2M]
  ------------------
 5118|   482k|            case JOP_PUSH:
  ------------------
  |  Branch (5118:13): [True: 122k, False: 70.4M]
  ------------------
 5119|   633k|            case JOP_PUSH_ARRAY:
  ------------------
  |  Branch (5119:13): [True: 151k, False: 70.4M]
  ------------------
 5120|   660k|            case JOP_TAILCALL:
  ------------------
  |  Branch (5120:13): [True: 27.0k, False: 70.5M]
  ------------------
 5121|   660k|                pin = 1;
 5122|   660k|                nins = 1;
 5123|   660k|                ins[0] = Id;
 5124|   660k|                break;
 5125|  9.19k|            case JOP_PUT:
  ------------------
  |  Branch (5125:13): [True: 9.19k, False: 70.5M]
  ------------------
 5126|   783k|            case JOP_PUSH_3:
  ------------------
  |  Branch (5126:13): [True: 773k, False: 69.8M]
  ------------------
 5127|   783k|                nins = 3;
 5128|   783k|                pin = 1;
 5129|   783k|                ins[0] = Ia;
 5130|   783k|                ins[1] = Ib;
 5131|   783k|                ins[2] = Ic;
 5132|   783k|                break;
 5133|       |            /* Write A */
 5134|      0|            case JOP_MAKE_ARRAY:
  ------------------
  |  Branch (5134:13): [True: 0, False: 70.6M]
  ------------------
 5135|      4|            case JOP_MAKE_BUFFER:
  ------------------
  |  Branch (5135:13): [True: 4, False: 70.6M]
  ------------------
 5136|      4|            case JOP_MAKE_STRING:
  ------------------
  |  Branch (5136:13): [True: 0, False: 70.6M]
  ------------------
 5137|      8|            case JOP_MAKE_STRUCT:
  ------------------
  |  Branch (5137:13): [True: 4, False: 70.6M]
  ------------------
 5138|  1.79k|            case JOP_MAKE_TABLE:
  ------------------
  |  Branch (5138:13): [True: 1.78k, False: 70.6M]
  ------------------
 5139|  15.3M|            case JOP_MAKE_TUPLE:
  ------------------
  |  Branch (5139:13): [True: 15.3M, False: 55.2M]
  ------------------
 5140|  15.3M|            case JOP_MAKE_BRACKET_TUPLE:
  ------------------
  |  Branch (5140:13): [True: 1.40k, False: 70.6M]
  ------------------
 5141|  15.3M|                out = Ia;
 5142|  15.3M|                pin = 1; /* TODO - we need an instruction (or psuedo instruction) that can clear the stack but do nothing */
 5143|  15.3M|                break;
 5144|  1.63M|            case JOP_LOAD_INTEGER:
  ------------------
  |  Branch (5144:13): [True: 1.63M, False: 68.9M]
  ------------------
 5145|  18.3M|            case JOP_LOAD_CONSTANT:
  ------------------
  |  Branch (5145:13): [True: 16.7M, False: 53.8M]
  ------------------
 5146|  18.4M|            case JOP_LOAD_UPVALUE:
  ------------------
  |  Branch (5146:13): [True: 101k, False: 70.5M]
  ------------------
 5147|  18.6M|            case JOP_CLOSURE:
  ------------------
  |  Branch (5147:13): [True: 190k, False: 70.4M]
  ------------------
 5148|  18.6M|                out = Ia;
 5149|  18.6M|                break;
 5150|       |            /* Read A, B */
 5151|    402|            case JOP_PUT_INDEX:
  ------------------
  |  Branch (5151:13): [True: 402, False: 70.6M]
  ------------------
 5152|    402|                nins = 2;
 5153|    402|                ins[0] = Ia;
 5154|    402|                ins[1] = Ib;
 5155|    402|                pin = 1;
 5156|    402|                break;
 5157|       |            /* Read A, E */
 5158|  15.4M|            case JOP_PUSH_2:
  ------------------
  |  Branch (5158:13): [True: 15.4M, False: 55.1M]
  ------------------
 5159|  15.4M|                nins = 2;
 5160|  15.4M|                ins[0] = Ia;
 5161|  15.4M|                ins[1] = Ie;
 5162|  15.4M|                pin = 1;
 5163|  15.4M|                break;
 5164|       |            /* A = B op C */
 5165|      0|            case JOP_PROPAGATE:
  ------------------
  |  Branch (5165:13): [True: 0, False: 70.6M]
  ------------------
 5166|    724|            case JOP_RESUME:
  ------------------
  |  Branch (5166:13): [True: 724, False: 70.6M]
  ------------------
 5167|    724|            case JOP_CANCEL:
  ------------------
  |  Branch (5167:13): [True: 0, False: 70.6M]
  ------------------
 5168|  35.1k|            case JOP_NEXT:
  ------------------
  |  Branch (5168:13): [True: 34.4k, False: 70.5M]
  ------------------
 5169|  35.1k|                pin = 1;
 5170|  35.1k|                out = Ia;
 5171|  35.1k|                nins = 2;
 5172|  35.1k|                ins[0] = Ib;
 5173|  35.1k|                ins[1] = Ic;
 5174|  35.1k|                break;
 5175|       |
 5176|       |            /* No side effects below, can remove.
 5177|       |             * Some of these instructions may have side effects if
 5178|       |             * the inputs are abstracts. */
 5179|       |
 5180|       |            /* Loads that write D */
 5181|  2.16M|            case JOP_LOAD_NIL:
  ------------------
  |  Branch (5181:13): [True: 2.16M, False: 68.4M]
  ------------------
 5182|  2.17M|            case JOP_LOAD_TRUE:
  ------------------
  |  Branch (5182:13): [True: 774, False: 70.6M]
  ------------------
 5183|  2.17M|            case JOP_LOAD_FALSE:
  ------------------
  |  Branch (5183:13): [True: 468, False: 70.6M]
  ------------------
 5184|  2.19M|            case JOP_LOAD_SELF:
  ------------------
  |  Branch (5184:13): [True: 26.7k, False: 70.5M]
  ------------------
 5185|  2.19M|                out = Id;
 5186|  2.19M|                break;
 5187|       |
 5188|       |            /* Moves and similar */
 5189|  6.17M|            case JOP_MOVE_FAR:
  ------------------
  |  Branch (5189:13): [True: 6.17M, False: 64.4M]
  ------------------
 5190|  6.17M|                out = Ie;
 5191|  6.17M|                nins = 1;
 5192|  6.17M|                ins[0] = Ia;
 5193|  6.17M|                break;
 5194|  6.41M|            case JOP_MOVE_NEAR:
  ------------------
  |  Branch (5194:13): [True: 6.41M, False: 64.1M]
  ------------------
 5195|  6.41M|            case JOP_LENGTH:
  ------------------
  |  Branch (5195:13): [True: 0, False: 70.6M]
  ------------------
 5196|  6.41M|            case JOP_BNOT:
  ------------------
  |  Branch (5196:13): [True: 0, False: 70.6M]
  ------------------
 5197|  6.41M|                out = Ia;
 5198|  6.41M|                nins = 1;
 5199|  6.41M|                ins[0] = Ie;
 5200|  6.41M|                break;
 5201|       |
 5202|       |            /* A = B op C */
 5203|      0|            case JOP_BAND:
  ------------------
  |  Branch (5203:13): [True: 0, False: 70.6M]
  ------------------
 5204|      0|            case JOP_BOR:
  ------------------
  |  Branch (5204:13): [True: 0, False: 70.6M]
  ------------------
 5205|      0|            case JOP_BXOR:
  ------------------
  |  Branch (5205:13): [True: 0, False: 70.6M]
  ------------------
 5206|     50|            case JOP_ADD:
  ------------------
  |  Branch (5206:13): [True: 50, False: 70.6M]
  ------------------
 5207|  2.20k|            case JOP_SUBTRACT:
  ------------------
  |  Branch (5207:13): [True: 2.15k, False: 70.6M]
  ------------------
 5208|  2.20k|            case JOP_MULTIPLY:
  ------------------
  |  Branch (5208:13): [True: 0, False: 70.6M]
  ------------------
 5209|  2.21k|            case JOP_DIVIDE:
  ------------------
  |  Branch (5209:13): [True: 16, False: 70.6M]
  ------------------
 5210|  2.21k|            case JOP_DIVIDE_FLOOR:
  ------------------
  |  Branch (5210:13): [True: 0, False: 70.6M]
  ------------------
 5211|  2.21k|            case JOP_MODULO:
  ------------------
  |  Branch (5211:13): [True: 0, False: 70.6M]
  ------------------
 5212|  30.4k|            case JOP_REMAINDER:
  ------------------
  |  Branch (5212:13): [True: 28.2k, False: 70.5M]
  ------------------
 5213|  30.4k|            case JOP_SHIFT_LEFT:
  ------------------
  |  Branch (5213:13): [True: 0, False: 70.6M]
  ------------------
 5214|  30.4k|            case JOP_SHIFT_RIGHT:
  ------------------
  |  Branch (5214:13): [True: 0, False: 70.6M]
  ------------------
 5215|  30.4k|            case JOP_SHIFT_RIGHT_UNSIGNED:
  ------------------
  |  Branch (5215:13): [True: 0, False: 70.6M]
  ------------------
 5216|  30.4k|            case JOP_GREATER_THAN:
  ------------------
  |  Branch (5216:13): [True: 0, False: 70.6M]
  ------------------
 5217|  30.7k|            case JOP_LESS_THAN:
  ------------------
  |  Branch (5217:13): [True: 258, False: 70.6M]
  ------------------
 5218|  52.1k|            case JOP_EQUALS:
  ------------------
  |  Branch (5218:13): [True: 21.4k, False: 70.5M]
  ------------------
 5219|  52.1k|            case JOP_COMPARE:
  ------------------
  |  Branch (5219:13): [True: 0, False: 70.6M]
  ------------------
 5220|  57.5k|            case JOP_IN:
  ------------------
  |  Branch (5220:13): [True: 5.40k, False: 70.6M]
  ------------------
 5221|  57.5k|            case JOP_GET:
  ------------------
  |  Branch (5221:13): [True: 4, False: 70.6M]
  ------------------
 5222|  57.5k|            case JOP_GREATER_THAN_EQUAL:
  ------------------
  |  Branch (5222:13): [True: 0, False: 70.6M]
  ------------------
 5223|  57.5k|            case JOP_LESS_THAN_EQUAL:
  ------------------
  |  Branch (5223:13): [True: 0, False: 70.6M]
  ------------------
 5224|  58.2k|            case JOP_NOT_EQUALS:
  ------------------
  |  Branch (5224:13): [True: 722, False: 70.6M]
  ------------------
 5225|  58.2k|                out = Ia;
 5226|  58.2k|                nins = 2;
 5227|  58.2k|                ins[0] = Ib;
 5228|  58.2k|                ins[1] = Ic;
 5229|  58.2k|                break;
 5230|       |
 5231|       |            /* A = op B imm */
 5232|     78|            case JOP_ADD_IMMEDIATE:
  ------------------
  |  Branch (5232:13): [True: 78, False: 70.6M]
  ------------------
 5233|  1.16k|            case JOP_SUBTRACT_IMMEDIATE:
  ------------------
  |  Branch (5233:13): [True: 1.08k, False: 70.6M]
  ------------------
 5234|  1.16k|            case JOP_MULTIPLY_IMMEDIATE:
  ------------------
  |  Branch (5234:13): [True: 6, False: 70.6M]
  ------------------
 5235|  1.16k|            case JOP_DIVIDE_IMMEDIATE:
  ------------------
  |  Branch (5235:13): [True: 0, False: 70.6M]
  ------------------
 5236|  1.16k|            case JOP_SHIFT_LEFT_IMMEDIATE:
  ------------------
  |  Branch (5236:13): [True: 0, False: 70.6M]
  ------------------
 5237|  1.16k|            case JOP_SHIFT_RIGHT_IMMEDIATE:
  ------------------
  |  Branch (5237:13): [True: 0, False: 70.6M]
  ------------------
 5238|  1.16k|            case JOP_SHIFT_RIGHT_UNSIGNED_IMMEDIATE:
  ------------------
  |  Branch (5238:13): [True: 0, False: 70.6M]
  ------------------
 5239|  1.16k|            case JOP_GREATER_THAN_IMMEDIATE:
  ------------------
  |  Branch (5239:13): [True: 0, False: 70.6M]
  ------------------
 5240|  1.17k|            case JOP_LESS_THAN_IMMEDIATE:
  ------------------
  |  Branch (5240:13): [True: 2, False: 70.6M]
  ------------------
 5241|  1.17k|            case JOP_EQUALS_IMMEDIATE:
  ------------------
  |  Branch (5241:13): [True: 0, False: 70.6M]
  ------------------
 5242|  1.17k|            case JOP_NOT_EQUALS_IMMEDIATE:
  ------------------
  |  Branch (5242:13): [True: 0, False: 70.6M]
  ------------------
 5243|  4.69M|            case JOP_GET_INDEX:
  ------------------
  |  Branch (5243:13): [True: 4.69M, False: 65.9M]
  ------------------
 5244|  4.69M|                out = Ia;
 5245|  4.69M|                nins = 1;
 5246|  4.69M|                ins[0] = Ib;
 5247|  4.69M|                break;
 5248|  70.6M|        }
 5249|       |        /* Test and set output bit in bitmap. If already set, change to noop. */
 5250|       |        /* Add check to avoid messing with upvalues */
 5251|  70.5M|        if (mode == 0) {
  ------------------
  |  Branch (5251:13): [True: 35.2M, False: 35.2M]
  ------------------
 5252|  35.2M|            if (out != -1) {
  ------------------
  |  Branch (5252:17): [True: 26.8M, False: 8.46M]
  ------------------
 5253|  26.8M|                if (!pin && bs_read_bit(bitset, out) &&
  ------------------
  |  Branch (5253:21): [True: 19.1M, False: 7.72M]
  |  Branch (5253:29): [True: 1.99M, False: 17.1M]
  ------------------
 5254|  1.99M|                        (!def->closure_bitset || !bs_read_bit(def->closure_bitset, out))) {
  ------------------
  |  Branch (5254:26): [True: 54.6k, False: 1.93M]
  |  Branch (5254:50): [True: 1.91M, False: 17.4k]
  ------------------
 5255|  1.97M|                    def->bytecode[i] = JOP_NOOP;
 5256|  1.97M|                }
 5257|  26.8M|                bs_set_bit(bitset, out);
 5258|  26.8M|            }
 5259|       |            /* Clear input slots from bitmap */
 5260|  61.0M|            for (int j = 0; j < nins; j++) {
  ------------------
  |  Branch (5260:29): [True: 25.7M, False: 35.2M]
  ------------------
 5261|  25.7M|                bs_clear_bit(bitset, ins[j]);
 5262|  25.7M|            }
 5263|  35.2M|        } else if (mode == 1) {
  ------------------
  |  Branch (5263:20): [True: 35.2M, False: 0]
  ------------------
 5264|       |            /* Clear writes, set reads (in that order!) */
 5265|  35.2M|            if (out != -1) bs_clear_bit(bitset, out);
  ------------------
  |  Branch (5265:17): [True: 26.8M, False: 8.46M]
  ------------------
 5266|  61.0M|            for (int j = 0; j < nins; j++) {
  ------------------
  |  Branch (5266:29): [True: 25.7M, False: 35.2M]
  ------------------
 5267|  25.7M|                janet_assert(ins[j] < def->slotcount, "slot too big");
  ------------------
  |  |  389|  25.7M|#define janet_assert(c, m) do { \
  |  |  390|  25.7M|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 25.7M]
  |  |  ------------------
  |  |  391|  25.7M|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 25.7M]
  |  |  ------------------
  ------------------
 5268|  25.7M|                bs_set_bit(bitset, ins[j]);
 5269|  25.7M|            }
 5270|  35.2M|        }
 5271|  70.5M|    }
 5272|   468k|}
janet.c:bs_clear_bit:
 3915|  52.5M|static void bs_clear_bit(uint32_t *bitset, int32_t index) {
 3916|  52.5M|    bitset[bs_indx(index)] &= ~(bs_mask(index));
 3917|  52.5M|}
janet.c:janet_bytecode_basic_blocks:
 4062|   194k|static BytecodeBB *janet_bytecode_basic_blocks(JanetFuncDef *def, int32_t *n_blocks) {
 4063|   194k|    uint32_t *code = def->bytecode;
 4064|   194k|    int32_t *codes = (int32_t *)code;
 4065|       |    /* Allocate array of blocks to return */
 4066|   194k|    uint32_t *bitmap = janet_bytecode_leader_bitmap(def);
 4067|   194k|    int32_t len = def->bytecode_length;
 4068|   194k|    int32_t words = ((len - 1) / 32) + 1;
 4069|   194k|    int32_t block_count = 0;
 4070|  1.47M|    for (int32_t i = 0; i < words; i++) {
  ------------------
  |  Branch (4070:25): [True: 1.27M, False: 194k]
  ------------------
 4071|       |#ifdef JANET_MSVC
 4072|       |        block_count += __popcnt(bitmap[i]);
 4073|       |#elif defined(__GNUC__)
 4074|       |        block_count += __builtin_popcount(bitmap[i]);
 4075|       |#else
 4076|       |        for (int j = 0; j < 32; j++) {
 4077|       |            uint32_t mask = ((uint32_t)1 << j);
 4078|       |            if (mask & bitmap[i]) block_count++;
 4079|       |        }
 4080|       |#endif
 4081|  1.27M|    }
 4082|   194k|    BytecodeBB *blocks = array_allocate(sizeof(BytecodeBB), block_count);
 4083|   194k|    int32_t next_block_i = 0;
 4084|   194k|    int32_t pc = 0;
 4085|   428k|    while (pc < len) {
  ------------------
  |  Branch (4085:12): [True: 234k, False: 194k]
  ------------------
 4086|   234k|        BytecodeBB bb;
 4087|   234k|        bb.start = pc;
 4088|   234k|        uint32_t done;
 4089|  35.3M|        do {
 4090|  35.3M|            pc++;
 4091|  35.3M|            done = (pc >= len) || (bitmap[pc >> 5] & (((uint32_t)1) << (pc & 0x1F)));
  ------------------
  |  Branch (4091:20): [True: 194k, False: 35.1M]
  |  Branch (4091:35): [True: 39.5k, False: 35.0M]
  ------------------
 4092|  35.3M|        } while (!done);
  ------------------
  |  Branch (4092:18): [True: 35.0M, False: 234k]
  ------------------
 4093|   234k|        janet_assert(pc <= len, "bad block end");
  ------------------
  |  |  389|   234k|#define janet_assert(c, m) do { \
  |  |  390|   234k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 234k]
  |  |  ------------------
  |  |  391|   234k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 234k]
  |  |  ------------------
  ------------------
 4094|   234k|        bb.end = pc;
 4095|   234k|        bb.next[0] = -1;
 4096|   234k|        bb.next[1] = -1;
 4097|   234k|        blocks[next_block_i++] = bb;
 4098|   234k|    }
 4099|   194k|    janet_assert(next_block_i == block_count, "bad block count");
  ------------------
  |  |  389|   194k|#define janet_assert(c, m) do { \
  |  |  390|   194k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 194k]
  |  |  ------------------
  |  |  391|   194k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 194k]
  |  |  ------------------
  ------------------
 4100|       |    /* add forward cfg edges */
 4101|   428k|    for (int32_t i = 0; i < block_count; i++) {
  ------------------
  |  Branch (4101:25): [True: 234k, False: 194k]
  ------------------
 4102|   234k|        int32_t target;
 4103|   234k|        janet_assert(blocks[i].end > blocks[i].start, "degenerate block start >= end");
  ------------------
  |  |  389|   234k|#define janet_assert(c, m) do { \
  |  |  390|   234k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 234k]
  |  |  ------------------
  |  |  391|   234k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 234k]
  |  |  ------------------
  ------------------
 4104|   234k|        int32_t lastpc = blocks[i].end - 1;
 4105|   234k|        switch (code[lastpc] & 0x7F) {
 4106|  1.26k|            default:
  ------------------
  |  Branch (4106:13): [True: 1.26k, False: 232k]
  ------------------
 4107|  1.26k|                blocks[i].next[0] = i + 1; /* blocks sorted by increasing start */
 4108|  1.26k|                continue;
 4109|    604|            case JOP_ERROR:
  ------------------
  |  Branch (4109:13): [True: 604, False: 233k]
  ------------------
 4110|   180k|            case JOP_RETURN:
  ------------------
  |  Branch (4110:13): [True: 179k, False: 54.6k]
  ------------------
 4111|   194k|            case JOP_RETURN_NIL:
  ------------------
  |  Branch (4111:13): [True: 13.9k, False: 220k]
  ------------------
 4112|   207k|            case JOP_TAILCALL:
  ------------------
  |  Branch (4112:13): [True: 13.5k, False: 220k]
  ------------------
 4113|   207k|                continue;
 4114|      0|            case JOP_JUMP_IF:
  ------------------
  |  Branch (4114:13): [True: 0, False: 234k]
  ------------------
 4115|  1.06k|            case JOP_JUMP_IF_NIL:
  ------------------
  |  Branch (4115:13): [True: 1.06k, False: 233k]
  ------------------
 4116|  11.6k|            case JOP_JUMP_IF_NOT:
  ------------------
  |  Branch (4116:13): [True: 10.6k, False: 223k]
  ------------------
 4117|  24.2k|            case JOP_JUMP_IF_NOT_NIL:
  ------------------
  |  Branch (4117:13): [True: 12.5k, False: 221k]
  ------------------
 4118|  24.2k|                blocks[i].next[1] = i + 1; /* blocks sorted by increasing start */
 4119|  24.2k|                target = lastpc + (codes[lastpc] >> 16);
 4120|  24.2k|                break;
 4121|  1.06k|            case JOP_JUMP:
  ------------------
  |  Branch (4121:13): [True: 1.06k, False: 233k]
  ------------------
 4122|  1.06k|                target = lastpc + (codes[lastpc] >> 8);
 4123|  1.06k|                break;
 4124|   234k|        }
 4125|       |        /* Find block whose start = target */
 4126|  25.2k|        int32_t j;
 4127|  56.6M|        for (j = 0; j < block_count; j++) {
  ------------------
  |  Branch (4127:21): [True: 56.6M, False: 0]
  ------------------
 4128|  56.6M|            if (blocks[j].start == target) {
  ------------------
  |  Branch (4128:17): [True: 25.2k, False: 56.5M]
  ------------------
 4129|  25.2k|                blocks[i].next[0] = j;
 4130|  25.2k|                break;
 4131|  25.2k|            }
 4132|  56.6M|        }
 4133|  25.2k|        janet_assert(j < block_count, "did not find next block");
  ------------------
  |  |  389|  25.2k|#define janet_assert(c, m) do { \
  |  |  390|  25.2k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 25.2k]
  |  |  ------------------
  |  |  391|  25.2k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 25.2k]
  |  |  ------------------
  ------------------
 4134|  25.2k|    }
 4135|   194k|    janet_free(bitmap);
  ------------------
  |  | 2415|   194k|#define janet_free(X) free((X))
  ------------------
 4136|   194k|    *n_blocks = block_count;
 4137|   194k|    return blocks;
 4138|   194k|}
janet.c:janet_bytecode_leader_bitmap:
 4021|   194k|static uint32_t *janet_bytecode_leader_bitmap(JanetFuncDef *def) {
 4022|   194k|    uint32_t *code = def->bytecode;
 4023|   194k|    int32_t *codes = (int32_t *)code;
 4024|   194k|    int32_t len = def->bytecode_length;
 4025|   194k|    int32_t words = ((len - 1) / 32) + 1;
 4026|   194k|    uint32_t *leaders = array_allocate(sizeof(uint32_t), words);
 4027|   194k|    janet_assert(words >= 0, "bad len");
  ------------------
  |  |  389|   194k|#define janet_assert(c, m) do { \
  |  |  390|   194k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 194k]
  |  |  ------------------
  |  |  391|   194k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 194k]
  |  |  ------------------
  ------------------
 4028|   194k|    memset(leaders, 0, (size_t) words * sizeof(uint32_t));
 4029|   194k|    int did_jump = 1; /* pc=0 is a leader */
 4030|   194k|    uint32_t target = 0;
 4031|  35.4M|    for (int32_t pc = 0; pc < len; pc++) {
  ------------------
  |  Branch (4031:26): [True: 35.3M, False: 194k]
  ------------------
 4032|  35.3M|        if (did_jump) bs_set_bit(leaders, pc);
  ------------------
  |  Branch (4032:13): [True: 232k, False: 35.0M]
  ------------------
 4033|  35.3M|        did_jump = 0;
 4034|  35.3M|        switch (code[pc] & 0x7F) {
 4035|  35.0M|            default:
  ------------------
  |  Branch (4035:13): [True: 35.0M, False: 232k]
  ------------------
 4036|  35.0M|                continue;
 4037|  35.0M|            case JOP_RETURN_NIL:
  ------------------
  |  Branch (4037:13): [True: 13.9k, False: 35.2M]
  ------------------
 4038|   193k|            case JOP_RETURN:
  ------------------
  |  Branch (4038:13): [True: 179k, False: 35.1M]
  ------------------
 4039|   194k|            case JOP_ERROR:
  ------------------
  |  Branch (4039:13): [True: 604, False: 35.3M]
  ------------------
 4040|   207k|            case JOP_TAILCALL:
  ------------------
  |  Branch (4040:13): [True: 13.5k, False: 35.2M]
  ------------------
 4041|   207k|                did_jump = 1;
 4042|   207k|                continue;
 4043|  1.06k|            case JOP_JUMP:
  ------------------
  |  Branch (4043:13): [True: 1.06k, False: 35.3M]
  ------------------
 4044|  1.06k|                target = pc + (codes[pc] >> 8);
 4045|  1.06k|                bs_set_bit(leaders, target);
 4046|  1.06k|                did_jump = 1;
 4047|  1.06k|                continue;
 4048|      0|            case JOP_JUMP_IF:
  ------------------
  |  Branch (4048:13): [True: 0, False: 35.3M]
  ------------------
 4049|  1.06k|            case JOP_JUMP_IF_NIL:
  ------------------
  |  Branch (4049:13): [True: 1.06k, False: 35.3M]
  ------------------
 4050|  11.6k|            case JOP_JUMP_IF_NOT:
  ------------------
  |  Branch (4050:13): [True: 10.6k, False: 35.2M]
  ------------------
 4051|  24.2k|            case JOP_JUMP_IF_NOT_NIL:
  ------------------
  |  Branch (4051:13): [True: 12.5k, False: 35.2M]
  ------------------
 4052|  24.2k|                target = pc + (codes[pc] >> 16);
 4053|  24.2k|                bs_set_bit(leaders, target);
 4054|  24.2k|                did_jump = 1;
 4055|  24.2k|                continue;
 4056|  35.3M|        }
 4057|  35.3M|    }
 4058|   194k|    return leaders;
 4059|   194k|}
janet.c:janet_strlike_cmp:
 6108|   208k|static int janet_strlike_cmp(JanetType type, Janet x, const char *cstring) {
 6109|   208k|    if (janet_type(x) != type) return 0;
  ------------------
  |  |  795|   208k|    (isnan((x).number) \
  |  |  796|   208k|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|   208k|        : JANET_NUMBER)
  ------------------
  |  Branch (6109:9): [True: 208k, False: 303]
  |  Branch (6109:9): [True: 200k, False: 8.56k]
  ------------------
 6110|  8.56k|    return !janet_cstrcmp(janet_unwrap_string(x), cstring);
  ------------------
  |  |  863|  8.56k|#define janet_unwrap_string(x) ((JanetString)janet_nanbox_to_pointer(x))
  ------------------
 6111|   208k|}
janet.c:maxarity1:
 6518|      4|static int maxarity1(JanetFopts opts, JanetSlot *args) {
 6519|      4|    (void) opts;
 6520|       |    return janet_v_count(args) <= 1;
  ------------------
  |  |  759|      4|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|      3|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      3|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 3, False: 1]
  |  |  ------------------
  ------------------
 6521|      4|}
janet.c:do_debug:
 6636|      3|static JanetSlot do_debug(JanetFopts opts, JanetSlot *args) {
 6637|      3|    (void)args;
 6638|      3|    int32_t len = janet_v_count(args);
  ------------------
  |  |  759|      3|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|      2|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      2|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 2, False: 1]
  |  |  ------------------
  ------------------
 6639|      3|    JanetSlot t = janetc_gettarget(opts);
 6640|      3|    janetc_emit_ssu(opts.compiler, JOP_SIGNAL, t,
 6641|      3|                    (len == 1) ? args[0] : janetc_cslot(janet_wrap_nil()),
  ------------------
  |  |  831|      1|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      1|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      1|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      1|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6641:21): [True: 2, False: 1]
  ------------------
 6642|      3|                    JANET_SIGNAL_DEBUG,
 6643|      3|                    1);
 6644|      3|    return t;
 6645|      3|}
janet.c:fixarity1:
 6514|    357|static int fixarity1(JanetFopts opts, JanetSlot *args) {
 6515|    357|    (void) opts;
 6516|       |    return janet_v_count(args) == 1;
  ------------------
  |  |  759|    357|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|    357|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|    357|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 357, False: 0]
  |  |  ------------------
  ------------------
 6517|    357|}
janet.c:do_error:
 6632|    302|static JanetSlot do_error(JanetFopts opts, JanetSlot *args) {
 6633|    302|    janetc_emit_s(opts.compiler, JOP_ERROR, args[0], 0);
 6634|    302|    return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|    302|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|    302|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    302|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    302|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6635|    302|}
janet.c:minarity2:
 6522|   207k|static int minarity2(JanetFopts opts, JanetSlot *args) {
 6523|   207k|    (void) opts;
 6524|       |    return janet_v_count(args) >= 2;
  ------------------
  |  |  759|   207k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|   207k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   207k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 207k, False: 0]
  |  |  ------------------
  ------------------
 6525|   207k|}
janet.c:do_apply:
 6718|   207k|static JanetSlot do_apply(JanetFopts opts, JanetSlot *args) {
 6719|       |    /* Push phase */
 6720|   207k|    JanetCompiler *c = opts.compiler;
 6721|   207k|    int32_t i;
 6722|   207k|    for (i = 1; i < janet_v_count(args) - 3; i += 3)
  ------------------
  |  |  759|   207k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|   207k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   207k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 207k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (6722:17): [True: 0, False: 207k]
  ------------------
 6723|      0|        janetc_emit_sss(c, JOP_PUSH_3, args[i], args[i + 1], args[i + 2], 0);
 6724|   207k|    if (i == janet_v_count(args) - 3)
  ------------------
  |  |  759|   207k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|   207k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   207k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 207k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (6724:9): [True: 0, False: 207k]
  ------------------
 6725|      0|        janetc_emit_ss(c, JOP_PUSH_2, args[i], args[i + 1], 0);
 6726|   207k|    else if (i == janet_v_count(args) - 2)
  ------------------
  |  |  759|   207k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|   207k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   207k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 207k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (6726:14): [True: 0, False: 207k]
  ------------------
 6727|      0|        janetc_emit_s(c, JOP_PUSH, args[i], 0);
 6728|       |    /* Push array phase */
 6729|   207k|    janetc_emit_s(c, JOP_PUSH_ARRAY, janet_v_last(args), 0);
  ------------------
  |  |  760|   207k|#define janet_v_last(v)         ((v)[janet_v__cnt(v) - 1])
  |  |  ------------------
  |  |  |  |  766|   207k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   207k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6730|       |    /* Call phase */
 6731|   207k|    JanetSlot target;
 6732|   207k|    if (opts.flags & JANET_FOPTS_TAIL) {
  ------------------
  |  | 1147|   207k|#define JANET_FOPTS_TAIL 0x10000
  ------------------
  |  Branch (6732:9): [True: 0, False: 207k]
  ------------------
 6733|      0|        janetc_emit_s(c, JOP_TAILCALL, args[0], 0);
 6734|      0|        target = janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6735|      0|        target.flags |= JANET_SLOT_RETURNED;
  ------------------
  |  | 1042|      0|#define JANET_SLOT_RETURNED 0x100000
  ------------------
 6736|   207k|    } else {
 6737|   207k|        target = janetc_gettarget(opts);
 6738|   207k|        janetc_emit_ss(c, JOP_CALL, target, args[0], 1);
 6739|   207k|    }
 6740|   207k|    return target;
 6741|   207k|}
janet.c:arity1or2:
 6504|  3.43k|static int arity1or2(JanetFopts opts, JanetSlot *args) {
 6505|  3.43k|    (void) opts;
 6506|  3.43k|    int32_t arity = janet_v_count(args);
  ------------------
  |  |  759|  3.43k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  3.43k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  3.43k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 3.43k, False: 0]
  |  |  ------------------
  ------------------
 6507|  3.43k|    return arity == 1 || arity == 2;
  ------------------
  |  Branch (6507:12): [True: 513, False: 2.91k]
  |  Branch (6507:26): [True: 2.91k, False: 0]
  ------------------
 6508|  3.43k|}
janet.c:do_resume:
 6712|    513|static JanetSlot do_resume(JanetFopts opts, JanetSlot *args) {
 6713|    513|    return opfunction(opts, args, JOP_RESUME, janet_wrap_nil());
  ------------------
  |  |  831|    513|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|    513|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    513|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    513|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6714|    513|}
janet.c:opfunction:
 6554|  3.43k|    Janet defaultArg2) {
 6555|  3.43k|    JanetCompiler *c = opts.compiler;
 6556|  3.43k|    int32_t len;
 6557|  3.43k|    len = janet_v_count(args);
  ------------------
  |  |  759|  3.43k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  3.43k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  3.43k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 3.43k, False: 0]
  |  |  ------------------
  ------------------
 6558|  3.43k|    JanetSlot t;
 6559|  3.43k|    if (len == 1) {
  ------------------
  |  Branch (6559:9): [True: 513, False: 2.91k]
  ------------------
 6560|    513|        t = janetc_gettarget(opts);
 6561|    513|        janetc_emit_sss(c, op, t, args[0], janetc_cslot(defaultArg2), 1);
 6562|    513|        return t;
 6563|  2.91k|    } else {
 6564|       |        /* len == 2 */
 6565|  2.91k|        t = janetc_gettarget(opts);
 6566|  2.91k|        janetc_emit_sss(c, op, t, args[0], args[1], 1);
 6567|  2.91k|    }
 6568|  2.91k|    return t;
 6569|  3.43k|}
janet.c:fixarity2:
 6526|  1.66k|static int fixarity2(JanetFopts opts, JanetSlot *args) {
 6527|  1.66k|    (void) opts;
 6528|       |    return janet_v_count(args) == 2;
  ------------------
  |  |  759|  1.66k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  1.66k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.66k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 1.66k, False: 0]
  |  |  ------------------
  ------------------
 6529|  1.66k|}
janet.c:do_in:
 6646|  1.51k|static JanetSlot do_in(JanetFopts opts, JanetSlot *args) {
 6647|  1.51k|    return opreduce(opts, args, JOP_IN, 0, janet_wrap_nil(), janet_wrap_nil());
  ------------------
  |  |  831|  1.51k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  1.51k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.51k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.51k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return opreduce(opts, args, JOP_IN, 0, janet_wrap_nil(), janet_wrap_nil());
  ------------------
  |  |  831|  1.51k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  1.51k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.51k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.51k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6648|  1.51k|}
janet.c:opreduce:
 6593|  4.64k|    Janet unary) {
 6594|  4.64k|    JanetCompiler *c = opts.compiler;
 6595|  4.64k|    int32_t i, len;
 6596|  4.64k|    int8_t imm = 0;
 6597|  4.64k|    len = janet_v_count(args);
  ------------------
  |  |  759|  4.64k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  4.10k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  4.10k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 4.10k, False: 541]
  |  |  ------------------
  ------------------
 6598|  4.64k|    JanetSlot t;
 6599|  4.64k|    if (len == 0) {
  ------------------
  |  Branch (6599:9): [True: 541, False: 4.10k]
  ------------------
 6600|    541|        return janetc_cslot(nullary);
 6601|  4.10k|    } else if (len == 1) {
  ------------------
  |  Branch (6601:16): [True: 12, False: 4.09k]
  ------------------
 6602|     12|        t = janetc_gettarget(opts);
 6603|       |        /* Special case subtract to be times -1 */
 6604|     12|        if (op == JOP_SUBTRACT) {
  ------------------
  |  Branch (6604:13): [True: 5, False: 7]
  ------------------
 6605|      5|            janetc_emit_ssi(c, JOP_MULTIPLY_IMMEDIATE, t, args[0], -1, 1);
 6606|      7|        } else {
 6607|      7|            janetc_emit_sss(c, op, t, janetc_cslot(unary), args[0], 1);
 6608|      7|        }
 6609|     12|        return t;
 6610|     12|    }
 6611|  4.09k|    t = janetc_gettarget(opts);
 6612|  4.09k|    if (opim && can_slot_be_imm(args[1], &imm)) {
  ------------------
  |  Branch (6612:9): [True: 142, False: 3.95k]
  |  Branch (6612:17): [True: 23, False: 119]
  ------------------
 6613|     23|        janetc_emit_ssi(c, opim, t, args[0], imm, 1);
 6614|  4.06k|    } else {
 6615|  4.06k|        janetc_emit_sss(c, op, t, args[0], args[1], 1);
 6616|  4.06k|    }
 6617|  18.3k|    for (i = 2; i < len; i++) {
  ------------------
  |  Branch (6617:17): [True: 14.2k, False: 4.09k]
  ------------------
 6618|  14.2k|        if (opim && can_slot_be_imm(args[i], &imm)) {
  ------------------
  |  Branch (6618:13): [True: 1.61k, False: 12.6k]
  |  Branch (6618:21): [True: 558, False: 1.05k]
  ------------------
 6619|    558|            janetc_emit_ssi(c, opim, t, t, imm, 1);
 6620|  13.7k|        } else {
 6621|  13.7k|            janetc_emit_sss(c, op, t, t, args[i], 1);
 6622|  13.7k|        }
 6623|  14.2k|    }
 6624|  4.09k|    return t;
 6625|  4.64k|}
janet.c:can_slot_be_imm:
 6581|  50.2k|static int can_slot_be_imm(JanetSlot s, int8_t *out) {
 6582|  50.2k|    if (!(s.flags & JANET_SLOT_CONSTANT)) return 0;
  ------------------
  |  | 1038|  50.2k|#define JANET_SLOT_CONSTANT 0x10000
  ------------------
  |  Branch (6582:9): [True: 28.2k, False: 22.0k]
  ------------------
 6583|  22.0k|    return can_be_imm(s.constant, out);
 6584|  50.2k|}
janet.c:can_be_imm:
 6572|  22.0k|static int can_be_imm(Janet x, int8_t *out) {
 6573|  22.0k|    if (!janet_checkint(x)) return 0;
  ------------------
  |  Branch (6573:9): [True: 20.9k, False: 1.12k]
  ------------------
 6574|  1.12k|    int32_t integer = janet_unwrap_integer(x);
  ------------------
  |  |  966|  1.12k|#define janet_unwrap_integer(x) ((int32_t) janet_unwrap_number(x))
  |  |  ------------------
  |  |  |  |  839|  1.12k|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  ------------------
 6575|  1.12k|    if (integer > INT8_MAX || integer < INT8_MIN) return 0;
  ------------------
  |  Branch (6575:9): [True: 193, False: 936]
  |  Branch (6575:31): [True: 192, False: 744]
  ------------------
 6576|    744|    *out = (int8_t) integer;
 6577|    744|    return 1;
 6578|  1.12k|}
janet.c:do_add:
 6745|     48|static JanetSlot do_add(JanetFopts opts, JanetSlot *args) {
 6746|     48|    return opreduce(opts, args, JOP_ADD, JOP_ADD_IMMEDIATE, janet_wrap_integer(0), janet_wrap_integer(0));
  ------------------
  |  |  967|     48|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|     48|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
                  return opreduce(opts, args, JOP_ADD, JOP_ADD_IMMEDIATE, janet_wrap_integer(0), janet_wrap_integer(0));
  ------------------
  |  |  967|     48|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|     48|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
 6747|     48|}
janet.c:do_sub:
 6748|    638|static JanetSlot do_sub(JanetFopts opts, JanetSlot *args) {
 6749|    638|    return opreduce(opts, args, JOP_SUBTRACT, JOP_SUBTRACT_IMMEDIATE, janet_wrap_integer(0), janet_wrap_integer(0));
  ------------------
  |  |  967|    638|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|    638|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
                  return opreduce(opts, args, JOP_SUBTRACT, JOP_SUBTRACT_IMMEDIATE, janet_wrap_integer(0), janet_wrap_integer(0));
  ------------------
  |  |  967|    638|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|    638|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
 6750|    638|}
janet.c:do_div:
 6754|      8|static JanetSlot do_div(JanetFopts opts, JanetSlot *args) {
 6755|      8|    return opreduce(opts, args, JOP_DIVIDE, JOP_DIVIDE_IMMEDIATE, janet_wrap_integer(1), janet_wrap_integer(1));
  ------------------
  |  |  967|      8|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|      8|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
                  return opreduce(opts, args, JOP_DIVIDE, JOP_DIVIDE_IMMEDIATE, janet_wrap_integer(1), janet_wrap_integer(1));
  ------------------
  |  |  967|      8|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|      8|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
 6756|      8|}
janet.c:do_gt:
 6827|    215|static JanetSlot do_gt(JanetFopts opts, JanetSlot *args) {
 6828|    215|    return compreduce(opts, args, JOP_GREATER_THAN, JOP_GREATER_THAN_IMMEDIATE, 0);
 6829|    215|}
janet.c:compreduce:
 6794|  1.03k|    int invert) {
 6795|  1.03k|    JanetCompiler *c = opts.compiler;
 6796|  1.03k|    int32_t i, len;
 6797|  1.03k|    int8_t imm = 0;
 6798|  1.03k|    len = janet_v_count(args);
  ------------------
  |  |  759|  1.03k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|    749|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|    749|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 749, False: 285]
  |  |  ------------------
  ------------------
 6799|  1.03k|    int32_t *labels = NULL;
 6800|  1.03k|    JanetSlot t;
 6801|  1.03k|    if (len < 2) {
  ------------------
  |  Branch (6801:9): [True: 286, False: 748]
  ------------------
 6802|    286|        return invert
  ------------------
  |  Branch (6802:16): [True: 0, False: 286]
  ------------------
 6803|    286|               ? janetc_cslot(janet_wrap_false())
  ------------------
  |  |  833|      0|#define janet_wrap_false() janet_nanbox_from_payload(JANET_BOOLEAN, 0)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6804|    286|               : janetc_cslot(janet_wrap_true());
  ------------------
  |  |  832|    286|#define janet_wrap_true() janet_nanbox_from_payload(JANET_BOOLEAN, 1)
  |  |  ------------------
  |  |  |  |  822|    286|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    286|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    286|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6805|    286|    }
 6806|    748|    t = janetc_gettarget(opts);
 6807|  49.2k|    for (i = 1; i < len; i++) {
  ------------------
  |  Branch (6807:17): [True: 48.5k, False: 748]
  ------------------
 6808|  48.5k|        if (opim && can_slot_be_imm(args[i], &imm)) {
  ------------------
  |  Branch (6808:13): [True: 48.5k, False: 0]
  |  Branch (6808:21): [True: 163, False: 48.3k]
  ------------------
 6809|    163|            janetc_emit_ssi(c, opim, t, args[i - 1], imm, 1);
 6810|  48.3k|        } else {
 6811|  48.3k|            janetc_emit_sss(c, op, t, args[i - 1], args[i], 1);
 6812|  48.3k|        }
 6813|  48.5k|        if (i != (len - 1)) {
  ------------------
  |  Branch (6813:13): [True: 47.7k, False: 748]
  ------------------
 6814|  47.7k|            int32_t label = janetc_emit_si(c, invert ? JOP_JUMP_IF : JOP_JUMP_IF_NOT, t, 0, 1);
  ------------------
  |  Branch (6814:47): [True: 0, False: 47.7k]
  ------------------
 6815|  47.7k|            janet_v_push(labels, label);
  ------------------
  |  |  757|  47.7k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  47.7k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  47.7k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  47.5k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  47.5k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  47.5k|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  47.5k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 241, False: 47.5k]
  |  |  |  |  |  |  |  Branch (768:50): [True: 1.37k, False: 46.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|  1.61k|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  47.7k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  47.7k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6816|  47.7k|        }
 6817|  48.5k|    }
 6818|    748|    int32_t end = janet_v_count(c->buffer);
  ------------------
  |  |  759|    748|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|    748|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|    748|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 748, False: 0]
  |  |  ------------------
  ------------------
 6819|  48.5k|    for (i = 0; i < janet_v_count(labels); i++) {
  ------------------
  |  |  759|  48.5k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  48.0k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  48.0k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 48.0k, False: 507]
  |  |  ------------------
  ------------------
  |  Branch (6819:17): [True: 47.7k, False: 748]
  ------------------
 6820|  47.7k|        int32_t label = labels[i];
 6821|  47.7k|        c->buffer[label] |= ((uint32_t)(end - label) << 16);
 6822|  47.7k|    }
 6823|       |    janet_v_free(labels);
  ------------------
  |  |  756|    748|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|    241|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 241, False: 507]
  |  |  ------------------
  ------------------
 6824|    748|    return t;
 6825|  1.03k|}
janet.c:do_lt:
 6830|      6|static JanetSlot do_lt(JanetFopts opts, JanetSlot *args) {
 6831|      6|    return compreduce(opts, args, JOP_LESS_THAN, JOP_LESS_THAN_IMMEDIATE, 0);
 6832|      6|}
janet.c:do_eq:
 6839|    452|static JanetSlot do_eq(JanetFopts opts, JanetSlot *args) {
 6840|    452|    return compreduce(opts, args, JOP_EQUALS, JOP_EQUALS_IMMEDIATE, 0);
 6841|    452|}
janet.c:do_neq:
 6842|    361|static JanetSlot do_neq(JanetFopts opts, JanetSlot *args) {
 6843|    361|    return compreduce(opts, args, JOP_NOT_EQUALS, JOP_NOT_EQUALS_IMMEDIATE, 1);
 6844|    361|}
janet.c:do_propagate:
 6629|    143|static JanetSlot do_propagate(JanetFopts opts, JanetSlot *args) {
 6630|    143|    return opreduce(opts, args, JOP_PROPAGATE, 0, janet_wrap_nil(), janet_wrap_nil());
  ------------------
  |  |  831|    143|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|    143|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    143|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    143|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return opreduce(opts, args, JOP_PROPAGATE, 0, janet_wrap_nil(), janet_wrap_nil());
  ------------------
  |  |  831|    143|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|    143|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    143|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    143|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6631|    143|}
janet.c:arity2or3:
 6509|    645|static int arity2or3(JanetFopts opts, JanetSlot *args) {
 6510|    645|    (void) opts;
 6511|    645|    int32_t arity = janet_v_count(args);
  ------------------
  |  |  759|    645|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|    645|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|    645|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 645, False: 0]
  |  |  ------------------
  ------------------
 6512|    645|    return arity == 2 || arity == 3;
  ------------------
  |  Branch (6512:12): [True: 32, False: 613]
  |  Branch (6512:26): [True: 269, False: 344]
  ------------------
 6513|    645|}
janet.c:do_get:
 6649|    301|static JanetSlot do_get(JanetFopts opts, JanetSlot *args) {
 6650|    301|    if (janet_v_count(args) == 3) {
  ------------------
  |  |  759|    301|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|    301|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|    301|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 301, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (6650:9): [True: 269, False: 32]
  ------------------
 6651|    269|        JanetCompiler *c = opts.compiler;
 6652|    269|        JanetSlot t = janetc_gettarget(opts);
 6653|    269|        int target_is_default = janetc_sequal(t, args[2]);
 6654|    269|        JanetSlot dflt_slot = args[2];
 6655|    269|        if (target_is_default) {
  ------------------
  |  Branch (6655:13): [True: 0, False: 269]
  ------------------
 6656|      0|            dflt_slot = janetc_farslot(c);
 6657|      0|            janetc_copy(c, dflt_slot, t);
 6658|      0|        }
 6659|    269|        janetc_emit_sss(c, JOP_GET, t, args[0], args[1], 1);
 6660|    269|        int32_t label = janetc_emit_si(c, JOP_JUMP_IF_NOT_NIL, t, 0, 0);
 6661|    269|        janetc_copy(c, t, dflt_slot);
 6662|    269|        if (target_is_default) janetc_freeslot(c, dflt_slot);
  ------------------
  |  Branch (6662:13): [True: 0, False: 269]
  ------------------
 6663|    269|        int32_t current = janet_v_count(c->buffer);
  ------------------
  |  |  759|    269|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|    269|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|    269|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 269, False: 0]
  |  |  ------------------
  ------------------
 6664|    269|        c->buffer[label] |= (uint32_t)(current - label) << 16;
 6665|    269|        return t;
 6666|    269|    } else {
 6667|     32|        return opreduce(opts, args, JOP_GET, 0, janet_wrap_nil(), janet_wrap_nil());
  ------------------
  |  |  831|     32|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|     32|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|     32|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|     32|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      return opreduce(opts, args, JOP_GET, 0, janet_wrap_nil(), janet_wrap_nil());
  ------------------
  |  |  831|     32|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|     32|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|     32|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|     32|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6668|     32|    }
 6669|    301|}
janet.c:do_next:
 6670|  2.91k|static JanetSlot do_next(JanetFopts opts, JanetSlot *args) {
 6671|  2.91k|    return opfunction(opts, args, JOP_NEXT, janet_wrap_nil());
  ------------------
  |  |  831|  2.91k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  2.91k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.91k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.91k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6672|  2.91k|}
janet.c:do_remainder:
 6763|  2.25k|static JanetSlot do_remainder(JanetFopts opts, JanetSlot *args) {
 6764|  2.25k|    return opreduce(opts, args, JOP_REMAINDER, 0, janet_wrap_integer(0), janet_wrap_integer(1));
  ------------------
  |  |  967|  2.25k|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|  2.25k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
                  return opreduce(opts, args, JOP_REMAINDER, 0, janet_wrap_integer(0), janet_wrap_integer(1));
  ------------------
  |  |  967|  2.25k|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|  2.25k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
 6765|  2.25k|}
janet.c:macroexpand1:
 7809|  2.44M|    const JanetSpecial **spec) {
 7810|  2.44M|    if (!janet_checktype(x, JANET_TUPLE))
  ------------------
  |  |  806|  2.44M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 2.44M]
  |  |  ------------------
  |  |  807|  2.44M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  2.44M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  2.44M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  2.44M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.44M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.44M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (7810:9): [True: 1.50M, False: 938k]
  ------------------
 7811|  1.50M|        return 0;
 7812|   938k|    const Janet *form = janet_unwrap_tuple(x);
  ------------------
  |  |  858|   938k|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
 7813|   938k|    if (janet_tuple_length(form) == 0)
  ------------------
  |  | 1802|   938k|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|   938k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (7813:9): [True: 2.03k, False: 936k]
  ------------------
 7814|  2.03k|        return 0;
 7815|       |    /* Source map - only set when we get a tuple */
 7816|   936k|    if (janet_tuple_sm_line(form) >= 0) {
  ------------------
  |  | 1804|   936k|#define janet_tuple_sm_line(t) (janet_tuple_head(t)->sm_line)
  |  |  ------------------
  |  |  |  | 1800|   936k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (7816:9): [True: 304k, False: 632k]
  ------------------
 7817|   304k|        c->current_mapping.line = janet_tuple_sm_line(form);
  ------------------
  |  | 1804|   304k|#define janet_tuple_sm_line(t) (janet_tuple_head(t)->sm_line)
  |  |  ------------------
  |  |  |  | 1800|   304k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
 7818|   304k|        c->current_mapping.column = janet_tuple_sm_column(form);
  ------------------
  |  | 1805|   304k|#define janet_tuple_sm_column(t) (janet_tuple_head(t)->sm_column)
  |  |  ------------------
  |  |  |  | 1800|   304k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
 7819|   304k|    }
 7820|       |    /* Bracketed tuples are not specials or macros! */
 7821|   936k|    if (janet_tuple_flag(form) & JANET_TUPLE_FLAG_BRACKETCTOR)
  ------------------
  |  | 1806|   936k|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|   936k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                  if (janet_tuple_flag(form) & JANET_TUPLE_FLAG_BRACKETCTOR)
  ------------------
  |  | 1798|   936k|#define JANET_TUPLE_FLAG_BRACKETCTOR 0x10000
  ------------------
  |  Branch (7821:9): [True: 504, False: 936k]
  ------------------
 7822|    504|        return 0;
 7823|   936k|    if (!janet_checktype(form[0], JANET_SYMBOL))
  ------------------
  |  |  806|   936k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 936k]
  |  |  ------------------
  |  |  807|   936k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   936k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   936k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   936k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   936k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   936k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (7823:9): [True: 214k, False: 721k]
  ------------------
 7824|   214k|        return 0;
 7825|   721k|    const uint8_t *name = janet_unwrap_symbol(form[0]);
  ------------------
  |  |  864|   721k|#define janet_unwrap_symbol(x) ((JanetSymbol)janet_nanbox_to_pointer(x))
  ------------------
 7826|   721k|    const JanetSpecial *s = janetc_special(name);
 7827|   721k|    if (s) {
  ------------------
  |  Branch (7827:9): [True: 509k, False: 211k]
  ------------------
 7828|   509k|        *spec = s;
 7829|   509k|        return 0;
 7830|   509k|    }
 7831|   211k|    Janet macroval;
 7832|   211k|    JanetBindingType btype = janet_resolve(c->env, name, &macroval);
 7833|   211k|    if (!(btype == JANET_BINDING_MACRO || btype == JANET_BINDING_DYNAMIC_MACRO) ||
  ------------------
  |  Branch (7833:11): [True: 86.4k, False: 125k]
  |  Branch (7833:43): [True: 0, False: 125k]
  ------------------
 7834|  86.4k|            !janet_checktype(macroval, JANET_FUNCTION))
  ------------------
  |  |  806|  86.4k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 86.4k]
  |  |  ------------------
  |  |  807|  86.4k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  86.4k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  86.4k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  86.4k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  86.4k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  86.4k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (7834:13): [True: 0, False: 86.4k]
  ------------------
 7835|   125k|        return 0;
 7836|       |
 7837|       |    /* Evaluate macro */
 7838|  86.4k|    JanetFunction *macro = janet_unwrap_function(macroval);
  ------------------
  |  |  868|  86.4k|#define janet_unwrap_function(x) ((JanetFunction *)janet_nanbox_to_pointer(x))
  ------------------
 7839|  86.4k|    int32_t arity = janet_tuple_length(form) - 1;
  ------------------
  |  | 1802|  86.4k|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|  86.4k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
 7840|  86.4k|    JanetFiber *fiberp = janet_fiber(macro, 64, arity, form + 1);
 7841|  86.4k|    if (NULL == fiberp) {
  ------------------
  |  Branch (7841:9): [True: 3, False: 86.4k]
  ------------------
 7842|      3|        int32_t minar = macro->def->min_arity;
 7843|      3|        int32_t maxar = macro->def->max_arity;
 7844|      3|        const uint8_t *es = NULL;
 7845|      3|        if (minar >= 0 && arity < minar)
  ------------------
  |  Branch (7845:13): [True: 3, False: 0]
  |  Branch (7845:27): [True: 0, False: 3]
  ------------------
 7846|      0|            es = janet_formatc("macro arity mismatch, expected at least %d, got %d", minar, arity);
 7847|      3|        if (maxar >= 0 && arity > maxar)
  ------------------
  |  Branch (7847:13): [True: 3, False: 0]
  |  Branch (7847:27): [True: 3, False: 0]
  ------------------
 7848|      3|            es = janet_formatc("macro arity mismatch, expected at most %d, got %d", maxar, arity);
 7849|      3|        c->result.macrofiber = NULL;
 7850|      3|        janetc_error(c, es);
 7851|      3|        return 0;
 7852|      3|    }
 7853|       |    /* Set env */
 7854|  86.4k|    fiberp->env = c->env;
 7855|  86.4k|    int lock = janet_gclock();
 7856|  86.4k|    Janet mf_kw = janet_ckeywordv("macro-form");
  ------------------
  |  | 1843|  86.4k|#define janet_ckeywordv(cstr) janet_wrap_keyword(janet_ckeyword(cstr))
  |  |  ------------------
  |  |  |  |  850|  86.4k|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|  86.4k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  86.4k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  86.4k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7857|  86.4k|    janet_table_put(c->env, mf_kw, x);
 7858|  86.4k|    Janet ml_kw = janet_ckeywordv("macro-lints");
  ------------------
  |  | 1843|  86.4k|#define janet_ckeywordv(cstr) janet_wrap_keyword(janet_ckeyword(cstr))
  |  |  ------------------
  |  |  |  |  850|  86.4k|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|  86.4k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  86.4k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  86.4k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7859|  86.4k|    if (c->lints) {
  ------------------
  |  Branch (7859:9): [True: 0, False: 86.4k]
  ------------------
 7860|      0|        janet_table_put(c->env, ml_kw, janet_wrap_array(c->lints));
  ------------------
  |  |  845|      0|#define janet_wrap_array(s) janet_nanbox_wrap_((s), JANET_ARRAY)
  |  |  ------------------
  |  |  |  |  825|      0|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7861|      0|    }
 7862|  86.4k|    Janet tempOut;
 7863|  86.4k|    JanetSignal status = janet_continue(fiberp, janet_wrap_nil(), &tempOut);
  ------------------
  |  |  831|  86.4k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  86.4k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  86.4k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  86.4k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7864|  86.4k|    janet_table_put(c->env, mf_kw, janet_wrap_nil());
  ------------------
  |  |  831|  86.4k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  86.4k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  86.4k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  86.4k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7865|  86.4k|    janet_table_put(c->env, ml_kw, janet_wrap_nil());
  ------------------
  |  |  831|  86.4k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  86.4k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  86.4k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  86.4k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7866|  86.4k|    janet_gcunlock(lock);
 7867|  86.4k|    if (status != JANET_SIGNAL_OK) {
  ------------------
  |  Branch (7867:9): [True: 1.22k, False: 85.2k]
  ------------------
 7868|  1.22k|        const uint8_t *es = janet_formatc("(macro) %V", tempOut);
 7869|  1.22k|        c->result.macrofiber = fiberp;
 7870|  1.22k|        janetc_error(c, es);
 7871|  1.22k|        return 0;
 7872|  85.2k|    } else {
 7873|  85.2k|        *out = tempOut;
 7874|  85.2k|    }
 7875|       |
 7876|  85.2k|    return 1;
 7877|  86.4k|}
janet.c:janetc_tuple:
 7779|    504|static JanetSlot janetc_tuple(JanetFopts opts, Janet x) {
 7780|    504|    JanetCompiler *c = opts.compiler;
 7781|    504|    const Janet *t = janet_unwrap_tuple(x);
  ------------------
  |  |  858|    504|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
 7782|    504|    return janetc_maker(opts,
 7783|       |                        janetc_toslots(c, t, janet_tuple_length(t)),
  ------------------
  |  | 1802|    504|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|    504|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
 7784|    504|                        JOP_MAKE_TUPLE);
 7785|    504|}
janet.c:janetc_maker:
 7731|    568|static JanetSlot janetc_maker(JanetFopts opts, JanetSlot *slots, int op) {
 7732|    568|    JanetCompiler *c = opts.compiler;
 7733|    568|    JanetSlot retslot;
 7734|       |
 7735|       |    /* Check if this structure is composed entirely of constants */
 7736|    568|    int can_inline = 1;
 7737|  2.20k|    for (int32_t i = 0; i < janet_v_count(slots); i++) {
  ------------------
  |  |  759|  2.20k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  2.19k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  2.19k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 2.19k, False: 8]
  |  |  ------------------
  ------------------
  |  Branch (7737:25): [True: 2.15k, False: 50]
  ------------------
 7738|  2.15k|        if (!(slots[i].flags & JANET_SLOT_CONSTANT) ||
  ------------------
  |  | 1038|  2.15k|#define JANET_SLOT_CONSTANT 0x10000
  ------------------
  |  Branch (7738:13): [True: 518, False: 1.63k]
  ------------------
 7739|  1.63k|                (slots[i].flags & JANET_SLOT_SPLICED)) {
  ------------------
  |  | 1046|  1.63k|#define JANET_SLOT_SPLICED 0x1000000
  ------------------
  |  Branch (7739:17): [True: 0, False: 1.63k]
  ------------------
 7740|    518|            can_inline = 0;
 7741|    518|            break;
 7742|    518|        }
 7743|  2.15k|    }
 7744|       |
 7745|    568|    if (can_inline && (op == JOP_MAKE_STRUCT)) {
  ------------------
  |  Branch (7745:9): [True: 50, False: 518]
  |  Branch (7745:23): [True: 19, False: 31]
  ------------------
 7746|     19|        JanetKV *st = janet_struct_begin(janet_v_count(slots) / 2);
  ------------------
  |  |  759|     19|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|     11|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|     11|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 11, False: 8]
  |  |  ------------------
  ------------------
 7747|    801|        for (int32_t i = 0; i < janet_v_count(slots); i += 2) {
  ------------------
  |  |  759|    801|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|    793|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|    793|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 793, False: 8]
  |  |  ------------------
  ------------------
  |  Branch (7747:29): [True: 782, False: 19]
  ------------------
 7748|    782|            Janet k = slots[i].constant;
 7749|    782|            Janet v = slots[i + 1].constant;
 7750|    782|            janet_struct_put(st, k, v);
 7751|    782|        }
 7752|     19|        retslot = janetc_cslot(janet_wrap_struct(janet_struct_end(st)));
  ------------------
  |  |  842|     19|#define janet_wrap_struct(s) janet_nanbox_wrap_c((s), JANET_STRUCT)
  |  |  ------------------
  |  |  |  |  828|     19|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|     19|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|     19|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7753|     19|        janetc_freeslots(c, slots);
 7754|    549|    } else if (can_inline && (op == JOP_MAKE_TUPLE)) {
  ------------------
  |  Branch (7754:16): [True: 31, False: 518]
  |  Branch (7754:30): [True: 2, False: 29]
  ------------------
 7755|      2|        Janet *tup = janet_tuple_begin(janet_v_count(slots));
  ------------------
  |  |  759|      2|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|      2|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      2|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 2, False: 0]
  |  |  ------------------
  ------------------
 7756|      5|        for (int32_t i = 0; i < janet_v_count(slots); i++) {
  ------------------
  |  |  759|      5|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|      5|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      5|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 5, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (7756:29): [True: 3, False: 2]
  ------------------
 7757|      3|            tup[i] = slots[i].constant;
 7758|      3|        }
 7759|      2|        retslot = janetc_cslot(janet_wrap_tuple(janet_tuple_end(tup)));
  ------------------
  |  |  843|      2|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|      2|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      2|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      2|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7760|      2|        janetc_freeslots(c, slots);
 7761|    547|    } else {
 7762|    547|        janetc_pushslots(c, slots);
 7763|    547|        janetc_freeslots(c, slots);
 7764|    547|        retslot = janetc_gettarget(opts);
 7765|    547|        janetc_emit_s(c, op, retslot, 1);
 7766|    547|    }
 7767|       |
 7768|    568|    return retslot;
 7769|    568|}
janet.c:janetc_call:
 7528|   341k|static JanetSlot janetc_call(JanetFopts opts, JanetSlot *slots, JanetSlot fun, const Janet *form) {
 7529|   341k|    JanetSlot retslot;
 7530|   341k|    JanetCompiler *c = opts.compiler;
 7531|   341k|    int specialized = 0;
 7532|   341k|    if (fun.flags & JANET_SLOT_CONSTANT && !has_spliced(slots)) {
  ------------------
  |  | 1038|   682k|#define JANET_SLOT_CONSTANT 0x10000
  ------------------
  |  Branch (7532:9): [True: 309k, False: 32.2k]
  |  Branch (7532:44): [True: 308k, False: 170]
  ------------------
 7533|   308k|        if (janet_checktype(fun.constant, JANET_FUNCTION)) {
  ------------------
  |  |  806|   308k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 217k, False: 91.2k]
  |  |  |  Branch (806:6): [Folded, False: 308k]
  |  |  ------------------
  |  |  807|   308k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   308k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   308k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   308k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   308k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   308k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7534|   217k|            JanetFunction *f = janet_unwrap_function(fun.constant);
  ------------------
  |  |  868|   217k|#define janet_unwrap_function(x) ((JanetFunction *)janet_nanbox_to_pointer(x))
  ------------------
 7535|   217k|            const JanetFunOptimizer *o = janetc_funopt(f->def->flags);
 7536|   217k|            if (o && (!o->can_optimize || o->can_optimize(opts, slots))) {
  ------------------
  |  Branch (7536:17): [True: 217k, False: 0]
  |  Branch (7536:23): [True: 3.98k, False: 213k]
  |  Branch (7536:43): [True: 213k, False: 400]
  ------------------
 7537|   217k|                specialized = 1;
 7538|   217k|                retslot = o->optimize(opts, slots);
 7539|   217k|            } else if (function_can_inline(opts, f, slots)) {
  ------------------
  |  Branch (7539:24): [True: 0, False: 400]
  ------------------
 7540|       |                /* Function inlining */
 7541|      0|                int is_tail;
 7542|      0|                JanetSlot target;
 7543|      0|                if ((opts.flags & JANET_FOPTS_TAIL) &&
  ------------------
  |  | 1147|      0|#define JANET_FOPTS_TAIL 0x10000
  ------------------
  |  Branch (7543:21): [True: 0, False: 0]
  ------------------
 7544|       |                        /* Prevent top level tail calls for better errors */
 7545|      0|                        !(c->scope->flags & JANET_SCOPE_TOP)) {
  ------------------
  |  | 1060|      0|#define JANET_SCOPE_TOP 4
  ------------------
  |  Branch (7545:25): [True: 0, False: 0]
  ------------------
 7546|      0|                    is_tail = 1;
 7547|      0|                } else {
 7548|      0|                    is_tail = 0;
 7549|      0|                }
 7550|       |                /* contiguous chunk of fun->def->slotcount slots */
 7551|      0|                if (!is_tail) target = janetc_gettarget(opts);
  ------------------
  |  Branch (7551:21): [True: 0, False: 0]
  ------------------
 7552|      0|                int32_t nslots = f->def->slotcount;
 7553|      0|                int32_t slot_delta = janetc_regalloc_n(&c->scope->ra, nslots);
 7554|      0|                if (slot_delta + f->def->slotcount < 256) {
  ------------------
  |  Branch (7554:21): [True: 0, False: 0]
  ------------------
 7555|       |                    /*janet_eprintf("inlining %V\n", janet_wrap_function(f));*/
 7556|       |                    /* Limit inlining when too many slots */
 7557|      0|                    JanetScope *scope = c->scope;
 7558|      0|                    while (scope) {
  ------------------
  |  Branch (7558:28): [True: 0, False: 0]
  ------------------
 7559|      0|                        if (scope->flags & JANET_SCOPE_FUNCTION)
  ------------------
  |  | 1058|      0|#define JANET_SCOPE_FUNCTION 1
  ------------------
  |  Branch (7559:29): [True: 0, False: 0]
  ------------------
 7560|      0|                            break;
 7561|      0|                        scope = scope->parent;
 7562|      0|                    }
 7563|       |                    /* Setup the function parameters */
 7564|      0|                    JanetSlot dest;
 7565|      0|                    dest.envindex = -1;
 7566|      0|                    dest.flags = JANET_SLOTTYPE_ANY;
  ------------------
  |  | 1048|      0|#define JANET_SLOTTYPE_ANY 0xFFFF
  ------------------
 7567|      0|                    dest.constant = janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7568|      0|                    for (int32_t i = 0; i < janet_v_count(slots); i++) {
  ------------------
  |  |  759|      0|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (7568:41): [True: 0, False: 0]
  ------------------
 7569|      0|                        dest.index = slot_delta + i;
 7570|      0|                        janetc_copy(c, dest, slots[i]);
 7571|      0|                    }
 7572|       |
 7573|       |                    /* Initialize other slots to nil just like in a normal function call */
 7574|       |                    /* TODO - add pass to remove these if needed so we can add this back.
 7575|       |                     * The current compiler doesn't rely on nil-initialization behavior but might in the future
 7576|       |                     * (e.g. removing redundant ldn at the beginning of a function.
 7577|       |                    for (int32_t i = janet_v_count(slots); i < nslots; i++) {
 7578|       |                        janetc_emit(c, JOP_LOAD_NIL | ((uint32_t)(i + slot_delta) << 8));
 7579|       |                    }
 7580|       |                    */
 7581|       |
 7582|       |                    /* Do main inlining (patch the bytecode) */
 7583|      0|                    int32_t const_delta = janet_v_count(scope->consts); /* Get const delta _after_ moving slots. janetc_copy can add constants here! */
  ------------------
  |  |  759|      0|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 7584|      0|                    uint32_t *insert_code = janet_bytecode_inline_chunk(f->def, is_tail ? -1 : target.index, slot_delta, const_delta);
  ------------------
  |  Branch (7584:81): [True: 0, False: 0]
  ------------------
 7585|      0|                    for (int32_t i = 0; i < janet_v_count(insert_code); i++) {
  ------------------
  |  |  759|      0|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (7585:41): [True: 0, False: 0]
  ------------------
 7586|       |                        /* TODO - better match up source code mapping - e.g. if inlined function
 7587|       |                         * is from the same source file */
 7588|      0|                        janetc_emit(c, insert_code[i]);
 7589|      0|                    }
 7590|       |                    /* Copy constants into our constants buffer */
 7591|      0|                    for (int32_t i = 0; i < f->def->constants_length; i++) {
  ------------------
  |  Branch (7591:41): [True: 0, False: 0]
  ------------------
 7592|      0|                        janet_v_push(scope->consts, f->def->constants[i]);
  ------------------
  |  |  757|      0|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|      0|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|      0|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|      0|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (768:50): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|      0|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7593|      0|                    }
 7594|      0|                    janet_v_free(insert_code);
  ------------------
  |  |  756|      0|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 7595|      0|                    specialized = 1;
 7596|      0|                    if (is_tail) {
  ------------------
  |  Branch (7596:25): [True: 0, False: 0]
  ------------------
 7597|      0|                        retslot = janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7598|      0|                        retslot.flags = JANET_SLOT_RETURNED;
  ------------------
  |  | 1042|      0|#define JANET_SLOT_RETURNED 0x100000
  ------------------
 7599|      0|                    } else {
 7600|      0|                        retslot = target;
 7601|      0|                    }
 7602|      0|                } else {
 7603|       |                    /*janet_eprintf("inlining failed %V\n", janet_wrap_function(f));*/
 7604|      0|                    ;
 7605|      0|                }
 7606|      0|                janetc_regalloc_free_n(&c->scope->ra, slot_delta, nslots);
 7607|      0|            }
 7608|   217k|        }
 7609|   308k|    }
 7610|   341k|    if (!specialized) {
  ------------------
  |  Branch (7610:9): [True: 124k, False: 217k]
  ------------------
 7611|   124k|        int32_t min_arity = janetc_pushslots(c, slots);
 7612|       |        /* Check for provably incorrect function calls */
 7613|   124k|        if (fun.flags & JANET_SLOT_CONSTANT) {
  ------------------
  |  | 1038|   124k|#define JANET_SLOT_CONSTANT 0x10000
  ------------------
  |  Branch (7613:13): [True: 91.8k, False: 32.2k]
  ------------------
 7614|       |
 7615|       |            /* Check for bad arity type if fun is a constant */
 7616|  91.8k|            switch (janet_type(fun.constant)) {
  ------------------
  |  |  795|  91.8k|    (isnan((x).number) \
  |  |  796|  91.8k|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  91.8k|        : JANET_NUMBER)
  ------------------
  |  Branch (7616:21): [True: 91.7k, False: 115]
  ------------------
 7617|    420|                case JANET_FUNCTION: {
  ------------------
  |  Branch (7617:17): [True: 420, False: 91.4k]
  ------------------
 7618|    420|                    JanetFunction *f = janet_unwrap_function(fun.constant);
  ------------------
  |  |  868|    420|#define janet_unwrap_function(x) ((JanetFunction *)janet_nanbox_to_pointer(x))
  ------------------
 7619|    420|                    int32_t min = f->def->min_arity;
 7620|    420|                    int32_t max = f->def->max_arity;
 7621|    420|                    int structarg = f->def->flags & JANET_FUNCDEF_FLAG_STRUCTARG;
  ------------------
  |  | 1105|    420|#define JANET_FUNCDEF_FLAG_STRUCTARG 0x1000000
  ------------------
 7622|    420|                    int namedarg = f->def->flags & JANET_FUNCDEF_FLAG_NAMEDARGS;
  ------------------
  |  | 1107|    420|#define JANET_FUNCDEF_FLAG_NAMEDARGS 0x4000000
  ------------------
 7623|    420|                    if (min_arity < 0) {
  ------------------
  |  Branch (7623:25): [True: 20, False: 400]
  ------------------
 7624|       |                        /* Call has splices */
 7625|     20|                        min_arity = -1 - min_arity;
 7626|     20|                        if (min_arity > max && max >= 0) {
  ------------------
  |  Branch (7626:29): [True: 5, False: 15]
  |  Branch (7626:48): [True: 5, False: 0]
  ------------------
 7627|      5|                            const uint8_t *es = janet_formatc(
 7628|      5|                                                    "%v expects at most %d argument%s, got at least %d",
 7629|      5|                                                    fun.constant, max, max == 1 ? "" : "s", min_arity);
  ------------------
  |  Branch (7629:72): [True: 0, False: 5]
  ------------------
 7630|      5|                            janetc_error(c, es);
 7631|      5|                        }
 7632|    400|                    } else {
 7633|       |                        /* Call has no splices */
 7634|    400|                        if (min_arity > max && max >= 0) {
  ------------------
  |  Branch (7634:29): [True: 135, False: 265]
  |  Branch (7634:48): [True: 135, False: 0]
  ------------------
 7635|    135|                            const uint8_t *es = janet_formatc(
 7636|    135|                                                    "%v expects at most %d argument%s, got %d",
 7637|    135|                                                    fun.constant, max, max == 1 ? "" : "s", min_arity);
  ------------------
  |  Branch (7637:72): [True: 56, False: 79]
  ------------------
 7638|    135|                            janetc_error(c, es);
 7639|    135|                        }
 7640|    400|                        if (min_arity < min) {
  ------------------
  |  Branch (7640:29): [True: 265, False: 135]
  ------------------
 7641|    265|                            const uint8_t *es = janet_formatc(
 7642|    265|                                                    "%v expects at least %d argument%s, got %d",
 7643|    265|                                                    fun.constant, min, min == 1 ? "" : "s", min_arity);
  ------------------
  |  Branch (7643:72): [True: 0, False: 265]
  ------------------
 7644|    265|                            janetc_error(c, es);
 7645|    265|                        }
 7646|    400|                        if (structarg && (min_arity > f->def->arity) && ((min_arity - f->def->arity) & 1)) {
  ------------------
  |  Branch (7646:29): [True: 0, False: 400]
  |  Branch (7646:42): [True: 0, False: 0]
  |  Branch (7646:73): [True: 0, False: 0]
  ------------------
 7647|       |                            /* If we have an odd number of variadic arguments to a `&keys` function, that is almost certainly wrong. */
 7648|      0|                            if (namedarg) {
  ------------------
  |  Branch (7648:33): [True: 0, False: 0]
  ------------------
 7649|      0|                                janetc_lintf(c, JANET_C_LINT_NORMAL,
 7650|      0|                                             "odd number of named arguments to `&named` function %v", fun.constant);
 7651|      0|                            } else {
 7652|      0|                                janetc_lintf(c, JANET_C_LINT_NORMAL,
 7653|      0|                                             "odd number of named arguments to `&keys` function %v", fun.constant);
 7654|      0|                            }
 7655|      0|                        }
 7656|    400|                        if (namedarg && f->def->named_args_count > 0) {
  ------------------
  |  Branch (7656:29): [True: 0, False: 400]
  |  Branch (7656:41): [True: 0, False: 0]
  ------------------
 7657|       |                            /* For each argument passed in, check if it is one of the used named arguments
 7658|       |                             * by checking the list defined in the function def. If not, raise a normal compiler
 7659|       |                             * lint. We can also do a strict lint for _missing_ named arguments, although in many
 7660|       |                             * cases those are assumed to have some kind of default, or we have dynamic keys. */
 7661|      0|                            int32_t first_arg_key_index = f->def->arity + 1;
 7662|      0|                            for (int32_t i = first_arg_key_index; i < janet_tuple_length(form); i += 2) {
  ------------------
  |  | 1802|      0|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|      0|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (7662:67): [True: 0, False: 0]
  ------------------
 7663|      0|                                Janet argkey = form[i];
 7664|       |                                /* Assumption: The first N constants of a function are its named argument keys. This
 7665|       |                                 * may change if the compiler changes, but is true for all Janet generated functions. */
 7666|      0|                                int found = 0;
 7667|      0|                                if (janet_checktype(argkey, JANET_KEYWORD)) {
  ------------------
  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  ------------------
  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7668|      0|                                    for (int32_t j = 0; j < f->def->named_args_count && j < f->def->constants_length; j++) {
  ------------------
  |  Branch (7668:57): [True: 0, False: 0]
  |  Branch (7668:89): [True: 0, False: 0]
  ------------------
 7669|      0|                                        if (janet_equals(argkey, f->def->constants[j])) {
  ------------------
  |  Branch (7669:45): [True: 0, False: 0]
  ------------------
 7670|      0|                                            found = 1;
 7671|      0|                                            break;
 7672|      0|                                        }
 7673|      0|                                    }
 7674|      0|                                } else if (janet_checktype(argkey, JANET_TUPLE)) {
  ------------------
  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  ------------------
  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7675|       |                                    /* Possible lint : too dynamic, be dumber
 7676|       |                                     * (defn f [&named x] [x])
 7677|       |                                     * (f (if (coin-flip) :x :w) 10)
 7678|       |                                     * A tuple could be a function call the evaluates to a valid key */
 7679|      0|                                    found = 1;
 7680|      0|                                }
 7681|      0|                                if (!found) {
  ------------------
  |  Branch (7681:37): [True: 0, False: 0]
  ------------------
 7682|      0|                                    janetc_lintf(c, JANET_C_LINT_NORMAL,
 7683|      0|                                                 "unused named argument %v to function %v", argkey, fun.constant);
 7684|      0|                                }
 7685|      0|                            }
 7686|      0|                        }
 7687|    400|                    }
 7688|    420|                }
 7689|    420|                break;
 7690|  86.4k|                case JANET_CFUNCTION:
  ------------------
  |  Branch (7690:17): [True: 86.4k, False: 5.38k]
  ------------------
 7691|  86.4k|                case JANET_ABSTRACT:
  ------------------
  |  Branch (7691:17): [True: 0, False: 91.8k]
  ------------------
 7692|  90.7k|                case JANET_NIL:
  ------------------
  |  Branch (7692:17): [True: 4.32k, False: 87.5k]
  ------------------
 7693|  90.7k|                    break;
 7694|    145|                case JANET_KEYWORD:
  ------------------
  |  Branch (7694:17): [True: 145, False: 91.6k]
  ------------------
 7695|    145|                    if (min_arity == 0) {
  ------------------
  |  Branch (7695:25): [True: 0, False: 145]
  ------------------
 7696|      0|                        const uint8_t *es = janet_formatc("%v expects at least 1 argument, got 0",
 7697|      0|                                                          fun.constant);
 7698|      0|                        janetc_error(c, es);
 7699|      0|                    }
 7700|    145|                    break;
 7701|    490|                default:
  ------------------
  |  Branch (7701:17): [True: 490, False: 91.3k]
  ------------------
 7702|    490|                    if (min_arity > 1 || min_arity == 0) {
  ------------------
  |  Branch (7702:25): [True: 108, False: 382]
  |  Branch (7702:42): [True: 14, False: 368]
  ------------------
 7703|    122|                        const uint8_t *es = janet_formatc("%v expects 1 argument, got %d",
 7704|    122|                                                          fun.constant, min_arity);
 7705|    122|                        janetc_error(c, es);
 7706|    122|                    }
 7707|    490|                    if (min_arity < -2) {
  ------------------
  |  Branch (7707:25): [True: 150, False: 340]
  ------------------
 7708|    150|                        const uint8_t *es = janet_formatc("%v expects 1 argument, got at least %d",
 7709|    150|                                                          fun.constant, -1 - min_arity);
 7710|    150|                        janetc_error(c, es);
 7711|    150|                    }
 7712|    490|                    break;
 7713|  91.8k|            }
 7714|  91.8k|        }
 7715|       |
 7716|   124k|        if ((opts.flags & JANET_FOPTS_TAIL) &&
  ------------------
  |  | 1147|   124k|#define JANET_FOPTS_TAIL 0x10000
  ------------------
  |  Branch (7716:13): [True: 6.04k, False: 118k]
  ------------------
 7717|       |                /* Prevent top level tail calls for better errors */
 7718|  6.04k|                !(c->scope->flags & JANET_SCOPE_TOP)) {
  ------------------
  |  | 1060|  6.04k|#define JANET_SCOPE_TOP 4
  ------------------
  |  Branch (7718:17): [True: 1.00k, False: 5.04k]
  ------------------
 7719|  1.00k|            janetc_emit_s(c, JOP_TAILCALL, fun, 0);
 7720|  1.00k|            retslot = janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|  1.00k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  1.00k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.00k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.00k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7721|  1.00k|            retslot.flags = JANET_SLOT_RETURNED;
  ------------------
  |  | 1042|  1.00k|#define JANET_SLOT_RETURNED 0x100000
  ------------------
 7722|   123k|        } else {
 7723|   123k|            retslot = janetc_gettarget(opts);
 7724|   123k|            janetc_emit_ss(c, JOP_CALL, retslot, fun, 1);
 7725|   123k|        }
 7726|   124k|    }
 7727|   341k|    janetc_freeslots(c, slots);
 7728|   341k|    return retslot;
 7729|   341k|}
janet.c:has_spliced:
 7472|   309k|static int has_spliced(JanetSlot *slots) {
 7473|   309k|    int32_t i;
 7474|  1.50M|    for (i = 0; i < janet_v_count(slots); i++) {
  ------------------
  |  |  759|  1.50M|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  1.50M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.50M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 1.50M, False: 845]
  |  |  ------------------
  ------------------
  |  Branch (7474:17): [True: 1.19M, False: 308k]
  ------------------
 7475|  1.19M|        if (slots[i].flags & JANET_SLOT_SPLICED)
  ------------------
  |  | 1046|  1.19M|#define JANET_SLOT_SPLICED 0x1000000
  ------------------
  |  Branch (7475:13): [True: 170, False: 1.19M]
  ------------------
 7476|    170|            return 1;
 7477|  1.19M|    }
 7478|   308k|    return 0;
 7479|   309k|}
janet.c:function_can_inline:
 7509|    400|static int function_can_inline(JanetFopts opts, JanetFunction *func, JanetSlot *slots) {
 7510|    400|    JanetFuncDef *def = func->def;
 7511|       |    /* TODO - hoist this check to a flag on the func def */
 7512|    400|    if (opts.compiler->optimize < 2) return 0;
  ------------------
  |  Branch (7512:9): [True: 400, False: 0]
  ------------------
 7513|      0|    if (def->environments_length) return 0;
  ------------------
  |  Branch (7513:9): [True: 0, False: 0]
  ------------------
 7514|      0|    if (def->defs_length) return 0;
  ------------------
  |  Branch (7514:9): [True: 0, False: 0]
  ------------------
 7515|      0|    if (def->slotcount > 32) return 0;
  ------------------
  |  Branch (7515:9): [True: 0, False: 0]
  ------------------
 7516|      0|    if (def->bytecode_length > 40) return 0;
  ------------------
  |  Branch (7516:9): [True: 0, False: 0]
  ------------------
 7517|      0|    if (def->flags & (JANET_FUNCDEF_FLAG_NAMEDARGS | JANET_FUNCDEF_FLAG_STRUCTARG | JANET_FUNCDEF_FLAG_VARARG)) return 0;
  ------------------
  |  | 1107|      0|#define JANET_FUNCDEF_FLAG_NAMEDARGS 0x4000000
  ------------------
                  if (def->flags & (JANET_FUNCDEF_FLAG_NAMEDARGS | JANET_FUNCDEF_FLAG_STRUCTARG | JANET_FUNCDEF_FLAG_VARARG)) return 0;
  ------------------
  |  | 1105|      0|#define JANET_FUNCDEF_FLAG_STRUCTARG 0x1000000
  ------------------
                  if (def->flags & (JANET_FUNCDEF_FLAG_NAMEDARGS | JANET_FUNCDEF_FLAG_STRUCTARG | JANET_FUNCDEF_FLAG_VARARG)) return 0;
  ------------------
  |  | 1097|      0|#define JANET_FUNCDEF_FLAG_VARARG 0x10000
  ------------------
  |  Branch (7517:9): [True: 0, False: 0]
  ------------------
 7518|      0|    if (janet_v_count(slots) != def->min_arity) return 0; /* TODO - optional arguments */
  ------------------
  |  |  759|      0|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (7518:9): [True: 0, False: 0]
  ------------------
 7519|      0|    if (janet_v_count(slots) != def->max_arity) return 0;
  ------------------
  |  |  759|      0|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (7519:9): [True: 0, False: 0]
  ------------------
 7520|       |    /* Check for JOP_LOAD_SELF */
 7521|      0|    for (int32_t i = 0; i < def->bytecode_length; i++) {
  ------------------
  |  Branch (7521:25): [True: 0, False: 0]
  ------------------
 7522|      0|        if ((def->bytecode[i] & 0x7F) == JOP_LOAD_SELF) return 0;
  ------------------
  |  Branch (7522:13): [True: 0, False: 0]
  ------------------
 7523|      0|    }
 7524|      0|    return 1;
 7525|      0|}
janet.c:janetc_array:
 7771|      1|static JanetSlot janetc_array(JanetFopts opts, Janet x) {
 7772|      1|    JanetCompiler *c = opts.compiler;
 7773|      1|    JanetArray *a = janet_unwrap_array(x);
  ------------------
  |  |  860|      1|#define janet_unwrap_array(x) ((JanetArray *)janet_nanbox_to_pointer(x))
  ------------------
 7774|      1|    return janetc_maker(opts,
 7775|      1|                        janetc_toslots(c, a->data, a->count),
 7776|      1|                        JOP_MAKE_ARRAY);
 7777|      1|}
janet.c:janetc_tablector:
 7787|     35|static JanetSlot janetc_tablector(JanetFopts opts, Janet x, int op) {
 7788|     35|    JanetCompiler *c = opts.compiler;
 7789|     35|    return janetc_maker(opts,
 7790|     35|                        janetc_toslotskv(c, x),
 7791|     35|                        op);
 7792|     35|}
janet.c:janetc_bufferctor:
 7794|     28|static JanetSlot janetc_bufferctor(JanetFopts opts, Janet x) {
 7795|     28|    JanetCompiler *c = opts.compiler;
 7796|     28|    JanetBuffer *b = janet_unwrap_buffer(x);
  ------------------
  |  |  862|     28|#define janet_unwrap_buffer(x) ((JanetBuffer *)janet_nanbox_to_pointer(x))
  ------------------
 7797|     28|    Janet onearg = janet_stringv(b->data, b->count);
  ------------------
  |  | 1827|     28|#define janet_stringv(str, len) janet_wrap_string(janet_string((str), (len)))
  |  |  ------------------
  |  |  |  |  848|     28|#define janet_wrap_string(s) janet_nanbox_wrap_c((s), JANET_STRING)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|     28|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|     28|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|     28|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7798|     28|    return janetc_maker(opts,
 7799|     28|                        janetc_toslots(c, &onearg, 1),
 7800|     28|                        JOP_MAKE_BUFFER);
 7801|     28|}
janet.c:janetc_init:
 8137|  30.0k|static void janetc_init(JanetCompiler *c, JanetTable *env, const uint8_t *where, JanetArray *lints) {
 8138|  30.0k|    c->scope = NULL;
 8139|  30.0k|    c->buffer = NULL;
 8140|  30.0k|    c->mapbuffer = NULL;
 8141|  30.0k|    c->recursion_guard = JANET_RECURSION_GUARD;
  ------------------
  |  |  296|  30.0k|#define JANET_RECURSION_GUARD 1024
  ------------------
 8142|  30.0k|    c->env = env;
 8143|  30.0k|    c->source = where;
 8144|  30.0k|    c->current_mapping.line = -1;
 8145|  30.0k|    c->current_mapping.column = -1;
 8146|  30.0k|    c->lints = lints;
 8147|  30.0k|    c->is_redef = janet_truthy(janet_table_get_keyword(c->env, "redef"));
  ------------------
  |  |  818|  30.0k|    (!janet_checktype((x), JANET_NIL) && \
  |  |  ------------------
  |  |  |  |  806|  60.0k|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 30.0k]
  |  |  |  |  ------------------
  |  |  |  |  807|  60.0k|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|  60.0k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|  30.0k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|  30.0k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  30.0k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  30.0k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (818:6): [True: 0, False: 30.0k]
  |  |  ------------------
  |  |  819|  30.0k|     (!janet_checktype((x), JANET_BOOLEAN) || ((x).u64 & 0x1)))
  |  |  ------------------
  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (819:7): [True: 0, False: 0]
  |  |  |  Branch (819:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 8148|  30.0k|    c->optimize = to_optimization_level(janet_table_get_keyword(c->env, "optimize"));
 8149|       |    /* Init result */
 8150|  30.0k|    c->result.error = NULL;
 8151|  30.0k|    c->result.status = JANET_COMPILE_OK;
 8152|  30.0k|    c->result.funcdef = NULL;
 8153|       |    c->result.macrofiber = NULL;
 8154|  30.0k|    c->result.error_mapping.line = -1;
 8155|  30.0k|    c->result.error_mapping.column = -1;
 8156|  30.0k|}
janet.c:to_optimization_level:
 8130|  30.0k|static int32_t to_optimization_level(Janet x) {
 8131|  30.0k|    if (!janet_checkint(x)) return 0;
  ------------------
  |  Branch (8131:9): [True: 30.0k, False: 0]
  ------------------
 8132|      0|    int32_t int_level = janet_unwrap_integer(x);
  ------------------
  |  |  966|      0|#define janet_unwrap_integer(x) ((int32_t) janet_unwrap_number(x))
  |  |  ------------------
  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  ------------------
 8133|      0|    return int_level;
 8134|  30.0k|}
janet.c:janetc_deinit:
 8159|  30.0k|static void janetc_deinit(JanetCompiler *c) {
 8160|  30.0k|    janet_v_free(c->buffer);
  ------------------
  |  |  756|  30.0k|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|  21.8k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 21.8k, False: 8.14k]
  |  |  ------------------
  ------------------
 8161|  30.0k|    janet_v_free(c->mapbuffer);
  ------------------
  |  |  756|  30.0k|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|  21.8k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 21.8k, False: 8.14k]
  |  |  ------------------
  ------------------
 8162|       |    c->env = NULL;
 8163|  30.0k|}
janet.c:janet_load_libs:
 9373|    267|static void janet_load_libs(JanetTable *env) {
 9374|    267|    JanetRegExt corelib_cfuns[] = {
 9375|    267|        JANET_CORE_REG("native", janet_core_native),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9376|    267|        JANET_CORE_REG("describe", janet_core_describe),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9377|    267|        JANET_CORE_REG("string", janet_core_string),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9378|    267|        JANET_CORE_REG("symbol", janet_core_symbol),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9379|    267|        JANET_CORE_REG("keyword", janet_core_keyword),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9380|    267|        JANET_CORE_REG("buffer", janet_core_buffer),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9381|    267|        JANET_CORE_REG("abstract?", janet_core_is_abstract),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9382|    267|        JANET_CORE_REG("table", janet_core_table),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9383|    267|        JANET_CORE_REG("array", janet_core_array),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9384|    267|        JANET_CORE_REG("scan-number", janet_core_scannumber),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9385|    267|        JANET_CORE_REG("tuple", janet_core_tuple),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9386|    267|        JANET_CORE_REG("struct", janet_core_struct),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9387|    267|        JANET_CORE_REG("gensym", janet_core_gensym),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9388|    267|        JANET_CORE_REG("gccollect", janet_core_gccollect),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9389|    267|        JANET_CORE_REG("gcsetinterval", janet_core_gcsetinterval),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9390|    267|        JANET_CORE_REG("gcinterval", janet_core_gcinterval),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9391|    267|        JANET_CORE_REG("type", janet_core_type),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9392|    267|        JANET_CORE_REG("hash", janet_core_hash),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9393|    267|        JANET_CORE_REG("getline", janet_core_getline),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9394|    267|        JANET_CORE_REG("dyn", janet_core_dyn),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9395|    267|        JANET_CORE_REG("setdyn", janet_core_setdyn),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9396|    267|        JANET_CORE_REG("trace", janet_core_trace),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9397|    267|        JANET_CORE_REG("untrace", janet_core_untrace),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9398|    267|        JANET_CORE_REG("module/expand-path", janet_core_expand_path),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9399|    267|        JANET_CORE_REG("int?", janet_core_check_int),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9400|    267|        JANET_CORE_REG("nat?", janet_core_check_nat),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9401|    267|        JANET_CORE_REG("bytes?", janet_core_is_bytes),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9402|    267|        JANET_CORE_REG("indexed?", janet_core_is_indexed),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9403|    267|        JANET_CORE_REG("dictionary?", janet_core_is_dictionary),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9404|    267|        JANET_CORE_REG("lengthable?", janet_core_is_lengthable),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9405|    267|        JANET_CORE_REG("slice", janet_core_slice),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9406|    267|        JANET_CORE_REG("range", janet_core_range),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9407|    267|        JANET_CORE_REG("signal", janet_core_signal),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9408|    267|        JANET_CORE_REG("memcmp", janet_core_memcmp),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9409|    267|        JANET_CORE_REG("getproto", janet_core_getproto),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9410|    267|        JANET_CORE_REG("sandbox", janet_core_sandbox),
  ------------------
  |  |  518|    267|#define JANET_CORE_REG JANET_REG_S
  |  |  ------------------
  |  |  |  | 2120|    267|#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
  |  |  ------------------
  ------------------
 9411|    267|        JANET_REG_END
  ------------------
  |  | 2110|    267|#define JANET_REG_END {NULL, NULL, NULL, NULL, 0}
  ------------------
 9412|    267|    };
 9413|       |    janet_core_cfuns_ext(env, NULL, corelib_cfuns);
 9414|    267|    janet_lib_io(env);
 9415|    267|    janet_lib_math(env);
 9416|    267|    janet_lib_array(env);
 9417|    267|    janet_lib_tuple(env);
 9418|    267|    janet_lib_buffer(env);
 9419|    267|    janet_lib_table(env);
 9420|    267|    janet_lib_struct(env);
 9421|    267|    janet_lib_fiber(env);
 9422|    267|    janet_lib_os(env);
 9423|    267|    janet_lib_parse(env);
 9424|    267|    janet_lib_compile(env);
 9425|    267|    janet_lib_debug(env);
 9426|    267|    janet_lib_string(env);
 9427|    267|    janet_lib_marsh(env);
 9428|    267|#ifdef JANET_PEG
 9429|    267|    janet_lib_peg(env);
 9430|    267|#endif
 9431|    267|#ifdef JANET_ASSEMBLER
 9432|    267|    janet_lib_asm(env);
 9433|    267|#endif
 9434|    267|#ifdef JANET_INT_TYPES
 9435|    267|    janet_lib_inttypes(env);
 9436|    267|#endif
 9437|    267|#ifdef JANET_EV
 9438|    267|    janet_lib_ev(env);
 9439|    267|#ifdef JANET_FILEWATCH
 9440|    267|    janet_lib_filewatch(env);
 9441|    267|#endif
 9442|    267|#endif
 9443|    267|#ifdef JANET_NET
 9444|    267|    janet_lib_net(env);
 9445|    267|#endif
 9446|    267|#ifdef JANET_FFI
 9447|    267|    janet_lib_ffi(env);
 9448|    267|#endif
 9449|    267|}
janet.c:janetc_movenear:
10315|  8.24M|                            JanetSlot src) {
10316|  8.24M|    janet_assert(dest <= 255, "dest slot index must be <= 255");
  ------------------
  |  |  389|  8.24M|#define janet_assert(c, m) do { \
  |  |  390|  8.24M|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 8.24M]
  |  |  ------------------
  |  |  391|  8.24M|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 8.24M]
  |  |  ------------------
  ------------------
10317|  8.24M|    if (src.flags & (JANET_SLOT_CONSTANT | JANET_SLOT_REF)) {
  ------------------
  |  | 1038|  8.24M|#define JANET_SLOT_CONSTANT 0x10000
  ------------------
                  if (src.flags & (JANET_SLOT_CONSTANT | JANET_SLOT_REF)) {
  ------------------
  |  | 1041|  8.24M|#define JANET_SLOT_REF 0x80000
  ------------------
  |  Branch (10317:9): [True: 3.54M, False: 4.70M]
  ------------------
10318|  3.54M|        janetc_loadconst(c, src.constant, dest);
10319|       |        /* If we also are a reference, deref the one element array */
10320|  3.54M|        if (src.flags & JANET_SLOT_REF) {
  ------------------
  |  | 1041|  3.54M|#define JANET_SLOT_REF 0x80000
  ------------------
  |  Branch (10320:13): [True: 31.2k, False: 3.50M]
  ------------------
10321|  31.2k|            janetc_emit(c,
10322|  31.2k|                        ((uint32_t) dest << 16) |
10323|  31.2k|                        ((uint32_t) dest << 8) |
10324|  31.2k|                        JOP_GET_INDEX);
10325|  31.2k|        }
10326|  4.70M|    } else if (src.envindex >= 0) {
  ------------------
  |  Branch (10326:16): [True: 9.52k, False: 4.69M]
  ------------------
10327|  9.52k|        janetc_emit(c,
10328|  9.52k|                    ((uint32_t)(src.index) << 24) |
10329|  9.52k|                    ((uint32_t)(src.envindex) << 16) |
10330|  9.52k|                    ((uint32_t)(dest) << 8) |
10331|  9.52k|                    JOP_LOAD_UPVALUE);
10332|  4.69M|    } else if (src.index != dest) {
  ------------------
  |  Branch (10332:16): [True: 4.69M, False: 0]
  ------------------
10333|  4.69M|        janet_assert(src.index >= 0, "bad slot");
  ------------------
  |  |  389|  4.69M|#define janet_assert(c, m) do { \
  |  |  390|  4.69M|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 4.69M]
  |  |  ------------------
  |  |  391|  4.69M|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 4.69M]
  |  |  ------------------
  ------------------
10334|  4.69M|        janetc_emit(c,
10335|  4.69M|                    ((uint32_t)(src.index) << 16) |
10336|  4.69M|                    ((uint32_t)(dest) << 8) |
10337|  4.69M|                    JOP_MOVE_NEAR);
10338|  4.69M|    }
10339|  8.24M|}
janet.c:janetc_loadconst:
10277|  3.54M|static void janetc_loadconst(JanetCompiler *c, Janet k, int32_t reg) {
10278|  3.54M|    switch (janet_type(k)) {
  ------------------
  |  |  795|  3.54M|    (isnan((x).number) \
  |  |  796|  3.54M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  3.54M|        : JANET_NUMBER)
  ------------------
  |  Branch (10278:13): [True: 3.02M, False: 520k]
  ------------------
10279|   757k|        case JANET_NIL:
  ------------------
  |  Branch (10279:9): [True: 757k, False: 2.78M]
  ------------------
10280|   757k|            janetc_emit(c, ((uint32_t) reg << 8) | JOP_LOAD_NIL);
10281|   757k|            break;
10282|    413|        case JANET_BOOLEAN:
  ------------------
  |  Branch (10282:9): [True: 413, False: 3.53M]
  ------------------
10283|    413|            janetc_emit(c, ((uint32_t) reg << 8) |
10284|    413|                        (janet_unwrap_boolean(k) ? JOP_LOAD_TRUE : JOP_LOAD_FALSE));
  ------------------
  |  |  838|    413|#define janet_unwrap_boolean(x) ((x).u64 & 0x1)
  |  |  ------------------
  |  |  |  Branch (838:33): [True: 396, False: 17]
  |  |  ------------------
  ------------------
10285|    413|            break;
10286|   520k|        case JANET_NUMBER: {
  ------------------
  |  Branch (10286:9): [True: 520k, False: 3.02M]
  ------------------
10287|   520k|            double dval = janet_unwrap_number(k);
  ------------------
  |  |  839|   520k|#define janet_unwrap_number(x) ((x).number)
  ------------------
10288|   520k|            if (dval < INT16_MIN || dval > INT16_MAX)
  ------------------
  |  Branch (10288:17): [True: 694, False: 519k]
  |  Branch (10288:37): [True: 2.83k, False: 516k]
  ------------------
10289|  3.53k|                goto do_constant;
10290|   516k|            int32_t i = (int32_t) dval;
10291|   516k|            if (dval != i)
  ------------------
  |  Branch (10291:17): [True: 621, False: 516k]
  ------------------
10292|    621|                goto do_constant;
10293|   516k|            uint32_t iu = (uint32_t)i;
10294|   516k|            janetc_emit(c,
10295|   516k|                        ((uint32_t) iu << 16) |
10296|   516k|                        ((uint32_t) reg << 8) |
10297|   516k|                        JOP_LOAD_INTEGER);
10298|   516k|            break;
10299|   516k|        }
10300|  2.26M|        default:
  ------------------
  |  Branch (10300:9): [True: 2.26M, False: 1.27M]
  ------------------
10301|  2.26M|        do_constant: {
10302|  2.26M|                int32_t cindex = janetc_const(c, k);
10303|  2.26M|                janetc_emit(c,
10304|  2.26M|                            ((uint32_t) cindex << 16) |
10305|  2.26M|                            ((uint32_t) reg << 8) |
10306|  2.26M|                            JOP_LOAD_CONSTANT);
10307|  2.26M|                break;
10308|  2.26M|            }
10309|  3.54M|    }
10310|  3.54M|}
janet.c:janetc_const:
10252|  2.26M|static int32_t janetc_const(JanetCompiler *c, Janet x) {
10253|  2.26M|    JanetScope *scope = c->scope;
10254|  2.26M|    int32_t i, len;
10255|       |    /* Get the topmost function scope */
10256|  2.74M|    while (scope) {
  ------------------
  |  Branch (10256:12): [True: 2.74M, False: 0]
  ------------------
10257|  2.74M|        if (scope->flags & JANET_SCOPE_FUNCTION)
  ------------------
  |  | 1058|  2.74M|#define JANET_SCOPE_FUNCTION 1
  ------------------
  |  Branch (10257:13): [True: 2.26M, False: 475k]
  ------------------
10258|  2.26M|            break;
10259|   475k|        scope = scope->parent;
10260|   475k|    }
10261|       |    /* Check if already added */
10262|  2.26M|    len = janet_v_count(scope->consts);
  ------------------
  |  |  759|  2.26M|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  2.18M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  2.18M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 2.18M, False: 85.5k]
  |  |  ------------------
  ------------------
10263|  7.58M|    for (i = 0; i < len; i++) {
  ------------------
  |  Branch (10263:17): [True: 7.49M, False: 92.8k]
  ------------------
10264|  7.49M|        if (janet_equals(x, scope->consts[i]))
  ------------------
  |  Branch (10264:13): [True: 2.17M, False: 5.31M]
  ------------------
10265|  2.17M|            return i;
10266|  7.49M|    }
10267|       |    /* Ensure not too many constants. */
10268|  92.8k|    if (len >= 0xFFFF) {
  ------------------
  |  Branch (10268:9): [True: 0, False: 92.8k]
  ------------------
10269|      0|        janetc_cerror(c, "too many constants");
10270|      0|        return 0;
10271|      0|    }
10272|  92.8k|    janet_v_push(scope->consts, x);
  ------------------
  |  |  757|  92.8k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  92.8k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  92.8k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  7.29k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  7.29k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  7.29k|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  7.29k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 85.5k, False: 7.29k]
  |  |  |  |  |  |  |  Branch (768:50): [True: 3.84k, False: 3.44k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|  89.4k|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  92.8k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  92.8k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10273|  92.8k|    return len;
10274|  92.8k|}
janet.c:janetc_moveback:
10344|  5.05M|                            int32_t src) {
10345|  5.05M|    if (dest.flags & JANET_SLOT_REF) {
  ------------------
  |  | 1041|  5.05M|#define JANET_SLOT_REF 0x80000
  ------------------
  |  Branch (10345:9): [True: 0, False: 5.05M]
  ------------------
10346|      0|        int32_t refreg = janetc_regalloc_temp(&c->scope->ra, JANETC_REGTEMP_5);
10347|      0|        janetc_loadconst(c, dest.constant, refreg);
10348|      0|        janetc_emit(c,
10349|      0|                    ((uint32_t) src << 16) |
10350|      0|                    ((uint32_t) refreg << 8) |
10351|      0|                    JOP_PUT_INDEX);
10352|      0|        janetc_regalloc_freetemp(&c->scope->ra, refreg, JANETC_REGTEMP_5);
10353|  5.05M|    } else if (dest.envindex >= 0) {
  ------------------
  |  Branch (10353:16): [True: 763, False: 5.05M]
  ------------------
10354|       |        /* Convert src to near reg */
10355|    763|        if (src > 255) {
  ------------------
  |  Branch (10355:13): [True: 0, False: 763]
  ------------------
10356|      0|            int32_t newsrc = JANETC_REGTEMP_5 + 0xF0;
10357|      0|            janetc_emit(c, JOP_MOVE_NEAR | ((uint32_t)(src) << 16) | ((uint32_t) newsrc << 8));
10358|      0|            src = newsrc;
10359|      0|        }
10360|    763|        janetc_emit(c,
10361|    763|                    ((uint32_t)(dest.index) << 24) |
10362|    763|                    ((uint32_t)(dest.envindex) << 16) |
10363|    763|                    ((uint32_t)(src) << 8) |
10364|    763|                    JOP_SET_UPVALUE);
10365|  5.05M|    } else if (dest.index != src) {
  ------------------
  |  Branch (10365:16): [True: 3.00M, False: 2.04M]
  ------------------
10366|  3.00M|        janet_assert(dest.index >= 0, "bad slot");
  ------------------
  |  |  389|  3.00M|#define janet_assert(c, m) do { \
  |  |  390|  3.00M|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 3.00M]
  |  |  ------------------
  |  |  391|  3.00M|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 3.00M]
  |  |  ------------------
  ------------------
10367|       |        /* Convert src to near reg */
10368|  3.00M|        if (src > 255) {
  ------------------
  |  Branch (10368:13): [True: 0, False: 3.00M]
  ------------------
10369|      0|            int32_t newsrc = JANETC_REGTEMP_5 + 0xF0;
10370|      0|            janetc_emit(c, JOP_MOVE_NEAR | ((uint32_t)(src) << 16) | ((uint32_t)newsrc << 8));
10371|      0|            src = newsrc;
10372|      0|        }
10373|  3.00M|        janetc_emit(c,
10374|  3.00M|                    ((uint32_t)(dest.index) << 16) |
10375|  3.00M|                    ((uint32_t)(src) << 8) |
10376|  3.00M|                    JOP_MOVE_FAR);
10377|  3.00M|    }
10378|  5.05M|}
janet.c:janetc_regfar:
10391|  4.13M|static int32_t janetc_regfar(JanetCompiler *c, JanetSlot s, JanetcRegisterTemp tag) {
10392|       |    /* check if already near register */
10393|  4.13M|    if (s.envindex < 0 && s.index >= 0) {
  ------------------
  |  Branch (10393:9): [True: 4.13M, False: 5.12k]
  |  Branch (10393:27): [True: 3.22M, False: 906k]
  ------------------
10394|  3.22M|        return s.index;
10395|  3.22M|    }
10396|   912k|    int32_t reg;
10397|   912k|    int32_t nearreg = janetc_regalloc_temp(&c->scope->ra, tag);
10398|   912k|    janetc_movenear(c, nearreg, s);
10399|   912k|    if (nearreg >= 0xF0) {
  ------------------
  |  Branch (10399:9): [True: 776k, False: 135k]
  ------------------
10400|   776k|        reg = janetc_allocfar(c);
10401|   776k|        janetc_emit(c, JOP_MOVE_FAR | ((uint32_t) nearreg << 8) | ((uint32_t) reg << 16));
10402|   776k|        janetc_regalloc_freetemp(&c->scope->ra, nearreg, tag);
10403|   776k|    } else {
10404|   135k|        reg = nearreg;
10405|   135k|        janetc_regalloc_freetemp(&c->scope->ra, nearreg, tag);
10406|   135k|        janetc_regalloc_touch(&c->scope->ra, reg);
10407|   135k|    }
10408|   912k|    return reg;
10409|  4.13M|}
janet.c:janetc_free_regnear:
10381|  11.0M|static void janetc_free_regnear(JanetCompiler *c, JanetSlot s, int32_t reg, JanetcRegisterTemp tag) {
10382|  11.0M|    if (reg != s.index ||
  ------------------
  |  Branch (10382:9): [True: 7.00M, False: 4.04M]
  ------------------
10383|  4.04M|            s.envindex >= 0 ||
  ------------------
  |  Branch (10383:13): [True: 1.76k, False: 4.03M]
  ------------------
10384|  7.00M|            s.flags & (JANET_SLOT_CONSTANT | JANET_SLOT_REF)) {
  ------------------
  |  | 1038|  4.03M|#define JANET_SLOT_CONSTANT 0x10000
  ------------------
                          s.flags & (JANET_SLOT_CONSTANT | JANET_SLOT_REF)) {
  ------------------
  |  | 1041|  4.03M|#define JANET_SLOT_REF 0x80000
  ------------------
  |  Branch (10384:13): [True: 0, False: 4.03M]
  ------------------
10385|       |        /* We need to free the temporary slot */
10386|  7.00M|        janetc_regalloc_freetemp(&c->scope->ra, reg, tag);
10387|  7.00M|    }
10388|  11.0M|}
janet.c:emit1s:
10467|   217k|static int32_t emit1s(JanetCompiler *c, uint8_t op, JanetSlot s, int32_t rest, int wr) {
10468|   217k|    int32_t reg = janetc_regnear(c, s, JANETC_REGTEMP_0);
10469|   217k|    int32_t label = janet_v_count(c->buffer);
  ------------------
  |  |  759|   217k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|   217k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   217k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 217k, False: 0]
  |  |  ------------------
  ------------------
10470|   217k|    janetc_emit(c, op | ((uint32_t) reg << 8) | ((uint32_t) rest << 16));
10471|   217k|    if (wr)
  ------------------
  |  Branch (10471:9): [True: 211k, False: 5.79k]
  ------------------
10472|   211k|        janetc_moveback(c, s, reg);
10473|   217k|    janetc_free_regnear(c, s, reg, JANETC_REGTEMP_0);
10474|   217k|    return label;
10475|   217k|}
janet.c:janetc_regnear:
10412|  6.90M|static int32_t janetc_regnear(JanetCompiler *c, JanetSlot s, JanetcRegisterTemp tag) {
10413|       |    /* check if already near register */
10414|  6.90M|    if (s.envindex < 0 && s.index >= 0 && s.index <= 0xFF) {
  ------------------
  |  Branch (10414:9): [True: 6.89M, False: 3.81k]
  |  Branch (10414:27): [True: 4.40M, False: 2.49M]
  |  Branch (10414:43): [True: 810k, False: 3.59M]
  ------------------
10415|   810k|        return s.index;
10416|   810k|    }
10417|  6.09M|    int32_t reg = janetc_regalloc_temp(&c->scope->ra, tag);
10418|  6.09M|    janetc_movenear(c, reg, s);
10419|  6.09M|    return reg;
10420|  6.90M|}
janet.c:emit2s:
10508|  1.73M|static int32_t emit2s(JanetCompiler *c, uint8_t op, JanetSlot s1, JanetSlot s2, int32_t rest, int wr) {
10509|  1.73M|    int32_t reg1 = janetc_regnear(c, s1, JANETC_REGTEMP_0);
10510|  1.73M|    int32_t reg2 = janetc_regnear(c, s2, JANETC_REGTEMP_1);
10511|  1.73M|    int32_t label = janet_v_count(c->buffer);
  ------------------
  |  |  759|  1.73M|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  1.73M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.73M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 1.73M, False: 56]
  |  |  ------------------
  ------------------
10512|  1.73M|    janetc_emit(c, op | ((uint32_t) reg1 << 8) | ((uint32_t) reg2 << 16) | ((uint32_t)rest << 24));
10513|  1.73M|    janetc_free_regnear(c, s2, reg2, JANETC_REGTEMP_1);
10514|  1.73M|    if (wr)
  ------------------
  |  Branch (10514:9): [True: 1.73M, False: 205]
  ------------------
10515|  1.73M|        janetc_moveback(c, s1, reg1);
10516|  1.73M|    janetc_free_regnear(c, s1, reg1, JANETC_REGTEMP_0);
10517|  1.73M|    return label;
10518|  1.73M|}
janet.c:janet_q_init:
10684|    267|static void janet_q_init(JanetQueue *q) {
10685|       |    q->data = NULL;
10686|    267|    q->head = 0;
10687|    267|    q->tail = 0;
10688|    267|    q->capacity = 0;
10689|    267|}
janet.c:peek_timeout:
10766|    267|static int peek_timeout(JanetTimeout *out) {
10767|    267|    if (janet_vm.tq_count == 0) return 0;
  ------------------
  |  Branch (10767:9): [True: 267, False: 0]
  ------------------
10768|      0|    *out = janet_vm.tq[0];
10769|      0|    return 1;
10770|    267|}
janet.c:janet_q_deinit:
10691|    267|static void janet_q_deinit(JanetQueue *q) {
10692|    267|    janet_free(q->data);
  ------------------
  |  | 2415|    267|#define janet_free(X) free((X))
  ------------------
10693|    267|}
janet.c:janet_ev_setup_selfpipe:
12253|    267|static void janet_ev_setup_selfpipe(void) {
12254|    267|    if (janet_make_pipe(janet_vm.selfpipe, 1)) {
  ------------------
  |  Branch (12254:9): [True: 0, False: 267]
  ------------------
12255|       |        JANET_EXIT("failed to initialize self pipe in event loop");
  ------------------
  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  380|      0|        __FILE__,\
  |  |  381|      0|        __LINE__,\
  |  |  382|      0|        (m));\
  |  |  383|      0|    abort();\
  |  |  384|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
12256|      0|    }
12257|    267|}
janet.c:janet_ev_cleanup_selfpipe:
12276|    267|static void janet_ev_cleanup_selfpipe(void) {
12277|    267|    close(janet_vm.selfpipe[0]);
12278|    267|    close(janet_vm.selfpipe[1]);
12279|    267|}
janet.c:fiber_reset:
16302|  86.4k|static void fiber_reset(JanetFiber *fiber) {
16303|  86.4k|    fiber->maxstack = JANET_STACK_MAX;
  ------------------
  |  |  307|  86.4k|#define JANET_STACK_MAX 0x7fffffff
  ------------------
16304|  86.4k|    fiber->frame = 0;
16305|  86.4k|    fiber->stackstart = JANET_FRAME_SIZE;
  ------------------
  |  | 1026|  86.4k|#define JANET_FRAME_SIZE 4
  ------------------
16306|  86.4k|    fiber->stacktop = JANET_FRAME_SIZE;
  ------------------
  |  | 1026|  86.4k|#define JANET_FRAME_SIZE 4
  ------------------
16307|  86.4k|    fiber->child = NULL;
16308|  86.4k|    fiber->flags = JANET_FIBER_MASK_YIELD | JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP;
  ------------------
  |  |  814|  86.4k|#define JANET_FIBER_MASK_YIELD 8
  ------------------
                  fiber->flags = JANET_FIBER_MASK_YIELD | JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP;
  ------------------
  |  |  835|  86.4k|#define JANET_FIBER_RESUME_NO_USEVAL 0x2000000
  ------------------
                  fiber->flags = JANET_FIBER_MASK_YIELD | JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP;
  ------------------
  |  |  836|  86.4k|#define JANET_FIBER_RESUME_NO_SKIP   0x4000000
  ------------------
16309|  86.4k|    fiber->env = NULL;
16310|  86.4k|    fiber->last_value = janet_wrap_nil();
  ------------------
  |  |  831|  86.4k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  86.4k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  86.4k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  86.4k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
16311|  86.4k|#ifdef JANET_EV
16312|  86.4k|    fiber->sched_id = 0;
16313|  86.4k|    fiber->ev_callback = NULL;
16314|  86.4k|    fiber->ev_state = NULL;
16315|  86.4k|    fiber->ev_stream = NULL;
16316|  86.4k|    fiber->supervisor_channel = NULL;
16317|  86.4k|#endif
16318|  86.4k|    janet_fiber_set_status(fiber, JANET_STATUS_NEW);
  ------------------
  |  |  849|  86.4k|#define janet_fiber_set_status(f, s) do {\
  |  |  850|  86.4k|    (f)->flags &= ~JANET_FIBER_STATUS_MASK;\
  |  |  ------------------
  |  |  |  |  830|  86.4k|#define JANET_FIBER_STATUS_MASK 0x3F0000
  |  |  ------------------
  |  |  851|  86.4k|    (f)->flags |= (s) << JANET_FIBER_STATUS_OFFSET;\
  |  |  ------------------
  |  |  |  |  832|  86.4k|#define JANET_FIBER_STATUS_OFFSET 16
  |  |  ------------------
  |  |  852|  86.4k|} while (0)
  |  |  ------------------
  |  |  |  Branch (852:10): [Folded, False: 86.4k]
  |  |  ------------------
  ------------------
16319|  86.4k|}
janet.c:fiber_alloc:
16321|  86.4k|static JanetFiber *fiber_alloc(int32_t capacity) {
16322|  86.4k|    Janet *data;
16323|  86.4k|    JanetFiber *fiber = janet_gcalloc(JANET_MEMORY_FIBER, sizeof(JanetFiber));
16324|  86.4k|    if (capacity < 32) {
  ------------------
  |  Branch (16324:9): [True: 0, False: 86.4k]
  ------------------
16325|      0|        capacity = 32;
16326|      0|    }
16327|  86.4k|    fiber->capacity = capacity;
16328|  86.4k|    data = array_allocate(sizeof(Janet), capacity);
16329|  86.4k|    if (NULL == data) {
  ------------------
  |  Branch (16329:9): [True: 0, False: 86.4k]
  ------------------
16330|      0|        JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
16331|      0|    }
16332|  86.4k|    janet_vm.next_collection += sizeof(Janet) * capacity;
16333|  86.4k|    fiber->data = data;
16334|  86.4k|    return fiber;
16335|  86.4k|}
janet.c:janet_fiber_grow:
16400|  4.79k|static void janet_fiber_grow(JanetFiber *fiber, int32_t needed) {
16401|  4.79k|    int32_t cap = needed > (INT32_MAX / 2) ? INT32_MAX : 2 * needed;
  ------------------
  |  Branch (16401:19): [True: 0, False: 4.79k]
  ------------------
16402|  4.79k|    janet_fiber_setcapacity(fiber, cap);
16403|  4.79k|}
janet.c:janet_env_detach:
16525|  17.9M|static void janet_env_detach(JanetFuncEnv *env) {
16526|       |    /* Check for closure environment */
16527|  17.9M|    if (env) {
  ------------------
  |  Branch (16527:9): [True: 1.64M, False: 16.2M]
  ------------------
16528|  1.64M|        janet_env_valid(env);
16529|  1.64M|        int32_t len = env->length; /* Maximum is 256 */
16530|  1.64M|        size_t s = sizeof(Janet) * (size_t) len;
16531|  1.64M|        Janet *vmem = janet_malloc(s);
  ------------------
  |  | 2406|  1.64M|#define janet_malloc(X) malloc((X))
  ------------------
16532|  1.64M|        janet_vm.next_collection += (uint32_t) s;
16533|  1.64M|        if (NULL == vmem) {
  ------------------
  |  Branch (16533:13): [True: 0, False: 1.64M]
  ------------------
16534|      0|            JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
16535|      0|        }
16536|  1.64M|        Janet *values = env->as.fiber->data + env->offset;
16537|  1.64M|        safe_memcpy(vmem, values, s);
16538|  1.64M|        uint32_t *bitset = janet_stack_frame(values)->func->def->closure_bitset;
  ------------------
  |  |  854|  1.64M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  ------------------
  |  |  |  | 1026|  1.64M|#define JANET_FRAME_SIZE 4
  |  |  ------------------
  ------------------
16539|  1.64M|        if (bitset) {
  ------------------
  |  Branch (16539:13): [True: 1.64M, False: 0]
  ------------------
16540|       |            /* Clear unneeded references in closure environment */
16541|  3.29M|            for (int32_t i = 0; i < len; i += 32) {
  ------------------
  |  Branch (16541:33): [True: 1.64M, False: 1.64M]
  ------------------
16542|  1.64M|                uint32_t mask = ~(bitset[i >> 5]);
16543|  1.64M|                int32_t maxj = i + 32 > len ? len : i + 32;
  ------------------
  |  Branch (16543:32): [True: 1.64M, False: 0]
  ------------------
16544|  51.1M|                for (int32_t j = i; j < maxj; j++) {
  ------------------
  |  Branch (16544:37): [True: 49.5M, False: 1.64M]
  ------------------
16545|  49.5M|                    if (mask & 1) vmem[j] = janet_wrap_nil();
  ------------------
  |  |  831|  39.9M|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  39.9M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  39.9M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  39.9M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (16545:25): [True: 39.9M, False: 9.54M]
  ------------------
16546|  49.5M|                    mask >>= 1;
16547|  49.5M|                }
16548|  1.64M|            }
16549|  1.64M|        }
16550|  1.64M|        env->offset = 0;
16551|  1.64M|        env->as.values = vmem;
16552|  1.64M|    }
16553|  17.9M|}
janet.c:janet_deinit_block:
18286|  37.0M|static void janet_deinit_block(JanetGCObject *mem) {
18287|  37.0M|    switch (mem->flags & JANET_MEM_TYPEBITS) {
  ------------------
  |  |  675|  37.0M|#define JANET_MEM_TYPEBITS 0xFF
  ------------------
18288|  16.5M|        default:
  ------------------
  |  Branch (18288:9): [True: 16.5M, False: 20.5M]
  ------------------
18289|  31.3M|        case JANET_MEMORY_FUNCTION:
  ------------------
  |  Branch (18289:9): [True: 14.8M, False: 22.1M]
  ------------------
18290|  31.3M|            break; /* Do nothing for non gc types */
18291|  1.27M|        case JANET_MEMORY_SYMBOL:
  ------------------
  |  Branch (18291:9): [True: 1.27M, False: 35.7M]
  ------------------
18292|  1.27M|            janet_symbol_deinit(((JanetStringHead *) mem)->data);
18293|  1.27M|            break;
18294|  1.44M|        case JANET_MEMORY_ARRAY:
  ------------------
  |  Branch (18294:9): [True: 1.44M, False: 35.6M]
  ------------------
18295|  1.44M|        case JANET_MEMORY_ARRAY_WEAK:
  ------------------
  |  Branch (18295:9): [True: 0, False: 37.0M]
  ------------------
18296|  1.44M|            janet_free(((JanetArray *) mem)->data);
  ------------------
  |  | 2415|  1.44M|#define janet_free(X) free((X))
  ------------------
18297|  1.44M|            break;
18298|   344k|        case JANET_MEMORY_TABLE:
  ------------------
  |  Branch (18298:9): [True: 344k, False: 36.7M]
  ------------------
18299|   344k|        case JANET_MEMORY_TABLE_WEAKK:
  ------------------
  |  Branch (18299:9): [True: 0, False: 37.0M]
  ------------------
18300|   344k|        case JANET_MEMORY_TABLE_WEAKV:
  ------------------
  |  Branch (18300:9): [True: 0, False: 37.0M]
  ------------------
18301|   344k|        case JANET_MEMORY_TABLE_WEAKKV:
  ------------------
  |  Branch (18301:9): [True: 0, False: 37.0M]
  ------------------
18302|   344k|            janet_free(((JanetTable *) mem)->data);
  ------------------
  |  | 2415|   344k|#define janet_free(X) free((X))
  ------------------
18303|   344k|            break;
18304|  86.4k|        case JANET_MEMORY_FIBER: {
  ------------------
  |  Branch (18304:9): [True: 86.4k, False: 36.9M]
  ------------------
18305|  86.4k|            JanetFiber *f = (JanetFiber *)mem;
18306|  86.4k|#ifdef JANET_EV
18307|  86.4k|            if (f->ev_state && !(f->flags & JANET_FIBER_EV_FLAG_IN_FLIGHT)) {
  ------------------
  |  |  847|      0|#define JANET_FIBER_EV_FLAG_IN_FLIGHT 0x1
  ------------------
  |  Branch (18307:17): [True: 0, False: 86.4k]
  |  Branch (18307:32): [True: 0, False: 0]
  ------------------
18308|      0|                janet_ev_dec_refcount();
18309|      0|                janet_free(f->ev_state);
  ------------------
  |  | 2415|      0|#define janet_free(X) free((X))
  ------------------
18310|  86.4k|            } else if (f->gc.flags & JANET_FIBER_EV_GCFLAG_SUSPENDED) {
  ------------------
  |  |  843|  86.4k|#define JANET_FIBER_EV_GCFLAG_SUSPENDED 0x2000000
  ------------------
  |  Branch (18310:24): [True: 0, False: 86.4k]
  ------------------
18311|      0|                janet_ev_dec_refcount();
18312|      0|            }
18313|  86.4k|#endif
18314|  86.4k|            janet_free(f->data);
  ------------------
  |  | 2415|  86.4k|#define janet_free(X) free((X))
  ------------------
18315|  86.4k|        }
18316|  86.4k|        break;
18317|  8.60k|        case JANET_MEMORY_BUFFER:
  ------------------
  |  Branch (18317:9): [True: 8.60k, False: 37.0M]
  ------------------
18318|  8.60k|            janet_buffer_deinit((JanetBuffer *) mem);
18319|  8.60k|            break;
18320|  7.23k|        case JANET_MEMORY_ABSTRACT: {
  ------------------
  |  Branch (18320:9): [True: 7.23k, False: 37.0M]
  ------------------
18321|  7.23k|            JanetAbstractHead *head = (JanetAbstractHead *)mem;
18322|  7.23k|            if (head->type->gcperthread) {
  ------------------
  |  Branch (18322:17): [True: 0, False: 7.23k]
  ------------------
18323|      0|                janet_assert(!head->type->gcperthread(head->data, head->size), "per-thread finalizer failed");
  ------------------
  |  |  389|      0|#define janet_assert(c, m) do { \
  |  |  390|      0|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  391|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
18324|      0|            }
18325|  7.23k|            if (head->type->gc) {
  ------------------
  |  Branch (18325:17): [True: 801, False: 6.43k]
  ------------------
18326|    801|                janet_assert(!head->type->gc(head->data, head->size), "finalizer failed");
  ------------------
  |  |  389|    801|#define janet_assert(c, m) do { \
  |  |  390|    801|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 801]
  |  |  ------------------
  |  |  391|    801|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 801]
  |  |  ------------------
  ------------------
18327|    801|            }
18328|  7.23k|        }
18329|  7.23k|        break;
18330|  2.17M|        case JANET_MEMORY_FUNCENV: {
  ------------------
  |  Branch (18330:9): [True: 2.17M, False: 34.8M]
  ------------------
18331|  2.17M|            JanetFuncEnv *env = (JanetFuncEnv *)mem;
18332|  2.17M|            if (0 == env->offset)
  ------------------
  |  Branch (18332:17): [True: 1.65M, False: 525k]
  ------------------
18333|  1.65M|                janet_free(env->as.values);
  ------------------
  |  | 2415|  1.65M|#define janet_free(X) free((X))
  ------------------
18334|  2.17M|        }
18335|  2.17M|        break;
18336|   323k|        case JANET_MEMORY_FUNCDEF: {
  ------------------
  |  Branch (18336:9): [True: 323k, False: 36.7M]
  ------------------
18337|   323k|            JanetFuncDef *def = (JanetFuncDef *)mem;
18338|       |            /* TODO - get this all with one alloc and one free */
18339|   323k|            janet_free(def->defs);
  ------------------
  |  | 2415|   323k|#define janet_free(X) free((X))
  ------------------
18340|   323k|            janet_free(def->environments);
  ------------------
  |  | 2415|   323k|#define janet_free(X) free((X))
  ------------------
18341|   323k|            janet_free(def->constants);
  ------------------
  |  | 2415|   323k|#define janet_free(X) free((X))
  ------------------
18342|   323k|            janet_free(def->bytecode);
  ------------------
  |  | 2415|   323k|#define janet_free(X) free((X))
  ------------------
18343|   323k|            janet_free(def->sourcemap);
  ------------------
  |  | 2415|   323k|#define janet_free(X) free((X))
  ------------------
18344|   323k|            janet_free(def->closure_bitset);
  ------------------
  |  | 2415|   323k|#define janet_free(X) free((X))
  ------------------
18345|   323k|            janet_free(def->symbolmap);
  ------------------
  |  | 2415|   323k|#define janet_free(X) free((X))
  ------------------
18346|   323k|        }
18347|   323k|        break;
18348|  37.0M|    }
18349|  37.0M|}
janet.c:janet_free_all_scratch:
18536|    267|static void janet_free_all_scratch(void) {
18537|  8.58k|    for (size_t i = 0; i < janet_vm.scratch_len; i++) {
  ------------------
  |  Branch (18537:24): [True: 8.32k, False: 267]
  ------------------
18538|  8.32k|        free_one_scratch(janet_vm.scratch_mem[i]);
18539|  8.32k|    }
18540|    267|    janet_vm.scratch_len = 0;
18541|    267|}
janet.c:janet_mem2scratch:
18543|  4.84M|static JanetScratch *janet_mem2scratch(void *mem) {
18544|  4.84M|    JanetScratch *s = (JanetScratch *)mem;
18545|  4.84M|    return s - 1;
18546|  4.84M|}
janet.c:free_one_scratch:
18528|  2.75M|static void free_one_scratch(JanetScratch *s) {
18529|  2.75M|    if (NULL != s->finalize) {
  ------------------
  |  Branch (18529:9): [True: 0, False: 2.75M]
  ------------------
18530|      0|        s->finalize((char *) s->mem);
18531|      0|    }
18532|  2.75M|    janet_free(s);
  ------------------
  |  | 2415|  2.75M|#define janet_free(X) free((X))
  ------------------
18533|  2.75M|}
janet.c:janet_int64_hash:
18800|  3.73k|static int32_t janet_int64_hash(void *p1, size_t size) {
18801|  3.73k|    (void) size;
18802|  3.73k|    int32_t *words = p1;
18803|  3.73k|    return words[0] ^ words[1];
18804|  3.73k|}
janet.c:it_u64_tostring:
18835|      6|static void it_u64_tostring(void *p, JanetBuffer *buffer) {
18836|      6|    char str[32];
18837|       |    snprintf(str, sizeof(str), "%" PRIu64, *((uint64_t *)p));
18838|      6|    janet_buffer_push_cstring(buffer, str);
18839|      6|}
janet.c:makef:
19558|    801|static void *makef(FILE *f, int32_t flags, size_t bufsize) {
19559|    801|    JanetFile *iof = (JanetFile *) janet_abstract(&janet_file_type, sizeof(JanetFile));
19560|    801|    iof->file = f;
19561|    801|    iof->flags = flags;
19562|    801|    iof->vbufsize = bufsize;
19563|    801|#if !(defined(JANET_WINDOWS) || defined(JANET_PLAN9))
19564|       |    /* While we would like fopen to set cloexec by default (like O_CLOEXEC) with the e flag, that is
19565|       |     * not standard. */
19566|    801|    if (!(flags & JANET_FILE_NOT_CLOSEABLE))
  ------------------
  |  | 2278|    801|#define JANET_FILE_NOT_CLOSEABLE 16
  ------------------
  |  Branch (19566:9): [True: 0, False: 801]
  ------------------
19567|      0|        fcntl(fileno(f), F_SETFD, FD_CLOEXEC);
19568|    801|#endif
19569|    801|    return iof;
19570|    801|}
janet.c:cfun_io_gc:
19766|    801|static int cfun_io_gc(void *p, size_t len) {
19767|    801|    (void) len;
19768|    801|    JanetFile *iof = (JanetFile *)p;
19769|    801|    janet_file_close(iof);
19770|    801|    return 0;
19771|    801|}
janet.c:readint:
21050|  18.1M|static int32_t readint(UnmarshalState *st, const uint8_t **atdata) {
21051|  18.1M|    const uint8_t *data = *atdata;
21052|  18.1M|    int32_t ret;
21053|  18.1M|    MARSH_EOS(st, data);
  ------------------
  |  |21045|  18.1M|#define MARSH_EOS(st, data) do { \
  |  |21046|  18.1M|    if ((data) >= (st)->end) janet_panic("unexpected end of source");\
  |  |  ------------------
  |  |  |  Branch (21046:9): [True: 0, False: 18.1M]
  |  |  ------------------
  |  |21047|  18.1M|} while (0)
  |  |  ------------------
  |  |  |  Branch (21047:10): [Folded, False: 18.1M]
  |  |  ------------------
  ------------------
21054|  18.1M|    if (*data < 128) {
  ------------------
  |  Branch (21054:9): [True: 14.7M, False: 3.35M]
  ------------------
21055|  14.7M|        ret = *data++;
21056|  14.7M|    } else if (*data < 192) {
  ------------------
  |  Branch (21056:16): [True: 3.17M, False: 188k]
  ------------------
21057|  3.17M|        MARSH_EOS(st, data + 1);
  ------------------
  |  |21045|  3.17M|#define MARSH_EOS(st, data) do { \
  |  |21046|  3.17M|    if ((data) >= (st)->end) janet_panic("unexpected end of source");\
  |  |  ------------------
  |  |  |  Branch (21046:9): [True: 0, False: 3.17M]
  |  |  ------------------
  |  |21047|  3.17M|} while (0)
  |  |  ------------------
  |  |  |  Branch (21047:10): [Folded, False: 3.17M]
  |  |  ------------------
  ------------------
21058|  3.17M|        uint32_t uret = ((data[0] & 0x3F) << 8) + data[1];
21059|       |        /* Sign extend 18 MSBs */
21060|  3.17M|        uret |= (uret >> 13) ? 0xFFFFC000 : 0;
  ------------------
  |  Branch (21060:17): [True: 887k, False: 2.28M]
  ------------------
21061|  3.17M|        ret = (int32_t)uret;
21062|  3.17M|        data += 2;
21063|  3.17M|    } else if (*data == LB_INTEGER) {
  ------------------
  |  Branch (21063:16): [True: 188k, False: 0]
  ------------------
21064|   188k|        MARSH_EOS(st, data + 4);
  ------------------
  |  |21045|   188k|#define MARSH_EOS(st, data) do { \
  |  |21046|   188k|    if ((data) >= (st)->end) janet_panic("unexpected end of source");\
  |  |  ------------------
  |  |  |  Branch (21046:9): [True: 0, False: 188k]
  |  |  ------------------
  |  |21047|   188k|} while (0)
  |  |  ------------------
  |  |  |  Branch (21047:10): [Folded, False: 188k]
  |  |  ------------------
  ------------------
21065|   188k|        uint32_t ui = ((uint32_t)(data[1]) << 24) |
21066|   188k|                      ((uint32_t)(data[2]) << 16) |
21067|   188k|                      ((uint32_t)(data[3]) << 8) |
21068|   188k|                      (uint32_t)(data[4]);
21069|   188k|        ret = (int32_t)ui;
21070|   188k|        data += 5;
21071|   188k|    } else {
21072|      0|        janet_panicf("expected integer, got byte %x at index %d",
21073|      0|                     *data,
21074|      0|                     data - st->start);
21075|      0|        ret = 0;
21076|      0|    }
21077|  18.1M|    *atdata = data;
21078|  18.1M|    return ret;
21079|  18.1M|}
janet.c:unmarshal_one:
21659|  4.84M|    int flags) {
21660|  4.84M|    uint8_t lead;
21661|  4.84M|    MARSH_STACKCHECK;
  ------------------
  |  |20517|  4.84M|#define MARSH_STACKCHECK if ((flags & 0xFFFF) > JANET_RECURSION_GUARD) janet_panic("stack overflow")
  |  |  ------------------
  |  |  |  |  296|  4.84M|#define JANET_RECURSION_GUARD 1024
  |  |  ------------------
  |  |  |  Branch (20517:30): [True: 0, False: 4.84M]
  |  |  ------------------
  ------------------
21662|  4.84M|    MARSH_EOS(st, data);
  ------------------
  |  |21045|  4.84M|#define MARSH_EOS(st, data) do { \
  |  |21046|  4.84M|    if ((data) >= (st)->end) janet_panic("unexpected end of source");\
  |  |  ------------------
  |  |  |  Branch (21046:9): [True: 0, False: 4.84M]
  |  |  ------------------
  |  |21047|  4.84M|} while (0)
  |  |  ------------------
  |  |  |  Branch (21047:10): [Folded, False: 4.84M]
  |  |  ------------------
  ------------------
21663|  4.84M|    lead = data[0];
21664|  4.84M|    if (lead < LB_REAL) {
  ------------------
  |  Branch (21664:9): [True: 368k, False: 4.48M]
  ------------------
21665|   368k|        *out = janet_wrap_integer(readint(st, &data));
  ------------------
  |  |  967|   368k|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|   368k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
21666|   368k|        return data;
21667|   368k|    }
21668|  4.48M|    switch (lead) {
21669|  14.6k|        case LB_NIL:
  ------------------
  |  Branch (21669:9): [True: 14.6k, False: 4.46M]
  ------------------
21670|  14.6k|            *out = janet_wrap_nil();
  ------------------
  |  |  831|  14.6k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  14.6k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  14.6k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  14.6k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21671|  14.6k|            return data + 1;
21672|      0|        case LB_FALSE:
  ------------------
  |  Branch (21672:9): [True: 0, False: 4.48M]
  ------------------
21673|      0|            *out = janet_wrap_false();
  ------------------
  |  |  833|      0|#define janet_wrap_false() janet_nanbox_from_payload(JANET_BOOLEAN, 0)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21674|      0|            return data + 1;
21675|  35.5k|        case LB_TRUE:
  ------------------
  |  Branch (21675:9): [True: 35.5k, False: 4.44M]
  ------------------
21676|  35.5k|            *out = janet_wrap_true();
  ------------------
  |  |  832|  35.5k|#define janet_wrap_true() janet_nanbox_from_payload(JANET_BOOLEAN, 1)
  |  |  ------------------
  |  |  |  |  822|  35.5k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  35.5k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  35.5k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21677|  35.5k|            return data + 1;
21678|    801|        case LB_INTEGER:
  ------------------
  |  Branch (21678:9): [True: 801, False: 4.47M]
  ------------------
21679|       |            /* Long integer */
21680|    801|            MARSH_EOS(st, data + 4);
  ------------------
  |  |21045|    801|#define MARSH_EOS(st, data) do { \
  |  |21046|    801|    if ((data) >= (st)->end) janet_panic("unexpected end of source");\
  |  |  ------------------
  |  |  |  Branch (21046:9): [True: 0, False: 801]
  |  |  ------------------
  |  |21047|    801|} while (0)
  |  |  ------------------
  |  |  |  Branch (21047:10): [Folded, False: 801]
  |  |  ------------------
  ------------------
21681|    801|            uint32_t ui = ((uint32_t)(data[4])) |
21682|    801|                          ((uint32_t)(data[3]) << 8) |
21683|    801|                          ((uint32_t)(data[2]) << 16) |
21684|    801|                          ((uint32_t)(data[1]) << 24);
21685|    801|            int32_t si = (int32_t)ui;
21686|    801|            *out = janet_wrap_integer(si);
  ------------------
  |  |  967|    801|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|    801|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
21687|    801|            return data + 5;
21688|  1.86k|        case LB_REAL:
  ------------------
  |  Branch (21688:9): [True: 1.86k, False: 4.47M]
  ------------------
21689|       |            /* Real */
21690|  1.86k|        {
21691|  1.86k|            union {
21692|  1.86k|                double d;
21693|  1.86k|                uint8_t bytes[8];
21694|  1.86k|            } u;
21695|  1.86k|            MARSH_EOS(st, data + 8);
  ------------------
  |  |21045|  1.86k|#define MARSH_EOS(st, data) do { \
  |  |21046|  1.86k|    if ((data) >= (st)->end) janet_panic("unexpected end of source");\
  |  |  ------------------
  |  |  |  Branch (21046:9): [True: 0, False: 1.86k]
  |  |  ------------------
  |  |21047|  1.86k|} while (0)
  |  |  ------------------
  |  |  |  Branch (21047:10): [Folded, False: 1.86k]
  |  |  ------------------
  ------------------
21696|       |#ifdef JANET_BIG_ENDIAN
21697|       |            u.bytes[0] = data[8];
21698|       |            u.bytes[1] = data[7];
21699|       |            u.bytes[2] = data[6];
21700|       |            u.bytes[3] = data[5];
21701|       |            u.bytes[4] = data[4];
21702|       |            u.bytes[5] = data[3];
21703|       |            u.bytes[6] = data[2];
21704|       |            u.bytes[7] = data[1];
21705|       |#else
21706|  1.86k|            memcpy(&u.bytes, data + 1, sizeof(double));
21707|  1.86k|#endif
21708|  1.86k|            *out = janet_wrap_number_safe(u.d);
21709|  1.86k|            janet_v_push(st->lookup, *out);
  ------------------
  |  |  757|  1.86k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  1.86k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  1.86k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  1.86k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.86k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  1.86k|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.86k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 0, False: 1.86k]
  |  |  |  |  |  |  |  Branch (768:50): [True: 0, False: 1.86k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|      0|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  1.86k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.86k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21710|  1.86k|            return data + 9;
21711|  1.86k|        }
21712|   394k|        case LB_STRING:
  ------------------
  |  Branch (21712:9): [True: 394k, False: 4.08M]
  ------------------
21713|   893k|        case LB_SYMBOL:
  ------------------
  |  Branch (21713:9): [True: 498k, False: 3.98M]
  ------------------
21714|   893k|        case LB_BUFFER:
  ------------------
  |  Branch (21714:9): [True: 267, False: 4.48M]
  ------------------
21715|   957k|        case LB_KEYWORD:
  ------------------
  |  Branch (21715:9): [True: 63.5k, False: 4.41M]
  ------------------
21716|  1.05M|        case LB_REGISTRY: {
  ------------------
  |  Branch (21716:9): [True: 94.7k, False: 4.38M]
  ------------------
21717|  1.05M|            data++;
21718|  1.05M|            int32_t len = readnat(st, &data);
21719|  1.05M|            MARSH_EOS(st, data - 1 + len);
  ------------------
  |  |21045|  1.05M|#define MARSH_EOS(st, data) do { \
  |  |21046|  1.05M|    if ((data) >= (st)->end) janet_panic("unexpected end of source");\
  |  |  ------------------
  |  |  |  Branch (21046:9): [True: 0, False: 1.05M]
  |  |  ------------------
  |  |21047|  1.05M|} while (0)
  |  |  ------------------
  |  |  |  Branch (21047:10): [Folded, False: 1.05M]
  |  |  ------------------
  ------------------
21720|  1.05M|            if (lead == LB_STRING) {
  ------------------
  |  Branch (21720:17): [True: 394k, False: 657k]
  ------------------
21721|   394k|                const uint8_t *str = janet_string(data, len);
21722|   394k|                *out = janet_wrap_string(str);
  ------------------
  |  |  848|   394k|#define janet_wrap_string(s) janet_nanbox_wrap_c((s), JANET_STRING)
  |  |  ------------------
  |  |  |  |  828|   394k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   394k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   394k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21723|   657k|            } else if (lead == LB_SYMBOL) {
  ------------------
  |  Branch (21723:24): [True: 498k, False: 158k]
  ------------------
21724|   498k|                const uint8_t *str = janet_symbol(data, len);
21725|   498k|                *out = janet_wrap_symbol(str);
  ------------------
  |  |  849|   498k|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  ------------------
  |  |  |  |  828|   498k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   498k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   498k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21726|   498k|            } else if (lead == LB_KEYWORD) {
  ------------------
  |  Branch (21726:24): [True: 63.5k, False: 95.0k]
  ------------------
21727|  63.5k|                const uint8_t *str = janet_keyword(data, len);
  ------------------
  |  | 1840|  63.5k|#define janet_keyword janet_symbol
  ------------------
21728|  63.5k|                *out = janet_wrap_keyword(str);
  ------------------
  |  |  850|  63.5k|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  ------------------
  |  |  |  |  828|  63.5k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  63.5k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  63.5k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21729|  95.0k|            } else if (lead == LB_REGISTRY) {
  ------------------
  |  Branch (21729:24): [True: 94.7k, False: 267]
  ------------------
21730|  94.7k|                if (st->reg) {
  ------------------
  |  Branch (21730:21): [True: 94.7k, False: 0]
  ------------------
21731|  94.7k|                    Janet regkey = janet_symbolv(data, len);
  ------------------
  |  | 1836|  94.7k|#define janet_symbolv(str, len) janet_wrap_symbol(janet_symbol((str), (len)))
  |  |  ------------------
  |  |  |  |  849|  94.7k|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|  94.7k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  94.7k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  94.7k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21732|  94.7k|                    *out = janet_table_get(st->reg, regkey);
21733|  94.7k|                } else {
21734|      0|                    *out = janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21735|      0|                }
21736|  94.7k|            } else { /* (lead == LB_BUFFER) */
21737|    267|                JanetBuffer *buffer = janet_buffer(len);
21738|    267|                buffer->count = len;
21739|    267|                safe_memcpy(buffer->data, data, len);
21740|    267|                *out = janet_wrap_buffer(buffer);
  ------------------
  |  |  847|    267|#define janet_wrap_buffer(s) janet_nanbox_wrap_((s), JANET_BUFFER)
  |  |  ------------------
  |  |  |  |  825|    267|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    267|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    267|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21741|    267|            }
21742|  1.05M|            janet_v_push(st->lookup, *out);
  ------------------
  |  |  757|  1.05M|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  1.05M|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  1.05M|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  1.05M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.05M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  1.05M|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.05M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 0, False: 1.05M]
  |  |  |  |  |  |  |  Branch (768:50): [True: 3.20k, False: 1.04M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|  3.20k|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  1.05M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.05M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21743|  1.05M|            return data + len;
21744|  1.05M|        }
21745|      0|        case LB_FIBER: {
  ------------------
  |  Branch (21745:9): [True: 0, False: 4.48M]
  ------------------
21746|      0|            JanetFiber *fiber;
21747|      0|            data = unmarshal_one_fiber(st, data + 1, &fiber, flags + 1);
21748|      0|            *out = janet_wrap_fiber(fiber);
  ------------------
  |  |  844|      0|#define janet_wrap_fiber(s) janet_nanbox_wrap_((s), JANET_FIBER)
  |  |  ------------------
  |  |  |  |  825|      0|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21749|      0|            return data;
21750|  1.05M|        }
21751|   102k|        case LB_FUNCTION: {
  ------------------
  |  Branch (21751:9): [True: 102k, False: 4.37M]
  ------------------
21752|   102k|            JanetFunction *func;
21753|   102k|            JanetFuncDef *def;
21754|   102k|            data++;
21755|   102k|            int32_t len = readnat(st, &data);
21756|   102k|            if (len > 255) {
  ------------------
  |  Branch (21756:17): [True: 0, False: 102k]
  ------------------
21757|      0|                janet_panicf("invalid function - too many environments (%d)", len);
21758|      0|            }
21759|   102k|            func = janet_gcalloc(JANET_MEMORY_FUNCTION, sizeof(JanetFunction) +
21760|   102k|                                 len * sizeof(JanetFuncEnv));
21761|   102k|            func->def = NULL;
21762|   113k|            for (int32_t i = 0; i < len; i++) {
  ------------------
  |  Branch (21762:33): [True: 11.4k, False: 102k]
  ------------------
21763|  11.4k|                func->envs[i] = NULL;
21764|  11.4k|            }
21765|   102k|            *out = janet_wrap_function(func);
  ------------------
  |  |  852|   102k|#define janet_wrap_function(s) janet_nanbox_wrap_((s), JANET_FUNCTION)
  |  |  ------------------
  |  |  |  |  825|   102k|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   102k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   102k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21766|   102k|            janet_v_push(st->lookup, *out);
  ------------------
  |  |  757|   102k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|   102k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|   102k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|   102k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|   102k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|   102k|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|   102k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 0, False: 102k]
  |  |  |  |  |  |  |  Branch (768:50): [True: 0, False: 102k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|      0|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|   102k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   102k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21767|   102k|            data = unmarshal_one_def(st, data, &def, flags + 1);
21768|   102k|            func->def = def;
21769|   113k|            for (int32_t i = 0; i < len; i++) {
  ------------------
  |  Branch (21769:33): [True: 11.4k, False: 102k]
  ------------------
21770|  11.4k|                data = unmarshal_one_env(st, data, &(func->envs[i]), flags + 1);
21771|  11.4k|            }
21772|   102k|            return data;
21773|   102k|        }
21774|      0|        case LB_ABSTRACT: {
  ------------------
  |  Branch (21774:9): [True: 0, False: 4.48M]
  ------------------
21775|      0|            data++;
21776|      0|            return unmarshal_one_abstract(st, data, out, flags);
21777|   102k|        }
21778|  2.87M|        case LB_REFERENCE:
  ------------------
  |  Branch (21778:9): [True: 2.87M, False: 1.60M]
  ------------------
21779|  2.87M|        case LB_ARRAY:
  ------------------
  |  Branch (21779:9): [True: 801, False: 4.47M]
  ------------------
21780|  2.87M|        case LB_ARRAY_WEAK:
  ------------------
  |  Branch (21780:9): [True: 0, False: 4.48M]
  ------------------
21781|  3.07M|        case LB_TUPLE:
  ------------------
  |  Branch (21781:9): [True: 200k, False: 4.28M]
  ------------------
21782|  3.07M|        case LB_STRUCT:
  ------------------
  |  Branch (21782:9): [True: 1.86k, False: 4.47M]
  ------------------
21783|  3.07M|        case LB_STRUCT_PROTO:
  ------------------
  |  Branch (21783:9): [True: 0, False: 4.48M]
  ------------------
21784|  3.27M|        case LB_TABLE:
  ------------------
  |  Branch (21784:9): [True: 195k, False: 4.28M]
  ------------------
21785|  3.27M|        case LB_TABLE_PROTO:
  ------------------
  |  Branch (21785:9): [True: 0, False: 4.48M]
  ------------------
21786|  3.27M|        case LB_TABLE_WEAKK:
  ------------------
  |  Branch (21786:9): [True: 0, False: 4.48M]
  ------------------
21787|  3.27M|        case LB_TABLE_WEAKV:
  ------------------
  |  Branch (21787:9): [True: 0, False: 4.48M]
  ------------------
21788|  3.27M|        case LB_TABLE_WEAKKV:
  ------------------
  |  Branch (21788:9): [True: 0, False: 4.48M]
  ------------------
21789|  3.27M|        case LB_TABLE_WEAKK_PROTO:
  ------------------
  |  Branch (21789:9): [True: 0, False: 4.48M]
  ------------------
21790|  3.27M|        case LB_TABLE_WEAKV_PROTO:
  ------------------
  |  Branch (21790:9): [True: 0, False: 4.48M]
  ------------------
21791|  3.27M|        case LB_TABLE_WEAKKV_PROTO:
  ------------------
  |  Branch (21791:9): [True: 0, False: 4.48M]
  ------------------
21792|       |            /* Things that open with integers */
21793|  3.27M|        {
21794|  3.27M|            data++;
21795|  3.27M|            int32_t len = readnat(st, &data);
21796|       |            /* DOS check */
21797|  3.27M|            if (lead != LB_REFERENCE) {
  ------------------
  |  Branch (21797:17): [True: 398k, False: 2.87M]
  ------------------
21798|   398k|                MARSH_EOS(st, data - 1 + len);
  ------------------
  |  |21045|   398k|#define MARSH_EOS(st, data) do { \
  |  |21046|   398k|    if ((data) >= (st)->end) janet_panic("unexpected end of source");\
  |  |  ------------------
  |  |  |  Branch (21046:9): [True: 0, False: 398k]
  |  |  ------------------
  |  |21047|   398k|} while (0)
  |  |  ------------------
  |  |  |  Branch (21047:10): [Folded, False: 398k]
  |  |  ------------------
  ------------------
21799|   398k|            }
21800|  3.27M|            if (lead == LB_ARRAY || lead == LB_ARRAY_WEAK) {
  ------------------
  |  Branch (21800:17): [True: 801, False: 3.27M]
  |  Branch (21800:37): [True: 0, False: 3.27M]
  ------------------
21801|       |                /* Array */
21802|    801|                JanetArray *array = (lead == LB_ARRAY_WEAK) ? janet_array_weak(len) : janet_array(len);
  ------------------
  |  Branch (21802:37): [True: 0, False: 801]
  ------------------
21803|    801|                array->count = len;
21804|    801|                *out = janet_wrap_array(array);
  ------------------
  |  |  845|    801|#define janet_wrap_array(s) janet_nanbox_wrap_((s), JANET_ARRAY)
  |  |  ------------------
  |  |  |  |  825|    801|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    801|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    801|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21805|    801|                janet_v_push(st->lookup, *out);
  ------------------
  |  |  757|    801|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|    801|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|    801|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|    801|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|    801|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|    801|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|    801|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 0, False: 801]
  |  |  |  |  |  |  |  Branch (768:50): [True: 0, False: 801]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|      0|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|    801|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|    801|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21806|  6.94k|                for (int32_t i = 0; i < len; i++) {
  ------------------
  |  Branch (21806:37): [True: 6.14k, False: 801]
  ------------------
21807|  6.14k|                    data = unmarshal_one(st, data, array->data + i, flags + 1);
21808|  6.14k|                }
21809|  3.27M|            } else if (lead == LB_TUPLE) {
  ------------------
  |  Branch (21809:24): [True: 200k, False: 3.07M]
  ------------------
21810|       |                /* Tuple */
21811|   200k|                Janet *tup = janet_tuple_begin(len);
21812|   200k|                int32_t flag = readint(st, &data);
21813|   200k|                janet_tuple_flag(tup) |= (int32_t)(((uint32_t) flag) << 16);  /* Avoid left shift of negative value */
  ------------------
  |  | 1806|   200k|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|   200k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
21814|   794k|                for (int32_t i = 0; i < len; i++) {
  ------------------
  |  Branch (21814:37): [True: 593k, False: 200k]
  ------------------
21815|   593k|                    data = unmarshal_one(st, data, tup + i, flags + 1);
21816|   593k|                }
21817|   200k|                *out = janet_wrap_tuple(janet_tuple_end(tup));
  ------------------
  |  |  843|   200k|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|   200k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   200k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   200k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21818|   200k|                janet_v_push(st->lookup, *out);
  ------------------
  |  |  757|   200k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|   200k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|   200k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|   200k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|   200k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|   200k|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|   200k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 0, False: 200k]
  |  |  |  |  |  |  |  Branch (768:50): [True: 0, False: 200k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|      0|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|   200k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   200k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21819|  3.07M|            } else if (lead == LB_STRUCT || lead == LB_STRUCT_PROTO) {
  ------------------
  |  Branch (21819:24): [True: 1.86k, False: 3.07M]
  |  Branch (21819:45): [True: 0, False: 3.07M]
  ------------------
21820|       |                /* Struct */
21821|  1.86k|                JanetKV *struct_ = janet_struct_begin(len);
21822|  1.86k|                if (lead == LB_STRUCT_PROTO) {
  ------------------
  |  Branch (21822:21): [True: 0, False: 1.86k]
  ------------------
21823|      0|                    Janet proto;
21824|      0|                    data = unmarshal_one(st, data, &proto, flags + 1);
21825|      0|                    janet_asserttype(proto, JANET_STRUCT, st);
21826|      0|                    janet_struct_proto(struct_) = janet_unwrap_struct(proto);
  ------------------
  |  | 1851|      0|#define janet_struct_proto(t) (janet_struct_head(t)->proto)
  |  |  ------------------
  |  |  |  | 1846|      0|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
                                  janet_struct_proto(struct_) = janet_unwrap_struct(proto);
  ------------------
  |  |  857|      0|#define janet_unwrap_struct(x) ((JanetStruct)janet_nanbox_to_pointer(x))
  ------------------
21827|      0|                }
21828|  14.4k|                for (int32_t i = 0; i < len; i++) {
  ------------------
  |  Branch (21828:37): [True: 12.5k, False: 1.86k]
  ------------------
21829|  12.5k|                    Janet key, value;
21830|  12.5k|                    data = unmarshal_one(st, data, &key, flags + 1);
21831|  12.5k|                    data = unmarshal_one(st, data, &value, flags + 1);
21832|  12.5k|                    janet_struct_put(struct_, key, value);
21833|  12.5k|                }
21834|  1.86k|                *out = janet_wrap_struct(janet_struct_end(struct_));
  ------------------
  |  |  842|  1.86k|#define janet_wrap_struct(s) janet_nanbox_wrap_c((s), JANET_STRUCT)
  |  |  ------------------
  |  |  |  |  828|  1.86k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.86k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.86k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21835|  1.86k|                janet_v_push(st->lookup, *out);
  ------------------
  |  |  757|  1.86k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  1.86k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  1.86k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  1.86k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.86k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  1.86k|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.86k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 0, False: 1.86k]
  |  |  |  |  |  |  |  Branch (768:50): [True: 0, False: 1.86k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|      0|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  1.86k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.86k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21836|  3.07M|            } else if (lead == LB_REFERENCE) {
  ------------------
  |  Branch (21836:24): [True: 2.87M, False: 195k]
  ------------------
21837|  2.87M|                if (len >= janet_v_count(st->lookup))
  ------------------
  |  |  759|  2.87M|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  2.87M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  2.87M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 2.87M, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (21837:21): [True: 0, False: 2.87M]
  ------------------
21838|      0|                    janet_panicf("invalid reference %d", len);
21839|  2.87M|                *out = st->lookup[len];
21840|  2.87M|            } else {
21841|       |                /* Table */
21842|   195k|                JanetTable *t;
21843|   195k|                if (lead == LB_TABLE_WEAKK_PROTO || lead == LB_TABLE_WEAKK) {
  ------------------
  |  Branch (21843:21): [True: 0, False: 195k]
  |  Branch (21843:53): [True: 0, False: 195k]
  ------------------
21844|      0|                    t = janet_table_weakk(len);
21845|   195k|                } else if (lead == LB_TABLE_WEAKV_PROTO || lead == LB_TABLE_WEAKV) {
  ------------------
  |  Branch (21845:28): [True: 0, False: 195k]
  |  Branch (21845:60): [True: 0, False: 195k]
  ------------------
21846|      0|                    t = janet_table_weakv(len);
21847|   195k|                } else if (lead == LB_TABLE_WEAKKV_PROTO || lead == LB_TABLE_WEAKKV) {
  ------------------
  |  Branch (21847:28): [True: 0, False: 195k]
  |  Branch (21847:61): [True: 0, False: 195k]
  ------------------
21848|      0|                    t = janet_table_weakkv(len);
21849|   195k|                } else {
21850|   195k|                    t = janet_table(len);
21851|   195k|                }
21852|   195k|                *out = janet_wrap_table(t);
  ------------------
  |  |  846|   195k|#define janet_wrap_table(s) janet_nanbox_wrap_((s), JANET_TABLE)
  |  |  ------------------
  |  |  |  |  825|   195k|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   195k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   195k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21853|   195k|                janet_v_push(st->lookup, *out);
  ------------------
  |  |  757|   195k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|   195k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|   195k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|   194k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|   194k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|   194k|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|   194k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 267, False: 194k]
  |  |  |  |  |  |  |  Branch (768:50): [True: 267, False: 194k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|    534|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|   195k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   195k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21854|   195k|                if (lead == LB_TABLE_PROTO || lead == LB_TABLE_WEAKK_PROTO || lead == LB_TABLE_WEAKV_PROTO || lead == LB_TABLE_WEAKKV_PROTO) {
  ------------------
  |  Branch (21854:21): [True: 0, False: 195k]
  |  Branch (21854:47): [True: 0, False: 195k]
  |  Branch (21854:79): [True: 0, False: 195k]
  |  Branch (21854:111): [True: 0, False: 195k]
  ------------------
21855|      0|                    Janet proto;
21856|      0|                    data = unmarshal_one(st, data, &proto, flags + 1);
21857|      0|                    janet_asserttype(proto, JANET_TABLE, st);
21858|      0|                    t->proto = janet_unwrap_table(proto);
  ------------------
  |  |  861|      0|#define janet_unwrap_table(x) ((JanetTable *)janet_nanbox_to_pointer(x))
  ------------------
21859|      0|                }
21860|  1.17M|                for (int32_t i = 0; i < len; i++) {
  ------------------
  |  Branch (21860:37): [True: 983k, False: 195k]
  ------------------
21861|   983k|                    Janet key, value;
21862|   983k|                    data = unmarshal_one(st, data, &key, flags + 1);
21863|   983k|                    data = unmarshal_one(st, data, &value, flags + 1);
21864|   983k|                    janet_table_put(t, key, value);
21865|   983k|                }
21866|   195k|            }
21867|  3.27M|            return data;
21868|  3.27M|        }
21869|      0|        case LB_UNSAFE_POINTER: {
  ------------------
  |  Branch (21869:9): [True: 0, False: 4.48M]
  ------------------
21870|      0|            MARSH_EOS(st, data + sizeof(void *));
  ------------------
  |  |21045|      0|#define MARSH_EOS(st, data) do { \
  |  |21046|      0|    if ((data) >= (st)->end) janet_panic("unexpected end of source");\
  |  |  ------------------
  |  |  |  Branch (21046:9): [True: 0, False: 0]
  |  |  ------------------
  |  |21047|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (21047:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
21871|      0|            data++;
21872|      0|            if (!(flags & JANET_MARSHAL_UNSAFE)) {
  ------------------
  |  | 1911|      0|#define JANET_MARSHAL_UNSAFE 0x20000
  ------------------
  |  Branch (21872:17): [True: 0, False: 0]
  ------------------
21873|      0|                janet_panicf("unsafe flag not given, "
21874|      0|                             "will not unmarshal raw pointer at index %d",
21875|      0|                             (int)(data - st->start));
21876|      0|            }
21877|      0|            union {
21878|      0|                void *ptr;
21879|      0|                uint8_t bytes[sizeof(void *)];
21880|      0|            } u;
21881|      0|            memcpy(u.bytes, data, sizeof(void *));
21882|      0|            data += sizeof(void *);
21883|      0|            *out = janet_wrap_pointer(u.ptr);
  ------------------
  |  |  854|      0|#define janet_wrap_pointer(s) janet_nanbox_wrap_((s), JANET_POINTER)
  |  |  ------------------
  |  |  |  |  825|      0|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21884|      0|            janet_v_push(st->lookup, *out);
  ------------------
  |  |  757|      0|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|      0|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|      0|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|      0|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (768:50): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|      0|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21885|      0|            return data;
21886|      0|        }
21887|      0|#ifdef JANET_EV
21888|      0|        case LB_POINTER_BUFFER: {
  ------------------
  |  Branch (21888:9): [True: 0, False: 4.48M]
  ------------------
21889|      0|            data++;
21890|      0|            int32_t count = readnat(st, &data);
21891|      0|            int32_t capacity = readnat(st, &data);
21892|      0|            MARSH_EOS(st, data + sizeof(void *));
  ------------------
  |  |21045|      0|#define MARSH_EOS(st, data) do { \
  |  |21046|      0|    if ((data) >= (st)->end) janet_panic("unexpected end of source");\
  |  |  ------------------
  |  |  |  Branch (21046:9): [True: 0, False: 0]
  |  |  ------------------
  |  |21047|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (21047:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
21893|      0|            union {
21894|      0|                void *ptr;
21895|      0|                uint8_t bytes[sizeof(void *)];
21896|      0|            } u;
21897|      0|            if (!(flags & JANET_MARSHAL_UNSAFE)) {
  ------------------
  |  | 1911|      0|#define JANET_MARSHAL_UNSAFE 0x20000
  ------------------
  |  Branch (21897:17): [True: 0, False: 0]
  ------------------
21898|      0|                janet_panicf("unsafe flag not given, "
21899|      0|                             "will not unmarshal raw pointer at index %d",
21900|      0|                             (int)(data - st->start));
21901|      0|            }
21902|      0|            memcpy(u.bytes, data, sizeof(void *));
21903|      0|            data += sizeof(void *);
21904|      0|            JanetBuffer *buffer = janet_pointer_buffer_unsafe(u.ptr, capacity, count);
21905|      0|            *out = janet_wrap_buffer(buffer);
  ------------------
  |  |  847|      0|#define janet_wrap_buffer(s) janet_nanbox_wrap_((s), JANET_BUFFER)
  |  |  ------------------
  |  |  |  |  825|      0|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21906|      0|            janet_v_push(st->lookup, *out);
  ------------------
  |  |  757|      0|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|      0|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|      0|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|      0|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (768:50): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|      0|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21907|      0|            return data;
21908|      0|        }
21909|      0|#endif
21910|      0|        case LB_UNSAFE_CFUNCTION: {
  ------------------
  |  Branch (21910:9): [True: 0, False: 4.48M]
  ------------------
21911|      0|            MARSH_EOS(st, data + sizeof(JanetCFunction));
  ------------------
  |  |21045|      0|#define MARSH_EOS(st, data) do { \
  |  |21046|      0|    if ((data) >= (st)->end) janet_panic("unexpected end of source");\
  |  |  ------------------
  |  |  |  Branch (21046:9): [True: 0, False: 0]
  |  |  ------------------
  |  |21047|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (21047:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
21912|      0|            data++;
21913|      0|            if (!(flags & JANET_MARSHAL_UNSAFE)) {
  ------------------
  |  | 1911|      0|#define JANET_MARSHAL_UNSAFE 0x20000
  ------------------
  |  Branch (21913:17): [True: 0, False: 0]
  ------------------
21914|      0|                janet_panicf("unsafe flag not given, "
21915|      0|                             "will not unmarshal function pointer at index %d",
21916|      0|                             (int)(data - st->start));
21917|      0|            }
21918|      0|            union {
21919|      0|                JanetCFunction ptr;
21920|      0|                uint8_t bytes[sizeof(JanetCFunction)];
21921|      0|            } u;
21922|      0|            memcpy(u.bytes, data, sizeof(JanetCFunction));
21923|      0|            data += sizeof(JanetCFunction);
21924|      0|            *out = janet_wrap_cfunction(u.ptr);
  ------------------
  |  |  853|      0|#define janet_wrap_cfunction(s) janet_nanbox_wrap_((s), JANET_CFUNCTION)
  |  |  ------------------
  |  |  |  |  825|      0|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21925|      0|            janet_v_push(st->lookup, *out);
  ------------------
  |  |  757|      0|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|      0|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|      0|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|      0|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (768:50): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|      0|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21926|      0|            return data;
21927|      0|        }
21928|      0|#ifdef JANET_EV
21929|      0|        case LB_THREADED_ABSTRACT: {
  ------------------
  |  Branch (21929:9): [True: 0, False: 4.48M]
  ------------------
21930|      0|            MARSH_EOS(st, data + sizeof(void *));
  ------------------
  |  |21045|      0|#define MARSH_EOS(st, data) do { \
  |  |21046|      0|    if ((data) >= (st)->end) janet_panic("unexpected end of source");\
  |  |  ------------------
  |  |  |  Branch (21046:9): [True: 0, False: 0]
  |  |  ------------------
  |  |21047|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (21047:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
21931|      0|            data++;
21932|      0|            if (!(flags & JANET_MARSHAL_UNSAFE)) {
  ------------------
  |  | 1911|      0|#define JANET_MARSHAL_UNSAFE 0x20000
  ------------------
  |  Branch (21932:17): [True: 0, False: 0]
  ------------------
21933|      0|                janet_panicf("unsafe flag not given, "
21934|      0|                             "will not unmarshal threaded abstract pointer at index %d",
21935|      0|                             (int)(data - st->start));
21936|      0|            }
21937|      0|            union {
21938|      0|                void *ptr;
21939|      0|                uint8_t bytes[sizeof(void *)];
21940|      0|            } u;
21941|      0|            memcpy(u.bytes, data, sizeof(void *));
21942|      0|            data += sizeof(void *);
21943|       |
21944|      0|            if (flags & JANET_MARSHAL_DECREF) {
  ------------------
  |  |  387|      0|#define JANET_MARSHAL_DECREF 0x40000
  ------------------
  |  Branch (21944:17): [True: 0, False: 0]
  ------------------
21945|       |                /* Decrement immediately and don't bother putting into heap */
21946|      0|                janet_abstract_decref(u.ptr);
21947|      0|                *out = janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21948|      0|            } else {
21949|      0|                *out = janet_wrap_abstract(u.ptr);
  ------------------
  |  |  851|      0|#define janet_wrap_abstract(s) janet_nanbox_wrap_((s), JANET_ABSTRACT)
  |  |  ------------------
  |  |  |  |  825|      0|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21950|      0|                Janet check = janet_table_get(&janet_vm.threaded_abstracts, *out);
21951|      0|                if (janet_checktype(check, JANET_NIL)) {
  ------------------
  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  ------------------
  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21952|       |                    /* Transfers reference from threaded channel buffer to current heap */
21953|      0|                    janet_table_put(&janet_vm.threaded_abstracts, *out, janet_wrap_false());
  ------------------
  |  |  833|      0|#define janet_wrap_false() janet_nanbox_from_payload(JANET_BOOLEAN, 0)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21954|      0|                } else {
21955|       |                    /* Heap reference already accounted for, remove threaded channel reference. */
21956|      0|                    janet_abstract_decref(u.ptr);
21957|      0|                }
21958|      0|            }
21959|       |
21960|      0|            janet_v_push(st->lookup, *out);
  ------------------
  |  |  757|      0|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|      0|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|      0|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|      0|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (768:50): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|      0|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21961|      0|            return data;
21962|      0|        }
21963|      0|#endif
21964|      0|        default: {
  ------------------
  |  Branch (21964:9): [True: 0, False: 4.48M]
  ------------------
21965|      0|            janet_panicf("unknown byte %x at index %d",
21966|      0|                         *data,
21967|      0|                         (int)(data - st->start));
21968|      0|            return NULL;
21969|      0|        }
21970|  4.48M|    }
21971|  4.48M|}
janet.c:readnat:
21082|  5.57M|static int32_t readnat(UnmarshalState *st, const uint8_t **atdata) {
21083|  5.57M|    int32_t ret = readint(st, atdata);
21084|  5.57M|    if (ret < 0) {
  ------------------
  |  Branch (21084:9): [True: 0, False: 5.57M]
  ------------------
21085|      0|        janet_panicf("expected integer >= 0, got %d", ret);
21086|      0|    }
21087|  5.57M|    return ret;
21088|  5.57M|}
janet.c:unmarshal_one_def:
21221|   143k|    int flags) {
21222|   143k|    MARSH_EOS(st, data);
  ------------------
  |  |21045|   143k|#define MARSH_EOS(st, data) do { \
  |  |21046|   143k|    if ((data) >= (st)->end) janet_panic("unexpected end of source");\
  |  |  ------------------
  |  |  |  Branch (21046:9): [True: 0, False: 143k]
  |  |  ------------------
  |  |21047|   143k|} while (0)
  |  |  ------------------
  |  |  |  Branch (21047:10): [Folded, False: 143k]
  |  |  ------------------
  ------------------
21223|   143k|    if (*data == LB_FUNCDEF_REF) {
  ------------------
  |  Branch (21223:9): [True: 1.06k, False: 142k]
  ------------------
21224|  1.06k|        data++;
21225|  1.06k|        int32_t index = readint(st, &data);
21226|  1.06k|        if (index < 0 || index >= janet_v_count(st->lookup_defs))
  ------------------
  |  |  759|  1.06k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  1.06k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.06k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 1.06k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (21226:13): [True: 0, False: 1.06k]
  |  Branch (21226:26): [True: 0, False: 1.06k]
  ------------------
21227|      0|            janet_panicf("invalid funcdef reference %d", index);
21228|  1.06k|        *out = st->lookup_defs[index];
21229|   142k|    } else {
21230|       |        /* Initialize with values that will not break garbage collection
21231|       |         * if unmarshalling fails. */
21232|   142k|        JanetFuncDef *def = janet_gcalloc(JANET_MEMORY_FUNCDEF, sizeof(JanetFuncDef));
21233|   142k|        def->environments_length = 0;
21234|   142k|        def->defs_length = 0;
21235|   142k|        def->constants_length = 0;
21236|   142k|        def->bytecode_length = 0;
21237|   142k|        def->name = NULL;
21238|   142k|        def->source = NULL;
21239|   142k|        def->closure_bitset = NULL;
21240|   142k|        def->defs = NULL;
21241|   142k|        def->environments = NULL;
21242|   142k|        def->constants = NULL;
21243|   142k|        def->bytecode = NULL;
21244|   142k|        def->sourcemap = NULL;
21245|   142k|        def->symbolmap = NULL;
21246|   142k|        def->symbolmap_length = 0;
21247|   142k|        def->named_args_count = 0;
21248|   142k|        janet_v_push(st->lookup_defs, def);
  ------------------
  |  |  757|   142k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|   142k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|   142k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|   142k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|   142k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|   142k|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|   142k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 267, False: 142k]
  |  |  |  |  |  |  |  Branch (768:50): [True: 2.67k, False: 139k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|  2.93k|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|   142k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   142k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21249|       |
21250|       |        /* Set default lengths to zero */
21251|   142k|        int32_t bytecode_length = 0;
21252|   142k|        int32_t constants_length = 0;
21253|   142k|        int32_t environments_length = 0;
21254|   142k|        int32_t defs_length = 0;
21255|   142k|        int32_t symbolmap_length = 0;
21256|       |
21257|       |        /* Read flags and other fixed values */
21258|   142k|        def->flags = readint(st, &data);
21259|   142k|        def->slotcount = readnat(st, &data);
21260|   142k|        def->arity = readnat(st, &data);
21261|   142k|        def->min_arity = readnat(st, &data);
21262|   142k|        def->max_arity = readnat(st, &data);
21263|       |
21264|       |        /* Read some lengths */
21265|   142k|        constants_length = readnat(st, &data);
21266|   142k|        bytecode_length = readnat(st, &data);
21267|   142k|        if (def->flags & JANET_FUNCDEF_FLAG_NAMEDARGS)
  ------------------
  |  | 1107|   142k|#define JANET_FUNCDEF_FLAG_NAMEDARGS 0x4000000
  ------------------
  |  Branch (21267:13): [True: 534, False: 142k]
  ------------------
21268|    534|            def->named_args_count = readnat(st, &data);
21269|   142k|        if (def->flags & JANET_FUNCDEF_FLAG_HASENVS)
  ------------------
  |  | 1103|   142k|#define JANET_FUNCDEF_FLAG_HASENVS 0x400000
  ------------------
  |  Branch (21269:13): [True: 134k, False: 8.81k]
  ------------------
21270|   134k|            environments_length = readnat(st, &data);
21271|   142k|        if (def->flags & JANET_FUNCDEF_FLAG_HASDEFS)
  ------------------
  |  | 1102|   142k|#define JANET_FUNCDEF_FLAG_HASDEFS 0x200000
  ------------------
  |  Branch (21271:13): [True: 18.6k, False: 124k]
  ------------------
21272|  18.6k|            defs_length = readnat(st, &data);
21273|   142k|        if (def->flags & JANET_FUNCDEF_FLAG_HASSYMBOLMAP)
  ------------------
  |  | 1099|   142k|#define JANET_FUNCDEF_FLAG_HASSYMBOLMAP 0x40000
  ------------------
  |  Branch (21273:13): [True: 132k, False: 10.6k]
  ------------------
21274|   132k|            symbolmap_length = readnat(st, &data);
21275|       |
21276|       |        /* Check name and source (optional) */
21277|   142k|        if (def->flags & JANET_FUNCDEF_FLAG_HASNAME) {
  ------------------
  |  | 1100|   142k|#define JANET_FUNCDEF_FLAG_HASNAME 0x80000
  ------------------
  |  Branch (21277:13): [True: 133k, False: 9.07k]
  ------------------
21278|   133k|            Janet x;
21279|   133k|            data = unmarshal_one(st, data, &x, flags + 1);
21280|   133k|            janet_asserttype(x, JANET_STRING, st);
21281|   133k|            def->name = janet_unwrap_string(x);
  ------------------
  |  |  863|   133k|#define janet_unwrap_string(x) ((JanetString)janet_nanbox_to_pointer(x))
  ------------------
21282|   133k|        }
21283|   142k|        if (def->flags & JANET_FUNCDEF_FLAG_HASSOURCE) {
  ------------------
  |  | 1101|   142k|#define JANET_FUNCDEF_FLAG_HASSOURCE 0x100000
  ------------------
  |  Branch (21283:13): [True: 134k, False: 8.81k]
  ------------------
21284|   134k|            Janet x;
21285|   134k|            data = unmarshal_one(st, data, &x, flags + 1);
21286|   134k|            janet_asserttype(x, JANET_STRING, st);
21287|   134k|            def->source = janet_unwrap_string(x);
  ------------------
  |  |  863|   134k|#define janet_unwrap_string(x) ((JanetString)janet_nanbox_to_pointer(x))
  ------------------
21288|   134k|        }
21289|       |
21290|       |        /* Unmarshal constants */
21291|   142k|        if (constants_length) {
  ------------------
  |  Branch (21291:13): [True: 108k, False: 33.9k]
  ------------------
21292|   108k|            def->constants = array_allocate(sizeof(Janet), constants_length);
21293|   108k|            if (!def->constants) {
  ------------------
  |  Branch (21293:17): [True: 0, False: 108k]
  ------------------
21294|      0|                JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
21295|      0|            }
21296|   715k|            for (int32_t i = 0; i < constants_length; i++)
  ------------------
  |  Branch (21296:33): [True: 606k, False: 108k]
  ------------------
21297|   606k|                data = unmarshal_one(st, data, def->constants + i, flags + 1);
21298|   108k|        } else {
21299|  33.9k|            def->constants = NULL;
21300|  33.9k|        }
21301|   142k|        def->constants_length = constants_length;
21302|       |
21303|       |        /* Unmarshal symbol map, if needed */
21304|   142k|        if (def->flags & JANET_FUNCDEF_FLAG_HASSYMBOLMAP) {
  ------------------
  |  | 1099|   142k|#define JANET_FUNCDEF_FLAG_HASSYMBOLMAP 0x40000
  ------------------
  |  Branch (21304:13): [True: 132k, False: 10.6k]
  ------------------
21305|   132k|            def->symbolmap = array_allocate(sizeof(JanetSymbolMap), symbolmap_length);
21306|   132k|            if (def->symbolmap == NULL) {
  ------------------
  |  Branch (21306:17): [True: 0, False: 132k]
  ------------------
21307|      0|                JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
21308|      0|            }
21309|  1.49M|            for (int32_t i = 0; i < symbolmap_length; i++) {
  ------------------
  |  Branch (21309:33): [True: 1.35M, False: 132k]
  ------------------
21310|  1.35M|                def->symbolmap[i].birth_pc = (uint32_t) readint(st, &data);
21311|  1.35M|                def->symbolmap[i].death_pc = (uint32_t) readint(st, &data);
21312|  1.35M|                def->symbolmap[i].slot_index = (uint32_t) readint(st, &data);
21313|  1.35M|                Janet value;
21314|  1.35M|                data = unmarshal_one(st, data, &value, flags + 1);
21315|  1.35M|                if (!janet_checktype(value, JANET_SYMBOL)) {
  ------------------
  |  |  806|  1.35M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 1.35M]
  |  |  ------------------
  |  |  807|  1.35M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  1.35M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  1.35M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  1.35M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.35M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.35M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (21315:21): [True: 0, False: 1.35M]
  ------------------
21316|      0|                    janet_panicf("corrupted symbolmap when unmarshalling debug info, got %v", value);
21317|      0|                }
21318|  1.35M|                def->symbolmap[i].symbol = janet_unwrap_symbol(value);
  ------------------
  |  |  864|  1.35M|#define janet_unwrap_symbol(x) ((JanetSymbol)janet_nanbox_to_pointer(x))
  ------------------
21319|  1.35M|            }
21320|   132k|            def->symbolmap_length = (uint32_t) symbolmap_length;
21321|   132k|        }
21322|       |
21323|       |        /* Unmarshal bytecode */
21324|   142k|        def->bytecode = array_allocate(sizeof(uint32_t), bytecode_length);
21325|   142k|        if (!def->bytecode) {
  ------------------
  |  Branch (21325:13): [True: 0, False: 142k]
  ------------------
21326|      0|            JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
21327|      0|        }
21328|   142k|        data = janet_unmarshal_u32s(st, data, def->bytecode, bytecode_length);
21329|   142k|        def->bytecode_length = bytecode_length;
21330|       |
21331|       |        /* Unmarshal environments */
21332|   142k|        if (def->flags & JANET_FUNCDEF_FLAG_HASENVS) {
  ------------------
  |  | 1103|   142k|#define JANET_FUNCDEF_FLAG_HASENVS 0x400000
  ------------------
  |  Branch (21332:13): [True: 134k, False: 8.81k]
  ------------------
21333|   134k|            def->environments = janet_calloc(1, sizeof(int32_t) * (size_t) environments_length);
  ------------------
  |  | 2412|   134k|#define janet_calloc(X, Y) calloc((X), (Y))
  ------------------
21334|   134k|            if (!def->environments) {
  ------------------
  |  Branch (21334:17): [True: 0, False: 134k]
  ------------------
21335|      0|                JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
21336|      0|            }
21337|   186k|            for (int32_t i = 0; i < environments_length; i++) {
  ------------------
  |  Branch (21337:33): [True: 52.5k, False: 134k]
  ------------------
21338|  52.5k|                def->environments[i] = readint(st, &data);
21339|  52.5k|            }
21340|   134k|        } else {
21341|  8.81k|            def->environments = NULL;
21342|  8.81k|        }
21343|   142k|        def->environments_length = environments_length;
21344|       |
21345|       |        /* Unmarshal sub funcdefs */
21346|   142k|        if (def->flags & JANET_FUNCDEF_FLAG_HASDEFS) {
  ------------------
  |  | 1102|   142k|#define JANET_FUNCDEF_FLAG_HASDEFS 0x200000
  ------------------
  |  Branch (21346:13): [True: 18.6k, False: 124k]
  ------------------
21347|  18.6k|            def->defs = janet_calloc(1, sizeof(JanetFuncDef *) * (size_t) defs_length);
  ------------------
  |  | 2412|  18.6k|#define janet_calloc(X, Y) calloc((X), (Y))
  ------------------
21348|  18.6k|            if (!def->defs) {
  ------------------
  |  Branch (21348:17): [True: 0, False: 18.6k]
  ------------------
21349|      0|                JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
21350|      0|            }
21351|  60.3k|            for (int32_t i = 0; i < defs_length; i++) {
  ------------------
  |  Branch (21351:33): [True: 41.6k, False: 18.6k]
  ------------------
21352|  41.6k|                data = unmarshal_one_def(st, data, def->defs + i, flags + 1);
21353|  41.6k|            }
21354|   124k|        } else {
21355|   124k|            def->defs = NULL;
21356|   124k|        }
21357|   142k|        def->defs_length = defs_length;
21358|       |
21359|       |        /* Unmarshal source maps if needed */
21360|   142k|        if (def->flags & JANET_FUNCDEF_FLAG_HASSOURCEMAP) {
  ------------------
  |  | 1104|   142k|#define JANET_FUNCDEF_FLAG_HASSOURCEMAP 0x800000
  ------------------
  |  Branch (21360:13): [True: 134k, False: 8.81k]
  ------------------
21361|   134k|            int32_t current = 0;
21362|   134k|            def->sourcemap = array_allocate(sizeof(JanetSourceMapping), bytecode_length);
21363|   134k|            if (!def->sourcemap) {
  ------------------
  |  Branch (21363:17): [True: 0, False: 134k]
  ------------------
21364|      0|                JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
21365|      0|            }
21366|  3.97M|            for (int32_t i = 0; i < bytecode_length; i++) {
  ------------------
  |  Branch (21366:33): [True: 3.84M, False: 134k]
  ------------------
21367|  3.84M|                current += readint(st, &data);
21368|  3.84M|                def->sourcemap[i].line = current;
21369|  3.84M|                def->sourcemap[i].column = readint(st, &data);
21370|  3.84M|            }
21371|   134k|        } else {
21372|  8.81k|            def->sourcemap = NULL;
21373|  8.81k|        }
21374|       |
21375|       |        /* Unmarshal closure bitset if needed */
21376|   142k|        if (def->flags & JANET_FUNCDEF_FLAG_HASCLOBITSET) {
  ------------------
  |  | 1106|   142k|#define JANET_FUNCDEF_FLAG_HASCLOBITSET 0x2000000
  ------------------
  |  Branch (21376:13): [True: 15.7k, False: 127k]
  ------------------
21377|  15.7k|            int32_t n = ((def->slotcount - 1) >> 5) + 1;
21378|  15.7k|            def->closure_bitset = array_allocate(sizeof(uint32_t), n);
21379|  15.7k|            if (NULL == def->closure_bitset) {
  ------------------
  |  Branch (21379:17): [True: 0, False: 15.7k]
  ------------------
21380|      0|                JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
21381|      0|            }
21382|  15.7k|            data = janet_unmarshal_u32s(st, data, def->closure_bitset, n);
21383|  15.7k|        }
21384|       |
21385|       |        /* Validate */
21386|   142k|        int status;
21387|   142k|        if ((status = janet_verify(def))) {
  ------------------
  |  Branch (21387:13): [True: 0, False: 142k]
  ------------------
21388|      0|            janet_panicf("funcdef has invalid bytecode: %d", status);
21389|      0|        }
21390|       |
21391|       |        /* Set def */
21392|   142k|        *out = def;
21393|   142k|    }
21394|   143k|    return data;
21395|   143k|}
janet.c:janet_unmarshal_u32s:
21203|   158k|static const uint8_t *janet_unmarshal_u32s(UnmarshalState *st, const uint8_t *data, uint32_t *into, int32_t n) {
21204|  4.12M|    for (int32_t i = 0; i < n; i++) {
  ------------------
  |  Branch (21204:25): [True: 3.96M, False: 158k]
  ------------------
21205|  3.96M|        MARSH_EOS(st, data + 3);
  ------------------
  |  |21045|  3.96M|#define MARSH_EOS(st, data) do { \
  |  |21046|  3.96M|    if ((data) >= (st)->end) janet_panic("unexpected end of source");\
  |  |  ------------------
  |  |  |  Branch (21046:9): [True: 0, False: 3.96M]
  |  |  ------------------
  |  |21047|  3.96M|} while (0)
  |  |  ------------------
  |  |  |  Branch (21047:10): [Folded, False: 3.96M]
  |  |  ------------------
  ------------------
21206|  3.96M|        into[i] =
21207|  3.96M|            (uint32_t)(data[0]) |
21208|  3.96M|            ((uint32_t)(data[1]) << 8) |
21209|  3.96M|            ((uint32_t)(data[2]) << 16) |
21210|  3.96M|            ((uint32_t)(data[3]) << 24);
21211|  3.96M|        data += 4;
21212|  3.96M|    }
21213|   158k|    return data;
21214|   158k|}
janet.c:unmarshal_one_env:
21159|  11.4k|    int flags) {
21160|  11.4k|    MARSH_EOS(st, data);
  ------------------
  |  |21045|  11.4k|#define MARSH_EOS(st, data) do { \
  |  |21046|  11.4k|    if ((data) >= (st)->end) janet_panic("unexpected end of source");\
  |  |  ------------------
  |  |  |  Branch (21046:9): [True: 0, False: 11.4k]
  |  |  ------------------
  |  |21047|  11.4k|} while (0)
  |  |  ------------------
  |  |  |  Branch (21047:10): [Folded, False: 11.4k]
  |  |  ------------------
  ------------------
21161|  11.4k|    if (*data == LB_FUNCENV_REF) {
  ------------------
  |  Branch (21161:9): [True: 9.34k, False: 2.13k]
  ------------------
21162|  9.34k|        data++;
21163|  9.34k|        int32_t index = readint(st, &data);
21164|  9.34k|        if (index < 0 || index >= janet_v_count(st->lookup_envs))
  ------------------
  |  |  759|  9.34k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  9.34k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  9.34k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 9.34k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (21164:13): [True: 0, False: 9.34k]
  |  Branch (21164:26): [True: 0, False: 9.34k]
  ------------------
21165|      0|            janet_panicf("invalid funcenv reference %d", index);
21166|  9.34k|        *out = st->lookup_envs[index];
21167|  9.34k|    } else {
21168|  2.13k|        JanetFuncEnv *env = janet_gcalloc(JANET_MEMORY_FUNCENV, sizeof(JanetFuncEnv));
21169|  2.13k|        env->length = 0;
21170|  2.13k|        env->offset = 0;
21171|  2.13k|        env->as.values = NULL;
21172|  2.13k|        janet_v_push(st->lookup_envs, env);
  ------------------
  |  |  757|  2.13k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  2.13k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  2.13k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  1.86k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.86k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  1.86k|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.86k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 267, False: 1.86k]
  |  |  |  |  |  |  |  Branch (768:50): [True: 1.06k, False: 801]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|  1.33k|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  2.13k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  2.13k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
21173|  2.13k|        int32_t offset = readnat(st, &data);
21174|  2.13k|        int32_t length = readnat(st, &data);
21175|  2.13k|        if (offset > 0) {
  ------------------
  |  Branch (21175:13): [True: 0, False: 2.13k]
  ------------------
21176|      0|            Janet fiberv;
21177|       |            /* On stack variant */
21178|      0|            data = unmarshal_one(st, data, &fiberv, flags);
21179|      0|            janet_asserttype(fiberv, JANET_FIBER, st);
21180|      0|            env->as.fiber = janet_unwrap_fiber(fiberv);
  ------------------
  |  |  859|      0|#define janet_unwrap_fiber(x) ((JanetFiber *)janet_nanbox_to_pointer(x))
  ------------------
21181|       |            /* Negative offset indicates untrusted input */
21182|      0|            env->offset = -offset;
21183|  2.13k|        } else {
21184|       |            /* Off stack variant */
21185|  2.13k|            if (length == 0) {
  ------------------
  |  Branch (21185:17): [True: 0, False: 2.13k]
  ------------------
21186|      0|                janet_panic("invalid funcenv length");
21187|      0|            }
21188|  2.13k|            env->as.values = array_allocate(sizeof(Janet), length);
21189|  2.13k|            if (!env->as.values) {
  ------------------
  |  Branch (21189:17): [True: 0, False: 2.13k]
  ------------------
21190|      0|                JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
21191|      0|            }
21192|  2.13k|            env->offset = 0;
21193|  26.4k|            for (int32_t i = 0; i < length; i++)
  ------------------
  |  Branch (21193:33): [True: 24.2k, False: 2.13k]
  ------------------
21194|  24.2k|                data = unmarshal_one(st, data, env->as.values + i, flags);
21195|  2.13k|        }
21196|  2.13k|        env->length = length;
21197|  2.13k|        *out = env;
21198|  2.13k|    }
21199|  11.4k|    return data;
21200|  11.4k|}
janet.c:janet_asserttype:
21121|   267k|static void janet_asserttype(Janet x, JanetType t, UnmarshalState *st) {
21122|   267k|    if (!janet_checktype(x, t)) {
  ------------------
  |  |  806|   267k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [True: 0, False: 267k]
  |  |  ------------------
  |  |  807|   267k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   267k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   267k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   267k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   267k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   267k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (21122:9): [True: 0, False: 267k]
  ------------------
21123|       |#ifdef JANET_MARSHAL_DEBUG
21124|       |        dump_reference_table(st);
21125|       |#else
21126|      0|        (void) st;
21127|      0|#endif
21128|      0|        janet_panicf("expected type %T, got %v", 1 << t, x);
21129|      0|    }
21130|   267k|}
janet.c:janet_parser_checkdead:
27639|  23.5M|static void janet_parser_checkdead(JanetParser *parser) {
27640|  23.5M|    if (parser->flag) janet_panic("parser is dead, cannot consume");
  ------------------
  |  Branch (27640:9): [True: 0, False: 23.5M]
  ------------------
27641|  23.5M|    if (parser->error) janet_panic("parser has unchecked error, cannot consume");
  ------------------
  |  Branch (27641:9): [True: 0, False: 23.5M]
  ------------------
27642|  23.5M|}
janet.c:delim_error:
27149|     66|static void delim_error(JanetParser *parser, size_t stack_index, char c, const char *msg) {
27150|     66|    JanetParseState *s = parser->states + stack_index;
27151|     66|    JanetBuffer *buffer = janet_buffer(40);
27152|     66|    if (msg) {
  ------------------
  |  Branch (27152:9): [True: 66, False: 0]
  ------------------
27153|     66|        janet_buffer_push_cstring(buffer, msg);
27154|     66|    }
27155|     66|    if (c) {
  ------------------
  |  Branch (27155:9): [True: 66, False: 0]
  ------------------
27156|     66|        janet_buffer_push_u8(buffer, c);
27157|     66|    }
27158|     66|    if (stack_index > 0) {
  ------------------
  |  Branch (27158:9): [True: 4, False: 62]
  ------------------
27159|      4|        janet_buffer_push_cstring(buffer, ", ");
27160|      4|        if (s->flags & PFLAG_PARENS) {
  ------------------
  |  |27085|      4|#define PFLAG_PARENS 0x400
  ------------------
  |  Branch (27160:13): [True: 0, False: 4]
  ------------------
27161|      0|            janet_buffer_push_u8(buffer, '(');
27162|      4|        } else if (s->flags & PFLAG_SQRBRACKETS) {
  ------------------
  |  |27086|      4|#define PFLAG_SQRBRACKETS 0x800
  ------------------
  |  Branch (27162:20): [True: 0, False: 4]
  ------------------
27163|      0|            janet_buffer_push_u8(buffer, '[');
27164|      4|        } else if (s->flags & PFLAG_CURLYBRACKETS) {
  ------------------
  |  |27087|      4|#define PFLAG_CURLYBRACKETS 0x1000
  ------------------
  |  Branch (27164:20): [True: 1, False: 3]
  ------------------
27165|      1|            janet_buffer_push_u8(buffer, '{');
27166|      3|        } else if (s->flags & PFLAG_STRING) {
  ------------------
  |  |27088|      3|#define PFLAG_STRING 0x2000
  ------------------
  |  Branch (27166:20): [True: 0, False: 3]
  ------------------
27167|      0|            janet_buffer_push_u8(buffer, '"');
27168|      3|        } else if (s->flags & PFLAG_LONGSTRING) {
  ------------------
  |  |27089|      3|#define PFLAG_LONGSTRING 0x4000
  ------------------
  |  Branch (27168:20): [True: 0, False: 3]
  ------------------
27169|      0|            int32_t i;
27170|      0|            for (i = 0; i < s->argn; i++) {
  ------------------
  |  Branch (27170:25): [True: 0, False: 0]
  ------------------
27171|      0|                janet_buffer_push_u8(buffer, '`');
27172|      0|            }
27173|      0|        }
27174|      4|        janet_formatb(buffer, " opened at line %d, column %d", (int32_t) s->line, (int32_t) s->column);
27175|      4|    }
27176|     66|    parser->error = (const char *) janet_string(buffer->data, buffer->count);
27177|     66|    parser->flag |= JANET_PARSER_GENERATED_ERROR;
  ------------------
  |  |26979|     66|#define JANET_PARSER_GENERATED_ERROR 0x2
  ------------------
27178|     66|}
janet.c:pushstate:
27095|  9.41M|static void pushstate(JanetParser *p, Consumer consumer, int flags) {
27096|  9.41M|    JanetParseState s;
27097|  9.41M|    s.counter = 0;
27098|  9.41M|    s.argn = 0;
27099|  9.41M|    s.flags = flags;
27100|  9.41M|    s.consumer = consumer;
27101|  9.41M|    s.line = p->line;
27102|  9.41M|    s.column = p->column;
27103|  9.41M|    _pushstate(p, s);
27104|  9.41M|}
janet.c:root:
27566|  10.0M|static int root(JanetParser *p, JanetParseState *state, uint8_t c) {
27567|  10.0M|    switch (c) {
27568|  2.86M|        default:
  ------------------
  |  Branch (27568:9): [True: 2.86M, False: 7.16M]
  ------------------
27569|  2.86M|            if (is_whitespace(c)) return 1;
  ------------------
  |  Branch (27569:17): [True: 638k, False: 2.22M]
  ------------------
27570|  2.22M|            if (!janet_is_symbol_char(c)) {
  ------------------
  |  Branch (27570:17): [True: 36, False: 2.22M]
  ------------------
27571|     36|                p->error = "unexpected character";
27572|     36|                return 1;
27573|     36|            }
27574|  2.22M|            pushstate(p, tokenchar, PFLAG_TOKEN);
  ------------------
  |  |27093|  2.22M|#define PFLAG_TOKEN 0x40000
  ------------------
27575|  2.22M|            return 0;
27576|   218k|        case '\'':
  ------------------
  |  Branch (27576:9): [True: 218k, False: 9.80M]
  ------------------
27577|   721k|        case ',':
  ------------------
  |  Branch (27577:9): [True: 503k, False: 9.52M]
  ------------------
27578|   878k|        case ';':
  ------------------
  |  Branch (27578:9): [True: 156k, False: 9.87M]
  ------------------
27579|  1.38M|        case '~':
  ------------------
  |  Branch (27579:9): [True: 509k, False: 9.51M]
  ------------------
27580|  4.16M|        case '|':
  ------------------
  |  Branch (27580:9): [True: 2.77M, False: 7.25M]
  ------------------
27581|  4.16M|            pushstate(p, root, PFLAG_READERMAC | c);
  ------------------
  |  |27090|  4.16M|#define PFLAG_READERMAC 0x8000
  ------------------
27582|  4.16M|            return 1;
27583|  1.59M|        case '"':
  ------------------
  |  Branch (27583:9): [True: 1.59M, False: 8.43M]
  ------------------
27584|  1.59M|            pushstate(p, stringchar, PFLAG_STRING);
  ------------------
  |  |27088|  1.59M|#define PFLAG_STRING 0x2000
  ------------------
27585|  1.59M|            return 1;
27586|  1.81k|        case '#':
  ------------------
  |  Branch (27586:9): [True: 1.81k, False: 10.0M]
  ------------------
27587|  1.81k|            pushstate(p, comment, PFLAG_COMMENT);
  ------------------
  |  |27092|  1.81k|#define PFLAG_COMMENT 0x20000
  ------------------
27588|  1.81k|            return 1;
27589|  51.8k|        case '@':
  ------------------
  |  Branch (27589:9): [True: 51.8k, False: 9.97M]
  ------------------
27590|  51.8k|            pushstate(p, atsign, PFLAG_ATSYM);
  ------------------
  |  |27091|  51.8k|#define PFLAG_ATSYM 0x10000
  ------------------
27591|  51.8k|            return 1;
27592|   164k|        case '`':
  ------------------
  |  Branch (27592:9): [True: 164k, False: 9.86M]
  ------------------
27593|   164k|            pushstate(p, longstring, PFLAG_LONGSTRING);
  ------------------
  |  |27089|   164k|#define PFLAG_LONGSTRING 0x4000
  ------------------
27594|   164k|            return 1;
27595|  24.0k|        case ')':
  ------------------
  |  Branch (27595:9): [True: 24.0k, False: 10.0M]
  ------------------
27596|  25.1k|        case ']':
  ------------------
  |  Branch (27596:9): [True: 1.10k, False: 10.0M]
  ------------------
27597|  26.2k|        case '}': {
  ------------------
  |  Branch (27597:9): [True: 1.13k, False: 10.0M]
  ------------------
27598|  26.2k|            Janet ds;
27599|  26.2k|            if (p->statecount == 1) {
  ------------------
  |  Branch (27599:17): [True: 62, False: 26.2k]
  ------------------
27600|     62|                delim_error(p, 0, c, "unexpected closing delimiter ");
27601|     62|                return 1;
27602|     62|            }
27603|  26.2k|            if ((c == ')' && (state->flags & PFLAG_PARENS)) ||
  ------------------
  |  |27085|  23.9k|#define PFLAG_PARENS 0x400
  ------------------
  |  Branch (27603:18): [True: 23.9k, False: 2.23k]
  |  Branch (27603:30): [True: 23.9k, False: 3]
  ------------------
27604|  25.1k|                    (c == ']' && (state->flags & PFLAG_SQRBRACKETS))) {
  ------------------
  |  |27086|  1.10k|#define PFLAG_SQRBRACKETS 0x800
  ------------------
  |  Branch (27604:22): [True: 1.10k, False: 1.13k]
  |  Branch (27604:34): [True: 1.10k, False: 1]
  ------------------
27605|  25.1k|                if (state->flags & PFLAG_ATSYM) {
  ------------------
  |  |27091|  25.1k|#define PFLAG_ATSYM 0x10000
  ------------------
  |  Branch (27605:21): [True: 297, False: 24.8k]
  ------------------
27606|    297|                    ds = close_array(p, state);
27607|  24.8k|                } else {
27608|  24.8k|                    ds = close_tuple(p, state, c == ']' ? JANET_TUPLE_FLAG_BRACKETCTOR : 0);
  ------------------
  |  | 1798|    819|#define JANET_TUPLE_FLAG_BRACKETCTOR 0x10000
  ------------------
  |  Branch (27608:48): [True: 819, False: 23.9k]
  ------------------
27609|  24.8k|                }
27610|  25.1k|            } else if (c == '}' && (state->flags & PFLAG_CURLYBRACKETS)) {
  ------------------
  |  |27087|  1.12k|#define PFLAG_CURLYBRACKETS 0x1000
  ------------------
  |  Branch (27610:24): [True: 1.12k, False: 4]
  |  Branch (27610:36): [True: 1.12k, False: 0]
  ------------------
27611|  1.12k|                if (state->argn & 1) {
  ------------------
  |  Branch (27611:21): [True: 0, False: 1.12k]
  ------------------
27612|      0|                    p->error = "struct and table literals expect even number of arguments";
27613|      0|                    return 1;
27614|      0|                }
27615|  1.12k|                if (state->flags & PFLAG_ATSYM) {
  ------------------
  |  |27091|  1.12k|#define PFLAG_ATSYM 0x10000
  ------------------
  |  Branch (27615:21): [True: 922, False: 207]
  ------------------
27616|    922|                    ds = close_table(p, state);
27617|    922|                } else {
27618|    207|                    ds = close_struct(p, state);
27619|    207|                }
27620|  1.12k|            } else {
27621|      4|                delim_error(p, p->statecount - 1, c, "mismatched delimiter ");
27622|      4|                return 1;
27623|      4|            }
27624|  26.2k|            popstate(p, ds);
27625|  26.2k|        }
27626|      0|        return 1;
27627|   892k|        case '(':
  ------------------
  |  Branch (27627:9): [True: 892k, False: 9.13M]
  ------------------
27628|   892k|            pushstate(p, root, PFLAG_CONTAINER | PFLAG_PARENS);
  ------------------
  |  |27083|   892k|#define PFLAG_CONTAINER 0x100
  ------------------
                          pushstate(p, root, PFLAG_CONTAINER | PFLAG_PARENS);
  ------------------
  |  |27085|   892k|#define PFLAG_PARENS 0x400
  ------------------
27629|   892k|            return 1;
27630|   266k|        case '[':
  ------------------
  |  Branch (27630:9): [True: 266k, False: 9.76M]
  ------------------
27631|   266k|            pushstate(p, root, PFLAG_CONTAINER | PFLAG_SQRBRACKETS);
  ------------------
  |  |27083|   266k|#define PFLAG_CONTAINER 0x100
  ------------------
                          pushstate(p, root, PFLAG_CONTAINER | PFLAG_SQRBRACKETS);
  ------------------
  |  |27086|   266k|#define PFLAG_SQRBRACKETS 0x800
  ------------------
27632|   266k|            return 1;
27633|    678|        case '{':
  ------------------
  |  Branch (27633:9): [True: 678, False: 10.0M]
  ------------------
27634|    678|            pushstate(p, root, PFLAG_CONTAINER | PFLAG_CURLYBRACKETS);
  ------------------
  |  |27083|    678|#define PFLAG_CONTAINER 0x100
  ------------------
                          pushstate(p, root, PFLAG_CONTAINER | PFLAG_CURLYBRACKETS);
  ------------------
  |  |27087|    678|#define PFLAG_CURLYBRACKETS 0x1000
  ------------------
27635|    678|            return 1;
27636|  10.0M|    }
27637|  10.0M|}
janet.c:is_whitespace:
26982|  2.86M|static int is_whitespace(uint8_t c) {
26983|  2.86M|    return c == ' '
  ------------------
  |  Branch (26983:12): [True: 10.7k, False: 2.85M]
  ------------------
26984|  2.85M|           || c == '\t'
  ------------------
  |  Branch (26984:15): [True: 22.6k, False: 2.82M]
  ------------------
26985|  2.82M|           || c == '\n'
  ------------------
  |  Branch (26985:15): [True: 106k, False: 2.72M]
  ------------------
26986|  2.72M|           || c == '\r'
  ------------------
  |  Branch (26986:15): [True: 131k, False: 2.59M]
  ------------------
26987|  2.59M|           || c == '\0'
  ------------------
  |  Branch (26987:15): [True: 363k, False: 2.22M]
  ------------------
26988|  2.22M|           || c == '\v'
  ------------------
  |  Branch (26988:15): [True: 1.86k, False: 2.22M]
  ------------------
26989|  2.22M|           || c == '\f';
  ------------------
  |  Branch (26989:15): [True: 1.18k, False: 2.22M]
  ------------------
26990|  2.86M|}
janet.c:stringchar:
27361|  5.98M|static int stringchar(JanetParser *p, JanetParseState *state, uint8_t c) {
27362|       |    /* Enter escape */
27363|  5.98M|    if (c == '\\') {
  ------------------
  |  Branch (27363:9): [True: 10.3k, False: 5.96M]
  ------------------
27364|  10.3k|        state->consumer = escape1;
27365|  10.3k|        return 1;
27366|  10.3k|    }
27367|       |    /* String end */
27368|  5.96M|    if (c == '"') {
  ------------------
  |  Branch (27368:9): [True: 1.60M, False: 4.36M]
  ------------------
27369|  1.60M|        return stringend(p, state);
27370|  1.60M|    }
27371|       |    /* normal char */
27372|  4.36M|    if (c != '\n' && c != '\r')
  ------------------
  |  Branch (27372:9): [True: 4.33M, False: 30.0k]
  |  Branch (27372:22): [True: 4.33M, False: 36]
  ------------------
27373|  4.33M|        push_buf(p, c);
27374|  4.36M|    return 1;
27375|  5.96M|}
janet.c:escape1:
27276|  10.3k|static int escape1(JanetParser *p, JanetParseState *state, uint8_t c) {
27277|  10.3k|    int e = checkescape(c);
27278|  10.3k|    if (e < 0) {
  ------------------
  |  Branch (27278:9): [True: 0, False: 10.3k]
  ------------------
27279|      0|        p->error = "invalid string escape sequence";
27280|      0|        return 1;
27281|      0|    }
27282|  10.3k|    if (c == 'x') {
  ------------------
  |  Branch (27282:9): [True: 410, False: 9.96k]
  ------------------
27283|    410|        state->counter = 2;
27284|    410|        state->argn = 0;
27285|    410|        state->consumer = escapeh;
27286|  9.96k|    } else if (c == 'u' || c == 'U') {
  ------------------
  |  Branch (27286:16): [True: 17, False: 9.94k]
  |  Branch (27286:28): [True: 1.13k, False: 8.81k]
  ------------------
27287|  1.14k|        state->counter = c == 'u' ? 4 : 6;
  ------------------
  |  Branch (27287:26): [True: 17, False: 1.13k]
  ------------------
27288|  1.14k|        state->argn = 0;
27289|  1.14k|        state->consumer = escapeu;
27290|  8.81k|    } else {
27291|  8.81k|        push_buf(p, (uint8_t) e);
27292|  8.81k|        state->consumer = stringchar;
27293|  8.81k|    }
27294|  10.3k|    return 1;
27295|  10.3k|}
janet.c:checkescape:
27180|  10.3k|static int checkescape(uint8_t c) {
27181|  10.3k|    switch (c) {
27182|      0|        default:
  ------------------
  |  Branch (27182:9): [True: 0, False: 10.3k]
  ------------------
27183|      0|            return -1;
27184|    410|        case 'x':
  ------------------
  |  Branch (27184:9): [True: 410, False: 9.96k]
  ------------------
27185|    427|        case 'u':
  ------------------
  |  Branch (27185:9): [True: 17, False: 10.3k]
  ------------------
27186|  1.55k|        case 'U':
  ------------------
  |  Branch (27186:9): [True: 1.13k, False: 9.23k]
  ------------------
27187|  1.55k|            return 1;
27188|    420|        case 'n':
  ------------------
  |  Branch (27188:9): [True: 420, False: 9.95k]
  ------------------
27189|    420|            return '\n';
27190|      0|        case 't':
  ------------------
  |  Branch (27190:9): [True: 0, False: 10.3k]
  ------------------
27191|      0|            return '\t';
27192|    420|        case 'r':
  ------------------
  |  Branch (27192:9): [True: 420, False: 9.95k]
  ------------------
27193|    420|            return '\r';
27194|      0|        case '0':
  ------------------
  |  Branch (27194:9): [True: 0, False: 10.3k]
  ------------------
27195|      0|            return '\0';
27196|      0|        case 'z':
  ------------------
  |  Branch (27196:9): [True: 0, False: 10.3k]
  ------------------
27197|      0|            return '\0';
27198|      0|        case 'f':
  ------------------
  |  Branch (27198:9): [True: 0, False: 10.3k]
  ------------------
27199|      0|            return '\f';
27200|     10|        case 'v':
  ------------------
  |  Branch (27200:9): [True: 10, False: 10.3k]
  ------------------
27201|     10|            return '\v';
27202|      0|        case 'a':
  ------------------
  |  Branch (27202:9): [True: 0, False: 10.3k]
  ------------------
27203|      0|            return '\a';
27204|  5.30k|        case 'b':
  ------------------
  |  Branch (27204:9): [True: 5.30k, False: 5.06k]
  ------------------
27205|  5.30k|            return '\b';
27206|      0|        case '\'':
  ------------------
  |  Branch (27206:9): [True: 0, False: 10.3k]
  ------------------
27207|      0|            return '\'';
27208|      1|        case '?':
  ------------------
  |  Branch (27208:9): [True: 1, False: 10.3k]
  ------------------
27209|      1|            return '?';
27210|      0|        case 'e':
  ------------------
  |  Branch (27210:9): [True: 0, False: 10.3k]
  ------------------
27211|      0|            return 27;
27212|      0|        case '"':
  ------------------
  |  Branch (27212:9): [True: 0, False: 10.3k]
  ------------------
27213|      0|            return '"';
27214|  2.65k|        case '\\':
  ------------------
  |  Branch (27214:9): [True: 2.65k, False: 7.71k]
  ------------------
27215|  2.65k|            return '\\';
27216|  10.3k|    }
27217|  10.3k|}
janet.c:escapeh:
27240|    820|static int escapeh(JanetParser *p, JanetParseState *state, uint8_t c) {
27241|    820|    int digit = to_hex(c);
27242|    820|    if (digit < 0) {
  ------------------
  |  Branch (27242:9): [True: 0, False: 820]
  ------------------
27243|      0|        p->error = "invalid hex digit in hex escape";
27244|      0|        return 1;
27245|      0|    }
27246|    820|    state->argn = (state->argn << 4) + digit;
27247|    820|    state->counter--;
27248|    820|    if (!state->counter) {
  ------------------
  |  Branch (27248:9): [True: 410, False: 410]
  ------------------
27249|    410|        push_buf(p, (uint8_t)(state->argn & 0xFF));
27250|    410|        state->argn = 0;
27251|    410|        state->consumer = stringchar;
27252|    410|    }
27253|    820|    return 1;
27254|    820|}
janet.c:to_hex:
27045|  7.67k|static int to_hex(uint8_t c) {
27046|  7.67k|    if (c >= '0' && c <= '9') {
  ------------------
  |  Branch (27046:9): [True: 7.67k, False: 0]
  |  Branch (27046:21): [True: 1.59k, False: 6.07k]
  ------------------
27047|  1.59k|        return c - '0';
27048|  6.07k|    } else if (c >= 'A' && c <= 'F') {
  ------------------
  |  Branch (27048:16): [True: 6.07k, False: 0]
  |  Branch (27048:28): [True: 3.52k, False: 2.55k]
  ------------------
27049|  3.52k|        return 10 + c - 'A';
27050|  3.52k|    } else if (c >= 'a' && c <= 'f') {
  ------------------
  |  Branch (27050:16): [True: 2.54k, False: 1]
  |  Branch (27050:28): [True: 2.54k, False: 0]
  ------------------
27051|  2.54k|        return 10 + c - 'a';
27052|  2.54k|    } else {
27053|      1|        return -1;
27054|      1|    }
27055|  7.67k|}
janet.c:escapeu:
27256|  6.85k|static int escapeu(JanetParser *p, JanetParseState *state, uint8_t c) {
27257|  6.85k|    int digit = to_hex(c);
27258|  6.85k|    if (digit < 0) {
  ------------------
  |  Branch (27258:9): [True: 1, False: 6.85k]
  ------------------
27259|      1|        p->error = "invalid hex digit in unicode escape";
27260|      1|        return 1;
27261|      1|    }
27262|  6.85k|    state->argn = (state->argn << 4) + digit;
27263|  6.85k|    state->counter--;
27264|  6.85k|    if (!state->counter) {
  ------------------
  |  Branch (27264:9): [True: 1.14k, False: 5.70k]
  ------------------
27265|  1.14k|        if (state->argn > 0x10FFFF) {
  ------------------
  |  Branch (27265:13): [True: 0, False: 1.14k]
  ------------------
27266|      0|            p->error = "invalid unicode codepoint";
27267|      0|            return 1;
27268|      0|        }
27269|  1.14k|        write_codepoint(p, state->argn);
27270|  1.14k|        state->argn = 0;
27271|  1.14k|        state->consumer = stringchar;
27272|  1.14k|    }
27273|  6.85k|    return 1;
27274|  6.85k|}
janet.c:write_codepoint:
27222|  1.14k|static void write_codepoint(JanetParser *p, int32_t codepoint) {
27223|  1.14k|    if (codepoint <= 0x7F) {
  ------------------
  |  Branch (27223:9): [True: 0, False: 1.14k]
  ------------------
27224|      0|        push_buf(p, (uint8_t) codepoint);
27225|  1.14k|    } else if (codepoint <= 0x7FF) {
  ------------------
  |  Branch (27225:16): [True: 6, False: 1.14k]
  ------------------
27226|      6|        push_buf(p, (uint8_t)((codepoint >>  6) & 0x1F) | 0xC0);
27227|      6|        push_buf(p, (uint8_t)((codepoint >>  0) & 0x3F) | 0x80);
27228|  1.14k|    } else if (codepoint <= 0xFFFF) {
  ------------------
  |  Branch (27228:16): [True: 10, False: 1.13k]
  ------------------
27229|     10|        push_buf(p, (uint8_t)((codepoint >> 12) & 0x0F) | 0xE0);
27230|     10|        push_buf(p, (uint8_t)((codepoint >>  6) & 0x3F) | 0x80);
27231|     10|        push_buf(p, (uint8_t)((codepoint >>  0) & 0x3F) | 0x80);
27232|  1.13k|    } else {
27233|  1.13k|        push_buf(p, (uint8_t)((codepoint >> 18) & 0x07) | 0xF0);
27234|  1.13k|        push_buf(p, (uint8_t)((codepoint >> 12) & 0x3F) | 0x80);
27235|  1.13k|        push_buf(p, (uint8_t)((codepoint >>  6) & 0x3F) | 0x80);
27236|  1.13k|        push_buf(p, (uint8_t)((codepoint >>  0) & 0x3F) | 0x80);
27237|  1.13k|    }
27238|  1.14k|}
janet.c:stringend:
27297|  1.76M|static int stringend(JanetParser *p, JanetParseState *state) {
27298|  1.76M|    Janet ret;
27299|  1.76M|    uint8_t *bufstart = p->buf;
27300|  1.76M|    int32_t buflen = (int32_t) p->bufcount;
27301|  1.76M|    if (state->flags & PFLAG_LONGSTRING) {
  ------------------
  |  |27089|  1.76M|#define PFLAG_LONGSTRING 0x4000
  ------------------
  |  Branch (27301:9): [True: 164k, False: 1.60M]
  ------------------
27302|       |        /* Post process to remove leading whitespace */
27303|   164k|        JanetParseState top = p->states[p->statecount - 1];
27304|   164k|        int32_t indent_col = (int32_t) top.column - 1;
27305|   164k|        uint8_t *r = bufstart, *end = r + buflen;
27306|       |        /* Unless there are only spaces before EOLs, disable reindenting */
27307|   164k|        int reindent = 1;
27308|  1.92M|        while (reindent && (r < end)) {
  ------------------
  |  Branch (27308:16): [True: 1.92M, False: 104]
  |  Branch (27308:28): [True: 1.76M, False: 164k]
  ------------------
27309|  1.76M|            if (*r++ == '\n') {
  ------------------
  |  Branch (27309:17): [True: 2.90k, False: 1.76M]
  ------------------
27310|  2.90k|                for (int32_t j = 0; (r < end) && (*r != '\n') && (j < indent_col); j++, r++) {
  ------------------
  |  Branch (27310:37): [True: 2.24k, False: 669]
  |  Branch (27310:50): [True: 1.53k, False: 703]
  |  Branch (27310:66): [True: 156, False: 1.38k]
  ------------------
27311|    156|                    if (*r != ' ') {
  ------------------
  |  Branch (27311:25): [True: 156, False: 0]
  ------------------
27312|    156|                        reindent = 0;
27313|    156|                        break;
27314|    156|                    }
27315|    156|                }
27316|  2.90k|                if ((r + 1) < end && *r == '\r' && *(r + 1) == '\n') reindent = 1;
  ------------------
  |  Branch (27316:21): [True: 2.17k, False: 739]
  |  Branch (27316:38): [True: 592, False: 1.57k]
  |  Branch (27316:52): [True: 404, False: 188]
  ------------------
27317|  2.90k|            }
27318|  1.76M|        }
27319|       |        /* Now reindent if able */
27320|   164k|        if (reindent) {
  ------------------
  |  Branch (27320:13): [True: 164k, False: 104]
  ------------------
27321|   164k|            uint8_t *w = bufstart;
27322|   164k|            r = bufstart;
27323|  1.92M|            while (r < end) {
  ------------------
  |  Branch (27323:20): [True: 1.75M, False: 164k]
  ------------------
27324|  1.75M|                if (*r == '\n') {
  ------------------
  |  Branch (27324:21): [True: 2.71k, False: 1.75M]
  ------------------
27325|  2.71k|                    *w++ = *r++;
27326|  2.76k|                    for (int32_t j = 0; (r < end) && (*r != '\n') && (j < indent_col); j++, r++);
  ------------------
  |  Branch (27326:41): [True: 2.09k, False: 669]
  |  Branch (27326:54): [True: 1.43k, False: 665]
  |  Branch (27326:70): [True: 52, False: 1.38k]
  ------------------
27327|  2.71k|                    if ((r + 1) < end && *r == '\r' && *(r + 1) == '\n') *w++ = *r++;
  ------------------
  |  Branch (27327:25): [True: 1.92k, False: 786]
  |  Branch (27327:42): [True: 540, False: 1.38k]
  |  Branch (27327:56): [True: 352, False: 188]
  ------------------
27328|  1.75M|                } else {
27329|  1.75M|                    *w++ = *r++;
27330|  1.75M|                }
27331|  1.75M|            }
27332|   164k|            buflen = (int32_t)(w - bufstart);
27333|   164k|        }
27334|       |        /* Check for leading EOL so we can remove it */
27335|   164k|        if (buflen > 1 && bufstart[0] == '\r' && bufstart[1] == '\n') { /* Windows EOL */
  ------------------
  |  Branch (27335:13): [True: 39.7k, False: 124k]
  |  Branch (27335:27): [True: 296, False: 39.4k]
  |  Branch (27335:50): [True: 156, False: 140]
  ------------------
27336|    156|            buflen = buflen - 2;
27337|    156|            bufstart = bufstart + 2;
27338|   164k|        } else if (buflen > 0 && bufstart[0] == '\n') { /* Unix EOL */
  ------------------
  |  Branch (27338:20): [True: 164k, False: 0]
  |  Branch (27338:34): [True: 356, False: 164k]
  ------------------
27339|    356|            buflen--;
27340|    356|            bufstart++;
27341|    356|        }
27342|       |        /* Check for trailing EOL so we can remove it */
27343|   164k|        if (buflen > 1 && bufstart[buflen - 2] == '\r' && bufstart[buflen - 1] == '\n') { /* Windows EOL */
  ------------------
  |  Branch (27343:13): [True: 39.5k, False: 125k]
  |  Branch (27343:27): [True: 378, False: 39.2k]
  |  Branch (27343:59): [True: 321, False: 57]
  ------------------
27344|    321|            buflen = buflen - 2;
27345|   164k|        } else if (buflen > 0 && bufstart[buflen - 1] == '\n') { /* Unix EOL */
  ------------------
  |  Branch (27345:20): [True: 164k, False: 271]
  |  Branch (27345:34): [True: 115, False: 164k]
  ------------------
27346|    115|            buflen--;
27347|    115|        }
27348|   164k|    }
27349|  1.76M|    if (state->flags & PFLAG_BUFFER) {
  ------------------
  |  |27084|  1.76M|#define PFLAG_BUFFER 0x200
  ------------------
  |  Branch (27349:9): [True: 4.17k, False: 1.76M]
  ------------------
27350|  4.17k|        JanetBuffer *b = janet_buffer(buflen);
27351|  4.17k|        janet_buffer_push_bytes(b, bufstart, buflen);
27352|  4.17k|        ret = janet_wrap_buffer(b);
  ------------------
  |  |  847|  4.17k|#define janet_wrap_buffer(s) janet_nanbox_wrap_((s), JANET_BUFFER)
  |  |  ------------------
  |  |  |  |  825|  4.17k|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  4.17k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  4.17k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
27353|  1.76M|    } else {
27354|  1.76M|        ret = janet_wrap_string(janet_string(bufstart, buflen));
  ------------------
  |  |  848|  1.76M|#define janet_wrap_string(s) janet_nanbox_wrap_c((s), JANET_STRING)
  |  |  ------------------
  |  |  |  |  828|  1.76M|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.76M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.76M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
27355|  1.76M|    }
27356|  1.76M|    p->bufcount = 0;
27357|  1.76M|    popstate(p, ret);
27358|  1.76M|    return 1;
27359|  1.76M|}
janet.c:comment:
27443|  1.23M|static int comment(JanetParser *p, JanetParseState *state, uint8_t c) {
27444|  1.23M|    (void) state;
27445|  1.23M|    if (c == '\n') {
  ------------------
  |  Branch (27445:9): [True: 1.80k, False: 1.23M]
  ------------------
27446|  1.80k|        p->statecount--;
27447|  1.80k|        p->bufcount = 0;
27448|  1.23M|    } else {
27449|  1.23M|        push_buf(p, c);
27450|  1.23M|    }
27451|  1.23M|    return 1;
27452|  1.23M|}
janet.c:atsign:
27538|  51.8k|static int atsign(JanetParser *p, JanetParseState *state, uint8_t c) {
27539|  51.8k|    (void) state;
27540|  51.8k|    p->statecount--;
27541|  51.8k|    switch (c) {
27542|    922|        case '{':
  ------------------
  |  Branch (27542:9): [True: 922, False: 50.9k]
  ------------------
27543|    922|            pushstate(p, root, PFLAG_CONTAINER | PFLAG_CURLYBRACKETS | PFLAG_ATSYM);
  ------------------
  |  |27083|    922|#define PFLAG_CONTAINER 0x100
  ------------------
                          pushstate(p, root, PFLAG_CONTAINER | PFLAG_CURLYBRACKETS | PFLAG_ATSYM);
  ------------------
  |  |27087|    922|#define PFLAG_CURLYBRACKETS 0x1000
  ------------------
                          pushstate(p, root, PFLAG_CONTAINER | PFLAG_CURLYBRACKETS | PFLAG_ATSYM);
  ------------------
  |  |27091|    922|#define PFLAG_ATSYM 0x10000
  ------------------
27544|    922|            return 1;
27545|  4.08k|        case '"':
  ------------------
  |  Branch (27545:9): [True: 4.08k, False: 47.8k]
  ------------------
27546|  4.08k|            pushstate(p, stringchar, PFLAG_BUFFER | PFLAG_STRING);
  ------------------
  |  |27084|  4.08k|#define PFLAG_BUFFER 0x200
  ------------------
                          pushstate(p, stringchar, PFLAG_BUFFER | PFLAG_STRING);
  ------------------
  |  |27088|  4.08k|#define PFLAG_STRING 0x2000
  ------------------
27547|  4.08k|            return 1;
27548|     88|        case '`':
  ------------------
  |  Branch (27548:9): [True: 88, False: 51.8k]
  ------------------
27549|     88|            pushstate(p, longstring, PFLAG_BUFFER | PFLAG_LONGSTRING);
  ------------------
  |  |27084|     88|#define PFLAG_BUFFER 0x200
  ------------------
                          pushstate(p, longstring, PFLAG_BUFFER | PFLAG_LONGSTRING);
  ------------------
  |  |27089|     88|#define PFLAG_LONGSTRING 0x4000
  ------------------
27550|     88|            return 1;
27551|    293|        case '[':
  ------------------
  |  Branch (27551:9): [True: 293, False: 51.5k]
  ------------------
27552|    293|            pushstate(p, root, PFLAG_CONTAINER | PFLAG_SQRBRACKETS | PFLAG_ATSYM);
  ------------------
  |  |27083|    293|#define PFLAG_CONTAINER 0x100
  ------------------
                          pushstate(p, root, PFLAG_CONTAINER | PFLAG_SQRBRACKETS | PFLAG_ATSYM);
  ------------------
  |  |27086|    293|#define PFLAG_SQRBRACKETS 0x800
  ------------------
                          pushstate(p, root, PFLAG_CONTAINER | PFLAG_SQRBRACKETS | PFLAG_ATSYM);
  ------------------
  |  |27091|    293|#define PFLAG_ATSYM 0x10000
  ------------------
27553|    293|            return 1;
27554|  45.1k|        case '(':
  ------------------
  |  Branch (27554:9): [True: 45.1k, False: 6.72k]
  ------------------
27555|  45.1k|            pushstate(p, root, PFLAG_CONTAINER | PFLAG_PARENS | PFLAG_ATSYM);
  ------------------
  |  |27083|  45.1k|#define PFLAG_CONTAINER 0x100
  ------------------
                          pushstate(p, root, PFLAG_CONTAINER | PFLAG_PARENS | PFLAG_ATSYM);
  ------------------
  |  |27085|  45.1k|#define PFLAG_PARENS 0x400
  ------------------
                          pushstate(p, root, PFLAG_CONTAINER | PFLAG_PARENS | PFLAG_ATSYM);
  ------------------
  |  |27091|  45.1k|#define PFLAG_ATSYM 0x10000
  ------------------
27556|  45.1k|            return 1;
27557|  1.33k|        default:
  ------------------
  |  Branch (27557:9): [True: 1.33k, False: 50.5k]
  ------------------
27558|  1.33k|            break;
27559|  51.8k|    }
27560|  1.33k|    pushstate(p, tokenchar, PFLAG_TOKEN);
  ------------------
  |  |27093|  1.33k|#define PFLAG_TOKEN 0x40000
  ------------------
27561|  1.33k|    push_buf(p, '@'); /* Push the leading at-sign that was dropped */
27562|  1.33k|    return 0;
27563|  51.8k|}
janet.c:longstring:
27494|  2.40M|static int longstring(JanetParser *p, JanetParseState *state, uint8_t c) {
27495|  2.40M|    if (state->flags & PFLAG_INSTRING) {
  ------------------
  |  |27492|  2.40M|#define PFLAG_INSTRING 0x100000
  ------------------
  |  Branch (27495:9): [True: 2.02M, False: 382k]
  ------------------
27496|       |        /* We are inside the long string */
27497|  2.02M|        if (c == '`') {
  ------------------
  |  Branch (27497:13): [True: 216k, False: 1.80M]
  ------------------
27498|   216k|            state->flags |= PFLAG_END_CANDIDATE;
  ------------------
  |  |27493|   216k|#define PFLAG_END_CANDIDATE 0x200000
  ------------------
27499|   216k|            state->flags &= ~PFLAG_INSTRING;
  ------------------
  |  |27492|   216k|#define PFLAG_INSTRING 0x100000
  ------------------
27500|   216k|            state->counter = 1; /* Use counter to keep track of number of '=' seen */
27501|   216k|            return 1;
27502|   216k|        }
27503|  1.80M|        push_buf(p, c);
27504|  1.80M|        return 1;
27505|  2.02M|    } else if (state->flags & PFLAG_END_CANDIDATE) {
  ------------------
  |  |27493|   382k|#define PFLAG_END_CANDIDATE 0x200000
  ------------------
  |  Branch (27505:16): [True: 216k, False: 165k]
  ------------------
27506|   216k|        int i;
27507|       |        /* We are checking a potential end of the string */
27508|   216k|        if (state->counter == state->argn) {
  ------------------
  |  Branch (27508:13): [True: 164k, False: 52.2k]
  ------------------
27509|   164k|            stringend(p, state);
27510|   164k|            return 0;
27511|   164k|        }
27512|  52.2k|        if (c == '`' && state->counter < state->argn) {
  ------------------
  |  Branch (27512:13): [True: 341, False: 51.9k]
  |  Branch (27512:25): [True: 341, False: 0]
  ------------------
27513|    341|            state->counter++;
27514|    341|            return 1;
27515|    341|        }
27516|       |        /* Failed end candidate */
27517|   103k|        for (i = 0; i < state->counter; i++) {
  ------------------
  |  Branch (27517:21): [True: 51.9k, False: 51.9k]
  ------------------
27518|  51.9k|            push_buf(p, '`');
27519|  51.9k|        }
27520|  51.9k|        push_buf(p, c);
27521|  51.9k|        state->counter = 0;
27522|  51.9k|        state->flags &= ~PFLAG_END_CANDIDATE;
  ------------------
  |  |27493|  51.9k|#define PFLAG_END_CANDIDATE 0x200000
  ------------------
27523|  51.9k|        state->flags |= PFLAG_INSTRING;
  ------------------
  |  |27492|  51.9k|#define PFLAG_INSTRING 0x100000
  ------------------
27524|  51.9k|        return 1;
27525|   165k|    } else {
27526|       |        /* We are at beginning of string */
27527|   165k|        state->argn++;
27528|   165k|        if (c != '`') {
  ------------------
  |  Branch (27528:13): [True: 164k, False: 442]
  ------------------
27529|   164k|            state->flags |= PFLAG_INSTRING;
  ------------------
  |  |27492|   164k|#define PFLAG_INSTRING 0x100000
  ------------------
27530|   164k|            push_buf(p, c);
27531|   164k|        }
27532|   165k|        return 1;
27533|   165k|    }
27534|  2.40M|}
janet.c:close_array:
27462|    297|static Janet close_array(JanetParser *p, JanetParseState *state) {
27463|    297|    JanetArray *array = janet_array(state->argn);
27464|  16.0k|    for (int32_t i = state->argn - 1; i >= 0; i--)
  ------------------
  |  Branch (27464:39): [True: 15.7k, False: 297]
  ------------------
27465|  15.7k|        array->data[i] = p->args[--p->argcount];
27466|    297|    array->count = state->argn;
27467|    297|    return janet_wrap_array(array);
  ------------------
  |  |  845|    297|#define janet_wrap_array(s) janet_nanbox_wrap_((s), JANET_ARRAY)
  |  |  ------------------
  |  |  |  |  825|    297|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    297|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    297|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
27468|    297|}
janet.c:close_tuple:
27454|  24.8k|static Janet close_tuple(JanetParser *p, JanetParseState *state, int32_t flag) {
27455|  24.8k|    Janet *ret = janet_tuple_begin(state->argn);
27456|  24.8k|    janet_tuple_flag(ret) |= flag;
  ------------------
  |  | 1806|  24.8k|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|  24.8k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
27457|  2.02M|    for (int32_t i = state->argn - 1; i >= 0; i--)
  ------------------
  |  Branch (27457:39): [True: 2.00M, False: 24.8k]
  ------------------
27458|  2.00M|        ret[i] = p->args[--p->argcount];
27459|  24.8k|    return janet_wrap_tuple(janet_tuple_end(ret));
  ------------------
  |  |  843|  24.8k|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|  24.8k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  24.8k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  24.8k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
27460|  24.8k|}
janet.c:close_table:
27481|    922|static Janet close_table(JanetParser *p, JanetParseState *state) {
27482|    922|    JanetTable *table = janet_table(state->argn >> 1);
27483|  2.71k|    for (size_t i = p->argcount - state->argn; i < p->argcount; i += 2) {
  ------------------
  |  Branch (27483:48): [True: 1.79k, False: 922]
  ------------------
27484|  1.79k|        Janet key = p->args[i];
27485|  1.79k|        Janet value = p->args[i + 1];
27486|  1.79k|        janet_table_put(table, key, value);
27487|  1.79k|    }
27488|    922|    p->argcount -= state->argn;
27489|    922|    return janet_wrap_table(table);
  ------------------
  |  |  846|    922|#define janet_wrap_table(s) janet_nanbox_wrap_((s), JANET_TABLE)
  |  |  ------------------
  |  |  |  |  825|    922|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    922|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    922|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
27490|    922|}
janet.c:close_struct:
27470|    207|static Janet close_struct(JanetParser *p, JanetParseState *state) {
27471|    207|    JanetKV *st = janet_struct_begin(state->argn >> 1);
27472|   494k|    for (size_t i = p->argcount - state->argn; i < p->argcount; i += 2) {
  ------------------
  |  Branch (27472:48): [True: 494k, False: 207]
  ------------------
27473|   494k|        Janet key = p->args[i];
27474|   494k|        Janet value = p->args[i + 1];
27475|   494k|        janet_struct_put(st, key, value);
27476|   494k|    }
27477|    207|    p->argcount -= state->argn;
27478|    207|    return janet_wrap_struct(janet_struct_end(st));
  ------------------
  |  |  842|    207|#define janet_wrap_struct(s) janet_nanbox_wrap_c((s), JANET_STRUCT)
  |  |  ------------------
  |  |  |  |  828|    207|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    207|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    207|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
27479|    207|}
janet.c:popstate:
27106|  4.01M|static void popstate(JanetParser *p, Janet val) {
27107|  7.97M|    for (;;) {
27108|  7.97M|        JanetParseState top = p->states[--p->statecount];
27109|  7.97M|        JanetParseState *newtop = p->states + p->statecount - 1;
27110|       |        /* Source mapping info */
27111|  7.97M|        if (janet_checktype(val, JANET_TUPLE)) {
  ------------------
  |  |  806|  7.97M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 3.98M, False: 3.99M]
  |  |  |  Branch (806:6): [Folded, False: 7.97M]
  |  |  ------------------
  |  |  807|  7.97M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  7.97M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  7.97M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  7.97M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  7.97M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  7.97M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
27112|  3.98M|            janet_tuple_sm_line(janet_unwrap_tuple(val)) = (int32_t) top.line;
  ------------------
  |  | 1804|  3.98M|#define janet_tuple_sm_line(t) (janet_tuple_head(t)->sm_line)
  |  |  ------------------
  |  |  |  | 1800|  3.98M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
27113|  3.98M|            janet_tuple_sm_column(janet_unwrap_tuple(val)) = (int32_t) top.column;
  ------------------
  |  | 1805|  3.98M|#define janet_tuple_sm_column(t) (janet_tuple_head(t)->sm_column)
  |  |  ------------------
  |  |  |  | 1800|  3.98M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
27114|  3.98M|        }
27115|  7.97M|        if (newtop->flags & PFLAG_CONTAINER) {
  ------------------
  |  |27083|  7.97M|#define PFLAG_CONTAINER 0x100
  ------------------
  |  Branch (27115:13): [True: 4.01M, False: 3.96M]
  ------------------
27116|  4.01M|            newtop->argn++;
27117|       |            /* Keep track of number of values in the root state */
27118|  4.01M|            if (p->statecount == 1) {
  ------------------
  |  Branch (27118:17): [True: 30.0k, False: 3.98M]
  ------------------
27119|  30.0k|                p->pending++;
27120|       |                /* Root items are always wrapped in a tuple for source map info. */
27121|  30.0k|                const Janet *tup = janet_tuple_n(&val, 1);
27122|  30.0k|                janet_tuple_sm_line(tup) = (int32_t) top.line;
  ------------------
  |  | 1804|  30.0k|#define janet_tuple_sm_line(t) (janet_tuple_head(t)->sm_line)
  |  |  ------------------
  |  |  |  | 1800|  30.0k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
27123|  30.0k|                janet_tuple_sm_column(tup) = (int32_t) top.column;
  ------------------
  |  | 1805|  30.0k|#define janet_tuple_sm_column(t) (janet_tuple_head(t)->sm_column)
  |  |  ------------------
  |  |  |  | 1800|  30.0k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
27124|  30.0k|                val = janet_wrap_tuple(tup);
  ------------------
  |  |  843|  30.0k|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|  30.0k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  30.0k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  30.0k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
27125|  30.0k|            }
27126|  4.01M|            push_arg(p, val);
27127|  4.01M|            return;
27128|  4.01M|        } else if (newtop->flags & PFLAG_READERMAC) {
  ------------------
  |  |27090|  3.96M|#define PFLAG_READERMAC 0x8000
  ------------------
  |  Branch (27128:20): [True: 3.96M, False: 0]
  ------------------
27129|  3.96M|            Janet *t = janet_tuple_begin(2);
27130|  3.96M|            int c = newtop->flags & 0xFF;
27131|  3.96M|            const char *which =
27132|  3.96M|                (c == '\'') ? "quote" :
  ------------------
  |  Branch (27132:17): [True: 218k, False: 3.74M]
  ------------------
27133|  3.96M|                (c == ',') ? "unquote" :
  ------------------
  |  Branch (27133:17): [True: 503k, False: 3.23M]
  ------------------
27134|  3.74M|                (c == ';') ? "splice" :
  ------------------
  |  Branch (27134:17): [True: 156k, False: 3.08M]
  ------------------
27135|  3.23M|                (c == '|') ? "short-fn" :
  ------------------
  |  Branch (27135:17): [True: 2.59M, False: 488k]
  ------------------
27136|  3.08M|                (c == '~') ? "quasiquote" : "<unknown>";
  ------------------
  |  Branch (27136:17): [True: 488k, False: 0]
  ------------------
27137|  3.96M|            t[0] = janet_csymbolv(which);
  ------------------
  |  | 1837|  3.96M|#define janet_csymbolv(cstr) janet_wrap_symbol(janet_csymbol(cstr))
  |  |  ------------------
  |  |  |  |  849|  3.96M|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|  3.96M|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  3.96M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  3.96M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
27138|  3.96M|            t[1] = val;
27139|       |            /* Quote source mapping info */
27140|  3.96M|            janet_tuple_sm_line(t) = (int32_t) newtop->line;
  ------------------
  |  | 1804|  3.96M|#define janet_tuple_sm_line(t) (janet_tuple_head(t)->sm_line)
  |  |  ------------------
  |  |  |  | 1800|  3.96M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
27141|  3.96M|            janet_tuple_sm_column(t) = (int32_t) newtop->column;
  ------------------
  |  | 1805|  3.96M|#define janet_tuple_sm_column(t) (janet_tuple_head(t)->sm_column)
  |  |  ------------------
  |  |  |  | 1800|  3.96M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
27142|  3.96M|            val = janet_wrap_tuple(janet_tuple_end(t));
  ------------------
  |  |  843|  3.96M|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|  3.96M|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  3.96M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  3.96M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
27143|  3.96M|        } else {
27144|      0|            return;
27145|      0|        }
27146|  7.97M|    }
27147|  4.01M|}
janet.c:tokenchar:
27390|  8.46M|static int tokenchar(JanetParser *p, JanetParseState *state, uint8_t c) {
27391|  8.46M|    Janet ret;
27392|  8.46M|    double numval;
27393|  8.46M|    int32_t blen;
27394|  8.46M|    if (janet_is_symbol_char(c)) {
  ------------------
  |  Branch (27394:9): [True: 6.23M, False: 2.22M]
  ------------------
27395|  6.23M|        push_buf(p, (uint8_t) c);
27396|  6.23M|        if (c > 127) state->argn = 1; /* Use to indicate non ascii */
  ------------------
  |  Branch (27396:13): [True: 7.56k, False: 6.23M]
  ------------------
27397|  6.23M|        return 1;
27398|  6.23M|    }
27399|       |    /* Token finished */
27400|  2.22M|    blen = (int32_t) p->bufcount;
27401|  2.22M|    int start_dig = p->buf[0] >= '0' && p->buf[0] <= '9';
  ------------------
  |  Branch (27401:21): [True: 971k, False: 1.25M]
  |  Branch (27401:41): [True: 157k, False: 814k]
  ------------------
27402|  2.22M|    int start_num = start_dig || p->buf[0] == '-' || p->buf[0] == '+' || p->buf[0] == '.';
  ------------------
  |  Branch (27402:21): [True: 157k, False: 2.06M]
  |  Branch (27402:34): [True: 720k, False: 1.34M]
  |  Branch (27402:54): [True: 128k, False: 1.21M]
  |  Branch (27402:74): [True: 175k, False: 1.04M]
  ------------------
27403|  2.22M|    if (p->buf[0] == ':') {
  ------------------
  |  Branch (27403:9): [True: 7.58k, False: 2.21M]
  ------------------
27404|       |        /* Don't do full utf-8 check unless we have seen non ascii characters. */
27405|  7.58k|        int valid = (!state->argn) || janet_valid_utf8(p->buf + 1, blen - 1);
  ------------------
  |  Branch (27405:21): [True: 7.58k, False: 2]
  |  Branch (27405:39): [True: 2, False: 0]
  ------------------
27406|  7.58k|        if (!valid) {
  ------------------
  |  Branch (27406:13): [True: 0, False: 7.58k]
  ------------------
27407|      0|            p->error = "invalid utf-8 in keyword";
27408|      0|            return 0;
27409|      0|        }
27410|  7.58k|        ret = janet_keywordv(p->buf + 1, blen - 1);
  ------------------
  |  | 1842|  7.58k|#define janet_keywordv(str, len) janet_wrap_keyword(janet_keyword((str), (len)))
  |  |  ------------------
  |  |  |  |  850|  7.58k|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|  7.58k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  7.58k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  7.58k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
27411|  7.58k|#ifdef JANET_INT_TYPES
27412|  2.21M|    } else if (start_num && !janet_scan_numeric(p->buf, blen, &ret)) {
  ------------------
  |  Branch (27412:16): [True: 1.18M, False: 1.03M]
  |  Branch (27412:29): [True: 252k, False: 928k]
  ------------------
27413|   252k|        (void) numval;
27414|       |#else
27415|       |    } else if (start_num && !janet_scan_number(p->buf, blen, &numval)) {
27416|       |        ret = janet_wrap_number(numval);
27417|       |#endif
27418|  1.96M|    } else if (!check_str_const("nil", p->buf, blen)) {
  ------------------
  |  Branch (27418:16): [True: 476, False: 1.96M]
  ------------------
27419|    476|        ret = janet_wrap_nil();
  ------------------
  |  |  831|    476|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|    476|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    476|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    476|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
27420|  1.96M|    } else if (!check_str_const("false", p->buf, blen)) {
  ------------------
  |  Branch (27420:16): [True: 17, False: 1.96M]
  ------------------
27421|     17|        ret = janet_wrap_false();
  ------------------
  |  |  833|     17|#define janet_wrap_false() janet_nanbox_from_payload(JANET_BOOLEAN, 0)
  |  |  ------------------
  |  |  |  |  822|     17|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|     17|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|     17|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
27422|  1.96M|    } else if (!check_str_const("true", p->buf, blen)) {
  ------------------
  |  Branch (27422:16): [True: 19, False: 1.96M]
  ------------------
27423|     19|        ret = janet_wrap_true();
  ------------------
  |  |  832|     19|#define janet_wrap_true() janet_nanbox_from_payload(JANET_BOOLEAN, 1)
  |  |  ------------------
  |  |  |  |  822|     19|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|     19|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|     19|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
27424|  1.96M|    } else {
27425|  1.96M|        if (start_dig) {
  ------------------
  |  Branch (27425:13): [True: 9, False: 1.96M]
  ------------------
27426|      9|            p->error = "symbol literal cannot start with a digit";
27427|      9|            return 0;
27428|  1.96M|        } else {
27429|       |            /* Don't do full utf-8 check unless we have seen non ascii characters. */
27430|  1.96M|            int valid = (!state->argn) || janet_valid_utf8(p->buf, blen);
  ------------------
  |  Branch (27430:25): [True: 1.96M, False: 2.54k]
  |  Branch (27430:43): [True: 2.47k, False: 71]
  ------------------
27431|  1.96M|            if (!valid) {
  ------------------
  |  Branch (27431:17): [True: 71, False: 1.96M]
  ------------------
27432|     71|                p->error = "invalid utf-8 in symbol";
27433|     71|                return 0;
27434|     71|            }
27435|  1.96M|            ret = janet_symbolv(p->buf, blen);
  ------------------
  |  | 1836|  1.96M|#define janet_symbolv(str, len) janet_wrap_symbol(janet_symbol((str), (len)))
  |  |  ------------------
  |  |  |  |  849|  1.96M|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|  1.96M|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  1.96M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  1.96M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
27436|  1.96M|        }
27437|  1.96M|    }
27438|  2.22M|    p->bufcount = 0;
27439|  2.22M|    popstate(p, ret);
27440|  2.22M|    return 0;
27441|  2.22M|}
janet.c:check_str_const:
27378|  5.89M|static int check_str_const(const char *cstr, const uint8_t *str, int32_t len) {
27379|  5.89M|    int32_t index;
27380|  5.93M|    for (index = 0; index < len; index++) {
  ------------------
  |  Branch (27380:21): [True: 5.89M, False: 34.8k]
  ------------------
27381|  5.89M|        uint8_t c = str[index];
27382|  5.89M|        uint8_t k = ((const uint8_t *)cstr)[index];
27383|  5.89M|        if (c < k) return -1;
  ------------------
  |  Branch (27383:13): [True: 5.55M, False: 346k]
  ------------------
27384|   346k|        if (c > k) return 1;
  ------------------
  |  Branch (27384:13): [True: 309k, False: 36.8k]
  ------------------
27385|  36.8k|        if (k == '\0') break;
  ------------------
  |  Branch (27385:13): [True: 0, False: 36.8k]
  ------------------
27386|  36.8k|    }
27387|  34.8k|    return (cstr[index] == '\0') ? 0 : -1;
  ------------------
  |  Branch (27387:12): [True: 512, False: 34.3k]
  ------------------
27388|  5.89M|}
janet.c:number_to_string_b:
30441|  18.7k|static void number_to_string_b(JanetBuffer *buffer, double x) {
30442|  18.7k|    janet_buffer_extra(buffer, BUFSIZE);
  ------------------
  |  |30435|  18.7k|#define BUFSIZE 64
  ------------------
30443|  18.7k|    const char *fmt = (x == floor(x) &&
  ------------------
  |  Branch (30443:24): [True: 18.7k, False: 10]
  ------------------
30444|  18.7k|                       x <= JANET_INTMAX_DOUBLE &&
  ------------------
  |  |  165|  37.4k|#define JANET_INTMAX_DOUBLE 9007199254740992.0
  ------------------
  |  Branch (30444:24): [True: 18.6k, False: 24]
  ------------------
30445|  18.6k|                       x >= JANET_INTMIN_DOUBLE) ? "%.0f" : ("%." STR(DBL_DIG) "g");
  ------------------
  |  |  166|  18.6k|#define JANET_INTMIN_DOUBLE (-9007199254740992.0)
  ------------------
  |  Branch (30445:24): [True: 18.6k, False: 0]
  ------------------
30446|  18.7k|    int count;
30447|  18.7k|    if (x == 0.0) {
  ------------------
  |  Branch (30447:9): [True: 2.03k, False: 16.6k]
  ------------------
30448|       |        /* Prevent printing of '-0' */
30449|  2.03k|        count = 1;
30450|  2.03k|        buffer->data[buffer->count] = '0';
30451|  16.6k|    } else {
30452|  16.6k|        count = snprintf((char *) buffer->data + buffer->count, BUFSIZE, fmt, x);
  ------------------
  |  |30435|  16.6k|#define BUFSIZE 64
  ------------------
30453|  16.6k|    }
30454|  18.7k|    buffer->count += count;
30455|  18.7k|}
janet.c:string_description_b:
30501|    209|static void string_description_b(JanetBuffer *buffer, const char *title, void *pointer) {
30502|    209|    janet_buffer_extra(buffer, BUFSIZE);
  ------------------
  |  |30435|    209|#define BUFSIZE 64
  ------------------
30503|    209|    uint8_t *c = buffer->data + buffer->count;
30504|    209|    int32_t i;
30505|    209|    union {
30506|    209|        uint8_t bytes[sizeof(void *)];
30507|    209|        void *p;
30508|    209|    } pbuf;
30509|       |
30510|    209|    pbuf.p = pointer;
30511|    209|    *c++ = '<';
30512|       |    /* Maximum of 32 bytes for abstract type name */
30513|  1.25k|    for (i = 0; i < 32 && title[i]; ++i)
  ------------------
  |  Branch (30513:17): [True: 1.25k, False: 0]
  |  Branch (30513:27): [True: 1.04k, False: 209]
  ------------------
30514|  1.04k|        *c++ = ((uint8_t *)title) [i];
30515|    209|    *c++ = ' ';
30516|    209|    *c++ = '0';
30517|    209|    *c++ = 'x';
30518|    209|#if defined(JANET_NANBOX_64)
30519|    209|#define POINTSIZE 6
30520|       |#else
30521|       |#define POINTSIZE (sizeof(void *))
30522|       |#endif
30523|  1.46k|    for (i = POINTSIZE; i > 0; --i) {
  ------------------
  |  |30519|    209|#define POINTSIZE 6
  ------------------
  |  Branch (30523:25): [True: 1.25k, False: 209]
  ------------------
30524|  1.25k|        uint8_t byte = pbuf.bytes[i - 1];
30525|  1.25k|        *c++ = HEX(byte >> 4);
  ------------------
  |  |30497|  1.25k|#define HEX(i) (((uint8_t *) janet_base64)[(i)])
  ------------------
30526|  1.25k|        *c++ = HEX(byte & 0xF);
  ------------------
  |  |30497|  1.25k|#define HEX(i) (((uint8_t *) janet_base64)[(i)])
  ------------------
30527|  1.25k|    }
30528|    209|    *c++ = '>';
30529|    209|    buffer->count = (int32_t)(c - buffer->data);
30530|    209|#undef POINTSIZE
30531|    209|}
janet.c:janet_escape_string_b:
30603|   239k|static void janet_escape_string_b(JanetBuffer *buffer, const uint8_t *str) {
30604|       |    janet_escape_string_impl(buffer, str, janet_string_length(str));
  ------------------
  |  | 1813|   239k|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|   239k|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
30605|   239k|}
janet.c:janet_escape_string_impl:
30533|   239k|static int janet_escape_string_impl(JanetBuffer *buffer, const uint8_t *str, int32_t len) {
30534|   239k|    janet_buffer_push_u8(buffer, '"');
30535|   239k|    int align = 1;
30536|   362k|    for (int32_t i = 0; i < len; ++i) {
  ------------------
  |  Branch (30536:25): [True: 122k, False: 239k]
  ------------------
30537|   122k|        uint8_t c = str[i];
30538|   122k|        switch (c) {
30539|  10.9k|            case '"':
  ------------------
  |  Branch (30539:13): [True: 10.9k, False: 111k]
  ------------------
30540|  10.9k|                janet_buffer_push_bytes(buffer, (const uint8_t *)"\\\"", 2);
30541|  10.9k|                align += 2;
30542|  10.9k|                break;
30543|    133|            case '\n':
  ------------------
  |  Branch (30543:13): [True: 133, False: 122k]
  ------------------
30544|    133|                janet_buffer_push_bytes(buffer, (const uint8_t *)"\\n", 2);
30545|    133|                align += 2;
30546|    133|                break;
30547|      2|            case '\r':
  ------------------
  |  Branch (30547:13): [True: 2, False: 122k]
  ------------------
30548|      2|                janet_buffer_push_bytes(buffer, (const uint8_t *)"\\r", 2);
30549|      2|                align += 2;
30550|      2|                break;
30551|  4.55k|            case '\0':
  ------------------
  |  Branch (30551:13): [True: 4.55k, False: 118k]
  ------------------
30552|  4.55k|                janet_buffer_push_bytes(buffer, (const uint8_t *)"\\0", 2);
30553|  4.55k|                align += 2;
30554|  4.55k|                break;
30555|      5|            case '\f':
  ------------------
  |  Branch (30555:13): [True: 5, False: 122k]
  ------------------
30556|      5|                janet_buffer_push_bytes(buffer, (const uint8_t *)"\\f", 2);
30557|      5|                align += 2;
30558|      5|                break;
30559|    195|            case '\v':
  ------------------
  |  Branch (30559:13): [True: 195, False: 122k]
  ------------------
30560|    195|                janet_buffer_push_bytes(buffer, (const uint8_t *)"\\v", 2);
30561|    195|                align += 2;
30562|    195|                break;
30563|      0|            case '\a':
  ------------------
  |  Branch (30563:13): [True: 0, False: 122k]
  ------------------
30564|      0|                janet_buffer_push_bytes(buffer, (const uint8_t *)"\\a", 2);
30565|      0|                align += 2;
30566|      0|                break;
30567|      2|            case '\b':
  ------------------
  |  Branch (30567:13): [True: 2, False: 122k]
  ------------------
30568|      2|                janet_buffer_push_bytes(buffer, (const uint8_t *)"\\b", 2);
30569|      2|                align += 2;
30570|      2|                break;
30571|      0|            case 27:
  ------------------
  |  Branch (30571:13): [True: 0, False: 122k]
  ------------------
30572|      0|                janet_buffer_push_bytes(buffer, (const uint8_t *)"\\e", 2);
30573|      0|                align += 2;
30574|      0|                break;
30575|      0|            case '\\':
  ------------------
  |  Branch (30575:13): [True: 0, False: 122k]
  ------------------
30576|      0|                janet_buffer_push_bytes(buffer, (const uint8_t *)"\\\\", 2);
30577|      0|                align += 2;
30578|      0|                break;
30579|      2|            case '\t':
  ------------------
  |  Branch (30579:13): [True: 2, False: 122k]
  ------------------
30580|      2|                janet_buffer_push_bytes(buffer, (const uint8_t *)"\\t", 2);
30581|      2|                align += 2;
30582|      2|                break;
30583|   106k|            default:
  ------------------
  |  Branch (30583:13): [True: 106k, False: 15.8k]
  ------------------
30584|   106k|                if (c < 32 || c > 126) {
  ------------------
  |  Branch (30584:21): [True: 161, False: 106k]
  |  Branch (30584:31): [True: 699, False: 106k]
  ------------------
30585|    860|                    uint8_t buf[4];
30586|    860|                    buf[0] = '\\';
30587|    860|                    buf[1] = 'x';
30588|    860|                    buf[2] = janet_base64[(c >> 4) & 0xF];
30589|    860|                    buf[3] = janet_base64[c & 0xF];
30590|    860|                    janet_buffer_push_bytes(buffer, buf, 4);
30591|    860|                    align += 4;
30592|   106k|                } else {
30593|   106k|                    janet_buffer_push_u8(buffer, c);
30594|   106k|                    align++;
30595|   106k|                }
30596|   106k|                break;
30597|   122k|        }
30598|   122k|    }
30599|   239k|    janet_buffer_push_u8(buffer, '"');
30600|   239k|    return align + 1;
30601|   239k|}
janet.c:janet_escape_buffer_b:
30607|     94|static void janet_escape_buffer_b(JanetBuffer *buffer, JanetBuffer *bx) {
30608|     94|    if (bx == buffer) {
  ------------------
  |  Branch (30608:9): [True: 0, False: 94]
  ------------------
30609|       |        /* Ensures buffer won't resize while escaping */
30610|      0|        int64_t new_size = 6 * (int64_t) bx->count + 3;
30611|      0|        if (new_size > INT32_MAX) janet_panic("buffer overflow");
  ------------------
  |  Branch (30611:13): [True: 0, False: 0]
  ------------------
30612|      0|        janet_buffer_ensure(bx, (int32_t) new_size, 1);
30613|      0|    }
30614|     94|    janet_buffer_push_u8(buffer, '@');
30615|     94|    janet_escape_string_impl(buffer, bx->data, bx->count);
30616|     94|}
janet.c:janet_pretty_:
31230|  8.27k|                                  int flags, Janet x, int32_t startlen, int32_t lookback_barrier) {
31231|  8.27k|    struct pretty S;
31232|  8.27k|    if (NULL == buffer) {
  ------------------
  |  Branch (31232:9): [True: 0, False: 8.27k]
  ------------------
31233|      0|        buffer = janet_buffer(0);
31234|      0|    }
31235|  8.27k|    S.buffer = buffer;
31236|  8.27k|    S.depth = depth;
31237|  8.27k|    S.width = width;
31238|  8.27k|    S.align = 0;
31239|  8.27k|    S.flags = flags;
31240|  8.27k|    S.bufstartlen = startlen;
31241|  8.27k|    S.lookback_barrier = lookback_barrier;
31242|  8.27k|    S.keysort_capacity = 0;
31243|       |    S.keysort_buffer = NULL;
31244|  8.27k|    S.keysort_start = 0;
31245|  8.27k|    janet_table_init(&S.seen, 10);
31246|  8.27k|    janet_pretty_one(&S, x);
31247|  8.27k|    backtrack_newlines(&S);
31248|  8.27k|    janet_table_deinit(&S.seen);
31249|  8.27k|    return S.buffer;
31250|  8.27k|}
janet.c:janet_pretty_one:
30997|   191k|static void janet_pretty_one(struct pretty *S, Janet x) {
30998|       |    /* Add to seen */
30999|   191k|    switch (janet_type(x)) {
  ------------------
  |  |  795|   191k|    (isnan((x).number) \
  |  |  796|   191k|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|   191k|        : JANET_NUMBER)
  ------------------
  |  Branch (30999:13): [True: 182k, False: 9.14k]
  ------------------
31000|    472|        case JANET_NIL:
  ------------------
  |  Branch (31000:9): [True: 472, False: 191k]
  ------------------
31001|  9.61k|        case JANET_NUMBER:
  ------------------
  |  Branch (31001:9): [True: 9.14k, False: 182k]
  ------------------
31002|   113k|        case JANET_SYMBOL:
  ------------------
  |  Branch (31002:9): [True: 103k, False: 88.3k]
  ------------------
31003|   113k|        case JANET_BOOLEAN:
  ------------------
  |  Branch (31003:9): [True: 0, False: 191k]
  ------------------
31004|   113k|            break;
31005|  78.7k|        default: {
  ------------------
  |  Branch (31005:9): [True: 78.7k, False: 113k]
  ------------------
31006|  78.7k|            Janet seenid = janet_table_get(&S->seen, x);
31007|  78.7k|            if (janet_checktype(seenid, JANET_NUMBER)) {
  ------------------
  |  |  806|  78.7k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 78.7k]
  |  |  |  Branch (806:6): [True: 78.7k, Folded]
  |  |  ------------------
  |  |  807|  78.7k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|  78.7k|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 78.7k]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 78.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  78.7k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
31008|      0|                if (S->flags & JANET_PRETTY_COLOR) {
  ------------------
  |  | 1967|      0|#define JANET_PRETTY_COLOR 1
  ------------------
  |  Branch (31008:21): [True: 0, False: 0]
  ------------------
31009|      0|                    janet_buffer_push_cstring(S->buffer, janet_cycle_color);
31010|      0|                }
31011|      0|                janet_buffer_push_cstring(S->buffer, "<cycle ");
31012|      0|                S->align += 8 + integer_to_string_b(S->buffer, janet_unwrap_integer(seenid));
  ------------------
  |  |  966|      0|#define janet_unwrap_integer(x) ((int32_t) janet_unwrap_number(x))
  |  |  ------------------
  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  ------------------
31013|      0|                janet_buffer_push_u8(S->buffer, '>');
31014|      0|                if (S->flags & JANET_PRETTY_COLOR) {
  ------------------
  |  | 1967|      0|#define JANET_PRETTY_COLOR 1
  ------------------
  |  Branch (31014:21): [True: 0, False: 0]
  ------------------
31015|      0|                    janet_buffer_push_cstring(S->buffer, "\x1B[0m");
31016|      0|                }
31017|      0|                return;
31018|  78.7k|            } else {
31019|  78.7k|                janet_table_put(&S->seen, x, janet_wrap_integer(S->seen.count));
  ------------------
  |  |  967|  78.7k|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|  78.7k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
31020|  78.7k|                break;
31021|  78.7k|            }
31022|  78.7k|        }
31023|   191k|    }
31024|       |
31025|   191k|    switch (janet_type(x)) {
  ------------------
  |  |  795|   191k|    (isnan((x).number) \
  |  |  796|   191k|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|   191k|        : JANET_NUMBER)
  ------------------
  |  Branch (31025:13): [True: 182k, False: 9.14k]
  ------------------
31026|   113k|        default: {
  ------------------
  |  Branch (31026:9): [True: 113k, False: 78.6k]
  ------------------
31027|   113k|            const char *color = janet_pretty_colors[janet_type(x)];
  ------------------
  |  |  795|   113k|    (isnan((x).number) \
  |  |  796|   113k|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|   113k|        : JANET_NUMBER)
  ------------------
  |  Branch (31027:53): [True: 104k, False: 9.14k]
  ------------------
31028|   113k|            if (color && (S->flags & JANET_PRETTY_COLOR)) {
  ------------------
  |  | 1967|   113k|#define JANET_PRETTY_COLOR 1
  ------------------
  |  Branch (31028:17): [True: 113k, False: 0]
  |  Branch (31028:26): [True: 0, False: 113k]
  ------------------
31029|      0|                janet_buffer_push_cstring(S->buffer, color);
31030|      0|            }
31031|   113k|            if (janet_checktype(x, JANET_BUFFER) && janet_unwrap_buffer(x) == S->buffer) {
  ------------------
  |  |  806|   226k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 113k]
  |  |  |  Branch (806:6): [Folded, False: 113k]
  |  |  ------------------
  |  |  807|   226k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   226k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   113k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   113k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   113k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   113k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          if (janet_checktype(x, JANET_BUFFER) && janet_unwrap_buffer(x) == S->buffer) {
  ------------------
  |  |  862|      0|#define janet_unwrap_buffer(x) ((JanetBuffer *)janet_nanbox_to_pointer(x))
  ------------------
  |  Branch (31031:53): [True: 0, False: 0]
  ------------------
31032|      0|                int64_t new_size = (int64_t) S->buffer->count + S->bufstartlen * 4 + 3;
31033|      0|                if (new_size > INT32_MAX) janet_panic("buffer overflow");
  ------------------
  |  Branch (31033:21): [True: 0, False: 0]
  ------------------
31034|      0|                janet_buffer_ensure(S->buffer, (int32_t) new_size, 1);
31035|      0|                janet_buffer_push_u8(S->buffer, '@');
31036|       |                /* Use start len to print to self better */
31037|      0|                S->align += 1 + janet_escape_string_impl(S->buffer, S->buffer->data, S->bufstartlen);
31038|   113k|            } else {
31039|   113k|                S->align -= S->buffer->count;
31040|   113k|                janet_description_b(S->buffer, x);
31041|   113k|                S->align += S->buffer->count;
31042|   113k|            }
31043|   113k|            if (color && (S->flags & JANET_PRETTY_COLOR)) {
  ------------------
  |  | 1967|   113k|#define JANET_PRETTY_COLOR 1
  ------------------
  |  Branch (31043:17): [True: 113k, False: 0]
  |  Branch (31043:26): [True: 0, False: 113k]
  ------------------
31044|      0|                janet_buffer_push_cstring(S->buffer, "\x1B[0m");
31045|      0|            }
31046|   113k|            break;
31047|   113k|        }
31048|      4|        case JANET_ARRAY:
  ------------------
  |  Branch (31048:9): [True: 4, False: 191k]
  ------------------
31049|  78.2k|        case JANET_TUPLE: {
  ------------------
  |  Branch (31049:9): [True: 78.2k, False: 113k]
  ------------------
31050|  78.2k|            int32_t i = 0, len = 0;
31051|  78.2k|            const Janet *arr = NULL;
31052|  78.2k|            int isarray = janet_checktype(x, JANET_ARRAY);
  ------------------
  |  |  806|  78.2k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 78.2k]
  |  |  ------------------
  |  |  807|  78.2k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  78.2k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  78.2k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  78.2k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  78.2k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  78.2k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
31053|  78.2k|            janet_indexed_view(x, &arr, &len);
31054|  78.2k|            int hasbrackets = !isarray && (janet_tuple_flag(arr) & JANET_TUPLE_FLAG_BRACKETCTOR);
  ------------------
  |  | 1806|  78.2k|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|  78.2k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                          int hasbrackets = !isarray && (janet_tuple_flag(arr) & JANET_TUPLE_FLAG_BRACKETCTOR);
  ------------------
  |  | 1798|  78.2k|#define JANET_TUPLE_FLAG_BRACKETCTOR 0x10000
  ------------------
  |  Branch (31054:31): [True: 78.2k, False: 4]
  |  Branch (31054:43): [True: 479, False: 77.7k]
  ------------------
31055|  78.2k|            const char *startstr = isarray ? "@[" : hasbrackets ? "[" : "(";
  ------------------
  |  Branch (31055:36): [True: 4, False: 78.2k]
  |  Branch (31055:53): [True: 479, False: 77.7k]
  ------------------
31056|  78.2k|            const char endchar = isarray ? ']' : hasbrackets ? ']' : ')';
  ------------------
  |  Branch (31056:34): [True: 4, False: 78.2k]
  |  Branch (31056:50): [True: 479, False: 77.7k]
  ------------------
31057|  78.2k|            janet_buffer_push_cstring(S->buffer, startstr);
31058|  78.2k|            S->align += (int32_t) strlen(startstr);
31059|  78.2k|            const int align = S->leaf_align = S->align;
31060|  78.2k|            S->depth--;
31061|  78.2k|            if (S->depth == 0) {
  ------------------
  |  Branch (31061:17): [True: 32, False: 78.2k]
  ------------------
31062|     32|                janet_buffer_push_cstring(S->buffer, "...");
31063|     32|                S->align += 3;
31064|  78.2k|            } else {
31065|  78.2k|                if (len > JANET_PRETTY_ARRAY_LIMIT && !(S->flags & JANET_PRETTY_NOTRUNC)) {
  ------------------
  |  |30994|   156k|#define JANET_PRETTY_ARRAY_LIMIT 160
  ------------------
                              if (len > JANET_PRETTY_ARRAY_LIMIT && !(S->flags & JANET_PRETTY_NOTRUNC)) {
  ------------------
  |  | 1969|     21|#define JANET_PRETTY_NOTRUNC 4
  ------------------
  |  Branch (31065:21): [True: 21, False: 78.1k]
  |  Branch (31065:55): [True: 21, False: 0]
  ------------------
31066|     84|                    for (i = 0; i < 3; i++) {
  ------------------
  |  Branch (31066:33): [True: 63, False: 21]
  ------------------
31067|     63|                        if (i) print_newline(S, align);
  ------------------
  |  Branch (31067:29): [True: 42, False: 21]
  ------------------
31068|     63|                        janet_pretty_one(S, arr[i]);
31069|     63|                    }
31070|     21|                    print_newline(S, align);
31071|     21|                    janet_buffer_push_cstring(S->buffer, "...");
31072|     21|                    S->align += 3;
31073|     84|                    for (i = len - 3; i < len; i++) {
  ------------------
  |  Branch (31073:39): [True: 63, False: 21]
  ------------------
31074|     63|                        print_newline(S, align);
31075|     63|                        janet_pretty_one(S, arr[i]);
31076|     63|                    }
31077|  78.1k|                } else {
31078|   260k|                    for (i = 0; i < len; i++) {
  ------------------
  |  Branch (31078:33): [True: 182k, False: 78.1k]
  ------------------
31079|   182k|                        if (i) print_newline(S, align);
  ------------------
  |  Branch (31079:29): [True: 104k, False: 77.7k]
  ------------------
31080|   182k|                        janet_pretty_one(S, arr[i]);
31081|   182k|                    }
31082|  78.1k|                }
31083|  78.2k|            }
31084|  78.2k|            S->depth++;
31085|  78.2k|            janet_buffer_push_u8(S->buffer, endchar);
31086|  78.2k|            S->align++;
31087|  78.2k|            break;
31088|      4|        }
31089|     42|        case JANET_STRUCT:
  ------------------
  |  Branch (31089:9): [True: 42, False: 191k]
  ------------------
31090|    438|        case JANET_TABLE: {
  ------------------
  |  Branch (31090:9): [True: 396, False: 191k]
  ------------------
31091|    438|            int istable = janet_checktype(x, JANET_TABLE);
  ------------------
  |  |  806|    438|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 438]
  |  |  ------------------
  |  |  807|    438|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|    438|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|    438|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|    438|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    438|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    438|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
31092|       |
31093|       |            /* For object-like tables, print class name */
31094|    438|            if (istable) {
  ------------------
  |  Branch (31094:17): [True: 396, False: 42]
  ------------------
31095|    396|                JanetTable *t = janet_unwrap_table(x);
  ------------------
  |  |  861|    396|#define janet_unwrap_table(x) ((JanetTable *)janet_nanbox_to_pointer(x))
  ------------------
31096|    396|                JanetTable *proto = t->proto;
31097|    396|                S->align++;
31098|    396|                janet_buffer_push_cstring(S->buffer, "@");
31099|    396|                if (NULL != proto) {
  ------------------
  |  Branch (31099:21): [True: 0, False: 396]
  ------------------
31100|      0|                    Janet name = janet_table_get(proto, janet_ckeywordv("_name"));
  ------------------
  |  | 1843|      0|#define janet_ckeywordv(cstr) janet_wrap_keyword(janet_ckeyword(cstr))
  |  |  ------------------
  |  |  |  |  850|      0|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|      0|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
31101|      0|                    const uint8_t *n;
31102|      0|                    int32_t len;
31103|      0|                    if (janet_bytes_view(name, &n, &len)) {
  ------------------
  |  Branch (31103:25): [True: 0, False: 0]
  ------------------
31104|      0|                        if (S->flags & JANET_PRETTY_COLOR) {
  ------------------
  |  | 1967|      0|#define JANET_PRETTY_COLOR 1
  ------------------
  |  Branch (31104:29): [True: 0, False: 0]
  ------------------
31105|      0|                            janet_buffer_push_cstring(S->buffer, janet_class_color);
31106|      0|                        }
31107|      0|                        janet_buffer_push_bytes(S->buffer, n, len);
31108|      0|                        S->align += len;
31109|      0|                        if (S->flags & JANET_PRETTY_COLOR) {
  ------------------
  |  | 1967|      0|#define JANET_PRETTY_COLOR 1
  ------------------
  |  Branch (31109:29): [True: 0, False: 0]
  ------------------
31110|      0|                            janet_buffer_push_cstring(S->buffer, "\x1B[0m");
31111|      0|                        }
31112|      0|                    }
31113|      0|                }
31114|    396|            } else {
31115|     42|                JanetStruct st = janet_unwrap_struct(x);
  ------------------
  |  |  857|     42|#define janet_unwrap_struct(x) ((JanetStruct)janet_nanbox_to_pointer(x))
  ------------------
31116|     42|                JanetStruct proto = janet_struct_proto(st);
  ------------------
  |  | 1851|     42|#define janet_struct_proto(t) (janet_struct_head(t)->proto)
  |  |  ------------------
  |  |  |  | 1846|     42|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
31117|     42|                if (NULL != proto) {
  ------------------
  |  Branch (31117:21): [True: 0, False: 42]
  ------------------
31118|      0|                    Janet name = janet_struct_get(proto, janet_ckeywordv("_name"));
  ------------------
  |  | 1843|      0|#define janet_ckeywordv(cstr) janet_wrap_keyword(janet_ckeyword(cstr))
  |  |  ------------------
  |  |  |  |  850|      0|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|      0|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
31119|      0|                    const uint8_t *n;
31120|      0|                    int32_t len;
31121|      0|                    if (janet_bytes_view(name, &n, &len)) {
  ------------------
  |  Branch (31121:25): [True: 0, False: 0]
  ------------------
31122|      0|                        if (S->flags & JANET_PRETTY_COLOR) {
  ------------------
  |  | 1967|      0|#define JANET_PRETTY_COLOR 1
  ------------------
  |  Branch (31122:29): [True: 0, False: 0]
  ------------------
31123|      0|                            janet_buffer_push_cstring(S->buffer, janet_class_color);
31124|      0|                        }
31125|      0|                        janet_buffer_push_bytes(S->buffer, n, len);
31126|      0|                        S->align += len;
31127|      0|                        if (S->flags & JANET_PRETTY_COLOR) {
  ------------------
  |  | 1967|      0|#define JANET_PRETTY_COLOR 1
  ------------------
  |  Branch (31127:29): [True: 0, False: 0]
  ------------------
31128|      0|                            janet_buffer_push_cstring(S->buffer, "\x1B[0m");
31129|      0|                        }
31130|      0|                    }
31131|      0|                }
31132|     42|            }
31133|    438|            janet_buffer_push_u8(S->buffer, '{');
31134|    438|            const int align = S->leaf_align = ++S->align;
31135|       |
31136|    438|            S->depth--;
31137|    438|            if (S->depth == 0) {
  ------------------
  |  Branch (31137:17): [True: 10, False: 428]
  ------------------
31138|     10|                janet_buffer_push_cstring(S->buffer, "...");
31139|     10|                S->align += 3;
31140|    428|            } else {
31141|    428|                int32_t len = 0, cap = 0;
31142|    428|                const JanetKV *kvs = NULL;
31143|    428|                janet_dictionary_view(x, &kvs, &len, &cap);
31144|    428|                int32_t ks_start = S->keysort_start;
31145|    428|                int truncated = 0;
31146|       |
31147|       |                /* Shortcut for huge dictionaries, don't bother sorting keys */
31148|    428|                if (len > JANET_PRETTY_DICT_KEYSORT_LIMIT) {
  ------------------
  |  |30993|    428|#define JANET_PRETTY_DICT_KEYSORT_LIMIT 2000
  ------------------
  |  Branch (31148:21): [True: 0, False: 428]
  ------------------
31149|      0|                    if (!(S->flags & JANET_PRETTY_NOTRUNC)) {
  ------------------
  |  | 1969|      0|#define JANET_PRETTY_NOTRUNC 4
  ------------------
  |  Branch (31149:25): [True: 0, False: 0]
  ------------------
31150|      0|                        len = JANET_PRETTY_DICT_LIMIT;
  ------------------
  |  |30992|      0|#define JANET_PRETTY_DICT_LIMIT 30
  ------------------
31151|      0|                        truncated = 1;
31152|      0|                    }
31153|      0|                    int32_t j = 0;
31154|      0|                    for (int32_t i = 0; i < len; i++) {
  ------------------
  |  Branch (31154:41): [True: 0, False: 0]
  ------------------
31155|      0|                        while (janet_checktype(kvs[j].key, JANET_NIL)) j++;
  ------------------
  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  ------------------
  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
31156|      0|                        if (i) print_newline(S, align);
  ------------------
  |  Branch (31156:29): [True: 0, False: 0]
  ------------------
31157|      0|                        janet_pretty_one(S, kvs[j].key);
31158|      0|                        janet_buffer_push_u8(S->buffer, ' ');
31159|      0|                        S->align++;
31160|      0|                        janet_pretty_one(S, kvs[j].value);
31161|      0|                        j++;
31162|      0|                    }
31163|      0|                    if (truncated) {
  ------------------
  |  Branch (31163:25): [True: 0, False: 0]
  ------------------
31164|      0|                        print_newline(S, align);
31165|      0|                        janet_buffer_push_cstring(S->buffer, "...");
31166|      0|                        S->align += 3;
31167|      0|                    }
31168|    428|                } else {
31169|       |                    /* Sorted keys dictionaries */
31170|       |
31171|       |                    /* Ensure buffer is large enough to sort keys. */
31172|    428|                    int64_t mincap = (int64_t) len + (int64_t) ks_start;
31173|    428|                    if (mincap > INT32_MAX) {
  ------------------
  |  Branch (31173:25): [True: 0, False: 428]
  ------------------
31174|      0|                        truncated = 1;
31175|      0|                        len = 0;
31176|      0|                        mincap = ks_start;
31177|      0|                    }
31178|       |
31179|    428|                    if (S->keysort_capacity < mincap) {
  ------------------
  |  Branch (31179:25): [True: 10, False: 418]
  ------------------
31180|     10|                        if (mincap >= INT32_MAX / 2) {
  ------------------
  |  Branch (31180:29): [True: 0, False: 10]
  ------------------
31181|      0|                            S->keysort_capacity = INT32_MAX;
31182|     10|                        } else {
31183|     10|                            S->keysort_capacity = (int32_t)(mincap * 2);
31184|     10|                        }
31185|     10|                        S->keysort_buffer = janet_srealloc(S->keysort_buffer, sizeof(int32_t) * S->keysort_capacity);
31186|     10|                        if (NULL == S->keysort_buffer) {
  ------------------
  |  Branch (31186:29): [True: 0, False: 10]
  ------------------
31187|      0|                            JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
31188|      0|                        }
31189|     10|                    }
31190|       |
31191|    428|                    janet_sorted_keys(kvs, cap, S->keysort_buffer == NULL ? NULL : S->keysort_buffer + ks_start);
  ------------------
  |  Branch (31191:49): [True: 33, False: 395]
  ------------------
31192|    428|                    S->keysort_start += len;
31193|    428|                    if (!(S->flags & JANET_PRETTY_NOTRUNC) && (len > JANET_PRETTY_DICT_LIMIT)) {
  ------------------
  |  | 1969|    428|#define JANET_PRETTY_NOTRUNC 4
  ------------------
                                  if (!(S->flags & JANET_PRETTY_NOTRUNC) && (len > JANET_PRETTY_DICT_LIMIT)) {
  ------------------
  |  |30992|    428|#define JANET_PRETTY_DICT_LIMIT 30
  ------------------
  |  Branch (31193:25): [True: 428, False: 0]
  |  Branch (31193:63): [True: 0, False: 428]
  ------------------
31194|      0|                        len = JANET_PRETTY_DICT_LIMIT;
  ------------------
  |  |30992|      0|#define JANET_PRETTY_DICT_LIMIT 30
  ------------------
31195|      0|                        truncated = 1;
31196|      0|                    }
31197|       |
31198|    878|                    for (int32_t i = 0; i < len; i++) {
  ------------------
  |  Branch (31198:41): [True: 450, False: 428]
  ------------------
31199|    450|                        if (i) print_newline(S, align);
  ------------------
  |  Branch (31199:29): [True: 55, False: 395]
  ------------------
31200|    450|                        int32_t j = S->keysort_buffer[i + ks_start];
31201|    450|                        janet_pretty_one(S, kvs[j].key);
31202|    450|                        janet_buffer_push_u8(S->buffer, ' ');
31203|    450|                        S->align++;
31204|    450|                        janet_pretty_one(S, kvs[j].value);
31205|    450|                    }
31206|       |
31207|    428|                    if (truncated) {
  ------------------
  |  Branch (31207:25): [True: 0, False: 428]
  ------------------
31208|      0|                        print_newline(S, align);
31209|      0|                        janet_buffer_push_cstring(S->buffer, "...");
31210|      0|                        S->align += 3;
31211|      0|                    }
31212|       |
31213|    428|                }
31214|    428|                S->keysort_start = ks_start;
31215|    428|            }
31216|    438|            S->depth++;
31217|    438|            janet_buffer_push_u8(S->buffer, '}');
31218|    438|            S->align++;
31219|    438|            break;
31220|    438|        }
31221|   191k|    }
31222|       |    /* Remove from seen */
31223|   191k|    janet_table_remove(&S->seen, x);
31224|   191k|    return;
31225|   191k|}
janet.c:print_newline:
30956|   105k|static void print_newline(struct pretty *S, int align) {
30957|   105k|    int i;
30958|   105k|    if (S->flags & JANET_PRETTY_ONELINE) {
  ------------------
  |  | 1968|   105k|#define JANET_PRETTY_ONELINE 2
  ------------------
  |  Branch (30958:9): [True: 105k, False: 0]
  ------------------
30959|   105k|        janet_buffer_push_u8(S->buffer, ' ');
30960|   105k|        return;
30961|   105k|    }
30962|      0|    backtrack_newlines(S);
30963|      0|    janet_buffer_push_u8(S->buffer, '\n');
30964|      0|    S->leaf_align = S->align = align;
30965|      0|    for (i = 0; i < S->align; i++) {
  ------------------
  |  Branch (30965:17): [True: 0, False: 0]
  ------------------
30966|      0|        janet_buffer_push_u8(S->buffer, ' ');
30967|      0|    }
30968|      0|}
janet.c:backtrack_newlines:
30896|  8.27k|static void backtrack_newlines(const struct pretty *S) {
30897|  8.27k|    if (S->flags & JANET_PRETTY_ONELINE || S->buffer->count <= 0)
  ------------------
  |  | 1968|  16.5k|#define JANET_PRETTY_ONELINE 2
  ------------------
  |  Branch (30897:9): [True: 8.27k, False: 0]
  |  Branch (30897:44): [True: 0, False: 0]
  ------------------
30898|  8.27k|        return;
30899|      0|    switch (S->buffer->data[S->buffer->count - 1]) {
30900|      0|        case ')':
  ------------------
  |  Branch (30900:9): [True: 0, False: 0]
  ------------------
30901|      0|        case '}':
  ------------------
  |  Branch (30901:9): [True: 0, False: 0]
  ------------------
30902|      0|        case ']':
  ------------------
  |  Branch (30902:9): [True: 0, False: 0]
  ------------------
30903|      0|            break;
30904|      0|        default:
  ------------------
  |  Branch (30904:9): [True: 0, False: 0]
  ------------------
30905|      0|            return;
30906|      0|    }
30907|      0|    int32_t removed = 0;
30908|      0|    int32_t old_count = S->buffer->count;
30909|      0|    int32_t offset = old_count;
30910|      0|    int32_t b0 = S->lookback_barrier;
30911|      0|    int32_t columns = S->width;
30912|      0|    int32_t align = 0;
30913|      0|    while (--offset >= b0) {
  ------------------
  |  Branch (30913:12): [True: 0, False: 0]
  ------------------
30914|      0|        const char *s = (const char *)S->buffer->data + offset;
30915|      0|        if (*s == '\n') {
  ------------------
  |  Branch (30915:13): [True: 0, False: 0]
  ------------------
30916|      0|            if (align < S->leaf_align) {
  ------------------
  |  Branch (30916:17): [True: 0, False: 0]
  ------------------
30917|      0|                break;
30918|      0|            }
30919|      0|            columns += align;
30920|      0|            removed += align;
30921|      0|            align = 0;
30922|      0|        } else if (*s == ' ') {
  ------------------
  |  Branch (30922:20): [True: 0, False: 0]
  ------------------
30923|      0|            align++;
30924|      0|        } else {
30925|      0|            align = 0;
30926|       |            /* Don't count color sequences: \x1B(0|3\d)m */
30927|      0|            if (S->flags & JANET_PRETTY_COLOR && *s == 'm') {
  ------------------
  |  | 1967|      0|#define JANET_PRETTY_COLOR 1
  ------------------
  |  Branch (30927:17): [True: 0, False: 0]
  |  Branch (30927:50): [True: 0, False: 0]
  ------------------
30928|      0|                if (offset >= (3 + b0) && strncmp("\x1B[0m", s - 3, 4) == 0) {
  ------------------
  |  Branch (30928:21): [True: 0, False: 0]
  |  Branch (30928:43): [True: 0, False: 0]
  ------------------
30929|      0|                    offset -= 3;
30930|      0|                    columns++;
30931|      0|                } else if (offset >= (4 + b0) && strncmp("\x1B[3", s - 4, 3) == 0) {
  ------------------
  |  Branch (30931:28): [True: 0, False: 0]
  |  Branch (30931:50): [True: 0, False: 0]
  ------------------
30932|      0|                    offset -= 4;
30933|      0|                    columns++;
30934|      0|                }
30935|      0|            }
30936|      0|        }
30937|      0|        if (--columns <= 0) {
  ------------------
  |  Branch (30937:13): [True: 0, False: 0]
  ------------------
30938|      0|            return;
30939|      0|        }
30940|      0|    }
30941|      0|    offset++; /* Don't mess with the last newline we found */
30942|      0|    janet_assert(offset >= b0, "bad buffer index");
  ------------------
  |  |  389|      0|#define janet_assert(c, m) do { \
  |  |  390|      0|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  391|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
30943|      0|    S->buffer->count -= removed;
30944|      0|    for (int32_t i = offset; i < S->buffer->count; i++) {
  ------------------
  |  Branch (30944:30): [True: 0, False: 0]
  ------------------
30945|      0|        if (S->buffer->data[offset] == '\n') {
  ------------------
  |  Branch (30945:13): [True: 0, False: 0]
  ------------------
30946|      0|            S->buffer->data[i] = ' ';
30947|      0|            while (S->buffer->data[++offset] == ' ') {
  ------------------
  |  Branch (30947:20): [True: 0, False: 0]
  ------------------
30948|      0|                janet_assert(offset < old_count, "bad replacement of newline");
  ------------------
  |  |  389|      0|#define janet_assert(c, m) do { \
  |  |  390|      0|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  391|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
30949|      0|            }
30950|      0|        } else {
30951|      0|            S->buffer->data[i] = S->buffer->data[offset++];
30952|      0|        }
30953|      0|    }
30954|      0|}
janet.c:janet_jdn_:
31259|  53.3k|static JanetBuffer *janet_jdn_(JanetBuffer *buffer, int depth, Janet x, int32_t startlen, int32_t lookback_barrier) {
31260|  53.3k|    struct pretty S;
31261|  53.3k|    if (NULL == buffer) {
  ------------------
  |  Branch (31261:9): [True: 0, False: 53.3k]
  ------------------
31262|      0|        buffer = janet_buffer(0);
31263|      0|    }
31264|  53.3k|    S.buffer = buffer;
31265|  53.3k|    S.depth = depth;
31266|  53.3k|    S.align = 0;
31267|  53.3k|    S.flags = 0;
31268|  53.3k|    S.bufstartlen = startlen;
31269|  53.3k|    S.lookback_barrier = lookback_barrier;
31270|  53.3k|    S.keysort_capacity = 0;
31271|  53.3k|    S.keysort_buffer = NULL;
31272|  53.3k|    S.keysort_start = 0;
31273|  53.3k|    janet_table_init(&S.seen, 10);
31274|  53.3k|    int res = print_jdn_one(&S, x, depth);
31275|  53.3k|    janet_table_deinit(&S.seen);
31276|  53.3k|    if (res) {
  ------------------
  |  Branch (31276:9): [True: 0, False: 53.3k]
  ------------------
31277|      0|        janet_panic("could not print to jdn format");
31278|      0|    }
31279|  53.3k|    return S.buffer;
31280|  53.3k|}
janet.c:print_jdn_one:
30787|  1.76M|static int print_jdn_one(struct pretty *S, Janet x, int depth) {
30788|  1.76M|    if (depth == 0) return 1;
  ------------------
  |  Branch (30788:9): [True: 0, False: 1.76M]
  ------------------
30789|  1.76M|    switch (janet_type(x)) {
  ------------------
  |  |  795|  1.76M|    (isnan((x).number) \
  |  |  796|  1.76M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  1.76M|        : JANET_NUMBER)
  ------------------
  |  Branch (30789:13): [True: 1.69M, False: 69.9k]
  ------------------
30790|      0|        case JANET_NIL:
  ------------------
  |  Branch (30790:9): [True: 0, False: 1.76M]
  ------------------
30791|     61|        case JANET_BOOLEAN:
  ------------------
  |  Branch (30791:9): [True: 61, False: 1.76M]
  ------------------
30792|    153|        case JANET_BUFFER:
  ------------------
  |  Branch (30792:9): [True: 92, False: 1.76M]
  ------------------
30793|   161k|        case JANET_STRING:
  ------------------
  |  Branch (30793:9): [True: 161k, False: 1.60M]
  ------------------
30794|   161k|            janet_description_b(S->buffer, x);
30795|   161k|            break;
30796|  69.9k|        case JANET_NUMBER:
  ------------------
  |  Branch (30796:9): [True: 69.9k, False: 1.69M]
  ------------------
30797|  69.9k|            janet_buffer_extra(S->buffer, BUFSIZE);
  ------------------
  |  |30435|  69.9k|#define BUFSIZE 64
  ------------------
30798|  69.9k|            double num = janet_unwrap_number(x);
  ------------------
  |  |  839|  69.9k|#define janet_unwrap_number(x) ((x).number)
  ------------------
30799|  69.9k|            if (isnan(num)) return 1;
  ------------------
  |  Branch (30799:17): [True: 0, False: 69.9k]
  ------------------
30800|  69.9k|            if (isinf(num)) return 1;
  ------------------
  |  Branch (30800:17): [True: 0, False: 69.9k]
  ------------------
30801|  69.9k|            janet_buffer_dtostr(S->buffer, num);
30802|  69.9k|            break;
30803|   796k|        case JANET_SYMBOL:
  ------------------
  |  Branch (30803:9): [True: 796k, False: 973k]
  ------------------
30804|   796k|        case JANET_KEYWORD:
  ------------------
  |  Branch (30804:9): [True: 310, False: 1.76M]
  ------------------
30805|   796k|            if (contains_bad_chars(janet_unwrap_keyword(x), janet_type(x) == JANET_SYMBOL)) return 1;
  ------------------
  |  |  865|   796k|#define janet_unwrap_keyword(x) ((const uint8_t *)janet_nanbox_to_pointer(x))
  ------------------
                          if (contains_bad_chars(janet_unwrap_keyword(x), janet_type(x) == JANET_SYMBOL)) return 1;
  ------------------
  |  |  795|   796k|    (isnan((x).number) \
  |  |  796|   796k|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|   796k|        : JANET_NUMBER)
  ------------------
  |  Branch (30805:17): [True: 0, False: 796k]
  |  Branch (30805:61): [True: 796k, False: 0]
  ------------------
30806|   796k|            janet_description_b(S->buffer, x);
30807|   796k|            break;
30808|   741k|        case JANET_TUPLE: {
  ------------------
  |  Branch (30808:9): [True: 741k, False: 1.02M]
  ------------------
30809|   741k|            JanetTuple t = janet_unwrap_tuple(x);
  ------------------
  |  |  858|   741k|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
30810|   741k|            int isb = janet_tuple_flag(t) & JANET_TUPLE_FLAG_BRACKETCTOR;
  ------------------
  |  | 1806|   741k|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|   741k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                          int isb = janet_tuple_flag(t) & JANET_TUPLE_FLAG_BRACKETCTOR;
  ------------------
  |  | 1798|   741k|#define JANET_TUPLE_FLAG_BRACKETCTOR 0x10000
  ------------------
30811|   741k|            janet_buffer_push_u8(S->buffer, isb ? '[' : '(');
  ------------------
  |  Branch (30811:45): [True: 179, False: 741k]
  ------------------
30812|  2.45M|            for (int32_t i = 0; i < janet_tuple_length(t); i++) {
  ------------------
  |  | 1802|  2.45M|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|  2.45M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (30812:33): [True: 1.71M, False: 741k]
  ------------------
30813|  1.71M|                if (i) janet_buffer_push_u8(S->buffer, ' ');
  ------------------
  |  Branch (30813:21): [True: 973k, False: 741k]
  ------------------
30814|  1.71M|                if (print_jdn_one(S, t[i], depth - 1)) return 1;
  ------------------
  |  Branch (30814:21): [True: 0, False: 1.71M]
  ------------------
30815|  1.71M|            }
30816|   741k|            janet_buffer_push_u8(S->buffer, isb ? ']' : ')');
  ------------------
  |  Branch (30816:45): [True: 179, False: 741k]
  ------------------
30817|   741k|        }
30818|      0|        break;
30819|    150|        case JANET_ARRAY: {
  ------------------
  |  Branch (30819:9): [True: 150, False: 1.76M]
  ------------------
30820|    150|            janet_table_put(&S->seen, x, janet_wrap_true());
  ------------------
  |  |  832|    150|#define janet_wrap_true() janet_nanbox_from_payload(JANET_BOOLEAN, 1)
  |  |  ------------------
  |  |  |  |  822|    150|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    150|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    150|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
30821|    150|            JanetArray *a = janet_unwrap_array(x);
  ------------------
  |  |  860|    150|#define janet_unwrap_array(x) ((JanetArray *)janet_nanbox_to_pointer(x))
  ------------------
30822|    150|            janet_buffer_push_cstring(S->buffer, "@[");
30823|    239|            for (int32_t i = 0; i < a->count; i++) {
  ------------------
  |  Branch (30823:33): [True: 89, False: 150]
  ------------------
30824|     89|                if (i) janet_buffer_push_u8(S->buffer, ' ');
  ------------------
  |  Branch (30824:21): [True: 58, False: 31]
  ------------------
30825|     89|                if (print_jdn_one(S, a->data[i], depth - 1)) return 1;
  ------------------
  |  Branch (30825:21): [True: 0, False: 89]
  ------------------
30826|     89|            }
30827|    150|            janet_buffer_push_u8(S->buffer, ']');
30828|    150|        }
30829|      0|        break;
30830|     60|        case JANET_TABLE: {
  ------------------
  |  Branch (30830:9): [True: 60, False: 1.76M]
  ------------------
30831|     60|            janet_table_put(&S->seen, x, janet_wrap_true());
  ------------------
  |  |  832|     60|#define janet_wrap_true() janet_nanbox_from_payload(JANET_BOOLEAN, 1)
  |  |  ------------------
  |  |  |  |  822|     60|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|     60|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|     60|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
30832|     60|            JanetTable *tab = janet_unwrap_table(x);
  ------------------
  |  |  861|     60|#define janet_unwrap_table(x) ((JanetTable *)janet_nanbox_to_pointer(x))
  ------------------
30833|     60|            janet_buffer_push_cstring(S->buffer, "@{");
30834|     60|            int isFirst = 1;
30835|    668|            for (int32_t i = 0; i < tab->capacity; i++) {
  ------------------
  |  Branch (30835:33): [True: 608, False: 60]
  ------------------
30836|    608|                const JanetKV *kv = tab->data + i;
30837|    608|                if (janet_checktype(kv->key, JANET_NIL)) continue;
  ------------------
  |  |  806|    608|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 352, False: 256]
  |  |  |  Branch (806:6): [Folded, False: 608]
  |  |  ------------------
  |  |  807|    608|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|    608|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|    608|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|    608|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    608|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    608|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
30838|    256|                if (!isFirst) janet_buffer_push_u8(S->buffer, ' ');
  ------------------
  |  Branch (30838:21): [True: 196, False: 60]
  ------------------
30839|    256|                isFirst = 0;
30840|    256|                if (print_jdn_one(S, kv->key, depth - 1)) return 1;
  ------------------
  |  Branch (30840:21): [True: 0, False: 256]
  ------------------
30841|    256|                janet_buffer_push_u8(S->buffer, ' ');
30842|    256|                if (print_jdn_one(S, kv->value, depth - 1)) return 1;
  ------------------
  |  Branch (30842:21): [True: 0, False: 256]
  ------------------
30843|    256|            }
30844|     60|            janet_buffer_push_u8(S->buffer, '}');
30845|     60|        }
30846|      0|        break;
30847|    107|        case JANET_STRUCT: {
  ------------------
  |  Branch (30847:9): [True: 107, False: 1.76M]
  ------------------
30848|    107|            JanetStruct st = janet_unwrap_struct(x);
  ------------------
  |  |  857|    107|#define janet_unwrap_struct(x) ((JanetStruct)janet_nanbox_to_pointer(x))
  ------------------
30849|    107|            janet_buffer_push_u8(S->buffer, '{');
30850|    107|            int isFirst = 1;
30851|    963|            for (int32_t i = 0; i < janet_struct_capacity(st); i++) {
  ------------------
  |  | 1849|    963|#define janet_struct_capacity(t) (janet_struct_head(t)->capacity)
  |  |  ------------------
  |  |  |  | 1846|    963|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (30851:33): [True: 856, False: 107]
  ------------------
30852|    856|                const JanetKV *kv = st + i;
30853|    856|                if (janet_checktype(kv->key, JANET_NIL)) continue;
  ------------------
  |  |  806|    856|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 642, False: 214]
  |  |  |  Branch (806:6): [Folded, False: 856]
  |  |  ------------------
  |  |  807|    856|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|    856|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|    856|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|    856|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    856|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    856|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
30854|    214|                if (!isFirst) janet_buffer_push_u8(S->buffer, ' ');
  ------------------
  |  Branch (30854:21): [True: 107, False: 107]
  ------------------
30855|    214|                isFirst = 0;
30856|    214|                if (print_jdn_one(S, kv->key, depth - 1)) return 1;
  ------------------
  |  Branch (30856:21): [True: 0, False: 214]
  ------------------
30857|    214|                janet_buffer_push_u8(S->buffer, ' ');
30858|    214|                if (print_jdn_one(S, kv->value, depth - 1)) return 1;
  ------------------
  |  Branch (30858:21): [True: 0, False: 214]
  ------------------
30859|    214|            }
30860|    107|            janet_buffer_push_u8(S->buffer, '}');
30861|    107|        }
30862|      0|        break;
30863|      0|#ifdef JANET_INT_TYPES
30864|      4|        case JANET_ABSTRACT: {
  ------------------
  |  Branch (30864:9): [True: 4, False: 1.76M]
  ------------------
30865|      4|            void *abst = janet_unwrap_abstract(x);
  ------------------
  |  |  866|      4|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
30866|      4|            if (janet_abstract_type(abst) == &janet_s64_type) {
  ------------------
  |  | 1899|      4|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|      4|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (30866:17): [True: 0, False: 4]
  ------------------
30867|      0|                janet_buffer_ensure(S->buffer, S->buffer->count + BUFSIZE, 2);
  ------------------
  |  |30435|      0|#define BUFSIZE 64
  ------------------
30868|      0|                int64_t s64 = janet_unwrap_s64(x);
30869|      0|                int count = snprintf((char *)S->buffer->data + S->buffer->count,
30870|      0|                                     BUFSIZE, "%" PRId64 ":s", s64);
  ------------------
  |  |30435|      0|#define BUFSIZE 64
  ------------------
30871|      0|                if (count < 0) {
  ------------------
  |  Branch (30871:21): [True: 0, False: 0]
  ------------------
30872|      0|                    return 1;
30873|      0|                }
30874|      0|                S->buffer->count += count;
30875|      4|            } else if (janet_abstract_type(abst) == &janet_u64_type) {
  ------------------
  |  | 1899|      4|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|      4|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (30875:24): [True: 4, False: 0]
  ------------------
30876|      4|                janet_buffer_ensure(S->buffer, S->buffer->count + BUFSIZE, 2);
  ------------------
  |  |30435|      4|#define BUFSIZE 64
  ------------------
30877|      4|                uint64_t u64 = janet_unwrap_u64(x);
30878|      4|                int count = snprintf((char *)S->buffer->data + S->buffer->count,
30879|      4|                                     BUFSIZE, "%" PRIu64 ":u", u64);
  ------------------
  |  |30435|      4|#define BUFSIZE 64
  ------------------
30880|      4|                if (count < 0) {
  ------------------
  |  Branch (30880:21): [True: 0, False: 4]
  ------------------
30881|      0|                    return 1;
30882|      0|                }
30883|      4|                S->buffer->count += count;
30884|      4|            } else {
30885|      0|                return 1;
30886|      0|            }
30887|      4|        }
30888|      4|        break;
30889|      4|#endif
30890|      4|        default:
  ------------------
  |  Branch (30890:9): [True: 0, False: 1.76M]
  ------------------
30891|      0|            return 1;
30892|  1.76M|    }
30893|  1.76M|    return 0;
30894|  1.76M|}
janet.c:contains_bad_chars:
30694|   796k|static int contains_bad_chars(const uint8_t *sym, int issym) {
30695|   796k|    int32_t len = janet_string_length(sym);
  ------------------
  |  | 1813|   796k|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  ------------------
  |  |  |  | 1812|   796k|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
30696|   796k|    if (len && issym && sym[0] >= '0' && sym[0] <= '9') return 1;
  ------------------
  |  Branch (30696:9): [True: 796k, False: 70]
  |  Branch (30696:16): [True: 796k, False: 240]
  |  Branch (30696:25): [True: 763k, False: 33.0k]
  |  Branch (30696:42): [True: 0, False: 763k]
  ------------------
30697|   796k|    if (!janet_valid_utf8(sym, len)) return 1;
  ------------------
  |  Branch (30697:9): [True: 0, False: 796k]
  ------------------
30698|  6.78M|    for (int32_t i = 0; i < len; i++) {
  ------------------
  |  Branch (30698:25): [True: 5.99M, False: 796k]
  ------------------
30699|  5.99M|        if (!janet_is_symbol_char(sym[i])) return 1;
  ------------------
  |  Branch (30699:13): [True: 0, False: 5.99M]
  ------------------
30700|  5.99M|    }
30701|   796k|    return 0;
30702|   796k|}
janet.c:scanformat:
31349|   151k|    char precision[3]) {
31350|   151k|    const char *p = strfrmt;
31351|       |
31352|       |    /* Parse strfrmt */
31353|   151k|    memset(width, '\0', 3);
31354|   151k|    memset(precision, '\0', 3);
31355|   151k|    while (*p != '\0' && strchr(FMT_FLAGS, *p) != NULL)
  ------------------
  |  |31315|   151k|#define FMT_FLAGS "-+ #0"
  ------------------
  |  Branch (31355:12): [True: 151k, False: 0]
  |  Branch (31355:26): [True: 0, False: 151k]
  ------------------
31356|      0|        p++; /* skip flags */
31357|   151k|    if ((size_t)(p - strfrmt) >= sizeof(FMT_FLAGS)) janet_panic("invalid format (repeated flags)");
  ------------------
  |  |31315|   151k|#define FMT_FLAGS "-+ #0"
  ------------------
  |  Branch (31357:9): [True: 0, False: 151k]
  ------------------
31358|   151k|    if (isdigit((int)(*p)))
  ------------------
  |  Branch (31358:9): [True: 0, False: 151k]
  ------------------
31359|      0|        width[0] = *p++; /* skip width */
31360|   151k|    if (isdigit((int)(*p)))
  ------------------
  |  Branch (31360:9): [True: 0, False: 151k]
  ------------------
31361|      0|        width[1] = *p++; /* (2 digits at most) */
31362|   151k|    if (*p == '.') {
  ------------------
  |  Branch (31362:9): [True: 0, False: 151k]
  ------------------
31363|      0|        p++;
31364|      0|        if (isdigit((int)(*p)))
  ------------------
  |  Branch (31364:13): [True: 0, False: 0]
  ------------------
31365|      0|            precision[0] = *p++; /* skip precision */
31366|      0|        if (isdigit((int)(*p)))
  ------------------
  |  Branch (31366:13): [True: 0, False: 0]
  ------------------
31367|      0|            precision[1] = *p++; /* (2 digits at most) */
31368|      0|    }
31369|   151k|    if (isdigit((int)(*p)))
  ------------------
  |  Branch (31369:9): [True: 0, False: 151k]
  ------------------
31370|      0|        janet_panic("invalid format (width or precision too long)");
31371|       |
31372|       |    /* Write to form - replace characters with fixed size stuff */
31373|   151k|    *(form++) = '%';
31374|   151k|    const char *p2 = strfrmt;
31375|   302k|    while (p2 <= p) {
  ------------------
  |  Branch (31375:12): [True: 151k, False: 151k]
  ------------------
31376|   151k|        char *loc = strchr(FMT_REPLACE_INTTYPES, *p2);
  ------------------
  |  |31316|   151k|#define FMT_REPLACE_INTTYPES "diouxX"
  ------------------
31377|   151k|        if (loc != NULL && *loc != '\0') {
  ------------------
  |  Branch (31377:13): [True: 1.32k, False: 149k]
  |  Branch (31377:28): [True: 1.32k, False: 0]
  ------------------
31378|  1.32k|            const char *mapping = get_fmt_mapping(*p2++);
31379|  1.32k|            size_t len = strlen(mapping);
31380|  1.32k|            memcpy(form, mapping, len);
31381|  1.32k|            form += len;
31382|   149k|        } else {
31383|   149k|            *(form++) = *(p2++);
31384|   149k|        }
31385|   151k|    }
31386|   151k|    *form = '\0';
31387|       |
31388|   151k|    return p;
31389|   151k|}
janet.c:get_fmt_mapping:
31337|  1.32k|static const char *get_fmt_mapping(char c) {
31338|  3.97k|    for (size_t i = 0; i < (sizeof(format_mappings) / sizeof(struct FmtMapping)); i++) {
  ------------------
  |  Branch (31338:24): [True: 3.97k, False: 0]
  ------------------
31339|  3.97k|        if (format_mappings[i].c == c)
  ------------------
  |  Branch (31339:13): [True: 1.32k, False: 2.65k]
  ------------------
31340|  1.32k|            return format_mappings[i].mapping;
31341|  3.97k|    }
31342|      0|    janet_assert(0, "bad format mapping");
  ------------------
  |  |  389|      0|#define janet_assert(c, m) do { \
  |  |  390|      0|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, Folded]
  |  |  ------------------
  |  |  391|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
31343|      0|}
janet.c:pushtypes:
31293|    579|static void pushtypes(JanetBuffer *buffer, int types) {
31294|    579|    int first = 1;
31295|    579|    int i = 0;
31296|  7.52k|    while (types) {
  ------------------
  |  Branch (31296:12): [True: 6.94k, False: 579]
  ------------------
31297|  6.94k|        if (1 & types) {
  ------------------
  |  Branch (31297:13): [True: 4.63k, False: 2.31k]
  ------------------
31298|  4.63k|            if (first) {
  ------------------
  |  Branch (31298:17): [True: 579, False: 4.05k]
  ------------------
31299|    579|                first = 0;
31300|  4.05k|            } else {
31301|  4.05k|                janet_buffer_push_cstring(buffer, (types == 1) ? " or " : ", ");
  ------------------
  |  Branch (31301:51): [True: 579, False: 3.47k]
  ------------------
31302|  4.05k|            }
31303|  4.63k|            janet_buffer_push_cstring(buffer, janet_type_names[i]);
31304|  4.63k|        }
31305|  6.94k|        i++;
31306|  6.94k|        types >>= 1;
31307|  6.94k|    }
31308|    579|}
janet.c:pushchunk:
31785|   594k|static void pushchunk(JanetcRegisterAllocator *ra) {
31786|       |    /* Registers 240-255 are always allocated (reserved) */
31787|   594k|    uint32_t chunk = ra->count == 7 ? 0xFFFF0000 : 0;
  ------------------
  |  Branch (31787:22): [True: 1.32k, False: 593k]
  ------------------
31788|   594k|    int32_t newcount = ra->count + 1;
31789|   594k|    if (newcount > ra->capacity) {
  ------------------
  |  Branch (31789:9): [True: 201k, False: 393k]
  ------------------
31790|   201k|        int32_t newcapacity = newcount * 2;
31791|   201k|        ra->chunks = janet_realloc(ra->chunks, (size_t) newcapacity * sizeof(uint32_t));
  ------------------
  |  | 2409|   201k|#define janet_realloc(X, Y) realloc((X), (Y))
  ------------------
31792|   201k|        if (!ra->chunks) {
  ------------------
  |  Branch (31792:13): [True: 0, False: 201k]
  ------------------
31793|      0|            JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
31794|      0|        }
31795|   201k|        ra->capacity = newcapacity;
31796|   201k|    }
31797|   594k|    ra->chunks[ra->count] = chunk;
31798|   594k|    ra->count = newcount;
31799|   594k|}
janet.c:janetc_def:
32659|   141k|static JanetSlot janetc_def(JanetFopts opts, int32_t argn, const Janet *argv) {
32660|   141k|    JanetCompiler *c = opts.compiler;
32661|   141k|    JanetTable *attr_table = handleattr(c, "def", argn, argv);
32662|   141k|    if (c->result.status == JANET_COMPILE_ERROR) {
  ------------------
  |  Branch (32662:9): [True: 4, False: 141k]
  ------------------
32663|      4|        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|      4|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      4|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      4|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      4|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32664|      4|    }
32665|   141k|    check_metadata_lint(c, attr_table);
32666|   141k|    opts.flags &= ~JANET_FOPTS_HINT;
  ------------------
  |  | 1148|   141k|#define JANET_FOPTS_HINT 0x20000
  ------------------
32667|   141k|    SlotHeadPair *into = NULL;
32668|   141k|    into = dohead_destructure(c, into, opts, argv[0], argv[argn - 1]);
32669|   141k|    if (c->result.status == JANET_COMPILE_ERROR) {
  ------------------
  |  Branch (32669:9): [True: 1.18k, False: 140k]
  ------------------
32670|  1.18k|        janet_v_free(into);
  ------------------
  |  |  756|  1.18k|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|  1.18k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 1.18k, False: 0]
  |  |  ------------------
  ------------------
32671|  1.18k|        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|  1.18k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  1.18k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.18k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.18k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32672|  1.18k|    }
32673|   140k|    JanetSlot ret = janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|   140k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|   140k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   140k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   140k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32674|   487k|    for (int32_t i = 0; i < janet_v_count(into); i++) {
  ------------------
  |  |  759|   487k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|   487k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   487k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 487k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (32674:25): [True: 346k, False: 140k]
  ------------------
32675|   346k|        destructure(c, into[i].lhs, into[i].rhs, defleaf, attr_table);
32676|   346k|        ret = into[i].rhs;
32677|   346k|    }
32678|       |    janet_v_free(into);
  ------------------
  |  |  756|   140k|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|   140k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 140k, False: 0]
  |  |  ------------------
  ------------------
32679|   140k|    return ret;
32680|   141k|}
janet.c:handleattr:
32411|   142k|static JanetTable *handleattr(JanetCompiler *c, const char *kind, int32_t argn, const Janet *argv) {
32412|   142k|    int32_t i;
32413|   142k|    if (argn < 2) {
  ------------------
  |  Branch (32413:9): [True: 0, False: 142k]
  ------------------
32414|      0|        janetc_error(c, janet_formatc("expected at least 2 arguments to %s", kind));
32415|      0|        return NULL;
32416|      0|    }
32417|   142k|    JanetTable *tab = janet_table(2);
32418|   142k|    const char *binding_name = janet_type(argv[0]) == JANET_SYMBOL
  ------------------
  |  |  795|   142k|    (isnan((x).number) \
  |  |  796|   142k|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|   142k|        : JANET_NUMBER)
  ------------------
  |  Branch (32418:32): [True: 139k, False: 3.13k]
  |  Branch (32418:32): [True: 137k, False: 5.07k]
  ------------------
32419|   142k|                               ? ((const char *)janet_unwrap_symbol(argv[0]))
  ------------------
  |  |  864|   137k|#define janet_unwrap_symbol(x) ((JanetSymbol)janet_nanbox_to_pointer(x))
  ------------------
32420|   142k|                               : "<multiple bindings>";
32421|   538k|    for (i = 1; i < argn - 1; i++) {
  ------------------
  |  Branch (32421:17): [True: 395k, False: 142k]
  ------------------
32422|   395k|        Janet attr = argv[i];
32423|   395k|        switch (janet_type(attr)) {
  ------------------
  |  |  795|   395k|    (isnan((x).number) \
  |  |  796|   395k|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|   395k|        : JANET_NUMBER)
  ------------------
  |  Branch (32423:17): [True: 395k, False: 3]
  ------------------
32424|    120|            case JANET_TUPLE:
  ------------------
  |  Branch (32424:13): [True: 120, False: 394k]
  ------------------
32425|    120|                janetc_cerror(c, "unexpected form - did you intend to use defn?");
32426|    120|                break;
32427|     22|            default:
  ------------------
  |  Branch (32427:13): [True: 22, False: 395k]
  ------------------
32428|     22|                janetc_error(c, janet_formatc("cannot add metadata %v to binding %s", attr, binding_name));
32429|     22|                break;
32430|      0|            case JANET_KEYWORD:
  ------------------
  |  Branch (32430:13): [True: 0, False: 395k]
  ------------------
32431|      0|                janet_table_put(tab, attr, janet_wrap_true());
  ------------------
  |  |  832|      0|#define janet_wrap_true() janet_nanbox_from_payload(JANET_BOOLEAN, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32432|      0|                break;
32433|   394k|            case JANET_STRING:
  ------------------
  |  Branch (32433:13): [True: 394k, False: 142]
  ------------------
32434|   394k|                janet_table_put(tab, janet_ckeywordv("doc"), attr);
  ------------------
  |  | 1843|   394k|#define janet_ckeywordv(cstr) janet_wrap_keyword(janet_ckeyword(cstr))
  |  |  ------------------
  |  |  |  |  850|   394k|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|   394k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|   394k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|   394k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32435|   394k|                break;
32436|      0|            case JANET_STRUCT:
  ------------------
  |  Branch (32436:13): [True: 0, False: 395k]
  ------------------
32437|      0|                janet_table_merge_struct(tab, janet_unwrap_struct(attr));
  ------------------
  |  |  857|      0|#define janet_unwrap_struct(x) ((JanetStruct)janet_nanbox_to_pointer(x))
  ------------------
32438|      0|                break;
32439|   395k|        }
32440|   395k|    }
32441|   142k|    return tab;
32442|   142k|}
janet.c:check_metadata_lint:
32582|   142k|static void check_metadata_lint(JanetCompiler *c, JanetTable *attr_table) {
32583|   142k|    if (!(c->scope->flags & JANET_SCOPE_TOP) && attr_table && attr_table->count) {
  ------------------
  |  | 1060|   142k|#define JANET_SCOPE_TOP 4
  ------------------
  |  Branch (32583:9): [True: 142k, False: 36]
  |  Branch (32583:49): [True: 142k, False: 0]
  |  Branch (32583:63): [True: 0, False: 142k]
  ------------------
32584|       |        /* A macro is a normal lint, other metadata is a strict lint */
32585|      0|        if (janet_truthy(janet_table_get_keyword(attr_table, "macro"))) {
  ------------------
  |  |  818|      0|    (!janet_checktype((x), JANET_NIL) && \
  |  |  ------------------
  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (818:5): [True: 0, False: 0]
  |  |  |  Branch (818:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  819|      0|     (!janet_checktype((x), JANET_BOOLEAN) || ((x).u64 & 0x1)))
  |  |  ------------------
  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (819:7): [True: 0, False: 0]
  |  |  |  Branch (819:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
32586|      0|            janetc_lintf(c, JANET_C_LINT_NORMAL, "macro tag is ignored in inner scopes");
32587|      0|        }
32588|      0|    }
32589|   142k|}
janet.c:destructure:
32242|  2.19M|                       JanetTable *attr) {
32243|  2.19M|    if (c->recursion_guard <= 0) {
  ------------------
  |  Branch (32243:9): [True: 98, False: 2.19M]
  ------------------
32244|     98|        janetc_error(c, janet_cstring("C stack recursed too deeply"));
32245|     98|        return 1;
32246|     98|    }
32247|  2.19M|    switch (janet_type(left)) {
  ------------------
  |  |  795|  2.19M|    (isnan((x).number) \
  |  |  796|  2.19M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  2.19M|        : JANET_NUMBER)
  ------------------
  |  Branch (32247:13): [True: 2.18M, False: 4.76k]
  ------------------
32248|  83.3k|        default:
  ------------------
  |  Branch (32248:9): [True: 83.3k, False: 2.10M]
  ------------------
32249|  83.3k|            janetc_error(c, janet_formatc("unexpected type in destructuring, got %v", left));
32250|  83.3k|            return 1;
32251|  1.25M|        case JANET_SYMBOL:
  ------------------
  |  Branch (32251:9): [True: 1.25M, False: 937k]
  ------------------
32252|       |            /* Leaf, assign right to left */
32253|  1.25M|            return leaf(c, janet_unwrap_symbol(left), right, attr);
  ------------------
  |  |  864|  1.25M|#define janet_unwrap_symbol(x) ((JanetSymbol)janet_nanbox_to_pointer(x))
  ------------------
32254|   853k|        case JANET_TUPLE:
  ------------------
  |  Branch (32254:9): [True: 853k, False: 1.33M]
  ------------------
32255|   853k|        case JANET_ARRAY: {
  ------------------
  |  Branch (32255:9): [True: 165, False: 2.19M]
  ------------------
32256|   853k|            int32_t len = 0;
32257|   853k|            const Janet *values = NULL;
32258|   853k|            janet_indexed_view(left, &values, &len);
32259|  2.64M|            for (int32_t i = 0; i < len; i++) {
  ------------------
  |  Branch (32259:33): [True: 1.79M, False: 853k]
  ------------------
32260|  1.79M|                JanetSlot nextright = janetc_farslot(c);
32261|  1.79M|                Janet subval = values[i];
32262|       |
32263|  1.79M|                if (janet_checktype(subval, JANET_SYMBOL) && !janet_cstrcmp(janet_unwrap_symbol(subval), "&")) {
  ------------------
  |  |  806|  3.58M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 1.10M, False: 685k]
  |  |  |  Branch (806:6): [Folded, False: 1.79M]
  |  |  ------------------
  |  |  807|  3.58M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  3.58M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  1.79M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  1.79M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.79M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.79M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                              if (janet_checktype(subval, JANET_SYMBOL) && !janet_cstrcmp(janet_unwrap_symbol(subval), "&")) {
  ------------------
  |  |  864|  1.10M|#define janet_unwrap_symbol(x) ((JanetSymbol)janet_nanbox_to_pointer(x))
  ------------------
  |  Branch (32263:62): [True: 65, False: 1.10M]
  ------------------
32264|     65|                    if (i + 1 >= len) {
  ------------------
  |  Branch (32264:25): [True: 24, False: 41]
  ------------------
32265|     24|                        janetc_cerror(c, "expected symbol following '& in destructuring pattern");
32266|     24|                        return 1;
32267|     24|                    }
32268|       |
32269|     41|                    if (i + 2 < len) {
  ------------------
  |  Branch (32269:25): [True: 9, False: 32]
  ------------------
32270|      9|                        int32_t num_extra = len - i - 1;
32271|      9|                        Janet *extra = janet_tuple_begin(num_extra);
32272|      9|                        janet_tuple_flag(extra) |= JANET_TUPLE_FLAG_BRACKETCTOR;
  ------------------
  |  | 1806|      9|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|      9|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                                      janet_tuple_flag(extra) |= JANET_TUPLE_FLAG_BRACKETCTOR;
  ------------------
  |  | 1798|      9|#define JANET_TUPLE_FLAG_BRACKETCTOR 0x10000
  ------------------
32273|       |
32274|  7.27k|                        for (int32_t j = 0; j < num_extra; ++j) {
  ------------------
  |  Branch (32274:45): [True: 7.26k, False: 9]
  ------------------
32275|  7.26k|                            extra[j] = values[j + i + 1];
32276|  7.26k|                        }
32277|       |
32278|      9|                        janetc_error(c, janet_formatc("expected a single symbol follow '& in destructuring pattern, found %q", janet_wrap_tuple(janet_tuple_end(extra))));
  ------------------
  |  |  843|      9|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|      9|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      9|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      9|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32279|      9|                        return 1;
32280|      9|                    }
32281|       |
32282|     32|                    if (!janet_checktype(values[i + 1], JANET_SYMBOL)) {
  ------------------
  |  |  806|     32|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 32]
  |  |  ------------------
  |  |  807|     32|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|     32|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|     32|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|     32|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|     32|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|     32|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (32282:25): [True: 28, False: 4]
  ------------------
32283|     28|                        janetc_error(c, janet_formatc("expected symbol following '& in destructuring pattern, found %q", values[i + 1]));
32284|     28|                        return 1;
32285|     28|                    }
32286|       |
32287|      4|                    JanetSlot argi = janetc_farslot(c);
32288|      4|                    JanetSlot arg  = janetc_farslot(c);
32289|      4|                    JanetSlot len  = janetc_farslot(c);
32290|       |
32291|      4|                    janetc_emit_si(c, JOP_LOAD_INTEGER, argi, i, 0);
32292|      4|                    janetc_emit_ss(c, JOP_LENGTH, len, right, 0);
32293|       |
32294|       |                    /* loop condition - reuse arg slot for the condition result */
32295|      4|                    int32_t label_loop_start = janetc_emit_sss(c, JOP_LESS_THAN, arg, argi, len, 0);
32296|      4|                    int32_t label_loop_cond_jump = janetc_emit_si(c, JOP_JUMP_IF_NOT, arg, 0, 0);
32297|       |
32298|       |                    /* loop body */
32299|      4|                    janetc_emit_sss(c, JOP_GET, arg, right, argi, 0);
32300|      4|                    janetc_emit_s(c, JOP_PUSH, arg, 0);
32301|      4|                    janetc_emit_ssi(c, JOP_ADD_IMMEDIATE, argi, argi, 1, 0);
32302|       |
32303|       |                    /* loop - jump back to the start of the loop */
32304|      4|                    int32_t label_loop_loop = janet_v_count(c->buffer);
  ------------------
  |  |  759|      4|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|      4|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      4|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 4, False: 0]
  |  |  ------------------
  ------------------
32305|      4|                    janetc_emit(c, JOP_JUMP);
32306|      4|                    int32_t label_loop_exit = janet_v_count(c->buffer);
  ------------------
  |  |  759|      4|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|      4|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      4|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 4, False: 0]
  |  |  ------------------
  ------------------
32307|       |
32308|       |                    /* avoid shifting negative numbers */
32309|      4|                    check_16bit_jump(c, label_loop_cond_jump, label_loop_exit);
32310|      4|                    check_24bit_jump(c, label_loop_start, label_loop_loop);
32311|      4|                    c->buffer[label_loop_cond_jump] |= (uint32_t)(label_loop_exit - label_loop_cond_jump) << 16;
32312|      4|                    c->buffer[label_loop_loop] |= (uint32_t)(label_loop_start - label_loop_loop) << 8;
32313|       |
32314|      4|                    janetc_freeslot(c, argi);
32315|      4|                    janetc_freeslot(c, arg);
32316|      4|                    janetc_freeslot(c, len);
32317|       |
32318|      4|                    janetc_emit_s(c, JOP_MAKE_TUPLE, nextright, 1);
32319|       |
32320|      4|                    leaf(c, janet_unwrap_symbol(values[i + 1]), nextright, attr);
  ------------------
  |  |  864|      4|#define janet_unwrap_symbol(x) ((JanetSymbol)janet_nanbox_to_pointer(x))
  ------------------
32321|      4|                    janetc_freeslot(c, nextright);
32322|      4|                    break;
32323|     32|                }
32324|       |
32325|  1.79M|                if (i < 0x100) {
  ------------------
  |  Branch (32325:21): [True: 1.72M, False: 63.8k]
  ------------------
32326|  1.72M|                    janetc_emit_ssu(c, JOP_GET_INDEX, nextright, right, (uint8_t) i, 1);
32327|  1.72M|                } else {
32328|  63.8k|                    JanetSlot k = janetc_cslot(janet_wrap_integer(i));
  ------------------
  |  |  967|  63.8k|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|  63.8k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
32329|  63.8k|                    janetc_emit_sss(c, JOP_IN, nextright, right, k, 1);
32330|  63.8k|                }
32331|  1.79M|                c->recursion_guard--;
32332|  1.79M|                if (destructure(c, subval, nextright, leaf, attr))
  ------------------
  |  Branch (32332:21): [True: 1.79M, False: 0]
  ------------------
32333|  1.79M|                    janetc_freeslot(c, nextright);
32334|  1.79M|                c->recursion_guard++;
32335|  1.79M|            }
32336|   853k|        }
32337|   853k|        return 1;
32338|    106|        case JANET_TABLE:
  ------------------
  |  Branch (32338:9): [True: 106, False: 2.19M]
  ------------------
32339|    165|        case JANET_STRUCT: {
  ------------------
  |  Branch (32339:9): [True: 59, False: 2.19M]
  ------------------
32340|    165|            const JanetKV *kvs = NULL;
32341|    165|            int32_t cap = 0, len = 0;
32342|    165|            janet_dictionary_view(left, &kvs, &len, &cap);
32343|  1.24k|            for (int32_t i = 0; i < cap; i++) {
  ------------------
  |  Branch (32343:33): [True: 1.07k, False: 165]
  ------------------
32344|  1.07k|                if (janet_checktype(kvs[i].key, JANET_NIL)) continue;
  ------------------
  |  |  806|  1.07k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 801, False: 276]
  |  |  |  Branch (806:6): [Folded, False: 1.07k]
  |  |  ------------------
  |  |  807|  1.07k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  1.07k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  1.07k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  1.07k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.07k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.07k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32345|    276|                JanetSlot nextright = janetc_farslot(c);
32346|    276|                JanetSlot k = janetc_value(janetc_fopts_default(c), kvs[i].key);
32347|    276|                janetc_emit_sss(c, JOP_IN, nextright, right, k, 1);
32348|    276|                c->recursion_guard--;
32349|    276|                if (destructure(c, kvs[i].value, nextright, leaf, attr))
  ------------------
  |  Branch (32349:21): [True: 276, False: 0]
  ------------------
32350|    276|                    janetc_freeslot(c, nextright);
32351|    276|                c->recursion_guard++;
32352|    276|            }
32353|    165|        }
32354|    165|        return 1;
32355|  2.19M|    }
32356|  2.19M|}
janet.c:check_16bit_jump:
32107|  3.99k|static void check_16bit_jump(JanetCompiler *c, int32_t lab1, int32_t lab2) {
32108|  3.99k|    if (bad_16bit_jump(lab1, lab2)) {
  ------------------
  |  Branch (32108:9): [True: 21, False: 3.97k]
  ------------------
32109|     21|        janetc_cerror(c, "bad 16-bit jump, too large");
32110|     21|    }
32111|  3.99k|}
janet.c:bad_16bit_jump:
32101|  3.99k|static int bad_16bit_jump(int32_t lab1, int32_t lab2) {
32102|  3.99k|    if (lab2 - lab1 > INT16_MAX) return 1;
  ------------------
  |  Branch (32102:9): [True: 21, False: 3.97k]
  ------------------
32103|  3.97k|    if (lab2 - lab1 < INT16_MIN) return 1;
  ------------------
  |  Branch (32103:9): [True: 0, False: 3.97k]
  ------------------
32104|  3.97k|    return 0;
32105|  3.97k|}
janet.c:check_24bit_jump:
32119|  3.26k|static void check_24bit_jump(JanetCompiler *c, int32_t lab1, int32_t lab2) {
32120|  3.26k|    if (bad_24bit_jump(lab1, lab2)) {
  ------------------
  |  Branch (32120:9): [True: 0, False: 3.26k]
  ------------------
32121|      0|        janetc_cerror(c, "bad 24-bit jump, too large");
32122|      0|    }
32123|  3.26k|}
janet.c:bad_24bit_jump:
32113|  3.26k|static int bad_24bit_jump(int32_t lab1, int32_t lab2) {
32114|  3.26k|    if (lab2 - lab1 > 0xFFFFFF) return 1;
  ------------------
  |  Branch (32114:9): [True: 0, False: 3.26k]
  ------------------
32115|  3.26k|    if (lab2 - lab1 < -0x1000000) return 1;
  ------------------
  |  Branch (32115:9): [True: 0, False: 3.26k]
  ------------------
32116|  3.26k|    return 0;
32117|  3.26k|}
janet.c:defleaf:
32617|  1.25M|    JanetTable *tab) {
32618|  1.25M|    JanetTable *entry = NULL;
32619|  1.25M|    int is_redef = 0;
32620|  1.25M|    if (c->scope->flags & JANET_SCOPE_TOP) {
  ------------------
  |  | 1060|  1.25M|#define JANET_SCOPE_TOP 4
  ------------------
  |  Branch (32620:9): [True: 1.60k, False: 1.25M]
  ------------------
32621|  1.60k|        entry = janet_table_clone(tab);
32622|  1.60k|        janet_table_put(entry, janet_ckeywordv("source-map"),
  ------------------
  |  | 1843|  1.60k|#define janet_ckeywordv(cstr) janet_wrap_keyword(janet_ckeyword(cstr))
  |  |  ------------------
  |  |  |  |  850|  1.60k|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|  1.60k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  1.60k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  1.60k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32623|  1.60k|                        janet_wrap_tuple(janetc_make_sourcemap(c)));
  ------------------
  |  |  843|  1.60k|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|  1.60k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.60k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.60k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32624|       |
32625|  1.60k|        is_redef = c->is_redef;
32626|  1.60k|        if (is_redef) janet_table_put(entry, janet_ckeywordv("redef"), janet_wrap_true());
  ------------------
  |  | 1843|      0|#define janet_ckeywordv(cstr) janet_wrap_keyword(janet_ckeyword(cstr))
  |  |  ------------------
  |  |  |  |  850|      0|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|      0|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (is_redef) janet_table_put(entry, janet_ckeywordv("redef"), janet_wrap_true());
  ------------------
  |  |  832|      0|#define janet_wrap_true() janet_nanbox_from_payload(JANET_BOOLEAN, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (32626:13): [True: 0, False: 1.60k]
  ------------------
32627|       |
32628|  1.60k|        if (is_redef) {
  ------------------
  |  Branch (32628:13): [True: 0, False: 1.60k]
  ------------------
32629|      0|            JanetBinding binding = janet_resolve_ext(c->env, sym);
32630|      0|            JanetArray *ref;
32631|      0|            if (binding.type == JANET_BINDING_DYNAMIC_DEF || binding.type == JANET_BINDING_DYNAMIC_MACRO) {
  ------------------
  |  Branch (32631:17): [True: 0, False: 0]
  |  Branch (32631:62): [True: 0, False: 0]
  ------------------
32632|      0|                ref = janet_unwrap_array(binding.value);
  ------------------
  |  |  860|      0|#define janet_unwrap_array(x) ((JanetArray *)janet_nanbox_to_pointer(x))
  ------------------
32633|      0|            } else {
32634|      0|                ref = janet_array(1);
32635|      0|                janet_array_push(ref, janet_wrap_nil());
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32636|      0|            }
32637|      0|            janet_table_put(entry, janet_ckeywordv("ref"), janet_wrap_array(ref));
  ------------------
  |  | 1843|      0|#define janet_ckeywordv(cstr) janet_wrap_keyword(janet_ckeyword(cstr))
  |  |  ------------------
  |  |  |  |  850|      0|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|      0|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          janet_table_put(entry, janet_ckeywordv("ref"), janet_wrap_array(ref));
  ------------------
  |  |  845|      0|#define janet_wrap_array(s) janet_nanbox_wrap_((s), JANET_ARRAY)
  |  |  ------------------
  |  |  |  |  825|      0|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32638|      0|            JanetSlot refslot = janetc_cslot(janet_wrap_array(ref));
  ------------------
  |  |  845|      0|#define janet_wrap_array(s) janet_nanbox_wrap_((s), JANET_ARRAY)
  |  |  ------------------
  |  |  |  |  825|      0|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32639|      0|            janetc_emit_ssu(c, JOP_PUT_INDEX, refslot, s, 0, 0);
32640|  1.60k|        } else {
32641|  1.60k|            JanetSlot valsym = janetc_cslot(janet_ckeywordv("value"));
  ------------------
  |  | 1843|  1.60k|#define janet_ckeywordv(cstr) janet_wrap_keyword(janet_ckeyword(cstr))
  |  |  ------------------
  |  |  |  |  850|  1.60k|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|  1.60k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  1.60k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  1.60k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32642|  1.60k|            JanetSlot tabslot = janetc_cslot(janet_wrap_table(entry));
  ------------------
  |  |  846|  1.60k|#define janet_wrap_table(s) janet_nanbox_wrap_((s), JANET_TABLE)
  |  |  ------------------
  |  |  |  |  825|  1.60k|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.60k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.60k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32643|  1.60k|            janetc_emit_sss(c, JOP_PUT, tabslot, valsym, s, 0);
32644|  1.60k|        }
32645|  1.60k|    }
32646|  1.25M|    int no_unused = tab && tab->count && janet_truthy(janet_table_get_keyword(tab, "unused"));
  ------------------
  |  |  818|  1.25M|    (!janet_checktype((x), JANET_NIL) && \
  |  |  ------------------
  |  |  |  |  806|    468|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 234]
  |  |  |  |  ------------------
  |  |  |  |  807|    468|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|    468|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|    234|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|    234|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|    234|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|    234|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (818:6): [True: 0, False: 234]
  |  |  ------------------
  |  |  819|  1.25M|     (!janet_checktype((x), JANET_BOOLEAN) || ((x).u64 & 0x1)))
  |  |  ------------------
  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (819:7): [True: 0, False: 0]
  |  |  |  Branch (819:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (32646:21): [True: 1.13M, False: 116k]
  |  Branch (32646:28): [True: 234, False: 1.13M]
  ------------------
32647|  1.25M|    int no_shadow = is_redef || (tab && tab->count && janet_truthy(janet_table_get_keyword(tab, "shadow")));
  ------------------
  |  |  818|    234|    (!janet_checktype((x), JANET_NIL) && \
  |  |  ------------------
  |  |  |  |  806|    468|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 234]
  |  |  |  |  ------------------
  |  |  |  |  807|    468|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|    468|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|    234|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|    234|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|    234|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|    234|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (818:6): [True: 0, False: 234]
  |  |  ------------------
  |  |  819|    234|     (!janet_checktype((x), JANET_BOOLEAN) || ((x).u64 & 0x1)))
  |  |  ------------------
  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (819:7): [True: 0, False: 0]
  |  |  |  Branch (819:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (32647:21): [True: 0, False: 1.25M]
  |  Branch (32647:34): [True: 1.13M, False: 116k]
  |  Branch (32647:41): [True: 234, False: 1.13M]
  ------------------
32648|  1.25M|    uint32_t def_flags = 0;
32649|  1.25M|    if (no_unused) def_flags |= JANET_DEFFLAG_NO_UNUSED;
  ------------------
  |  | 1183|      0|#define JANET_DEFFLAG_NO_UNUSED 2
  ------------------
  |  Branch (32649:9): [True: 0, False: 1.25M]
  ------------------
32650|  1.25M|    if (no_shadow) def_flags |= JANET_DEFFLAG_NO_SHADOWCHECK;
  ------------------
  |  | 1182|      0|#define JANET_DEFFLAG_NO_SHADOWCHECK 1
  ------------------
  |  Branch (32650:9): [True: 0, False: 1.25M]
  ------------------
32651|  1.25M|    int result = namelocal(c, sym, 0, s, def_flags);
32652|  1.25M|    if (entry) {
  ------------------
  |  Branch (32652:9): [True: 1.60k, False: 1.25M]
  ------------------
32653|       |        /* Add env entry to env AFTER namelocal to avoid the shadowcheck false positive */
32654|  1.60k|        janet_table_put(c->env, janet_wrap_symbol(sym), janet_wrap_table(entry));
  ------------------
  |  |  849|  1.60k|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  ------------------
  |  |  |  |  828|  1.60k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.60k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.60k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      janet_table_put(c->env, janet_wrap_symbol(sym), janet_wrap_table(entry));
  ------------------
  |  |  846|  1.60k|#define janet_wrap_table(s) janet_nanbox_wrap_((s), JANET_TABLE)
  |  |  ------------------
  |  |  |  |  825|  1.60k|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.60k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.60k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32655|  1.60k|    }
32656|  1.25M|    return result;
32657|  1.25M|}
janet.c:janetc_make_sourcemap:
32359|  1.80k|static const Janet *janetc_make_sourcemap(JanetCompiler *c) {
32360|  1.80k|    Janet *tup = janet_tuple_begin(3);
32361|  1.80k|    tup[0] = c->source ? janet_wrap_string(c->source) : janet_wrap_nil();
  ------------------
  |  |  848|  1.80k|#define janet_wrap_string(s) janet_nanbox_wrap_c((s), JANET_STRING)
  |  |  ------------------
  |  |  |  |  828|  1.80k|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.80k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.80k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  tup[0] = c->source ? janet_wrap_string(c->source) : janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  1.80k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (32361:14): [True: 1.80k, False: 0]
  ------------------
32362|  1.80k|    tup[1] = janet_wrap_integer(c->current_mapping.line);
  ------------------
  |  |  967|  1.80k|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|  1.80k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
32363|  1.80k|    tup[2] = janet_wrap_integer(c->current_mapping.column);
  ------------------
  |  |  967|  1.80k|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|  1.80k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
32364|  1.80k|    return janet_tuple_end(tup);
32365|  1.80k|}
janet.c:namelocal:
32515|  1.25M|static int namelocal(JanetCompiler *c, const uint8_t *head, int32_t flags, JanetSlot ret, uint32_t def_flags) {
32516|  1.25M|    int isUnnamedRegister = !(ret.flags & JANET_SLOT_NAMED) &&
  ------------------
  |  | 1039|  1.25M|#define JANET_SLOT_NAMED 0x20000
  ------------------
  |  Branch (32516:29): [True: 1.25M, False: 1.24k]
  ------------------
32517|  1.25M|                            ret.index > 0 &&
  ------------------
  |  Branch (32517:29): [True: 1.11M, False: 141k]
  ------------------
32518|  1.11M|                            ret.envindex >= 0;
  ------------------
  |  Branch (32518:29): [True: 0, False: 1.11M]
  ------------------
32519|       |    /* optimization for `(def x my-def)` - don't emit a movn/movf instruction, we can just alias my-def */
32520|       |    /* TODO - implement optimization for `(def x my-var)` correctly as well w/ de-aliasing */
32521|  1.25M|    int canAlias = !(flags & JANET_SLOT_MUTABLE) &&
  ------------------
  |  | 1040|  1.25M|#define JANET_SLOT_MUTABLE 0x40000
  ------------------
  |  Branch (32521:20): [True: 1.25M, False: 1.11k]
  ------------------
32522|  1.25M|                   !(ret.flags & JANET_SLOT_MUTABLE) &&
  ------------------
  |  | 1040|  1.25M|#define JANET_SLOT_MUTABLE 0x40000
  ------------------
  |  Branch (32522:20): [True: 1.25M, False: 1.19k]
  ------------------
32523|  1.25M|                   (ret.flags & JANET_SLOT_NAMED) &&
  ------------------
  |  | 1039|  1.25M|#define JANET_SLOT_NAMED 0x20000
  ------------------
  |  Branch (32523:20): [True: 46, False: 1.25M]
  ------------------
32524|     46|                   (ret.index >= 0) &&
  ------------------
  |  Branch (32524:20): [True: 46, False: 0]
  ------------------
32525|     46|                   (ret.envindex == -1);
  ------------------
  |  Branch (32525:20): [True: 46, False: 0]
  ------------------
32526|  1.25M|    if (canAlias) {
  ------------------
  |  Branch (32526:9): [True: 46, False: 1.25M]
  ------------------
32527|     46|        ret.flags &= ~JANET_SLOT_MUTABLE;
  ------------------
  |  | 1040|     46|#define JANET_SLOT_MUTABLE 0x40000
  ------------------
32528|     46|        isUnnamedRegister = 1; /* don't free slot after use - is an alias for another slot */
32529|  1.25M|    } else if (!isUnnamedRegister) {
  ------------------
  |  Branch (32529:16): [True: 1.25M, False: 0]
  ------------------
32530|       |        /* Slot is not able to be named */
32531|  1.25M|        JanetSlot localslot = janetc_farslot(c);
32532|  1.25M|        janetc_copy(c, localslot, ret);
32533|  1.25M|        ret = localslot;
32534|  1.25M|    }
32535|  1.25M|    ret.flags |= flags;
32536|  1.25M|    if (c->scope->flags & JANET_SCOPE_TOP) {
  ------------------
  |  | 1060|  1.25M|#define JANET_SCOPE_TOP 4
  ------------------
  |  Branch (32536:9): [True: 1.60k, False: 1.25M]
  ------------------
32537|  1.60k|        def_flags |= JANET_DEFFLAG_NO_UNUSED;
  ------------------
  |  | 1183|  1.60k|#define JANET_DEFFLAG_NO_UNUSED 2
  ------------------
32538|  1.60k|    }
32539|  1.25M|    janetc_nameslot(c, head, ret, def_flags);
32540|  1.25M|    return !isUnnamedRegister;
32541|  1.25M|}
janet.c:janetc_do:
32819|  9.64k|static JanetSlot janetc_do(JanetFopts opts, int32_t argn, const Janet *argv) {
32820|  9.64k|    int32_t i;
32821|  9.64k|    JanetSlot ret = janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|  9.64k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  9.64k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  9.64k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  9.64k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32822|  9.64k|    JanetCompiler *c = opts.compiler;
32823|  9.64k|    JanetFopts subopts = janetc_fopts_default(c);
32824|  9.64k|    JanetScope tempscope;
32825|  9.64k|    janetc_scope(&tempscope, c, 0, "do");
32826|   598k|    for (i = 0; i < argn; i++) {
  ------------------
  |  Branch (32826:17): [True: 588k, False: 9.64k]
  ------------------
32827|   588k|        if (i != argn - 1) {
  ------------------
  |  Branch (32827:13): [True: 578k, False: 9.64k]
  ------------------
32828|   578k|            subopts.flags = JANET_FOPTS_DROP;
  ------------------
  |  | 1149|   578k|#define JANET_FOPTS_DROP 0x40000
  ------------------
32829|   578k|        } else {
32830|  9.64k|            subopts = opts;
32831|  9.64k|            subopts.flags &= ~JANET_FOPTS_ACCEPT_SPLICE;
  ------------------
  |  | 1150|  9.64k|#define JANET_FOPTS_ACCEPT_SPLICE 0x80000
  ------------------
32832|  9.64k|        }
32833|   588k|        ret = janetc_value(subopts, argv[i]);
32834|   588k|        if (i != argn - 1) {
  ------------------
  |  Branch (32834:13): [True: 578k, False: 9.64k]
  ------------------
32835|   578k|            janetc_freeslot(c, ret);
32836|   578k|        }
32837|   588k|    }
32838|  9.64k|    janetc_popscope_keepslot(c, ret);
32839|  9.64k|    return ret;
32840|  9.64k|}
janet.c:janetc_fn:
33076|   171k|static JanetSlot janetc_fn(JanetFopts opts, int32_t argn, const Janet *argv) {
33077|   171k|    JanetCompiler *c = opts.compiler;
33078|   171k|    JanetFuncDef *def;
33079|   171k|    JanetSlot ret;
33080|   171k|    Janet head;
33081|   171k|    JanetScope fnscope;
33082|   171k|    int32_t paramcount, argi, parami, arity, min_arity = 0, max_arity, defindex, i;
33083|   171k|    JanetFopts subopts = janetc_fopts_default(c);
33084|   171k|    const Janet *params;
33085|   171k|    const char *errmsg = NULL;
33086|       |
33087|       |    /* Function flags */
33088|   171k|    int vararg = 0;
33089|   171k|    int structarg = 0;
33090|   171k|    int allow_extra = 0;
33091|   171k|    int selfref = 0;
33092|   171k|    int hasname = 0;
33093|   171k|    int seenamp = 0;
33094|   171k|    int seenopt = 0;
33095|   171k|    int namedargs = 0;
33096|       |
33097|       |    /* Begin function */
33098|   171k|    c->scope->flags |= JANET_SCOPE_CLOSURE;
  ------------------
  |  | 1062|   171k|#define JANET_SCOPE_CLOSURE 16
  ------------------
33099|   171k|    janetc_scope(&fnscope, c, JANET_SCOPE_FUNCTION, "function");
  ------------------
  |  | 1058|   171k|#define JANET_SCOPE_FUNCTION 1
  ------------------
33100|       |
33101|   171k|    if (argn == 0) {
  ------------------
  |  Branch (33101:9): [True: 0, False: 171k]
  ------------------
33102|      0|        errmsg = "expected at least 1 argument to function literal";
33103|      0|        goto error;
33104|      0|    }
33105|       |
33106|       |    /* Read function parameters */
33107|   171k|    parami = 0;
33108|   171k|    head = argv[0];
33109|   171k|    if (janet_checktype(head, JANET_SYMBOL)) {
  ------------------
  |  |  806|   171k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 847, False: 171k]
  |  |  |  Branch (806:6): [Folded, False: 171k]
  |  |  ------------------
  |  |  807|   171k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   171k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   171k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   171k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   171k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   171k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
33110|    847|        selfref = 1;
33111|    847|        hasname = 1;
33112|    847|        parami = 1;
33113|   171k|    } else if (janet_checktype(head, JANET_KEYWORD)) {
  ------------------
  |  |  806|   171k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 168k, False: 2.55k]
  |  |  |  Branch (806:6): [Folded, False: 171k]
  |  |  ------------------
  |  |  807|   171k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   171k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   171k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   171k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   171k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   171k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
33114|   168k|        hasname = 1;
33115|   168k|        parami = 1;
33116|   168k|    }
33117|   171k|    if (parami >= argn || !janet_checktype(argv[parami], JANET_TUPLE)) {
  ------------------
  |  |  806|   171k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 171k]
  |  |  ------------------
  |  |  807|   171k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|   171k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|   171k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|   171k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|   171k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|   171k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (33117:9): [True: 0, False: 171k]
  |  Branch (33117:27): [True: 348, False: 171k]
  ------------------
33118|    348|        errmsg = "expected function parameters";
33119|    348|        goto error;
33120|    348|    }
33121|       |
33122|       |    /* Keep track of destructured parameters */
33123|   171k|    JanetSlot *destructed_params = NULL;
33124|   171k|    JanetSlot *named_params = NULL;
33125|   171k|    JanetTable *named_table = NULL;
33126|   171k|    JanetSlot named_slot;
33127|       |
33128|       |    /* Compile function parameters */
33129|   171k|    params = janet_unwrap_tuple(argv[parami]);
  ------------------
  |  |  858|   171k|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
33130|   171k|    paramcount = janet_tuple_length(params);
  ------------------
  |  | 1802|   171k|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|   171k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
33131|   171k|    arity = paramcount;
33132|   230k|    for (i = 0; i < paramcount; i++) {
  ------------------
  |  Branch (33132:17): [True: 59.0k, False: 171k]
  ------------------
33133|  59.0k|        Janet param = params[i];
33134|  59.0k|        if (namedargs) {
  ------------------
  |  Branch (33134:13): [True: 0, False: 59.0k]
  ------------------
33135|      0|            arity--;
33136|      0|            if (!janet_checktype(param, JANET_SYMBOL)) {
  ------------------
  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  ------------------
  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (33136:17): [True: 0, False: 0]
  ------------------
33137|      0|                errmsg = "only named arguments can follow &named";
33138|      0|                goto error;
33139|      0|            }
33140|      0|            Janet key = janet_wrap_keyword(janet_unwrap_symbol(param));
  ------------------
  |  |  850|      0|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  ------------------
  |  |  |  |  828|      0|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
33141|      0|            janet_table_put(named_table, key, param);
33142|      0|            janet_v_push(named_params, janetc_farslot(c));
  ------------------
  |  |  757|      0|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|      0|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|      0|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|      0|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (768:50): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|      0|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
33143|  59.0k|        } else if (janet_checktype(param, JANET_SYMBOL)) {
  ------------------
  |  |  806|  59.0k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 4.68k, False: 54.3k]
  |  |  |  Branch (806:6): [Folded, False: 59.0k]
  |  |  ------------------
  |  |  807|  59.0k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  59.0k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  59.0k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  59.0k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  59.0k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  59.0k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
33144|       |            /* Check for varargs and unfixed arity */
33145|  4.68k|            const uint8_t *sym = janet_unwrap_symbol(param);
  ------------------
  |  |  864|  4.68k|#define janet_unwrap_symbol(x) ((JanetSymbol)janet_nanbox_to_pointer(x))
  ------------------
33146|  4.68k|            if (sym[0] == '&') {
  ------------------
  |  Branch (33146:17): [True: 198, False: 4.48k]
  ------------------
33147|    198|                if (!janet_cstrcmp(sym, "&")) {
  ------------------
  |  Branch (33147:21): [True: 23, False: 175]
  ------------------
33148|     23|                    if (seenamp) {
  ------------------
  |  Branch (33148:25): [True: 0, False: 23]
  ------------------
33149|      0|                        errmsg = "& in unexpected location";
33150|      0|                        goto error;
33151|     23|                    } else if (i == paramcount - 1) {
  ------------------
  |  Branch (33151:32): [True: 0, False: 23]
  ------------------
33152|      0|                        allow_extra = 1;
33153|      0|                        arity--;
33154|     23|                    } else if (i == paramcount - 2) {
  ------------------
  |  Branch (33154:32): [True: 22, False: 1]
  ------------------
33155|     22|                        vararg = 1;
33156|     22|                        arity -= 2;
33157|     22|                    } else {
33158|      1|                        errmsg = "& in unexpected location";
33159|      1|                        goto error;
33160|      1|                    }
33161|     22|                    seenamp = 1;
33162|    175|                } else if (!janet_cstrcmp(sym, "&opt")) {
  ------------------
  |  Branch (33162:28): [True: 163, False: 12]
  ------------------
33163|    163|                    if (seenopt) {
  ------------------
  |  Branch (33163:25): [True: 0, False: 163]
  ------------------
33164|      0|                        errmsg = "only one &opt allowed";
33165|      0|                        goto error;
33166|    163|                    } else if (i == paramcount - 1) {
  ------------------
  |  Branch (33166:32): [True: 163, False: 0]
  ------------------
33167|    163|                        errmsg = "&opt cannot be last item in parameter list";
33168|    163|                        goto error;
33169|    163|                    }
33170|      0|                    min_arity = i;
33171|      0|                    arity--;
33172|      0|                    seenopt = 1;
33173|     12|                } else if (!janet_cstrcmp(sym, "&keys")) {
  ------------------
  |  Branch (33173:28): [True: 0, False: 12]
  ------------------
33174|      0|                    if (seenamp) {
  ------------------
  |  Branch (33174:25): [True: 0, False: 0]
  ------------------
33175|      0|                        errmsg = "&keys in unexpected location";
33176|      0|                        goto error;
33177|      0|                    } else if (i == paramcount - 2) {
  ------------------
  |  Branch (33177:32): [True: 0, False: 0]
  ------------------
33178|      0|                        vararg = 1;
33179|      0|                        structarg = 1;
33180|      0|                        arity -= 2;
33181|      0|                    } else {
33182|      0|                        errmsg = "&keys in unexpected location";
33183|      0|                        goto error;
33184|      0|                    }
33185|      0|                    seenamp = 1;
33186|     12|                } else if (!janet_cstrcmp(sym, "&named")) {
  ------------------
  |  Branch (33186:28): [True: 0, False: 12]
  ------------------
33187|      0|                    if (seenamp) {
  ------------------
  |  Branch (33187:25): [True: 0, False: 0]
  ------------------
33188|      0|                        errmsg = "&named in unexpected location";
33189|      0|                        goto error;
33190|      0|                    }
33191|      0|                    vararg = 1;
33192|      0|                    structarg = 1;
33193|      0|                    arity--;
33194|      0|                    seenamp = 1;
33195|      0|                    namedargs = 1;
33196|      0|                    named_table = janet_table(10);
33197|      0|                    named_slot = janetc_farslot(c);
33198|     12|                } else {
33199|     12|                    janetc_nameslot(c, sym, janetc_farslot(c), 0);
33200|     12|                }
33201|  4.48k|            } else {
33202|  4.48k|                janetc_nameslot(c, sym, janetc_farslot(c), 0);
33203|  4.48k|            }
33204|  54.3k|        } else {
33205|  54.3k|            janet_v_push(destructed_params, janetc_farslot(c));
  ------------------
  |  |  757|  54.3k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  54.3k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  54.3k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  54.1k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  54.1k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  54.1k|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  54.1k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 237, False: 54.1k]
  |  |  |  |  |  |  |  Branch (768:50): [True: 172, False: 53.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|    409|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  54.3k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  54.3k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
33206|  54.3k|        }
33207|  59.0k|    }
33208|       |
33209|       |    /* Compile named arguments */
33210|   171k|    if (namedargs) {
  ------------------
  |  Branch (33210:9): [True: 0, False: 171k]
  ------------------
33211|      0|        Janet param = janet_wrap_table(named_table);
  ------------------
  |  |  846|      0|#define janet_wrap_table(s) janet_nanbox_wrap_((s), JANET_TABLE)
  |  |  ------------------
  |  |  |  |  825|      0|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
33212|      0|        destructure(c, param, named_slot, defleaf, NULL);
33213|      0|        janetc_freeslot(c, named_slot);
33214|      0|        janet_v_free(named_params);
  ------------------
  |  |  756|      0|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
33215|      0|    }
33216|       |
33217|       |    /* Compile destructed params */
33218|   171k|    int32_t j = 0;
33219|   225k|    for (i = 0; i < paramcount; i++) {
  ------------------
  |  Branch (33219:17): [True: 53.7k, False: 171k]
  ------------------
33220|  53.7k|        Janet param = params[i];
33221|  53.7k|        if (!janet_checktype(param, JANET_SYMBOL)) {
  ------------------
  |  |  806|  53.7k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 53.7k]
  |  |  ------------------
  |  |  807|  53.7k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  53.7k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  53.7k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  53.7k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  53.7k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  53.7k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (33221:13): [True: 49.3k, False: 4.35k]
  ------------------
33222|  49.3k|            janet_assert(janet_v_count(destructed_params) > j, "out of bounds");
  ------------------
  |  |  389|  49.3k|#define janet_assert(c, m) do { \
  |  |  390|  98.7k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 49.3k]
  |  |  |  Branch (390:11): [True: 49.3k, False: 0]
  |  |  ------------------
  |  |  391|  49.3k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 49.3k]
  |  |  ------------------
  ------------------
33223|  49.3k|            JanetSlot reg = destructed_params[j++];
33224|  49.3k|            destructure(c, param, reg, defleaf, NULL);
33225|  49.3k|            janetc_freeslot(c, reg);
33226|  49.3k|        }
33227|  53.7k|    }
33228|   171k|    janet_v_free(destructed_params);
  ------------------
  |  |  756|   171k|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|    236|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 236, False: 171k]
  |  |  ------------------
  ------------------
33229|       |
33230|   171k|    max_arity = (vararg || allow_extra) ? INT32_MAX : arity;
  ------------------
  |  Branch (33230:18): [True: 22, False: 171k]
  |  Branch (33230:28): [True: 0, False: 171k]
  ------------------
33231|   171k|    if (!seenopt) min_arity = arity;
  ------------------
  |  Branch (33231:9): [True: 171k, False: 0]
  ------------------
33232|       |
33233|       |    /* Check for self ref (also avoid if arguments shadow own name) */
33234|   171k|    if (selfref) {
  ------------------
  |  Branch (33234:9): [True: 846, False: 170k]
  ------------------
33235|       |        /* Check if the parameters shadow the function name. If so, don't
33236|       |         * emit JOP_LOAD_SELF and add a binding since that most users
33237|       |         * seem to expect that function parameters take precedence over the
33238|       |         * function name */
33239|    846|        const uint8_t *sym = janet_unwrap_symbol(head);
  ------------------
  |  |  864|    846|#define janet_unwrap_symbol(x) ((JanetSymbol)janet_nanbox_to_pointer(x))
  ------------------
33240|    846|        int32_t len = janet_v_count(c->scope->syms);
  ------------------
  |  |  759|    846|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|     11|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|     11|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 11, False: 835]
  |  |  ------------------
  ------------------
33241|    846|        int found = 0;
33242|  1.15k|        for (int32_t i = 0; i < len; i++) {
  ------------------
  |  Branch (33242:29): [True: 313, False: 846]
  ------------------
33243|    313|            if (c->scope->syms[i].sym == sym) {
  ------------------
  |  Branch (33243:17): [True: 0, False: 313]
  ------------------
33244|      0|                found = 1;
33245|      0|            }
33246|    313|        }
33247|    846|        if (!found) {
  ------------------
  |  Branch (33247:13): [True: 846, False: 0]
  ------------------
33248|    846|            JanetSlot slot = janetc_farslot(c);
33249|    846|            slot.flags = JANET_SLOT_NAMED | JANET_FUNCTION;
  ------------------
  |  | 1039|    846|#define JANET_SLOT_NAMED 0x20000
  ------------------
33250|    846|            janetc_emit_s(c, JOP_LOAD_SELF, slot, 1);
33251|       |            /* We should figure out a better way to avoid `(def x 1) (def x :shadow (fn x [...] ...))` triggering a
33252|       |             * shadow lint for the last x */
33253|    846|            janetc_nameslot(c, sym, slot, JANET_DEFFLAG_NO_UNUSED | JANET_DEFFLAG_NO_SHADOWCHECK);
  ------------------
  |  | 1183|    846|#define JANET_DEFFLAG_NO_UNUSED 2
  ------------------
                          janetc_nameslot(c, sym, slot, JANET_DEFFLAG_NO_UNUSED | JANET_DEFFLAG_NO_SHADOWCHECK);
  ------------------
  |  | 1182|    846|#define JANET_DEFFLAG_NO_SHADOWCHECK 1
  ------------------
33254|    846|        }
33255|    846|    }
33256|       |
33257|       |    /* Compile function body */
33258|   171k|    if (parami + 1 == argn) {
  ------------------
  |  Branch (33258:9): [True: 0, False: 171k]
  ------------------
33259|      0|        janetc_emit(c, JOP_RETURN_NIL);
33260|   171k|    } else {
33261|   423k|        for (argi = parami + 1; argi < argn; argi++) {
  ------------------
  |  Branch (33261:33): [True: 259k, False: 164k]
  ------------------
33262|   259k|            subopts.flags = (argi == (argn - 1)) ? JANET_FOPTS_TAIL : JANET_FOPTS_DROP;
  ------------------
  |  | 1147|   171k|#define JANET_FOPTS_TAIL 0x10000
  ------------------
                          subopts.flags = (argi == (argn - 1)) ? JANET_FOPTS_TAIL : JANET_FOPTS_DROP;
  ------------------
  |  | 1149|   347k|#define JANET_FOPTS_DROP 0x40000
  ------------------
  |  Branch (33262:29): [True: 171k, False: 87.9k]
  ------------------
33263|   259k|            janetc_value(subopts, argv[argi]);
33264|   259k|            if (c->result.status == JANET_COMPILE_ERROR)
  ------------------
  |  Branch (33264:17): [True: 7.39k, False: 251k]
  ------------------
33265|  7.39k|                goto error2;
33266|   259k|        }
33267|   171k|    }
33268|       |
33269|       |    /* Build function */
33270|   164k|    JanetString name = hasname ? janet_unwrap_symbol(head) : NULL;
  ------------------
  |  |  864|   162k|#define janet_unwrap_symbol(x) ((JanetSymbol)janet_nanbox_to_pointer(x))
  ------------------
  |  Branch (33270:24): [True: 162k, False: 1.94k]
  ------------------
33271|   164k|    def = janetc_pop_funcdef(c, name);
33272|   164k|    def->arity = arity;
33273|   164k|    def->min_arity = min_arity;
33274|   164k|    def->max_arity = max_arity;
33275|   164k|    if (named_table != NULL) {
  ------------------
  |  Branch (33275:9): [True: 0, False: 164k]
  ------------------
33276|      0|        def->named_args_count = named_table->count;
33277|      0|    }
33278|   164k|    if (vararg) def->flags |= JANET_FUNCDEF_FLAG_VARARG;
  ------------------
  |  | 1097|      6|#define JANET_FUNCDEF_FLAG_VARARG 0x10000
  ------------------
  |  Branch (33278:9): [True: 6, False: 164k]
  ------------------
33279|   164k|    if (structarg) def->flags |= JANET_FUNCDEF_FLAG_STRUCTARG;
  ------------------
  |  | 1105|      0|#define JANET_FUNCDEF_FLAG_STRUCTARG 0x1000000
  ------------------
  |  Branch (33279:9): [True: 0, False: 164k]
  ------------------
33280|   164k|    if (namedargs) def->flags |= JANET_FUNCDEF_FLAG_NAMEDARGS;
  ------------------
  |  | 1107|      0|#define JANET_FUNCDEF_FLAG_NAMEDARGS 0x4000000
  ------------------
  |  Branch (33280:9): [True: 0, False: 164k]
  ------------------
33281|       |
33282|   164k|    janet_def_addflags(def);
33283|   164k|    defindex = janetc_addfuncdef(c, def);
33284|       |
33285|       |    /* Ensure enough slots for vararg function. */
33286|   164k|    if (arity + vararg > def->slotcount) def->slotcount = arity + vararg;
  ------------------
  |  Branch (33286:9): [True: 0, False: 164k]
  ------------------
33287|       |
33288|       |    /* Do basic optimization */
33289|   164k|    if (!(fnscope.flags & JANET_SCOPE_UNUSED)) {
  ------------------
  |  | 1061|   164k|#define JANET_SCOPE_UNUSED 8
  ------------------
  |  Branch (33289:9): [True: 164k, False: 0]
  ------------------
33290|   164k|        janet_bytecode_optimize(def, c->optimize);
33291|   164k|    }
33292|       |
33293|       |    /* Instantiate closure */
33294|   164k|    ret = janetc_gettarget(opts);
33295|   164k|    janetc_emit_su(c, JOP_CLOSURE, ret, defindex, 1);
33296|   164k|    return ret;
33297|       |
33298|    512|error:
33299|    512|    janetc_cerror(c, errmsg);
33300|  7.90k|error2:
33301|  7.90k|    janetc_popscope(c);
33302|  7.90k|    return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|  7.90k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  7.90k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  7.90k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  7.90k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
33303|    512|}
janet.c:janetc_addfuncdef:
32865|   164k|static int32_t janetc_addfuncdef(JanetCompiler *c, JanetFuncDef *def) {
32866|   164k|    JanetScope *scope = c->scope;
32867|   198k|    while (scope) {
  ------------------
  |  Branch (32867:12): [True: 198k, False: 0]
  ------------------
32868|   198k|        if (scope->flags & JANET_SCOPE_FUNCTION)
  ------------------
  |  | 1058|   198k|#define JANET_SCOPE_FUNCTION 1
  ------------------
  |  Branch (32868:13): [True: 164k, False: 34.1k]
  ------------------
32869|   164k|            break;
32870|  34.1k|        scope = scope->parent;
32871|  34.1k|    }
32872|   164k|    janet_assert(scope, "could not add funcdef");
  ------------------
  |  |  389|   164k|#define janet_assert(c, m) do { \
  |  |  390|   164k|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 164k]
  |  |  ------------------
  |  |  391|   164k|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 164k]
  |  |  ------------------
  ------------------
32873|   164k|    janet_v_push(scope->defs, def);
  ------------------
  |  |  757|   164k|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|   164k|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|   164k|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  75.2k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  75.2k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  75.2k|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  75.2k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 89.5k, False: 75.2k]
  |  |  |  |  |  |  |  Branch (768:50): [True: 3.68k, False: 71.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|  93.2k|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|   164k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   164k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32874|       |    return janet_v_count(scope->defs) - 1;
  ------------------
  |  |  759|   164k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|   164k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|   164k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 164k, False: 0]
  |  |  ------------------
  ------------------
32875|   164k|}
janet.c:janetc_if:
32713|  3.92k|static JanetSlot janetc_if(JanetFopts opts, int32_t argn, const Janet *argv) {
32714|  3.92k|    JanetCompiler *c = opts.compiler;
32715|  3.92k|    int32_t labelr, labeljr, labeld, labeljd;
32716|  3.92k|    JanetFopts condopts, bodyopts;
32717|  3.92k|    JanetSlot cond, left, right, target;
32718|  3.92k|    Janet truebody, falsebody;
32719|  3.92k|    JanetScope condscope, tempscope;
32720|  3.92k|    const int tail = opts.flags & JANET_FOPTS_TAIL;
  ------------------
  |  | 1147|  3.92k|#define JANET_FOPTS_TAIL 0x10000
  ------------------
32721|  3.92k|    const int drop = opts.flags & JANET_FOPTS_DROP;
  ------------------
  |  | 1149|  3.92k|#define JANET_FOPTS_DROP 0x40000
  ------------------
32722|  3.92k|    uint8_t ifnjmp = JOP_JUMP_IF_NOT;
32723|       |
32724|  3.92k|    if (argn < 2 || argn > 3) {
  ------------------
  |  Branch (32724:9): [True: 0, False: 3.92k]
  |  Branch (32724:21): [True: 0, False: 3.92k]
  ------------------
32725|      0|        janetc_cerror(c, "expected 2 or 3 arguments to if");
32726|      0|        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32727|      0|    }
32728|       |
32729|       |    /* Get the bodies of the if expression */
32730|  3.92k|    truebody = argv[1];
32731|  3.92k|    falsebody = argn > 2 ? argv[2] : janet_wrap_nil();
  ------------------
  |  |  831|  3.06k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  6.99k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  3.06k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  3.06k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (32731:17): [True: 865, False: 3.06k]
  ------------------
32732|       |
32733|       |    /* Get options */
32734|  3.92k|    condopts = janetc_fopts_default(c);
32735|  3.92k|    bodyopts = opts;
32736|  3.92k|    bodyopts.flags &= ~JANET_FOPTS_ACCEPT_SPLICE;
  ------------------
  |  | 1150|  3.92k|#define JANET_FOPTS_ACCEPT_SPLICE 0x80000
  ------------------
32737|       |
32738|       |    /* Set target for compilation */
32739|  3.92k|    target = (drop || tail)
  ------------------
  |  Branch (32739:15): [True: 18, False: 3.91k]
  |  Branch (32739:23): [True: 1.00k, False: 2.90k]
  ------------------
32740|  3.92k|             ? janetc_cslot(janet_wrap_nil())
  ------------------
  |  |  831|  1.02k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  1.02k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.02k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.02k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32741|  3.92k|             : janetc_gettarget(opts);
32742|       |
32743|       |    /* Compile condition */
32744|  3.92k|    janetc_scope(&condscope, c, 0, "if");
32745|       |
32746|  3.92k|    Janet condform = argv[0];
32747|  3.92k|    if (janetc_check_nil_form(condform, &condform, JANET_FUN_EQ)) {
  ------------------
  |  | 1017|  3.92k|#define JANET_FUN_EQ 24
  ------------------
  |  Branch (32747:9): [True: 0, False: 3.92k]
  ------------------
32748|      0|        ifnjmp = JOP_JUMP_IF_NOT_NIL;
32749|  3.92k|    } else if (janetc_check_nil_form(condform, &condform, JANET_FUN_NEQ)) {
  ------------------
  |  | 1018|  3.92k|#define JANET_FUN_NEQ 25
  ------------------
  |  Branch (32749:16): [True: 0, False: 3.92k]
  ------------------
32750|      0|        ifnjmp = JOP_JUMP_IF_NIL;
32751|      0|    }
32752|       |
32753|  3.92k|    cond = janetc_value(condopts, condform);
32754|       |
32755|       |    /* Check constant condition. */
32756|       |    /* TODO: Use type info for more short circuits */
32757|  3.92k|    if (cond.flags & JANET_SLOT_CONSTANT) {
  ------------------
  |  | 1038|  3.92k|#define JANET_SLOT_CONSTANT 0x10000
  ------------------
  |  Branch (32757:9): [True: 286, False: 3.64k]
  ------------------
32758|    286|        int swap_condition = 0;
32759|    286|        if (ifnjmp == JOP_JUMP_IF_NOT && !janet_truthy(cond.constant)) swap_condition = 1;
  ------------------
  |  |  818|    286|    (!janet_checktype((x), JANET_NIL) && \
  |  |  ------------------
  |  |  |  |  806|    572|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 286]
  |  |  |  |  ------------------
  |  |  |  |  807|    572|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|    572|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|    286|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|    286|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|    286|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|    286|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (818:6): [True: 120, False: 166]
  |  |  ------------------
  |  |  819|    286|     (!janet_checktype((x), JANET_BOOLEAN) || ((x).u64 & 0x1)))
  |  |  ------------------
  |  |  |  |  806|    240|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 120]
  |  |  |  |  ------------------
  |  |  |  |  807|    240|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|    240|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|    120|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|    120|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|    120|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|    120|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (819:7): [True: 120, False: 0]
  |  |  |  Branch (819:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (32759:13): [True: 286, False: 0]
  ------------------
32760|    286|        if (ifnjmp == JOP_JUMP_IF_NIL && janet_checktype(cond.constant, JANET_NIL)) swap_condition = 1;
  ------------------
  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  ------------------
  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (32760:13): [True: 0, False: 286]
  ------------------
32761|    286|        if (ifnjmp == JOP_JUMP_IF_NOT_NIL && !janet_checktype(cond.constant, JANET_NIL)) swap_condition = 1;
  ------------------
  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  ------------------
  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (32761:13): [True: 0, False: 286]
  |  Branch (32761:46): [True: 0, False: 0]
  ------------------
32762|    286|        if (swap_condition) {
  ------------------
  |  Branch (32762:13): [True: 166, False: 120]
  ------------------
32763|       |            /* Swap the true and false bodies */
32764|    166|            Janet temp = falsebody;
32765|    166|            falsebody = truebody;
32766|    166|            truebody = temp;
32767|    166|        }
32768|    286|        janetc_scope(&tempscope, c, 0, "if-true");
32769|    286|        right = janetc_value(bodyopts, truebody);
32770|    286|        if (!drop && !tail) janetc_copy(c, target, right);
  ------------------
  |  Branch (32770:13): [True: 277, False: 9]
  |  Branch (32770:22): [True: 0, False: 277]
  ------------------
32771|    286|        janetc_popscope(c);
32772|    286|        if (!janet_checktype(falsebody, JANET_NIL)) {
  ------------------
  |  |  806|    286|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 286]
  |  |  ------------------
  |  |  807|    286|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|    286|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|    286|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|    286|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    286|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    286|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (32772:13): [True: 285, False: 1]
  ------------------
32773|    285|            janetc_throwaway(bodyopts, falsebody);
32774|    285|        }
32775|    286|        janetc_popscope(c);
32776|    286|        return target;
32777|    286|    }
32778|       |
32779|       |    /* Compile jump to right */
32780|  3.64k|    labeljr = janetc_emit_si(c, ifnjmp, cond, 0, 0);
32781|       |
32782|       |    /* Condition left body */
32783|  3.64k|    janetc_scope(&tempscope, c, 0, "if-true");
32784|  3.64k|    left = janetc_value(bodyopts, truebody);
32785|  3.64k|    if (!drop && !tail) janetc_copy(c, target, left);
  ------------------
  |  Branch (32785:9): [True: 3.63k, False: 9]
  |  Branch (32785:18): [True: 2.90k, False: 731]
  ------------------
32786|  3.64k|    janetc_popscope(c);
32787|       |
32788|       |    /* Compile jump to done */
32789|  3.64k|    labeljd = janet_v_count(c->buffer);
  ------------------
  |  |  759|  3.64k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  3.64k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  3.64k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 3.64k, False: 0]
  |  |  ------------------
  ------------------
32790|  3.64k|    if (!tail && !(drop && janet_checktype(falsebody, JANET_NIL))) janetc_emit(c, JOP_JUMP);
  ------------------
  |  |  806|      9|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 9]
  |  |  |  Branch (806:6): [Folded, False: 9]
  |  |  ------------------
  |  |  807|      9|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      9|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      9|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      9|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      9|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      9|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (32790:9): [True: 2.91k, False: 731]
  |  Branch (32790:20): [True: 9, False: 2.90k]
  ------------------
32791|       |
32792|       |    /* Compile right body */
32793|  3.64k|    labelr = janet_v_count(c->buffer);
  ------------------
  |  |  759|  3.64k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  3.64k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  3.64k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 3.64k, False: 0]
  |  |  ------------------
  ------------------
32794|  3.64k|    janetc_scope(&tempscope, c, 0, "if-false");
32795|  3.64k|    right = janetc_value(bodyopts, falsebody);
32796|  3.64k|    if (!drop && !tail) janetc_copy(c, target, right);
  ------------------
  |  Branch (32796:9): [True: 3.63k, False: 9]
  |  Branch (32796:18): [True: 2.90k, False: 731]
  ------------------
32797|  3.64k|    janetc_popscope(c);
32798|       |
32799|       |    /* Pop main scope */
32800|  3.64k|    janetc_popscope(c);
32801|       |
32802|       |    /* Write jumps - only add jump lengths if jump actually emitted */
32803|  3.64k|    labeld = janet_v_count(c->buffer);
  ------------------
  |  |  759|  3.64k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  3.64k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  3.64k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 3.64k, False: 0]
  |  |  ------------------
  ------------------
32804|  3.64k|    if (labeljr < labeld) {
  ------------------
  |  Branch (32804:9): [True: 3.64k, False: 0]
  ------------------
32805|  3.64k|        check_16bit_jump(c, labeljr, labelr);
32806|  3.64k|        c->buffer[labeljr] |= (uint32_t)(labelr - labeljr) << 16;
32807|  3.64k|        if (!tail && labeljd < labeld) {
  ------------------
  |  Branch (32807:13): [True: 2.91k, False: 731]
  |  Branch (32807:22): [True: 2.91k, False: 0]
  ------------------
32808|  2.91k|            check_24bit_jump(c, labeljd, labeld);
32809|  2.91k|            c->buffer[labeljd] |= (uint32_t)(labeld - labeljd) << 8;
32810|  2.91k|        }
32811|  3.64k|    }
32812|       |
32813|  3.64k|    if (tail) target.flags |= JANET_SLOT_RETURNED;
  ------------------
  |  | 1042|    731|#define JANET_SLOT_RETURNED 0x100000
  ------------------
  |  Branch (32813:9): [True: 731, False: 2.91k]
  ------------------
32814|  3.64k|    return target;
32815|  3.92k|}
janet.c:janetc_check_nil_form:
32683|  10.0k|static int janetc_check_nil_form(Janet x, Janet *capture, uint32_t fun_tag) {
32684|  10.0k|    if (!janet_checktype(x, JANET_TUPLE)) return 0;
  ------------------
  |  |  806|  10.0k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 10.0k]
  |  |  ------------------
  |  |  807|  10.0k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  10.0k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  10.0k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  10.0k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  10.0k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  10.0k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (32684:9): [True: 7.23k, False: 2.84k]
  ------------------
32685|  2.84k|    JanetTuple tup = janet_unwrap_tuple(x);
  ------------------
  |  |  858|  2.84k|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
32686|  2.84k|    if (3 != janet_tuple_length(tup)) return 0;
  ------------------
  |  | 1802|  2.84k|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|  2.84k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (32686:9): [True: 30, False: 2.81k]
  ------------------
32687|  2.81k|    Janet op1 = tup[0];
32688|  2.81k|    if (!janet_checktype(op1, JANET_FUNCTION)) return 0;
  ------------------
  |  |  806|  2.81k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 2.81k]
  |  |  ------------------
  |  |  807|  2.81k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  2.81k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  2.81k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  2.81k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.81k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.81k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (32688:9): [True: 590, False: 2.22k]
  ------------------
32689|  2.22k|    JanetFunction *fun = janet_unwrap_function(op1);
  ------------------
  |  |  868|  2.22k|#define janet_unwrap_function(x) ((JanetFunction *)janet_nanbox_to_pointer(x))
  ------------------
32690|  2.22k|    uint32_t tag = fun->def->flags & JANET_FUNCDEF_FLAG_TAG;
  ------------------
  |  | 1108|  2.22k|#define JANET_FUNCDEF_FLAG_TAG 0xFFFF
  ------------------
32691|  2.22k|    if (tag != fun_tag) return 0;
  ------------------
  |  Branch (32691:9): [True: 1.11k, False: 1.11k]
  ------------------
32692|  1.11k|    if (janet_checktype(tup[1], JANET_NIL)) {
  ------------------
  |  |  806|  1.11k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 1.11k, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 1.11k]
  |  |  ------------------
  |  |  807|  1.11k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  1.11k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  1.11k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  1.11k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.11k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.11k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32693|  1.11k|        *capture = tup[2];
32694|  1.11k|        return 1;
32695|  1.11k|    } else if (janet_checktype(tup[2], JANET_NIL)) {
  ------------------
  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  ------------------
  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32696|      0|        *capture = tup[1];
32697|      0|        return 1;
32698|      0|    }
32699|      0|    return 0;
32700|  1.11k|}
janet.c:janetc_quasiquote:
32217|  81.1k|static JanetSlot janetc_quasiquote(JanetFopts opts, int32_t argn, const Janet *argv) {
32218|  81.1k|    if (argn != 1) {
  ------------------
  |  Branch (32218:9): [True: 0, False: 81.1k]
  ------------------
32219|      0|        janetc_cerror(opts.compiler, "expected 1 argument to quasiquote");
32220|      0|        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32221|      0|    }
32222|  81.1k|    return quasiquote(opts, argv[0], opts.compiler->recursion_guard, 0);
32223|  81.1k|}
janet.c:quasiquote:
32156|  3.43M|static JanetSlot quasiquote(JanetFopts opts, Janet x, int depth, int level) {
32157|  3.43M|    if (depth == 0) {
  ------------------
  |  Branch (32157:9): [True: 50, False: 3.43M]
  ------------------
32158|     50|        janetc_cerror(opts.compiler, "quasiquote too deeply nested");
32159|     50|        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|     50|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|     50|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|     50|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|     50|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32160|     50|    }
32161|  3.43M|    JanetSlot *slots = NULL;
32162|  3.43M|    JanetFopts subopts = opts;
32163|  3.43M|    subopts.flags &= ~JANET_FOPTS_HINT;
  ------------------
  |  | 1148|  3.43M|#define JANET_FOPTS_HINT 0x20000
  ------------------
32164|  3.43M|    switch (janet_type(x)) {
  ------------------
  |  |  795|  3.43M|    (isnan((x).number) \
  |  |  796|  3.43M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  3.43M|        : JANET_NUMBER)
  ------------------
  |  Branch (32164:13): [True: 3.28M, False: 148k]
  ------------------
32165|  1.86M|        default:
  ------------------
  |  Branch (32165:9): [True: 1.86M, False: 1.56M]
  ------------------
32166|  1.86M|            return janetc_cslot(x);
32167|  1.56M|        case JANET_TUPLE: {
  ------------------
  |  Branch (32167:9): [True: 1.56M, False: 1.86M]
  ------------------
32168|  1.56M|            int32_t i, len;
32169|  1.56M|            const Janet *tup = janet_unwrap_tuple(x);
  ------------------
  |  |  858|  1.56M|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
32170|  1.56M|            len = janet_tuple_length(tup);
  ------------------
  |  | 1802|  1.56M|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|  1.56M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
32171|  1.56M|            if (len > 1 && janet_checktype(tup[0], JANET_SYMBOL)) {
  ------------------
  |  |  806|  1.56M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 1.56M, False: 17]
  |  |  |  Branch (806:6): [Folded, False: 1.56M]
  |  |  ------------------
  |  |  807|  1.56M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  1.56M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  1.56M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  1.56M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.56M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.56M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (32171:17): [True: 1.56M, False: 51]
  ------------------
32172|  1.56M|                const uint8_t *head = janet_unwrap_symbol(tup[0]);
  ------------------
  |  |  864|  1.56M|#define janet_unwrap_symbol(x) ((JanetSymbol)janet_nanbox_to_pointer(x))
  ------------------
32173|  1.56M|                if (!janet_cstrcmp(head, "unquote")) {
  ------------------
  |  Branch (32173:21): [True: 3, False: 1.56M]
  ------------------
32174|      3|                    if (level == 0) {
  ------------------
  |  Branch (32174:25): [True: 3, False: 0]
  ------------------
32175|      3|                        JanetFopts subopts = janetc_fopts_default(opts.compiler);
32176|      3|                        subopts.flags |= JANET_FOPTS_ACCEPT_SPLICE;
  ------------------
  |  | 1150|      3|#define JANET_FOPTS_ACCEPT_SPLICE 0x80000
  ------------------
32177|      3|                        return janetc_value(subopts, tup[1]);
32178|      3|                    } else {
32179|      0|                        level--;
32180|      0|                    }
32181|  1.56M|                } else if (!janet_cstrcmp(head, "quasiquote")) {
  ------------------
  |  Branch (32181:28): [True: 26.7k, False: 1.54M]
  ------------------
32182|  26.7k|                    level++;
32183|  26.7k|                }
32184|  1.56M|            }
32185|  4.91M|            for (i = 0; i < len; i++)
  ------------------
  |  Branch (32185:25): [True: 3.35M, False: 1.56M]
  ------------------
32186|  3.35M|                janet_v_push(slots, quasiquote(subopts, tup[i], depth - 1, level));
  ------------------
  |  |  757|  4.91M|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|  3.35M|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|  3.35M|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|  1.78M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.78M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|  1.78M|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|  1.78M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 1.56M, False: 1.78M]
  |  |  |  |  |  |  |  Branch (768:50): [True: 1.56M, False: 210k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|  3.13M|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|  3.35M|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  3.35M|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32187|  1.56M|            return qq_slots(opts, slots, (janet_tuple_flag(tup) & JANET_TUPLE_FLAG_BRACKETCTOR)
  ------------------
  |  | 1806|  1.56M|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|  1.56M|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                          return qq_slots(opts, slots, (janet_tuple_flag(tup) & JANET_TUPLE_FLAG_BRACKETCTOR)
  ------------------
  |  | 1798|  1.56M|#define JANET_TUPLE_FLAG_BRACKETCTOR 0x10000
  ------------------
  |  Branch (32187:42): [True: 51, False: 1.56M]
  ------------------
32188|  1.56M|                            ? JOP_MAKE_BRACKET_TUPLE
32189|  1.56M|                            : JOP_MAKE_TUPLE);
32190|  1.56M|        }
32191|      0|        case JANET_ARRAY: {
  ------------------
  |  Branch (32191:9): [True: 0, False: 3.43M]
  ------------------
32192|      0|            int32_t i;
32193|      0|            JanetArray *array = janet_unwrap_array(x);
  ------------------
  |  |  860|      0|#define janet_unwrap_array(x) ((JanetArray *)janet_nanbox_to_pointer(x))
  ------------------
32194|      0|            for (i = 0; i < array->count; i++)
  ------------------
  |  Branch (32194:25): [True: 0, False: 0]
  ------------------
32195|      0|                janet_v_push(slots, quasiquote(subopts, array->data[i], depth - 1, level));
  ------------------
  |  |  757|      0|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|      0|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|      0|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|      0|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (768:50): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|      0|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|      0|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32196|      0|            return qq_slots(opts, slots, JOP_MAKE_ARRAY);
32197|  1.56M|        }
32198|     60|        case JANET_TABLE:
  ------------------
  |  Branch (32198:9): [True: 60, False: 3.43M]
  ------------------
32199|     60|        case JANET_STRUCT: {
  ------------------
  |  Branch (32199:9): [True: 0, False: 3.43M]
  ------------------
32200|     60|            const JanetKV *kv = NULL, *kvs = NULL;
32201|     60|            int32_t len, cap = 0;
32202|     60|            janet_dictionary_view(x, &kvs, &len, &cap);
32203|    316|            while ((kv = janet_dictionary_next(kvs, cap, kv))) {
  ------------------
  |  Branch (32203:20): [True: 256, False: 60]
  ------------------
32204|    256|                JanetSlot key = quasiquote(subopts, kv->key, depth - 1, level);
32205|    256|                JanetSlot value =  quasiquote(subopts, kv->value, depth - 1, level);
32206|    256|                key.flags &= ~JANET_SLOT_SPLICED;
  ------------------
  |  | 1046|    256|#define JANET_SLOT_SPLICED 0x1000000
  ------------------
32207|    256|                value.flags &= ~JANET_SLOT_SPLICED;
  ------------------
  |  | 1046|    256|#define JANET_SLOT_SPLICED 0x1000000
  ------------------
32208|    256|                janet_v_push(slots, key);
  ------------------
  |  |  757|    256|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|    256|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|    256|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|    196|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|    196|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|    196|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|    196|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 60, False: 196]
  |  |  |  |  |  |  |  Branch (768:50): [True: 60, False: 136]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|    120|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|    256|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|    256|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32209|    256|                janet_v_push(slots, value);
  ------------------
  |  |  757|    256|#define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  769|    256|#define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  768|    256|#define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  766|    256|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|    256|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define janet_v__needgrow(v, n)  ((v) == NULL || janet_v__cnt(v) + (n) >= janet_v__cap(v))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  765|    256|#define janet_v__cap(v) janet_v__raw(v)[0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  764|    256|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (768:35): [True: 0, False: 256]
  |  |  |  |  |  |  |  Branch (768:50): [True: 180, False: 76]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define janet_v__maybegrow(v, n) (janet_v__needgrow((v), (n)) ? janet_v__grow((v), (n)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  770|    180|#define janet_v__grow(v, n)      ((v) = janet_v_grow((v), (n), sizeof(*(v))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define janet_v_push(v, x)      (janet_v__maybegrow(v, 1), (v)[janet_v__cnt(v)++] = (x))
  |  |  ------------------
  |  |  |  |  766|    256|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|    256|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32210|    256|            }
32211|     60|            return qq_slots(opts, slots,
32212|     60|                            janet_checktype(x, JANET_TABLE) ? JOP_MAKE_TABLE : JOP_MAKE_STRUCT);
  ------------------
  |  |  806|     60|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 60, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 60]
  |  |  ------------------
  |  |  807|     60|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|     60|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|     60|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|     60|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|     60|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|     60|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32213|     60|        }
32214|  3.43M|    }
32215|  3.43M|}
janet.c:qq_slots:
32148|  1.56M|static JanetSlot qq_slots(JanetFopts opts, JanetSlot *slots, int makeop) {
32149|  1.56M|    JanetSlot target = janetc_gettarget(opts);
32150|  1.56M|    janetc_pushslots(opts.compiler, slots);
32151|  1.56M|    janetc_freeslots(opts.compiler, slots);
32152|  1.56M|    janetc_emit_s(opts.compiler, makeop, target, 1);
32153|  1.56M|    return target;
32154|  1.56M|}
janet.c:janetc_quote:
32125|  9.53k|static JanetSlot janetc_quote(JanetFopts opts, int32_t argn, const Janet *argv) {
32126|  9.53k|    if (argn != 1) {
  ------------------
  |  Branch (32126:9): [True: 0, False: 9.53k]
  ------------------
32127|      0|        janetc_cerror(opts.compiler, "expected 1 argument to quote");
32128|      0|        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32129|      0|    }
32130|  9.53k|    return janetc_cslot(argv[0]);
32131|  9.53k|}
janet.c:janetc_varset:
32367|  2.10k|static JanetSlot janetc_varset(JanetFopts opts, int32_t argn, const Janet *argv) {
32368|  2.10k|    if (argn != 2) {
  ------------------
  |  Branch (32368:9): [True: 0, False: 2.10k]
  ------------------
32369|      0|        janetc_cerror(opts.compiler, "expected 2 arguments to set");
32370|      0|        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32371|      0|    }
32372|  2.10k|    JanetFopts subopts = janetc_fopts_default(opts.compiler);
32373|  2.10k|    if (janet_checktype(argv[0], JANET_SYMBOL)) {
  ------------------
  |  |  806|  2.10k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 1.80k, False: 301]
  |  |  |  Branch (806:6): [Folded, False: 2.10k]
  |  |  ------------------
  |  |  807|  2.10k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  2.10k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  2.10k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  2.10k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.10k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.10k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32374|       |        /* Normal var - (set a 1) */
32375|  1.80k|        const uint8_t *sym = janet_unwrap_symbol(argv[0]);
  ------------------
  |  |  864|  1.80k|#define janet_unwrap_symbol(x) ((JanetSymbol)janet_nanbox_to_pointer(x))
  ------------------
32376|  1.80k|        JanetSlot dest = janetc_resolve(opts.compiler, sym);
32377|  1.80k|        if (!(dest.flags & JANET_SLOT_MUTABLE)) {
  ------------------
  |  | 1040|  1.80k|#define JANET_SLOT_MUTABLE 0x40000
  ------------------
  |  Branch (32377:13): [True: 0, False: 1.80k]
  ------------------
32378|      0|            janetc_cerror(opts.compiler, "cannot set constant");
32379|      0|            return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32380|      0|        }
32381|  1.80k|        subopts.flags = JANET_FOPTS_HINT;
  ------------------
  |  | 1148|  1.80k|#define JANET_FOPTS_HINT 0x20000
  ------------------
32382|  1.80k|        subopts.hint = dest;
32383|  1.80k|        JanetSlot ret = janetc_value(subopts, argv[1]);
32384|  1.80k|        janetc_copy(opts.compiler, dest, ret);
32385|  1.80k|        return ret;
32386|  1.80k|    } else if (janet_checktype(argv[0], JANET_TUPLE)) {
  ------------------
  |  |  806|    301|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 10, False: 291]
  |  |  |  Branch (806:6): [Folded, False: 301]
  |  |  ------------------
  |  |  807|    301|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|    301|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|    301|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|    301|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    301|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    301|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32387|       |        /* Set a field (setf behavior) - (set (tab :key) 2) */
32388|     10|        const Janet *tup = janet_unwrap_tuple(argv[0]);
  ------------------
  |  |  858|     10|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
32389|       |        /* Tuple must have 2 elements */
32390|     10|        if (janet_tuple_length(tup) != 2) {
  ------------------
  |  | 1802|     10|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|     10|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (32390:13): [True: 0, False: 10]
  ------------------
32391|      0|            janetc_cerror(opts.compiler, "expected 2 element tuple for l-value to set");
32392|      0|            return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32393|      0|        }
32394|     10|        JanetSlot ds = janetc_value(subopts, tup[0]);
32395|     10|        JanetSlot key = janetc_value(subopts, tup[1]);
32396|       |        /* Can't be tail position because we will emit a PUT instruction afterwards */
32397|       |        /* Also can't drop either */
32398|     10|        opts.flags &= ~(JANET_FOPTS_TAIL | JANET_FOPTS_DROP);
  ------------------
  |  | 1147|     10|#define JANET_FOPTS_TAIL 0x10000
  ------------------
                      opts.flags &= ~(JANET_FOPTS_TAIL | JANET_FOPTS_DROP);
  ------------------
  |  | 1149|     10|#define JANET_FOPTS_DROP 0x40000
  ------------------
32399|     10|        JanetSlot rvalue = janetc_value(opts, argv[1]);
32400|       |        /* Emit the PUT instruction */
32401|     10|        janetc_emit_sss(opts.compiler, JOP_PUT, ds, key, rvalue, 0);
32402|     10|        return rvalue;
32403|    291|    } else {
32404|       |        /* Error */
32405|    291|        janetc_cerror(opts.compiler, "expected symbol or tuple for l-value to set");
32406|    291|        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|    291|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|    291|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    291|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    291|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32407|    291|    }
32408|  2.10k|}
janet.c:janetc_splice:
32133|  86.9k|static JanetSlot janetc_splice(JanetFopts opts, int32_t argn, const Janet *argv) {
32134|  86.9k|    JanetSlot ret;
32135|  86.9k|    if (!(opts.flags & JANET_FOPTS_ACCEPT_SPLICE)) {
  ------------------
  |  | 1150|  86.9k|#define JANET_FOPTS_ACCEPT_SPLICE 0x80000
  ------------------
  |  Branch (32135:9): [True: 39, False: 86.9k]
  ------------------
32136|     39|        janetc_cerror(opts.compiler, "splice can only be used in function parameters and data constructors, it has no effect here");
32137|     39|        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|     39|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|     39|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|     39|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|     39|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32138|     39|    }
32139|  86.9k|    if (argn != 1) {
  ------------------
  |  Branch (32139:9): [True: 0, False: 86.9k]
  ------------------
32140|      0|        janetc_cerror(opts.compiler, "expected 1 argument to splice");
32141|      0|        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32142|      0|    }
32143|  86.9k|    ret = janetc_value(opts, argv[0]);
32144|  86.9k|    ret.flags |= JANET_SLOT_SPLICED;
  ------------------
  |  | 1046|  86.9k|#define JANET_SLOT_SPLICED 0x1000000
  ------------------
32145|  86.9k|    return ret;
32146|  86.9k|}
janet.c:janetc_unquote:
32225|    458|static JanetSlot janetc_unquote(JanetFopts opts, int32_t argn, const Janet *argv) {
32226|    458|    (void) argn;
32227|    458|    (void) argv;
32228|    458|    janetc_cerror(opts.compiler, "cannot use unquote here");
32229|    458|    return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|    458|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|    458|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    458|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    458|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32230|    458|}
janet.c:janetc_var:
32591|  1.12k|static JanetSlot janetc_var(JanetFopts opts, int32_t argn, const Janet *argv) {
32592|  1.12k|    JanetCompiler *c = opts.compiler;
32593|  1.12k|    JanetTable *attr_table = handleattr(c, "var", argn, argv);
32594|  1.12k|    if (c->result.status == JANET_COMPILE_ERROR) {
  ------------------
  |  Branch (32594:9): [True: 7, False: 1.11k]
  ------------------
32595|      7|        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|      7|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      7|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      7|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      7|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32596|      7|    }
32597|  1.11k|    check_metadata_lint(c, attr_table);
32598|  1.11k|    SlotHeadPair *into = NULL;
32599|  1.11k|    into = dohead_destructure(c, into, opts, argv[0], argv[argn - 1]);
32600|  1.11k|    if (c->result.status == JANET_COMPILE_ERROR) {
  ------------------
  |  Branch (32600:9): [True: 0, False: 1.11k]
  ------------------
32601|      0|        janet_v_free(into);
  ------------------
  |  |  756|      0|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|      0|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
32602|      0|        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32603|      0|    }
32604|  1.11k|    JanetSlot ret = janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|  1.11k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  1.11k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.11k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.11k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32605|  2.23k|    for (int32_t i = 0; i < janet_v_count(into); i++) {
  ------------------
  |  |  759|  2.23k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  2.23k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  2.23k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 2.23k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (32605:25): [True: 1.11k, False: 1.11k]
  ------------------
32606|  1.11k|        destructure(c, into[i].lhs, into[i].rhs, varleaf, attr_table);
32607|  1.11k|        ret = into[i].rhs;
32608|  1.11k|    }
32609|       |    janet_v_free(into);
  ------------------
  |  |  756|  1.11k|#define janet_v_free(v)         (((v) != NULL) ? (janet_sfree(janet_v__raw(v)), 0) : 0)
  |  |  ------------------
  |  |  |  |  764|  1.11k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  |  |  |  Branch (756:34): [True: 1.11k, False: 0]
  |  |  ------------------
  ------------------
32610|  1.11k|    return ret;
32611|  1.11k|}
janet.c:varleaf:
32547|  1.31k|    JanetTable *reftab) {
32548|  1.31k|    if (c->scope->flags & JANET_SCOPE_TOP) {
  ------------------
  |  | 1060|  1.31k|#define JANET_SCOPE_TOP 4
  ------------------
  |  Branch (32548:9): [True: 201, False: 1.11k]
  ------------------
32549|       |        /* Global var, generate var */
32550|    201|        JanetSlot refslot;
32551|    201|        JanetTable *entry = janet_table_clone(reftab);
32552|       |
32553|    201|        int is_redef = c->is_redef;
32554|       |
32555|    201|        JanetArray *ref;
32556|    201|        JanetBinding old_binding;
32557|    201|        if (is_redef && (old_binding = janet_resolve_ext(c->env, sym),
  ------------------
  |  Branch (32557:13): [True: 0, False: 201]
  |  Branch (32557:25): [True: 0, False: 0]
  ------------------
32558|      0|                         old_binding.type == JANET_BINDING_VAR)) {
32559|      0|            ref = janet_unwrap_array(old_binding.value);
  ------------------
  |  |  860|      0|#define janet_unwrap_array(x) ((JanetArray *)janet_nanbox_to_pointer(x))
  ------------------
32560|    201|        } else {
32561|    201|            ref = janet_array(1);
32562|    201|            janet_array_push(ref, janet_wrap_nil());
  ------------------
  |  |  831|    201|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|    201|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    201|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    201|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32563|    201|        }
32564|       |
32565|    201|        janet_table_put(entry, janet_ckeywordv("ref"), janet_wrap_array(ref));
  ------------------
  |  | 1843|    201|#define janet_ckeywordv(cstr) janet_wrap_keyword(janet_ckeyword(cstr))
  |  |  ------------------
  |  |  |  |  850|    201|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|    201|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|    201|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|    201|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      janet_table_put(entry, janet_ckeywordv("ref"), janet_wrap_array(ref));
  ------------------
  |  |  845|    201|#define janet_wrap_array(s) janet_nanbox_wrap_((s), JANET_ARRAY)
  |  |  ------------------
  |  |  |  |  825|    201|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    201|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    201|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32566|    201|        janet_table_put(entry, janet_ckeywordv("source-map"),
  ------------------
  |  | 1843|    201|#define janet_ckeywordv(cstr) janet_wrap_keyword(janet_ckeyword(cstr))
  |  |  ------------------
  |  |  |  |  850|    201|#define janet_wrap_keyword(s) janet_nanbox_wrap_c((s), JANET_KEYWORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|    201|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|    201|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|    201|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32567|    201|                        janet_wrap_tuple(janetc_make_sourcemap(c)));
  ------------------
  |  |  843|    201|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|    201|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    201|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    201|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32568|    201|        janet_table_put(c->env, janet_wrap_symbol(sym), janet_wrap_table(entry));
  ------------------
  |  |  849|    201|#define janet_wrap_symbol(s) janet_nanbox_wrap_c((s), JANET_SYMBOL)
  |  |  ------------------
  |  |  |  |  828|    201|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    201|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    201|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      janet_table_put(c->env, janet_wrap_symbol(sym), janet_wrap_table(entry));
  ------------------
  |  |  846|    201|#define janet_wrap_table(s) janet_nanbox_wrap_((s), JANET_TABLE)
  |  |  ------------------
  |  |  |  |  825|    201|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    201|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    201|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32569|    201|        refslot = janetc_cslot(janet_wrap_array(ref));
  ------------------
  |  |  845|    201|#define janet_wrap_array(s) janet_nanbox_wrap_((s), JANET_ARRAY)
  |  |  ------------------
  |  |  |  |  825|    201|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    201|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    201|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32570|    201|        janetc_emit_ssu(c, JOP_PUT_INDEX, refslot, s, 0, 0);
32571|    201|        return 1;
32572|  1.11k|    } else {
32573|  1.11k|        int no_unused = reftab && reftab->count && janet_truthy(janet_table_get_keyword(reftab, "unused"));
  ------------------
  |  |  818|  1.11k|    (!janet_checktype((x), JANET_NIL) && \
  |  |  ------------------
  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (818:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  819|  1.11k|     (!janet_checktype((x), JANET_BOOLEAN) || ((x).u64 & 0x1)))
  |  |  ------------------
  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (819:7): [True: 0, False: 0]
  |  |  |  Branch (819:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (32573:25): [True: 1.11k, False: 0]
  |  Branch (32573:35): [True: 0, False: 1.11k]
  ------------------
32574|  1.11k|        int no_shadow = reftab && reftab->count && janet_truthy(janet_table_get_keyword(reftab, "shadow"));
  ------------------
  |  |  818|  1.11k|    (!janet_checktype((x), JANET_NIL) && \
  |  |  ------------------
  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (818:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  819|  1.11k|     (!janet_checktype((x), JANET_BOOLEAN) || ((x).u64 & 0x1)))
  |  |  ------------------
  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (819:7): [True: 0, False: 0]
  |  |  |  Branch (819:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (32574:25): [True: 1.11k, False: 0]
  |  Branch (32574:35): [True: 0, False: 1.11k]
  ------------------
32575|  1.11k|        uint32_t def_flags = 0;
32576|  1.11k|        if (no_unused) def_flags |= JANET_DEFFLAG_NO_UNUSED;
  ------------------
  |  | 1183|      0|#define JANET_DEFFLAG_NO_UNUSED 2
  ------------------
  |  Branch (32576:13): [True: 0, False: 1.11k]
  ------------------
32577|  1.11k|        if (no_shadow) def_flags |= JANET_DEFFLAG_NO_SHADOWCHECK;
  ------------------
  |  | 1182|      0|#define JANET_DEFFLAG_NO_SHADOWCHECK 1
  ------------------
  |  Branch (32577:13): [True: 0, False: 1.11k]
  ------------------
32578|  1.11k|        return namelocal(c, sym, JANET_SLOT_MUTABLE, s, def_flags);
  ------------------
  |  | 1040|  1.11k|#define JANET_SLOT_MUTABLE 0x40000
  ------------------
32579|  1.11k|    }
32580|  1.31k|}
janet.c:janetc_while:
32938|  1.11k|static JanetSlot janetc_while(JanetFopts opts, int32_t argn, const Janet *argv) {
32939|  1.11k|    JanetCompiler *c = opts.compiler;
32940|  1.11k|    JanetSlot cond;
32941|  1.11k|    JanetFopts subopts = janetc_fopts_default(c);
32942|  1.11k|    JanetScope tempscope;
32943|  1.11k|    int32_t labelwt, labeld, labeljt, labelc, i;
32944|  1.11k|    int infinite = 0;
32945|  1.11k|    int is_nil_form = 0;
32946|  1.11k|    int is_notnil_form = 0;
32947|  1.11k|    uint8_t ifjmp = JOP_JUMP_IF;
32948|  1.11k|    uint8_t ifnjmp = JOP_JUMP_IF_NOT;
32949|       |
32950|  1.11k|    if (argn < 1) {
  ------------------
  |  Branch (32950:9): [True: 0, False: 1.11k]
  ------------------
32951|      0|        janetc_cerror(c, "expected at least 1 argument to while");
32952|      0|        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32953|      0|    }
32954|       |
32955|  1.11k|    labelwt = janet_v_count(c->buffer);
  ------------------
  |  |  759|  1.11k|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|  1.11k|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|  1.11k|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 1.11k, False: 0]
  |  |  ------------------
  ------------------
32956|       |
32957|  1.11k|    janetc_scope(&tempscope, c, JANET_SCOPE_WHILE, "while");
  ------------------
  |  | 1063|  1.11k|#define JANET_SCOPE_WHILE 32
  ------------------
32958|       |
32959|       |    /* Check for `(= nil _)` or `(not= nil _)` in condition, and if so, use the
32960|       |     * jmpnl or jmpnn instructions. This let's us implement `(each ...)`
32961|       |     * more efficiently. */
32962|  1.11k|    Janet condform = argv[0];
32963|  1.11k|    if (janetc_check_nil_form(condform, &condform, JANET_FUN_EQ)) {
  ------------------
  |  | 1017|  1.11k|#define JANET_FUN_EQ 24
  ------------------
  |  Branch (32963:9): [True: 0, False: 1.11k]
  ------------------
32964|      0|        is_nil_form = 1;
32965|      0|        ifjmp = JOP_JUMP_IF_NIL;
32966|      0|        ifnjmp = JOP_JUMP_IF_NOT_NIL;
32967|      0|    }
32968|  1.11k|    if (janetc_check_nil_form(condform, &condform, JANET_FUN_NEQ)) {
  ------------------
  |  | 1018|  1.11k|#define JANET_FUN_NEQ 25
  ------------------
  |  Branch (32968:9): [True: 1.11k, False: 0]
  ------------------
32969|  1.11k|        is_notnil_form = 1;
32970|  1.11k|        ifjmp = JOP_JUMP_IF_NOT_NIL;
32971|  1.11k|        ifnjmp = JOP_JUMP_IF_NIL;
32972|  1.11k|    }
32973|       |
32974|       |    /* Compile condition */
32975|  1.11k|    cond = janetc_value(subopts, condform);
32976|       |
32977|       |    /* Check for constant condition */
32978|  1.11k|    if (cond.flags & JANET_SLOT_CONSTANT) {
  ------------------
  |  | 1038|  1.11k|#define JANET_SLOT_CONSTANT 0x10000
  ------------------
  |  Branch (32978:9): [True: 0, False: 1.11k]
  ------------------
32979|       |        /* Loop never executes */
32980|      0|        int never_executes = is_nil_form
  ------------------
  |  Branch (32980:30): [True: 0, False: 0]
  ------------------
32981|      0|                             ? !janet_checktype(cond.constant, JANET_NIL)
  ------------------
  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  ------------------
  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32982|      0|                             : is_notnil_form
  ------------------
  |  Branch (32982:32): [True: 0, False: 0]
  ------------------
32983|      0|                             ? janet_checktype(cond.constant, JANET_NIL)
  ------------------
  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  ------------------
  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32984|      0|                             : !janet_truthy(cond.constant);
  ------------------
  |  |  818|      0|    (!janet_checktype((x), JANET_NIL) && \
  |  |  ------------------
  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (818:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  819|      0|     (!janet_checktype((x), JANET_BOOLEAN) || ((x).u64 & 0x1)))
  |  |  ------------------
  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (819:7): [True: 0, False: 0]
  |  |  |  Branch (819:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
32985|      0|        if (never_executes) {
  ------------------
  |  Branch (32985:13): [True: 0, False: 0]
  ------------------
32986|      0|            janetc_popscope(c);
32987|      0|            return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
32988|      0|        }
32989|       |        /* Infinite loop */
32990|      0|        infinite = 1;
32991|      0|    }
32992|       |
32993|       |    /* Infinite loop does not need to check condition */
32994|  1.11k|    labelc = infinite
  ------------------
  |  Branch (32994:14): [True: 0, False: 1.11k]
  ------------------
32995|  1.11k|             ? 0
32996|  1.11k|             : janetc_emit_si(c, ifnjmp, cond, 0, 0);
32997|       |
32998|       |    /* Compile body */
32999|  7.45k|    for (i = 1; i < argn; i++) {
  ------------------
  |  Branch (32999:17): [True: 6.34k, False: 1.11k]
  ------------------
33000|  6.34k|        subopts.flags = JANET_FOPTS_DROP;
  ------------------
  |  | 1149|  6.34k|#define JANET_FOPTS_DROP 0x40000
  ------------------
33001|  6.34k|        janetc_freeslot(c, janetc_value(subopts, argv[i]));
33002|  6.34k|    }
33003|       |
33004|       |    /* Check if closure created in while scope. If so,
33005|       |     * recompile in a function scope. */
33006|  1.11k|    if (tempscope.flags & JANET_SCOPE_CLOSURE) {
  ------------------
  |  | 1062|  1.11k|#define JANET_SCOPE_CLOSURE 16
  ------------------
  |  Branch (33006:9): [True: 763, False: 349]
  ------------------
33007|    763|        subopts = janetc_fopts_default(c);
33008|    763|        tempscope.flags |= JANET_SCOPE_UNUSED;
  ------------------
  |  | 1061|    763|#define JANET_SCOPE_UNUSED 8
  ------------------
33009|    763|        janetc_popscope(c);
33010|    763|        if (c->buffer) janet_v__cnt(c->buffer) = labelwt;
  ------------------
  |  |  766|    763|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  ------------------
  |  |  |  |  764|    763|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  ------------------
  |  Branch (33010:13): [True: 763, False: 0]
  ------------------
33011|    763|        if (c->mapbuffer) janet_v__cnt(c->mapbuffer) = labelwt;
  ------------------
  |  |  766|    763|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  ------------------
  |  |  |  |  764|    763|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  ------------------
  ------------------
  |  Branch (33011:13): [True: 763, False: 0]
  ------------------
33012|       |
33013|    763|        janetc_scope(&tempscope, c, JANET_SCOPE_FUNCTION, "while-iife");
  ------------------
  |  | 1058|    763|#define JANET_SCOPE_FUNCTION 1
  ------------------
33014|       |
33015|       |        /* Recompile in the function scope */
33016|    763|        cond = janetc_value(subopts, condform);
33017|    763|        if (!(cond.flags & JANET_SLOT_CONSTANT)) {
  ------------------
  |  | 1038|    763|#define JANET_SLOT_CONSTANT 0x10000
  ------------------
  |  Branch (33017:13): [True: 763, False: 0]
  ------------------
33018|       |            /* If not an infinite loop, return nil when condition false */
33019|    763|            janetc_emit_si(c, ifjmp, cond, 2, 0);
33020|    763|            janetc_emit(c, JOP_RETURN_NIL);
33021|    763|        }
33022|  5.36k|        for (i = 1; i < argn; i++) {
  ------------------
  |  Branch (33022:21): [True: 4.59k, False: 763]
  ------------------
33023|  4.59k|            subopts.flags = JANET_FOPTS_DROP;
  ------------------
  |  | 1149|  4.59k|#define JANET_FOPTS_DROP 0x40000
  ------------------
33024|  4.59k|            janetc_freeslot(c, janetc_value(subopts, argv[i]));
33025|  4.59k|        }
33026|       |        /* But now add tail recursion */
33027|    763|        int32_t tempself = janetc_regalloc_temp(&tempscope.ra, JANETC_REGTEMP_0);
33028|    763|        janetc_emit(c, JOP_LOAD_SELF | ((uint32_t) tempself << 8));
33029|    763|        janetc_emit(c, JOP_TAILCALL | ((uint32_t) tempself << 8));
33030|    763|        janetc_regalloc_freetemp(&c->scope->ra, tempself, JANETC_REGTEMP_0);
33031|       |        /* Compile function */
33032|    763|        JanetFuncDef *def = janetc_pop_funcdef(c, janet_cstring("while"));
33033|    763|        janet_def_addflags(def);
33034|    763|        int32_t defindex = janetc_addfuncdef(c, def);
33035|       |        /* Do basic optimization */
33036|    763|        if (!(c->scope->flags & JANET_SCOPE_UNUSED)) {
  ------------------
  |  | 1061|    763|#define JANET_SCOPE_UNUSED 8
  ------------------
  |  Branch (33036:13): [True: 763, False: 0]
  ------------------
33037|    763|            janet_bytecode_optimize(def, c->optimize);
33038|    763|        }
33039|       |        /* And then load the closure and call it. */
33040|    763|        int32_t cloreg = janetc_regalloc_temp(&c->scope->ra, JANETC_REGTEMP_0);
33041|    763|        janetc_emit(c, JOP_CLOSURE | ((uint32_t) cloreg << 8) | ((uint32_t) defindex << 16));
33042|    763|        janetc_emit(c, JOP_CALL | ((uint32_t) cloreg << 8) | ((uint32_t) cloreg << 16));
33043|    763|        janetc_regalloc_freetemp(&c->scope->ra, cloreg, JANETC_REGTEMP_0);
33044|    763|        c->scope->flags |= JANET_SCOPE_CLOSURE;
  ------------------
  |  | 1062|    763|#define JANET_SCOPE_CLOSURE 16
  ------------------
33045|    763|        return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|    763|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|    763|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    763|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    763|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
33046|    763|    }
33047|       |
33048|       |    /* Compile jump to :whiletop */
33049|    349|    labeljt = janet_v_count(c->buffer);
  ------------------
  |  |  759|    349|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|    349|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|    349|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 349, False: 0]
  |  |  ------------------
  ------------------
33050|    349|    janetc_emit(c, JOP_JUMP);
33051|       |
33052|       |    /* Calculate jumps */
33053|    349|    labeld = janet_v_count(c->buffer);
  ------------------
  |  |  759|    349|#define janet_v_count(v)        (((v) != NULL) ? janet_v__cnt(v) : 0)
  |  |  ------------------
  |  |  |  |  766|    349|#define janet_v__cnt(v) janet_v__raw(v)[1]
  |  |  |  |  ------------------
  |  |  |  |  |  |  764|    349|#define janet_v__raw(v) ((int32_t *)(v) - 2)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (759:34): [True: 349, False: 0]
  |  |  ------------------
  ------------------
33054|    349|    if (!infinite) {
  ------------------
  |  Branch (33054:9): [True: 349, False: 0]
  ------------------
33055|    349|        check_16bit_jump(c, labelc, labeld);
33056|    349|        c->buffer[labelc] |= (uint32_t)(labeld - labelc) << 16;
33057|    349|    }
33058|       |
33059|    349|    check_24bit_jump(c, labeljt, labelwt);
33060|    349|    c->buffer[labeljt] |= (uint32_t)(labelwt - labeljt) << 8;
33061|       |
33062|       |    /* Calculate breaks */
33063|  3.80M|    for (int32_t i = labelwt; i < labeld; i++) {
  ------------------
  |  Branch (33063:31): [True: 3.80M, False: 349]
  ------------------
33064|  3.80M|        if (c->buffer[i] == (0x80 | JOP_JUMP)) {
  ------------------
  |  Branch (33064:13): [True: 0, False: 3.80M]
  ------------------
33065|      0|            check_24bit_jump(c, i, labeld);
33066|      0|            c->buffer[i] = JOP_JUMP | ((uint32_t)(labeld - i) << 8);
33067|      0|        }
33068|  3.80M|    }
33069|       |
33070|       |    /* Pop scope and return nil slot */
33071|    349|    janetc_popscope(c);
33072|       |
33073|    349|    return janetc_cslot(janet_wrap_nil());
  ------------------
  |  |  831|    349|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|    349|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    349|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    349|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
33074|  1.11k|}
janet.c:bignat_zero:
34178|  1.17M|static void bignat_zero(struct BigNat *x) {
34179|  1.17M|    x->first_digit = 0;
34180|  1.17M|    x->n = 0;
34181|  1.17M|    x->cap = 0;
34182|       |    x->digits = NULL;
34183|  1.17M|}
janet.c:bignat_muladd:
34210|   267k|static void bignat_muladd(struct BigNat *mant, uint32_t factor, uint32_t term) {
34211|   267k|    int32_t i;
34212|   267k|    uint64_t carry = ((uint64_t) mant->first_digit) * factor + term;
34213|   267k|    mant->first_digit = carry % BIGNAT_BASE;
  ------------------
  |  |34167|   267k|#define BIGNAT_BASE 0x80000000U
  ------------------
34214|   267k|    carry /= BIGNAT_BASE;
  ------------------
  |  |34167|   267k|#define BIGNAT_BASE 0x80000000U
  ------------------
34215|  92.7M|    for (i = 0; i < mant->n; i++) {
  ------------------
  |  Branch (34215:17): [True: 92.4M, False: 267k]
  ------------------
34216|  92.4M|        carry += ((uint64_t) mant->digits[i]) * factor;
34217|  92.4M|        mant->digits[i] = carry % BIGNAT_BASE;
  ------------------
  |  |34167|  92.4M|#define BIGNAT_BASE 0x80000000U
  ------------------
34218|  92.4M|        carry /= BIGNAT_BASE;
  ------------------
  |  |34167|  92.4M|#define BIGNAT_BASE 0x80000000U
  ------------------
34219|  92.4M|    }
34220|   267k|    if (carry) bignat_append(mant, (uint32_t) carry);
  ------------------
  |  Branch (34220:9): [True: 11.2k, False: 255k]
  ------------------
34221|   267k|}
janet.c:bignat_append:
34203|  11.2k|static void bignat_append(struct BigNat *mant, uint32_t dig) {
34204|  11.2k|    bignat_extra(mant, 1)[0] = dig;
34205|  11.2k|}
janet.c:bignat_extra:
34186|  11.9k|static uint32_t *bignat_extra(struct BigNat *mant, int32_t n) {
34187|  11.9k|    int32_t oldn = mant->n;
34188|  11.9k|    int32_t newn = oldn + n;
34189|  11.9k|    if (mant->cap < newn) {
  ------------------
  |  Branch (34189:9): [True: 5.40k, False: 6.54k]
  ------------------
34190|  5.40k|        int32_t newcap = 2 * newn;
34191|  5.40k|        uint32_t *mem = janet_realloc(mant->digits, (size_t) newcap * sizeof(uint32_t));
  ------------------
  |  | 2409|  5.40k|#define janet_realloc(X, Y) realloc((X), (Y))
  ------------------
34192|  5.40k|        if (NULL == mem) {
  ------------------
  |  Branch (34192:13): [True: 0, False: 5.40k]
  ------------------
34193|      0|            JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
34194|      0|        }
34195|  5.40k|        mant->cap = newcap;
34196|  5.40k|        mant->digits = mem;
34197|  5.40k|    }
34198|  11.9k|    mant->n = newn;
34199|  11.9k|    return mant->digits + oldn;
34200|  11.9k|}
janet.c:convert:
34306|   247k|    int32_t exponent) {
34307|       |
34308|   247k|    int32_t exponent2 = 0;
34309|       |
34310|       |    /* Approximate exponent in base 2 of mant and exponent. This should get us a good estimate of the final size of the
34311|       |     * number, within * 2^32 or so. */
34312|   247k|    int64_t mant_exp2_approx = mant->n * 32 + 16;
34313|   247k|    int64_t exp_exp2_approx = (int64_t)(floor(log2(base) * exponent));
34314|   247k|    int64_t exp2_approx = mant_exp2_approx + exp_exp2_approx;
34315|       |
34316|       |    /* Short circuit zero, huge, and small numbers. We use the exponent range of valid IEEE754 doubles (-1022, 1023)
34317|       |     * with a healthy buffer to allow for inaccuracies in the approximation and denormailzed numbers. */
34318|   247k|    if (mant->n == 0 && mant->first_digit == 0)
  ------------------
  |  Branch (34318:9): [True: 245k, False: 2.35k]
  |  Branch (34318:25): [True: 153k, False: 91.8k]
  ------------------
34319|   153k|        return negative ? -0.0 : 0.0;
  ------------------
  |  Branch (34319:16): [True: 2, False: 153k]
  ------------------
34320|  94.2k|    if (exp2_approx > 1176)
  ------------------
  |  Branch (34320:9): [True: 556, False: 93.6k]
  ------------------
34321|    556|        return negative ? -INFINITY : INFINITY;
  ------------------
  |  Branch (34321:16): [True: 163, False: 393]
  ------------------
34322|  93.6k|    if (exp2_approx < -1175)
  ------------------
  |  Branch (34322:9): [True: 0, False: 93.6k]
  ------------------
34323|      0|        return negative ? -0.0 : 0.0;
  ------------------
  |  Branch (34323:16): [True: 0, False: 0]
  ------------------
34324|       |
34325|       |    /* Final value is X = mant * base ^ exponent * 2 ^ exponent2
34326|       |     * Get exponent to zero while holding X constant. */
34327|       |
34328|       |    /* Positive exponents are simple */
34329|  97.9k|    for (; exponent > 3; exponent -= 4) bignat_muladd(mant, base * base * base * base, 0);
  ------------------
  |  Branch (34329:12): [True: 4.25k, False: 93.6k]
  ------------------
34330|  93.8k|    for (; exponent > 1; exponent -= 2) bignat_muladd(mant, base * base, 0);
  ------------------
  |  Branch (34330:12): [True: 144, False: 93.6k]
  ------------------
34331|  95.1k|    for (; exponent > 0; exponent -= 1) bignat_muladd(mant, base, 0);
  ------------------
  |  Branch (34331:12): [True: 1.49k, False: 93.6k]
  ------------------
34332|       |
34333|       |    /* Negative exponents are tricky - we don't want to loose bits
34334|       |     * from integer division, so we need to premultiply. */
34335|  93.6k|    if (exponent < 0) {
  ------------------
  |  Branch (34335:9): [True: 714, False: 92.9k]
  ------------------
34336|    714|        int32_t shamt = 5 - exponent / 4;
34337|    714|        bignat_lshift_n(mant, shamt);
34338|    714|        exponent2 -= shamt * BIGNAT_NBIT;
  ------------------
  |  |34166|    714|#define BIGNAT_NBIT 31
  ------------------
34339|  1.35k|        for (; exponent < -3; exponent += 4) bignat_div(mant, base * base * base * base);
  ------------------
  |  Branch (34339:16): [True: 637, False: 714]
  ------------------
34340|  1.21k|        for (; exponent < -1; exponent += 2) bignat_div(mant, base * base);
  ------------------
  |  Branch (34340:16): [True: 496, False: 714]
  ------------------
34341|  1.05k|        for (; exponent <  0; exponent += 1) bignat_div(mant, base);
  ------------------
  |  Branch (34341:16): [True: 344, False: 714]
  ------------------
34342|    714|    }
34343|       |
34344|  93.6k|    return negative
  ------------------
  |  Branch (34344:12): [True: 1.05k, False: 92.6k]
  ------------------
34345|  93.6k|           ? -bignat_extract(mant, exponent2)
34346|  93.6k|           : bignat_extract(mant, exponent2);
34347|  93.6k|}
janet.c:bignat_lshift_n:
34242|    714|static void bignat_lshift_n(struct BigNat *mant, int n) {
34243|    714|    if (!n) return;
  ------------------
  |  Branch (34243:9): [True: 0, False: 714]
  ------------------
34244|    714|    int32_t oldn = mant->n;
34245|    714|    bignat_extra(mant, n);
34246|    714|    memmove(mant->digits + n, mant->digits, sizeof(uint32_t) * oldn);
34247|    714|    memset(mant->digits, 0, sizeof(uint32_t) * (n - 1));
34248|    714|    mant->digits[n - 1] = mant->first_digit;
34249|    714|    mant->first_digit = 0;
34250|    714|}
janet.c:bignat_div:
34224|  1.47k|static void bignat_div(struct BigNat *mant, uint32_t divisor) {
34225|  1.47k|    int32_t i;
34226|  1.47k|    uint32_t quotient, remainder;
34227|  1.47k|    uint64_t dividend;
34228|  1.47k|    remainder = 0, quotient = 0;
34229|  11.0k|    for (i = mant->n - 1; i >= 0; i--) {
  ------------------
  |  Branch (34229:27): [True: 9.55k, False: 1.47k]
  ------------------
34230|  9.55k|        dividend = ((uint64_t)remainder * BIGNAT_BASE) + mant->digits[i];
  ------------------
  |  |34167|  9.55k|#define BIGNAT_BASE 0x80000000U
  ------------------
34231|  9.55k|        if (i < mant->n - 1) mant->digits[i + 1] = quotient;
  ------------------
  |  Branch (34231:13): [True: 8.08k, False: 1.47k]
  ------------------
34232|  9.55k|        quotient = (uint32_t)(dividend / divisor);
34233|  9.55k|        remainder = (uint32_t)(dividend % divisor);
34234|  9.55k|        mant->digits[i] = remainder;
34235|  9.55k|    }
34236|  1.47k|    dividend = ((uint64_t)remainder * BIGNAT_BASE) + mant->first_digit;
  ------------------
  |  |34167|  1.47k|#define BIGNAT_BASE 0x80000000U
  ------------------
34237|  1.47k|    if (mant->n && mant->digits[mant->n - 1] == 0) mant->n--;
  ------------------
  |  Branch (34237:9): [True: 1.47k, False: 0]
  |  Branch (34237:20): [True: 781, False: 696]
  ------------------
34238|  1.47k|    mant->first_digit = (uint32_t)(dividend / divisor);
34239|  1.47k|}
janet.c:bignat_extract:
34267|  93.6k|static double bignat_extract(struct BigNat *mant, int32_t exponent2) {
34268|  93.6k|    uint64_t top53;
34269|  93.6k|    int32_t n = mant->n;
34270|       |    /* Get most significant 53 bits from mant. Bit 52 (0 indexed) should
34271|       |     * always be 1. This is essentially a large right shift on mant.*/
34272|  93.6k|    if (n) {
  ------------------
  |  Branch (34272:9): [True: 4.38k, False: 89.2k]
  ------------------
34273|       |        /* Two or more digits */
34274|  4.38k|        uint64_t d1 = mant->digits[n - 1]; /* MSD (non-zero) */
34275|  4.38k|        uint64_t d2 = (n == 1) ? mant->first_digit : mant->digits[n - 2];
  ------------------
  |  Branch (34275:23): [True: 2.72k, False: 1.65k]
  ------------------
34276|  4.38k|        uint64_t d3 = (n > 2) ? mant->digits[n - 3] : (n == 2) ? mant->first_digit : 0;
  ------------------
  |  Branch (34276:23): [True: 1.38k, False: 2.99k]
  |  Branch (34276:55): [True: 273, False: 2.72k]
  ------------------
34277|  4.38k|        int lz = clz((uint32_t) d1);
  ------------------
  |  |34253|  4.38k|#define clz(x) __builtin_clz(x)
  ------------------
34278|  4.38k|        int nbits = 32 - lz;
34279|       |        /* First get 54 bits */
34280|  4.38k|        top53 = (d2 << (54 - BIGNAT_NBIT)) + (d3 >> (2 * BIGNAT_NBIT - 54));
  ------------------
  |  |34166|  4.38k|#define BIGNAT_NBIT 31
  ------------------
                      top53 = (d2 << (54 - BIGNAT_NBIT)) + (d3 >> (2 * BIGNAT_NBIT - 54));
  ------------------
  |  |34166|  4.38k|#define BIGNAT_NBIT 31
  ------------------
34281|  4.38k|        top53 >>= nbits;
34282|  4.38k|        top53 |= (d1 << (54 - nbits));
34283|       |        /* Rounding based on lowest bit of 54 */
34284|  4.38k|        if (top53 & 1) top53++;
  ------------------
  |  Branch (34284:13): [True: 1.69k, False: 2.68k]
  ------------------
34285|  4.38k|        top53 >>= 1;
34286|  4.38k|        if (top53 > 0x1FffffFFFFffffUL) {
  ------------------
  |  Branch (34286:13): [True: 470, False: 3.91k]
  ------------------
34287|    470|            top53 >>= 1;
34288|    470|            exponent2++;
34289|    470|        }
34290|       |        /* Correct exponent - to correct for large right shift to mantissa. */
34291|  4.38k|        exponent2 += (nbits - 53) + BIGNAT_NBIT * n;
  ------------------
  |  |34166|  4.38k|#define BIGNAT_NBIT 31
  ------------------
34292|  89.2k|    } else {
34293|       |        /* One digit */
34294|  89.2k|        top53 = mant->first_digit;
34295|  89.2k|    }
34296|  93.6k|    return ldexp((double)top53, exponent2);
34297|  93.6k|}
janet.c:scan_uint64:
34507|  6.43k|    int *neg) {
34508|  6.43k|    const uint8_t *end = str + len;
34509|  6.43k|    int seenadigit = 0;
34510|  6.43k|    int base = 10;
34511|  6.43k|    *neg = 0;
34512|  6.43k|    *out = 0;
34513|  6.43k|    uint64_t accum = 0;
34514|  6.43k|    if (len > JANET_NUMBER_LENGTH_RIDICULOUS) return 0;
  ------------------
  |  |34151|  6.43k|#define JANET_NUMBER_LENGTH_RIDICULOUS 0xFFFF
  ------------------
  |  Branch (34514:9): [True: 1, False: 6.43k]
  ------------------
34515|       |    /* Get sign */
34516|  6.43k|    if (str >= end) return 0;
  ------------------
  |  Branch (34516:9): [True: 0, False: 6.43k]
  ------------------
34517|  6.43k|    if (*str == '-') {
  ------------------
  |  Branch (34517:9): [True: 705, False: 5.72k]
  ------------------
34518|    705|        *neg = 1;
34519|    705|        str++;
34520|  5.72k|    } else if (*str == '+') {
  ------------------
  |  Branch (34520:16): [True: 3.50k, False: 2.22k]
  ------------------
34521|  3.50k|        str++;
34522|  3.50k|    }
34523|       |    /* Check for leading 0x or digit digit r */
34524|  6.43k|    if (str + 1 < end && str[0] == '0' && str[1] == 'x') {
  ------------------
  |  Branch (34524:9): [True: 3.83k, False: 2.59k]
  |  Branch (34524:26): [True: 1.65k, False: 2.17k]
  |  Branch (34524:43): [True: 198, False: 1.45k]
  ------------------
34525|    198|        base = 16;
34526|    198|        str += 2;
34527|  6.23k|    } else if (str + 1 < end  &&
  ------------------
  |  Branch (34527:16): [True: 3.63k, False: 2.59k]
  ------------------
34528|  3.63k|               str[0] >= '0' && str[0] <= '9' &&
  ------------------
  |  Branch (34528:16): [True: 3.63k, False: 0]
  |  Branch (34528:33): [True: 3.60k, False: 31]
  ------------------
34529|  3.60k|               str[1] == 'r') {
  ------------------
  |  Branch (34529:16): [True: 0, False: 3.60k]
  ------------------
34530|      0|        base = str[0] - '0';
34531|      0|        str += 2;
34532|  6.23k|    } else if (str + 2 < end  &&
  ------------------
  |  Branch (34532:16): [True: 3.37k, False: 2.85k]
  ------------------
34533|  3.37k|               str[0] >= '0' && str[0] <= '9' &&
  ------------------
  |  Branch (34533:16): [True: 3.37k, False: 0]
  |  Branch (34533:33): [True: 3.34k, False: 31]
  ------------------
34534|  3.34k|               str[1] >= '0' && str[1] <= '9' &&
  ------------------
  |  Branch (34534:16): [True: 3.34k, False: 0]
  |  Branch (34534:33): [True: 2.84k, False: 507]
  ------------------
34535|  2.84k|               str[2] == 'r') {
  ------------------
  |  Branch (34535:16): [True: 954, False: 1.88k]
  ------------------
34536|    954|        base = 10 * (str[0] - '0') + (str[1] - '0');
34537|    954|        if (base < 2 || base > 36) return 0;
  ------------------
  |  Branch (34537:13): [True: 249, False: 705]
  |  Branch (34537:25): [True: 0, False: 705]
  ------------------
34538|    705|        str += 3;
34539|    705|    }
34540|       |
34541|       |    /* Skip leading zeros */
34542|  11.1k|    while (str < end && *str == '0') {
  ------------------
  |  Branch (34542:12): [True: 8.62k, False: 2.48k]
  |  Branch (34542:25): [True: 4.93k, False: 3.69k]
  ------------------
34543|  4.93k|        seenadigit = 1;
34544|  4.93k|        str++;
34545|  4.93k|    }
34546|       |    /* Parse significant digits */
34547|  20.6k|    while (str < end) {
  ------------------
  |  Branch (34547:12): [True: 15.4k, False: 5.22k]
  ------------------
34548|  15.4k|        if (*str == '_') {
  ------------------
  |  Branch (34548:13): [True: 0, False: 15.4k]
  ------------------
34549|      0|            if (!seenadigit) return 0;
  ------------------
  |  Branch (34549:17): [True: 0, False: 0]
  ------------------
34550|  15.4k|        } else {
34551|  15.4k|            int digit = digit_lookup[*str & 0x7F];
34552|  15.4k|            if (*str > 127 || digit >= base) return 0;
  ------------------
  |  Branch (34552:17): [True: 0, False: 15.4k]
  |  Branch (34552:31): [True: 600, False: 14.8k]
  ------------------
34553|  14.8k|            if (accum > (UINT64_MAX - digit) / base) return 0;
  ------------------
  |  Branch (34553:17): [True: 361, False: 14.5k]
  ------------------
34554|  14.5k|            accum = accum * base + digit;
34555|  14.5k|            seenadigit = 1;
34556|  14.5k|        }
34557|  14.5k|        str++;
34558|  14.5k|    }
34559|       |
34560|  5.22k|    if (!seenadigit) return 0;
  ------------------
  |  Branch (34560:9): [True: 148, False: 5.07k]
  ------------------
34561|  5.07k|    *out = accum;
34562|  5.07k|    return 1;
34563|  5.22k|}
janet.c:janet_dict_find:
  433|  9.38M|static inline const JanetKV *janet_dict_find(const JanetKV *buckets, int32_t cap, Janet key) {
  434|  9.38M|    int32_t hash;
  435|  9.38M|    if (janet_checktype(key, JANET_KEYWORD) || janet_checktype(key, JANET_SYMBOL)) {
  ------------------
  |  |  806|  18.7M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 4.76M, False: 4.62M]
  |  |  |  Branch (806:6): [Folded, False: 9.38M]
  |  |  ------------------
  |  |  807|  18.7M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  18.7M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  9.38M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  9.38M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  9.38M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  9.38M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (janet_checktype(key, JANET_KEYWORD) || janet_checktype(key, JANET_SYMBOL)) {
  ------------------
  |  |  806|  4.62M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 3.22M, False: 1.39M]
  |  |  |  Branch (806:6): [Folded, False: 4.62M]
  |  |  ------------------
  |  |  807|  4.62M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  4.62M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  4.62M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  4.62M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  4.62M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  4.62M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  436|  7.99M|        hash = janet_string_hash(janet_unwrap_string(key));
  ------------------
  |  | 1814|  7.99M|#define janet_string_hash(s) (janet_string_head(s)->hash)
  |  |  ------------------
  |  |  |  | 1812|  7.99M|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  ------------------
  ------------------
  437|  7.99M|    } else if (janet_checktypes(key, JANET_TFLAG_NIL | JANET_TFLAG_STRING | JANET_TFLAG_TUPLE | JANET_TFLAG_STRUCT | JANET_TFLAG_ABSTRACT) ||
  ------------------
  |  |  969|  2.78M|#define janet_checktypes(x, tps) ((1 << janet_type(x)) & (tps))
  |  |  ------------------
  |  |  |  |  795|  1.39M|    (isnan((x).number) \
  |  |  |  |  796|  1.39M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  |  |  797|  1.39M|        : JANET_NUMBER)
  |  |  ------------------
  |  |  |  Branch (969:34): [True: 724k, False: 668k]
  |  |  ------------------
  ------------------
  |  Branch (437:16): [True: 1.37M, False: 13.3k]
  ------------------
  438|   724k|               (janet_checktype(key, JANET_NUMBER) && janet_unwrap_number(key) == 0)) {
  ------------------
  |  |  806|  1.33M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 13.3k, False: 655k]
  |  |  |  Branch (806:6): [True: 668k, Folded]
  |  |  ------------------
  |  |  807|  1.33M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|   668k|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 13.3k, False: 655k]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 655k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  1.33M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                             (janet_checktype(key, JANET_NUMBER) && janet_unwrap_number(key) == 0)) {
  ------------------
  |  |  839|  13.3k|#define janet_unwrap_number(x) ((x).number)
  ------------------
  |  Branch (438:55): [True: 106, False: 13.2k]
  ------------------
  439|   724k|        return janet_dict_find_deep(buckets, cap, key);
  440|   724k|    } else {
  441|   668k|        hash = janet_hash(key);
  442|   668k|    }
  443|  8.66M|    uint32_t mask = (uint32_t) cap - 1;
  444|  8.66M|    uint32_t i = (uint32_t) hash & mask;
  445|  8.66M|    const JanetKV *first_bucket = NULL;
  446|  75.2M|    for (int32_t n = 0; n < cap; n++, i = (i + 1) & mask) {
  ------------------
  |  Branch (446:25): [True: 75.2M, False: 0]
  ------------------
  447|  75.2M|        const JanetKV *kv = buckets + i;
  448|  75.2M|        if (janet_bitwise_same(kv->key, key)) return kv;
  ------------------
  |  |  401|  75.2M|#define janet_bitwise_same(x, y) (janet_u64(x) == janet_u64(y))
  |  |  ------------------
  |  |  |  |  788|  75.2M|#define janet_u64(x) ((x).u64)
  |  |  ------------------
  |  |               #define janet_bitwise_same(x, y) (janet_u64(x) == janet_u64(y))
  |  |  ------------------
  |  |  |  |  788|  75.2M|#define janet_u64(x) ((x).u64)
  |  |  ------------------
  |  |  |  Branch (401:34): [True: 2.96M, False: 72.2M]
  |  |  ------------------
  ------------------
  449|  72.2M|        if (janet_checktype(kv->key, JANET_NIL)) {
  ------------------
  |  |  806|  72.2M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 48.2M, False: 24.0M]
  |  |  |  Branch (806:6): [Folded, False: 72.2M]
  |  |  ------------------
  |  |  807|  72.2M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  72.2M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  72.2M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  72.2M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  72.2M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  72.2M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  450|  48.2M|            if (janet_checktype(kv->value, JANET_NIL)) return kv;
  ------------------
  |  |  806|  48.2M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 5.69M, False: 42.5M]
  |  |  |  Branch (806:6): [Folded, False: 48.2M]
  |  |  ------------------
  |  |  807|  48.2M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  48.2M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  48.2M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  48.2M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  48.2M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  48.2M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  451|  42.5M|            if (NULL == first_bucket) first_bucket = kv;
  ------------------
  |  Branch (451:17): [True: 552k, False: 41.9M]
  ------------------
  452|  42.5M|        }
  453|  72.2M|    }
  454|      0|    return first_bucket;
  455|  8.66M|}
janet.c:janet_symcache_findmem:
35035|  30.1M|    int *success) {
35036|  30.1M|    uint32_t bounds[4];
35037|  30.1M|    uint32_t i, j, index;
35038|  30.1M|    const uint8_t **firstEmpty = NULL;
35039|       |
35040|       |    /* We will search two ranges - index to the end,
35041|       |     * and 0 to the index. */
35042|  30.1M|    index = (uint32_t)hash & (janet_vm.cache_capacity - 1);
35043|  30.1M|    bounds[0] = index;
35044|  30.1M|    bounds[1] = janet_vm.cache_capacity;
35045|  30.1M|    bounds[2] = 0;
35046|  30.1M|    bounds[3] = index;
35047|  30.1M|    for (j = 0; j < 4; j += 2)
  ------------------
  |  Branch (35047:17): [True: 30.1M, False: 0]
  ------------------
35048|  46.9M|        for (i = bounds[j]; i < bounds[j + 1]; ++i) {
  ------------------
  |  Branch (35048:29): [True: 46.9M, False: 1.36k]
  ------------------
35049|  46.9M|            const uint8_t *test = janet_vm.cache[i];
35050|       |            /* Check empty spots */
35051|  46.9M|            if (NULL == test) {
  ------------------
  |  Branch (35051:17): [True: 2.94M, False: 43.9M]
  ------------------
35052|  2.94M|                if (NULL == firstEmpty)
  ------------------
  |  Branch (35052:21): [True: 2.94M, False: 0]
  ------------------
35053|  2.94M|                    firstEmpty = janet_vm.cache + i;
35054|  2.94M|                goto notfound;
35055|  2.94M|            }
35056|       |            /* Check for marked deleted */
35057|  43.9M|            if (JANET_SYMCACHE_DELETED == test) {
  ------------------
  |  Branch (35057:17): [True: 757, False: 43.9M]
  ------------------
35058|    757|                if (firstEmpty == NULL)
  ------------------
  |  Branch (35058:21): [True: 418, False: 339]
  ------------------
35059|    418|                    firstEmpty = janet_vm.cache + i;
35060|    757|                continue;
35061|    757|            }
35062|  43.9M|            if (janet_string_equalconst(test, str, len, hash)) {
  ------------------
  |  Branch (35062:17): [True: 27.2M, False: 16.7M]
  ------------------
35063|       |                /* Replace first deleted */
35064|  27.2M|                *success = 1;
35065|  27.2M|                if (firstEmpty != NULL) {
  ------------------
  |  Branch (35065:21): [True: 418, False: 27.2M]
  ------------------
35066|    418|                    *firstEmpty = test;
35067|    418|                    janet_vm.cache[i] = JANET_SYMCACHE_DELETED;
35068|    418|                    return firstEmpty;
35069|    418|                }
35070|  27.2M|                return janet_vm.cache + i;
35071|  27.2M|            }
35072|  43.9M|        }
35073|  2.94M|notfound:
35074|  2.94M|    *success = 0;
35075|  2.94M|    janet_assert(firstEmpty != NULL, "symcache failed to get memory");
  ------------------
  |  |  389|  2.94M|#define janet_assert(c, m) do { \
  |  |  390|  2.94M|    if (!(c)) JANET_EXIT((m)); \
  |  |  ------------------
  |  |  |  |  378|      0|#define JANET_EXIT(m) do { \
  |  |  |  |  379|      0|    fprintf(stderr, "janet abort at %s:%d: %s\n",\
  |  |  |  |  380|      0|        __FILE__,\
  |  |  |  |  381|      0|        __LINE__,\
  |  |  |  |  382|      0|        (m));\
  |  |  |  |  383|      0|    abort();\
  |  |  |  |  384|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (390:9): [True: 0, False: 2.94M]
  |  |  ------------------
  |  |  391|  2.94M|} while (0)
  |  |  ------------------
  |  |  |  Branch (391:10): [Folded, False: 2.94M]
  |  |  ------------------
  ------------------
35076|  2.94M|    return firstEmpty;
35077|  2.94M|}
janet.c:janet_symcache_put:
35113|  1.27M|static void janet_symcache_put(const uint8_t *x, const uint8_t **bucket) {
35114|  1.27M|    if ((janet_vm.cache_count + janet_vm.cache_deleted) * 2 > janet_vm.cache_capacity) {
  ------------------
  |  Branch (35114:9): [True: 658, False: 1.27M]
  ------------------
35115|    658|        int status;
35116|    658|        janet_cache_resize(janet_tablen((2 * janet_vm.cache_count + 1)));
35117|    658|        bucket = janet_symcache_find(x, &status);
  ------------------
  |  |35080|    658|    janet_symcache_findmem((str), janet_string_length(str), janet_string_hash(str), (success))
  |  |  ------------------
  |  |  |  | 1813|    658|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1812|    658|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   janet_symcache_findmem((str), janet_string_length(str), janet_string_hash(str), (success))
  |  |  ------------------
  |  |  |  | 1814|    658|#define janet_string_hash(s) (janet_string_head(s)->hash)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1812|    658|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35118|    658|    }
35119|       |    /* Add x to the cache */
35120|  1.27M|    janet_vm.cache_count++;
35121|  1.27M|    *bucket = x;
35122|  1.27M|}
janet.c:janet_cache_resize:
35083|    658|static void janet_cache_resize(uint32_t newCapacity) {
35084|    658|    uint32_t i, oldCapacity;
35085|    658|    const uint8_t **oldCache = janet_vm.cache;
35086|    658|    const uint8_t **newCache = janet_calloc(1, (size_t) newCapacity * sizeof(const uint8_t *));
  ------------------
  |  | 2412|    658|#define janet_calloc(X, Y) calloc((X), (Y))
  ------------------
35087|    658|    if (newCache == NULL) {
  ------------------
  |  Branch (35087:9): [True: 0, False: 658]
  ------------------
35088|      0|        JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
35089|      0|    }
35090|    658|    oldCapacity = janet_vm.cache_capacity;
35091|    658|    janet_vm.cache = newCache;
35092|    658|    janet_vm.cache_capacity = newCapacity;
35093|    658|    janet_vm.cache_deleted = 0;
35094|       |    /* Add all of the old cache entries back */
35095|  3.32M|    for (i = 0; i < oldCapacity; ++i) {
  ------------------
  |  Branch (35095:17): [True: 3.32M, False: 658]
  ------------------
35096|  3.32M|        int status;
35097|  3.32M|        const uint8_t **bucket;
35098|  3.32M|        const uint8_t *x = oldCache[i];
35099|  3.32M|        if (x != NULL && x != JANET_SYMCACHE_DELETED) {
  ------------------
  |  Branch (35099:13): [True: 1.66M, False: 1.66M]
  |  Branch (35099:26): [True: 1.66M, False: 0]
  ------------------
35100|  1.66M|            bucket = janet_symcache_find(x, &status);
  ------------------
  |  |35080|  1.66M|    janet_symcache_findmem((str), janet_string_length(str), janet_string_hash(str), (success))
  |  |  ------------------
  |  |  |  | 1813|  1.66M|#define janet_string_length(s) (janet_string_head(s)->length)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1812|  1.66M|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   janet_symcache_findmem((str), janet_string_length(str), janet_string_hash(str), (success))
  |  |  ------------------
  |  |  |  | 1814|  1.66M|#define janet_string_hash(s) (janet_string_head(s)->hash)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1812|  1.66M|#define janet_string_head(s) ((JanetStringHead *)((char *)s - offsetof(JanetStringHead, data)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35101|  1.66M|            if (status || bucket == NULL) {
  ------------------
  |  Branch (35101:17): [True: 0, False: 1.66M]
  |  Branch (35101:27): [True: 0, False: 1.66M]
  ------------------
35102|       |                /* there was a problem with the algorithm. */
35103|      0|                break;
35104|      0|            }
35105|  1.66M|            *bucket = x;
35106|  1.66M|        }
35107|  3.32M|    }
35108|       |    /* Free the old cache */
35109|    658|    janet_free((void *)oldCache);
  ------------------
  |  | 2415|    658|#define janet_free(X) free((X))
  ------------------
35110|    658|}
janet.c:inc_gensym:
35159|   782k|static void inc_gensym(void) {
35160|   795k|    for (int i = sizeof(janet_vm.gensym_counter) - 2; i; i--) {
  ------------------
  |  Branch (35160:55): [True: 795k, False: 0]
  ------------------
35161|   795k|        if (janet_vm.gensym_counter[i] == '9') {
  ------------------
  |  Branch (35161:13): [True: 12.8k, False: 782k]
  ------------------
35162|  12.8k|            janet_vm.gensym_counter[i] = 'a';
35163|  12.8k|            break;
35164|   782k|        } else if (janet_vm.gensym_counter[i] == 'z') {
  ------------------
  |  Branch (35164:20): [True: 12.8k, False: 769k]
  ------------------
35165|  12.8k|            janet_vm.gensym_counter[i] = 'A';
35166|  12.8k|            break;
35167|   769k|        } else if (janet_vm.gensym_counter[i] == 'Z') {
  ------------------
  |  Branch (35167:20): [True: 12.7k, False: 756k]
  ------------------
35168|  12.7k|            janet_vm.gensym_counter[i] = '0';
35169|   756k|        } else {
35170|   756k|            janet_vm.gensym_counter[i]++;
35171|   756k|            break;
35172|   756k|        }
35173|   795k|    }
35174|   782k|}
janet.c:janet_table_init_impl:
35254|   405k|static JanetTable *janet_table_init_impl(JanetTable *table, int32_t capacity, int stackalloc) {
35255|   405k|    JanetKV *data;
35256|   405k|    capacity = janet_tablen(capacity);
35257|   405k|    if (stackalloc) table->gc.flags = JANET_TABLE_FLAG_STACK;
  ------------------
  |  |35240|  61.6k|#define JANET_TABLE_FLAG_STACK 0x10000
  ------------------
  |  Branch (35257:9): [True: 61.6k, False: 343k]
  ------------------
35258|   405k|    if (capacity) {
  ------------------
  |  Branch (35258:9): [True: 405k, False: 0]
  ------------------
35259|   405k|        if (stackalloc) {
  ------------------
  |  Branch (35259:13): [True: 61.6k, False: 343k]
  ------------------
35260|  61.6k|            data = janet_memalloc_empty_local(capacity);
35261|   343k|        } else {
35262|   343k|            data = (JanetKV *) janet_memalloc_empty(capacity);
35263|   343k|            if (NULL == data) {
  ------------------
  |  Branch (35263:17): [True: 0, False: 343k]
  ------------------
35264|      0|                JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
35265|      0|            }
35266|   343k|        }
35267|   405k|        table->data = data;
35268|   405k|        table->capacity = capacity;
35269|   405k|    } else {
35270|      0|        table->data = NULL;
35271|      0|        table->capacity = 0;
35272|      0|    }
35273|   405k|    table->count = 0;
35274|   405k|    table->deleted = 0;
35275|       |    table->proto = NULL;
35276|   405k|    return table;
35277|   405k|}
janet.c:janet_memalloc_empty_local:
35242|  65.8k|static void *janet_memalloc_empty_local(int32_t count) {
35243|  65.8k|    int32_t i;
35244|  65.8k|    void *mem = janet_smalloc((size_t) count * sizeof(JanetKV));
35245|  65.8k|    JanetKV *mmem = (JanetKV *)mem;
35246|  1.92M|    for (i = 0; i < count; i++) {
  ------------------
  |  Branch (35246:17): [True: 1.85M, False: 65.8k]
  ------------------
35247|  1.85M|        JanetKV *kv = mmem + i;
35248|  1.85M|        kv->key = janet_wrap_nil();
  ------------------
  |  |  831|  1.85M|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  1.85M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.85M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.85M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35249|  1.85M|        kv->value = janet_wrap_nil();
  ------------------
  |  |  831|  1.85M|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  1.85M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.85M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.85M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
35250|  1.85M|    }
35251|  65.8k|    return mem;
35252|  65.8k|}
janet.c:janet_table_rehash:
35327|   168k|static void janet_table_rehash(JanetTable *t, int32_t size) {
35328|   168k|    JanetKV *olddata = t->data;
35329|   168k|    JanetKV *newdata;
35330|   168k|    int islocal = t->gc.flags & JANET_TABLE_FLAG_STACK;
  ------------------
  |  |35240|   168k|#define JANET_TABLE_FLAG_STACK 0x10000
  ------------------
35331|   168k|    if (islocal) {
  ------------------
  |  Branch (35331:9): [True: 4.21k, False: 163k]
  ------------------
35332|  4.21k|        newdata = (JanetKV *) janet_memalloc_empty_local(size);
35333|   163k|    } else {
35334|   163k|        newdata = (JanetKV *) janet_memalloc_empty(size);
35335|   163k|        if (NULL == newdata) {
  ------------------
  |  Branch (35335:13): [True: 0, False: 163k]
  ------------------
35336|      0|            JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
35337|      0|        }
35338|   163k|    }
35339|   168k|    int32_t oldcapacity = t->capacity;
35340|   168k|    t->data = newdata;
35341|   168k|    t->capacity = size;
35342|   168k|    t->deleted = 0;
35343|  3.35M|    for (int32_t i = 0; i < oldcapacity; i++) {
  ------------------
  |  Branch (35343:25): [True: 3.18M, False: 168k]
  ------------------
35344|  3.18M|        JanetKV *kv = olddata + i;
35345|  3.18M|        if (!janet_checktype(kv->key, JANET_NIL)) {
  ------------------
  |  |  806|  3.18M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 3.18M]
  |  |  ------------------
  |  |  807|  3.18M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  3.18M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  3.18M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  3.18M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  3.18M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  3.18M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (35345:13): [True: 1.43M, False: 1.74M]
  ------------------
35346|  1.43M|            JanetKV *newkv = janet_table_find(t, kv->key);
35347|  1.43M|            *newkv = *kv;
35348|  1.43M|        }
35349|  3.18M|    }
35350|   168k|    if (islocal) {
  ------------------
  |  Branch (35350:9): [True: 4.21k, False: 163k]
  ------------------
35351|  4.21k|        janet_sfree(olddata);
35352|   163k|    } else {
35353|   163k|        janet_free(olddata);
  ------------------
  |  | 2415|   163k|#define janet_free(X) free((X))
  ------------------
35354|   163k|    }
35355|   168k|}
janet.c:janet_check_pointer_align:
36416|  96.3k|static void janet_check_pointer_align(void *p) {
36417|  96.3k|    (void) p;
36418|       |#if defined(JANET_NANBOX_64) && JANET_NANBOX_64_POINTER_SHIFT != 0
36419|       |    union {
36420|       |        void *p;
36421|       |        uintptr_t u;
36422|       |    } un;
36423|       |    un.p = p;
36424|       |    janet_assert(!(un.u & (uintptr_t)((1 << JANET_NANBOX_64_POINTER_SHIFT) - 1)),
36425|       |                 "unaligned pointer wrap - cfunction pointers and abstract types must be aligned with this nanboxing configuration.");
36426|       |#endif
36427|  96.3k|}
janet.c:janet_equals_containers:
37327|   441k|static int janet_equals_containers(Janet x, Janet y) {
37328|   441k|    janet_vm.traversal = janet_vm.traversal_base;
37329|   715k|    do {
37330|   715k|        if (janet_type(x) != janet_type(y)) return 0;
  ------------------
  |  |  795|   715k|    (isnan((x).number) \
  |  |  796|   715k|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|   715k|        : JANET_NUMBER)
  ------------------
                      if (janet_type(x) != janet_type(y)) return 0;
  ------------------
  |  |  795|   715k|    (isnan((x).number) \
  |  |  796|   715k|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|   715k|        : JANET_NUMBER)
  ------------------
  |  Branch (37330:13): [True: 714k, False: 773]
  |  Branch (37330:13): [True: 0, False: 715k]
  |  Branch (37330:30): [True: 714k, False: 773]
  ------------------
37331|   715k|        switch (janet_type(x)) {
  ------------------
  |  |  795|   715k|    (isnan((x).number) \
  |  |  796|   715k|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|   715k|        : JANET_NUMBER)
  ------------------
  |  Branch (37331:17): [True: 714k, False: 773]
  ------------------
37332|   221k|            default:
  ------------------
  |  Branch (37332:13): [True: 221k, False: 493k]
  ------------------
37333|   221k|                if (!janet_equals_leaf(x, y)) return 0;
  ------------------
  |  Branch (37333:21): [True: 0, False: 221k]
  ------------------
37334|   221k|                break;
37335|   493k|            case JANET_TUPLE: {
  ------------------
  |  Branch (37335:13): [True: 493k, False: 222k]
  ------------------
37336|   493k|                const Janet *t1 = janet_unwrap_tuple(x);
  ------------------
  |  |  858|   493k|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
37337|   493k|                const Janet *t2 = janet_unwrap_tuple(y);
  ------------------
  |  |  858|   493k|#define janet_unwrap_tuple(x) ((JanetTuple)janet_nanbox_to_pointer(x))
  ------------------
37338|   493k|                if (t1 == t2) break;
  ------------------
  |  Branch (37338:21): [True: 0, False: 493k]
  ------------------
37339|   493k|                if (JANET_TUPLE_FLAG_BRACKETCTOR & (janet_tuple_flag(t1) ^ janet_tuple_flag(t2))) return 0;
  ------------------
  |  | 1798|   493k|#define JANET_TUPLE_FLAG_BRACKETCTOR 0x10000
  ------------------
                              if (JANET_TUPLE_FLAG_BRACKETCTOR & (janet_tuple_flag(t1) ^ janet_tuple_flag(t2))) return 0;
  ------------------
  |  | 1806|   493k|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|   493k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                              if (JANET_TUPLE_FLAG_BRACKETCTOR & (janet_tuple_flag(t1) ^ janet_tuple_flag(t2))) return 0;
  ------------------
  |  | 1806|   493k|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|   493k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (37339:21): [True: 4.90k, False: 488k]
  ------------------
37340|   488k|                if (janet_tuple_hash(t1) != janet_tuple_hash(t2)) return 0;
  ------------------
  |  | 1803|   488k|#define janet_tuple_hash(t) (janet_tuple_head(t)->hash)
  |  |  ------------------
  |  |  |  | 1800|   488k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                              if (janet_tuple_hash(t1) != janet_tuple_hash(t2)) return 0;
  ------------------
  |  | 1803|   488k|#define janet_tuple_hash(t) (janet_tuple_head(t)->hash)
  |  |  ------------------
  |  |  |  | 1800|   488k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (37340:21): [True: 422k, False: 65.6k]
  ------------------
37341|  65.6k|                if (janet_tuple_length(t1) != janet_tuple_length(t2)) return 0;
  ------------------
  |  | 1802|  65.6k|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|  65.6k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                              if (janet_tuple_length(t1) != janet_tuple_length(t2)) return 0;
  ------------------
  |  | 1802|  65.6k|#define janet_tuple_length(t) (janet_tuple_head(t)->length)
  |  |  ------------------
  |  |  |  | 1800|  65.6k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (37341:21): [True: 0, False: 65.6k]
  ------------------
37342|  65.6k|                push_traversal_node(janet_tuple_head(t1), janet_tuple_head(t2), 0);
  ------------------
  |  | 1800|  65.6k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  ------------------
                              push_traversal_node(janet_tuple_head(t1), janet_tuple_head(t2), 0);
  ------------------
  |  | 1800|  65.6k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  ------------------
37343|  65.6k|                break;
37344|  65.6k|            }
37345|    682|            case JANET_STRUCT: {
  ------------------
  |  Branch (37345:13): [True: 682, False: 715k]
  ------------------
37346|    682|                const JanetKV *s1 = janet_unwrap_struct(x);
  ------------------
  |  |  857|    682|#define janet_unwrap_struct(x) ((JanetStruct)janet_nanbox_to_pointer(x))
  ------------------
37347|    682|                const JanetKV *s2 = janet_unwrap_struct(y);
  ------------------
  |  |  857|    682|#define janet_unwrap_struct(x) ((JanetStruct)janet_nanbox_to_pointer(x))
  ------------------
37348|    682|                if (s1 == s2) break;
  ------------------
  |  Branch (37348:21): [True: 0, False: 682]
  ------------------
37349|    682|                if (janet_struct_hash(s1) != janet_struct_hash(s2)) return 0;
  ------------------
  |  | 1850|    682|#define janet_struct_hash(t) (janet_struct_head(t)->hash)
  |  |  ------------------
  |  |  |  | 1846|    682|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
                              if (janet_struct_hash(s1) != janet_struct_hash(s2)) return 0;
  ------------------
  |  | 1850|    682|#define janet_struct_hash(t) (janet_struct_head(t)->hash)
  |  |  ------------------
  |  |  |  | 1846|    682|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (37349:21): [True: 285, False: 397]
  ------------------
37350|    397|                if (janet_struct_length(s1) != janet_struct_length(s2)) return 0;
  ------------------
  |  | 1848|    397|#define janet_struct_length(t) (janet_struct_head(t)->length)
  |  |  ------------------
  |  |  |  | 1846|    397|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
                              if (janet_struct_length(s1) != janet_struct_length(s2)) return 0;
  ------------------
  |  | 1848|    397|#define janet_struct_length(t) (janet_struct_head(t)->length)
  |  |  ------------------
  |  |  |  | 1846|    397|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (37350:21): [True: 0, False: 397]
  ------------------
37351|    397|                if (janet_struct_proto(s1) && !janet_struct_proto(s2)) return 0;
  ------------------
  |  | 1851|    794|#define janet_struct_proto(t) (janet_struct_head(t)->proto)
  |  |  ------------------
  |  |  |  | 1846|    397|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  |  |  |  Branch (1851:31): [True: 0, False: 397]
  |  |  ------------------
  ------------------
                              if (janet_struct_proto(s1) && !janet_struct_proto(s2)) return 0;
  ------------------
  |  | 1851|      0|#define janet_struct_proto(t) (janet_struct_head(t)->proto)
  |  |  ------------------
  |  |  |  | 1846|      0|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
  |  Branch (37351:47): [True: 0, False: 0]
  ------------------
37352|    397|                if (!janet_struct_proto(s1) && janet_struct_proto(s2)) return 0;
  ------------------
  |  | 1851|    794|#define janet_struct_proto(t) (janet_struct_head(t)->proto)
  |  |  ------------------
  |  |  |  | 1846|    397|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  ------------------
                              if (!janet_struct_proto(s1) && janet_struct_proto(s2)) return 0;
  ------------------
  |  | 1851|    397|#define janet_struct_proto(t) (janet_struct_head(t)->proto)
  |  |  ------------------
  |  |  |  | 1846|    397|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  |  |  ------------------
  |  |  |  Branch (1851:31): [True: 0, False: 397]
  |  |  ------------------
  ------------------
  |  Branch (37352:21): [True: 397, False: 0]
  ------------------
37353|    397|                push_traversal_node(janet_struct_head(s1), janet_struct_head(s2), 0);
  ------------------
  |  | 1846|    397|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  ------------------
                              push_traversal_node(janet_struct_head(s1), janet_struct_head(s2), 0);
  ------------------
  |  | 1846|    397|#define janet_struct_head(t) ((JanetStructHead *)((char *)t - offsetof(JanetStructHead, data)))
  ------------------
37354|    397|                break;
37355|    397|            }
37356|   715k|        }
37357|   715k|    } while (!traversal_next(&x, &y));
  ------------------
  |  Branch (37357:14): [True: 274k, False: 13.6k]
  ------------------
37358|  13.6k|    return 1;
37359|   441k|}
janet.c:janet_equals_leaf:
37314|  42.2M|static int janet_equals_leaf(Janet x, Janet y) {
37315|  42.2M|    switch (janet_type(x)) {
  ------------------
  |  |  795|  42.2M|    (isnan((x).number) \
  |  |  796|  42.2M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  42.2M|        : JANET_NUMBER)
  ------------------
  |  Branch (37315:13): [True: 40.7M, False: 1.51M]
  ------------------
37316|  1.51M|        case JANET_NUMBER:
  ------------------
  |  Branch (37316:9): [True: 1.51M, False: 40.7M]
  ------------------
37317|  1.51M|            return janet_unwrap_number(x) == janet_unwrap_number(y);
  ------------------
  |  |  839|  1.51M|#define janet_unwrap_number(x) ((x).number)
  ------------------
                          return janet_unwrap_number(x) == janet_unwrap_number(y);
  ------------------
  |  |  839|  1.51M|#define janet_unwrap_number(x) ((x).number)
  ------------------
37318|  1.46M|        case JANET_STRING:
  ------------------
  |  Branch (37318:9): [True: 1.46M, False: 40.7M]
  ------------------
37319|  1.46M|            return janet_string_equal(janet_unwrap_string(x), janet_unwrap_string(y));
  ------------------
  |  |  863|  1.46M|#define janet_unwrap_string(x) ((JanetString)janet_nanbox_to_pointer(x))
  ------------------
                          return janet_string_equal(janet_unwrap_string(x), janet_unwrap_string(y));
  ------------------
  |  |  863|  1.46M|#define janet_unwrap_string(x) ((JanetString)janet_nanbox_to_pointer(x))
  ------------------
37320|     11|        case JANET_ABSTRACT:
  ------------------
  |  Branch (37320:9): [True: 11, False: 42.2M]
  ------------------
37321|     11|            return !janet_compare_abstract(janet_unwrap_abstract(x), janet_unwrap_abstract(y));
  ------------------
  |  |  866|     11|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
                          return !janet_compare_abstract(janet_unwrap_abstract(x), janet_unwrap_abstract(y));
  ------------------
  |  |  866|     11|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
37322|  39.2M|        default:
  ------------------
  |  Branch (37322:9): [True: 39.2M, False: 2.98M]
  ------------------
37323|  39.2M|            return janet_bitwise_same(x, y);
  ------------------
  |  |  401|  39.2M|#define janet_bitwise_same(x, y) (janet_u64(x) == janet_u64(y))
  |  |  ------------------
  |  |  |  |  788|  39.2M|#define janet_u64(x) ((x).u64)
  |  |  ------------------
  |  |               #define janet_bitwise_same(x, y) (janet_u64(x) == janet_u64(y))
  |  |  ------------------
  |  |  |  |  788|  39.2M|#define janet_u64(x) ((x).u64)
  |  |  ------------------
  ------------------
37324|  42.2M|    }
37325|  42.2M|}
janet.c:murmur64:
37367|  25.4M|static uint64_t murmur64(uint64_t h) {
37368|  25.4M|    h ^= h >> 33;
37369|  25.4M|    h *= 0xff51afd7ed558ccdUL;
37370|  25.4M|    h ^= h >> 33;
37371|  25.4M|    h *= 0xc4ceb9fe1a85ec53UL;
37372|  25.4M|    h ^= h >> 33;
37373|  25.4M|    return h;
37374|  25.4M|}
janet.c:janet_compare_abstract:
37300|     11|static int janet_compare_abstract(JanetAbstract xx, JanetAbstract yy) {
37301|     11|    if (xx == yy) return 0;
  ------------------
  |  Branch (37301:9): [True: 8, False: 3]
  ------------------
37302|      3|    const JanetAbstractType *xt = janet_abstract_type(xx);
  ------------------
  |  | 1899|      3|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|      3|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
37303|      3|    const JanetAbstractType *yt = janet_abstract_type(yy);
  ------------------
  |  | 1899|      3|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|      3|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
37304|      3|    if (xt != yt) {
  ------------------
  |  Branch (37304:9): [True: 0, False: 3]
  ------------------
37305|      0|        return xt > yt ? 1 : -1;
  ------------------
  |  Branch (37305:16): [True: 0, False: 0]
  ------------------
37306|      0|    }
37307|      3|    if (xt->compare == NULL) {
  ------------------
  |  Branch (37307:9): [True: 3, False: 0]
  ------------------
37308|      3|        return xx > yy ? 1 : -1;
  ------------------
  |  Branch (37308:16): [True: 0, False: 3]
  ------------------
37309|      3|    }
37310|      0|    return xt->compare(xx, yy);
37311|      3|}
janet.c:push_traversal_node:
37098|   544k|static void push_traversal_node(void *lhs, void *rhs, int32_t index2) {
37099|   544k|    JanetTraversalNode node;
37100|   544k|    node.self = (JanetGCObject *) lhs;
37101|   544k|    node.other = (JanetGCObject *) rhs;
37102|   544k|    node.index = 0;
37103|   544k|    node.index2 = index2;
37104|   544k|    int is_new = janet_vm.traversal_base == NULL;
37105|   544k|    if (is_new || (janet_vm.traversal + 1 >= janet_vm.traversal_top)) {
  ------------------
  |  Branch (37105:9): [True: 63, False: 544k]
  |  Branch (37105:19): [True: 8, False: 544k]
  ------------------
37106|     71|        size_t oldsize = is_new ? 0 : (janet_vm.traversal - janet_vm.traversal_base);
  ------------------
  |  Branch (37106:26): [True: 63, False: 8]
  ------------------
37107|     71|        size_t newsize = 2 * oldsize + 1;
37108|     71|        if (newsize < 128) {
  ------------------
  |  Branch (37108:13): [True: 63, False: 8]
  ------------------
37109|     63|            newsize = 128;
37110|     63|        }
37111|     71|        JanetTraversalNode *tn = janet_realloc(janet_vm.traversal_base, newsize * sizeof(JanetTraversalNode));
  ------------------
  |  | 2409|     71|#define janet_realloc(X, Y) realloc((X), (Y))
  ------------------
37112|     71|        if (tn == NULL) {
  ------------------
  |  Branch (37112:13): [True: 0, False: 71]
  ------------------
37113|      0|            JANET_OUT_OF_MEMORY;
  ------------------
  |  |  419|      0|#define JANET_OUT_OF_MEMORY do { fprintf(stderr, "%s:%d - janet out of memory\n", __FILE__, __LINE__); exit(1); } while (0)
  |  |  ------------------
  |  |  |  Branch (419:122): [Folded, False: 0]
  |  |  ------------------
  ------------------
37114|      0|        }
37115|     71|        janet_vm.traversal_base = tn;
37116|     71|        janet_vm.traversal_top = janet_vm.traversal_base + newsize;
37117|     71|        janet_vm.traversal = janet_vm.traversal_base + oldsize;
37118|     71|    }
37119|   544k|    *(++janet_vm.traversal) = node;
37120|   544k|}
janet.c:traversal_next:
37130|  1.73M|static int traversal_next(Janet *x, Janet *y) {
37131|  1.73M|    JanetTraversalNode *t = janet_vm.traversal;
37132|  2.02M|    while (t && t > janet_vm.traversal_base) {
  ------------------
  |  Branch (37132:12): [True: 1.97M, False: 48.9k]
  |  Branch (37132:17): [True: 1.52M, False: 456k]
  ------------------
37133|  1.52M|        JanetGCObject *self = t->self;
37134|  1.52M|        JanetTupleHead *tself = (JanetTupleHead *)self;
37135|  1.52M|        JanetStructHead *sself = (JanetStructHead *)self;
37136|  1.52M|        JanetGCObject *other = t->other;
37137|  1.52M|        JanetTupleHead *tother = (JanetTupleHead *)other;
37138|  1.52M|        JanetStructHead *sother = (JanetStructHead *)other;
37139|  1.52M|        if ((self->flags & JANET_MEM_TYPEBITS) == JANET_MEMORY_TUPLE) {
  ------------------
  |  |  675|  1.52M|#define JANET_MEM_TYPEBITS 0xFF
  ------------------
  |  Branch (37139:13): [True: 1.51M, False: 4.40k]
  ------------------
37140|       |            /* Node is a tuple at index t->index */
37141|  1.51M|            if (t->index < tself->length && t->index < tother->length) {
  ------------------
  |  Branch (37141:17): [True: 1.22M, False: 291k]
  |  Branch (37141:45): [True: 1.22M, False: 0]
  ------------------
37142|  1.22M|                int32_t index = t->index++;
37143|  1.22M|                *x = tself->data[index];
37144|  1.22M|                *y = tother->data[index];
37145|  1.22M|                janet_vm.traversal = t;
37146|  1.22M|                return 0;
37147|  1.22M|            }
37148|   291k|            if (t->index2 && tself->length != tother->length) {
  ------------------
  |  Branch (37148:17): [True: 225k, False: 65.6k]
  |  Branch (37148:30): [True: 0, False: 225k]
  ------------------
37149|      0|                return tself->length > tother->length ? 3 : 1;
  ------------------
  |  Branch (37149:24): [True: 0, False: 0]
  ------------------
37150|      0|            }
37151|   291k|        } else {
37152|       |            /* Node is a struct at index t->index: if t->index2 is true, we should return the values. */
37153|  4.40k|            if (t->index2) {
  ------------------
  |  Branch (37153:17): [True: 2.00k, False: 2.40k]
  ------------------
37154|  2.00k|                t->index2 = 0;
37155|  2.00k|                int32_t index = t->index++;
37156|  2.00k|                *x = sself->data[index].value;
37157|  2.00k|                *y = sother->data[index].value;
37158|  2.00k|                janet_vm.traversal = t;
37159|  2.00k|                return 0;
37160|  2.00k|            }
37161|  2.40k|            for (int32_t i = t->index; i < sself->capacity; i++) {
  ------------------
  |  Branch (37161:40): [True: 2.00k, False: 397]
  ------------------
37162|  2.00k|                t->index2 = 1;
37163|  2.00k|                *x = sself->data[t->index].key;
37164|  2.00k|                *y = sother->data[t->index].key;
37165|  2.00k|                janet_vm.traversal = t;
37166|  2.00k|                return 0;
37167|  2.00k|            }
37168|       |            /* Traverse prototype */
37169|    397|            JanetStruct sproto = sself->proto;
37170|    397|            JanetStruct oproto = sother->proto;
37171|    397|            if (sproto && !oproto) return 3;
  ------------------
  |  Branch (37171:17): [True: 0, False: 397]
  |  Branch (37171:27): [True: 0, False: 0]
  ------------------
37172|    397|            if (!sproto && oproto) return 1;
  ------------------
  |  Branch (37172:17): [True: 397, False: 0]
  |  Branch (37172:28): [True: 0, False: 397]
  ------------------
37173|    397|            if (oproto && sproto) {
  ------------------
  |  Branch (37173:17): [True: 0, False: 397]
  |  Branch (37173:27): [True: 0, False: 0]
  ------------------
37174|      0|                *x = janet_wrap_struct(sproto);
  ------------------
  |  |  842|      0|#define janet_wrap_struct(s) janet_nanbox_wrap_c((s), JANET_STRUCT)
  |  |  ------------------
  |  |  |  |  828|      0|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37175|      0|                *y = janet_wrap_struct(oproto);
  ------------------
  |  |  842|      0|#define janet_wrap_struct(s) janet_nanbox_wrap_c((s), JANET_STRUCT)
  |  |  ------------------
  |  |  |  |  828|      0|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
37176|      0|                janet_vm.traversal = t - 1;
37177|      0|                return 0;
37178|      0|            }
37179|    397|        }
37180|   291k|        t--;
37181|   291k|    }
37182|   505k|    janet_vm.traversal = t;
37183|   505k|    return 2;
37184|  1.73M|}
janet.c:getter_checkint:
37510|  14.6M|static int32_t getter_checkint(JanetType type, Janet key, int32_t max) {
37511|  14.6M|    if (!janet_checkint(key)) goto bad;
  ------------------
  |  Branch (37511:9): [True: 0, False: 14.6M]
  ------------------
37512|  14.6M|    int32_t ret = janet_unwrap_integer(key);
  ------------------
  |  |  966|  14.6M|#define janet_unwrap_integer(x) ((int32_t) janet_unwrap_number(x))
  |  |  ------------------
  |  |  |  |  839|  14.6M|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  ------------------
37513|  14.6M|    if (ret < 0) goto bad;
  ------------------
  |  Branch (37513:9): [True: 0, False: 14.6M]
  ------------------
37514|  14.6M|    if (ret >= max) goto bad;
  ------------------
  |  Branch (37514:9): [True: 225, False: 14.6M]
  ------------------
37515|  14.6M|    return ret;
37516|    225|bad:
37517|    225|    janet_panicf("expected integer key for %s in range [0, %d), got %v", janet_type_names[type], max, key);
37518|  14.6M|}
janet.c:run_vm:
38294|  86.4k|static JanetSignal run_vm(JanetFiber *fiber, Janet in) {
38295|       |
38296|       |    /* opcode -> label lookup if using clang/GCC */
38297|  86.4k|#ifdef JANET_USE_COMPUTED_GOTOS
38298|  86.4k|    static void *op_lookup[255] = {
38299|  86.4k|        &&label_JOP_NOOP,
38300|  86.4k|        &&label_JOP_ERROR,
38301|  86.4k|        &&label_JOP_TYPECHECK,
38302|  86.4k|        &&label_JOP_RETURN,
38303|  86.4k|        &&label_JOP_RETURN_NIL,
38304|  86.4k|        &&label_JOP_ADD_IMMEDIATE,
38305|  86.4k|        &&label_JOP_ADD,
38306|  86.4k|        &&label_JOP_SUBTRACT_IMMEDIATE,
38307|  86.4k|        &&label_JOP_SUBTRACT,
38308|  86.4k|        &&label_JOP_MULTIPLY_IMMEDIATE,
38309|  86.4k|        &&label_JOP_MULTIPLY,
38310|  86.4k|        &&label_JOP_DIVIDE_IMMEDIATE,
38311|  86.4k|        &&label_JOP_DIVIDE,
38312|  86.4k|        &&label_JOP_DIVIDE_FLOOR,
38313|  86.4k|        &&label_JOP_MODULO,
38314|  86.4k|        &&label_JOP_REMAINDER,
38315|  86.4k|        &&label_JOP_BAND,
38316|  86.4k|        &&label_JOP_BOR,
38317|  86.4k|        &&label_JOP_BXOR,
38318|  86.4k|        &&label_JOP_BNOT,
38319|  86.4k|        &&label_JOP_SHIFT_LEFT,
38320|  86.4k|        &&label_JOP_SHIFT_LEFT_IMMEDIATE,
38321|  86.4k|        &&label_JOP_SHIFT_RIGHT,
38322|  86.4k|        &&label_JOP_SHIFT_RIGHT_IMMEDIATE,
38323|  86.4k|        &&label_JOP_SHIFT_RIGHT_UNSIGNED,
38324|  86.4k|        &&label_JOP_SHIFT_RIGHT_UNSIGNED_IMMEDIATE,
38325|  86.4k|        &&label_JOP_MOVE_FAR,
38326|  86.4k|        &&label_JOP_MOVE_NEAR,
38327|  86.4k|        &&label_JOP_JUMP,
38328|  86.4k|        &&label_JOP_JUMP_IF,
38329|  86.4k|        &&label_JOP_JUMP_IF_NOT,
38330|  86.4k|        &&label_JOP_JUMP_IF_NIL,
38331|  86.4k|        &&label_JOP_JUMP_IF_NOT_NIL,
38332|  86.4k|        &&label_JOP_GREATER_THAN,
38333|  86.4k|        &&label_JOP_GREATER_THAN_IMMEDIATE,
38334|  86.4k|        &&label_JOP_LESS_THAN,
38335|  86.4k|        &&label_JOP_LESS_THAN_IMMEDIATE,
38336|  86.4k|        &&label_JOP_EQUALS,
38337|  86.4k|        &&label_JOP_EQUALS_IMMEDIATE,
38338|  86.4k|        &&label_JOP_COMPARE,
38339|  86.4k|        &&label_JOP_LOAD_NIL,
38340|  86.4k|        &&label_JOP_LOAD_TRUE,
38341|  86.4k|        &&label_JOP_LOAD_FALSE,
38342|  86.4k|        &&label_JOP_LOAD_INTEGER,
38343|  86.4k|        &&label_JOP_LOAD_CONSTANT,
38344|  86.4k|        &&label_JOP_LOAD_UPVALUE,
38345|  86.4k|        &&label_JOP_LOAD_SELF,
38346|  86.4k|        &&label_JOP_SET_UPVALUE,
38347|  86.4k|        &&label_JOP_CLOSURE,
38348|  86.4k|        &&label_JOP_PUSH,
38349|  86.4k|        &&label_JOP_PUSH_2,
38350|  86.4k|        &&label_JOP_PUSH_3,
38351|  86.4k|        &&label_JOP_PUSH_ARRAY,
38352|  86.4k|        &&label_JOP_CALL,
38353|  86.4k|        &&label_JOP_TAILCALL,
38354|  86.4k|        &&label_JOP_RESUME,
38355|  86.4k|        &&label_JOP_SIGNAL,
38356|  86.4k|        &&label_JOP_PROPAGATE,
38357|  86.4k|        &&label_JOP_IN,
38358|  86.4k|        &&label_JOP_GET,
38359|  86.4k|        &&label_JOP_PUT,
38360|  86.4k|        &&label_JOP_GET_INDEX,
38361|  86.4k|        &&label_JOP_PUT_INDEX,
38362|  86.4k|        &&label_JOP_LENGTH,
38363|  86.4k|        &&label_JOP_MAKE_ARRAY,
38364|  86.4k|        &&label_JOP_MAKE_BUFFER,
38365|  86.4k|        &&label_JOP_MAKE_STRING,
38366|  86.4k|        &&label_JOP_MAKE_STRUCT,
38367|  86.4k|        &&label_JOP_MAKE_TABLE,
38368|  86.4k|        &&label_JOP_MAKE_TUPLE,
38369|  86.4k|        &&label_JOP_MAKE_BRACKET_TUPLE,
38370|  86.4k|        &&label_JOP_GREATER_THAN_EQUAL,
38371|  86.4k|        &&label_JOP_LESS_THAN_EQUAL,
38372|  86.4k|        &&label_JOP_NEXT,
38373|  86.4k|        &&label_JOP_NOT_EQUALS,
38374|  86.4k|        &&label_JOP_NOT_EQUALS_IMMEDIATE,
38375|  86.4k|        &&label_JOP_CANCEL,
38376|  86.4k|        &&label_unknown_op,
38377|  86.4k|        &&label_unknown_op,
38378|  86.4k|        &&label_unknown_op,
38379|  86.4k|        &&label_unknown_op,
38380|  86.4k|        &&label_unknown_op,
38381|  86.4k|        &&label_unknown_op,
38382|  86.4k|        &&label_unknown_op,
38383|  86.4k|        &&label_unknown_op,
38384|  86.4k|        &&label_unknown_op,
38385|  86.4k|        &&label_unknown_op,
38386|  86.4k|        &&label_unknown_op,
38387|  86.4k|        &&label_unknown_op,
38388|  86.4k|        &&label_unknown_op,
38389|  86.4k|        &&label_unknown_op,
38390|  86.4k|        &&label_unknown_op,
38391|  86.4k|        &&label_unknown_op,
38392|  86.4k|        &&label_unknown_op,
38393|  86.4k|        &&label_unknown_op,
38394|  86.4k|        &&label_unknown_op,
38395|  86.4k|        &&label_unknown_op,
38396|  86.4k|        &&label_unknown_op,
38397|  86.4k|        &&label_unknown_op,
38398|  86.4k|        &&label_unknown_op,
38399|  86.4k|        &&label_unknown_op,
38400|  86.4k|        &&label_unknown_op,
38401|  86.4k|        &&label_unknown_op,
38402|  86.4k|        &&label_unknown_op,
38403|  86.4k|        &&label_unknown_op,
38404|  86.4k|        &&label_unknown_op,
38405|  86.4k|        &&label_unknown_op,
38406|  86.4k|        &&label_unknown_op,
38407|  86.4k|        &&label_unknown_op,
38408|  86.4k|        &&label_unknown_op,
38409|  86.4k|        &&label_unknown_op,
38410|  86.4k|        &&label_unknown_op,
38411|  86.4k|        &&label_unknown_op,
38412|  86.4k|        &&label_unknown_op,
38413|  86.4k|        &&label_unknown_op,
38414|  86.4k|        &&label_unknown_op,
38415|  86.4k|        &&label_unknown_op,
38416|  86.4k|        &&label_unknown_op,
38417|  86.4k|        &&label_unknown_op,
38418|  86.4k|        &&label_unknown_op,
38419|  86.4k|        &&label_unknown_op,
38420|  86.4k|        &&label_unknown_op,
38421|  86.4k|        &&label_unknown_op,
38422|  86.4k|        &&label_unknown_op,
38423|  86.4k|        &&label_unknown_op,
38424|  86.4k|        &&label_unknown_op,
38425|  86.4k|        &&label_unknown_op,
38426|  86.4k|        &&label_unknown_op,
38427|  86.4k|        &&label_unknown_op,
38428|  86.4k|        &&label_unknown_op,
38429|  86.4k|        &&label_unknown_op,
38430|  86.4k|        &&label_unknown_op,
38431|  86.4k|        &&label_unknown_op,
38432|  86.4k|        &&label_unknown_op,
38433|  86.4k|        &&label_unknown_op,
38434|  86.4k|        &&label_unknown_op,
38435|  86.4k|        &&label_unknown_op,
38436|  86.4k|        &&label_unknown_op,
38437|  86.4k|        &&label_unknown_op,
38438|  86.4k|        &&label_unknown_op,
38439|  86.4k|        &&label_unknown_op,
38440|  86.4k|        &&label_unknown_op,
38441|  86.4k|        &&label_unknown_op,
38442|  86.4k|        &&label_unknown_op,
38443|  86.4k|        &&label_unknown_op,
38444|  86.4k|        &&label_unknown_op,
38445|  86.4k|        &&label_unknown_op,
38446|  86.4k|        &&label_unknown_op,
38447|  86.4k|        &&label_unknown_op,
38448|  86.4k|        &&label_unknown_op,
38449|  86.4k|        &&label_unknown_op,
38450|  86.4k|        &&label_unknown_op,
38451|  86.4k|        &&label_unknown_op,
38452|  86.4k|        &&label_unknown_op,
38453|  86.4k|        &&label_unknown_op,
38454|  86.4k|        &&label_unknown_op,
38455|  86.4k|        &&label_unknown_op,
38456|  86.4k|        &&label_unknown_op,
38457|  86.4k|        &&label_unknown_op,
38458|  86.4k|        &&label_unknown_op,
38459|  86.4k|        &&label_unknown_op,
38460|  86.4k|        &&label_unknown_op,
38461|  86.4k|        &&label_unknown_op,
38462|  86.4k|        &&label_unknown_op,
38463|  86.4k|        &&label_unknown_op,
38464|  86.4k|        &&label_unknown_op,
38465|  86.4k|        &&label_unknown_op,
38466|  86.4k|        &&label_unknown_op,
38467|  86.4k|        &&label_unknown_op,
38468|  86.4k|        &&label_unknown_op,
38469|  86.4k|        &&label_unknown_op,
38470|  86.4k|        &&label_unknown_op,
38471|  86.4k|        &&label_unknown_op,
38472|  86.4k|        &&label_unknown_op,
38473|  86.4k|        &&label_unknown_op,
38474|  86.4k|        &&label_unknown_op,
38475|  86.4k|        &&label_unknown_op,
38476|  86.4k|        &&label_unknown_op,
38477|  86.4k|        &&label_unknown_op,
38478|  86.4k|        &&label_unknown_op,
38479|  86.4k|        &&label_unknown_op,
38480|  86.4k|        &&label_unknown_op,
38481|  86.4k|        &&label_unknown_op,
38482|  86.4k|        &&label_unknown_op,
38483|  86.4k|        &&label_unknown_op,
38484|  86.4k|        &&label_unknown_op,
38485|  86.4k|        &&label_unknown_op,
38486|  86.4k|        &&label_unknown_op,
38487|  86.4k|        &&label_unknown_op,
38488|  86.4k|        &&label_unknown_op,
38489|  86.4k|        &&label_unknown_op,
38490|  86.4k|        &&label_unknown_op,
38491|  86.4k|        &&label_unknown_op,
38492|  86.4k|        &&label_unknown_op,
38493|  86.4k|        &&label_unknown_op,
38494|  86.4k|        &&label_unknown_op,
38495|  86.4k|        &&label_unknown_op,
38496|  86.4k|        &&label_unknown_op,
38497|  86.4k|        &&label_unknown_op,
38498|  86.4k|        &&label_unknown_op,
38499|  86.4k|        &&label_unknown_op,
38500|  86.4k|        &&label_unknown_op,
38501|  86.4k|        &&label_unknown_op,
38502|  86.4k|        &&label_unknown_op,
38503|  86.4k|        &&label_unknown_op,
38504|  86.4k|        &&label_unknown_op,
38505|  86.4k|        &&label_unknown_op,
38506|  86.4k|        &&label_unknown_op,
38507|  86.4k|        &&label_unknown_op,
38508|  86.4k|        &&label_unknown_op,
38509|  86.4k|        &&label_unknown_op,
38510|  86.4k|        &&label_unknown_op,
38511|  86.4k|        &&label_unknown_op,
38512|  86.4k|        &&label_unknown_op,
38513|  86.4k|        &&label_unknown_op,
38514|  86.4k|        &&label_unknown_op,
38515|  86.4k|        &&label_unknown_op,
38516|  86.4k|        &&label_unknown_op,
38517|  86.4k|        &&label_unknown_op,
38518|  86.4k|        &&label_unknown_op,
38519|  86.4k|        &&label_unknown_op,
38520|  86.4k|        &&label_unknown_op,
38521|  86.4k|        &&label_unknown_op,
38522|  86.4k|        &&label_unknown_op,
38523|  86.4k|        &&label_unknown_op,
38524|  86.4k|        &&label_unknown_op,
38525|  86.4k|        &&label_unknown_op,
38526|  86.4k|        &&label_unknown_op,
38527|  86.4k|        &&label_unknown_op,
38528|  86.4k|        &&label_unknown_op,
38529|  86.4k|        &&label_unknown_op,
38530|  86.4k|        &&label_unknown_op,
38531|  86.4k|        &&label_unknown_op,
38532|  86.4k|        &&label_unknown_op,
38533|  86.4k|        &&label_unknown_op,
38534|  86.4k|        &&label_unknown_op,
38535|  86.4k|        &&label_unknown_op,
38536|  86.4k|        &&label_unknown_op,
38537|  86.4k|        &&label_unknown_op,
38538|  86.4k|        &&label_unknown_op,
38539|  86.4k|        &&label_unknown_op,
38540|  86.4k|        &&label_unknown_op,
38541|  86.4k|        &&label_unknown_op,
38542|  86.4k|        &&label_unknown_op,
38543|  86.4k|        &&label_unknown_op,
38544|  86.4k|        &&label_unknown_op,
38545|  86.4k|        &&label_unknown_op,
38546|  86.4k|        &&label_unknown_op,
38547|  86.4k|        &&label_unknown_op,
38548|  86.4k|        &&label_unknown_op,
38549|  86.4k|        &&label_unknown_op,
38550|  86.4k|        &&label_unknown_op,
38551|  86.4k|        &&label_unknown_op,
38552|  86.4k|        &&label_unknown_op,
38553|  86.4k|        &&label_unknown_op
38554|  86.4k|    };
38555|  86.4k|#endif
38556|       |
38557|       |    /* Interpreter state */
38558|  86.4k|    register Janet *stack;
38559|  86.4k|    register uint32_t *pc;
38560|  86.4k|    register JanetFunction *func;
38561|       |
38562|       |    /* NOTE: Flag smuggling! We "smuggle" the fiber sigal in the gc.flags field instead of the usual flags field */
38563|  86.4k|    if (fiber->flags & JANET_FIBER_RESUME_SIGNAL) {
  ------------------
  |  |  831|  86.4k|#define JANET_FIBER_RESUME_SIGNAL 0x400000
  ------------------
  |  Branch (38563:9): [True: 0, False: 86.4k]
  ------------------
38564|       |        /* Get the signal */
38565|      0|        JanetSignal sig = (fiber->gc.flags & JANET_FIBER_STATUS_MASK) >> JANET_FIBER_STATUS_OFFSET;
  ------------------
  |  |  830|      0|#define JANET_FIBER_STATUS_MASK 0x3F0000
  ------------------
                      JanetSignal sig = (fiber->gc.flags & JANET_FIBER_STATUS_MASK) >> JANET_FIBER_STATUS_OFFSET;
  ------------------
  |  |  832|      0|#define JANET_FIBER_STATUS_OFFSET 16
  ------------------
38566|       |        /* Clear the signal */
38567|      0|        fiber->gc.flags &= ~JANET_FIBER_STATUS_MASK;
  ------------------
  |  |  830|      0|#define JANET_FIBER_STATUS_MASK 0x3F0000
  ------------------
38568|      0|        fiber->flags &= ~JANET_FIBER_RESUME_SIGNAL;
  ------------------
  |  |  831|      0|#define JANET_FIBER_RESUME_SIGNAL 0x400000
  ------------------
38569|      0|        janet_vm.return_reg[0] = in;
38570|      0|        return sig;
38571|      0|    }
38572|       |
38573|  86.4k|    vm_restore();
  ------------------
  |  |38018|  86.4k|#define vm_restore() do { \
  |  |38019|  86.4k|    stack = fiber->data + fiber->frame; \
  |  |38020|  86.4k|    pc = janet_stack_frame(stack)->pc; \
  |  |  ------------------
  |  |  |  |  854|  86.4k|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  86.4k|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38021|  86.4k|    func = janet_stack_frame(stack)->func; \
  |  |  ------------------
  |  |  |  |  854|  86.4k|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  86.4k|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38022|  86.4k|} while (0)
  |  |  ------------------
  |  |  |  Branch (38022:10): [Folded, False: 86.4k]
  |  |  ------------------
  ------------------
38574|       |
38575|  86.4k|    if (fiber->flags & JANET_FIBER_DID_LONGJUMP) {
  ------------------
  |  |  837|  86.4k|#define JANET_FIBER_DID_LONGJUMP     0x8000000
  ------------------
  |  Branch (38575:9): [True: 0, False: 86.4k]
  ------------------
38576|      0|        if (janet_fiber_frame(fiber)->func == NULL) {
  ------------------
  |  |  855|      0|#define janet_fiber_frame(f) janet_stack_frame((f)->data + (f)->frame)
  |  |  ------------------
  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (38576:13): [True: 0, False: 0]
  ------------------
38577|       |            /* Inside a c function */
38578|      0|            janet_fiber_popframe(fiber);
38579|      0|            vm_restore();
  ------------------
  |  |38018|      0|#define vm_restore() do { \
  |  |38019|      0|    stack = fiber->data + fiber->frame; \
  |  |38020|      0|    pc = janet_stack_frame(stack)->pc; \
  |  |  ------------------
  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38021|      0|    func = janet_stack_frame(stack)->func; \
  |  |  ------------------
  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38022|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (38022:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
38580|      0|        }
38581|       |        /* Check if we were at a tail call instruction. If so, do implicit return */
38582|      0|        if ((*pc & 0xFF) == JOP_TAILCALL) {
  ------------------
  |  Branch (38582:13): [True: 0, False: 0]
  ------------------
38583|       |            /* Tail call resume */
38584|      0|            int entrance_frame = janet_stack_frame(stack)->flags & JANET_STACKFRAME_ENTRANCE;
  ------------------
  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  ------------------
  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  ------------------
  ------------------
                          int entrance_frame = janet_stack_frame(stack)->flags & JANET_STACKFRAME_ENTRANCE;
  ------------------
  |  | 1013|      0|#define JANET_STACKFRAME_ENTRANCE 2
  ------------------
38585|      0|            janet_fiber_popframe(fiber);
38586|      0|            if (entrance_frame) {
  ------------------
  |  Branch (38586:17): [True: 0, False: 0]
  ------------------
38587|      0|                fiber->flags &= ~JANET_FIBER_FLAG_MASK;
  ------------------
  |  |  838|      0|#define JANET_FIBER_FLAG_MASK        0xF000000
  ------------------
38588|      0|                vm_return(JANET_SIGNAL_OK, in);
  ------------------
  |  |38023|      0|#define vm_return(sig, val) do { \
  |  |38024|      0|    janet_vm.return_reg[0] = (val); \
  |  |38025|      0|    vm_commit(); \
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38026|      0|    return (sig); \
  |  |38027|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (38027:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
38589|      0|            }
38590|      0|            vm_restore();
  ------------------
  |  |38018|      0|#define vm_restore() do { \
  |  |38019|      0|    stack = fiber->data + fiber->frame; \
  |  |38020|      0|    pc = janet_stack_frame(stack)->pc; \
  |  |  ------------------
  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38021|      0|    func = janet_stack_frame(stack)->func; \
  |  |  ------------------
  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38022|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (38022:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
38591|      0|        }
38592|      0|    }
38593|       |
38594|  86.4k|    if (!(fiber->flags & JANET_FIBER_RESUME_NO_USEVAL)) stack[A] = in;
  ------------------
  |  |  835|  86.4k|#define JANET_FIBER_RESUME_NO_USEVAL 0x2000000
  ------------------
                  if (!(fiber->flags & JANET_FIBER_RESUME_NO_USEVAL)) stack[A] = in;
  ------------------
  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  ------------------
  |  Branch (38594:9): [True: 0, False: 86.4k]
  ------------------
38595|  86.4k|    if (!(fiber->flags & JANET_FIBER_RESUME_NO_SKIP)) pc++;
  ------------------
  |  |  836|  86.4k|#define JANET_FIBER_RESUME_NO_SKIP   0x4000000
  ------------------
  |  Branch (38595:9): [True: 0, False: 86.4k]
  ------------------
38596|       |
38597|  86.4k|    uint8_t first_opcode = *pc & ((fiber->flags & JANET_FIBER_BREAKPOINT) ? 0x7F : 0xFF);
  ------------------
  |  |  834|  86.4k|#define JANET_FIBER_BREAKPOINT       0x1000000
  ------------------
  |  Branch (38597:35): [True: 0, False: 86.4k]
  ------------------
38598|       |
38599|  86.4k|    fiber->flags &= ~JANET_FIBER_FLAG_MASK;
  ------------------
  |  |  838|  86.4k|#define JANET_FIBER_FLAG_MASK        0xF000000
  ------------------
38600|       |
38601|       |    /* Main interpreter loop. Semantically is a switch on
38602|       |     * (*pc & 0xFF) inside of an infinite loop. */
38603|  86.4k|    VM_START();
  ------------------
  |  |38002|  86.4k|#define VM_START() { goto *op_lookup[first_opcode];
  ------------------
38604|       |
38605|  86.4k|    VM_DEFAULT();
  ------------------
  |  |38005|      0|#define VM_DEFAULT() label_unknown_op:
  ------------------
38606|      0|    fiber->flags |= JANET_FIBER_BREAKPOINT | JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP;
  ------------------
  |  |  834|      0|#define JANET_FIBER_BREAKPOINT       0x1000000
  ------------------
                  fiber->flags |= JANET_FIBER_BREAKPOINT | JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP;
  ------------------
  |  |  835|      0|#define JANET_FIBER_RESUME_NO_USEVAL 0x2000000
  ------------------
                  fiber->flags |= JANET_FIBER_BREAKPOINT | JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP;
  ------------------
  |  |  836|      0|#define JANET_FIBER_RESUME_NO_SKIP   0x4000000
  ------------------
38607|      0|    vm_return(JANET_SIGNAL_DEBUG, janet_wrap_nil());
  ------------------
  |  |38023|      0|#define vm_return(sig, val) do { \
  |  |38024|      0|    janet_vm.return_reg[0] = (val); \
  |  |38025|      0|    vm_commit(); \
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38026|      0|    return (sig); \
  |  |38027|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (38027:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
38608|       |
38609|      0|    VM_OP(JOP_NOOP)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38610|      0|    vm_pcnext();
  ------------------
  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38611|       |
38612|      9|    VM_OP(JOP_ERROR)
  ------------------
  |  |38004|      9|#define VM_OP(op) label_##op :
  ------------------
38613|      9|    vm_return(JANET_SIGNAL_ERROR, stack[D]);
  ------------------
  |  |38023|      9|#define vm_return(sig, val) do { \
  |  |38024|      9|    janet_vm.return_reg[0] = (val); \
  |  |38025|      9|    vm_commit(); \
  |  |  ------------------
  |  |  |  |38017|      9|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      9|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      9|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38026|      9|    return (sig); \
  |  |38027|      9|} while (0)
  |  |  ------------------
  |  |  |  Branch (38027:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
38614|       |
38615|      0|    VM_OP(JOP_TYPECHECK)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38616|      0|    vm_assert_types(stack[A], E);
  ------------------
  |  |38049|      0|#define vm_assert_types(X, TS) do { \
  |  |38050|      0|    if (!(janet_checktypes((X), (TS)))) { \
  |  |  ------------------
  |  |  |  |  969|      0|#define janet_checktypes(x, tps) ((1 << janet_type(x)) & (tps))
  |  |  |  |  ------------------
  |  |  |  |  |  |  795|      0|    (isnan((x).number) \
  |  |  |  |  |  |  796|      0|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  |  |  |  |  797|      0|        : JANET_NUMBER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38050:9): [True: 0, False: 0]
  |  |  ------------------
  |  |38051|      0|        vm_commit(); \
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38052|      0|        janet_panicf("expected %T, got %v", (TS), (X)); \
  |  |38053|      0|    } \
  |  |38054|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (38054:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (38616:5): [True: 0, False: 0]
  ------------------
38617|      0|    vm_pcnext();
  ------------------
  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38618|       |
38619|  11.1M|    VM_OP(JOP_RETURN) {
  ------------------
  |  |38004|  11.1M|#define VM_OP(op) label_##op :
  ------------------
38620|  11.1M|        Janet retval = stack[D];
  ------------------
  |  |37986|  11.1M|#define D (*pc >> 8)
  ------------------
38621|  11.1M|        int entrance_frame = janet_stack_frame(stack)->flags & JANET_STACKFRAME_ENTRANCE;
  ------------------
  |  |  854|  11.1M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  ------------------
  |  |  |  | 1026|  11.1M|#define JANET_FRAME_SIZE 4
  |  |  ------------------
  ------------------
                      int entrance_frame = janet_stack_frame(stack)->flags & JANET_STACKFRAME_ENTRANCE;
  ------------------
  |  | 1013|  11.1M|#define JANET_STACKFRAME_ENTRANCE 2
  ------------------
38622|  11.1M|        janet_fiber_popframe(fiber);
38623|  11.1M|        if (entrance_frame) vm_return_no_restore(JANET_SIGNAL_OK, retval);
  ------------------
  |  |38028|  84.8k|#define vm_return_no_restore(sig, val) do { \
  |  |38029|  84.8k|    janet_vm.return_reg[0] = (val); \
  |  |38030|  84.8k|    return (sig); \
  |  |38031|  84.8k|} while (0)
  |  |  ------------------
  |  |  |  Branch (38031:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (38623:13): [True: 84.8k, False: 11.0M]
  ------------------
38624|  11.0M|        vm_restore();
  ------------------
  |  |38018|  11.0M|#define vm_restore() do { \
  |  |38019|  11.0M|    stack = fiber->data + fiber->frame; \
  |  |38020|  11.0M|    pc = janet_stack_frame(stack)->pc; \
  |  |  ------------------
  |  |  |  |  854|  11.0M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  11.0M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38021|  11.0M|    func = janet_stack_frame(stack)->func; \
  |  |  ------------------
  |  |  |  |  854|  11.0M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  11.0M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38022|  11.0M|} while (0)
  |  |  ------------------
  |  |  |  Branch (38022:10): [Folded, False: 11.0M]
  |  |  ------------------
  ------------------
38625|  11.0M|        stack[A] = retval;
  ------------------
  |  |37983|  11.0M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
38626|  11.0M|        vm_checkgc_pcnext();
  ------------------
  |  |38038|  11.0M|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|  11.0M|#define maybe_collect() do {\
  |  |  |  |38035|  11.0M|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 10.6M, False: 400k]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 11.0M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|  11.0M|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|  11.0M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38627|  11.0M|    }
38628|       |
38629|      6|    VM_OP(JOP_RETURN_NIL) {
  ------------------
  |  |38004|      6|#define VM_OP(op) label_##op :
  ------------------
38630|      6|        Janet retval = janet_wrap_nil();
  ------------------
  |  |  831|      6|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      6|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      6|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      6|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38631|      6|        int entrance_frame = janet_stack_frame(stack)->flags & JANET_STACKFRAME_ENTRANCE;
  ------------------
  |  |  854|      6|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  ------------------
  |  |  |  | 1026|      6|#define JANET_FRAME_SIZE 4
  |  |  ------------------
  ------------------
                      int entrance_frame = janet_stack_frame(stack)->flags & JANET_STACKFRAME_ENTRANCE;
  ------------------
  |  | 1013|      6|#define JANET_STACKFRAME_ENTRANCE 2
  ------------------
38632|      6|        janet_fiber_popframe(fiber);
38633|      6|        if (entrance_frame) vm_return_no_restore(JANET_SIGNAL_OK, retval);
  ------------------
  |  |38028|      0|#define vm_return_no_restore(sig, val) do { \
  |  |38029|      0|    janet_vm.return_reg[0] = (val); \
  |  |38030|      0|    return (sig); \
  |  |38031|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (38031:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (38633:13): [True: 0, False: 6]
  ------------------
38634|      6|        vm_restore();
  ------------------
  |  |38018|      6|#define vm_restore() do { \
  |  |38019|      6|    stack = fiber->data + fiber->frame; \
  |  |38020|      6|    pc = janet_stack_frame(stack)->pc; \
  |  |  ------------------
  |  |  |  |  854|      6|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      6|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38021|      6|    func = janet_stack_frame(stack)->func; \
  |  |  ------------------
  |  |  |  |  854|      6|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      6|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38022|      6|} while (0)
  |  |  ------------------
  |  |  |  Branch (38022:10): [Folded, False: 6]
  |  |  ------------------
  ------------------
38635|      6|        stack[A] = retval;
  ------------------
  |  |37983|      6|#define A ((*pc >> 8)  & 0xFF)
  ------------------
38636|      6|        vm_checkgc_pcnext();
  ------------------
  |  |38038|      6|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|      6|#define maybe_collect() do {\
  |  |  |  |38035|      6|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 4, False: 2]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|      6|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|      6|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38637|      6|    }
38638|       |
38639|  6.17M|    VM_OP(JOP_ADD_IMMEDIATE)
  ------------------
  |  |38004|  6.17M|#define VM_OP(op) label_##op :
  ------------------
38640|  6.17M|    vm_binop_immediate(+);
  ------------------
  |  |38068|  6.17M|    {\
  |  |38069|  6.17M|        Janet op1 = stack[B];\
  |  |  ------------------
  |  |  |  |37984|  6.17M|#define B ((*pc >> 16) & 0xFF)
  |  |  ------------------
  |  |38070|  6.17M|        if (!janet_checktype(op1, JANET_NUMBER)) {\
  |  |  ------------------
  |  |  |  |  806|  6.17M|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [True: 6.17M, Folded]
  |  |  |  |  ------------------
  |  |  |  |  807|  6.17M|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|  6.17M|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 6.17M, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|  6.17M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38070:13): [True: 0, False: 6.17M]
  |  |  ------------------
  |  |38071|      0|            vm_commit();\
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38072|      0|            Janet _argv[2] = { op1, janet_wrap_number(CS) };\
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  |  |38073|      0|            Janet a = janet_mcall(#op, 2, _argv);\
  |  |38074|      0|            stack = fiber->data + fiber->frame;\
  |  |38075|      0|            stack[A] = a;\
  |  |  ------------------
  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |38076|      0|            vm_checkgc_pcnext();\
  |  |  ------------------
  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38077|  6.17M|        } else {\
  |  |38078|  6.17M|            double x1 = janet_unwrap_number(op1);\
  |  |  ------------------
  |  |  |  |  839|  6.17M|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  |  |38079|  6.17M|            stack[A] = janet_wrap_number(x1 op CS);\
  |  |  ------------------
  |  |  |  |37983|  6.17M|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |                           stack[A] = janet_wrap_number(x1 op CS);\
  |  |  ------------------
  |  |  |  |  835|  6.17M|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  |  |38080|  6.17M|            vm_pcnext();\
  |  |  ------------------
  |  |  |  |38037|  6.17M|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|  6.17M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38081|  6.17M|        }\
  |  |38082|  6.17M|    }
  ------------------
38641|       |
38642|  6.17M|    VM_OP(JOP_ADD)
  ------------------
  |  |38004|   179k|#define VM_OP(op) label_##op :
  ------------------
38643|   179k|    vm_binop(+);
  ------------------
  |  |38120|   179k|#define vm_binop(op) _vm_binop(op, janet_wrap_number)
  |  |  ------------------
  |  |  |  |38104|   179k|    {\
  |  |  |  |38105|   179k|        Janet op1 = stack[B];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37984|   179k|#define B ((*pc >> 16) & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38106|   179k|        Janet op2 = stack[C];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37985|   179k|#define C (*pc >> 24)
  |  |  |  |  ------------------
  |  |  |  |38107|   179k|        if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|   359k|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 179k, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 179k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|   359k|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|   179k|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 179k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|   359k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                       if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|   179k|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 179k, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 179k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|   179k|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|   179k|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 179k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|   179k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38108|   179k|            double x1 = janet_unwrap_number(op1);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|   179k|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38109|   179k|            double x2 = janet_unwrap_number(op2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|   179k|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38110|   179k|            stack[A] = wrap(x1 op x2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|   179k|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |                           stack[A] = wrap(x1 op x2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |38120|   179k|#define vm_binop(op) _vm_binop(op, janet_wrap_number)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  835|   179k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38111|   179k|            vm_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|   179k|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|   179k|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38112|   179k|        } else {\
  |  |  |  |38113|      0|            vm_commit();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38114|      0|            Janet a = janet_binop_call(#op, "r" #op, op1, op2);\
  |  |  |  |38115|      0|            stack = fiber->data + fiber->frame;\
  |  |  |  |38116|      0|            stack[A] = a;\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38117|      0|            vm_checkgc_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38118|      0|        }\
  |  |  |  |38119|   179k|    }
  |  |  ------------------
  ------------------
38644|       |
38645|   179k|    VM_OP(JOP_SUBTRACT_IMMEDIATE)
  ------------------
  |  |38004|  36.6k|#define VM_OP(op) label_##op :
  ------------------
38646|  36.6k|    vm_binop_immediate(-);
  ------------------
  |  |38068|  36.6k|    {\
  |  |38069|  36.6k|        Janet op1 = stack[B];\
  |  |  ------------------
  |  |  |  |37984|  36.6k|#define B ((*pc >> 16) & 0xFF)
  |  |  ------------------
  |  |38070|  36.6k|        if (!janet_checktype(op1, JANET_NUMBER)) {\
  |  |  ------------------
  |  |  |  |  806|  36.6k|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [True: 36.6k, Folded]
  |  |  |  |  ------------------
  |  |  |  |  807|  36.6k|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|  36.6k|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 36.6k, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|  36.6k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38070:13): [True: 0, False: 36.6k]
  |  |  ------------------
  |  |38071|      0|            vm_commit();\
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38072|      0|            Janet _argv[2] = { op1, janet_wrap_number(CS) };\
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  |  |38073|      0|            Janet a = janet_mcall(#op, 2, _argv);\
  |  |38074|      0|            stack = fiber->data + fiber->frame;\
  |  |38075|      0|            stack[A] = a;\
  |  |  ------------------
  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |38076|      0|            vm_checkgc_pcnext();\
  |  |  ------------------
  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38077|  36.6k|        } else {\
  |  |38078|  36.6k|            double x1 = janet_unwrap_number(op1);\
  |  |  ------------------
  |  |  |  |  839|  36.6k|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  |  |38079|  36.6k|            stack[A] = janet_wrap_number(x1 op CS);\
  |  |  ------------------
  |  |  |  |37983|  36.6k|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |                           stack[A] = janet_wrap_number(x1 op CS);\
  |  |  ------------------
  |  |  |  |  835|  36.6k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  |  |38080|  36.6k|            vm_pcnext();\
  |  |  ------------------
  |  |  |  |38037|  36.6k|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|  36.6k|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38081|  36.6k|        }\
  |  |38082|  36.6k|    }
  ------------------
38647|       |
38648|  36.6k|    VM_OP(JOP_SUBTRACT)
  ------------------
  |  |38004|  2.60k|#define VM_OP(op) label_##op :
  ------------------
38649|  2.60k|    vm_binop(-);
  ------------------
  |  |38120|  2.60k|#define vm_binop(op) _vm_binop(op, janet_wrap_number)
  |  |  ------------------
  |  |  |  |38104|  2.60k|    {\
  |  |  |  |38105|  2.60k|        Janet op1 = stack[B];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37984|  2.60k|#define B ((*pc >> 16) & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38106|  2.60k|        Janet op2 = stack[C];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37985|  2.60k|#define C (*pc >> 24)
  |  |  |  |  ------------------
  |  |  |  |38107|  2.60k|        if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|  5.21k|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 2.60k, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 2.60k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|  5.21k|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|  2.60k|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 2.60k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|  5.21k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                       if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|  2.60k|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 2.60k, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 2.60k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|  2.60k|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|  2.60k|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 2.60k, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|  2.60k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38108|  2.60k|            double x1 = janet_unwrap_number(op1);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|  2.60k|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38109|  2.60k|            double x2 = janet_unwrap_number(op2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|  2.60k|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38110|  2.60k|            stack[A] = wrap(x1 op x2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|  2.60k|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |                           stack[A] = wrap(x1 op x2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |38120|  2.60k|#define vm_binop(op) _vm_binop(op, janet_wrap_number)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  835|  2.60k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38111|  2.60k|            vm_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|  2.60k|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|  2.60k|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38112|  2.60k|        } else {\
  |  |  |  |38113|      0|            vm_commit();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38114|      0|            Janet a = janet_binop_call(#op, "r" #op, op1, op2);\
  |  |  |  |38115|      0|            stack = fiber->data + fiber->frame;\
  |  |  |  |38116|      0|            stack[A] = a;\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38117|      0|            vm_checkgc_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38118|      0|        }\
  |  |  |  |38119|  2.60k|    }
  |  |  ------------------
  ------------------
38650|       |
38651|  2.60k|    VM_OP(JOP_MULTIPLY_IMMEDIATE)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38652|      0|    vm_binop_immediate(*);
  ------------------
  |  |38068|      0|    {\
  |  |38069|      0|        Janet op1 = stack[B];\
  |  |  ------------------
  |  |  |  |37984|      0|#define B ((*pc >> 16) & 0xFF)
  |  |  ------------------
  |  |38070|      0|        if (!janet_checktype(op1, JANET_NUMBER)) {\
  |  |  ------------------
  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38070:13): [True: 0, False: 0]
  |  |  ------------------
  |  |38071|      0|            vm_commit();\
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38072|      0|            Janet _argv[2] = { op1, janet_wrap_number(CS) };\
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  |  |38073|      0|            Janet a = janet_mcall(#op, 2, _argv);\
  |  |38074|      0|            stack = fiber->data + fiber->frame;\
  |  |38075|      0|            stack[A] = a;\
  |  |  ------------------
  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |38076|      0|            vm_checkgc_pcnext();\
  |  |  ------------------
  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38077|      0|        } else {\
  |  |38078|      0|            double x1 = janet_unwrap_number(op1);\
  |  |  ------------------
  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  |  |38079|      0|            stack[A] = janet_wrap_number(x1 op CS);\
  |  |  ------------------
  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |                           stack[A] = janet_wrap_number(x1 op CS);\
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  |  |38080|      0|            vm_pcnext();\
  |  |  ------------------
  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38081|      0|        }\
  |  |38082|      0|    }
  ------------------
38653|       |
38654|      0|    VM_OP(JOP_MULTIPLY)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38655|      0|    vm_binop(*);
  ------------------
  |  |38120|      0|#define vm_binop(op) _vm_binop(op, janet_wrap_number)
  |  |  ------------------
  |  |  |  |38104|      0|    {\
  |  |  |  |38105|      0|        Janet op1 = stack[B];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37984|      0|#define B ((*pc >> 16) & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38106|      0|        Janet op2 = stack[C];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37985|      0|#define C (*pc >> 24)
  |  |  |  |  ------------------
  |  |  |  |38107|      0|        if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                       if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38108|      0|            double x1 = janet_unwrap_number(op1);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38109|      0|            double x2 = janet_unwrap_number(op2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38110|      0|            stack[A] = wrap(x1 op x2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |                           stack[A] = wrap(x1 op x2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |38120|      0|#define vm_binop(op) _vm_binop(op, janet_wrap_number)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38111|      0|            vm_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38112|      0|        } else {\
  |  |  |  |38113|      0|            vm_commit();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38114|      0|            Janet a = janet_binop_call(#op, "r" #op, op1, op2);\
  |  |  |  |38115|      0|            stack = fiber->data + fiber->frame;\
  |  |  |  |38116|      0|            stack[A] = a;\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38117|      0|            vm_checkgc_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38118|      0|        }\
  |  |  |  |38119|      0|    }
  |  |  ------------------
  ------------------
38656|       |
38657|   567k|    VM_OP(JOP_DIVIDE_IMMEDIATE)
  ------------------
  |  |38004|   567k|#define VM_OP(op) label_##op :
  ------------------
38658|   567k|    vm_binop_immediate( /);
  ------------------
  |  |38068|   567k|    {\
  |  |38069|   567k|        Janet op1 = stack[B];\
  |  |  ------------------
  |  |  |  |37984|   567k|#define B ((*pc >> 16) & 0xFF)
  |  |  ------------------
  |  |38070|   567k|        if (!janet_checktype(op1, JANET_NUMBER)) {\
  |  |  ------------------
  |  |  |  |  806|   567k|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [True: 567k, Folded]
  |  |  |  |  ------------------
  |  |  |  |  807|   567k|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|   567k|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 567k, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|   567k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38070:13): [True: 0, False: 567k]
  |  |  ------------------
  |  |38071|      0|            vm_commit();\
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38072|      0|            Janet _argv[2] = { op1, janet_wrap_number(CS) };\
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  |  |38073|      0|            Janet a = janet_mcall(#op, 2, _argv);\
  |  |38074|      0|            stack = fiber->data + fiber->frame;\
  |  |38075|      0|            stack[A] = a;\
  |  |  ------------------
  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |38076|      0|            vm_checkgc_pcnext();\
  |  |  ------------------
  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38077|   567k|        } else {\
  |  |38078|   567k|            double x1 = janet_unwrap_number(op1);\
  |  |  ------------------
  |  |  |  |  839|   567k|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  |  |38079|   567k|            stack[A] = janet_wrap_number(x1 op CS);\
  |  |  ------------------
  |  |  |  |37983|   567k|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |                           stack[A] = janet_wrap_number(x1 op CS);\
  |  |  ------------------
  |  |  |  |  835|   567k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  |  |38080|   567k|            vm_pcnext();\
  |  |  ------------------
  |  |  |  |38037|   567k|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|   567k|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38081|   567k|        }\
  |  |38082|   567k|    }
  ------------------
38659|       |
38660|   567k|    VM_OP(JOP_DIVIDE)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38661|      0|    vm_binop( /);
  ------------------
  |  |38120|      0|#define vm_binop(op) _vm_binop(op, janet_wrap_number)
  |  |  ------------------
  |  |  |  |38104|      0|    {\
  |  |  |  |38105|      0|        Janet op1 = stack[B];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37984|      0|#define B ((*pc >> 16) & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38106|      0|        Janet op2 = stack[C];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37985|      0|#define C (*pc >> 24)
  |  |  |  |  ------------------
  |  |  |  |38107|      0|        if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                       if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38108|      0|            double x1 = janet_unwrap_number(op1);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38109|      0|            double x2 = janet_unwrap_number(op2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38110|      0|            stack[A] = wrap(x1 op x2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |                           stack[A] = wrap(x1 op x2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |38120|      0|#define vm_binop(op) _vm_binop(op, janet_wrap_number)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38111|      0|            vm_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38112|      0|        } else {\
  |  |  |  |38113|      0|            vm_commit();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38114|      0|            Janet a = janet_binop_call(#op, "r" #op, op1, op2);\
  |  |  |  |38115|      0|            stack = fiber->data + fiber->frame;\
  |  |  |  |38116|      0|            stack[A] = a;\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38117|      0|            vm_checkgc_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38118|      0|        }\
  |  |  |  |38119|      0|    }
  |  |  ------------------
  ------------------
38662|       |
38663|      1|    VM_OP(JOP_DIVIDE_FLOOR) {
  ------------------
  |  |38004|      1|#define VM_OP(op) label_##op :
  ------------------
38664|      1|        Janet op1 = stack[B];
  ------------------
  |  |37984|      1|#define B ((*pc >> 16) & 0xFF)
  ------------------
38665|      1|        Janet op2 = stack[C];
  ------------------
  |  |37985|      1|#define C (*pc >> 24)
  ------------------
38666|      1|        if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {
  ------------------
  |  |  806|      2|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 1, False: 0]
  |  |  |  Branch (806:6): [True: 1, Folded]
  |  |  ------------------
  |  |  807|      2|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      1|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 1, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      2|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {
  ------------------
  |  |  806|      1|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 1, False: 0]
  |  |  |  Branch (806:6): [True: 1, Folded]
  |  |  ------------------
  |  |  807|      1|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      1|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 1, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      1|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38667|      1|            double x1 = janet_unwrap_number(op1);
  ------------------
  |  |  839|      1|#define janet_unwrap_number(x) ((x).number)
  ------------------
38668|      1|            double x2 = janet_unwrap_number(op2);
  ------------------
  |  |  839|      1|#define janet_unwrap_number(x) ((x).number)
  ------------------
38669|      1|            stack[A] = janet_wrap_number(floor(x1 / x2));
  ------------------
  |  |37983|      1|#define A ((*pc >> 8)  & 0xFF)
  ------------------
                          stack[A] = janet_wrap_number(floor(x1 / x2));
  ------------------
  |  |  835|      1|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  ------------------
38670|      1|            vm_pcnext();
  ------------------
  |  |38037|      1|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|      1|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38671|      1|        } else {
38672|      0|            vm_commit();
  ------------------
  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  ------------------
  ------------------
38673|      0|            Janet a = janet_binop_call("div", "rdiv", op1, op2);
38674|      0|            stack = fiber->data + fiber->frame;
38675|      0|            stack[A] = a;
  ------------------
  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  ------------------
38676|      0|            vm_checkgc_pcnext();
  ------------------
  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38677|      0|        }
38678|      1|    }
38679|       |
38680|  4.75k|    VM_OP(JOP_MODULO) {
  ------------------
  |  |38004|  4.75k|#define VM_OP(op) label_##op :
  ------------------
38681|  4.75k|        Janet op1 = stack[B];
  ------------------
  |  |37984|  4.75k|#define B ((*pc >> 16) & 0xFF)
  ------------------
38682|  4.75k|        Janet op2 = stack[C];
  ------------------
  |  |37985|  4.75k|#define C (*pc >> 24)
  ------------------
38683|  4.75k|        if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {
  ------------------
  |  |  806|  9.51k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 4.75k, False: 0]
  |  |  |  Branch (806:6): [True: 4.75k, Folded]
  |  |  ------------------
  |  |  807|  9.51k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|  4.75k|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 4.75k, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  9.51k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {
  ------------------
  |  |  806|  4.75k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 4.75k, False: 0]
  |  |  |  Branch (806:6): [True: 4.75k, Folded]
  |  |  ------------------
  |  |  807|  4.75k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|  4.75k|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 4.75k, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  4.75k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38684|  4.75k|            double x1 = janet_unwrap_number(op1);
  ------------------
  |  |  839|  4.75k|#define janet_unwrap_number(x) ((x).number)
  ------------------
38685|  4.75k|            double x2 = janet_unwrap_number(op2);
  ------------------
  |  |  839|  4.75k|#define janet_unwrap_number(x) ((x).number)
  ------------------
38686|  4.75k|            if (x2 == 0) {
  ------------------
  |  Branch (38686:17): [True: 0, False: 4.75k]
  ------------------
38687|      0|                stack[A] = janet_wrap_number(x1);
  ------------------
  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  ------------------
                              stack[A] = janet_wrap_number(x1);
  ------------------
  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  ------------------
38688|  4.75k|            } else {
38689|  4.75k|                double intres = x2 * floor(x1 / x2);
38690|  4.75k|                stack[A] = janet_wrap_number(x1 - intres);
  ------------------
  |  |37983|  4.75k|#define A ((*pc >> 8)  & 0xFF)
  ------------------
                              stack[A] = janet_wrap_number(x1 - intres);
  ------------------
  |  |  835|  4.75k|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  ------------------
38691|  4.75k|            }
38692|  4.75k|            vm_pcnext();
  ------------------
  |  |38037|  4.75k|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  4.75k|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38693|  4.75k|        } else {
38694|      0|            vm_commit();
  ------------------
  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  ------------------
  ------------------
38695|      0|            Janet a = janet_binop_call("mod", "rmod", op1, op2);
38696|      0|            stack = fiber->data + fiber->frame;
38697|      0|            stack[A] = a;
  ------------------
  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  ------------------
38698|      0|            vm_checkgc_pcnext();
  ------------------
  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38699|      0|        }
38700|  4.75k|    }
38701|       |
38702|  4.75k|    VM_OP(JOP_REMAINDER) {
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38703|      0|        Janet op1 = stack[B];
  ------------------
  |  |37984|      0|#define B ((*pc >> 16) & 0xFF)
  ------------------
38704|      0|        Janet op2 = stack[C];
  ------------------
  |  |37985|      0|#define C (*pc >> 24)
  ------------------
38705|      0|        if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {
  ------------------
  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  ------------------
  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {
  ------------------
  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  ------------------
  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38706|      0|            double x1 = janet_unwrap_number(op1);
  ------------------
  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  ------------------
38707|      0|            double x2 = janet_unwrap_number(op2);
  ------------------
  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  ------------------
38708|      0|            stack[A] = janet_wrap_number(fmod(x1, x2));
  ------------------
  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  ------------------
                          stack[A] = janet_wrap_number(fmod(x1, x2));
  ------------------
  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  ------------------
38709|      0|            vm_pcnext();
  ------------------
  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38710|      0|        } else {
38711|      0|            vm_commit();
  ------------------
  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  ------------------
  ------------------
38712|      0|            Janet a = janet_binop_call("%", "r%", op1, op2);
38713|      0|            stack = fiber->data + fiber->frame;
38714|      0|            stack[A] = a;
  ------------------
  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  ------------------
38715|      0|            vm_checkgc_pcnext();
  ------------------
  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38716|      0|        }
38717|      0|    }
38718|       |
38719|      0|    VM_OP(JOP_BAND)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38720|      0|    vm_bitop(&);
  ------------------
  |  |38142|      0|#define vm_bitop(op) _vm_bitop(op, int32_t, janet_checkintrange, "32-bit signed integers")
  |  |  ------------------
  |  |  |  |38122|      0|    {\
  |  |  |  |38123|      0|        Janet op1 = stack[B];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37984|      0|#define B ((*pc >> 16) & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38124|      0|        Janet op2 = stack[C];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37985|      0|#define C (*pc >> 24)
  |  |  |  |  ------------------
  |  |  |  |38125|      0|        if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                       if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38126|      0|            double y1 = janet_unwrap_number(op1);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38127|      0|            double y2 = janet_unwrap_number(op2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38128|      0|            if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38142|      0|#define vm_bitop(op) _vm_bitop(op, int32_t, janet_checkintrange, "32-bit signed integers")
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  962|      0|#define janet_checkintrange(x) ((x) >= INT32_MIN && (x) <= INT32_MAX && (x) == (int32_t)(x))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (962:33): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (962:53): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (962:73): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                           if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38129|      0|            if (!janet_checkintrange(y2)) { vm_commit(); janet_panicf("rhs must be valid 32-bit signed integer, got %f", op2); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |  962|      0|#define janet_checkintrange(x) ((x) >= INT32_MIN && (x) <= INT32_MAX && (x) == (int32_t)(x))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (962:33): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (962:53): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (962:73): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                           if (!janet_checkintrange(y2)) { vm_commit(); janet_panicf("rhs must be valid 32-bit signed integer, got %f", op2); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38130|      0|            type1 x1 = (type1) y1;\
  |  |  |  |38131|      0|            int32_t x2 = (int32_t) y2;\
  |  |  |  |38132|      0|            stack[A] = janet_wrap_number((type1) (x1 op x2));\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |                           stack[A] = janet_wrap_number((type1) (x1 op x2));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  |  |  ------------------
  |  |  |  |38133|      0|            vm_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38134|      0|        } else {\
  |  |  |  |38135|      0|            vm_commit();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38136|      0|            Janet a = janet_binop_call(#op, "r" #op, op1, op2);\
  |  |  |  |38137|      0|            stack = fiber->data + fiber->frame;\
  |  |  |  |38138|      0|            stack[A] = a;\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38139|      0|            vm_checkgc_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38140|      0|        }\
  |  |  |  |38141|      0|    }
  |  |  ------------------
  ------------------
38721|       |
38722|      0|    VM_OP(JOP_BOR)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38723|      0|    vm_bitop( |);
  ------------------
  |  |38142|      0|#define vm_bitop(op) _vm_bitop(op, int32_t, janet_checkintrange, "32-bit signed integers")
  |  |  ------------------
  |  |  |  |38122|      0|    {\
  |  |  |  |38123|      0|        Janet op1 = stack[B];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37984|      0|#define B ((*pc >> 16) & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38124|      0|        Janet op2 = stack[C];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37985|      0|#define C (*pc >> 24)
  |  |  |  |  ------------------
  |  |  |  |38125|      0|        if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                       if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38126|      0|            double y1 = janet_unwrap_number(op1);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38127|      0|            double y2 = janet_unwrap_number(op2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38128|      0|            if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38142|      0|#define vm_bitop(op) _vm_bitop(op, int32_t, janet_checkintrange, "32-bit signed integers")
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  962|      0|#define janet_checkintrange(x) ((x) >= INT32_MIN && (x) <= INT32_MAX && (x) == (int32_t)(x))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (962:33): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (962:53): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (962:73): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                           if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38129|      0|            if (!janet_checkintrange(y2)) { vm_commit(); janet_panicf("rhs must be valid 32-bit signed integer, got %f", op2); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |  962|      0|#define janet_checkintrange(x) ((x) >= INT32_MIN && (x) <= INT32_MAX && (x) == (int32_t)(x))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (962:33): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (962:53): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (962:73): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                           if (!janet_checkintrange(y2)) { vm_commit(); janet_panicf("rhs must be valid 32-bit signed integer, got %f", op2); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38130|      0|            type1 x1 = (type1) y1;\
  |  |  |  |38131|      0|            int32_t x2 = (int32_t) y2;\
  |  |  |  |38132|      0|            stack[A] = janet_wrap_number((type1) (x1 op x2));\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |                           stack[A] = janet_wrap_number((type1) (x1 op x2));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  |  |  ------------------
  |  |  |  |38133|      0|            vm_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38134|      0|        } else {\
  |  |  |  |38135|      0|            vm_commit();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38136|      0|            Janet a = janet_binop_call(#op, "r" #op, op1, op2);\
  |  |  |  |38137|      0|            stack = fiber->data + fiber->frame;\
  |  |  |  |38138|      0|            stack[A] = a;\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38139|      0|            vm_checkgc_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38140|      0|        }\
  |  |  |  |38141|      0|    }
  |  |  ------------------
  ------------------
38724|       |
38725|      0|    VM_OP(JOP_BXOR)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38726|      0|    vm_bitop(^);
  ------------------
  |  |38142|      0|#define vm_bitop(op) _vm_bitop(op, int32_t, janet_checkintrange, "32-bit signed integers")
  |  |  ------------------
  |  |  |  |38122|      0|    {\
  |  |  |  |38123|      0|        Janet op1 = stack[B];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37984|      0|#define B ((*pc >> 16) & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38124|      0|        Janet op2 = stack[C];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37985|      0|#define C (*pc >> 24)
  |  |  |  |  ------------------
  |  |  |  |38125|      0|        if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                       if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38126|      0|            double y1 = janet_unwrap_number(op1);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38127|      0|            double y2 = janet_unwrap_number(op2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38128|      0|            if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38142|      0|#define vm_bitop(op) _vm_bitop(op, int32_t, janet_checkintrange, "32-bit signed integers")
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  962|      0|#define janet_checkintrange(x) ((x) >= INT32_MIN && (x) <= INT32_MAX && (x) == (int32_t)(x))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (962:33): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (962:53): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (962:73): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                           if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38129|      0|            if (!janet_checkintrange(y2)) { vm_commit(); janet_panicf("rhs must be valid 32-bit signed integer, got %f", op2); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |  962|      0|#define janet_checkintrange(x) ((x) >= INT32_MIN && (x) <= INT32_MAX && (x) == (int32_t)(x))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (962:33): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (962:53): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (962:73): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                           if (!janet_checkintrange(y2)) { vm_commit(); janet_panicf("rhs must be valid 32-bit signed integer, got %f", op2); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38130|      0|            type1 x1 = (type1) y1;\
  |  |  |  |38131|      0|            int32_t x2 = (int32_t) y2;\
  |  |  |  |38132|      0|            stack[A] = janet_wrap_number((type1) (x1 op x2));\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |                           stack[A] = janet_wrap_number((type1) (x1 op x2));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  |  |  ------------------
  |  |  |  |38133|      0|            vm_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38134|      0|        } else {\
  |  |  |  |38135|      0|            vm_commit();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38136|      0|            Janet a = janet_binop_call(#op, "r" #op, op1, op2);\
  |  |  |  |38137|      0|            stack = fiber->data + fiber->frame;\
  |  |  |  |38138|      0|            stack[A] = a;\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38139|      0|            vm_checkgc_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38140|      0|        }\
  |  |  |  |38141|      0|    }
  |  |  ------------------
  ------------------
38727|       |
38728|      0|    VM_OP(JOP_BNOT) {
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38729|      0|        Janet op = stack[E];
  ------------------
  |  |37987|      0|#define E (*pc >> 16)
  ------------------
38730|      0|        if (janet_checktype(op, JANET_NUMBER)) {
  ------------------
  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  ------------------
  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38731|      0|            stack[A] = janet_wrap_integer(~janet_unwrap_integer(op));
  ------------------
  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  ------------------
                          stack[A] = janet_wrap_integer(~janet_unwrap_integer(op));
  ------------------
  |  |  967|      0|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
38732|      0|            vm_pcnext();
  ------------------
  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38733|      0|        } else {
38734|      0|            vm_commit();
  ------------------
  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  ------------------
  ------------------
38735|      0|            Janet a = janet_unary_call("~", op);
38736|      0|            stack = fiber->data + fiber->frame;
38737|      0|            stack[A] = a;
  ------------------
  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  ------------------
38738|      0|            vm_checkgc_pcnext();
  ------------------
  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38739|      0|        }
38740|      0|    }
38741|       |
38742|      0|    VM_OP(JOP_SHIFT_RIGHT_UNSIGNED)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38743|      0|    vm_bitopu( >>);
  ------------------
  |  |38143|      0|#define vm_bitopu(op) _vm_bitop(op, uint32_t, janet_checkuintrange, "32-bit unsigned integers")
  |  |  ------------------
  |  |  |  |38122|      0|    {\
  |  |  |  |38123|      0|        Janet op1 = stack[B];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37984|      0|#define B ((*pc >> 16) & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38124|      0|        Janet op2 = stack[C];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37985|      0|#define C (*pc >> 24)
  |  |  |  |  ------------------
  |  |  |  |38125|      0|        if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                       if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38126|      0|            double y1 = janet_unwrap_number(op1);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38127|      0|            double y2 = janet_unwrap_number(op2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38128|      0|            if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38143|      0|#define vm_bitopu(op) _vm_bitop(op, uint32_t, janet_checkuintrange, "32-bit unsigned integers")
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  963|      0|#define janet_checkuintrange(x) ((x) >= 0 && (x) <= UINT32_MAX && (x) == (uint32_t)(x))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (963:34): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (963:46): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (963:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                           if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38129|      0|            if (!janet_checkintrange(y2)) { vm_commit(); janet_panicf("rhs must be valid 32-bit signed integer, got %f", op2); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |  962|      0|#define janet_checkintrange(x) ((x) >= INT32_MIN && (x) <= INT32_MAX && (x) == (int32_t)(x))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (962:33): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (962:53): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (962:73): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                           if (!janet_checkintrange(y2)) { vm_commit(); janet_panicf("rhs must be valid 32-bit signed integer, got %f", op2); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38130|      0|            type1 x1 = (type1) y1;\
  |  |  |  |38131|      0|            int32_t x2 = (int32_t) y2;\
  |  |  |  |38132|      0|            stack[A] = janet_wrap_number((type1) (x1 op x2));\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |                           stack[A] = janet_wrap_number((type1) (x1 op x2));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  |  |  ------------------
  |  |  |  |38133|      0|            vm_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38134|      0|        } else {\
  |  |  |  |38135|      0|            vm_commit();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38136|      0|            Janet a = janet_binop_call(#op, "r" #op, op1, op2);\
  |  |  |  |38137|      0|            stack = fiber->data + fiber->frame;\
  |  |  |  |38138|      0|            stack[A] = a;\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38139|      0|            vm_checkgc_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38140|      0|        }\
  |  |  |  |38141|      0|    }
  |  |  ------------------
  ------------------
38744|       |
38745|      0|    VM_OP(JOP_SHIFT_RIGHT_UNSIGNED_IMMEDIATE)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38746|      0|    vm_bitopu_immediate( >>);
  ------------------
  |  |38102|      0|#define vm_bitopu_immediate(op) _vm_bitop_immediate(op, uint32_t, janet_checkuintrange, "32-bit unsigned integers");
  |  |  ------------------
  |  |  |  |38084|      0|    {\
  |  |  |  |38085|      0|        Janet op1 = stack[B];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37984|      0|#define B ((*pc >> 16) & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38086|      0|        if (!janet_checktype(op1, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38086:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |38087|      0|            vm_commit();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38088|      0|            Janet _argv[2] = { op1, janet_wrap_number(CS) };\
  |  |  |  |  ------------------
  |  |  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  |  |  ------------------
  |  |  |  |38089|      0|            Janet a = janet_mcall(#op, 2, _argv);\
  |  |  |  |38090|      0|            stack = fiber->data + fiber->frame;\
  |  |  |  |38091|      0|            stack[A] = a;\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38092|      0|            vm_checkgc_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38093|      0|        } else {\
  |  |  |  |38094|      0|            double y1 = janet_unwrap_number(op1);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38095|      0|            if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38102|      0|#define vm_bitopu_immediate(op) _vm_bitop_immediate(op, uint32_t, janet_checkuintrange, "32-bit unsigned integers");
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  963|      0|#define janet_checkuintrange(x) ((x) >= 0 && (x) <= UINT32_MAX && (x) == (uint32_t)(x))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (963:34): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (963:46): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (963:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                           if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38096|      0|            type1 x1 = (type1) y1;\
  |  |  |  |38097|      0|            stack[A] = janet_wrap_number((type1) (x1 op CS));\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |                           stack[A] = janet_wrap_number((type1) (x1 op CS));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  |  |  ------------------
  |  |  |  |38098|      0|            vm_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38099|      0|        }\
  |  |  |  |38100|      0|    }
  |  |  ------------------
  ------------------
38747|       |
38748|      0|    VM_OP(JOP_SHIFT_RIGHT)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38749|      0|    vm_bitop( >>);
  ------------------
  |  |38142|      0|#define vm_bitop(op) _vm_bitop(op, int32_t, janet_checkintrange, "32-bit signed integers")
  |  |  ------------------
  |  |  |  |38122|      0|    {\
  |  |  |  |38123|      0|        Janet op1 = stack[B];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37984|      0|#define B ((*pc >> 16) & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38124|      0|        Janet op2 = stack[C];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37985|      0|#define C (*pc >> 24)
  |  |  |  |  ------------------
  |  |  |  |38125|      0|        if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                       if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38126|      0|            double y1 = janet_unwrap_number(op1);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38127|      0|            double y2 = janet_unwrap_number(op2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38128|      0|            if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38142|      0|#define vm_bitop(op) _vm_bitop(op, int32_t, janet_checkintrange, "32-bit signed integers")
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  962|      0|#define janet_checkintrange(x) ((x) >= INT32_MIN && (x) <= INT32_MAX && (x) == (int32_t)(x))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (962:33): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (962:53): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (962:73): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                           if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38129|      0|            if (!janet_checkintrange(y2)) { vm_commit(); janet_panicf("rhs must be valid 32-bit signed integer, got %f", op2); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |  962|      0|#define janet_checkintrange(x) ((x) >= INT32_MIN && (x) <= INT32_MAX && (x) == (int32_t)(x))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (962:33): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (962:53): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (962:73): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                           if (!janet_checkintrange(y2)) { vm_commit(); janet_panicf("rhs must be valid 32-bit signed integer, got %f", op2); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38130|      0|            type1 x1 = (type1) y1;\
  |  |  |  |38131|      0|            int32_t x2 = (int32_t) y2;\
  |  |  |  |38132|      0|            stack[A] = janet_wrap_number((type1) (x1 op x2));\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |                           stack[A] = janet_wrap_number((type1) (x1 op x2));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  |  |  ------------------
  |  |  |  |38133|      0|            vm_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38134|      0|        } else {\
  |  |  |  |38135|      0|            vm_commit();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38136|      0|            Janet a = janet_binop_call(#op, "r" #op, op1, op2);\
  |  |  |  |38137|      0|            stack = fiber->data + fiber->frame;\
  |  |  |  |38138|      0|            stack[A] = a;\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38139|      0|            vm_checkgc_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38140|      0|        }\
  |  |  |  |38141|      0|    }
  |  |  ------------------
  ------------------
38750|       |
38751|      0|    VM_OP(JOP_SHIFT_RIGHT_IMMEDIATE)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38752|      0|    vm_bitop_immediate( >>);
  ------------------
  |  |38101|      0|#define vm_bitop_immediate(op) _vm_bitop_immediate(op, int32_t, janet_checkintrange, "32-bit signed integers");
  |  |  ------------------
  |  |  |  |38084|      0|    {\
  |  |  |  |38085|      0|        Janet op1 = stack[B];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37984|      0|#define B ((*pc >> 16) & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38086|      0|        if (!janet_checktype(op1, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38086:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |38087|      0|            vm_commit();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38088|      0|            Janet _argv[2] = { op1, janet_wrap_number(CS) };\
  |  |  |  |  ------------------
  |  |  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  |  |  ------------------
  |  |  |  |38089|      0|            Janet a = janet_mcall(#op, 2, _argv);\
  |  |  |  |38090|      0|            stack = fiber->data + fiber->frame;\
  |  |  |  |38091|      0|            stack[A] = a;\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38092|      0|            vm_checkgc_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38093|      0|        } else {\
  |  |  |  |38094|      0|            double y1 = janet_unwrap_number(op1);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38095|      0|            if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38101|      0|#define vm_bitop_immediate(op) _vm_bitop_immediate(op, int32_t, janet_checkintrange, "32-bit signed integers");
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  962|      0|#define janet_checkintrange(x) ((x) >= INT32_MIN && (x) <= INT32_MAX && (x) == (int32_t)(x))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (962:33): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (962:53): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (962:73): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                           if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38096|      0|            type1 x1 = (type1) y1;\
  |  |  |  |38097|      0|            stack[A] = janet_wrap_number((type1) (x1 op CS));\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |                           stack[A] = janet_wrap_number((type1) (x1 op CS));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  |  |  ------------------
  |  |  |  |38098|      0|            vm_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38099|      0|        }\
  |  |  |  |38100|      0|    }
  |  |  ------------------
  ------------------
38753|       |
38754|      0|    VM_OP(JOP_SHIFT_LEFT)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38755|      0|    vm_bitop( <<);
  ------------------
  |  |38142|      0|#define vm_bitop(op) _vm_bitop(op, int32_t, janet_checkintrange, "32-bit signed integers")
  |  |  ------------------
  |  |  |  |38122|      0|    {\
  |  |  |  |38123|      0|        Janet op1 = stack[B];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37984|      0|#define B ((*pc >> 16) & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38124|      0|        Janet op2 = stack[C];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37985|      0|#define C (*pc >> 24)
  |  |  |  |  ------------------
  |  |  |  |38125|      0|        if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                       if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38126|      0|            double y1 = janet_unwrap_number(op1);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38127|      0|            double y2 = janet_unwrap_number(op2);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38128|      0|            if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38142|      0|#define vm_bitop(op) _vm_bitop(op, int32_t, janet_checkintrange, "32-bit signed integers")
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  962|      0|#define janet_checkintrange(x) ((x) >= INT32_MIN && (x) <= INT32_MAX && (x) == (int32_t)(x))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (962:33): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (962:53): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (962:73): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                           if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38129|      0|            if (!janet_checkintrange(y2)) { vm_commit(); janet_panicf("rhs must be valid 32-bit signed integer, got %f", op2); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |  962|      0|#define janet_checkintrange(x) ((x) >= INT32_MIN && (x) <= INT32_MAX && (x) == (int32_t)(x))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (962:33): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (962:53): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (962:73): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                           if (!janet_checkintrange(y2)) { vm_commit(); janet_panicf("rhs must be valid 32-bit signed integer, got %f", op2); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38130|      0|            type1 x1 = (type1) y1;\
  |  |  |  |38131|      0|            int32_t x2 = (int32_t) y2;\
  |  |  |  |38132|      0|            stack[A] = janet_wrap_number((type1) (x1 op x2));\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |                           stack[A] = janet_wrap_number((type1) (x1 op x2));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  |  |  ------------------
  |  |  |  |38133|      0|            vm_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38134|      0|        } else {\
  |  |  |  |38135|      0|            vm_commit();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38136|      0|            Janet a = janet_binop_call(#op, "r" #op, op1, op2);\
  |  |  |  |38137|      0|            stack = fiber->data + fiber->frame;\
  |  |  |  |38138|      0|            stack[A] = a;\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38139|      0|            vm_checkgc_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38140|      0|        }\
  |  |  |  |38141|      0|    }
  |  |  ------------------
  ------------------
38756|       |
38757|      0|    VM_OP(JOP_SHIFT_LEFT_IMMEDIATE)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38758|      0|    vm_bitop_immediate( <<);
  ------------------
  |  |38101|      0|#define vm_bitop_immediate(op) _vm_bitop_immediate(op, int32_t, janet_checkintrange, "32-bit signed integers");
  |  |  ------------------
  |  |  |  |38084|      0|    {\
  |  |  |  |38085|      0|        Janet op1 = stack[B];\
  |  |  |  |  ------------------
  |  |  |  |  |  |37984|      0|#define B ((*pc >> 16) & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38086|      0|        if (!janet_checktype(op1, JANET_NUMBER)) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38086:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |38087|      0|            vm_commit();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38088|      0|            Janet _argv[2] = { op1, janet_wrap_number(CS) };\
  |  |  |  |  ------------------
  |  |  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  |  |  ------------------
  |  |  |  |38089|      0|            Janet a = janet_mcall(#op, 2, _argv);\
  |  |  |  |38090|      0|            stack = fiber->data + fiber->frame;\
  |  |  |  |38091|      0|            stack[A] = a;\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |38092|      0|            vm_checkgc_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38093|      0|        } else {\
  |  |  |  |38094|      0|            double y1 = janet_unwrap_number(op1);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  |  |  ------------------
  |  |  |  |38095|      0|            if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38101|      0|#define vm_bitop_immediate(op) _vm_bitop_immediate(op, int32_t, janet_checkintrange, "32-bit signed integers");
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  962|      0|#define janet_checkintrange(x) ((x) >= INT32_MIN && (x) <= INT32_MAX && (x) == (int32_t)(x))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (962:33): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (962:53): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (962:73): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                           if (!rangecheck(y1)) { vm_commit(); janet_panicf("value %v out of range for " msg, op1); }\
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38096|      0|            type1 x1 = (type1) y1;\
  |  |  |  |38097|      0|            stack[A] = janet_wrap_number((type1) (x1 op CS));\
  |  |  |  |  ------------------
  |  |  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  |  |  ------------------
  |  |  |  |                           stack[A] = janet_wrap_number((type1) (x1 op CS));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  |  |  ------------------
  |  |  |  |38098|      0|            vm_pcnext();\
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38099|      0|        }\
  |  |  |  |38100|      0|    }
  |  |  ------------------
  ------------------
38759|       |
38760|  70.1M|    VM_OP(JOP_MOVE_NEAR)
  ------------------
  |  |38004|  70.1M|#define VM_OP(op) label_##op :
  ------------------
38761|  70.1M|    stack[A] = stack[E];
  ------------------
  |  |37983|  70.1M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
                  stack[A] = stack[E];
  ------------------
  |  |37987|  70.1M|#define E (*pc >> 16)
  ------------------
38762|  70.1M|    vm_pcnext();
  ------------------
  |  |38037|  70.1M|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  70.1M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38763|       |
38764|  70.1M|    VM_OP(JOP_MOVE_FAR)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38765|      0|    stack[E] = stack[A];
  ------------------
  |  |37987|      0|#define E (*pc >> 16)
  ------------------
                  stack[E] = stack[A];
  ------------------
  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  ------------------
38766|      0|    vm_pcnext();
  ------------------
  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38767|       |
38768|  14.1M|    VM_OP(JOP_JUMP)
  ------------------
  |  |38004|  14.1M|#define VM_OP(op) label_##op :
  ------------------
38769|  14.1M|    vm_maybe_auto_suspend(DS <= 0);
  ------------------
  |  |38058|  14.1M|#define vm_maybe_auto_suspend(COND) do { \
  |  |38059|  14.1M|    if ((COND) && janet_atomic_load_relaxed(&janet_vm.auto_suspend)) { \
  |  |  ------------------
  |  |  |  Branch (38059:9): [True: 8.60M, False: 5.52M]
  |  |  |  Branch (38059:19): [True: 0, False: 8.60M]
  |  |  ------------------
  |  |38060|      0|        fiber->flags |= (JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP); \
  |  |  ------------------
  |  |  |  |  835|      0|#define JANET_FIBER_RESUME_NO_USEVAL 0x2000000
  |  |  ------------------
  |  |                       fiber->flags |= (JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP); \
  |  |  ------------------
  |  |  |  |  836|      0|#define JANET_FIBER_RESUME_NO_SKIP   0x4000000
  |  |  ------------------
  |  |38061|      0|        vm_return(JANET_SIGNAL_INTERRUPT, janet_wrap_nil()); \
  |  |  ------------------
  |  |  |  |38023|      0|#define vm_return(sig, val) do { \
  |  |  |  |38024|      0|    janet_vm.return_reg[0] = (val); \
  |  |  |  |38025|      0|    vm_commit(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38026|      0|    return (sig); \
  |  |  |  |38027|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38027:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38062|      0|    } \
  |  |38063|  14.1M|} while (0)
  |  |  ------------------
  |  |  |  Branch (38063:10): [Folded, False: 14.1M]
  |  |  ------------------
  ------------------
38770|  14.1M|    pc += DS;
  ------------------
  |  |37991|  14.1M|#define DS (*((int32_t *)pc) >> 8)
  ------------------
38771|  14.1M|    vm_next();
  ------------------
  |  |38006|  14.1M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  ------------------
38772|       |
38773|  14.1M|    VM_OP(JOP_JUMP_IF)
  ------------------
  |  |38004|  2.60k|#define VM_OP(op) label_##op :
  ------------------
38774|  2.60k|    if (janet_truthy(stack[A])) {
  ------------------
  |  |  818|  2.60k|    (!janet_checktype((x), JANET_NIL) && \
  |  |  ------------------
  |  |  |  |  806|  5.21k|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 2.60k]
  |  |  |  |  ------------------
  |  |  |  |  807|  5.21k|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|  5.21k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|  2.60k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|  2.60k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  2.60k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  2.60k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (818:6): [True: 2.60k, False: 0]
  |  |  ------------------
  |  |  819|  2.60k|     (!janet_checktype((x), JANET_BOOLEAN) || ((x).u64 & 0x1)))
  |  |  ------------------
  |  |  |  |  806|  5.21k|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 2.60k]
  |  |  |  |  ------------------
  |  |  |  |  807|  5.21k|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|  5.21k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|  2.60k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|  2.60k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  2.60k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  2.60k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (819:7): [True: 0, False: 2.60k]
  |  |  |  Branch (819:47): [True: 0, False: 2.60k]
  |  |  ------------------
  ------------------
38775|      0|        vm_maybe_auto_suspend(ES <= 0);
  ------------------
  |  |38058|      0|#define vm_maybe_auto_suspend(COND) do { \
  |  |38059|      0|    if ((COND) && janet_atomic_load_relaxed(&janet_vm.auto_suspend)) { \
  |  |  ------------------
  |  |  |  Branch (38059:9): [True: 0, False: 0]
  |  |  |  Branch (38059:19): [True: 0, False: 0]
  |  |  ------------------
  |  |38060|      0|        fiber->flags |= (JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP); \
  |  |  ------------------
  |  |  |  |  835|      0|#define JANET_FIBER_RESUME_NO_USEVAL 0x2000000
  |  |  ------------------
  |  |                       fiber->flags |= (JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP); \
  |  |  ------------------
  |  |  |  |  836|      0|#define JANET_FIBER_RESUME_NO_SKIP   0x4000000
  |  |  ------------------
  |  |38061|      0|        vm_return(JANET_SIGNAL_INTERRUPT, janet_wrap_nil()); \
  |  |  ------------------
  |  |  |  |38023|      0|#define vm_return(sig, val) do { \
  |  |  |  |38024|      0|    janet_vm.return_reg[0] = (val); \
  |  |  |  |38025|      0|    vm_commit(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38026|      0|    return (sig); \
  |  |  |  |38027|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38027:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38062|      0|    } \
  |  |38063|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (38063:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
38776|      0|        pc += ES;
  ------------------
  |  |37992|      0|#define ES (*((int32_t *)pc) >> 16)
  ------------------
38777|  2.60k|    } else {
38778|  2.60k|        pc++;
38779|  2.60k|    }
38780|  2.60k|    vm_next();
  ------------------
  |  |38006|  2.60k|#define vm_next() goto *op_lookup[*pc & 0xFF]
  ------------------
38781|       |
38782|  55.2M|    VM_OP(JOP_JUMP_IF_NOT)
  ------------------
  |  |38004|  55.2M|#define VM_OP(op) label_##op :
  ------------------
38783|  55.2M|    if (janet_truthy(stack[A])) {
  ------------------
  |  |  818|  55.2M|    (!janet_checktype((x), JANET_NIL) && \
  |  |  ------------------
  |  |  |  |  806|   110M|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 55.2M]
  |  |  |  |  ------------------
  |  |  |  |  807|   110M|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|   110M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|  55.2M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|  55.2M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  55.2M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  55.2M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (818:6): [True: 53.0M, False: 2.15M]
  |  |  ------------------
  |  |  819|  55.2M|     (!janet_checktype((x), JANET_BOOLEAN) || ((x).u64 & 0x1)))
  |  |  ------------------
  |  |  |  |  806|   106M|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 53.0M]
  |  |  |  |  ------------------
  |  |  |  |  807|   106M|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|   106M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|  53.0M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|  53.0M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  53.0M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  53.0M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (819:7): [True: 3.54M, False: 49.5M]
  |  |  |  Branch (819:47): [True: 16.3M, False: 33.1M]
  |  |  ------------------
  ------------------
38784|  19.9M|        pc++;
38785|  35.3M|    } else {
38786|  35.3M|        vm_maybe_auto_suspend(ES <= 0);
  ------------------
  |  |38058|  35.3M|#define vm_maybe_auto_suspend(COND) do { \
  |  |38059|  35.3M|    if ((COND) && janet_atomic_load_relaxed(&janet_vm.auto_suspend)) { \
  |  |  ------------------
  |  |  |  Branch (38059:9): [True: 0, False: 35.3M]
  |  |  |  Branch (38059:19): [True: 0, False: 0]
  |  |  ------------------
  |  |38060|      0|        fiber->flags |= (JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP); \
  |  |  ------------------
  |  |  |  |  835|      0|#define JANET_FIBER_RESUME_NO_USEVAL 0x2000000
  |  |  ------------------
  |  |                       fiber->flags |= (JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP); \
  |  |  ------------------
  |  |  |  |  836|      0|#define JANET_FIBER_RESUME_NO_SKIP   0x4000000
  |  |  ------------------
  |  |38061|      0|        vm_return(JANET_SIGNAL_INTERRUPT, janet_wrap_nil()); \
  |  |  ------------------
  |  |  |  |38023|      0|#define vm_return(sig, val) do { \
  |  |  |  |38024|      0|    janet_vm.return_reg[0] = (val); \
  |  |  |  |38025|      0|    vm_commit(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38026|      0|    return (sig); \
  |  |  |  |38027|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38027:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38062|      0|    } \
  |  |38063|  35.3M|} while (0)
  |  |  ------------------
  |  |  |  Branch (38063:10): [Folded, False: 35.3M]
  |  |  ------------------
  ------------------
38787|  35.3M|        pc += ES;
  ------------------
  |  |37992|  35.3M|#define ES (*((int32_t *)pc) >> 16)
  ------------------
38788|  35.3M|    }
38789|  55.2M|    vm_next();
  ------------------
  |  |38006|  55.2M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  ------------------
38790|       |
38791|  55.2M|    VM_OP(JOP_JUMP_IF_NIL)
  ------------------
  |  |38004|  4.32M|#define VM_OP(op) label_##op :
  ------------------
38792|  4.32M|    if (janet_checktype(stack[A], JANET_NIL)) {
  ------------------
  |  |  806|  4.32M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 1.11M, False: 3.20M]
  |  |  |  Branch (806:6): [Folded, False: 4.32M]
  |  |  ------------------
  |  |  807|  4.32M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  4.32M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  4.32M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  4.32M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  4.32M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  4.32M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38793|  1.11M|        vm_maybe_auto_suspend(ES <= 0);
  ------------------
  |  |38058|  1.11M|#define vm_maybe_auto_suspend(COND) do { \
  |  |38059|  1.11M|    if ((COND) && janet_atomic_load_relaxed(&janet_vm.auto_suspend)) { \
  |  |  ------------------
  |  |  |  Branch (38059:9): [True: 0, False: 1.11M]
  |  |  |  Branch (38059:19): [True: 0, False: 0]
  |  |  ------------------
  |  |38060|      0|        fiber->flags |= (JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP); \
  |  |  ------------------
  |  |  |  |  835|      0|#define JANET_FIBER_RESUME_NO_USEVAL 0x2000000
  |  |  ------------------
  |  |                       fiber->flags |= (JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP); \
  |  |  ------------------
  |  |  |  |  836|      0|#define JANET_FIBER_RESUME_NO_SKIP   0x4000000
  |  |  ------------------
  |  |38061|      0|        vm_return(JANET_SIGNAL_INTERRUPT, janet_wrap_nil()); \
  |  |  ------------------
  |  |  |  |38023|      0|#define vm_return(sig, val) do { \
  |  |  |  |38024|      0|    janet_vm.return_reg[0] = (val); \
  |  |  |  |38025|      0|    vm_commit(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38026|      0|    return (sig); \
  |  |  |  |38027|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38027:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38062|      0|    } \
  |  |38063|  1.11M|} while (0)
  |  |  ------------------
  |  |  |  Branch (38063:10): [Folded, False: 1.11M]
  |  |  ------------------
  ------------------
38794|  1.11M|        pc += ES;
  ------------------
  |  |37992|  1.11M|#define ES (*((int32_t *)pc) >> 16)
  ------------------
38795|  3.20M|    } else {
38796|  3.20M|        pc++;
38797|  3.20M|    }
38798|  4.32M|    vm_next();
  ------------------
  |  |38006|  4.32M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  ------------------
38799|       |
38800|  4.32M|    VM_OP(JOP_JUMP_IF_NOT_NIL)
  ------------------
  |  |38004|     86|#define VM_OP(op) label_##op :
  ------------------
38801|     86|    if (janet_checktype(stack[A], JANET_NIL)) {
  ------------------
  |  |  806|     86|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 2, False: 84]
  |  |  |  Branch (806:6): [Folded, False: 86]
  |  |  ------------------
  |  |  807|     86|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|     86|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|     86|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|     86|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|     86|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|     86|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38802|      2|        pc++;
38803|     84|    } else {
38804|     84|        vm_maybe_auto_suspend(ES <= 0);
  ------------------
  |  |38058|     84|#define vm_maybe_auto_suspend(COND) do { \
  |  |38059|     84|    if ((COND) && janet_atomic_load_relaxed(&janet_vm.auto_suspend)) { \
  |  |  ------------------
  |  |  |  Branch (38059:9): [True: 0, False: 84]
  |  |  |  Branch (38059:19): [True: 0, False: 0]
  |  |  ------------------
  |  |38060|      0|        fiber->flags |= (JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP); \
  |  |  ------------------
  |  |  |  |  835|      0|#define JANET_FIBER_RESUME_NO_USEVAL 0x2000000
  |  |  ------------------
  |  |                       fiber->flags |= (JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP); \
  |  |  ------------------
  |  |  |  |  836|      0|#define JANET_FIBER_RESUME_NO_SKIP   0x4000000
  |  |  ------------------
  |  |38061|      0|        vm_return(JANET_SIGNAL_INTERRUPT, janet_wrap_nil()); \
  |  |  ------------------
  |  |  |  |38023|      0|#define vm_return(sig, val) do { \
  |  |  |  |38024|      0|    janet_vm.return_reg[0] = (val); \
  |  |  |  |38025|      0|    vm_commit(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38026|      0|    return (sig); \
  |  |  |  |38027|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38027:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38062|      0|    } \
  |  |38063|     84|} while (0)
  |  |  ------------------
  |  |  |  Branch (38063:10): [Folded, False: 84]
  |  |  ------------------
  ------------------
38805|     84|        pc += ES;
  ------------------
  |  |37992|     84|#define ES (*((int32_t *)pc) >> 16)
  ------------------
38806|     84|    }
38807|     86|    vm_next();
  ------------------
  |  |38006|     86|#define vm_next() goto *op_lookup[*pc & 0xFF]
  ------------------
38808|       |
38809|  6.82M|    VM_OP(JOP_LESS_THAN)
  ------------------
  |  |38004|  6.82M|#define VM_OP(op) label_##op :
  ------------------
38810|  6.82M|    vm_compop( <);
  ------------------
  |  |38145|  6.82M|    {\
  |  |38146|  6.82M|        Janet op1 = stack[B];\
  |  |  ------------------
  |  |  |  |37984|  6.82M|#define B ((*pc >> 16) & 0xFF)
  |  |  ------------------
  |  |38147|  6.82M|        Janet op2 = stack[C];\
  |  |  ------------------
  |  |  |  |37985|  6.82M|#define C (*pc >> 24)
  |  |  ------------------
  |  |38148|  6.82M|        if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  ------------------
  |  |  |  |  806|  13.6M|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:5): [True: 6.82M, False: 0]
  |  |  |  |  |  Branch (806:6): [True: 6.82M, Folded]
  |  |  |  |  ------------------
  |  |  |  |  807|  13.6M|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|  6.82M|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 6.82M, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|  13.6M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  ------------------
  |  |  |  |  806|  6.82M|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:5): [True: 6.82M, False: 0]
  |  |  |  |  |  Branch (806:6): [True: 6.82M, Folded]
  |  |  |  |  ------------------
  |  |  |  |  807|  6.82M|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|  6.82M|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 6.82M, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|  6.82M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38149|  6.82M|            double x1 = janet_unwrap_number(op1);\
  |  |  ------------------
  |  |  |  |  839|  6.82M|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  |  |38150|  6.82M|            double x2 = janet_unwrap_number(op2);\
  |  |  ------------------
  |  |  |  |  839|  6.82M|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  |  |38151|  6.82M|            stack[A] = janet_wrap_boolean(x1 op x2);\
  |  |  ------------------
  |  |  |  |37983|  6.82M|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |                           stack[A] = janet_wrap_boolean(x1 op x2);\
  |  |  ------------------
  |  |  |  |  834|  6.82M|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  |  |  ------------------
  |  |  |  |  |  |  822|  6.82M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  6.82M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  6.82M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38152|  6.82M|            vm_pcnext();\
  |  |  ------------------
  |  |  |  |38037|  6.82M|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|  6.82M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38153|  6.82M|        } else {\
  |  |38154|      0|            vm_commit();\
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38155|      0|            Janet a = janet_wrap_boolean(janet_compare(op1, op2) op 0);\
  |  |  ------------------
  |  |  |  |  834|      0|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  |  |  ------------------
  |  |  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38156|      0|            stack = fiber->data + fiber->frame;\
  |  |38157|      0|            stack[A] = a;\
  |  |  ------------------
  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |38158|      0|            vm_checkgc_pcnext();\
  |  |  ------------------
  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38159|      0|        }\
  |  |38160|  6.82M|    }
  ------------------
38811|       |
38812|  6.82M|    VM_OP(JOP_LESS_THAN_EQUAL)
  ------------------
  |  |38004|     20|#define VM_OP(op) label_##op :
  ------------------
38813|     20|    vm_compop( <=);
  ------------------
  |  |38145|     20|    {\
  |  |38146|     20|        Janet op1 = stack[B];\
  |  |  ------------------
  |  |  |  |37984|     20|#define B ((*pc >> 16) & 0xFF)
  |  |  ------------------
  |  |38147|     20|        Janet op2 = stack[C];\
  |  |  ------------------
  |  |  |  |37985|     20|#define C (*pc >> 24)
  |  |  ------------------
  |  |38148|     20|        if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  ------------------
  |  |  |  |  806|     40|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:5): [True: 20, False: 0]
  |  |  |  |  |  Branch (806:6): [True: 20, Folded]
  |  |  |  |  ------------------
  |  |  |  |  807|     40|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|     20|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 20, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|     40|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  ------------------
  |  |  |  |  806|     20|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:5): [True: 20, False: 0]
  |  |  |  |  |  Branch (806:6): [True: 20, Folded]
  |  |  |  |  ------------------
  |  |  |  |  807|     20|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|     20|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 20, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|     20|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38149|     20|            double x1 = janet_unwrap_number(op1);\
  |  |  ------------------
  |  |  |  |  839|     20|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  |  |38150|     20|            double x2 = janet_unwrap_number(op2);\
  |  |  ------------------
  |  |  |  |  839|     20|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  |  |38151|     20|            stack[A] = janet_wrap_boolean(x1 op x2);\
  |  |  ------------------
  |  |  |  |37983|     20|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |                           stack[A] = janet_wrap_boolean(x1 op x2);\
  |  |  ------------------
  |  |  |  |  834|     20|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  |  |  ------------------
  |  |  |  |  |  |  822|     20|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|     20|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|     20|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38152|     20|            vm_pcnext();\
  |  |  ------------------
  |  |  |  |38037|     20|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|     20|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38153|     20|        } else {\
  |  |38154|      0|            vm_commit();\
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38155|      0|            Janet a = janet_wrap_boolean(janet_compare(op1, op2) op 0);\
  |  |  ------------------
  |  |  |  |  834|      0|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  |  |  ------------------
  |  |  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38156|      0|            stack = fiber->data + fiber->frame;\
  |  |38157|      0|            stack[A] = a;\
  |  |  ------------------
  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |38158|      0|            vm_checkgc_pcnext();\
  |  |  ------------------
  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38159|      0|        }\
  |  |38160|     20|    }
  ------------------
38814|       |
38815|     20|    VM_OP(JOP_LESS_THAN_IMMEDIATE)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38816|      0|    vm_compop_imm( <);
  ------------------
  |  |38162|      0|    {\
  |  |38163|      0|        Janet op1 = stack[B];\
  |  |  ------------------
  |  |  |  |37984|      0|#define B ((*pc >> 16) & 0xFF)
  |  |  ------------------
  |  |38164|      0|        if (janet_checktype(op1, JANET_NUMBER)) {\
  |  |  ------------------
  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:5): [True: 0, False: 0]
  |  |  |  |  |  Branch (806:6): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38165|      0|            double x1 = janet_unwrap_number(op1);\
  |  |  ------------------
  |  |  |  |  839|      0|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  |  |38166|      0|            double x2 = (double) CS; \
  |  |  ------------------
  |  |  |  |37990|      0|#define CS (*((int32_t *)pc) >> 24)
  |  |  ------------------
  |  |38167|      0|            stack[A] = janet_wrap_boolean(x1 op x2);\
  |  |  ------------------
  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |                           stack[A] = janet_wrap_boolean(x1 op x2);\
  |  |  ------------------
  |  |  |  |  834|      0|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  |  |  ------------------
  |  |  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38168|      0|            vm_pcnext();\
  |  |  ------------------
  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38169|      0|        } else {\
  |  |38170|      0|            vm_commit();\
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38171|      0|            Janet a = janet_wrap_boolean(janet_compare(op1, janet_wrap_integer(CS)) op 0);\
  |  |  ------------------
  |  |  |  |  834|      0|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  |  |  ------------------
  |  |  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38172|      0|            stack = fiber->data + fiber->frame;\
  |  |38173|      0|            stack[A] = a;\
  |  |  ------------------
  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |38174|      0|            vm_checkgc_pcnext();\
  |  |  ------------------
  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38175|      0|        }\
  |  |38176|      0|    }
  ------------------
38817|       |
38818|  96.4k|    VM_OP(JOP_GREATER_THAN)
  ------------------
  |  |38004|  96.4k|#define VM_OP(op) label_##op :
  ------------------
38819|  96.4k|    vm_compop( >);
  ------------------
  |  |38145|  96.4k|    {\
  |  |38146|  96.4k|        Janet op1 = stack[B];\
  |  |  ------------------
  |  |  |  |37984|  96.4k|#define B ((*pc >> 16) & 0xFF)
  |  |  ------------------
  |  |38147|  96.4k|        Janet op2 = stack[C];\
  |  |  ------------------
  |  |  |  |37985|  96.4k|#define C (*pc >> 24)
  |  |  ------------------
  |  |38148|  96.4k|        if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  ------------------
  |  |  |  |  806|   192k|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:5): [True: 96.4k, False: 0]
  |  |  |  |  |  Branch (806:6): [True: 96.4k, Folded]
  |  |  |  |  ------------------
  |  |  |  |  807|   192k|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|  96.4k|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 96.4k, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|   192k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  ------------------
  |  |  |  |  806|  96.4k|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:5): [True: 96.4k, False: 0]
  |  |  |  |  |  Branch (806:6): [True: 96.4k, Folded]
  |  |  |  |  ------------------
  |  |  |  |  807|  96.4k|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|  96.4k|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 96.4k, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|  96.4k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38149|  96.4k|            double x1 = janet_unwrap_number(op1);\
  |  |  ------------------
  |  |  |  |  839|  96.4k|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  |  |38150|  96.4k|            double x2 = janet_unwrap_number(op2);\
  |  |  ------------------
  |  |  |  |  839|  96.4k|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  |  |38151|  96.4k|            stack[A] = janet_wrap_boolean(x1 op x2);\
  |  |  ------------------
  |  |  |  |37983|  96.4k|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |                           stack[A] = janet_wrap_boolean(x1 op x2);\
  |  |  ------------------
  |  |  |  |  834|  96.4k|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  |  |  ------------------
  |  |  |  |  |  |  822|  96.4k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|  96.4k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|  96.4k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38152|  96.4k|            vm_pcnext();\
  |  |  ------------------
  |  |  |  |38037|  96.4k|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|  96.4k|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38153|  96.4k|        } else {\
  |  |38154|      0|            vm_commit();\
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38155|      0|            Janet a = janet_wrap_boolean(janet_compare(op1, op2) op 0);\
  |  |  ------------------
  |  |  |  |  834|      0|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  |  |  ------------------
  |  |  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38156|      0|            stack = fiber->data + fiber->frame;\
  |  |38157|      0|            stack[A] = a;\
  |  |  ------------------
  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |38158|      0|            vm_checkgc_pcnext();\
  |  |  ------------------
  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38159|      0|        }\
  |  |38160|  96.4k|    }
  ------------------
38820|       |
38821|  96.4k|    VM_OP(JOP_GREATER_THAN_EQUAL)
  ------------------
  |  |38004|    304|#define VM_OP(op) label_##op :
  ------------------
38822|    304|    vm_compop( >=);
  ------------------
  |  |38145|    304|    {\
  |  |38146|    304|        Janet op1 = stack[B];\
  |  |  ------------------
  |  |  |  |37984|    304|#define B ((*pc >> 16) & 0xFF)
  |  |  ------------------
  |  |38147|    304|        Janet op2 = stack[C];\
  |  |  ------------------
  |  |  |  |37985|    304|#define C (*pc >> 24)
  |  |  ------------------
  |  |38148|    304|        if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  ------------------
  |  |  |  |  806|    608|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:5): [True: 304, False: 0]
  |  |  |  |  |  Branch (806:6): [True: 304, Folded]
  |  |  |  |  ------------------
  |  |  |  |  807|    608|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|    304|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 304, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|    608|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (janet_checktype(op1, JANET_NUMBER) && janet_checktype(op2, JANET_NUMBER)) {\
  |  |  ------------------
  |  |  |  |  806|    304|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:5): [True: 304, False: 0]
  |  |  |  |  |  Branch (806:6): [True: 304, Folded]
  |  |  |  |  ------------------
  |  |  |  |  807|    304|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|    304|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 304, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|    304|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38149|    304|            double x1 = janet_unwrap_number(op1);\
  |  |  ------------------
  |  |  |  |  839|    304|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  |  |38150|    304|            double x2 = janet_unwrap_number(op2);\
  |  |  ------------------
  |  |  |  |  839|    304|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  |  |38151|    304|            stack[A] = janet_wrap_boolean(x1 op x2);\
  |  |  ------------------
  |  |  |  |37983|    304|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |                           stack[A] = janet_wrap_boolean(x1 op x2);\
  |  |  ------------------
  |  |  |  |  834|    304|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  |  |  ------------------
  |  |  |  |  |  |  822|    304|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|    304|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|    304|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38152|    304|            vm_pcnext();\
  |  |  ------------------
  |  |  |  |38037|    304|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|    304|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38153|    304|        } else {\
  |  |38154|      0|            vm_commit();\
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38155|      0|            Janet a = janet_wrap_boolean(janet_compare(op1, op2) op 0);\
  |  |  ------------------
  |  |  |  |  834|      0|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  |  |  ------------------
  |  |  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38156|      0|            stack = fiber->data + fiber->frame;\
  |  |38157|      0|            stack[A] = a;\
  |  |  ------------------
  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |38158|      0|            vm_checkgc_pcnext();\
  |  |  ------------------
  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38159|      0|        }\
  |  |38160|    304|    }
  ------------------
38823|       |
38824|    690|    VM_OP(JOP_GREATER_THAN_IMMEDIATE)
  ------------------
  |  |38004|    690|#define VM_OP(op) label_##op :
  ------------------
38825|    690|    vm_compop_imm( >);
  ------------------
  |  |38162|    690|    {\
  |  |38163|    690|        Janet op1 = stack[B];\
  |  |  ------------------
  |  |  |  |37984|    690|#define B ((*pc >> 16) & 0xFF)
  |  |  ------------------
  |  |38164|    690|        if (janet_checktype(op1, JANET_NUMBER)) {\
  |  |  ------------------
  |  |  |  |  806|    690|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:5): [True: 690, False: 0]
  |  |  |  |  |  Branch (806:6): [True: 690, Folded]
  |  |  |  |  ------------------
  |  |  |  |  807|    690|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|    690|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 690, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|    690|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38165|    690|            double x1 = janet_unwrap_number(op1);\
  |  |  ------------------
  |  |  |  |  839|    690|#define janet_unwrap_number(x) ((x).number)
  |  |  ------------------
  |  |38166|    690|            double x2 = (double) CS; \
  |  |  ------------------
  |  |  |  |37990|    690|#define CS (*((int32_t *)pc) >> 24)
  |  |  ------------------
  |  |38167|    690|            stack[A] = janet_wrap_boolean(x1 op x2);\
  |  |  ------------------
  |  |  |  |37983|    690|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |                           stack[A] = janet_wrap_boolean(x1 op x2);\
  |  |  ------------------
  |  |  |  |  834|    690|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  |  |  ------------------
  |  |  |  |  |  |  822|    690|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|    690|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|    690|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38168|    690|            vm_pcnext();\
  |  |  ------------------
  |  |  |  |38037|    690|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|    690|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38169|    690|        } else {\
  |  |38170|      0|            vm_commit();\
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38171|      0|            Janet a = janet_wrap_boolean(janet_compare(op1, janet_wrap_integer(CS)) op 0);\
  |  |  ------------------
  |  |  |  |  834|      0|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  |  |  ------------------
  |  |  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38172|      0|            stack = fiber->data + fiber->frame;\
  |  |38173|      0|            stack[A] = a;\
  |  |  ------------------
  |  |  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  |  |  ------------------
  |  |38174|      0|            vm_checkgc_pcnext();\
  |  |  ------------------
  |  |  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  |  |  ------------------
  |  |  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38175|      0|        }\
  |  |38176|    690|    }
  ------------------
38826|       |
38827|  29.1M|    VM_OP(JOP_EQUALS)
  ------------------
  |  |38004|  29.1M|#define VM_OP(op) label_##op :
  ------------------
38828|  29.1M|    stack[A] = janet_wrap_boolean(janet_equals(stack[B], stack[C]));
  ------------------
  |  |37983|  29.1M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
                  stack[A] = janet_wrap_boolean(janet_equals(stack[B], stack[C]));
  ------------------
  |  |  834|  29.1M|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  ------------------
  |  |  |  |  822|  29.1M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  29.1M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  29.1M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38829|  29.1M|    vm_pcnext();
  ------------------
  |  |38037|  29.1M|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  29.1M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38830|       |
38831|  29.1M|    VM_OP(JOP_EQUALS_IMMEDIATE)
  ------------------
  |  |38004|  1.11M|#define VM_OP(op) label_##op :
  ------------------
38832|  1.11M|    stack[A] = janet_wrap_boolean(janet_checktype(stack[B], JANET_NUMBER) && (janet_unwrap_number(stack[B]) == (double) CS));
  ------------------
  |  |37983|  1.11M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
                  stack[A] = janet_wrap_boolean(janet_checktype(stack[B], JANET_NUMBER) && (janet_unwrap_number(stack[B]) == (double) CS));
  ------------------
  |  |  834|  1.11M|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  ------------------
  |  |  |  |  822|  5.57M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.11M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.11M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (822:51): [True: 1.11M, False: 0]
  |  |  |  |  |  Branch (822:51): [True: 0, False: 0]
  |  |  |  |  |  Branch (822:51): [True: 1.11M, Folded]
  |  |  |  |  |  Branch (822:51): [True: 1.11M, False: 0]
  |  |  |  |  |  Branch (822:51): [True: 1.11M, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38833|  1.11M|    vm_pcnext();
  ------------------
  |  |38037|  1.11M|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  1.11M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38834|       |
38835|  7.83M|    VM_OP(JOP_NOT_EQUALS)
  ------------------
  |  |38004|  7.83M|#define VM_OP(op) label_##op :
  ------------------
38836|  7.83M|    stack[A] = janet_wrap_boolean(!janet_equals(stack[B], stack[C]));
  ------------------
  |  |37983|  7.83M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
                  stack[A] = janet_wrap_boolean(!janet_equals(stack[B], stack[C]));
  ------------------
  |  |  834|  7.83M|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  ------------------
  |  |  |  |  822|  7.83M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  7.83M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  7.83M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38837|  7.83M|    vm_pcnext();
  ------------------
  |  |38037|  7.83M|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  7.83M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38838|       |
38839|  7.83M|    VM_OP(JOP_NOT_EQUALS_IMMEDIATE)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
38840|      0|    stack[A] = janet_wrap_boolean(!janet_checktype(stack[B], JANET_NUMBER) || (janet_unwrap_number(stack[B]) != (double) CS));
  ------------------
  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  ------------------
                  stack[A] = janet_wrap_boolean(!janet_checktype(stack[B], JANET_NUMBER) || (janet_unwrap_number(stack[B]) != (double) CS));
  ------------------
  |  |  834|      0|#define janet_wrap_boolean(b) janet_nanbox_from_payload(JANET_BOOLEAN, !!(b))
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (822:51): [True: 0, False: 0]
  |  |  |  |  |  Branch (822:51): [True: 0, False: 0]
  |  |  |  |  |  Branch (822:51): [True: 0, Folded]
  |  |  |  |  |  Branch (822:51): [True: 0, False: 0]
  |  |  |  |  |  Branch (822:51): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38841|      0|    vm_pcnext();
  ------------------
  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38842|       |
38843|      7|    VM_OP(JOP_COMPARE) {
  ------------------
  |  |38004|      7|#define VM_OP(op) label_##op :
  ------------------
38844|      7|        Janet a = janet_wrap_integer(janet_compare(stack[B], stack[C]));
  ------------------
  |  |  967|      7|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|      7|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
38845|      7|        stack = fiber->data + fiber->frame;
38846|      7|        stack[A] = a;
  ------------------
  |  |37983|      7|#define A ((*pc >> 8)  & 0xFF)
  ------------------
38847|      7|    }
38848|      7|    vm_pcnext();
  ------------------
  |  |38037|      7|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|      7|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38849|       |
38850|  5.24M|    VM_OP(JOP_NEXT)
  ------------------
  |  |38004|  5.24M|#define VM_OP(op) label_##op :
  ------------------
38851|  5.24M|    vm_commit();
  ------------------
  |  |38017|  5.24M|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|  5.24M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  5.24M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 5.24M]
  |  |  ------------------
  ------------------
38852|  5.24M|    {
38853|  5.24M|        Janet temp = janet_next_impl(stack[B], stack[C], 1);
  ------------------
  |  |37984|  5.24M|#define B ((*pc >> 16) & 0xFF)
  ------------------
                      Janet temp = janet_next_impl(stack[B], stack[C], 1);
  ------------------
  |  |37985|  5.24M|#define C (*pc >> 24)
  ------------------
38854|  5.24M|        vm_restore();
  ------------------
  |  |38018|  5.24M|#define vm_restore() do { \
  |  |38019|  5.24M|    stack = fiber->data + fiber->frame; \
  |  |38020|  5.24M|    pc = janet_stack_frame(stack)->pc; \
  |  |  ------------------
  |  |  |  |  854|  5.24M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  5.24M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38021|  5.24M|    func = janet_stack_frame(stack)->func; \
  |  |  ------------------
  |  |  |  |  854|  5.24M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  5.24M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38022|  5.24M|} while (0)
  |  |  ------------------
  |  |  |  Branch (38022:10): [Folded, False: 5.24M]
  |  |  ------------------
  ------------------
38855|  5.24M|        stack[A] = temp;
  ------------------
  |  |37983|  5.24M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
38856|  5.24M|    }
38857|  5.24M|    vm_pcnext();
  ------------------
  |  |38037|  5.24M|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  5.24M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38858|       |
38859|  5.24M|    VM_OP(JOP_LOAD_NIL)
  ------------------
  |  |38004|  2.03M|#define VM_OP(op) label_##op :
  ------------------
38860|  2.03M|    stack[D] = janet_wrap_nil();
  ------------------
  |  |37986|  2.03M|#define D (*pc >> 8)
  ------------------
                  stack[D] = janet_wrap_nil();
  ------------------
  |  |  831|  2.03M|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  2.03M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  2.03M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  2.03M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38861|  2.03M|    vm_pcnext();
  ------------------
  |  |38037|  2.03M|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  2.03M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38862|       |
38863|  2.03M|    VM_OP(JOP_LOAD_TRUE)
  ------------------
  |  |38004|  54.7k|#define VM_OP(op) label_##op :
  ------------------
38864|  54.7k|    stack[D] = janet_wrap_true();
  ------------------
  |  |37986|  54.7k|#define D (*pc >> 8)
  ------------------
                  stack[D] = janet_wrap_true();
  ------------------
  |  |  832|  54.7k|#define janet_wrap_true() janet_nanbox_from_payload(JANET_BOOLEAN, 1)
  |  |  ------------------
  |  |  |  |  822|  54.7k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  54.7k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  54.7k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38865|  54.7k|    vm_pcnext();
  ------------------
  |  |38037|  54.7k|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  54.7k|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38866|       |
38867|  1.80M|    VM_OP(JOP_LOAD_FALSE)
  ------------------
  |  |38004|  1.80M|#define VM_OP(op) label_##op :
  ------------------
38868|  1.80M|    stack[D] = janet_wrap_false();
  ------------------
  |  |37986|  1.80M|#define D (*pc >> 8)
  ------------------
                  stack[D] = janet_wrap_false();
  ------------------
  |  |  833|  1.80M|#define janet_wrap_false() janet_nanbox_from_payload(JANET_BOOLEAN, 0)
  |  |  ------------------
  |  |  |  |  822|  1.80M|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.80M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.80M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38869|  1.80M|    vm_pcnext();
  ------------------
  |  |38037|  1.80M|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  1.80M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38870|       |
38871|  4.81M|    VM_OP(JOP_LOAD_INTEGER)
  ------------------
  |  |38004|  4.81M|#define VM_OP(op) label_##op :
  ------------------
38872|  4.81M|    stack[A] = janet_wrap_integer(ES);
  ------------------
  |  |37983|  4.81M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
                  stack[A] = janet_wrap_integer(ES);
  ------------------
  |  |  967|  4.81M|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|  4.81M|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
38873|  4.81M|    vm_pcnext();
  ------------------
  |  |38037|  4.81M|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  4.81M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38874|       |
38875|  95.4M|    VM_OP(JOP_LOAD_CONSTANT) {
  ------------------
  |  |38004|  95.4M|#define VM_OP(op) label_##op :
  ------------------
38876|  95.4M|        int32_t cindex = (int32_t)E;
  ------------------
  |  |37987|  95.4M|#define E (*pc >> 16)
  ------------------
38877|  95.4M|        vm_assert(cindex < func->def->constants_length, "invalid constant");
  ------------------
  |  |38042|  95.4M|#define vm_assert(cond, e) do {if (!(cond)) vm_throw((e)); } while (0)
  |  |  ------------------
  |  |  |  |38041|      0|#define vm_throw(e) do { vm_commit(); janet_panic(e); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38041:64): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38042:36): [True: 0, False: 95.4M]
  |  |  |  Branch (38042:69): [Folded, False: 95.4M]
  |  |  ------------------
  ------------------
38878|  95.4M|        stack[A] = func->def->constants[cindex];
  ------------------
  |  |37983|  95.4M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
38879|  95.4M|        vm_pcnext();
  ------------------
  |  |38037|  95.4M|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  95.4M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38880|  95.4M|    }
38881|       |
38882|  7.65M|    VM_OP(JOP_LOAD_SELF)
  ------------------
  |  |38004|  7.65M|#define VM_OP(op) label_##op :
  ------------------
38883|  7.65M|    stack[D] = janet_wrap_function(func);
  ------------------
  |  |37986|  7.65M|#define D (*pc >> 8)
  ------------------
                  stack[D] = janet_wrap_function(func);
  ------------------
  |  |  852|  7.65M|#define janet_wrap_function(s) janet_nanbox_wrap_((s), JANET_FUNCTION)
  |  |  ------------------
  |  |  |  |  825|  7.65M|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  7.65M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  7.65M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38884|  7.65M|    vm_pcnext();
  ------------------
  |  |38037|  7.65M|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  7.65M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38885|       |
38886|  7.65M|    VM_OP(JOP_LOAD_UPVALUE) {
  ------------------
  |  |38004|  6.27M|#define VM_OP(op) label_##op :
  ------------------
38887|  6.27M|        int32_t eindex = B;
  ------------------
  |  |37984|  6.27M|#define B ((*pc >> 16) & 0xFF)
  ------------------
38888|  6.27M|        int32_t vindex = C;
  ------------------
  |  |37985|  6.27M|#define C (*pc >> 24)
  ------------------
38889|  6.27M|        JanetFuncEnv *env;
38890|  6.27M|        vm_assert(func->def->environments_length > eindex, "invalid upvalue environment");
  ------------------
  |  |38042|  6.27M|#define vm_assert(cond, e) do {if (!(cond)) vm_throw((e)); } while (0)
  |  |  ------------------
  |  |  |  |38041|      0|#define vm_throw(e) do { vm_commit(); janet_panic(e); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38041:64): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38042:36): [True: 0, False: 6.27M]
  |  |  |  Branch (38042:69): [Folded, False: 6.27M]
  |  |  ------------------
  ------------------
38891|  6.27M|        env = func->envs[eindex];
38892|  6.27M|        vm_assert(env->length > vindex, "invalid upvalue index");
  ------------------
  |  |38042|  6.27M|#define vm_assert(cond, e) do {if (!(cond)) vm_throw((e)); } while (0)
  |  |  ------------------
  |  |  |  |38041|      0|#define vm_throw(e) do { vm_commit(); janet_panic(e); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38041:64): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38042:36): [True: 0, False: 6.27M]
  |  |  |  Branch (38042:69): [Folded, False: 6.27M]
  |  |  ------------------
  ------------------
38893|  6.27M|        vm_assert(janet_env_valid(env), "invalid upvalue environment");
  ------------------
  |  |38042|  6.27M|#define vm_assert(cond, e) do {if (!(cond)) vm_throw((e)); } while (0)
  |  |  ------------------
  |  |  |  |38041|      0|#define vm_throw(e) do { vm_commit(); janet_panic(e); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38041:64): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38042:36): [True: 0, False: 6.27M]
  |  |  |  Branch (38042:69): [Folded, False: 6.27M]
  |  |  ------------------
  ------------------
38894|  6.27M|        if (env->offset > 0) {
  ------------------
  |  Branch (38894:13): [True: 6.27M, False: 912]
  ------------------
38895|       |            /* On stack */
38896|  6.27M|            stack[A] = env->as.fiber->data[env->offset + vindex];
  ------------------
  |  |37983|  6.27M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
38897|  6.27M|        } else {
38898|       |            /* Off stack */
38899|    912|            stack[A] = env->as.values[vindex];
  ------------------
  |  |37983|    912|#define A ((*pc >> 8)  & 0xFF)
  ------------------
38900|    912|        }
38901|  6.27M|        vm_pcnext();
  ------------------
  |  |38037|  6.27M|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  6.27M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38902|  6.27M|    }
38903|       |
38904|    559|    VM_OP(JOP_SET_UPVALUE) {
  ------------------
  |  |38004|    559|#define VM_OP(op) label_##op :
  ------------------
38905|    559|        int32_t eindex = B;
  ------------------
  |  |37984|    559|#define B ((*pc >> 16) & 0xFF)
  ------------------
38906|    559|        int32_t vindex = C;
  ------------------
  |  |37985|    559|#define C (*pc >> 24)
  ------------------
38907|    559|        JanetFuncEnv *env;
38908|    559|        vm_assert(func->def->environments_length > eindex, "invalid upvalue environment");
  ------------------
  |  |38042|    559|#define vm_assert(cond, e) do {if (!(cond)) vm_throw((e)); } while (0)
  |  |  ------------------
  |  |  |  |38041|      0|#define vm_throw(e) do { vm_commit(); janet_panic(e); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38041:64): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38042:36): [True: 0, False: 559]
  |  |  |  Branch (38042:69): [Folded, False: 559]
  |  |  ------------------
  ------------------
38909|    559|        env = func->envs[eindex];
38910|    559|        vm_assert(env->length > vindex, "invalid upvalue index");
  ------------------
  |  |38042|    559|#define vm_assert(cond, e) do {if (!(cond)) vm_throw((e)); } while (0)
  |  |  ------------------
  |  |  |  |38041|      0|#define vm_throw(e) do { vm_commit(); janet_panic(e); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38041:64): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38042:36): [True: 0, False: 559]
  |  |  |  Branch (38042:69): [Folded, False: 559]
  |  |  ------------------
  ------------------
38911|    559|        vm_assert(janet_env_valid(env), "invalid upvalue environment");
  ------------------
  |  |38042|    559|#define vm_assert(cond, e) do {if (!(cond)) vm_throw((e)); } while (0)
  |  |  ------------------
  |  |  |  |38041|      0|#define vm_throw(e) do { vm_commit(); janet_panic(e); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38041:64): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38042:36): [True: 0, False: 559]
  |  |  |  Branch (38042:69): [Folded, False: 559]
  |  |  ------------------
  ------------------
38912|    559|        if (env->offset > 0) {
  ------------------
  |  Branch (38912:13): [True: 559, False: 0]
  ------------------
38913|    559|            env->as.fiber->data[env->offset + vindex] = stack[A];
  ------------------
  |  |37983|    559|#define A ((*pc >> 8)  & 0xFF)
  ------------------
38914|    559|        } else {
38915|      0|            env->as.values[vindex] = stack[A];
  ------------------
  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  ------------------
38916|      0|        }
38917|    559|        vm_pcnext();
  ------------------
  |  |38037|    559|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|    559|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
38918|    559|    }
38919|       |
38920|  14.7M|    VM_OP(JOP_CLOSURE) {
  ------------------
  |  |38004|  14.7M|#define VM_OP(op) label_##op :
  ------------------
38921|  14.7M|        JanetFuncDef *fd;
38922|  14.7M|        JanetFunction *fn;
38923|  14.7M|        int32_t elen;
38924|  14.7M|        int32_t defindex = (int32_t)E;
  ------------------
  |  |37987|  14.7M|#define E (*pc >> 16)
  ------------------
38925|  14.7M|        vm_assert(defindex < func->def->defs_length, "invalid funcdef");
  ------------------
  |  |38042|  14.7M|#define vm_assert(cond, e) do {if (!(cond)) vm_throw((e)); } while (0)
  |  |  ------------------
  |  |  |  |38041|      0|#define vm_throw(e) do { vm_commit(); janet_panic(e); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38041:64): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38042:36): [True: 0, False: 14.7M]
  |  |  |  Branch (38042:69): [Folded, False: 14.7M]
  |  |  ------------------
  ------------------
38926|  14.7M|        fd = func->def->defs[defindex];
38927|  14.7M|        elen = fd->environments_length;
38928|  14.7M|        fn = janet_gcalloc(JANET_MEMORY_FUNCTION, sizeof(JanetFunction) + ((size_t) elen * sizeof(JanetFuncEnv *)));
38929|  14.7M|        fn->def = fd;
38930|  14.7M|        {
38931|  14.7M|            int32_t i;
38932|  29.5M|            for (i = 0; i < elen; ++i) {
  ------------------
  |  Branch (38932:25): [True: 14.7M, False: 14.7M]
  ------------------
38933|  14.7M|                int32_t inherit = fd->environments[i];
38934|  14.7M|                if (inherit == -1 || inherit >= func->def->environments_length) {
  ------------------
  |  Branch (38934:21): [True: 14.7M, False: 14.1k]
  |  Branch (38934:38): [True: 0, False: 14.1k]
  ------------------
38935|  14.7M|                    JanetStackFrame *frame = janet_stack_frame(stack);
  ------------------
  |  |  854|  14.7M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  ------------------
  |  |  |  | 1026|  14.7M|#define JANET_FRAME_SIZE 4
  |  |  ------------------
  ------------------
38936|  14.7M|                    if (!frame->env) {
  ------------------
  |  Branch (38936:25): [True: 2.17M, False: 12.5M]
  ------------------
38937|       |                        /* Lazy capture of current stack frame */
38938|  2.17M|                        JanetFuncEnv *env = janet_gcalloc(JANET_MEMORY_FUNCENV, sizeof(JanetFuncEnv));
38939|  2.17M|                        env->offset = fiber->frame;
38940|  2.17M|                        env->as.fiber = fiber;
38941|  2.17M|                        env->length = func->def->slotcount;
38942|  2.17M|                        frame->env = env;
38943|  2.17M|                    }
38944|  14.7M|                    fn->envs[i] = frame->env;
38945|  14.7M|                } else {
38946|  14.1k|                    fn->envs[i] = func->envs[inherit];
38947|  14.1k|                }
38948|  14.7M|            }
38949|  14.7M|        }
38950|  14.7M|        stack[A] = janet_wrap_function(fn);
  ------------------
  |  |37983|  14.7M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
                      stack[A] = janet_wrap_function(fn);
  ------------------
  |  |  852|  14.7M|#define janet_wrap_function(s) janet_nanbox_wrap_((s), JANET_FUNCTION)
  |  |  ------------------
  |  |  |  |  825|  14.7M|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  14.7M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  14.7M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38951|  14.7M|        vm_checkgc_pcnext();
  ------------------
  |  |38038|  14.7M|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|  14.7M|#define maybe_collect() do {\
  |  |  |  |38035|  14.7M|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 14.2M, False: 482k]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 14.7M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|  14.7M|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|  14.7M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38952|  14.7M|    }
38953|       |
38954|  36.4M|    VM_OP(JOP_PUSH)
  ------------------
  |  |38004|  36.4M|#define VM_OP(op) label_##op :
  ------------------
38955|  36.4M|    janet_fiber_push(fiber, stack[D]);
  ------------------
  |  |37986|  36.4M|#define D (*pc >> 8)
  ------------------
38956|  36.4M|    stack = fiber->data + fiber->frame;
38957|  36.4M|    vm_checkgc_pcnext();
  ------------------
  |  |38038|  36.4M|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|  36.4M|#define maybe_collect() do {\
  |  |  |  |38035|  36.4M|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 34.3M, False: 2.09M]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 36.4M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|  36.4M|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|  36.4M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38958|       |
38959|  36.4M|    VM_OP(JOP_PUSH_2)
  ------------------
  |  |38004|  17.2M|#define VM_OP(op) label_##op :
  ------------------
38960|  17.2M|    janet_fiber_push2(fiber, stack[A], stack[E]);
  ------------------
  |  |37983|  17.2M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
                  janet_fiber_push2(fiber, stack[A], stack[E]);
  ------------------
  |  |37987|  17.2M|#define E (*pc >> 16)
  ------------------
38961|  17.2M|    stack = fiber->data + fiber->frame;
38962|  17.2M|    vm_checkgc_pcnext();
  ------------------
  |  |38038|  17.2M|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|  17.2M|#define maybe_collect() do {\
  |  |  |  |38035|  17.2M|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 15.8M, False: 1.40M]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 17.2M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|  17.2M|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|  17.2M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38963|       |
38964|  17.2M|    VM_OP(JOP_PUSH_3)
  ------------------
  |  |38004|  14.2M|#define VM_OP(op) label_##op :
  ------------------
38965|  14.2M|    janet_fiber_push3(fiber, stack[A], stack[B], stack[C]);
  ------------------
  |  |37983|  14.2M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
                  janet_fiber_push3(fiber, stack[A], stack[B], stack[C]);
  ------------------
  |  |37984|  14.2M|#define B ((*pc >> 16) & 0xFF)
  ------------------
                  janet_fiber_push3(fiber, stack[A], stack[B], stack[C]);
  ------------------
  |  |37985|  14.2M|#define C (*pc >> 24)
  ------------------
38966|  14.2M|    stack = fiber->data + fiber->frame;
38967|  14.2M|    vm_checkgc_pcnext();
  ------------------
  |  |38038|  14.2M|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|  14.2M|#define maybe_collect() do {\
  |  |  |  |38035|  14.2M|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 13.1M, False: 1.02M]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 14.2M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|  14.2M|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|  14.2M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38968|       |
38969|  14.2M|    VM_OP(JOP_PUSH_ARRAY) {
  ------------------
  |  |38004|  2.56M|#define VM_OP(op) label_##op :
  ------------------
38970|  2.56M|        const Janet *vals;
38971|  2.56M|        int32_t len;
38972|  2.56M|        if (janet_indexed_view(stack[D], &vals, &len)) {
  ------------------
  |  |37986|  2.56M|#define D (*pc >> 8)
  ------------------
  |  Branch (38972:13): [True: 2.56M, False: 0]
  ------------------
38973|  2.56M|            janet_fiber_pushn(fiber, vals, len);
38974|  2.56M|        } else {
38975|      0|            janet_panicf("expected %T, got %v", JANET_TFLAG_INDEXED, stack[D]);
  ------------------
  |  |  613|      0|#define JANET_TFLAG_INDEXED (JANET_TFLAG_ARRAY | JANET_TFLAG_TUPLE)
  |  |  ------------------
  |  |  |  |  602|      0|#define JANET_TFLAG_ARRAY (1 << JANET_ARRAY)
  |  |  ------------------
  |  |               #define JANET_TFLAG_INDEXED (JANET_TFLAG_ARRAY | JANET_TFLAG_TUPLE)
  |  |  ------------------
  |  |  |  |  603|      0|#define JANET_TFLAG_TUPLE (1 << JANET_TUPLE)
  |  |  ------------------
  ------------------
                          janet_panicf("expected %T, got %v", JANET_TFLAG_INDEXED, stack[D]);
  ------------------
  |  |37986|      0|#define D (*pc >> 8)
  ------------------
38976|      0|        }
38977|  2.56M|    }
38978|  2.56M|    stack = fiber->data + fiber->frame;
38979|  2.56M|    vm_checkgc_pcnext();
  ------------------
  |  |38038|  2.56M|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|  2.56M|#define maybe_collect() do {\
  |  |  |  |38035|  2.56M|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 2.43M, False: 124k]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 2.56M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|  2.56M|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|  2.56M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38980|       |
38981|  46.7M|    VM_OP(JOP_CALL) {
  ------------------
  |  |38004|  46.7M|#define VM_OP(op) label_##op :
  ------------------
38982|  46.7M|        vm_maybe_auto_suspend(1);
  ------------------
  |  |38058|  46.7M|#define vm_maybe_auto_suspend(COND) do { \
  |  |38059|  46.7M|    if ((COND) && janet_atomic_load_relaxed(&janet_vm.auto_suspend)) { \
  |  |  ------------------
  |  |  |  Branch (38059:9): [True: 46.7M, Folded]
  |  |  |  Branch (38059:19): [True: 0, False: 46.7M]
  |  |  ------------------
  |  |38060|      0|        fiber->flags |= (JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP); \
  |  |  ------------------
  |  |  |  |  835|      0|#define JANET_FIBER_RESUME_NO_USEVAL 0x2000000
  |  |  ------------------
  |  |                       fiber->flags |= (JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP); \
  |  |  ------------------
  |  |  |  |  836|      0|#define JANET_FIBER_RESUME_NO_SKIP   0x4000000
  |  |  ------------------
  |  |38061|      0|        vm_return(JANET_SIGNAL_INTERRUPT, janet_wrap_nil()); \
  |  |  ------------------
  |  |  |  |38023|      0|#define vm_return(sig, val) do { \
  |  |  |  |38024|      0|    janet_vm.return_reg[0] = (val); \
  |  |  |  |38025|      0|    vm_commit(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38026|      0|    return (sig); \
  |  |  |  |38027|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38027:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38062|      0|    } \
  |  |38063|  46.7M|} while (0)
  |  |  ------------------
  |  |  |  Branch (38063:10): [Folded, False: 46.7M]
  |  |  ------------------
  ------------------
38983|  46.7M|        Janet callee = stack[E];
  ------------------
  |  |37987|  46.7M|#define E (*pc >> 16)
  ------------------
38984|  46.7M|        if (fiber->stacktop > fiber->maxstack) {
  ------------------
  |  Branch (38984:13): [True: 0, False: 46.7M]
  ------------------
38985|      0|            vm_throw("stack overflow");
  ------------------
  |  |38041|      0|#define vm_throw(e) do { vm_commit(); janet_panic(e); } while (0)
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38041:64): [Folded, False: 0]
  |  |  ------------------
  ------------------
38986|      0|        }
38987|  46.7M|        if (janet_checktype(callee, JANET_KEYWORD)) {
  ------------------
  |  |  806|  46.7M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 413, False: 46.7M]
  |  |  |  Branch (806:6): [Folded, False: 46.7M]
  |  |  ------------------
  |  |  807|  46.7M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  46.7M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  46.7M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  46.7M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  46.7M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  46.7M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38988|    413|            vm_commit();
  ------------------
  |  |38017|    413|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|    413|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|    413|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 413]
  |  |  ------------------
  ------------------
38989|    413|            callee = resolve_method(callee, fiber);
38990|    413|        }
38991|  46.7M|        if (janet_checktype(callee, JANET_FUNCTION)) {
  ------------------
  |  |  806|  46.7M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 13.2M, False: 33.5M]
  |  |  |  Branch (806:6): [Folded, False: 46.7M]
  |  |  ------------------
  |  |  807|  46.7M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  46.7M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  46.7M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  46.7M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  46.7M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  46.7M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38992|  13.2M|            func = janet_unwrap_function(callee);
  ------------------
  |  |  868|  13.2M|#define janet_unwrap_function(x) ((JanetFunction *)janet_nanbox_to_pointer(x))
  ------------------
38993|  13.2M|            if (func->gc.flags & JANET_FUNCFLAG_TRACE) {
  ------------------
  |  | 1164|  13.2M|#define JANET_FUNCFLAG_TRACE (1 << 16)
  ------------------
  |  Branch (38993:17): [True: 0, False: 13.2M]
  ------------------
38994|      0|                vm_do_trace(func, fiber->stacktop - fiber->stackstart, fiber->data + fiber->stackstart);
  ------------------
  |  |38181|      0|#define vm_do_trace(func, argc, argv) do { \
  |  |38182|      0|    JanetFunction* _func = (func);\
  |  |38183|      0|    if (_func->def->name) {\
  |  |  ------------------
  |  |  |  Branch (38183:9): [True: 0, False: 0]
  |  |  ------------------
  |  |38184|      0|        janet_eprintf("trace (%S", _func->def->name);\
  |  |  ------------------
  |  |  |  | 2195|      0|#define janet_eprintf(...) janet_dynprintf("err", stderr, __VA_ARGS__)
  |  |  ------------------
  |  |38185|      0|    } else {\
  |  |38186|      0|        janet_eprintf("trace (%p", janet_wrap_function(_func));\
  |  |  ------------------
  |  |  |  | 2195|      0|#define janet_eprintf(...) janet_dynprintf("err", stderr, __VA_ARGS__)
  |  |  ------------------
  |  |38187|      0|    }\
  |  |38188|      0|    int32_t _argc = (argc);\
  |  |38189|      0|    for (int32_t i = 0; i < _argc; i++) {\
  |  |  ------------------
  |  |  |  Branch (38189:25): [True: 0, False: 0]
  |  |  ------------------
  |  |38190|      0|        janet_eprintf(" %p", (argv)[i]);\
  |  |  ------------------
  |  |  |  | 2195|      0|#define janet_eprintf(...) janet_dynprintf("err", stderr, __VA_ARGS__)
  |  |  ------------------
  |  |38191|      0|    }\
  |  |38192|      0|    janet_eprintf(")\n");\
  |  |  ------------------
  |  |  |  | 2195|      0|#define janet_eprintf(...) janet_dynprintf("err", stderr, __VA_ARGS__)
  |  |  ------------------
  |  |38193|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (38193:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
38995|      0|            }
38996|  13.2M|            vm_commit();
  ------------------
  |  |38017|  13.2M|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|  13.2M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  13.2M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 13.2M]
  |  |  ------------------
  ------------------
38997|  13.2M|            if (janet_fiber_funcframe(fiber, func)) {
  ------------------
  |  Branch (38997:17): [True: 0, False: 13.2M]
  ------------------
38998|      0|                int32_t n = fiber->stacktop - fiber->stackstart;
38999|      0|                janet_panicf("%v called with %d argument%s, expected %d",
39000|      0|                             callee, n, n == 1 ? "" : "s", func->def->arity);
  ------------------
  |  Branch (39000:41): [True: 0, False: 0]
  ------------------
39001|      0|            }
39002|  13.2M|            stack = fiber->data + fiber->frame;
39003|  13.2M|            pc = func->def->bytecode;
39004|  13.2M|            vm_checkgc_next();
  ------------------
  |  |38036|  13.2M|#define vm_checkgc_next() maybe_collect(); vm_next()
  |  |  ------------------
  |  |  |  |38034|  13.2M|#define maybe_collect() do {\
  |  |  |  |38035|  13.2M|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 12.7M, False: 498k]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 13.2M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_next() maybe_collect(); vm_next()
  |  |  ------------------
  |  |  |  |38006|  13.2M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
39005|  33.5M|        } else if (janet_checktype(callee, JANET_CFUNCTION)) {
  ------------------
  |  |  806|  33.5M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 30.7M, False: 2.72M]
  |  |  |  Branch (806:6): [Folded, False: 33.5M]
  |  |  ------------------
  |  |  807|  33.5M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  33.5M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  33.5M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  33.5M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  33.5M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  33.5M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39006|  30.7M|            vm_commit();
  ------------------
  |  |38017|  30.7M|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|  30.7M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  30.7M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 30.7M]
  |  |  ------------------
  ------------------
39007|  30.7M|            int32_t argc = fiber->stacktop - fiber->stackstart;
39008|  30.7M|            janet_fiber_cframe(fiber, janet_unwrap_cfunction(callee));
  ------------------
  |  |  869|  30.7M|#define janet_unwrap_cfunction(x) ((JanetCFunction)janet_nanbox_to_pointer(x))
  ------------------
39009|  30.7M|            Janet ret = janet_unwrap_cfunction(callee)(argc, fiber->data + fiber->frame);
  ------------------
  |  |  869|  30.7M|#define janet_unwrap_cfunction(x) ((JanetCFunction)janet_nanbox_to_pointer(x))
  ------------------
39010|  30.7M|            janet_fiber_popframe(fiber);
39011|  30.7M|            stack = fiber->data + fiber->frame;
39012|  30.7M|            stack[A] = ret;
  ------------------
  |  |37983|  30.7M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
39013|  30.7M|            vm_checkgc_pcnext();
  ------------------
  |  |38038|  30.7M|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|  30.7M|#define maybe_collect() do {\
  |  |  |  |38035|  30.7M|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 28.4M, False: 2.36M]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 30.7M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|  30.7M|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|  30.7M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39014|  30.7M|        } else {
39015|  2.72M|            vm_commit();
  ------------------
  |  |38017|  2.72M|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|  2.72M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  2.72M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 2.72M]
  |  |  ------------------
  ------------------
39016|  2.72M|            stack[A] = call_nonfn(fiber, callee);
  ------------------
  |  |37983|  2.72M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
39017|  2.72M|            vm_pcnext();
  ------------------
  |  |38037|  2.72M|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  2.72M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
39018|  2.72M|        }
39019|  46.7M|    }
39020|       |
39021|  46.7M|    VM_OP(JOP_TAILCALL) {
  ------------------
  |  |38004|  6.75M|#define VM_OP(op) label_##op :
  ------------------
39022|  6.75M|        vm_maybe_auto_suspend(1);
  ------------------
  |  |38058|  6.75M|#define vm_maybe_auto_suspend(COND) do { \
  |  |38059|  6.75M|    if ((COND) && janet_atomic_load_relaxed(&janet_vm.auto_suspend)) { \
  |  |  ------------------
  |  |  |  Branch (38059:9): [True: 6.75M, Folded]
  |  |  |  Branch (38059:19): [True: 0, False: 6.75M]
  |  |  ------------------
  |  |38060|      0|        fiber->flags |= (JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP); \
  |  |  ------------------
  |  |  |  |  835|      0|#define JANET_FIBER_RESUME_NO_USEVAL 0x2000000
  |  |  ------------------
  |  |                       fiber->flags |= (JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP); \
  |  |  ------------------
  |  |  |  |  836|      0|#define JANET_FIBER_RESUME_NO_SKIP   0x4000000
  |  |  ------------------
  |  |38061|      0|        vm_return(JANET_SIGNAL_INTERRUPT, janet_wrap_nil()); \
  |  |  ------------------
  |  |  |  |38023|      0|#define vm_return(sig, val) do { \
  |  |  |  |38024|      0|    janet_vm.return_reg[0] = (val); \
  |  |  |  |38025|      0|    vm_commit(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38026|      0|    return (sig); \
  |  |  |  |38027|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38027:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38062|      0|    } \
  |  |38063|  6.75M|} while (0)
  |  |  ------------------
  |  |  |  Branch (38063:10): [Folded, False: 6.75M]
  |  |  ------------------
  ------------------
39023|  6.75M|        Janet callee = stack[D];
  ------------------
  |  |37986|  6.75M|#define D (*pc >> 8)
  ------------------
39024|  6.75M|        if (fiber->stacktop > fiber->maxstack) {
  ------------------
  |  Branch (39024:13): [True: 0, False: 6.75M]
  ------------------
39025|      0|            vm_throw("stack overflow");
  ------------------
  |  |38041|      0|#define vm_throw(e) do { vm_commit(); janet_panic(e); } while (0)
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38041:64): [Folded, False: 0]
  |  |  ------------------
  ------------------
39026|      0|        }
39027|  6.75M|        if (janet_checktype(callee, JANET_KEYWORD)) {
  ------------------
  |  |  806|  6.75M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 0, False: 6.75M]
  |  |  |  Branch (806:6): [Folded, False: 6.75M]
  |  |  ------------------
  |  |  807|  6.75M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  6.75M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  6.75M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  6.75M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  6.75M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  6.75M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39028|      0|            vm_commit();
  ------------------
  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  ------------------
  ------------------
39029|      0|            callee = resolve_method(callee, fiber);
39030|      0|        }
39031|  6.75M|        if (janet_checktype(callee, JANET_FUNCTION)) {
  ------------------
  |  |  806|  6.75M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 5.41M, False: 1.33M]
  |  |  |  Branch (806:6): [Folded, False: 6.75M]
  |  |  ------------------
  |  |  807|  6.75M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  6.75M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  6.75M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  6.75M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  6.75M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  6.75M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39032|  5.41M|            func = janet_unwrap_function(callee);
  ------------------
  |  |  868|  5.41M|#define janet_unwrap_function(x) ((JanetFunction *)janet_nanbox_to_pointer(x))
  ------------------
39033|  5.41M|            if (func->gc.flags & JANET_FUNCFLAG_TRACE) {
  ------------------
  |  | 1164|  5.41M|#define JANET_FUNCFLAG_TRACE (1 << 16)
  ------------------
  |  Branch (39033:17): [True: 0, False: 5.41M]
  ------------------
39034|      0|                vm_do_trace(func, fiber->stacktop - fiber->stackstart, fiber->data + fiber->stackstart);
  ------------------
  |  |38181|      0|#define vm_do_trace(func, argc, argv) do { \
  |  |38182|      0|    JanetFunction* _func = (func);\
  |  |38183|      0|    if (_func->def->name) {\
  |  |  ------------------
  |  |  |  Branch (38183:9): [True: 0, False: 0]
  |  |  ------------------
  |  |38184|      0|        janet_eprintf("trace (%S", _func->def->name);\
  |  |  ------------------
  |  |  |  | 2195|      0|#define janet_eprintf(...) janet_dynprintf("err", stderr, __VA_ARGS__)
  |  |  ------------------
  |  |38185|      0|    } else {\
  |  |38186|      0|        janet_eprintf("trace (%p", janet_wrap_function(_func));\
  |  |  ------------------
  |  |  |  | 2195|      0|#define janet_eprintf(...) janet_dynprintf("err", stderr, __VA_ARGS__)
  |  |  ------------------
  |  |38187|      0|    }\
  |  |38188|      0|    int32_t _argc = (argc);\
  |  |38189|      0|    for (int32_t i = 0; i < _argc; i++) {\
  |  |  ------------------
  |  |  |  Branch (38189:25): [True: 0, False: 0]
  |  |  ------------------
  |  |38190|      0|        janet_eprintf(" %p", (argv)[i]);\
  |  |  ------------------
  |  |  |  | 2195|      0|#define janet_eprintf(...) janet_dynprintf("err", stderr, __VA_ARGS__)
  |  |  ------------------
  |  |38191|      0|    }\
  |  |38192|      0|    janet_eprintf(")\n");\
  |  |  ------------------
  |  |  |  | 2195|      0|#define janet_eprintf(...) janet_dynprintf("err", stderr, __VA_ARGS__)
  |  |  ------------------
  |  |38193|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (38193:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
39035|      0|            }
39036|  5.41M|            if (janet_fiber_funcframe_tail(fiber, func)) {
  ------------------
  |  Branch (39036:17): [True: 2, False: 5.41M]
  ------------------
39037|      2|                janet_stack_frame(fiber->data + fiber->frame)->pc = pc;
  ------------------
  |  |  854|      2|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  ------------------
  |  |  |  | 1026|      2|#define JANET_FRAME_SIZE 4
  |  |  ------------------
  ------------------
39038|      2|                int32_t n = fiber->stacktop - fiber->stackstart;
39039|      2|                janet_panicf("%v called with %d argument%s, expected %d",
39040|      2|                             callee, n, n == 1 ? "" : "s", func->def->arity);
  ------------------
  |  Branch (39040:41): [True: 0, False: 2]
  ------------------
39041|      2|            }
39042|  5.41M|            stack = fiber->data + fiber->frame;
39043|  5.41M|            pc = func->def->bytecode;
39044|  5.41M|            vm_checkgc_next();
  ------------------
  |  |38036|  5.41M|#define vm_checkgc_next() maybe_collect(); vm_next()
  |  |  ------------------
  |  |  |  |38034|  5.41M|#define maybe_collect() do {\
  |  |  |  |38035|  5.41M|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 5.24M, False: 175k]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 5.41M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_next() maybe_collect(); vm_next()
  |  |  ------------------
  |  |  |  |38006|  5.41M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
39045|  5.41M|        } else {
39046|  1.33M|            Janet retreg;
39047|  1.33M|            int entrance_frame = janet_stack_frame(stack)->flags & JANET_STACKFRAME_ENTRANCE;
  ------------------
  |  |  854|  1.33M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  ------------------
  |  |  |  | 1026|  1.33M|#define JANET_FRAME_SIZE 4
  |  |  ------------------
  ------------------
                          int entrance_frame = janet_stack_frame(stack)->flags & JANET_STACKFRAME_ENTRANCE;
  ------------------
  |  | 1013|  1.33M|#define JANET_STACKFRAME_ENTRANCE 2
  ------------------
39048|  1.33M|            vm_commit();
  ------------------
  |  |38017|  1.33M|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|  1.33M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  1.33M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 1.33M]
  |  |  ------------------
  ------------------
39049|  1.33M|            if (janet_checktype(callee, JANET_CFUNCTION)) {
  ------------------
  |  |  806|  1.33M|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 1.33M, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 1.33M]
  |  |  ------------------
  |  |  807|  1.33M|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  1.33M|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  1.33M|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  1.33M|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.33M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.33M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39050|  1.33M|                int32_t argc = fiber->stacktop - fiber->stackstart;
39051|  1.33M|                janet_fiber_cframe(fiber, janet_unwrap_cfunction(callee));
  ------------------
  |  |  869|  1.33M|#define janet_unwrap_cfunction(x) ((JanetCFunction)janet_nanbox_to_pointer(x))
  ------------------
39052|  1.33M|                retreg = janet_unwrap_cfunction(callee)(argc, fiber->data + fiber->frame);
  ------------------
  |  |  869|  1.33M|#define janet_unwrap_cfunction(x) ((JanetCFunction)janet_nanbox_to_pointer(x))
  ------------------
39053|  1.33M|                janet_fiber_popframe(fiber);
39054|  1.33M|            } else {
39055|      0|                retreg = call_nonfn(fiber, callee);
39056|      0|            }
39057|  1.33M|            janet_fiber_popframe(fiber);
39058|  1.33M|            if (entrance_frame) {
  ------------------
  |  Branch (39058:17): [True: 459, False: 1.33M]
  ------------------
39059|    459|                vm_return_no_restore(JANET_SIGNAL_OK, retreg);
  ------------------
  |  |38028|    459|#define vm_return_no_restore(sig, val) do { \
  |  |38029|    459|    janet_vm.return_reg[0] = (val); \
  |  |38030|    459|    return (sig); \
  |  |38031|    459|} while (0)
  |  |  ------------------
  |  |  |  Branch (38031:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
39060|    459|            }
39061|  1.33M|            vm_restore();
  ------------------
  |  |38018|  1.33M|#define vm_restore() do { \
  |  |38019|  1.33M|    stack = fiber->data + fiber->frame; \
  |  |38020|  1.33M|    pc = janet_stack_frame(stack)->pc; \
  |  |  ------------------
  |  |  |  |  854|  1.33M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  1.33M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38021|  1.33M|    func = janet_stack_frame(stack)->func; \
  |  |  ------------------
  |  |  |  |  854|  1.33M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  1.33M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38022|  1.33M|} while (0)
  |  |  ------------------
  |  |  |  Branch (38022:10): [Folded, False: 1.33M]
  |  |  ------------------
  ------------------
39062|  1.33M|            stack[A] = retreg;
  ------------------
  |  |37983|  1.33M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
39063|  1.33M|            vm_checkgc_pcnext();
  ------------------
  |  |38038|  1.33M|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|  1.33M|#define maybe_collect() do {\
  |  |  |  |38035|  1.33M|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 1.27M, False: 65.1k]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 1.33M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|  1.33M|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|  1.33M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39064|  1.33M|        }
39065|  6.75M|    }
39066|       |
39067|  6.75M|    VM_OP(JOP_RESUME) {
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
39068|      0|        Janet retreg;
39069|      0|        vm_maybe_auto_suspend(1);
  ------------------
  |  |38058|      0|#define vm_maybe_auto_suspend(COND) do { \
  |  |38059|      0|    if ((COND) && janet_atomic_load_relaxed(&janet_vm.auto_suspend)) { \
  |  |  ------------------
  |  |  |  Branch (38059:9): [True: 0, Folded]
  |  |  |  Branch (38059:19): [True: 0, False: 0]
  |  |  ------------------
  |  |38060|      0|        fiber->flags |= (JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP); \
  |  |  ------------------
  |  |  |  |  835|      0|#define JANET_FIBER_RESUME_NO_USEVAL 0x2000000
  |  |  ------------------
  |  |                       fiber->flags |= (JANET_FIBER_RESUME_NO_USEVAL | JANET_FIBER_RESUME_NO_SKIP); \
  |  |  ------------------
  |  |  |  |  836|      0|#define JANET_FIBER_RESUME_NO_SKIP   0x4000000
  |  |  ------------------
  |  |38061|      0|        vm_return(JANET_SIGNAL_INTERRUPT, janet_wrap_nil()); \
  |  |  ------------------
  |  |  |  |38023|      0|#define vm_return(sig, val) do { \
  |  |  |  |38024|      0|    janet_vm.return_reg[0] = (val); \
  |  |  |  |38025|      0|    vm_commit(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |38026|      0|    return (sig); \
  |  |  |  |38027|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38027:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38062|      0|    } \
  |  |38063|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (38063:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
39070|      0|        vm_assert_type(stack[B], JANET_FIBER);
  ------------------
  |  |38043|      0|#define vm_assert_type(X, T) do { \
  |  |38044|      0|    if (!(janet_checktype((X), (T)))) { \
  |  |  ------------------
  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38044:9): [True: 0, False: 0]
  |  |  ------------------
  |  |38045|      0|        vm_commit(); \
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38046|      0|        janet_panicf("expected %T, got %v", (1 << (T)), (X)); \
  |  |38047|      0|    } \
  |  |38048|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (38048:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
39071|      0|        JanetFiber *child = janet_unwrap_fiber(stack[B]);
  ------------------
  |  |  859|      0|#define janet_unwrap_fiber(x) ((JanetFiber *)janet_nanbox_to_pointer(x))
  ------------------
39072|      0|        if (janet_check_can_resume(child, &retreg, 0)) {
  ------------------
  |  Branch (39072:13): [True: 0, False: 0]
  ------------------
39073|      0|            vm_commit();
  ------------------
  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  ------------------
  ------------------
39074|      0|            janet_panicv(retreg);
39075|      0|        }
39076|      0|        fiber->child = child;
39077|      0|        JanetSignal sig = janet_continue_no_check(child, stack[C], &retreg);
  ------------------
  |  |37985|      0|#define C (*pc >> 24)
  ------------------
39078|      0|        stack = fiber->data + fiber->frame;
39079|      0|        if (sig != JANET_SIGNAL_OK && !(child->flags & (1 << sig))) {
  ------------------
  |  Branch (39079:13): [True: 0, False: 0]
  |  Branch (39079:39): [True: 0, False: 0]
  ------------------
39080|      0|            vm_return(sig, retreg);
  ------------------
  |  |38023|      0|#define vm_return(sig, val) do { \
  |  |38024|      0|    janet_vm.return_reg[0] = (val); \
  |  |38025|      0|    vm_commit(); \
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38026|      0|    return (sig); \
  |  |38027|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (38027:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
39081|      0|        }
39082|      0|        fiber->child = NULL;
39083|      0|        stack[A] = retreg;
  ------------------
  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  ------------------
39084|      0|        vm_checkgc_pcnext();
  ------------------
  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39085|      0|    }
39086|       |
39087|      0|    VM_OP(JOP_SIGNAL) {
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
39088|      0|        int32_t s = C;
  ------------------
  |  |37985|      0|#define C (*pc >> 24)
  ------------------
39089|      0|        if (s > JANET_SIGNAL_USER9) s = JANET_SIGNAL_USER9;
  ------------------
  |  Branch (39089:13): [True: 0, False: 0]
  ------------------
39090|      0|        if (s < 0) s = 0;
  ------------------
  |  Branch (39090:13): [True: 0, False: 0]
  ------------------
39091|      0|        vm_return(s, stack[B]);
  ------------------
  |  |38023|      0|#define vm_return(sig, val) do { \
  |  |38024|      0|    janet_vm.return_reg[0] = (val); \
  |  |38025|      0|    vm_commit(); \
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38026|      0|    return (sig); \
  |  |38027|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (38027:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
39092|      0|    }
39093|       |
39094|      0|    VM_OP(JOP_PROPAGATE) {
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
39095|      0|        Janet fv = stack[C];
  ------------------
  |  |37985|      0|#define C (*pc >> 24)
  ------------------
39096|      0|        vm_assert_type(fv, JANET_FIBER);
  ------------------
  |  |38043|      0|#define vm_assert_type(X, T) do { \
  |  |38044|      0|    if (!(janet_checktype((X), (T)))) { \
  |  |  ------------------
  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38044:9): [True: 0, False: 0]
  |  |  ------------------
  |  |38045|      0|        vm_commit(); \
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38046|      0|        janet_panicf("expected %T, got %v", (1 << (T)), (X)); \
  |  |38047|      0|    } \
  |  |38048|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (38048:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
39097|      0|        JanetFiber *f = janet_unwrap_fiber(fv);
  ------------------
  |  |  859|      0|#define janet_unwrap_fiber(x) ((JanetFiber *)janet_nanbox_to_pointer(x))
  ------------------
39098|      0|        JanetFiberStatus sub_status = janet_fiber_status(f);
39099|      0|        if (sub_status > JANET_STATUS_USER9) {
  ------------------
  |  Branch (39099:13): [True: 0, False: 0]
  ------------------
39100|      0|            vm_commit();
  ------------------
  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  ------------------
  ------------------
39101|      0|            janet_panicf("cannot propagate from fiber with status :%s",
39102|      0|                         janet_status_names[sub_status]);
39103|      0|        }
39104|      0|        fiber->child = f;
39105|      0|        vm_return((int) sub_status, stack[B]);
  ------------------
  |  |38023|      0|#define vm_return(sig, val) do { \
  |  |38024|      0|    janet_vm.return_reg[0] = (val); \
  |  |38025|      0|    vm_commit(); \
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38026|      0|    return (sig); \
  |  |38027|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (38027:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
39106|      0|    }
39107|       |
39108|      0|    VM_OP(JOP_CANCEL) {
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
39109|      0|        Janet retreg;
39110|      0|        vm_assert_type(stack[B], JANET_FIBER);
  ------------------
  |  |38043|      0|#define vm_assert_type(X, T) do { \
  |  |38044|      0|    if (!(janet_checktype((X), (T)))) { \
  |  |  ------------------
  |  |  |  |  806|      0|    (((t) == JANET_NUMBER) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:6): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  807|      0|        ? janet_nanbox_isnumber(x) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  808|      0|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  800|      0|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  790|      0|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38044:9): [True: 0, False: 0]
  |  |  ------------------
  |  |38045|      0|        vm_commit(); \
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38046|      0|        janet_panicf("expected %T, got %v", (1 << (T)), (X)); \
  |  |38047|      0|    } \
  |  |38048|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (38048:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
39111|      0|        JanetFiber *child = janet_unwrap_fiber(stack[B]);
  ------------------
  |  |  859|      0|#define janet_unwrap_fiber(x) ((JanetFiber *)janet_nanbox_to_pointer(x))
  ------------------
39112|      0|        if (janet_check_can_resume(child, &retreg, 1)) {
  ------------------
  |  Branch (39112:13): [True: 0, False: 0]
  ------------------
39113|      0|            vm_commit();
  ------------------
  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  ------------------
  ------------------
39114|      0|            janet_panicv(retreg);
39115|      0|        }
39116|      0|        fiber->child = child;
39117|      0|        JanetSignal sig = janet_continue_signal(child, stack[C], &retreg, JANET_SIGNAL_ERROR);
  ------------------
  |  |37985|      0|#define C (*pc >> 24)
  ------------------
39118|      0|        if (sig != JANET_SIGNAL_OK && !(child->flags & (1 << sig))) {
  ------------------
  |  Branch (39118:13): [True: 0, False: 0]
  |  Branch (39118:39): [True: 0, False: 0]
  ------------------
39119|      0|            vm_return(sig, retreg);
  ------------------
  |  |38023|      0|#define vm_return(sig, val) do { \
  |  |38024|      0|    janet_vm.return_reg[0] = (val); \
  |  |38025|      0|    vm_commit(); \
  |  |  ------------------
  |  |  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |38026|      0|    return (sig); \
  |  |38027|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (38027:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
39120|      0|        }
39121|      0|        fiber->child = NULL;
39122|      0|        stack = fiber->data + fiber->frame;
39123|      0|        stack[A] = retreg;
  ------------------
  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  ------------------
39124|      0|        vm_checkgc_pcnext();
  ------------------
  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39125|      0|    }
39126|       |
39127|  29.5k|    VM_OP(JOP_PUT)
  ------------------
  |  |38004|  29.5k|#define VM_OP(op) label_##op :
  ------------------
39128|  29.5k|    vm_commit();
  ------------------
  |  |38017|  29.5k|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|  29.5k|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  29.5k|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 29.5k]
  |  |  ------------------
  ------------------
39129|  29.5k|    fiber->flags |= JANET_FIBER_RESUME_NO_USEVAL;
  ------------------
  |  |  835|  29.5k|#define JANET_FIBER_RESUME_NO_USEVAL 0x2000000
  ------------------
39130|  29.5k|    janet_put(stack[A], stack[B], stack[C]);
  ------------------
  |  |37983|  29.5k|#define A ((*pc >> 8)  & 0xFF)
  ------------------
                  janet_put(stack[A], stack[B], stack[C]);
  ------------------
  |  |37984|  29.5k|#define B ((*pc >> 16) & 0xFF)
  ------------------
                  janet_put(stack[A], stack[B], stack[C]);
  ------------------
  |  |37985|  29.5k|#define C (*pc >> 24)
  ------------------
39131|  29.5k|    stack = fiber->data + fiber->frame;
39132|  29.5k|    fiber->flags &= ~JANET_FIBER_RESUME_NO_USEVAL;
  ------------------
  |  |  835|  29.5k|#define JANET_FIBER_RESUME_NO_USEVAL 0x2000000
  ------------------
39133|  29.5k|    vm_checkgc_pcnext();
  ------------------
  |  |38038|  29.5k|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|  29.5k|#define maybe_collect() do {\
  |  |  |  |38035|  29.5k|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 21.0k, False: 8.50k]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 29.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|  29.5k|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|  29.5k|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39134|       |
39135|  29.5k|    VM_OP(JOP_PUT_INDEX)
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
39136|      0|    vm_commit();
  ------------------
  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  ------------------
  ------------------
39137|      0|    fiber->flags |= JANET_FIBER_RESUME_NO_USEVAL;
  ------------------
  |  |  835|      0|#define JANET_FIBER_RESUME_NO_USEVAL 0x2000000
  ------------------
39138|      0|    janet_putindex(stack[A], C, stack[B]);
  ------------------
  |  |37983|      0|#define A ((*pc >> 8)  & 0xFF)
  ------------------
                  janet_putindex(stack[A], C, stack[B]);
  ------------------
  |  |37985|      0|#define C (*pc >> 24)
  ------------------
                  janet_putindex(stack[A], C, stack[B]);
  ------------------
  |  |37984|      0|#define B ((*pc >> 16) & 0xFF)
  ------------------
39139|      0|    stack = fiber->data + fiber->frame;
39140|      0|    fiber->flags &= ~JANET_FIBER_RESUME_NO_USEVAL;
  ------------------
  |  |  835|      0|#define JANET_FIBER_RESUME_NO_USEVAL 0x2000000
  ------------------
39141|      0|    vm_checkgc_pcnext();
  ------------------
  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39142|       |
39143|  13.7M|    VM_OP(JOP_IN)
  ------------------
  |  |38004|  13.7M|#define VM_OP(op) label_##op :
  ------------------
39144|  13.7M|    vm_commit();
  ------------------
  |  |38017|  13.7M|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|  13.7M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  13.7M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 13.7M]
  |  |  ------------------
  ------------------
39145|  13.7M|    {
39146|  13.7M|        Janet a = janet_in(stack[B], stack[C]);
  ------------------
  |  |37984|  13.7M|#define B ((*pc >> 16) & 0xFF)
  ------------------
                      Janet a = janet_in(stack[B], stack[C]);
  ------------------
  |  |37985|  13.7M|#define C (*pc >> 24)
  ------------------
39147|  13.7M|        stack = fiber->data + fiber->frame;
39148|  13.7M|        stack[A] = a;
  ------------------
  |  |37983|  13.7M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
39149|  13.7M|    }
39150|  13.7M|    vm_pcnext();
  ------------------
  |  |38037|  13.7M|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  13.7M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
39151|       |
39152|  13.7M|    VM_OP(JOP_GET)
  ------------------
  |  |38004|  1.97M|#define VM_OP(op) label_##op :
  ------------------
39153|  1.97M|    vm_commit();
  ------------------
  |  |38017|  1.97M|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|  1.97M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  1.97M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 1.97M]
  |  |  ------------------
  ------------------
39154|  1.97M|    {
39155|  1.97M|        Janet a = janet_get(stack[B], stack[C]);
  ------------------
  |  |37984|  1.97M|#define B ((*pc >> 16) & 0xFF)
  ------------------
                      Janet a = janet_get(stack[B], stack[C]);
  ------------------
  |  |37985|  1.97M|#define C (*pc >> 24)
  ------------------
39156|  1.97M|        stack = fiber->data + fiber->frame;
39157|  1.97M|        stack[A] = a;
  ------------------
  |  |37983|  1.97M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
39158|  1.97M|    }
39159|  1.97M|    vm_pcnext();
  ------------------
  |  |38037|  1.97M|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  1.97M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
39160|       |
39161|  1.97M|    VM_OP(JOP_GET_INDEX)
  ------------------
  |  |38004|  72.8k|#define VM_OP(op) label_##op :
  ------------------
39162|  72.8k|    vm_commit();
  ------------------
  |  |38017|  72.8k|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|  72.8k|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  72.8k|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 72.8k]
  |  |  ------------------
  ------------------
39163|  72.8k|    {
39164|  72.8k|        Janet a = janet_getindex(stack[B], C);
  ------------------
  |  |37984|  72.8k|#define B ((*pc >> 16) & 0xFF)
  ------------------
                      Janet a = janet_getindex(stack[B], C);
  ------------------
  |  |37985|  72.8k|#define C (*pc >> 24)
  ------------------
39165|  72.8k|        stack = fiber->data + fiber->frame;
39166|  72.8k|        stack[A] = a;
  ------------------
  |  |37983|  72.8k|#define A ((*pc >> 8)  & 0xFF)
  ------------------
39167|  72.8k|    }
39168|  72.8k|    vm_pcnext();
  ------------------
  |  |38037|  72.8k|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  72.8k|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
39169|       |
39170|  5.45M|    VM_OP(JOP_LENGTH)
  ------------------
  |  |38004|  5.45M|#define VM_OP(op) label_##op :
  ------------------
39171|  5.45M|    vm_commit();
  ------------------
  |  |38017|  5.45M|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|  5.45M|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|  5.45M|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 5.45M]
  |  |  ------------------
  ------------------
39172|  5.45M|    {
39173|  5.45M|        Janet a = janet_lengthv(stack[E]);
  ------------------
  |  |37987|  5.45M|#define E (*pc >> 16)
  ------------------
39174|  5.45M|        stack = fiber->data + fiber->frame;
39175|  5.45M|        stack[A] = a;
  ------------------
  |  |37983|  5.45M|#define A ((*pc >> 8)  & 0xFF)
  ------------------
39176|  5.45M|    }
39177|  5.45M|    vm_pcnext();
  ------------------
  |  |38037|  5.45M|#define vm_pcnext() pc++; vm_next()
  |  |  ------------------
  |  |  |  |38006|  5.45M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  ------------------
  ------------------
39178|       |
39179|  5.45M|    VM_OP(JOP_MAKE_ARRAY) {
  ------------------
  |  |38004|  1.42M|#define VM_OP(op) label_##op :
  ------------------
39180|  1.42M|        int32_t count = fiber->stacktop - fiber->stackstart;
39181|  1.42M|        Janet *mem = fiber->data + fiber->stackstart;
39182|  1.42M|        stack[D] = janet_wrap_array(janet_array_n(mem, count));
  ------------------
  |  |37986|  1.42M|#define D (*pc >> 8)
  ------------------
                      stack[D] = janet_wrap_array(janet_array_n(mem, count));
  ------------------
  |  |  845|  1.42M|#define janet_wrap_array(s) janet_nanbox_wrap_((s), JANET_ARRAY)
  |  |  ------------------
  |  |  |  |  825|  1.42M|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.42M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.42M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39183|  1.42M|        fiber->stacktop = fiber->stackstart;
39184|  1.42M|        vm_checkgc_pcnext();
  ------------------
  |  |38038|  1.42M|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|  1.42M|#define maybe_collect() do {\
  |  |  |  |38035|  1.42M|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 1.32M, False: 99.5k]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 1.42M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|  1.42M|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|  1.42M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39185|  1.42M|    }
39186|       |
39187|  1.60M|    VM_OP(JOP_MAKE_TUPLE)
  ------------------
  |  |38004|  1.60M|#define VM_OP(op) label_##op :
  ------------------
39188|       |    /* fallthrough */
39189|  1.79M|    VM_OP(JOP_MAKE_BRACKET_TUPLE) {
  ------------------
  |  |38004|  1.79M|#define VM_OP(op) label_##op :
  ------------------
39190|  1.79M|        int32_t count = fiber->stacktop - fiber->stackstart;
39191|  1.79M|        Janet *mem = fiber->data + fiber->stackstart;
39192|  1.79M|        const Janet *tup = janet_tuple_n(mem, count);
39193|  1.79M|        if (opcode == JOP_MAKE_BRACKET_TUPLE)
  ------------------
  |  |38007|  1.79M|#define opcode (*pc & 0xFF)
  ------------------
  |  Branch (39193:13): [True: 184k, False: 1.60M]
  ------------------
39194|   184k|            janet_tuple_flag(tup) |= JANET_TUPLE_FLAG_BRACKETCTOR;
  ------------------
  |  | 1806|   184k|#define janet_tuple_flag(t) (janet_tuple_head(t)->gc.flags)
  |  |  ------------------
  |  |  |  | 1800|   184k|#define janet_tuple_head(t) ((JanetTupleHead *)((char *)t - offsetof(JanetTupleHead, data)))
  |  |  ------------------
  ------------------
                          janet_tuple_flag(tup) |= JANET_TUPLE_FLAG_BRACKETCTOR;
  ------------------
  |  | 1798|   184k|#define JANET_TUPLE_FLAG_BRACKETCTOR 0x10000
  ------------------
39195|  1.79M|        stack[D] = janet_wrap_tuple(tup);
  ------------------
  |  |37986|  1.79M|#define D (*pc >> 8)
  ------------------
                      stack[D] = janet_wrap_tuple(tup);
  ------------------
  |  |  843|  1.79M|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|  1.79M|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.79M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.79M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39196|  1.79M|        fiber->stacktop = fiber->stackstart;
39197|  1.79M|        vm_checkgc_pcnext();
  ------------------
  |  |38038|  1.79M|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|  1.79M|#define maybe_collect() do {\
  |  |  |  |38035|  1.79M|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 1.36M, False: 429k]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 1.79M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|  1.79M|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|  1.79M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39198|  1.79M|    }
39199|       |
39200|  1.79M|    VM_OP(JOP_MAKE_TABLE) {
  ------------------
  |  |38004|  3.01k|#define VM_OP(op) label_##op :
  ------------------
39201|  3.01k|        int32_t count = fiber->stacktop - fiber->stackstart;
39202|  3.01k|        Janet *mem = fiber->data + fiber->stackstart;
39203|  3.01k|        if (count & 1) {
  ------------------
  |  Branch (39203:13): [True: 0, False: 3.01k]
  ------------------
39204|      0|            vm_commit();
  ------------------
  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  ------------------
  ------------------
39205|      0|            janet_panicf("expected even number of arguments to table constructor, got %d", count);
39206|      0|        }
39207|  3.01k|        JanetTable *table = janet_table(count / 2);
39208|  3.01k|        for (int32_t i = 0; i < count; i += 2)
  ------------------
  |  Branch (39208:29): [True: 0, False: 3.01k]
  ------------------
39209|      0|            janet_table_put(table, mem[i], mem[i + 1]);
39210|  3.01k|        stack[D] = janet_wrap_table(table);
  ------------------
  |  |37986|  3.01k|#define D (*pc >> 8)
  ------------------
                      stack[D] = janet_wrap_table(table);
  ------------------
  |  |  846|  3.01k|#define janet_wrap_table(s) janet_nanbox_wrap_((s), JANET_TABLE)
  |  |  ------------------
  |  |  |  |  825|  3.01k|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  3.01k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  3.01k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39211|  3.01k|        fiber->stacktop = fiber->stackstart;
39212|  3.01k|        vm_checkgc_pcnext();
  ------------------
  |  |38038|  3.01k|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|  3.01k|#define maybe_collect() do {\
  |  |  |  |38035|  3.01k|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 2.64k, False: 376]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 3.01k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|  3.01k|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|  3.01k|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39213|  3.01k|    }
39214|       |
39215|  1.73M|    VM_OP(JOP_MAKE_STRUCT) {
  ------------------
  |  |38004|  1.73M|#define VM_OP(op) label_##op :
  ------------------
39216|  1.73M|        int32_t count = fiber->stacktop - fiber->stackstart;
39217|  1.73M|        Janet *mem = fiber->data + fiber->stackstart;
39218|  1.73M|        if (count & 1) {
  ------------------
  |  Branch (39218:13): [True: 0, False: 1.73M]
  ------------------
39219|      0|            vm_commit();
  ------------------
  |  |38017|      0|#define vm_commit() do { janet_stack_frame(stack)->pc = pc; } while (0)
  |  |  ------------------
  |  |  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38017:70): [Folded, False: 0]
  |  |  ------------------
  ------------------
39220|      0|            janet_panicf("expected even number of arguments to struct constructor, got %d", count);
39221|      0|        }
39222|  1.73M|        JanetKV *st = janet_struct_begin(count / 2);
39223|  20.8M|        for (int32_t i = 0; i < count; i += 2)
  ------------------
  |  Branch (39223:29): [True: 19.0M, False: 1.73M]
  ------------------
39224|  19.0M|            janet_struct_put(st, mem[i], mem[i + 1]);
39225|  1.73M|        stack[D] = janet_wrap_struct(janet_struct_end(st));
  ------------------
  |  |37986|  1.73M|#define D (*pc >> 8)
  ------------------
                      stack[D] = janet_wrap_struct(janet_struct_end(st));
  ------------------
  |  |  842|  1.73M|#define janet_wrap_struct(s) janet_nanbox_wrap_c((s), JANET_STRUCT)
  |  |  ------------------
  |  |  |  |  828|  1.73M|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  1.73M|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  1.73M|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39226|  1.73M|        fiber->stacktop = fiber->stackstart;
39227|  1.73M|        vm_checkgc_pcnext();
  ------------------
  |  |38038|  1.73M|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|  1.73M|#define maybe_collect() do {\
  |  |  |  |38035|  1.73M|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 1.68M, False: 55.5k]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 1.73M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|  1.73M|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|  1.73M|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39228|  1.73M|    }
39229|       |
39230|      0|    VM_OP(JOP_MAKE_STRING) {
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
39231|      0|        int32_t count = fiber->stacktop - fiber->stackstart;
39232|      0|        Janet *mem = fiber->data + fiber->stackstart;
39233|      0|        JanetBuffer buffer;
39234|      0|        janet_buffer_init(&buffer, 10 * count);
39235|      0|        for (int32_t i = 0; i < count; i++)
  ------------------
  |  Branch (39235:29): [True: 0, False: 0]
  ------------------
39236|      0|            janet_to_string_b(&buffer, mem[i]);
39237|      0|        stack[D] = janet_stringv(buffer.data, buffer.count);
  ------------------
  |  |37986|      0|#define D (*pc >> 8)
  ------------------
                      stack[D] = janet_stringv(buffer.data, buffer.count);
  ------------------
  |  | 1827|      0|#define janet_stringv(str, len) janet_wrap_string(janet_string((str), (len)))
  |  |  ------------------
  |  |  |  |  848|      0|#define janet_wrap_string(s) janet_nanbox_wrap_c((s), JANET_STRING)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|      0|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39238|      0|        janet_buffer_deinit(&buffer);
39239|      0|        fiber->stacktop = fiber->stackstart;
39240|      0|        vm_checkgc_pcnext();
  ------------------
  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39241|      0|    }
39242|       |
39243|      0|    VM_OP(JOP_MAKE_BUFFER) {
  ------------------
  |  |38004|      0|#define VM_OP(op) label_##op :
  ------------------
39244|      0|        int32_t count = fiber->stacktop - fiber->stackstart;
39245|      0|        Janet *mem = fiber->data + fiber->stackstart;
39246|      0|        JanetBuffer *buffer = janet_buffer(10 * count);
39247|      0|        for (int32_t i = 0; i < count; i++)
  ------------------
  |  Branch (39247:29): [True: 0, False: 0]
  ------------------
39248|      0|            janet_to_string_b(buffer, mem[i]);
39249|      0|        stack[D] = janet_wrap_buffer(buffer);
  ------------------
  |  |37986|      0|#define D (*pc >> 8)
  ------------------
                      stack[D] = janet_wrap_buffer(buffer);
  ------------------
  |  |  847|      0|#define janet_wrap_buffer(s) janet_nanbox_wrap_((s), JANET_BUFFER)
  |  |  ------------------
  |  |  |  |  825|      0|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39250|      0|        fiber->stacktop = fiber->stackstart;
39251|      0|        vm_checkgc_pcnext();
  ------------------
  |  |38038|      0|#define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38034|      0|#define maybe_collect() do {\
  |  |  |  |38035|      0|    if (janet_vm.next_collection >= janet_vm.gc_interval) janet_collect(); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38035:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (38035:85): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define vm_checkgc_pcnext() maybe_collect(); vm_pcnext()
  |  |  ------------------
  |  |  |  |38037|      0|#define vm_pcnext() pc++; vm_next()
  |  |  |  |  ------------------
  |  |  |  |  |  |38006|      0|#define vm_next() goto *op_lookup[*pc & 0xFF]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39252|      0|    }
39253|       |
39254|      0|    VM_END()
  ------------------
  |  |38003|      0|#define VM_END() }
  ------------------
39255|      0|}
janet.c:resolve_method:
38246|    413|static Janet resolve_method(Janet name, JanetFiber *fiber) {
38247|    413|    int32_t argc = fiber->stacktop - fiber->stackstart;
38248|    413|    if (argc < 1) janet_panicf("method call (%v) takes at least 1 argument, got 0", name);
  ------------------
  |  Branch (38248:9): [True: 0, False: 413]
  ------------------
38249|    413|    Janet callee = method_to_fun(name, fiber->data[fiber->stackstart]);
38250|    413|    if (janet_checktype(callee, JANET_NIL))
  ------------------
  |  |  806|    413|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:5): [True: 413, False: 0]
  |  |  |  Branch (806:6): [Folded, False: 413]
  |  |  ------------------
  |  |  807|    413|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|    413|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|    413|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|    413|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|    413|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|    413|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
38251|    413|        janet_panicf("unknown method %v invoked on %v", name, fiber->data[fiber->stackstart]);
38252|      0|    return callee;
38253|    413|}
janet.c:method_to_fun:
38241|    413|static Janet method_to_fun(Janet method, Janet obj) {
38242|    413|    return janet_get(obj, method);
38243|    413|}
janet.c:call_nonfn:
38234|  2.72M|static Janet call_nonfn(JanetFiber *fiber, Janet callee) {
38235|  2.72M|    int32_t argc = fiber->stacktop - fiber->stackstart;
38236|  2.72M|    fiber->stacktop = fiber->stackstart;
38237|  2.72M|    return janet_method_invoke(callee, argc, fiber->data + fiber->stacktop);
38238|  2.72M|}
janet.c:janet_check_can_resume:
39394|  86.4k|static JanetSignal janet_check_can_resume(JanetFiber *fiber, Janet *out, int is_cancel) {
39395|       |    /* Check conditions */
39396|  86.4k|    JanetFiberStatus old_status = janet_fiber_status(fiber);
39397|  86.4k|    if (janet_vm.stackn >= JANET_RECURSION_GUARD) {
  ------------------
  |  |  296|  86.4k|#define JANET_RECURSION_GUARD 1024
  ------------------
  |  Branch (39397:9): [True: 0, False: 86.4k]
  ------------------
39398|      0|        janet_fiber_set_status(fiber, JANET_STATUS_ERROR);
  ------------------
  |  |  849|      0|#define janet_fiber_set_status(f, s) do {\
  |  |  850|      0|    (f)->flags &= ~JANET_FIBER_STATUS_MASK;\
  |  |  ------------------
  |  |  |  |  830|      0|#define JANET_FIBER_STATUS_MASK 0x3F0000
  |  |  ------------------
  |  |  851|      0|    (f)->flags |= (s) << JANET_FIBER_STATUS_OFFSET;\
  |  |  ------------------
  |  |  |  |  832|      0|#define JANET_FIBER_STATUS_OFFSET 16
  |  |  ------------------
  |  |  852|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (852:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
39399|      0|        *out = janet_cstringv("C stack recursed too deeply");
  ------------------
  |  | 1826|      0|#define janet_cstringv(cstr) janet_wrap_string(janet_cstring(cstr))
  |  |  ------------------
  |  |  |  |  848|      0|#define janet_wrap_string(s) janet_nanbox_wrap_c((s), JANET_STRING)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|      0|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39400|      0|        return JANET_SIGNAL_ERROR;
39401|      0|    }
39402|       |    /* If a "task" fiber is trying to be used as a normal fiber, detect that. See bug #920.
39403|       |     * Fibers must be marked as root fibers manually, or by the ev scheduler. */
39404|  86.4k|    if (janet_vm.fiber != NULL && (fiber->gc.flags & JANET_FIBER_EV_GCFLAG_ROOT)) {
  ------------------
  |  |  844|      0|#define JANET_FIBER_EV_GCFLAG_ROOT 0x4000000
  ------------------
  |  Branch (39404:9): [True: 0, False: 86.4k]
  |  Branch (39404:35): [True: 0, False: 0]
  ------------------
39405|      0|#ifdef JANET_EV
39406|      0|        *out = janet_cstringv(is_cancel
  ------------------
  |  | 1826|      0|#define janet_cstringv(cstr) janet_wrap_string(janet_cstring(cstr))
  |  |  ------------------
  |  |  |  |  848|      0|#define janet_wrap_string(s) janet_nanbox_wrap_c((s), JANET_STRING)
  |  |  |  |  ------------------
  |  |  |  |  |  |  828|      0|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (828:33): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39407|      0|                              ? "cannot cancel root fiber, use ev/cancel"
39408|      0|                              : "cannot resume root fiber, use ev/go");
39409|       |#else
39410|       |        *out = janet_cstringv(is_cancel
39411|       |                              ? "cannot cancel root fiber"
39412|       |                              : "cannot resume root fiber");
39413|       |#endif
39414|      0|        return JANET_SIGNAL_ERROR;
39415|      0|    }
39416|  86.4k|    if (old_status == JANET_STATUS_ALIVE ||
  ------------------
  |  Branch (39416:9): [True: 0, False: 86.4k]
  ------------------
39417|  86.4k|            old_status == JANET_STATUS_DEAD ||
  ------------------
  |  Branch (39417:13): [True: 0, False: 86.4k]
  ------------------
39418|  86.4k|            (old_status >= JANET_STATUS_USER0 && old_status <= JANET_STATUS_USER4) ||
  ------------------
  |  Branch (39418:14): [True: 86.4k, False: 0]
  |  Branch (39418:50): [True: 0, False: 86.4k]
  ------------------
39419|  86.4k|            old_status == JANET_STATUS_ERROR) {
  ------------------
  |  Branch (39419:13): [True: 0, False: 86.4k]
  ------------------
39420|      0|        const uint8_t *str = janet_formatc("cannot resume fiber with status :%s",
39421|      0|                                           janet_status_names[old_status]);
39422|      0|        *out = janet_wrap_string(str);
  ------------------
  |  |  848|      0|#define janet_wrap_string(s) janet_nanbox_wrap_c((s), JANET_STRING)
  |  |  ------------------
  |  |  |  |  828|      0|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39423|      0|        return JANET_SIGNAL_ERROR;
39424|      0|    }
39425|  86.4k|    return JANET_SIGNAL_OK;
39426|  86.4k|}
janet.c:janet_continue_no_check:
39449|  86.4k|static JanetSignal janet_continue_no_check(JanetFiber *fiber, Janet in, Janet *out) {
39450|       |
39451|  86.4k|    JanetFiberStatus old_status = janet_fiber_status(fiber);
39452|       |
39453|  86.4k|#ifdef JANET_EV
39454|  86.4k|    janet_fiber_did_resume(fiber);
39455|  86.4k|#endif
39456|       |
39457|       |    /* Clear last value */
39458|  86.4k|    fiber->last_value = janet_wrap_nil();
  ------------------
  |  |  831|  86.4k|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|  86.4k|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  86.4k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  86.4k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39459|       |
39460|       |    /* Continue child fiber if it exists */
39461|  86.4k|    if (fiber->child) {
  ------------------
  |  Branch (39461:9): [True: 0, False: 86.4k]
  ------------------
39462|      0|        if (janet_vm.root_fiber == NULL) janet_vm.root_fiber = fiber;
  ------------------
  |  Branch (39462:13): [True: 0, False: 0]
  ------------------
39463|      0|        JanetFiber *child = fiber->child;
39464|      0|        uint32_t instr = (janet_stack_frame(fiber->data + fiber->frame)->pc)[0];
  ------------------
  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  ------------------
  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  ------------------
  ------------------
39465|      0|        janet_vm.stackn++;
39466|      0|        JanetSignal sig = janet_continue(child, in, &in);
39467|      0|        janet_vm.stackn--;
39468|      0|        if (janet_vm.root_fiber == fiber) janet_vm.root_fiber = NULL;
  ------------------
  |  Branch (39468:13): [True: 0, False: 0]
  ------------------
39469|      0|        if (sig != JANET_SIGNAL_OK && !(child->flags & (1 << sig))) {
  ------------------
  |  Branch (39469:13): [True: 0, False: 0]
  |  Branch (39469:39): [True: 0, False: 0]
  ------------------
39470|      0|            *out = in;
39471|      0|            janet_fiber_set_status(fiber, sig);
  ------------------
  |  |  849|      0|#define janet_fiber_set_status(f, s) do {\
  |  |  850|      0|    (f)->flags &= ~JANET_FIBER_STATUS_MASK;\
  |  |  ------------------
  |  |  |  |  830|      0|#define JANET_FIBER_STATUS_MASK 0x3F0000
  |  |  ------------------
  |  |  851|      0|    (f)->flags |= (s) << JANET_FIBER_STATUS_OFFSET;\
  |  |  ------------------
  |  |  |  |  832|      0|#define JANET_FIBER_STATUS_OFFSET 16
  |  |  ------------------
  |  |  852|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (852:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
39472|      0|            fiber->last_value = child->last_value;
39473|      0|            return sig;
39474|      0|        }
39475|       |        /* Check if we need any special handling for certain opcodes */
39476|      0|        switch (instr & 0x7F) {
39477|      0|            default:
  ------------------
  |  Branch (39477:13): [True: 0, False: 0]
  ------------------
39478|      0|                break;
39479|      0|            case JOP_NEXT: {
  ------------------
  |  Branch (39479:13): [True: 0, False: 0]
  ------------------
39480|      0|                if (sig == JANET_SIGNAL_OK ||
  ------------------
  |  Branch (39480:21): [True: 0, False: 0]
  ------------------
39481|      0|                        sig == JANET_SIGNAL_ERROR ||
  ------------------
  |  Branch (39481:25): [True: 0, False: 0]
  ------------------
39482|      0|                        sig == JANET_SIGNAL_USER0 ||
  ------------------
  |  Branch (39482:25): [True: 0, False: 0]
  ------------------
39483|      0|                        sig == JANET_SIGNAL_USER1 ||
  ------------------
  |  Branch (39483:25): [True: 0, False: 0]
  ------------------
39484|      0|                        sig == JANET_SIGNAL_USER2 ||
  ------------------
  |  Branch (39484:25): [True: 0, False: 0]
  ------------------
39485|      0|                        sig == JANET_SIGNAL_USER3 ||
  ------------------
  |  Branch (39485:25): [True: 0, False: 0]
  ------------------
39486|      0|                        sig == JANET_SIGNAL_USER4) {
  ------------------
  |  Branch (39486:25): [True: 0, False: 0]
  ------------------
39487|      0|                    in = janet_wrap_nil();
  ------------------
  |  |  831|      0|#define janet_wrap_nil() janet_nanbox_from_payload(JANET_NIL, 1)
  |  |  ------------------
  |  |  |  |  822|      0|    janet_nanbox_from_bits(janet_nanbox_tag(t) | (p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39488|      0|                } else {
39489|      0|                    in = janet_wrap_integer(0);
  ------------------
  |  |  967|      0|#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
  |  |  ------------------
  |  |  |  |  835|      0|#define janet_wrap_number(r) janet_nanbox_from_double(r)
  |  |  ------------------
  ------------------
39490|      0|                }
39491|      0|                break;
39492|      0|            }
39493|      0|        }
39494|      0|        fiber->child = NULL;
39495|      0|    }
39496|       |
39497|       |    /* Handle new fibers being resumed with a non-nil value */
39498|  86.4k|    if (old_status == JANET_STATUS_NEW && !janet_checktype(in, JANET_NIL)) {
  ------------------
  |  |  806|  86.4k|    (((t) == JANET_NUMBER) \
  |  |  ------------------
  |  |  |  Branch (806:6): [Folded, False: 86.4k]
  |  |  ------------------
  |  |  807|  86.4k|        ? janet_nanbox_isnumber(x) \
  |  |  ------------------
  |  |  |  |  803|      0|    (!isnan((x).number) || ((((x).u64 >> 47) & 0xF) == JANET_NUMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (803:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (803:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  808|  86.4k|        : janet_nanbox_checkauxtype((x), (t)))
  |  |  ------------------
  |  |  |  |  800|  86.4k|    (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  790|  86.4k|#define JANET_NANBOX_TAGBITS     0xFFFF800000000000llu
  |  |  |  |  ------------------
  |  |  |  |                   (((x).u64 & JANET_NANBOX_TAGBITS) == janet_nanbox_tag((type)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|  86.4k|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|  86.4k|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (39498:9): [True: 86.4k, False: 0]
  |  Branch (39498:43): [True: 0, False: 86.4k]
  ------------------
39499|      0|        Janet *stack = fiber->data + fiber->frame;
39500|      0|        JanetFunction *func = janet_stack_frame(stack)->func;
  ------------------
  |  |  854|      0|#define janet_stack_frame(s) ((JanetStackFrame *)((s) - JANET_FRAME_SIZE))
  |  |  ------------------
  |  |  |  | 1026|      0|#define JANET_FRAME_SIZE 4
  |  |  ------------------
  ------------------
39501|      0|        if (func) {
  ------------------
  |  Branch (39501:13): [True: 0, False: 0]
  ------------------
39502|      0|            if (func->def->arity > 0) {
  ------------------
  |  Branch (39502:17): [True: 0, False: 0]
  ------------------
39503|      0|                stack[0] = in;
39504|      0|            } else if (func->def->flags & JANET_FUNCDEF_FLAG_VARARG) {
  ------------------
  |  | 1097|      0|#define JANET_FUNCDEF_FLAG_VARARG 0x10000
  ------------------
  |  Branch (39504:24): [True: 0, False: 0]
  ------------------
39505|      0|                stack[0] = janet_wrap_tuple(janet_tuple_n(&in, 1));
  ------------------
  |  |  843|      0|#define janet_wrap_tuple(s) janet_nanbox_wrap_c((s), JANET_TUPLE)
  |  |  ------------------
  |  |  |  |  828|      0|    janet_nanbox_from_cpointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39506|      0|            }
39507|      0|        }
39508|      0|    }
39509|       |
39510|       |    /* If this is a nested continue (root_fiber already set), root the fiber
39511|       |     * so it survives GC. janet_collect only marks root_fiber, so without
39512|       |     * this a nested fiber (e.g., from janet_pcall in a C function) would be
39513|       |     * invisible to GC and could be collected while actively running. */
39514|  86.4k|    int fiber_rooted = (janet_vm.root_fiber != NULL);
39515|  86.4k|    if (fiber_rooted) {
  ------------------
  |  Branch (39515:9): [True: 0, False: 86.4k]
  ------------------
39516|      0|        janet_gcroot(janet_wrap_fiber(fiber));
  ------------------
  |  |  844|      0|#define janet_wrap_fiber(s) janet_nanbox_wrap_((s), JANET_FIBER)
  |  |  ------------------
  |  |  |  |  825|      0|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39517|      0|    }
39518|       |
39519|       |    /* Save global state */
39520|  86.4k|    JanetTryState tstate;
39521|  86.4k|    JanetSignal sig = janet_try(&tstate);
  ------------------
  |  | 1981|  86.4k|#define janet_try(state) (janet_try_init(state), (JanetSignal) setjmp((state)->buf))
  ------------------
39522|  86.4k|    if (!sig) {
  ------------------
  |  Branch (39522:9): [True: 86.4k, False: 0]
  ------------------
39523|       |        /* Normal setup */
39524|  86.4k|        if (janet_vm.root_fiber == NULL) janet_vm.root_fiber = fiber;
  ------------------
  |  Branch (39524:13): [True: 86.4k, False: 0]
  ------------------
39525|  86.4k|        janet_vm.fiber = fiber;
39526|  86.4k|        janet_fiber_set_status(fiber, JANET_STATUS_ALIVE);
  ------------------
  |  |  849|  86.4k|#define janet_fiber_set_status(f, s) do {\
  |  |  850|  86.4k|    (f)->flags &= ~JANET_FIBER_STATUS_MASK;\
  |  |  ------------------
  |  |  |  |  830|  86.4k|#define JANET_FIBER_STATUS_MASK 0x3F0000
  |  |  ------------------
  |  |  851|  86.4k|    (f)->flags |= (s) << JANET_FIBER_STATUS_OFFSET;\
  |  |  ------------------
  |  |  |  |  832|  86.4k|#define JANET_FIBER_STATUS_OFFSET 16
  |  |  ------------------
  |  |  852|  86.4k|} while (0)
  |  |  ------------------
  |  |  |  Branch (852:10): [Folded, False: 86.4k]
  |  |  ------------------
  ------------------
39527|  86.4k|        sig = run_vm(fiber, in);
39528|  86.4k|    }
39529|       |
39530|       |    /* Restore */
39531|  86.4k|    if (janet_vm.root_fiber == fiber) janet_vm.root_fiber = NULL;
  ------------------
  |  Branch (39531:9): [True: 86.4k, False: 0]
  ------------------
39532|  86.4k|    janet_fiber_set_status(fiber, sig);
  ------------------
  |  |  849|  86.4k|#define janet_fiber_set_status(f, s) do {\
  |  |  850|  86.4k|    (f)->flags &= ~JANET_FIBER_STATUS_MASK;\
  |  |  ------------------
  |  |  |  |  830|  86.4k|#define JANET_FIBER_STATUS_MASK 0x3F0000
  |  |  ------------------
  |  |  851|  86.4k|    (f)->flags |= (s) << JANET_FIBER_STATUS_OFFSET;\
  |  |  ------------------
  |  |  |  |  832|  86.4k|#define JANET_FIBER_STATUS_OFFSET 16
  |  |  ------------------
  |  |  852|  86.4k|} while (0)
  |  |  ------------------
  |  |  |  Branch (852:10): [Folded, False: 86.4k]
  |  |  ------------------
  ------------------
39533|  86.4k|    janet_restore(&tstate);
39534|  86.4k|    if (fiber_rooted) {
  ------------------
  |  Branch (39534:9): [True: 0, False: 86.4k]
  ------------------
39535|      0|        janet_gcunroot(janet_wrap_fiber(fiber));
  ------------------
  |  |  844|      0|#define janet_wrap_fiber(s) janet_nanbox_wrap_((s), JANET_FIBER)
  |  |  ------------------
  |  |  |  |  825|      0|    janet_nanbox_from_pointer((p), janet_nanbox_tag(t))
  |  |  |  |  ------------------
  |  |  |  |  |  |  793|      0|#define janet_nanbox_tag(type) (janet_nanbox_lowtag(type) << 47)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  792|      0|#define janet_nanbox_lowtag(type) ((uint64_t)(type) | 0x1FFF0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
39536|      0|    }
39537|  86.4k|    fiber->last_value = tstate.payload;
39538|  86.4k|    *out = tstate.payload;
39539|       |
39540|  86.4k|    return sig;
39541|  86.4k|}
janet.c:janet_method_invoke:
38196|  2.72M|static Janet janet_method_invoke(Janet method, int32_t argc, Janet *argv) {
38197|  2.72M|    switch (janet_type(method)) {
  ------------------
  |  |  795|  2.72M|    (isnan((x).number) \
  |  |  796|  2.72M|        ? (JanetType) (((x).u64 >> 47) & 0xF) \
  |  |  797|  2.72M|        : JANET_NUMBER)
  ------------------
  |  Branch (38197:13): [True: 2.72M, False: 0]
  ------------------
38198|      0|        case JANET_CFUNCTION:
  ------------------
  |  Branch (38198:9): [True: 0, False: 2.72M]
  ------------------
38199|      0|            return (janet_unwrap_cfunction(method))(argc, argv);
  ------------------
  |  |  869|      0|#define janet_unwrap_cfunction(x) ((JanetCFunction)janet_nanbox_to_pointer(x))
  ------------------
38200|      0|        case JANET_FUNCTION: {
  ------------------
  |  Branch (38200:9): [True: 0, False: 2.72M]
  ------------------
38201|      0|            JanetFunction *fun = janet_unwrap_function(method);
  ------------------
  |  |  868|      0|#define janet_unwrap_function(x) ((JanetFunction *)janet_nanbox_to_pointer(x))
  ------------------
38202|      0|            return janet_call(fun, argc, argv);
38203|      0|        }
38204|      0|        case JANET_ABSTRACT: {
  ------------------
  |  Branch (38204:9): [True: 0, False: 2.72M]
  ------------------
38205|      0|            JanetAbstract abst = janet_unwrap_abstract(method);
  ------------------
  |  |  866|      0|#define janet_unwrap_abstract(x) (janet_nanbox_to_pointer(x))
  ------------------
38206|      0|            const JanetAbstractType *at = janet_abstract_type(abst);
  ------------------
  |  | 1899|      0|#define janet_abstract_type(u) (janet_abstract_head(u)->type)
  |  |  ------------------
  |  |  |  | 1897|      0|#define janet_abstract_head(u) ((JanetAbstractHead *)((char *)u - offsetof(JanetAbstractHead, data)))
  |  |  ------------------
  ------------------
38207|      0|            if (NULL != at->call) {
  ------------------
  |  Branch (38207:17): [True: 0, False: 0]
  ------------------
38208|      0|                return at->call(abst, argc, argv);
38209|      0|            }
38210|      0|        }
38211|       |        /* fallthrough */
38212|  1.79M|        case JANET_STRING:
  ------------------
  |  Branch (38212:9): [True: 1.79M, False: 927k]
  ------------------
38213|  2.15M|        case JANET_BUFFER:
  ------------------
  |  Branch (38213:9): [True: 359k, False: 2.36M]
  ------------------
38214|  2.15M|        case JANET_TABLE:
  ------------------
  |  Branch (38214:9): [True: 0, False: 2.72M]
  ------------------
38215|  2.15M|        case JANET_STRUCT:
  ------------------
  |  Branch (38215:9): [True: 0, False: 2.72M]
  ------------------
38216|  2.72M|        case JANET_ARRAY:
  ------------------
  |  Branch (38216:9): [True: 567k, False: 2.15M]
  ------------------
38217|  2.72M|        case JANET_TUPLE: {
  ------------------
  |  Branch (38217:9): [True: 0, False: 2.72M]
  ------------------
38218|  2.72M|            if (argc != 1) {
  ------------------
  |  Branch (38218:17): [True: 0, False: 2.72M]
  ------------------
38219|      0|                janet_panicf("%v called with %d arguments, possibly expected 1", method, argc);
38220|      0|            }
38221|  2.72M|            return janet_in(method, argv[0]);
38222|  2.72M|        }
38223|      0|        default: {
  ------------------
  |  Branch (38223:9): [True: 0, False: 2.72M]
  ------------------
38224|      0|            if (argc != 1) {
  ------------------
  |  Branch (38224:17): [True: 0, False: 0]
  ------------------
38225|      0|                janet_panicf("%v called with %d arguments, possibly expected 1", method, argc);
38226|      0|            }
38227|      0|            return janet_in(argv[0], method);
38228|      0|        }
38229|  2.72M|    }
38230|  2.72M|}

LLVMFuzzerTestOneInput:
    9|    267|int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
   10|       |
   11|       |    /* init Janet */
   12|    267|    janet_init();
   13|       |
   14|       |    /* fuzz the compiler in src/core/compile.c: parse the untrusted source and
   15|       |       compile each produced form to bytecode */
   16|    267|    JanetTable *env = janet_core_env(NULL);
   17|    267|    JanetParser parser;
   18|    267|    janet_parser_init(&parser);
   19|       |
   20|    267|    JanetTryState tstate;
   21|    267|    if (janet_try(&tstate) == JANET_SIGNAL_OK) {
  ------------------
  |  | 1981|    267|#define janet_try(state) (janet_try_init(state), (JanetSignal) setjmp((state)->buf))
  ------------------
  |  Branch (21:9): [True: 267, False: 0]
  ------------------
   22|  23.5M|        for (size_t i = 0; i < size; i++) {
  ------------------
  |  Branch (22:28): [True: 23.5M, False: 89]
  ------------------
   23|  23.5M|            if (janet_parser_status(&parser) == JANET_PARSE_ERROR)
  ------------------
  |  Branch (23:17): [True: 178, False: 23.5M]
  ------------------
   24|    178|                break;
   25|  23.5M|            janet_parser_consume(&parser, data[i]);
   26|  23.5M|            while (janet_parser_has_more(&parser)) {
  ------------------
  |  Branch (26:20): [True: 30.0k, False: 23.5M]
  ------------------
   27|  30.0k|                Janet form = janet_parser_produce(&parser);
   28|  30.0k|                JanetCompileResult res = janet_compile(form, env, janet_cstring("fuzz"));
   29|  30.0k|                (void) res;
   30|  30.0k|            }
   31|  23.5M|        }
   32|    267|    }
   33|    267|    janet_restore(&tstate);
   34|       |
   35|    267|    janet_parser_deinit(&parser);
   36|       |
   37|       |    /* cleanup Janet */
   38|    267|    janet_deinit();
   39|       |
   40|    267|    return 0;
   41|    267|}

