flb_http_client.c:flb_log_check:
  103|  2.28k|static inline int flb_log_check(int l) {
  104|  2.28k|    struct flb_worker *w;
  105|  2.28k|    w = (struct flb_worker *) FLB_TLS_GET(flb_worker_ctx);
  ------------------
  |  |   34|  2.28k|#define FLB_TLS_GET(key)           key
  ------------------
  106|  2.28k|    if (!w && l <= 3) {
  ------------------
  |  Branch (106:9): [True: 2.28k, False: 0]
  |  Branch (106:15): [True: 1.03k, False: 1.25k]
  ------------------
  107|  1.03k|        return FLB_TRUE;
  ------------------
  |  |   26|  1.03k|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|  1.03k|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  108|  1.03k|    }
  109|       |
  110|  1.25k|    if (w == NULL || flb_worker_log_level(w) < l) {
  ------------------
  |  Branch (110:9): [True: 1.25k, False: 0]
  |  Branch (110:22): [True: 0, False: 0]
  ------------------
  111|  1.25k|        return FLB_FALSE;
  ------------------
  |  |   25|  1.25k|#define FLB_FALSE  0
  ------------------
  112|  1.25k|    }
  113|      0|    return FLB_TRUE;
  ------------------
  |  |   26|      0|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|      0|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  114|  1.25k|}
flb_log.c:flb_log_check:
  103|    810|static inline int flb_log_check(int l) {
  104|    810|    struct flb_worker *w;
  105|    810|    w = (struct flb_worker *) FLB_TLS_GET(flb_worker_ctx);
  ------------------
  |  |   34|    810|#define FLB_TLS_GET(key)           key
  ------------------
  106|    810|    if (!w && l <= 3) {
  ------------------
  |  Branch (106:9): [True: 810, False: 0]
  |  Branch (106:15): [True: 810, False: 0]
  ------------------
  107|    810|        return FLB_TRUE;
  ------------------
  |  |   26|    810|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    810|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  108|    810|    }
  109|       |
  110|      0|    if (w == NULL || flb_worker_log_level(w) < l) {
  ------------------
  |  Branch (110:9): [True: 0, False: 0]
  |  Branch (110:22): [True: 0, False: 0]
  ------------------
  111|      0|        return FLB_FALSE;
  ------------------
  |  |   25|      0|#define FLB_FALSE  0
  ------------------
  112|      0|    }
  113|      0|    return FLB_TRUE;
  ------------------
  |  |   26|      0|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|      0|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  114|      0|}

http_fuzzer.c:flb_malloc:
   67|  1.22k|void *flb_malloc(const size_t size) {
   68|       |
   69|  1.22k|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   70|       |   // 1% chance of failure
   71|  1.22k|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (71:8): [True: 0, False: 1.22k]
  ------------------
   72|      0|     return NULL;
   73|      0|   }
   74|  1.22k|#endif
   75|       |
   76|  1.22k|    if (size == 0) {
  ------------------
  |  Branch (76:9): [True: 0, False: 1.22k]
  ------------------
   77|      0|        return NULL;
   78|      0|    }
   79|       |
   80|  1.22k|    return malloc(size);
   81|  1.22k|}
http_fuzzer.c:flb_fuzz_get_probability:
   56|  1.22k|static inline int flb_fuzz_get_probability(int val) {
   57|  1.22k|  flb_malloc_p += 1;
   58|  1.22k|  flb_malloc_p = flb_malloc_p % flb_malloc_mod;
   59|  1.22k|  if (val > flb_malloc_p) {
  ------------------
  |  Branch (59:7): [True: 0, False: 1.22k]
  ------------------
   60|      0|    return 1;
   61|      0|  }
   62|  1.22k|  return 0;
   63|  1.22k|}
http_fuzzer.c:flb_free:
  126|  1.22k|static inline void flb_free(void *ptr) {
  127|  1.22k|    free(ptr);
  128|  1.22k|}
flb_config.c:flb_malloc:
   67|  31.6k|void *flb_malloc(const size_t size) {
   68|       |
   69|  31.6k|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   70|       |   // 1% chance of failure
   71|  31.6k|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (71:8): [True: 0, False: 31.6k]
  ------------------
   72|      0|     return NULL;
   73|      0|   }
   74|  31.6k|#endif
   75|       |
   76|  31.6k|    if (size == 0) {
  ------------------
  |  Branch (76:9): [True: 0, False: 31.6k]
  ------------------
   77|      0|        return NULL;
   78|      0|    }
   79|       |
   80|  31.6k|    return malloc(size);
   81|  31.6k|}
flb_config.c:flb_fuzz_get_probability:
   56|  32.0k|static inline int flb_fuzz_get_probability(int val) {
   57|  32.0k|  flb_malloc_p += 1;
   58|  32.0k|  flb_malloc_p = flb_malloc_p % flb_malloc_mod;
   59|  32.0k|  if (val > flb_malloc_p) {
  ------------------
  |  Branch (59:7): [True: 0, False: 32.0k]
  ------------------
   60|      0|    return 1;
   61|      0|  }
   62|  32.0k|  return 0;
   63|  32.0k|}
flb_config.c:flb_free:
  126|  32.0k|static inline void flb_free(void *ptr) {
  127|  32.0k|    free(ptr);
  128|  32.0k|}
flb_config.c:flb_calloc:
   84|    411|void *flb_calloc(size_t n, const size_t size) {
   85|    411|    if (size == 0) {
  ------------------
  |  Branch (85:9): [True: 0, False: 411]
  ------------------
   86|      0|        return NULL;
   87|      0|    }
   88|    411|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   89|       |   // Add chance of failure. Used by fuzzing to test error-handling code.
   90|    411|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (90:8): [True: 0, False: 411]
  ------------------
   91|      0|     return NULL;
   92|      0|   }
   93|    411|#endif
   94|       |
   95|    411|    return calloc(n, size);
   96|    411|}
flb_slist.c:flb_malloc:
   67|  13.1k|void *flb_malloc(const size_t size) {
   68|       |
   69|  13.1k|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   70|       |   // 1% chance of failure
   71|  13.1k|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (71:8): [True: 0, False: 13.1k]
  ------------------
   72|      0|     return NULL;
   73|      0|   }
   74|  13.1k|#endif
   75|       |
   76|  13.1k|    if (size == 0) {
  ------------------
  |  Branch (76:9): [True: 0, False: 13.1k]
  ------------------
   77|      0|        return NULL;
   78|      0|    }
   79|       |
   80|  13.1k|    return malloc(size);
   81|  13.1k|}
flb_slist.c:flb_fuzz_get_probability:
   56|  13.1k|static inline int flb_fuzz_get_probability(int val) {
   57|  13.1k|  flb_malloc_p += 1;
   58|  13.1k|  flb_malloc_p = flb_malloc_p % flb_malloc_mod;
   59|  13.1k|  if (val > flb_malloc_p) {
  ------------------
  |  Branch (59:7): [True: 0, False: 13.1k]
  ------------------
   60|      0|    return 1;
   61|      0|  }
   62|  13.1k|  return 0;
   63|  13.1k|}
flb_slist.c:flb_free:
  126|  13.1k|static inline void flb_free(void *ptr) {
  127|  13.1k|    free(ptr);
  128|  13.1k|}
flb_connection.c:flb_calloc:
   84|    411|void *flb_calloc(size_t n, const size_t size) {
   85|    411|    if (size == 0) {
  ------------------
  |  Branch (85:9): [True: 0, False: 411]
  ------------------
   86|      0|        return NULL;
   87|      0|    }
   88|    411|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   89|       |   // Add chance of failure. Used by fuzzing to test error-handling code.
   90|    411|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (90:8): [True: 0, False: 411]
  ------------------
   91|      0|     return NULL;
   92|      0|   }
   93|    411|#endif
   94|       |
   95|    411|    return calloc(n, size);
   96|    411|}
flb_connection.c:flb_fuzz_get_probability:
   56|    411|static inline int flb_fuzz_get_probability(int val) {
   57|    411|  flb_malloc_p += 1;
   58|    411|  flb_malloc_p = flb_malloc_p % flb_malloc_mod;
   59|    411|  if (val > flb_malloc_p) {
  ------------------
  |  Branch (59:7): [True: 0, False: 411]
  ------------------
   60|      0|    return 1;
   61|      0|  }
   62|    411|  return 0;
   63|    411|}
flb_connection.c:flb_free:
  126|    411|static inline void flb_free(void *ptr) {
  127|    411|    free(ptr);
  128|    411|}
flb_upstream.c:flb_calloc:
   84|    411|void *flb_calloc(size_t n, const size_t size) {
   85|    411|    if (size == 0) {
  ------------------
  |  Branch (85:9): [True: 0, False: 411]
  ------------------
   86|      0|        return NULL;
   87|      0|    }
   88|    411|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   89|       |   // Add chance of failure. Used by fuzzing to test error-handling code.
   90|    411|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (90:8): [True: 0, False: 411]
  ------------------
   91|      0|     return NULL;
   92|      0|   }
   93|    411|#endif
   94|       |
   95|    411|    return calloc(n, size);
   96|    411|}
flb_upstream.c:flb_fuzz_get_probability:
   56|    822|static inline int flb_fuzz_get_probability(int val) {
   57|    822|  flb_malloc_p += 1;
   58|    822|  flb_malloc_p = flb_malloc_p % flb_malloc_mod;
   59|    822|  if (val > flb_malloc_p) {
  ------------------
  |  Branch (59:7): [True: 0, False: 822]
  ------------------
   60|      0|    return 1;
   61|      0|  }
   62|    822|  return 0;
   63|    822|}
flb_upstream.c:flb_free:
  126|  2.05k|static inline void flb_free(void *ptr) {
  127|  2.05k|    free(ptr);
  128|  2.05k|}
flb_upstream.c:flb_malloc:
   67|    411|void *flb_malloc(const size_t size) {
   68|       |
   69|    411|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   70|       |   // 1% chance of failure
   71|    411|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (71:8): [True: 0, False: 411]
  ------------------
   72|      0|     return NULL;
   73|      0|   }
   74|    411|#endif
   75|       |
   76|    411|    if (size == 0) {
  ------------------
  |  Branch (76:9): [True: 0, False: 411]
  ------------------
   77|      0|        return NULL;
   78|      0|    }
   79|       |
   80|    411|    return malloc(size);
   81|    411|}
flb_plugin.c:flb_malloc:
   67|    411|void *flb_malloc(const size_t size) {
   68|       |
   69|    411|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   70|       |   // 1% chance of failure
   71|    411|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (71:8): [True: 0, False: 411]
  ------------------
   72|      0|     return NULL;
   73|      0|   }
   74|    411|#endif
   75|       |
   76|    411|    if (size == 0) {
  ------------------
  |  Branch (76:9): [True: 0, False: 411]
  ------------------
   77|      0|        return NULL;
   78|      0|    }
   79|       |
   80|    411|    return malloc(size);
   81|    411|}
flb_plugin.c:flb_fuzz_get_probability:
   56|    411|static inline int flb_fuzz_get_probability(int val) {
   57|    411|  flb_malloc_p += 1;
   58|    411|  flb_malloc_p = flb_malloc_p % flb_malloc_mod;
   59|    411|  if (val > flb_malloc_p) {
  ------------------
  |  Branch (59:7): [True: 0, False: 411]
  ------------------
   60|      0|    return 1;
   61|      0|  }
   62|    411|  return 0;
   63|    411|}
flb_plugin.c:flb_free:
  126|    411|static inline void flb_free(void *ptr) {
  127|    411|    free(ptr);
  128|    411|}
flb_http_client.c:flb_calloc:
   84|  1.64k|void *flb_calloc(size_t n, const size_t size) {
   85|  1.64k|    if (size == 0) {
  ------------------
  |  Branch (85:9): [True: 0, False: 1.64k]
  ------------------
   86|      0|        return NULL;
   87|      0|    }
   88|  1.64k|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   89|       |   // Add chance of failure. Used by fuzzing to test error-handling code.
   90|  1.64k|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (90:8): [True: 0, False: 1.64k]
  ------------------
   91|      0|     return NULL;
   92|      0|   }
   93|  1.64k|#endif
   94|       |
   95|  1.64k|    return calloc(n, size);
   96|  1.64k|}
flb_http_client.c:flb_fuzz_get_probability:
   56|  3.73k|static inline int flb_fuzz_get_probability(int val) {
   57|  3.73k|  flb_malloc_p += 1;
   58|  3.73k|  flb_malloc_p = flb_malloc_p % flb_malloc_mod;
   59|  3.73k|  if (val > flb_malloc_p) {
  ------------------
  |  Branch (59:7): [True: 0, False: 3.73k]
  ------------------
   60|      0|    return 1;
   61|      0|  }
   62|  3.73k|  return 0;
   63|  3.73k|}
flb_http_client.c:flb_free:
  126|  4.55k|static inline void flb_free(void *ptr) {
  127|  4.55k|    free(ptr);
  128|  4.55k|}
flb_http_client.c:flb_malloc:
   67|  2.09k|void *flb_malloc(const size_t size) {
   68|       |
   69|  2.09k|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   70|       |   // 1% chance of failure
   71|  2.09k|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (71:8): [True: 0, False: 2.09k]
  ------------------
   72|      0|     return NULL;
   73|      0|   }
   74|  2.09k|#endif
   75|       |
   76|  2.09k|    if (size == 0) {
  ------------------
  |  Branch (76:9): [True: 0, False: 2.09k]
  ------------------
   77|      0|        return NULL;
   78|      0|    }
   79|       |
   80|  2.09k|    return malloc(size);
   81|  2.09k|}
flb_http_client.c:flb_realloc:
  100|    213|{
  101|    213|    return realloc(ptr, size);
  102|    213|}
flb_config_format.c:flb_calloc:
   84|    411|void *flb_calloc(size_t n, const size_t size) {
   85|    411|    if (size == 0) {
  ------------------
  |  Branch (85:9): [True: 0, False: 411]
  ------------------
   86|      0|        return NULL;
   87|      0|    }
   88|    411|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   89|       |   // Add chance of failure. Used by fuzzing to test error-handling code.
   90|    411|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (90:8): [True: 0, False: 411]
  ------------------
   91|      0|     return NULL;
   92|      0|   }
   93|    411|#endif
   94|       |
   95|    411|    return calloc(n, size);
   96|    411|}
flb_config_format.c:flb_fuzz_get_probability:
   56|    822|static inline int flb_fuzz_get_probability(int val) {
   57|    822|  flb_malloc_p += 1;
   58|    822|  flb_malloc_p = flb_malloc_p % flb_malloc_mod;
   59|    822|  if (val > flb_malloc_p) {
  ------------------
  |  Branch (59:7): [True: 0, False: 822]
  ------------------
   60|      0|    return 1;
   61|      0|  }
   62|    822|  return 0;
   63|    822|}
flb_config_format.c:flb_free:
  126|    822|static inline void flb_free(void *ptr) {
  127|    822|    free(ptr);
  128|    822|}
flb_config_format.c:flb_malloc:
   67|    411|void *flb_malloc(const size_t size) {
   68|       |
   69|    411|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   70|       |   // 1% chance of failure
   71|    411|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (71:8): [True: 0, False: 411]
  ------------------
   72|      0|     return NULL;
   73|      0|   }
   74|    411|#endif
   75|       |
   76|    411|    if (size == 0) {
  ------------------
  |  Branch (76:9): [True: 0, False: 411]
  ------------------
   77|      0|        return NULL;
   78|      0|    }
   79|       |
   80|    411|    return malloc(size);
   81|    411|}
flb_parser.c:flb_calloc:
   84|    822|void *flb_calloc(size_t n, const size_t size) {
   85|    822|    if (size == 0) {
  ------------------
  |  Branch (85:9): [True: 0, False: 822]
  ------------------
   86|      0|        return NULL;
   87|      0|    }
   88|    822|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   89|       |   // Add chance of failure. Used by fuzzing to test error-handling code.
   90|    822|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (90:8): [True: 0, False: 822]
  ------------------
   91|      0|     return NULL;
   92|      0|   }
   93|    822|#endif
   94|       |
   95|    822|    return calloc(n, size);
   96|    822|}
flb_parser.c:flb_fuzz_get_probability:
   56|  4.52k|static inline int flb_fuzz_get_probability(int val) {
   57|  4.52k|  flb_malloc_p += 1;
   58|  4.52k|  flb_malloc_p = flb_malloc_p % flb_malloc_mod;
   59|  4.52k|  if (val > flb_malloc_p) {
  ------------------
  |  Branch (59:7): [True: 0, False: 4.52k]
  ------------------
   60|      0|    return 1;
   61|      0|  }
   62|  4.52k|  return 0;
   63|  4.52k|}
flb_parser.c:flb_free:
  126|  4.52k|static inline void flb_free(void *ptr) {
  127|  4.52k|    free(ptr);
  128|  4.52k|}
flb_parser.c:flb_malloc:
   67|  3.69k|void *flb_malloc(const size_t size) {
   68|       |
   69|  3.69k|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   70|       |   // 1% chance of failure
   71|  3.69k|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (71:8): [True: 0, False: 3.69k]
  ------------------
   72|      0|     return NULL;
   73|      0|   }
   74|  3.69k|#endif
   75|       |
   76|  3.69k|    if (size == 0) {
  ------------------
  |  Branch (76:9): [True: 0, False: 3.69k]
  ------------------
   77|      0|        return NULL;
   78|      0|    }
   79|       |
   80|  3.69k|    return malloc(size);
   81|  3.69k|}
flb_regex.c:flb_malloc:
   67|  9.45k|void *flb_malloc(const size_t size) {
   68|       |
   69|  9.45k|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   70|       |   // 1% chance of failure
   71|  9.45k|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (71:8): [True: 0, False: 9.45k]
  ------------------
   72|      0|     return NULL;
   73|      0|   }
   74|  9.45k|#endif
   75|       |
   76|  9.45k|    if (size == 0) {
  ------------------
  |  Branch (76:9): [True: 0, False: 9.45k]
  ------------------
   77|      0|        return NULL;
   78|      0|    }
   79|       |
   80|  9.45k|    return malloc(size);
   81|  9.45k|}
flb_regex.c:flb_fuzz_get_probability:
   56|  9.45k|static inline int flb_fuzz_get_probability(int val) {
   57|  9.45k|  flb_malloc_p += 1;
   58|  9.45k|  flb_malloc_p = flb_malloc_p % flb_malloc_mod;
   59|  9.45k|  if (val > flb_malloc_p) {
  ------------------
  |  Branch (59:7): [True: 0, False: 9.45k]
  ------------------
   60|      0|    return 1;
   61|      0|  }
   62|  9.45k|  return 0;
   63|  9.45k|}
flb_regex.c:flb_free:
  126|  9.45k|static inline void flb_free(void *ptr) {
  127|  9.45k|    free(ptr);
  128|  9.45k|}
flb_kv.c:flb_calloc:
   84|  3.65k|void *flb_calloc(size_t n, const size_t size) {
   85|  3.65k|    if (size == 0) {
  ------------------
  |  Branch (85:9): [True: 0, False: 3.65k]
  ------------------
   86|      0|        return NULL;
   87|      0|    }
   88|  3.65k|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   89|       |   // Add chance of failure. Used by fuzzing to test error-handling code.
   90|  3.65k|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (90:8): [True: 0, False: 3.65k]
  ------------------
   91|      0|     return NULL;
   92|      0|   }
   93|  3.65k|#endif
   94|       |
   95|  3.65k|    return calloc(n, size);
   96|  3.65k|}
flb_kv.c:flb_fuzz_get_probability:
   56|  3.65k|static inline int flb_fuzz_get_probability(int val) {
   57|  3.65k|  flb_malloc_p += 1;
   58|  3.65k|  flb_malloc_p = flb_malloc_p % flb_malloc_mod;
   59|  3.65k|  if (val > flb_malloc_p) {
  ------------------
  |  Branch (59:7): [True: 0, False: 3.65k]
  ------------------
   60|      0|    return 1;
   61|      0|  }
   62|  3.65k|  return 0;
   63|  3.65k|}
flb_kv.c:flb_free:
  126|  3.65k|static inline void flb_free(void *ptr) {
  127|  3.65k|    free(ptr);
  128|  3.65k|}
flb_env.c:flb_malloc:
   67|    411|void *flb_malloc(const size_t size) {
   68|       |
   69|    411|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   70|       |   // 1% chance of failure
   71|    411|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (71:8): [True: 0, False: 411]
  ------------------
   72|      0|     return NULL;
   73|      0|   }
   74|    411|#endif
   75|       |
   76|    411|    if (size == 0) {
  ------------------
  |  Branch (76:9): [True: 0, False: 411]
  ------------------
   77|      0|        return NULL;
   78|      0|    }
   79|       |
   80|    411|    return malloc(size);
   81|    411|}
flb_env.c:flb_fuzz_get_probability:
   56|    411|static inline int flb_fuzz_get_probability(int val) {
   57|    411|  flb_malloc_p += 1;
   58|    411|  flb_malloc_p = flb_malloc_p % flb_malloc_mod;
   59|    411|  if (val > flb_malloc_p) {
  ------------------
  |  Branch (59:7): [True: 0, False: 411]
  ------------------
   60|      0|    return 1;
   61|      0|  }
   62|    411|  return 0;
   63|    411|}
flb_env.c:flb_free:
  126|    411|static inline void flb_free(void *ptr) {
  127|    411|    free(ptr);
  128|    411|}
flb_hash_table.c:flb_calloc:
   84|    822|void *flb_calloc(size_t n, const size_t size) {
   85|    822|    if (size == 0) {
  ------------------
  |  Branch (85:9): [True: 0, False: 822]
  ------------------
   86|      0|        return NULL;
   87|      0|    }
   88|    822|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   89|       |   // Add chance of failure. Used by fuzzing to test error-handling code.
   90|    822|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (90:8): [True: 0, False: 822]
  ------------------
   91|      0|     return NULL;
   92|      0|   }
   93|    822|#endif
   94|       |
   95|    822|    return calloc(n, size);
   96|    822|}
flb_hash_table.c:flb_fuzz_get_probability:
   56|    822|static inline int flb_fuzz_get_probability(int val) {
   57|    822|  flb_malloc_p += 1;
   58|    822|  flb_malloc_p = flb_malloc_p % flb_malloc_mod;
   59|    822|  if (val > flb_malloc_p) {
  ------------------
  |  Branch (59:7): [True: 0, False: 822]
  ------------------
   60|      0|    return 1;
   61|      0|  }
   62|    822|  return 0;
   63|    822|}
flb_hash_table.c:flb_free:
  126|    822|static inline void flb_free(void *ptr) {
  127|    822|    free(ptr);
  128|    822|}
flb_sds.c:flb_malloc:
   67|  36.4k|void *flb_malloc(const size_t size) {
   68|       |
   69|  36.4k|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   70|       |   // 1% chance of failure
   71|  36.4k|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (71:8): [True: 0, False: 36.4k]
  ------------------
   72|      0|     return NULL;
   73|      0|   }
   74|  36.4k|#endif
   75|       |
   76|  36.4k|    if (size == 0) {
  ------------------
  |  Branch (76:9): [True: 0, False: 36.4k]
  ------------------
   77|      0|        return NULL;
   78|      0|    }
   79|       |
   80|  36.4k|    return malloc(size);
   81|  36.4k|}
flb_sds.c:flb_fuzz_get_probability:
   56|  36.4k|static inline int flb_fuzz_get_probability(int val) {
   57|  36.4k|  flb_malloc_p += 1;
   58|  36.4k|  flb_malloc_p = flb_malloc_p % flb_malloc_mod;
   59|  36.4k|  if (val > flb_malloc_p) {
  ------------------
  |  Branch (59:7): [True: 0, False: 36.4k]
  ------------------
   60|      0|    return 1;
   61|      0|  }
   62|  36.4k|  return 0;
   63|  36.4k|}
flb_sds.c:flb_realloc:
  100|    822|{
  101|    822|    return realloc(ptr, size);
  102|    822|}
flb_sds.c:flb_free:
  126|  36.4k|static inline void flb_free(void *ptr) {
  127|  36.4k|    free(ptr);
  128|  36.4k|}
flb_kernel.c:flb_malloc:
   67|    822|void *flb_malloc(const size_t size) {
   68|       |
   69|    822|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   70|       |   // 1% chance of failure
   71|    822|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (71:8): [True: 0, False: 822]
  ------------------
   72|      0|     return NULL;
   73|      0|   }
   74|    822|#endif
   75|       |
   76|    822|    if (size == 0) {
  ------------------
  |  Branch (76:9): [True: 0, False: 822]
  ------------------
   77|      0|        return NULL;
   78|      0|    }
   79|       |
   80|    822|    return malloc(size);
   81|    822|}
flb_kernel.c:flb_fuzz_get_probability:
   56|    822|static inline int flb_fuzz_get_probability(int val) {
   57|    822|  flb_malloc_p += 1;
   58|    822|  flb_malloc_p = flb_malloc_p % flb_malloc_mod;
   59|    822|  if (val > flb_malloc_p) {
  ------------------
  |  Branch (59:7): [True: 0, False: 822]
  ------------------
   60|      0|    return 1;
   61|      0|  }
   62|    822|  return 0;
   63|    822|}
flb_kernel.c:flb_free:
  126|    822|static inline void flb_free(void *ptr) {
  127|    822|    free(ptr);
  128|    822|}
flb_ml_parser.c:flb_calloc:
   84|  2.46k|void *flb_calloc(size_t n, const size_t size) {
   85|  2.46k|    if (size == 0) {
  ------------------
  |  Branch (85:9): [True: 0, False: 2.46k]
  ------------------
   86|      0|        return NULL;
   87|      0|    }
   88|  2.46k|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   89|       |   // Add chance of failure. Used by fuzzing to test error-handling code.
   90|  2.46k|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (90:8): [True: 0, False: 2.46k]
  ------------------
   91|      0|     return NULL;
   92|      0|   }
   93|  2.46k|#endif
   94|       |
   95|  2.46k|    return calloc(n, size);
   96|  2.46k|}
flb_ml_parser.c:flb_fuzz_get_probability:
   56|  2.46k|static inline int flb_fuzz_get_probability(int val) {
   57|  2.46k|  flb_malloc_p += 1;
   58|  2.46k|  flb_malloc_p = flb_malloc_p % flb_malloc_mod;
   59|  2.46k|  if (val > flb_malloc_p) {
  ------------------
  |  Branch (59:7): [True: 0, False: 2.46k]
  ------------------
   60|      0|    return 1;
   61|      0|  }
   62|  2.46k|  return 0;
   63|  2.46k|}
flb_ml_parser.c:flb_free:
  126|  2.46k|static inline void flb_free(void *ptr) {
  127|  2.46k|    free(ptr);
  128|  2.46k|}
flb_ml_rule.c:flb_calloc:
   84|  9.04k|void *flb_calloc(size_t n, const size_t size) {
   85|  9.04k|    if (size == 0) {
  ------------------
  |  Branch (85:9): [True: 0, False: 9.04k]
  ------------------
   86|      0|        return NULL;
   87|      0|    }
   88|  9.04k|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   89|       |   // Add chance of failure. Used by fuzzing to test error-handling code.
   90|  9.04k|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (90:8): [True: 0, False: 9.04k]
  ------------------
   91|      0|     return NULL;
   92|      0|   }
   93|  9.04k|#endif
   94|       |
   95|  9.04k|    return calloc(n, size);
   96|  9.04k|}
flb_ml_rule.c:flb_fuzz_get_probability:
   56|  34.5k|static inline int flb_fuzz_get_probability(int val) {
   57|  34.5k|  flb_malloc_p += 1;
   58|  34.5k|  flb_malloc_p = flb_malloc_p % flb_malloc_mod;
   59|  34.5k|  if (val > flb_malloc_p) {
  ------------------
  |  Branch (59:7): [True: 0, False: 34.5k]
  ------------------
   60|      0|    return 1;
   61|      0|  }
   62|  34.5k|  return 0;
   63|  34.5k|}
flb_ml_rule.c:flb_free:
  126|  34.5k|static inline void flb_free(void *ptr) {
  127|  34.5k|    free(ptr);
  128|  34.5k|}
flb_ml_rule.c:flb_malloc:
   67|  25.4k|void *flb_malloc(const size_t size) {
   68|       |
   69|  25.4k|#ifdef FLB_HAVE_TESTS_OSSFUZZ
   70|       |   // 1% chance of failure
   71|  25.4k|   if (flb_fuzz_get_probability(1)) {
  ------------------
  |  Branch (71:8): [True: 0, False: 25.4k]
  ------------------
   72|      0|     return NULL;
   73|      0|   }
   74|  25.4k|#endif
   75|       |
   76|  25.4k|    if (size == 0) {
  ------------------
  |  Branch (76:9): [True: 0, False: 25.4k]
  ------------------
   77|      0|        return NULL;
   78|      0|    }
   79|       |
   80|  25.4k|    return malloc(size);
   81|  25.4k|}

flb_plugins_register:
  112|    411|{
  113|    411|    struct flb_custom_plugin *custom;
  114|    411|    struct flb_input_plugin *in;
  115|    411|    struct flb_output_plugin *out;
  116|    411|    struct flb_filter_plugin *filter;
  117|    411|    struct flb_processor_plugin *processor;
  118|       |
  119|       |
  120|    411|    custom = flb_malloc(sizeof(struct flb_custom_plugin));
  121|    411|    if (!custom) {
  ------------------
  |  Branch (121:9): [True: 0, False: 411]
  ------------------
  122|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  123|      0|        return -1;
  124|      0|    }
  125|    411|    memcpy(custom, &custom_calyptia_plugin, sizeof(struct flb_custom_plugin));
  126|    411|    mk_list_add(&custom->_head, &config->custom_plugins);
  127|       |
  128|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  129|    411|    if (!in) {
  ------------------
  |  Branch (129:9): [True: 0, False: 411]
  ------------------
  130|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  131|      0|        return -1;
  132|      0|    }
  133|    411|    memcpy(in, &in_blob_plugin, sizeof(struct flb_input_plugin));
  134|    411|    mk_list_add(&in->_head, &config->in_plugins);
  135|       |
  136|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  137|    411|    if (!in) {
  ------------------
  |  Branch (137:9): [True: 0, False: 411]
  ------------------
  138|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  139|      0|        return -1;
  140|      0|    }
  141|    411|    memcpy(in, &in_docker_events_plugin, sizeof(struct flb_input_plugin));
  142|    411|    mk_list_add(&in->_head, &config->in_plugins);
  143|       |
  144|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  145|    411|    if (!in) {
  ------------------
  |  Branch (145:9): [True: 0, False: 411]
  ------------------
  146|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  147|      0|        return -1;
  148|      0|    }
  149|    411|    memcpy(in, &in_podman_metrics_plugin, sizeof(struct flb_input_plugin));
  150|    411|    mk_list_add(&in->_head, &config->in_plugins);
  151|       |
  152|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  153|    411|    if (!in) {
  ------------------
  |  Branch (153:9): [True: 0, False: 411]
  ------------------
  154|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  155|      0|        return -1;
  156|      0|    }
  157|    411|    memcpy(in, &in_process_exporter_metrics_plugin, sizeof(struct flb_input_plugin));
  158|    411|    mk_list_add(&in->_head, &config->in_plugins);
  159|       |
  160|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  161|    411|    if (!in) {
  ------------------
  |  Branch (161:9): [True: 0, False: 411]
  ------------------
  162|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  163|      0|        return -1;
  164|      0|    }
  165|    411|    memcpy(in, &in_node_exporter_metrics_plugin, sizeof(struct flb_input_plugin));
  166|    411|    mk_list_add(&in->_head, &config->in_plugins);
  167|       |
  168|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  169|    411|    if (!in) {
  ------------------
  |  Branch (169:9): [True: 0, False: 411]
  ------------------
  170|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  171|      0|        return -1;
  172|      0|    }
  173|    411|    memcpy(in, &in_kubernetes_events_plugin, sizeof(struct flb_input_plugin));
  174|    411|    mk_list_add(&in->_head, &config->in_plugins);
  175|       |
  176|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  177|    411|    if (!in) {
  ------------------
  |  Branch (177:9): [True: 0, False: 411]
  ------------------
  178|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  179|      0|        return -1;
  180|      0|    }
  181|    411|    memcpy(in, &in_kafka_plugin, sizeof(struct flb_input_plugin));
  182|    411|    mk_list_add(&in->_head, &config->in_plugins);
  183|       |
  184|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  185|    411|    if (!in) {
  ------------------
  |  Branch (185:9): [True: 0, False: 411]
  ------------------
  186|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  187|      0|        return -1;
  188|      0|    }
  189|    411|    memcpy(in, &in_fluentbit_metrics_plugin, sizeof(struct flb_input_plugin));
  190|    411|    mk_list_add(&in->_head, &config->in_plugins);
  191|       |
  192|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  193|    411|    if (!in) {
  ------------------
  |  Branch (193:9): [True: 0, False: 411]
  ------------------
  194|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  195|      0|        return -1;
  196|      0|    }
  197|    411|    memcpy(in, &in_prometheus_scrape_plugin, sizeof(struct flb_input_plugin));
  198|    411|    mk_list_add(&in->_head, &config->in_plugins);
  199|       |
  200|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  201|    411|    if (!in) {
  ------------------
  |  Branch (201:9): [True: 0, False: 411]
  ------------------
  202|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  203|      0|        return -1;
  204|      0|    }
  205|    411|    memcpy(in, &in_emitter_plugin, sizeof(struct flb_input_plugin));
  206|    411|    mk_list_add(&in->_head, &config->in_plugins);
  207|       |
  208|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  209|    411|    if (!in) {
  ------------------
  |  Branch (209:9): [True: 0, False: 411]
  ------------------
  210|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  211|      0|        return -1;
  212|      0|    }
  213|    411|    memcpy(in, &in_dummy_plugin, sizeof(struct flb_input_plugin));
  214|    411|    mk_list_add(&in->_head, &config->in_plugins);
  215|       |
  216|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  217|    411|    if (!in) {
  ------------------
  |  Branch (217:9): [True: 0, False: 411]
  ------------------
  218|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  219|      0|        return -1;
  220|      0|    }
  221|    411|    memcpy(in, &in_http_plugin, sizeof(struct flb_input_plugin));
  222|    411|    mk_list_add(&in->_head, &config->in_plugins);
  223|       |
  224|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  225|    411|    if (!in) {
  ------------------
  |  Branch (225:9): [True: 0, False: 411]
  ------------------
  226|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  227|      0|        return -1;
  228|      0|    }
  229|    411|    memcpy(in, &in_statsd_plugin, sizeof(struct flb_input_plugin));
  230|    411|    mk_list_add(&in->_head, &config->in_plugins);
  231|       |
  232|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  233|    411|    if (!in) {
  ------------------
  |  Branch (233:9): [True: 0, False: 411]
  ------------------
  234|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  235|      0|        return -1;
  236|      0|    }
  237|    411|    memcpy(in, &in_opentelemetry_plugin, sizeof(struct flb_input_plugin));
  238|    411|    mk_list_add(&in->_head, &config->in_plugins);
  239|       |
  240|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  241|    411|    if (!in) {
  ------------------
  |  Branch (241:9): [True: 0, False: 411]
  ------------------
  242|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  243|      0|        return -1;
  244|      0|    }
  245|    411|    memcpy(in, &in_elasticsearch_plugin, sizeof(struct flb_input_plugin));
  246|    411|    mk_list_add(&in->_head, &config->in_plugins);
  247|       |
  248|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  249|    411|    if (!in) {
  ------------------
  |  Branch (249:9): [True: 0, False: 411]
  ------------------
  250|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  251|      0|        return -1;
  252|      0|    }
  253|    411|    memcpy(in, &in_calyptia_fleet_plugin, sizeof(struct flb_input_plugin));
  254|    411|    mk_list_add(&in->_head, &config->in_plugins);
  255|       |
  256|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  257|    411|    if (!in) {
  ------------------
  |  Branch (257:9): [True: 0, False: 411]
  ------------------
  258|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  259|      0|        return -1;
  260|      0|    }
  261|    411|    memcpy(in, &in_splunk_plugin, sizeof(struct flb_input_plugin));
  262|    411|    mk_list_add(&in->_head, &config->in_plugins);
  263|       |
  264|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  265|    411|    if (!in) {
  ------------------
  |  Branch (265:9): [True: 0, False: 411]
  ------------------
  266|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  267|      0|        return -1;
  268|      0|    }
  269|    411|    memcpy(in, &in_prometheus_remote_write_plugin, sizeof(struct flb_input_plugin));
  270|    411|    mk_list_add(&in->_head, &config->in_plugins);
  271|       |
  272|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  273|    411|    if (!in) {
  ------------------
  |  Branch (273:9): [True: 0, False: 411]
  ------------------
  274|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  275|      0|        return -1;
  276|      0|    }
  277|    411|    memcpy(in, &in_event_type_plugin, sizeof(struct flb_input_plugin));
  278|    411|    mk_list_add(&in->_head, &config->in_plugins);
  279|       |
  280|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  281|    411|    if (!in) {
  ------------------
  |  Branch (281:9): [True: 0, False: 411]
  ------------------
  282|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  283|      0|        return -1;
  284|      0|    }
  285|    411|    memcpy(in, &in_storage_backlog_plugin, sizeof(struct flb_input_plugin));
  286|    411|    mk_list_add(&in->_head, &config->in_plugins);
  287|       |
  288|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  289|    411|    if (!in) {
  ------------------
  |  Branch (289:9): [True: 0, False: 411]
  ------------------
  290|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  291|      0|        return -1;
  292|      0|    }
  293|    411|    memcpy(in, &in_nginx_exporter_metrics_plugin, sizeof(struct flb_input_plugin));
  294|    411|    mk_list_add(&in->_head, &config->in_plugins);
  295|       |
  296|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  297|    411|    if (!in) {
  ------------------
  |  Branch (297:9): [True: 0, False: 411]
  ------------------
  298|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  299|      0|        return -1;
  300|      0|    }
  301|    411|    memcpy(in, &in_udp_plugin, sizeof(struct flb_input_plugin));
  302|    411|    mk_list_add(&in->_head, &config->in_plugins);
  303|       |
  304|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  305|    411|    if (!in) {
  ------------------
  |  Branch (305:9): [True: 0, False: 411]
  ------------------
  306|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  307|      0|        return -1;
  308|      0|    }
  309|    411|    memcpy(in, &in_exec_wasi_plugin, sizeof(struct flb_input_plugin));
  310|    411|    mk_list_add(&in->_head, &config->in_plugins);
  311|       |
  312|    411|    in = flb_malloc(sizeof(struct flb_input_plugin));
  313|    411|    if (!in) {
  ------------------
  |  Branch (313:9): [True: 0, False: 411]
  ------------------
  314|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  315|      0|        return -1;
  316|      0|    }
  317|    411|    memcpy(in, &in_lib_plugin, sizeof(struct flb_input_plugin));
  318|    411|    mk_list_add(&in->_head, &config->in_plugins);
  319|       |
  320|       |
  321|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  322|    411|    if (!out) {
  ------------------
  |  Branch (322:9): [True: 0, False: 411]
  ------------------
  323|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  324|      0|        return -1;
  325|      0|    }
  326|    411|    memcpy(out, &out_azure_blob_plugin, sizeof(struct flb_output_plugin));
  327|    411|    mk_list_add(&out->_head, &config->out_plugins);
  328|       |
  329|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  330|    411|    if (!out) {
  ------------------
  |  Branch (330:9): [True: 0, False: 411]
  ------------------
  331|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  332|      0|        return -1;
  333|      0|    }
  334|    411|    memcpy(out, &out_azure_logs_ingestion_plugin, sizeof(struct flb_output_plugin));
  335|    411|    mk_list_add(&out->_head, &config->out_plugins);
  336|       |
  337|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  338|    411|    if (!out) {
  ------------------
  |  Branch (338:9): [True: 0, False: 411]
  ------------------
  339|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  340|      0|        return -1;
  341|      0|    }
  342|    411|    memcpy(out, &out_azure_kusto_plugin, sizeof(struct flb_output_plugin));
  343|    411|    mk_list_add(&out->_head, &config->out_plugins);
  344|       |
  345|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  346|    411|    if (!out) {
  ------------------
  |  Branch (346:9): [True: 0, False: 411]
  ------------------
  347|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  348|      0|        return -1;
  349|      0|    }
  350|    411|    memcpy(out, &out_calyptia_plugin, sizeof(struct flb_output_plugin));
  351|    411|    mk_list_add(&out->_head, &config->out_plugins);
  352|       |
  353|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  354|    411|    if (!out) {
  ------------------
  |  Branch (354:9): [True: 0, False: 411]
  ------------------
  355|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  356|      0|        return -1;
  357|      0|    }
  358|    411|    memcpy(out, &out_exit_plugin, sizeof(struct flb_output_plugin));
  359|    411|    mk_list_add(&out->_head, &config->out_plugins);
  360|       |
  361|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  362|    411|    if (!out) {
  ------------------
  |  Branch (362:9): [True: 0, False: 411]
  ------------------
  363|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  364|      0|        return -1;
  365|      0|    }
  366|    411|    memcpy(out, &out_http_plugin, sizeof(struct flb_output_plugin));
  367|    411|    mk_list_add(&out->_head, &config->out_plugins);
  368|       |
  369|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  370|    411|    if (!out) {
  ------------------
  |  Branch (370:9): [True: 0, False: 411]
  ------------------
  371|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  372|      0|        return -1;
  373|      0|    }
  374|    411|    memcpy(out, &out_logdna_plugin, sizeof(struct flb_output_plugin));
  375|    411|    mk_list_add(&out->_head, &config->out_plugins);
  376|       |
  377|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  378|    411|    if (!out) {
  ------------------
  |  Branch (378:9): [True: 0, False: 411]
  ------------------
  379|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  380|      0|        return -1;
  381|      0|    }
  382|    411|    memcpy(out, &out_opensearch_plugin, sizeof(struct flb_output_plugin));
  383|    411|    mk_list_add(&out->_head, &config->out_plugins);
  384|       |
  385|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  386|    411|    if (!out) {
  ------------------
  |  Branch (386:9): [True: 0, False: 411]
  ------------------
  387|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  388|      0|        return -1;
  389|      0|    }
  390|    411|    memcpy(out, &out_oracle_log_analytics_plugin, sizeof(struct flb_output_plugin));
  391|    411|    mk_list_add(&out->_head, &config->out_plugins);
  392|       |
  393|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  394|    411|    if (!out) {
  ------------------
  |  Branch (394:9): [True: 0, False: 411]
  ------------------
  395|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  396|      0|        return -1;
  397|      0|    }
  398|    411|    memcpy(out, &out_skywalking_plugin, sizeof(struct flb_output_plugin));
  399|    411|    mk_list_add(&out->_head, &config->out_plugins);
  400|       |
  401|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  402|    411|    if (!out) {
  ------------------
  |  Branch (402:9): [True: 0, False: 411]
  ------------------
  403|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  404|      0|        return -1;
  405|      0|    }
  406|    411|    memcpy(out, &out_stdout_plugin, sizeof(struct flb_output_plugin));
  407|    411|    mk_list_add(&out->_head, &config->out_plugins);
  408|       |
  409|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  410|    411|    if (!out) {
  ------------------
  |  Branch (410:9): [True: 0, False: 411]
  ------------------
  411|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  412|      0|        return -1;
  413|      0|    }
  414|    411|    memcpy(out, &out_udp_plugin, sizeof(struct flb_output_plugin));
  415|    411|    mk_list_add(&out->_head, &config->out_plugins);
  416|       |
  417|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  418|    411|    if (!out) {
  ------------------
  |  Branch (418:9): [True: 0, False: 411]
  ------------------
  419|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  420|      0|        return -1;
  421|      0|    }
  422|    411|    memcpy(out, &out_td_plugin, sizeof(struct flb_output_plugin));
  423|    411|    mk_list_add(&out->_head, &config->out_plugins);
  424|       |
  425|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  426|    411|    if (!out) {
  ------------------
  |  Branch (426:9): [True: 0, False: 411]
  ------------------
  427|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  428|      0|        return -1;
  429|      0|    }
  430|    411|    memcpy(out, &out_lib_plugin, sizeof(struct flb_output_plugin));
  431|    411|    mk_list_add(&out->_head, &config->out_plugins);
  432|       |
  433|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  434|    411|    if (!out) {
  ------------------
  |  Branch (434:9): [True: 0, False: 411]
  ------------------
  435|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  436|      0|        return -1;
  437|      0|    }
  438|    411|    memcpy(out, &out_websocket_plugin, sizeof(struct flb_output_plugin));
  439|    411|    mk_list_add(&out->_head, &config->out_plugins);
  440|       |
  441|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  442|    411|    if (!out) {
  ------------------
  |  Branch (442:9): [True: 0, False: 411]
  ------------------
  443|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  444|      0|        return -1;
  445|      0|    }
  446|    411|    memcpy(out, &out_cloudwatch_logs_plugin, sizeof(struct flb_output_plugin));
  447|    411|    mk_list_add(&out->_head, &config->out_plugins);
  448|       |
  449|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  450|    411|    if (!out) {
  ------------------
  |  Branch (450:9): [True: 0, False: 411]
  ------------------
  451|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  452|      0|        return -1;
  453|      0|    }
  454|    411|    memcpy(out, &out_kinesis_firehose_plugin, sizeof(struct flb_output_plugin));
  455|    411|    mk_list_add(&out->_head, &config->out_plugins);
  456|       |
  457|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  458|    411|    if (!out) {
  ------------------
  |  Branch (458:9): [True: 0, False: 411]
  ------------------
  459|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  460|      0|        return -1;
  461|      0|    }
  462|    411|    memcpy(out, &out_kinesis_streams_plugin, sizeof(struct flb_output_plugin));
  463|    411|    mk_list_add(&out->_head, &config->out_plugins);
  464|       |
  465|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  466|    411|    if (!out) {
  ------------------
  |  Branch (466:9): [True: 0, False: 411]
  ------------------
  467|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  468|      0|        return -1;
  469|      0|    }
  470|    411|    memcpy(out, &out_opentelemetry_plugin, sizeof(struct flb_output_plugin));
  471|    411|    mk_list_add(&out->_head, &config->out_plugins);
  472|       |
  473|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  474|    411|    if (!out) {
  ------------------
  |  Branch (474:9): [True: 0, False: 411]
  ------------------
  475|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  476|      0|        return -1;
  477|      0|    }
  478|    411|    memcpy(out, &out_prometheus_exporter_plugin, sizeof(struct flb_output_plugin));
  479|    411|    mk_list_add(&out->_head, &config->out_plugins);
  480|       |
  481|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  482|    411|    if (!out) {
  ------------------
  |  Branch (482:9): [True: 0, False: 411]
  ------------------
  483|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  484|      0|        return -1;
  485|      0|    }
  486|    411|    memcpy(out, &out_prometheus_remote_write_plugin, sizeof(struct flb_output_plugin));
  487|    411|    mk_list_add(&out->_head, &config->out_plugins);
  488|       |
  489|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  490|    411|    if (!out) {
  ------------------
  |  Branch (490:9): [True: 0, False: 411]
  ------------------
  491|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  492|      0|        return -1;
  493|      0|    }
  494|    411|    memcpy(out, &out_s3_plugin, sizeof(struct flb_output_plugin));
  495|    411|    mk_list_add(&out->_head, &config->out_plugins);
  496|       |
  497|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  498|    411|    if (!out) {
  ------------------
  |  Branch (498:9): [True: 0, False: 411]
  ------------------
  499|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  500|      0|        return -1;
  501|      0|    }
  502|    411|    memcpy(out, &out_vivo_exporter_plugin, sizeof(struct flb_output_plugin));
  503|    411|    mk_list_add(&out->_head, &config->out_plugins);
  504|       |
  505|    411|    out = flb_malloc(sizeof(struct flb_output_plugin));
  506|    411|    if (!out) {
  ------------------
  |  Branch (506:9): [True: 0, False: 411]
  ------------------
  507|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  508|      0|        return -1;
  509|      0|    }
  510|    411|    memcpy(out, &out_chronicle_plugin, sizeof(struct flb_output_plugin));
  511|    411|    mk_list_add(&out->_head, &config->out_plugins);
  512|       |
  513|       |
  514|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  515|    411|    if (!filter) {
  ------------------
  |  Branch (515:9): [True: 0, False: 411]
  ------------------
  516|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  517|      0|        return -1;
  518|      0|    }
  519|    411|    memcpy(filter, &filter_alter_size_plugin, sizeof(struct flb_filter_plugin));
  520|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  521|       |
  522|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  523|    411|    if (!filter) {
  ------------------
  |  Branch (523:9): [True: 0, False: 411]
  ------------------
  524|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  525|      0|        return -1;
  526|      0|    }
  527|    411|    memcpy(filter, &filter_aws_plugin, sizeof(struct flb_filter_plugin));
  528|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  529|       |
  530|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  531|    411|    if (!filter) {
  ------------------
  |  Branch (531:9): [True: 0, False: 411]
  ------------------
  532|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  533|      0|        return -1;
  534|      0|    }
  535|    411|    memcpy(filter, &filter_checklist_plugin, sizeof(struct flb_filter_plugin));
  536|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  537|       |
  538|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  539|    411|    if (!filter) {
  ------------------
  |  Branch (539:9): [True: 0, False: 411]
  ------------------
  540|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  541|      0|        return -1;
  542|      0|    }
  543|    411|    memcpy(filter, &filter_ecs_plugin, sizeof(struct flb_filter_plugin));
  544|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  545|       |
  546|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  547|    411|    if (!filter) {
  ------------------
  |  Branch (547:9): [True: 0, False: 411]
  ------------------
  548|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  549|      0|        return -1;
  550|      0|    }
  551|    411|    memcpy(filter, &filter_record_modifier_plugin, sizeof(struct flb_filter_plugin));
  552|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  553|       |
  554|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  555|    411|    if (!filter) {
  ------------------
  |  Branch (555:9): [True: 0, False: 411]
  ------------------
  556|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  557|      0|        return -1;
  558|      0|    }
  559|    411|    memcpy(filter, &filter_sysinfo_plugin, sizeof(struct flb_filter_plugin));
  560|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  561|       |
  562|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  563|    411|    if (!filter) {
  ------------------
  |  Branch (563:9): [True: 0, False: 411]
  ------------------
  564|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  565|      0|        return -1;
  566|      0|    }
  567|    411|    memcpy(filter, &filter_throttle_plugin, sizeof(struct flb_filter_plugin));
  568|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  569|       |
  570|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  571|    411|    if (!filter) {
  ------------------
  |  Branch (571:9): [True: 0, False: 411]
  ------------------
  572|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  573|      0|        return -1;
  574|      0|    }
  575|    411|    memcpy(filter, &filter_type_converter_plugin, sizeof(struct flb_filter_plugin));
  576|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  577|       |
  578|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  579|    411|    if (!filter) {
  ------------------
  |  Branch (579:9): [True: 0, False: 411]
  ------------------
  580|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  581|      0|        return -1;
  582|      0|    }
  583|    411|    memcpy(filter, &filter_kubernetes_plugin, sizeof(struct flb_filter_plugin));
  584|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  585|       |
  586|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  587|    411|    if (!filter) {
  ------------------
  |  Branch (587:9): [True: 0, False: 411]
  ------------------
  588|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  589|      0|        return -1;
  590|      0|    }
  591|    411|    memcpy(filter, &filter_modify_plugin, sizeof(struct flb_filter_plugin));
  592|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  593|       |
  594|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  595|    411|    if (!filter) {
  ------------------
  |  Branch (595:9): [True: 0, False: 411]
  ------------------
  596|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  597|      0|        return -1;
  598|      0|    }
  599|    411|    memcpy(filter, &filter_multiline_plugin, sizeof(struct flb_filter_plugin));
  600|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  601|       |
  602|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  603|    411|    if (!filter) {
  ------------------
  |  Branch (603:9): [True: 0, False: 411]
  ------------------
  604|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  605|      0|        return -1;
  606|      0|    }
  607|    411|    memcpy(filter, &filter_nest_plugin, sizeof(struct flb_filter_plugin));
  608|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  609|       |
  610|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  611|    411|    if (!filter) {
  ------------------
  |  Branch (611:9): [True: 0, False: 411]
  ------------------
  612|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  613|      0|        return -1;
  614|      0|    }
  615|    411|    memcpy(filter, &filter_parser_plugin, sizeof(struct flb_filter_plugin));
  616|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  617|       |
  618|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  619|    411|    if (!filter) {
  ------------------
  |  Branch (619:9): [True: 0, False: 411]
  ------------------
  620|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  621|      0|        return -1;
  622|      0|    }
  623|    411|    memcpy(filter, &filter_expect_plugin, sizeof(struct flb_filter_plugin));
  624|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  625|       |
  626|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  627|    411|    if (!filter) {
  ------------------
  |  Branch (627:9): [True: 0, False: 411]
  ------------------
  628|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  629|      0|        return -1;
  630|      0|    }
  631|    411|    memcpy(filter, &filter_grep_plugin, sizeof(struct flb_filter_plugin));
  632|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  633|       |
  634|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  635|    411|    if (!filter) {
  ------------------
  |  Branch (635:9): [True: 0, False: 411]
  ------------------
  636|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  637|      0|        return -1;
  638|      0|    }
  639|    411|    memcpy(filter, &filter_rewrite_tag_plugin, sizeof(struct flb_filter_plugin));
  640|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  641|       |
  642|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  643|    411|    if (!filter) {
  ------------------
  |  Branch (643:9): [True: 0, False: 411]
  ------------------
  644|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  645|      0|        return -1;
  646|      0|    }
  647|    411|    memcpy(filter, &filter_log_to_metrics_plugin, sizeof(struct flb_filter_plugin));
  648|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  649|       |
  650|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  651|    411|    if (!filter) {
  ------------------
  |  Branch (651:9): [True: 0, False: 411]
  ------------------
  652|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  653|      0|        return -1;
  654|      0|    }
  655|    411|    memcpy(filter, &filter_stdout_plugin, sizeof(struct flb_filter_plugin));
  656|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  657|       |
  658|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  659|    411|    if (!filter) {
  ------------------
  |  Branch (659:9): [True: 0, False: 411]
  ------------------
  660|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  661|      0|        return -1;
  662|      0|    }
  663|    411|    memcpy(filter, &filter_geoip2_plugin, sizeof(struct flb_filter_plugin));
  664|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  665|       |
  666|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  667|    411|    if (!filter) {
  ------------------
  |  Branch (667:9): [True: 0, False: 411]
  ------------------
  668|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  669|      0|        return -1;
  670|      0|    }
  671|    411|    memcpy(filter, &filter_nightfall_plugin, sizeof(struct flb_filter_plugin));
  672|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  673|       |
  674|    411|    filter = flb_malloc(sizeof(struct flb_filter_plugin));
  675|    411|    if (!filter) {
  ------------------
  |  Branch (675:9): [True: 0, False: 411]
  ------------------
  676|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  677|      0|        return -1;
  678|      0|    }
  679|    411|    memcpy(filter, &filter_wasm_plugin, sizeof(struct flb_filter_plugin));
  680|    411|    mk_list_add(&filter->_head, &config->filter_plugins);
  681|       |
  682|       |
  683|    411|    processor = flb_malloc(sizeof(struct flb_processor_plugin));
  684|    411|    if (!processor) {
  ------------------
  |  Branch (684:9): [True: 0, False: 411]
  ------------------
  685|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  686|      0|        return -1;
  687|      0|    }
  688|    411|    memcpy(processor, &processor_content_modifier_plugin, sizeof(struct flb_processor_plugin));
  689|    411|    mk_list_add(&processor->_head, &config->processor_plugins);
  690|       |
  691|    411|    processor = flb_malloc(sizeof(struct flb_processor_plugin));
  692|    411|    if (!processor) {
  ------------------
  |  Branch (692:9): [True: 0, False: 411]
  ------------------
  693|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  694|      0|        return -1;
  695|      0|    }
  696|    411|    memcpy(processor, &processor_labels_plugin, sizeof(struct flb_processor_plugin));
  697|    411|    mk_list_add(&processor->_head, &config->processor_plugins);
  698|       |
  699|    411|    processor = flb_malloc(sizeof(struct flb_processor_plugin));
  700|    411|    if (!processor) {
  ------------------
  |  Branch (700:9): [True: 0, False: 411]
  ------------------
  701|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  702|      0|        return -1;
  703|      0|    }
  704|    411|    memcpy(processor, &processor_metrics_selector_plugin, sizeof(struct flb_processor_plugin));
  705|    411|    mk_list_add(&processor->_head, &config->processor_plugins);
  706|       |
  707|    411|    processor = flb_malloc(sizeof(struct flb_processor_plugin));
  708|    411|    if (!processor) {
  ------------------
  |  Branch (708:9): [True: 0, False: 411]
  ------------------
  709|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  710|      0|        return -1;
  711|      0|    }
  712|    411|    memcpy(processor, &processor_sql_plugin, sizeof(struct flb_processor_plugin));
  713|    411|    mk_list_add(&processor->_head, &config->processor_plugins);
  714|       |
  715|    411|    processor = flb_malloc(sizeof(struct flb_processor_plugin));
  716|    411|    if (!processor) {
  ------------------
  |  Branch (716:9): [True: 0, False: 411]
  ------------------
  717|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  718|      0|        return -1;
  719|      0|    }
  720|    411|    memcpy(processor, &processor_opentelemetry_envelope_plugin, sizeof(struct flb_processor_plugin));
  721|    411|    mk_list_add(&processor->_head, &config->processor_plugins);
  722|       |
  723|       |
  724|       |
  725|    411|    return 0;
  726|    411|}
flb_plugins_unregister:
  729|    411|{
  730|    411|    struct mk_list *tmp;
  731|    411|    struct mk_list *head;
  732|    411|    struct flb_custom_plugin *custom;
  733|    411|    struct flb_input_plugin *in;
  734|    411|    struct flb_output_plugin *out;
  735|    411|    struct flb_filter_plugin *filter;
  736|    411|    struct flb_processor_plugin *processor;
  737|       |
  738|    411|    mk_list_foreach_safe(head, tmp, &config->custom_plugins) {
  ------------------
  |  |  207|    822|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 411, False: 411]
  |  |  ------------------
  ------------------
  739|    411|        custom = mk_list_entry(head, struct flb_custom_plugin, _head);
  ------------------
  |  |  214|    411|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|    411|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|    411|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|    411|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  740|    411|        mk_list_del(&custom->_head);
  741|    411|        flb_free(custom);
  742|    411|    }
  743|       |
  744|  9.86k|    mk_list_foreach_safe(head, tmp, &config->in_plugins) {
  ------------------
  |  |  207|  10.2k|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 9.86k, False: 411]
  |  |  ------------------
  ------------------
  745|  9.86k|        in = mk_list_entry(head, struct flb_input_plugin, _head);
  ------------------
  |  |  214|  9.86k|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|  9.86k|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|  9.86k|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|  9.86k|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  746|  9.86k|        if(in->cb_destroy) {
  ------------------
  |  Branch (746:12): [True: 0, False: 9.86k]
  ------------------
  747|      0|            in->cb_destroy(in);
  748|      0|        }
  749|  9.86k|        mk_list_del(&in->_head);
  750|  9.86k|        flb_free(in);
  751|  9.86k|    }
  752|       |
  753|  9.86k|    mk_list_foreach_safe(head, tmp, &config->out_plugins) {
  ------------------
  |  |  207|  10.2k|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 9.86k, False: 411]
  |  |  ------------------
  ------------------
  754|  9.86k|        out = mk_list_entry(head, struct flb_output_plugin, _head);
  ------------------
  |  |  214|  9.86k|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|  9.86k|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|  9.86k|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|  9.86k|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  755|  9.86k|        if(out->cb_destroy) {
  ------------------
  |  Branch (755:12): [True: 0, False: 9.86k]
  ------------------
  756|      0|            out->cb_destroy(out);
  757|      0|        }
  758|  9.86k|        mk_list_del(&out->_head);
  759|  9.86k|        flb_free(out);
  760|  9.86k|    }
  761|       |
  762|  8.63k|    mk_list_foreach_safe(head, tmp, &config->filter_plugins) {
  ------------------
  |  |  207|  9.04k|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 8.63k, False: 411]
  |  |  ------------------
  ------------------
  763|  8.63k|        filter = mk_list_entry(head, struct flb_filter_plugin, _head);
  ------------------
  |  |  214|  8.63k|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|  8.63k|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|  8.63k|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|  8.63k|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  764|  8.63k|        mk_list_del(&filter->_head);
  765|  8.63k|        flb_free(filter);
  766|  8.63k|    }
  767|       |
  768|  2.05k|    mk_list_foreach_safe(head, tmp, &config->processor_plugins) {
  ------------------
  |  |  207|  2.46k|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 2.05k, False: 411]
  |  |  ------------------
  ------------------
  769|  2.05k|        processor = mk_list_entry(head, struct flb_processor_plugin, _head);
  ------------------
  |  |  214|  2.05k|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|  2.05k|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|  2.05k|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|  2.05k|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  770|  2.05k|        mk_list_del(&processor->_head);
  771|  2.05k|        flb_free(processor);
  772|  2.05k|    }
  773|    411|}

flb_http_client.c:flb_sds_casecmp:
   90|  3.59k|{
   91|  3.59k|    if (flb_sds_len(s) != len) {
  ------------------
  |  Branch (91:9): [True: 3.59k, False: 0]
  ------------------
   92|  3.59k|        return -1;
   93|  3.59k|    }
   94|       |
   95|      0|    return strncasecmp(s, str, len);
   96|  3.59k|}
flb_http_client.c:flb_sds_len:
   49|  11.6k|{
   50|  11.6k|    return (size_t) FLB_SDS_HEADER(s)->len;
  ------------------
  |  |   46|  11.6k|#define FLB_SDS_HEADER(s)  ((struct flb_sds *) (s - FLB_SDS_HEADER_SIZE))
  |  |  ------------------
  |  |  |  |   34|  11.6k|#define FLB_SDS_HEADER_SIZE (sizeof(uint64_t) + sizeof(uint64_t))
  |  |  ------------------
  ------------------
   51|  11.6k|}
flb_sds.c:flb_sds_alloc:
   68|    822|{
   69|    822|    return (size_t) FLB_SDS_HEADER(s)->alloc;
  ------------------
  |  |   46|    822|#define FLB_SDS_HEADER(s)  ((struct flb_sds *) (s - FLB_SDS_HEADER_SIZE))
  |  |  ------------------
  |  |  |  |   34|    822|#define FLB_SDS_HEADER_SIZE (sizeof(uint64_t) + sizeof(uint64_t))
  |  |  ------------------
  ------------------
   70|    822|}
flb_sds.c:flb_sds_avail:
   73|  3.28k|{
   74|  3.28k|    struct flb_sds *h;
   75|       |
   76|  3.28k|    h = FLB_SDS_HEADER(s);
  ------------------
  |  |   46|  3.28k|#define FLB_SDS_HEADER(s)  ((struct flb_sds *) (s - FLB_SDS_HEADER_SIZE))
  |  |  ------------------
  |  |  |  |   34|  3.28k|#define FLB_SDS_HEADER_SIZE (sizeof(uint64_t) + sizeof(uint64_t))
  |  |  ------------------
  ------------------
   77|  3.28k|    return (size_t) (h->alloc - h->len);
   78|  3.28k|}
flb_sds.c:flb_sds_len:
   49|    822|{
   50|    822|    return (size_t) FLB_SDS_HEADER(s)->len;
  ------------------
  |  |   46|    822|#define FLB_SDS_HEADER(s)  ((struct flb_sds *) (s - FLB_SDS_HEADER_SIZE))
  |  |  ------------------
  |  |  |  |   34|    822|#define FLB_SDS_HEADER_SIZE (sizeof(uint64_t) + sizeof(uint64_t))
  |  |  ------------------
  ------------------
   51|    822|}

flb_config.c:flb_strdup:
   45|    822|{
   46|    822|    return flb_strndup(s, strlen(s));
   47|    822|}
flb_config.c:flb_strndup:
   31|    822|{
   32|    822|    char *str;
   33|       |
   34|    822|    str = (char *) flb_malloc(n + 1);
   35|    822|    if (!str) {
  ------------------
  |  Branch (35:9): [True: 0, False: 822]
  ------------------
   36|      0|        return NULL;
   37|      0|    }
   38|    822|    memcpy(str, s, n);
   39|    822|    str[n] = '\0';
   40|       |
   41|    822|    return str;
   42|    822|}
flb_config.c:flb_str_emptyval:
   51|  1.23k|{
   52|  1.23k|    if (s != NULL && strcmp(s, "") == 0) {
  ------------------
  |  Branch (52:9): [True: 0, False: 1.23k]
  |  Branch (52:22): [True: 0, False: 0]
  ------------------
   53|      0|        return FLB_TRUE;
  ------------------
  |  |   26|      0|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|      0|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
   54|      0|    }
   55|  1.23k|    return FLB_FALSE;
  ------------------
  |  |   25|  1.23k|#define FLB_FALSE  0
  ------------------
   56|  1.23k|}
flb_upstream.c:flb_strdup:
   45|    411|{
   46|    411|    return flb_strndup(s, strlen(s));
   47|    411|}
flb_upstream.c:flb_strndup:
   31|    411|{
   32|    411|    char *str;
   33|       |
   34|    411|    str = (char *) flb_malloc(n + 1);
   35|    411|    if (!str) {
  ------------------
  |  Branch (35:9): [True: 0, False: 411]
  ------------------
   36|      0|        return NULL;
   37|      0|    }
   38|    411|    memcpy(str, s, n);
   39|    411|    str[n] = '\0';
   40|       |
   41|    411|    return str;
   42|    411|}
flb_parser.c:flb_strdup:
   45|  3.69k|{
   46|  3.69k|    return flb_strndup(s, strlen(s));
   47|  3.69k|}
flb_parser.c:flb_strndup:
   31|  3.69k|{
   32|  3.69k|    char *str;
   33|       |
   34|  3.69k|    str = (char *) flb_malloc(n + 1);
   35|  3.69k|    if (!str) {
  ------------------
  |  Branch (35:9): [True: 0, False: 3.69k]
  ------------------
   36|      0|        return NULL;
   37|      0|    }
   38|  3.69k|    memcpy(str, s, n);
   39|  3.69k|    str[n] = '\0';
   40|       |
   41|  3.69k|    return str;
   42|  3.69k|}

flb_connection.c:flb_stream_get_flags:
   83|    810|{
   84|    810|    return stream->flags;
   85|    810|}
flb_upstream.c:flb_stream_is_thread_safe:
  143|    411|{
  144|    411|    return stream->thread_safety_flag;
  145|    411|}
flb_upstream.c:flb_stream_setup:
   65|    411|{
   66|    411|    stream->thread_safety_flag = FLB_FALSE;
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
   67|    411|    stream->tls_context        = tls_context;
   68|    411|    stream->transport          = transport;
   69|    411|    stream->config             = config;
   70|    411|    stream->flags              = flags;
   71|    411|    stream->type               = type;
   72|       |
   73|       |    /* Set default networking setup values */
   74|    411|    if (net_setup == NULL) {
  ------------------
  |  Branch (74:9): [True: 411, False: 0]
  ------------------
   75|    411|        flb_net_setup_init(&stream->net);
   76|    411|    }
   77|      0|    else {
   78|      0|        memcpy(&stream->net, net_setup, sizeof(struct flb_net_setup));
   79|      0|    }
   80|    411|}
flb_upstream.c:flb_stream_enable_flags:
   98|    411|{
   99|    411|    flb_stream_set_flags(stream, flb_stream_get_flags(stream) | flag);
  100|    411|}
flb_upstream.c:flb_stream_set_flags:
   88|    411|{
   89|    411|    stream->flags = flags;
   90|    411|}
flb_upstream.c:flb_stream_get_flags:
   83|    411|{
   84|    411|    return stream->flags;
   85|    411|}
flb_http_client.c:flb_stream_get_flag_status:
   93|  2.03k|{
   94|  2.03k|    return ((flb_stream_get_flags(stream) & flag) != 0);
   95|  2.03k|}
flb_http_client.c:flb_stream_get_flags:
   83|  2.03k|{
   84|  2.03k|    return stream->flags;
   85|  2.03k|}
flb_http_client.c:flb_stream_is_keepalive:
  133|  1.20k|{
  134|  1.20k|    return flb_stream_get_flag_status(stream, FLB_IO_TCP_KA);
  ------------------
  |  |   37|  1.20k|#define FLB_IO_TCP_KA     16  /* use async mode (depends on event loop) */
  ------------------
  135|  1.20k|}

cfl_kvlist.c:cfl_list_init:
   64|    411|{
   65|    411|    list->next = list;
   66|    411|    list->prev = list;
   67|    411|}

cfl_kvlist_create:
   27|    411|{
   28|    411|    struct cfl_kvlist *list;
   29|       |
   30|    411|    list = malloc(sizeof(struct cfl_kvlist));
   31|    411|    if (list == NULL) {
  ------------------
  |  Branch (31:9): [True: 0, False: 411]
  ------------------
   32|      0|        cfl_report_runtime_error();
  ------------------
  |  |   28|      0|#define cfl_report_runtime_error() cfl_report_runtime_error_impl(errno, __FILENAME__, __LINE__)
  ------------------
   33|      0|        return NULL;
   34|      0|    }
   35|       |
   36|    411|    cfl_list_init(&list->list);
   37|    411|    return list;
   38|    411|}
cfl_kvlist_destroy:
   41|    411|{
   42|    411|    struct cfl_list *tmp;
   43|    411|    struct cfl_list *head;
   44|    411|    struct cfl_kvpair *pair;
   45|       |
   46|    411|    cfl_list_foreach_safe(head, tmp, &list->list) {
  ------------------
  |  |  199|    411|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (199:47): [True: 0, False: 411]
  |  |  ------------------
  ------------------
   47|      0|        pair = cfl_list_entry(head, struct cfl_kvpair, _head);
  ------------------
  |  |  206|      0|#define cfl_list_entry( ptr, type, member ) cfl_container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   45|      0|#define cfl_container_of(ptr, type, member) ({                  \
  |  |  |  |   46|      0|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   47|      0|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
   48|       |
   49|      0|        if (pair->key) {
  ------------------
  |  Branch (49:13): [True: 0, False: 0]
  ------------------
   50|      0|            cfl_sds_destroy(pair->key);
   51|      0|        }
   52|       |
   53|      0|        if (pair->val) {
  ------------------
  |  Branch (53:13): [True: 0, False: 0]
  ------------------
   54|      0|            cfl_variant_destroy(pair->val);
   55|      0|        }
   56|      0|        cfl_list_del(&pair->_head);
   57|      0|        free(pair);
   58|      0|    }
   59|       |
   60|    411|    free(list);
   61|    411|}

flb_config.c:MK_EVENT_ZERO:
  136|  1.23k|{
  137|  1.23k|    MK_EVENT_INIT(e, -1, NULL, NULL);
  138|  1.23k|}
flb_config.c:MK_EVENT_INIT:
  126|  1.23k|{
  127|  1.23k|    ev->fd      = fd;
  128|  1.23k|    ev->type    = MK_EVENT_CUSTOM;
  ------------------
  |  |   33|  1.23k|#define MK_EVENT_CUSTOM          4    /* custom fd registered             */
  ------------------
  129|  1.23k|    ev->mask    = MK_EVENT_EMPTY;
  ------------------
  |  |   37|  1.23k|#define MK_EVENT_EMPTY           0
  ------------------
  130|  1.23k|    ev->status  = MK_EVENT_NONE;
  ------------------
  |  |   52|  1.23k|#define MK_EVENT_NONE            1    /* nothing */
  ------------------
  131|  1.23k|    ev->data    = data;
  132|  1.23k|    ev->handler = callback;
  133|  1.23k|}
flb_connection.c:MK_EVENT_ZERO:
  136|    411|{
  137|    411|    MK_EVENT_INIT(e, -1, NULL, NULL);
  138|    411|}
flb_connection.c:MK_EVENT_INIT:
  126|    411|{
  127|    411|    ev->fd      = fd;
  128|    411|    ev->type    = MK_EVENT_CUSTOM;
  ------------------
  |  |   33|    411|#define MK_EVENT_CUSTOM          4    /* custom fd registered             */
  ------------------
  129|    411|    ev->mask    = MK_EVENT_EMPTY;
  ------------------
  |  |   37|    411|#define MK_EVENT_EMPTY           0
  ------------------
  130|    411|    ev->status  = MK_EVENT_NONE;
  ------------------
  |  |   52|    411|#define MK_EVENT_NONE            1    /* nothing */
  ------------------
  131|    411|    ev->data    = data;
  132|    411|    ev->handler = callback;
  133|    411|}

flb_config.c:mk_list_add:
   64|  30.8k|{
   65|  30.8k|    __mk_list_add(_new, head->prev, head);
   66|  30.8k|}
flb_config.c:__mk_list_add:
   56|  30.8k|{
   57|  30.8k|    next->prev = _new;
   58|  30.8k|    _new->next = next;
   59|  30.8k|    _new->prev = prev;
   60|  30.8k|    prev->next = _new;
   61|  30.8k|}
flb_config.c:mk_list_del:
  146|  30.8k|{
  147|  30.8k|    __mk_list_del(entry->prev, entry->next);
  148|  30.8k|    entry->prev = NULL;
  149|  30.8k|    entry->next = NULL;
  150|  30.8k|}
flb_config.c:__mk_list_del:
  140|  30.8k|{
  141|  30.8k|    prev->next = next;
  142|  30.8k|    next->prev = prev;
  143|  30.8k|}
flb_config.c:mk_list_init:
   49|  7.80k|{
   50|  7.80k|    list->next = list;
   51|  7.80k|    list->prev = list;
   52|  7.80k|}
flb_slist.c:mk_list_init:
   49|  9.45k|{
   50|  9.45k|    list->next = list;
   51|  9.45k|    list->prev = list;
   52|  9.45k|}
flb_slist.c:mk_list_add:
   64|  13.1k|{
   65|  13.1k|    __mk_list_add(_new, head->prev, head);
   66|  13.1k|}
flb_slist.c:__mk_list_add:
   56|  13.1k|{
   57|  13.1k|    next->prev = _new;
   58|  13.1k|    _new->next = next;
   59|  13.1k|    _new->prev = prev;
   60|  13.1k|    prev->next = _new;
   61|  13.1k|}
flb_slist.c:mk_list_del:
  146|  13.1k|{
  147|  13.1k|    __mk_list_del(entry->prev, entry->next);
  148|  13.1k|    entry->prev = NULL;
  149|  13.1k|    entry->next = NULL;
  150|  13.1k|}
flb_slist.c:__mk_list_del:
  140|  13.1k|{
  141|  13.1k|    prev->next = next;
  142|  13.1k|    next->prev = prev;
  143|  13.1k|}
flb_upstream.c:mk_list_init:
   49|  1.23k|{
   50|  1.23k|    list->next = list;
   51|  1.23k|    list->prev = list;
   52|  1.23k|}
flb_upstream.c:mk_list_add:
   64|    411|{
   65|    411|    __mk_list_add(_new, head->prev, head);
   66|    411|}
flb_upstream.c:__mk_list_add:
   56|    411|{
   57|    411|    next->prev = _new;
   58|    411|    _new->next = next;
   59|    411|    _new->prev = prev;
   60|    411|    prev->next = _new;
   61|    411|}
flb_upstream.c:mk_list_del:
  146|    411|{
  147|    411|    __mk_list_del(entry->prev, entry->next);
  148|    411|    entry->prev = NULL;
  149|    411|    entry->next = NULL;
  150|    411|}
flb_upstream.c:__mk_list_del:
  140|    411|{
  141|    411|    prev->next = next;
  142|    411|    next->prev = prev;
  143|    411|}
flb_plugin.c:mk_list_init:
   49|  1.64k|{
   50|  1.64k|    list->next = list;
   51|  1.64k|    list->prev = list;
   52|  1.64k|}
flb_http_client.c:mk_list_init:
   49|    822|{
   50|    822|    list->next = list;
   51|    822|    list->prev = list;
   52|    822|}
flb_config_format.c:mk_list_init:
   49|  5.75k|{
   50|  5.75k|    list->next = list;
   51|  5.75k|    list->prev = list;
   52|  5.75k|}
flb_config_format.c:mk_list_add:
   64|    411|{
   65|    411|    __mk_list_add(_new, head->prev, head);
   66|    411|}
flb_config_format.c:__mk_list_add:
   56|    411|{
   57|    411|    next->prev = _new;
   58|    411|    _new->next = next;
   59|    411|    _new->prev = prev;
   60|    411|    prev->next = _new;
   61|    411|}
flb_config_format.c:mk_list_del:
  146|    411|{
  147|    411|    __mk_list_del(entry->prev, entry->next);
  148|    411|    entry->prev = NULL;
  149|    411|    entry->next = NULL;
  150|    411|}
flb_config_format.c:__mk_list_del:
  140|    411|{
  141|    411|    prev->next = next;
  142|    411|    next->prev = prev;
  143|    411|}
flb_parser.c:mk_list_add:
   64|    822|{
   65|    822|    __mk_list_add(_new, head->prev, head);
   66|    822|}
flb_parser.c:__mk_list_add:
   56|    822|{
   57|    822|    next->prev = _new;
   58|    822|    _new->next = next;
   59|    822|    _new->prev = prev;
   60|    822|    prev->next = _new;
   61|    822|}
flb_parser.c:mk_list_del:
  146|    822|{
  147|    822|    __mk_list_del(entry->prev, entry->next);
  148|    822|    entry->prev = NULL;
  149|    822|    entry->next = NULL;
  150|    822|}
flb_parser.c:__mk_list_del:
  140|    822|{
  141|    822|    prev->next = next;
  142|    822|    next->prev = prev;
  143|    822|}
flb_kv.c:mk_list_add:
   64|  3.65k|{
   65|  3.65k|    __mk_list_add(_new, head->prev, head);
   66|  3.65k|}
flb_kv.c:__mk_list_add:
   56|  3.65k|{
   57|  3.65k|    next->prev = _new;
   58|  3.65k|    _new->next = next;
   59|  3.65k|    _new->prev = prev;
   60|  3.65k|    prev->next = _new;
   61|  3.65k|}
flb_kv.c:mk_list_del:
  146|  3.65k|{
  147|  3.65k|    __mk_list_del(entry->prev, entry->next);
  148|  3.65k|    entry->prev = NULL;
  149|  3.65k|    entry->next = NULL;
  150|  3.65k|}
flb_kv.c:__mk_list_del:
  140|  3.65k|{
  141|  3.65k|    prev->next = next;
  142|  3.65k|    next->prev = prev;
  143|  3.65k|}
flb_hash_table.c:mk_list_init:
   49|  26.7k|{
   50|  26.7k|    list->next = list;
   51|  26.7k|    list->prev = list;
   52|  26.7k|}
flb_ml_parser.c:mk_list_init:
   49|  2.46k|{
   50|  2.46k|    list->next = list;
   51|  2.46k|    list->prev = list;
   52|  2.46k|}
flb_ml_parser.c:mk_list_add:
   64|  2.46k|{
   65|  2.46k|    __mk_list_add(_new, head->prev, head);
   66|  2.46k|}
flb_ml_parser.c:__mk_list_add:
   56|  2.46k|{
   57|  2.46k|    next->prev = _new;
   58|  2.46k|    _new->next = next;
   59|  2.46k|    _new->prev = prev;
   60|  2.46k|    prev->next = _new;
   61|  2.46k|}
flb_ml_parser.c:mk_list_del:
  146|  2.46k|{
  147|  2.46k|    __mk_list_del(entry->prev, entry->next);
  148|  2.46k|    entry->prev = NULL;
  149|  2.46k|    entry->next = NULL;
  150|  2.46k|}
flb_ml_parser.c:__mk_list_del:
  140|  2.46k|{
  141|  2.46k|    prev->next = next;
  142|  2.46k|    next->prev = prev;
  143|  2.46k|}
flb_ml_rule.c:mk_list_init:
   49|  9.04k|{
   50|  9.04k|    list->next = list;
   51|  9.04k|    list->prev = list;
   52|  9.04k|}
flb_ml_rule.c:mk_list_size:
  162|  9.04k|{
  163|  9.04k|    int ret = 0;
  164|  9.04k|    struct mk_list *it;
  165|  34.9k|    for (it = head->next; it != head; it = it->next, ret++);
  ------------------
  |  Branch (165:27): [True: 25.8k, False: 9.04k]
  ------------------
  166|  9.04k|    return ret;
  167|  9.04k|}
flb_ml_rule.c:mk_list_add:
   64|  34.5k|{
   65|  34.5k|    __mk_list_add(_new, head->prev, head);
   66|  34.5k|}
flb_ml_rule.c:__mk_list_add:
   56|  34.5k|{
   57|  34.5k|    next->prev = _new;
   58|  34.5k|    _new->next = next;
   59|  34.5k|    _new->prev = prev;
   60|  34.5k|    prev->next = _new;
   61|  34.5k|}
flb_ml_rule.c:mk_list_del:
  146|  34.5k|{
  147|  34.5k|    __mk_list_del(entry->prev, entry->next);
  148|  34.5k|    entry->prev = NULL;
  149|  34.5k|    entry->next = NULL;
  150|  34.5k|}
flb_ml_rule.c:__mk_list_del:
  140|  34.5k|{
  141|  34.5k|    prev->next = next;
  142|  34.5k|    next->prev = prev;
  143|  34.5k|}

flb_kernel.c:mk_mem_free:
   98|    822|{
   99|       |#ifdef MALLOC_JEMALLOC
  100|       |    je_free(ptr);
  101|       |#else
  102|    822|    free(ptr);
  103|    822|#endif
  104|    822|}
mk_string.c:mk_mem_alloc:
   49|    822|{
   50|       |#ifdef MALLOC_JEMALLOC
   51|       |    void *aux = je_malloc(size);
   52|       |#else
   53|    822|    void *aux = malloc(size);
   54|    822|#endif
   55|       |
   56|    822|    if (mk_unlikely(!aux && size)) {
  ------------------
  |  |  116|    822|  #define mk_unlikely(x) __builtin_expect((x),0)
  |  |  ------------------
  |  |  |  Branch (116:26): [True: 0, False: 822]
  |  |  |  Branch (116:44): [True: 0, False: 822]
  |  |  |  Branch (116:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   57|      0|        perror("malloc");
   58|      0|        return NULL;
   59|      0|    }
   60|       |
   61|    822|    return aux;
   62|    822|}

mk_string_char_search:
  268|  13.5k|{
  269|  13.5k|    char *p;
  270|       |
  271|  13.5k|    if (len < 0) {
  ------------------
  |  Branch (271:9): [True: 0, False: 13.5k]
  ------------------
  272|      0|        len = strlen(string);
  273|      0|    }
  274|       |
  275|  13.5k|    p = memchr(string, c, len);
  276|  13.5k|    if (p) {
  ------------------
  |  Branch (276:9): [True: 4.52k, False: 9.04k]
  ------------------
  277|  4.52k|        return (p - string);
  278|  4.52k|    }
  279|       |
  280|  9.04k|    return -1;
  281|  13.5k|}
mk_string_copy_substr:
  572|    822|{
  573|    822|    unsigned int size, bytes;
  574|    822|    char *buffer = 0;
  575|       |
  576|    822|    if (pos_init > pos_end) {
  ------------------
  |  Branch (576:9): [True: 0, False: 822]
  ------------------
  577|      0|        return NULL;
  578|      0|    }
  579|       |
  580|    822|    size = (unsigned int) (pos_end - pos_init) + 1;
  581|    822|    if (size <= 2) {
  ------------------
  |  Branch (581:9): [True: 411, False: 411]
  ------------------
  582|    411|        size = 4;
  583|    411|    }
  584|       |
  585|    822|    buffer = mk_mem_alloc(size);
  586|       |
  587|    822|    if (!buffer) {
  ------------------
  |  Branch (587:9): [True: 0, False: 822]
  ------------------
  588|      0|        return NULL;
  589|      0|    }
  590|       |
  591|    822|    bytes = pos_end - pos_init;
  592|    822|    memcpy(buffer, string + pos_init, bytes);
  593|    822|    buffer[bytes] = '\0';
  594|       |
  595|    822|    return (char *) buffer;
  596|    822|}

onigenc_unicode_is_code_ctype:
  183|  12.3k|{
  184|  12.3k|  if (
  185|  12.3k|#ifdef USE_UNICODE_PROPERTIES
  186|  12.3k|      ctype <= ONIGENC_MAX_STD_CTYPE &&
  ------------------
  |  |  309|  12.3k|#define ONIGENC_MAX_STD_CTYPE  ONIGENC_CTYPE_ASCII
  |  |  ------------------
  |  |  |  |  308|  24.6k|#define ONIGENC_CTYPE_ASCII    14
  |  |  ------------------
  ------------------
  |  Branch (186:7): [True: 12.3k, False: 0]
  ------------------
  187|  12.3k|#endif
  188|  12.3k|      code < 256) {
  ------------------
  |  Branch (188:7): [True: 12.3k, False: 0]
  ------------------
  189|  12.3k|    return ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code, ctype);
  ------------------
  |  |   33|  12.3k|  ((EncUNICODE_ISO_8859_1_CtypeTable[code] & CTYPE_TO_BIT(ctype)) != 0)
  |  |  ------------------
  |  |  |  |  113|  12.3k|#define CTYPE_TO_BIT(ctype)  (1<<(ctype))
  |  |  ------------------
  ------------------
  190|  12.3k|  }
  191|       |
  192|      0|  if (ctype >= CODE_RANGES_NUM) {
  ------------------
  |  |  179|      0|#define CODE_RANGES_NUM numberof(CodeRanges)
  |  |  ------------------
  |  |  |  |  129|      0|# define numberof(array) (int )(sizeof(array) / sizeof((array)[0]))
  |  |  ------------------
  ------------------
  |  Branch (192:7): [True: 0, False: 0]
  ------------------
  193|      0|    return ONIGERR_TYPE_BUG;
  ------------------
  |  |  633|      0|#define ONIGERR_TYPE_BUG                                       -6
  ------------------
  194|      0|  }
  195|       |
  196|      0|  return onig_is_in_code_range((UChar* )CodeRanges[ctype], code);
  197|      0|}
onigenc_unicode_ctype_code_range:
  202|  5.34k|{
  203|  5.34k|  if (ctype >= CODE_RANGES_NUM) {
  ------------------
  |  |  179|  5.34k|#define CODE_RANGES_NUM numberof(CodeRanges)
  |  |  ------------------
  |  |  |  |  129|  5.34k|# define numberof(array) (int )(sizeof(array) / sizeof((array)[0]))
  |  |  ------------------
  ------------------
  |  Branch (203:7): [True: 0, False: 5.34k]
  ------------------
  204|      0|    return ONIGERR_TYPE_BUG;
  ------------------
  |  |  633|      0|#define ONIGERR_TYPE_BUG                                       -6
  ------------------
  205|      0|  }
  206|       |
  207|  5.34k|  *ranges = CodeRanges[ctype];
  208|       |
  209|  5.34k|  return 0;
  210|  5.34k|}

utf_8.c:mbc_enc_len:
  317|  1.01M|{
  318|  1.01M|  int firstbyte = *p++;
  319|  1.01M|  state_t s;
  320|  1.01M|  s = trans[0][firstbyte];
  321|  1.01M|  if (s < 0) return s == ACCEPT ? ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(1) :
  ------------------
  |  |  345|  1.01M|#define ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(n)   (n)
  ------------------
  |  Branch (321:7): [True: 1.01M, False: 0]
  |  Branch (321:21): [True: 1.01M, False: 0]
  ------------------
  322|  1.01M|                                  ONIGENC_CONSTRUCT_MBCLEN_INVALID();
  ------------------
  |  |  349|      0|#define ONIGENC_CONSTRUCT_MBCLEN_INVALID()      (-1)
  ------------------
  323|       |
  324|      0|  if (p == e) return ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(EncLen_UTF8[firstbyte]-1);
  ------------------
  |  |  352|      0|#define ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(n)    (-1-(n))
  ------------------
  |  Branch (324:7): [True: 0, False: 0]
  ------------------
  325|      0|  s = trans[s][*p++];
  326|      0|  if (s < 0) return s == ACCEPT ? ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(2) :
  ------------------
  |  |  345|      0|#define ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(n)   (n)
  ------------------
  |  Branch (326:7): [True: 0, False: 0]
  |  Branch (326:21): [True: 0, False: 0]
  ------------------
  327|      0|                                  ONIGENC_CONSTRUCT_MBCLEN_INVALID();
  ------------------
  |  |  349|      0|#define ONIGENC_CONSTRUCT_MBCLEN_INVALID()      (-1)
  ------------------
  328|       |
  329|      0|  if (p == e) return ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(EncLen_UTF8[firstbyte]-2);
  ------------------
  |  |  352|      0|#define ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(n)    (-1-(n))
  ------------------
  |  Branch (329:7): [True: 0, False: 0]
  ------------------
  330|      0|  s = trans[s][*p++];
  331|      0|  if (s < 0) return s == ACCEPT ? ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(3) :
  ------------------
  |  |  345|      0|#define ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(n)   (n)
  ------------------
  |  Branch (331:7): [True: 0, False: 0]
  |  Branch (331:21): [True: 0, False: 0]
  ------------------
  332|      0|                                  ONIGENC_CONSTRUCT_MBCLEN_INVALID();
  ------------------
  |  |  349|      0|#define ONIGENC_CONSTRUCT_MBCLEN_INVALID()      (-1)
  ------------------
  333|       |
  334|      0|  if (p == e) return ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(EncLen_UTF8[firstbyte]-3);
  ------------------
  |  |  352|      0|#define ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(n)    (-1-(n))
  ------------------
  |  Branch (334:7): [True: 0, False: 0]
  ------------------
  335|      0|  s = trans[s][*p++];
  336|       |
  337|      0|#ifndef USE_UTF8_31BITS
  338|      0|  return s == ACCEPT ? ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(4) :
  ------------------
  |  |  345|      0|#define ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(n)   (n)
  ------------------
  |  Branch (338:10): [True: 0, False: 0]
  ------------------
  339|      0|                       ONIGENC_CONSTRUCT_MBCLEN_INVALID();
  ------------------
  |  |  349|      0|#define ONIGENC_CONSTRUCT_MBCLEN_INVALID()      (-1)
  ------------------
  340|       |#else
  341|       |  if (s < 0) return s == ACCEPT ? ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(4) :
  342|       |                                  ONIGENC_CONSTRUCT_MBCLEN_INVALID();
  343|       |
  344|       |  if (p == e) return ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(EncLen_UTF8[firstbyte]-4);
  345|       |  s = trans[s][*p++];
  346|       |  if (s < 0) return s == ACCEPT ? ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(5) :
  347|       |                                  ONIGENC_CONSTRUCT_MBCLEN_INVALID();
  348|       |
  349|       |  if (p == e) return ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(EncLen_UTF8[firstbyte]-5);
  350|       |  s = trans[s][*p++];
  351|       |  return s == ACCEPT ? ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(6) :
  352|       |                       ONIGENC_CONSTRUCT_MBCLEN_INVALID();
  353|       |#endif
  354|      0|}
utf_8.c:mbc_to_code:
  381|   314k|{
  382|   314k|  int c, len;
  383|   314k|  OnigCodePoint n;
  384|       |
  385|   314k|  len = mbc_enc_len(p, end, enc);
  386|   314k|  c = *p++;
  387|   314k|  if (len > 1) {
  ------------------
  |  Branch (387:7): [True: 0, False: 314k]
  ------------------
  388|      0|    len--;
  389|      0|    n = c & ((1 << (6 - len)) - 1);
  390|      0|    while (len--) {
  ------------------
  |  Branch (390:12): [True: 0, False: 0]
  ------------------
  391|      0|      c = *p++;
  392|      0|      n = (n << 6) | (c & ((1 << 6) - 1));
  393|      0|    }
  394|      0|    return n;
  395|      0|  }
  396|   314k|  else {
  397|   314k|#ifdef USE_INVALID_CODE_SCHEME
  398|   314k|    if (c > 0xfd) {
  ------------------
  |  Branch (398:9): [True: 0, False: 314k]
  ------------------
  399|      0|      return ((c == 0xfe) ? INVALID_CODE_FE : INVALID_CODE_FF);
  ------------------
  |  |   44|      0|# define INVALID_CODE_FE  0xfffffffe
  ------------------
                    return ((c == 0xfe) ? INVALID_CODE_FE : INVALID_CODE_FF);
  ------------------
  |  |   45|      0|# define INVALID_CODE_FF  0xffffffff
  ------------------
  |  Branch (399:15): [True: 0, False: 0]
  ------------------
  400|      0|    }
  401|   314k|#endif
  402|   314k|    return (OnigCodePoint )c;
  403|   314k|  }
  404|   314k|}
utf_8.c:code_to_mbclen:
  408|  20.1k|{
  409|  20.1k|  if      ((code & 0xffffff80) == 0) return 1;
  ------------------
  |  Branch (409:12): [True: 20.1k, False: 0]
  ------------------
  410|      0|  else if ((code & 0xfffff800) == 0) return 2;
  ------------------
  |  Branch (410:12): [True: 0, False: 0]
  ------------------
  411|      0|  else if ((code & 0xffff0000) == 0) return 3;
  ------------------
  |  Branch (411:12): [True: 0, False: 0]
  ------------------
  412|      0|#ifndef USE_UTF8_31BITS
  413|      0|  else if (code <= VALID_CODE_LIMIT) return 4;
  ------------------
  |  |   49|      0|#define VALID_CODE_LIMIT  0x0010ffff
  ------------------
  |  Branch (413:12): [True: 0, False: 0]
  ------------------
  414|       |#else
  415|       |  else if ((code & 0xffe00000) == 0) return 4;
  416|       |  else if ((code & 0xfc000000) == 0) return 5;
  417|       |  else if (code <= VALID_CODE_LIMIT) return 6;
  418|       |#endif
  419|      0|#ifdef USE_INVALID_CODE_SCHEME
  420|      0|  else if (code == INVALID_CODE_FE) return 1;
  ------------------
  |  |   44|      0|# define INVALID_CODE_FE  0xfffffffe
  ------------------
  |  Branch (420:12): [True: 0, False: 0]
  ------------------
  421|      0|  else if (code == INVALID_CODE_FF) return 1;
  ------------------
  |  |   45|      0|# define INVALID_CODE_FF  0xffffffff
  ------------------
  |  Branch (421:12): [True: 0, False: 0]
  ------------------
  422|      0|#endif
  423|      0|  else
  424|      0|    return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
  ------------------
  |  |  694|      0|#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE                      -401
  ------------------
  425|  20.1k|}
utf_8.c:get_ctype_code_range:
  524|  5.34k|{
  525|  5.34k|  *sb_out = 0x80;
  526|  5.34k|  return onigenc_unicode_ctype_code_range(ctype, ranges);
  527|  5.34k|}

onig_bbuf_init:
  143|  14.7k|{
  144|  14.7k|  if (size <= 0) {
  ------------------
  |  Branch (144:7): [True: 0, False: 14.7k]
  ------------------
  145|      0|    size   = 0;
  146|      0|    buf->p = NULL;
  147|      0|  }
  148|  14.7k|  else {
  149|  14.7k|    buf->p = (UChar* )xmalloc(size);
  ------------------
  |  |  142|  14.7k|# define xmalloc     malloc
  ------------------
  150|  14.7k|    if (IS_NULL(buf->p)) return(ONIGERR_MEMORY);
  ------------------
  |  |  311|  14.7k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 14.7k]
  |  |  ------------------
  ------------------
                  if (IS_NULL(buf->p)) return(ONIGERR_MEMORY);
  ------------------
  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  ------------------
  151|  14.7k|  }
  152|       |
  153|  14.7k|  buf->alloc = (unsigned int )size;
  154|  14.7k|  buf->used  = 0;
  155|  14.7k|  return 0;
  156|  14.7k|}
onig_free_body:
 5535|  9.45k|{
 5536|  9.45k|  if (IS_NOT_NULL(reg)) {
  ------------------
  |  |  312|  9.45k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 9.45k, False: 0]
  |  |  ------------------
  ------------------
 5537|  9.45k|    if (IS_NOT_NULL(reg->p))                xfree(reg->p);
  ------------------
  |  |  312|  9.45k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 9.45k, False: 0]
  |  |  ------------------
  ------------------
                  if (IS_NOT_NULL(reg->p))                xfree(reg->p);
  ------------------
  |  |  145|  9.45k|# define xfree       free
  ------------------
 5538|  9.45k|    if (IS_NOT_NULL(reg->exact))            xfree(reg->exact);
  ------------------
  |  |  312|  9.45k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 4.52k, False: 4.93k]
  |  |  ------------------
  ------------------
                  if (IS_NOT_NULL(reg->exact))            xfree(reg->exact);
  ------------------
  |  |  145|  4.52k|# define xfree       free
  ------------------
 5539|  9.45k|    if (IS_NOT_NULL(reg->repeat_range))     xfree(reg->repeat_range);
  ------------------
  |  |  312|  9.45k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 9.45k]
  |  |  ------------------
  ------------------
                  if (IS_NOT_NULL(reg->repeat_range))     xfree(reg->repeat_range);
  ------------------
  |  |  145|      0|# define xfree       free
  ------------------
 5540|  9.45k|    if (IS_NOT_NULL(reg->chain))            onig_free(reg->chain);
  ------------------
  |  |  312|  9.45k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 9.45k]
  |  |  ------------------
  ------------------
 5541|       |
 5542|  9.45k|#ifdef USE_NAMED_GROUP
 5543|  9.45k|    onig_names_free(reg);
 5544|  9.45k|#endif
 5545|  9.45k|  }
 5546|  9.45k|}
onig_free:
 5550|  9.45k|{
 5551|  9.45k|  if (IS_NOT_NULL(reg)) {
  ------------------
  |  |  312|  9.45k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 9.45k, False: 0]
  |  |  ------------------
  ------------------
 5552|  9.45k|    onig_free_body(reg);
 5553|  9.45k|    xfree(reg);
  ------------------
  |  |  145|  9.45k|# define xfree       free
  ------------------
 5554|  9.45k|  }
 5555|  9.45k|}
onig_compile:
 5620|  9.45k|{
 5621|  9.45k|#define COMPILE_INIT_SIZE  20
 5622|       |
 5623|  9.45k|  int r;
 5624|  9.45k|  OnigDistance init_size;
 5625|  9.45k|  Node*  root;
 5626|  9.45k|  ScanEnv  scan_env = {0};
 5627|  9.45k|#ifdef USE_SUBEXP_CALL
 5628|  9.45k|  UnsetAddrList  uslist;
 5629|  9.45k|#endif
 5630|       |
 5631|  9.45k|  if (IS_NOT_NULL(einfo)) einfo->par = (UChar* )NULL;
  ------------------
  |  |  312|  9.45k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 9.45k, False: 0]
  |  |  ------------------
  ------------------
 5632|       |
 5633|       |#ifdef RUBY
 5634|       |  scan_env.sourcefile = sourcefile;
 5635|       |  scan_env.sourceline = sourceline;
 5636|       |#endif
 5637|       |
 5638|       |#ifdef ONIG_DEBUG
 5639|       |  print_enc_string(stderr, reg->enc, pattern, pattern_end);
 5640|       |#endif
 5641|       |
 5642|  9.45k|  if (reg->alloc == 0) {
  ------------------
  |  Branch (5642:7): [True: 9.45k, False: 0]
  ------------------
 5643|  9.45k|    init_size = (pattern_end - pattern) * 2;
 5644|  9.45k|    if (init_size <= 0) init_size = COMPILE_INIT_SIZE;
  ------------------
  |  | 5621|      0|#define COMPILE_INIT_SIZE  20
  ------------------
  |  Branch (5644:9): [True: 0, False: 9.45k]
  ------------------
 5645|  9.45k|    r = BBUF_INIT(reg, init_size);
  ------------------
  |  |  460|  9.45k|#define BBUF_INIT(buf,size)    onig_bbuf_init((BBuf* )(buf), (size))
  ------------------
 5646|  9.45k|    if (r != 0) goto end;
  ------------------
  |  Branch (5646:9): [True: 0, False: 9.45k]
  ------------------
 5647|  9.45k|  }
 5648|      0|  else
 5649|      0|    reg->used = 0;
 5650|       |
 5651|  9.45k|  reg->num_mem            = 0;
 5652|  9.45k|  reg->num_repeat         = 0;
 5653|  9.45k|  reg->num_null_check     = 0;
 5654|  9.45k|  reg->repeat_range_alloc = 0;
 5655|  9.45k|  reg->repeat_range       = (OnigRepeatRange* )NULL;
 5656|       |#ifdef USE_COMBINATION_EXPLOSION_CHECK
 5657|       |  reg->num_comb_exp_check = 0;
 5658|       |#endif
 5659|       |
 5660|  9.45k|  r = onig_parse_make_tree(&root, pattern, pattern_end, reg, &scan_env);
 5661|  9.45k|  if (r != 0) goto err;
  ------------------
  |  Branch (5661:7): [True: 0, False: 9.45k]
  ------------------
 5662|       |
 5663|       |#ifdef ONIG_DEBUG_PARSE_TREE
 5664|       |# if 0
 5665|       |  fprintf(stderr, "ORIGINAL PARSE TREE:\n");
 5666|       |  print_tree(stderr, root);
 5667|       |# endif
 5668|       |#endif
 5669|       |
 5670|  9.45k|#ifdef USE_NAMED_GROUP
 5671|       |  /* mixed use named group and no-named group */
 5672|  9.45k|  if (scan_env.num_named > 0 &&
  ------------------
  |  Branch (5672:7): [True: 411, False: 9.04k]
  ------------------
 5673|  9.45k|      IS_SYNTAX_BV(scan_env.syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) &&
  ------------------
  |  |  332|  9.86k|#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
  |  |  ------------------
  |  |  |  Branch (332:35): [True: 411, False: 0]
  |  |  ------------------
  ------------------
 5674|  9.45k|      !ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_CAPTURE_GROUP)) {
  ------------------
  |  |  479|    411|#define ONIG_IS_OPTION_ON(options,option)   ((options) & (option))
  ------------------
  |  Branch (5674:7): [True: 411, False: 0]
  ------------------
 5675|    411|    if (scan_env.num_named != scan_env.num_mem)
  ------------------
  |  Branch (5675:9): [True: 0, False: 411]
  ------------------
 5676|      0|      r = disable_noname_group_capture(&root, reg, &scan_env);
 5677|    411|    else
 5678|    411|      r = numbered_ref_check(root);
 5679|       |
 5680|    411|    if (r != 0) goto err;
  ------------------
  |  Branch (5680:9): [True: 0, False: 411]
  ------------------
 5681|    411|  }
 5682|  9.45k|#endif
 5683|       |
 5684|  9.45k|#ifdef USE_SUBEXP_CALL
 5685|  9.45k|  if (scan_env.num_call > 0) {
  ------------------
  |  Branch (5685:7): [True: 0, False: 9.45k]
  ------------------
 5686|      0|    r = unset_addr_list_init(&uslist, scan_env.num_call);
 5687|      0|    if (r != 0) goto err;
  ------------------
  |  Branch (5687:9): [True: 0, False: 0]
  ------------------
 5688|      0|    scan_env.unset_addr_list = &uslist;
 5689|      0|    r = setup_subexp_call(root, &scan_env);
 5690|      0|    if (r != 0) goto err_unset;
  ------------------
  |  Branch (5690:9): [True: 0, False: 0]
  ------------------
 5691|      0|    r = subexp_recursive_check_trav(root, &scan_env);
 5692|      0|    if (r  < 0) goto err_unset;
  ------------------
  |  Branch (5692:9): [True: 0, False: 0]
  ------------------
 5693|      0|    r = subexp_inf_recursive_check_trav(root, &scan_env);
 5694|      0|    if (r != 0) goto err_unset;
  ------------------
  |  Branch (5694:9): [True: 0, False: 0]
  ------------------
 5695|       |
 5696|      0|    reg->num_call = scan_env.num_call;
 5697|      0|  }
 5698|  9.45k|  else
 5699|  9.45k|    reg->num_call = 0;
 5700|  9.45k|#endif
 5701|       |
 5702|  9.45k|  r = setup_tree(root, reg, 0, &scan_env);
 5703|  9.45k|  if (r != 0) goto err_unset;
  ------------------
  |  Branch (5703:7): [True: 0, False: 9.45k]
  ------------------
 5704|       |
 5705|       |#ifdef ONIG_DEBUG_PARSE_TREE
 5706|       |  print_tree(stderr, root);
 5707|       |#endif
 5708|       |
 5709|  9.45k|  reg->capture_history  = scan_env.capture_history;
 5710|  9.45k|  reg->bt_mem_start     = scan_env.bt_mem_start;
 5711|  9.45k|  reg->bt_mem_start    |= reg->capture_history;
 5712|  9.45k|  if (IS_FIND_CONDITION(reg->options))
  ------------------
  |  |  400|  9.45k|#define IS_FIND_CONDITION(option) ((option) & \
  |  |  ------------------
  |  |  |  Branch (400:35): [True: 0, False: 9.45k]
  |  |  ------------------
  |  |  401|  9.45k|          (ONIG_OPTION_FIND_LONGEST | ONIG_OPTION_FIND_NOT_EMPTY))
  |  |  ------------------
  |  |  |  |  459|  9.45k|#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  458|  9.45k|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  456|  9.45k|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  455|  9.45k|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  454|  9.45k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                         (ONIG_OPTION_FIND_LONGEST | ONIG_OPTION_FIND_NOT_EMPTY))
  |  |  ------------------
  |  |  |  |  460|  9.45k|#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  459|  9.45k|#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  458|  9.45k|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  456|  9.45k|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  455|  9.45k|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  454|  9.45k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5713|      0|    BIT_STATUS_ON_ALL(reg->bt_mem_end);
  ------------------
  |  |  369|      0|#define BIT_STATUS_ON_ALL(stats)     (stats) = ~((BitStatusType )0)
  ------------------
 5714|  9.45k|  else {
 5715|  9.45k|    reg->bt_mem_end  = scan_env.bt_mem_end;
 5716|  9.45k|    reg->bt_mem_end |= reg->capture_history;
 5717|  9.45k|  }
 5718|       |
 5719|       |#ifdef USE_COMBINATION_EXPLOSION_CHECK
 5720|       |  if (scan_env.backrefed_mem == 0
 5721|       |# ifdef USE_SUBEXP_CALL
 5722|       |      || scan_env.num_call == 0
 5723|       |# endif
 5724|       |      ) {
 5725|       |    setup_comb_exp_check(root, 0, &scan_env);
 5726|       |# ifdef USE_SUBEXP_CALL
 5727|       |    if (scan_env.has_recursion != 0) {
 5728|       |      scan_env.num_comb_exp_check = 0;
 5729|       |    }
 5730|       |    else
 5731|       |# endif
 5732|       |    if (scan_env.comb_exp_max_regnum > 0) {
 5733|       |      int i;
 5734|       |      for (i = 1; i <= scan_env.comb_exp_max_regnum; i++) {
 5735|       |	if (BIT_STATUS_AT(scan_env.backrefed_mem, i) != 0) {
 5736|       |	  scan_env.num_comb_exp_check = 0;
 5737|       |	  break;
 5738|       |	}
 5739|       |      }
 5740|       |    }
 5741|       |  }
 5742|       |
 5743|       |  reg->num_comb_exp_check = scan_env.num_comb_exp_check;
 5744|       |#endif
 5745|       |
 5746|  9.45k|  clear_optimize_info(reg);
 5747|  9.45k|#ifndef ONIG_DONT_OPTIMIZE
 5748|  9.45k|  r = set_optimize_info_from_tree(root, reg, &scan_env);
 5749|  9.45k|  if (r != 0) goto err_unset;
  ------------------
  |  Branch (5749:7): [True: 0, False: 9.45k]
  ------------------
 5750|  9.45k|#endif
 5751|       |
 5752|  9.45k|  if (IS_NOT_NULL(scan_env.mem_nodes_dynamic)) {
  ------------------
  |  |  312|  9.45k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 9.45k]
  |  |  ------------------
  ------------------
 5753|      0|    xfree(scan_env.mem_nodes_dynamic);
  ------------------
  |  |  145|      0|# define xfree       free
  ------------------
 5754|      0|    scan_env.mem_nodes_dynamic = (Node** )NULL;
 5755|      0|  }
 5756|       |
 5757|  9.45k|  r = compile_tree(root, reg);
 5758|  9.45k|  if (r == 0) {
  ------------------
  |  Branch (5758:7): [True: 9.45k, False: 0]
  ------------------
 5759|  9.45k|    r = add_opcode(reg, OP_END);
 5760|  9.45k|#ifdef USE_SUBEXP_CALL
 5761|  9.45k|    if (scan_env.num_call > 0) {
  ------------------
  |  Branch (5761:9): [True: 0, False: 9.45k]
  ------------------
 5762|      0|      r = unset_addr_list_fix(&uslist, reg);
 5763|      0|      unset_addr_list_end(&uslist);
 5764|      0|      if (r) goto err;
  ------------------
  |  Branch (5764:11): [True: 0, False: 0]
  ------------------
 5765|      0|    }
 5766|  9.45k|#endif
 5767|       |
 5768|  9.45k|    if ((reg->num_repeat != 0) || (reg->bt_mem_end != 0))
  ------------------
  |  Branch (5768:9): [True: 0, False: 9.45k]
  |  Branch (5768:35): [True: 0, False: 9.45k]
  ------------------
 5769|      0|      reg->stack_pop_level = STACK_POP_LEVEL_ALL;
  ------------------
  |  |  352|      0|#define STACK_POP_LEVEL_ALL         2
  ------------------
 5770|  9.45k|    else {
 5771|  9.45k|      if (reg->bt_mem_start != 0)
  ------------------
  |  Branch (5771:11): [True: 0, False: 9.45k]
  ------------------
 5772|      0|	reg->stack_pop_level = STACK_POP_LEVEL_MEM_START;
  ------------------
  |  |  351|      0|#define STACK_POP_LEVEL_MEM_START   1
  ------------------
 5773|  9.45k|      else
 5774|  9.45k|	reg->stack_pop_level = STACK_POP_LEVEL_FREE;
  ------------------
  |  |  350|  9.45k|#define STACK_POP_LEVEL_FREE        0
  ------------------
 5775|  9.45k|    }
 5776|  9.45k|  }
 5777|      0|#ifdef USE_SUBEXP_CALL
 5778|      0|  else if (scan_env.num_call > 0) {
  ------------------
  |  Branch (5778:12): [True: 0, False: 0]
  ------------------
 5779|      0|    unset_addr_list_end(&uslist);
 5780|      0|  }
 5781|  9.45k|#endif
 5782|  9.45k|  onig_node_free(root);
 5783|       |
 5784|       |#ifdef ONIG_DEBUG_COMPILE
 5785|       |# ifdef USE_NAMED_GROUP
 5786|       |  onig_print_names(stderr, reg);
 5787|       |# endif
 5788|       |  print_compiled_byte_code_list(stderr, reg);
 5789|       |#endif
 5790|       |
 5791|  9.45k| end:
 5792|  9.45k|  return r;
 5793|       |
 5794|      0| err_unset:
 5795|      0|#ifdef USE_SUBEXP_CALL
 5796|      0|  if (scan_env.num_call > 0) {
  ------------------
  |  Branch (5796:7): [True: 0, False: 0]
  ------------------
 5797|      0|    unset_addr_list_end(&uslist);
 5798|      0|  }
 5799|      0|#endif
 5800|      0| err:
 5801|      0|  if (IS_NOT_NULL(scan_env.error)) {
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5802|      0|    if (IS_NOT_NULL(einfo)) {
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5803|      0|      einfo->enc     = scan_env.enc;
 5804|      0|      einfo->par     = scan_env.error;
 5805|      0|      einfo->par_end = scan_env.error_end;
 5806|      0|    }
 5807|      0|  }
 5808|       |
 5809|      0|  onig_node_free(root);
 5810|      0|  if (IS_NOT_NULL(scan_env.mem_nodes_dynamic))
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5811|      0|      xfree(scan_env.mem_nodes_dynamic);
  ------------------
  |  |  145|      0|# define xfree       free
  ------------------
 5812|      0|  return r;
 5813|      0|}
onig_reg_init:
 5821|  9.45k|{
 5822|  9.45k|  if (! onig_inited)
  ------------------
  |  Branch (5822:7): [True: 1, False: 9.45k]
  ------------------
 5823|      1|    onig_init();
 5824|       |
 5825|  9.45k|  if (IS_NULL(reg))
  ------------------
  |  |  311|  9.45k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 9.45k]
  |  |  ------------------
  ------------------
 5826|      0|    return ONIGERR_INVALID_ARGUMENT;
  ------------------
  |  |  643|      0|#define ONIGERR_INVALID_ARGUMENT                              -30
  ------------------
 5827|       |
 5828|  9.45k|  (reg)->exact            = (UChar* )NULL;
 5829|  9.45k|  (reg)->chain            = (regex_t* )NULL;
 5830|  9.45k|  (reg)->p                = (UChar* )NULL;
 5831|  9.45k|  (reg)->name_table       = (void* )NULL;
 5832|  9.45k|  (reg)->repeat_range     = (OnigRepeatRange* )NULL;
 5833|       |
 5834|  9.45k|  if (ONIGENC_IS_UNDEF(enc))
  ------------------
  |  |  317|  9.45k|#define ONIGENC_IS_UNDEF(enc)          ((enc) == ONIG_ENCODING_UNDEF)
  |  |  ------------------
  |  |  |  |  281|  9.45k|#define ONIG_ENCODING_UNDEF    ((OnigEncoding )0)
  |  |  ------------------
  |  |  |  Branch (317:40): [True: 0, False: 9.45k]
  |  |  ------------------
  ------------------
 5835|      0|    return ONIGERR_DEFAULT_ENCODING_IS_NOT_SET;
  ------------------
  |  |  640|      0|#define ONIGERR_DEFAULT_ENCODING_IS_NOT_SET                   -21
  ------------------
 5836|       |
 5837|  9.45k|  if ((option & (ONIG_OPTION_DONT_CAPTURE_GROUP|ONIG_OPTION_CAPTURE_GROUP))
  ------------------
  |  |  462|  9.45k|#define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)
  |  |  ------------------
  |  |  |  |  461|  9.45k|#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  460|  9.45k|#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|  9.45k|#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  458|  9.45k|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  456|  9.45k|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  455|  9.45k|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  454|  9.45k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                if ((option & (ONIG_OPTION_DONT_CAPTURE_GROUP|ONIG_OPTION_CAPTURE_GROUP))
  ------------------
  |  |  463|  9.45k|#define ONIG_OPTION_CAPTURE_GROUP        (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
  |  |  ------------------
  |  |  |  |  462|  9.45k|#define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  461|  9.45k|#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|  9.45k|#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  459|  9.45k|#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  458|  9.45k|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  456|  9.45k|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  455|  9.45k|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  454|  9.45k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5837:7): [True: 0, False: 9.45k]
  ------------------
 5838|  9.45k|      == (ONIG_OPTION_DONT_CAPTURE_GROUP|ONIG_OPTION_CAPTURE_GROUP)) {
  ------------------
  |  |  462|  9.45k|#define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)
  |  |  ------------------
  |  |  |  |  461|  9.45k|#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  460|  9.45k|#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|  9.45k|#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  458|  9.45k|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  456|  9.45k|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  455|  9.45k|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  454|  9.45k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                    == (ONIG_OPTION_DONT_CAPTURE_GROUP|ONIG_OPTION_CAPTURE_GROUP)) {
  ------------------
  |  |  463|  9.45k|#define ONIG_OPTION_CAPTURE_GROUP        (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
  |  |  ------------------
  |  |  |  |  462|  9.45k|#define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  461|  9.45k|#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|  9.45k|#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  459|  9.45k|#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  458|  9.45k|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  456|  9.45k|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  455|  9.45k|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  454|  9.45k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5839|      0|    return ONIGERR_INVALID_COMBINATION_OF_OPTIONS;
  ------------------
  |  |  696|      0|#define ONIGERR_INVALID_COMBINATION_OF_OPTIONS               -403
  ------------------
 5840|      0|  }
 5841|       |
 5842|  9.45k|  if ((option & ONIG_OPTION_NEGATE_SINGLELINE) != 0) {
  ------------------
  |  |  461|  9.45k|#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
  |  |  ------------------
  |  |  |  |  460|  9.45k|#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  459|  9.45k|#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  458|  9.45k|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  456|  9.45k|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  455|  9.45k|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  454|  9.45k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5842:7): [True: 0, False: 9.45k]
  ------------------
 5843|      0|    option |= syntax->options;
 5844|      0|    option &= ~ONIG_OPTION_SINGLELINE;
  ------------------
  |  |  458|      0|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  ------------------
  |  |  |  |  456|      0|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  455|      0|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  454|      0|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5845|      0|  }
 5846|  9.45k|  else
 5847|  9.45k|    option |= syntax->options;
 5848|       |
 5849|  9.45k|  (reg)->enc              = enc;
 5850|  9.45k|  (reg)->options          = option;
 5851|  9.45k|  (reg)->syntax           = syntax;
 5852|  9.45k|  (reg)->optimize         = 0;
 5853|       |
 5854|  9.45k|  (reg)->alloc            = 0;
 5855|  9.45k|  (reg)->used             = 0;
 5856|       |
 5857|  9.45k|  (reg)->case_fold_flag   = case_fold_flag;
 5858|  9.45k|  return 0;
 5859|  9.45k|}
onig_new:
 5879|  9.45k|{
 5880|  9.45k|  int r;
 5881|       |
 5882|  9.45k|  *reg = (regex_t* )xmalloc(sizeof(regex_t));
  ------------------
  |  |  142|  9.45k|# define xmalloc     malloc
  ------------------
 5883|  9.45k|  if (IS_NULL(*reg)) return ONIGERR_MEMORY;
  ------------------
  |  |  311|  9.45k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 9.45k]
  |  |  ------------------
  ------------------
                if (IS_NULL(*reg)) return ONIGERR_MEMORY;
  ------------------
  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  ------------------
 5884|       |
 5885|  9.45k|  r = onig_reg_init(*reg, option, ONIGENC_CASE_FOLD_DEFAULT, enc, syntax);
  ------------------
  |  |  131|  9.45k|#define ONIGENC_CASE_FOLD_DEFAULT  OnigDefaultCaseFoldFlag
  ------------------
 5886|  9.45k|  if (r) goto err;
  ------------------
  |  Branch (5886:7): [True: 0, False: 9.45k]
  ------------------
 5887|       |
 5888|  9.45k|  r = onig_compile(*reg, pattern, pattern_end, einfo);
 5889|  9.45k|  if (r) {
  ------------------
  |  Branch (5889:7): [True: 0, False: 9.45k]
  ------------------
 5890|      0|  err:
 5891|      0|    onig_free(*reg);
 5892|      0|    *reg = NULL;
 5893|      0|  }
 5894|  9.45k|  return r;
 5895|  9.45k|}
onig_init:
 5905|    412|{
 5906|    412|  if (onig_inited != 0)
  ------------------
  |  Branch (5906:7): [True: 411, False: 1]
  ------------------
 5907|    411|    return 0;
 5908|       |
 5909|      1|  onig_inited = 1;
 5910|       |
 5911|       |#if defined(ONIG_DEBUG_MEMLEAK) && defined(_MSC_VER)
 5912|       |  _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
 5913|       |#endif
 5914|       |
 5915|      1|  onigenc_init();
 5916|       |  /* onigenc_set_default_caseconv_table((UChar* )0); */
 5917|       |
 5918|       |#ifdef ONIG_DEBUG_STATISTICS
 5919|       |  onig_statistics_init();
 5920|       |#endif
 5921|       |
 5922|      1|  return 0;
 5923|    412|}
onig_is_code_in_cc_len:
 5998|  5.34k|{
 5999|  5.34k|  int found;
 6000|       |
 6001|  5.34k|  if (elen > 1 || (code >= SINGLE_BYTE_SIZE)) {
  ------------------
  |  |  426|  5.34k|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  ------------------
  |  |  |  |  425|  5.34k|#define BITS_PER_BYTE      8
  |  |  ------------------
  ------------------
  |  Branch (6001:7): [True: 0, False: 5.34k]
  |  Branch (6001:19): [True: 0, False: 5.34k]
  ------------------
 6002|      0|    if (IS_NULL(cc->mbuf)) {
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 6003|      0|      found = 0;
 6004|      0|    }
 6005|      0|    else {
 6006|      0|      found = (onig_is_in_code_range(cc->mbuf->p, code) != 0 ? 1 : 0);
  ------------------
  |  Branch (6006:16): [True: 0, False: 0]
  ------------------
 6007|      0|    }
 6008|      0|  }
 6009|  5.34k|  else {
 6010|  5.34k|    found = (BITSET_AT(cc->bs, code) == 0 ? 0 : 1);
  ------------------
  |  |  448|  5.34k|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  ------------------
  |  |  |  |  445|  5.34k|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|  5.34k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|  5.34k|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  ------------------
  |  |  |  |  446|  5.34k|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|  5.34k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|  5.34k|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6010:14): [True: 3.28k, False: 2.05k]
  ------------------
 6011|  5.34k|  }
 6012|       |
 6013|  5.34k|  if (IS_NCCLASS_NOT(cc))
  ------------------
  |  |  809|  5.34k|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|  5.34k|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|  5.34k|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (802:37): [True: 2.05k, False: 3.28k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6014|  2.05k|    return !found;
 6015|  3.28k|  else
 6016|  3.28k|    return found;
 6017|  5.34k|}
onig_is_code_in_cc:
 6021|  5.34k|{
 6022|  5.34k|  int len;
 6023|       |
 6024|  5.34k|  if (ONIGENC_MBC_MINLEN(enc) > 1) {
  ------------------
  |  |  367|  5.34k|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  ------------------
  |  Branch (6024:7): [True: 0, False: 5.34k]
  ------------------
 6025|      0|    len = 2;
 6026|      0|  }
 6027|  5.34k|  else {
 6028|  5.34k|    len = ONIGENC_CODE_TO_MBCLEN(enc, code);
  ------------------
  |  |  370|  5.34k|#define ONIGENC_CODE_TO_MBCLEN(enc,code)       (enc)->code_to_mbclen(code,enc)
  ------------------
 6029|  5.34k|  }
 6030|  5.34k|  return onig_is_code_in_cc_len(len, code, cc);
 6031|  5.34k|}
regcomp.c:numbered_ref_check:
 1989|  8.22k|{
 1990|  8.22k|  int r = 0;
 1991|       |
 1992|  8.22k|  switch (NTYPE(node)) {
  ------------------
  |  |   69|  8.22k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
 1993|    411|  case NT_LIST:
  ------------------
  |  |   46|    411|#define NT_LIST        8
  ------------------
  |  Branch (1993:3): [True: 411, False: 7.80k]
  ------------------
 1994|  1.23k|  case NT_ALT:
  ------------------
  |  |   47|  1.23k|#define NT_ALT         9
  ------------------
  |  Branch (1994:3): [True: 822, False: 7.39k]
  ------------------
 1995|  5.34k|    do {
 1996|  5.34k|      r = numbered_ref_check(NCAR(node));
  ------------------
  |  |   86|  5.34k|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|  5.34k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1997|  5.34k|    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
  ------------------
  |  |  312|  5.34k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 4.11k, False: 1.23k]
  |  |  ------------------
  ------------------
  |  Branch (1997:14): [True: 5.34k, False: 0]
  ------------------
 1998|  1.23k|    break;
 1999|    822|  case NT_QTFR:
  ------------------
  |  |   43|    822|#define NT_QTFR        5
  ------------------
  |  Branch (1999:3): [True: 822, False: 7.39k]
  ------------------
 2000|    822|    r = numbered_ref_check(NQTFR(node)->target);
  ------------------
  |  |   80|    822|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 2001|    822|    break;
 2002|  1.64k|  case NT_ENCLOSE:
  ------------------
  |  |   44|  1.64k|#define NT_ENCLOSE     6
  ------------------
  |  Branch (2002:3): [True: 1.64k, False: 6.57k]
  ------------------
 2003|  1.64k|    r = numbered_ref_check(NENCLOSE(node)->target);
  ------------------
  |  |   81|  1.64k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 2004|  1.64k|    break;
 2005|       |
 2006|      0|  case NT_BREF:
  ------------------
  |  |   42|      0|#define NT_BREF        4
  ------------------
  |  Branch (2006:3): [True: 0, False: 8.22k]
  ------------------
 2007|      0|    if (! IS_BACKREF_NAME_REF(NBREF(node)))
  ------------------
  |  |  163|      0|#define IS_BACKREF_NAME_REF(bn)        (((bn)->state & NST_NAME_REF)   != 0)
  |  |  ------------------
  |  |  |  |  139|      0|#define NST_NAME_REF              (1<<11)
  |  |  ------------------
  ------------------
  |  Branch (2007:9): [True: 0, False: 0]
  ------------------
 2008|      0|      return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;
  ------------------
  |  |  678|      0|#define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED         -209
  ------------------
 2009|      0|    break;
 2010|       |
 2011|    822|  case NT_ANCHOR:
  ------------------
  |  |   45|    822|#define NT_ANCHOR      7
  ------------------
  |  Branch (2011:3): [True: 822, False: 7.39k]
  ------------------
 2012|    822|    if (NANCHOR(node)->target)
  ------------------
  |  |   82|    822|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
  |  Branch (2012:9): [True: 0, False: 822]
  ------------------
 2013|      0|      r = numbered_ref_check(NANCHOR(node)->target);
  ------------------
  |  |   82|      0|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
 2014|    822|    break;
 2015|       |
 2016|  3.69k|  default:
  ------------------
  |  Branch (2016:3): [True: 3.69k, False: 4.52k]
  ------------------
 2017|  3.69k|    break;
 2018|  8.22k|  }
 2019|       |
 2020|  8.22k|  return r;
 2021|  8.22k|}
regcomp.c:get_min_match_length:
 2157|  14.7k|{
 2158|  14.7k|  OnigDistance tmin;
 2159|  14.7k|  int r = 0;
 2160|       |
 2161|  14.7k|  *min = 0;
 2162|  14.7k|  switch (NTYPE(node)) {
  ------------------
  |  |   69|  14.7k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
 2163|      0|  case NT_BREF:
  ------------------
  |  |   42|      0|#define NT_BREF        4
  ------------------
  |  Branch (2163:3): [True: 0, False: 14.7k]
  ------------------
 2164|      0|    {
 2165|      0|      int i;
 2166|      0|      int* backs;
 2167|      0|      Node** nodes = SCANENV_MEM_NODES(env);
  ------------------
  |  |  287|      0| (IS_NOT_NULL((senv)->mem_nodes_dynamic) ? \
  |  |  ------------------
  |  |  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  288|      0|    (senv)->mem_nodes_dynamic : (senv)->mem_nodes_static)
  ------------------
 2168|      0|      BRefNode* br = NBREF(node);
  ------------------
  |  |   79|      0|#define NBREF(node)        (&((node)->u.bref))
  ------------------
 2169|      0|      if (br->state & NST_RECURSION) break;
  ------------------
  |  |  135|      0|#define NST_RECURSION             (1<<7)
  ------------------
  |  Branch (2169:11): [True: 0, False: 0]
  ------------------
 2170|       |
 2171|      0|      backs = BACKREFS_P(br);
  ------------------
  |  |  120|      0|  (IS_NOT_NULL((br)->back_dynamic) ? (br)->back_dynamic : (br)->back_static);
  |  |  ------------------
  |  |  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2172|      0|      if (backs[0] > env->num_mem)  return ONIGERR_INVALID_BACKREF;
  ------------------
  |  |  677|      0|#define ONIGERR_INVALID_BACKREF                              -208
  ------------------
  |  Branch (2172:11): [True: 0, False: 0]
  ------------------
 2173|      0|      r = get_min_match_length(nodes[backs[0]], min, env);
 2174|      0|      if (r != 0) break;
  ------------------
  |  Branch (2174:11): [True: 0, False: 0]
  ------------------
 2175|      0|      for (i = 1; i < br->back_num; i++) {
  ------------------
  |  Branch (2175:19): [True: 0, False: 0]
  ------------------
 2176|      0|	if (backs[i] > env->num_mem)  return ONIGERR_INVALID_BACKREF;
  ------------------
  |  |  677|      0|#define ONIGERR_INVALID_BACKREF                              -208
  ------------------
  |  Branch (2176:6): [True: 0, False: 0]
  ------------------
 2177|      0|	r = get_min_match_length(nodes[backs[i]], &tmin, env);
 2178|      0|	if (r != 0) break;
  ------------------
  |  Branch (2178:6): [True: 0, False: 0]
  ------------------
 2179|      0|	if (*min > tmin) *min = tmin;
  ------------------
  |  Branch (2179:6): [True: 0, False: 0]
  ------------------
 2180|      0|      }
 2181|      0|    }
 2182|      0|    break;
 2183|       |
 2184|      0|#ifdef USE_SUBEXP_CALL
 2185|      0|  case NT_CALL:
  ------------------
  |  |   48|      0|#define NT_CALL       10
  ------------------
  |  Branch (2185:3): [True: 0, False: 14.7k]
  ------------------
 2186|      0|    if (IS_CALL_RECURSION(NCALL(node))) {
  ------------------
  |  |  161|      0|#define IS_CALL_RECURSION(cn)          (((cn)->state & NST_RECURSION)  != 0)
  |  |  ------------------
  |  |  |  |  135|      0|#define NST_RECURSION             (1<<7)
  |  |  ------------------
  |  |  |  Branch (161:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2187|      0|      EncloseNode* en = NENCLOSE(NCALL(node)->target);
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 2188|      0|      if (IS_ENCLOSE_MIN_FIXED(en))
  ------------------
  |  |  152|      0|#define IS_ENCLOSE_MIN_FIXED(en)       (((en)->state & NST_MIN_FIXED)     != 0)
  |  |  ------------------
  |  |  |  |  128|      0|#define NST_MIN_FIXED             (1<<0)
  |  |  ------------------
  |  |  |  Branch (152:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2189|      0|	*min = en->min_len;
 2190|      0|    }
 2191|      0|    else
 2192|      0|      r = get_min_match_length(NCALL(node)->target, min, env);
  ------------------
  |  |   84|      0|#define NCALL(node)        (&((node)->u.call))
  ------------------
 2193|      0|    break;
 2194|      0|#endif
 2195|       |
 2196|    822|  case NT_LIST:
  ------------------
  |  |   46|    822|#define NT_LIST        8
  ------------------
  |  Branch (2196:3): [True: 822, False: 13.9k]
  ------------------
 2197|  1.64k|    do {
 2198|  1.64k|      r = get_min_match_length(NCAR(node), &tmin, env);
  ------------------
  |  |   86|  1.64k|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|  1.64k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 2199|  1.64k|      if (r == 0) *min += tmin;
  ------------------
  |  Branch (2199:11): [True: 1.64k, False: 0]
  ------------------
 2200|  1.64k|    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
  ------------------
  |  |  312|  1.64k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 822, False: 822]
  |  |  ------------------
  ------------------
  |  Branch (2200:14): [True: 1.64k, False: 0]
  ------------------
 2201|    822|    break;
 2202|       |
 2203|      0|  case NT_ALT:
  ------------------
  |  |   47|      0|#define NT_ALT         9
  ------------------
  |  Branch (2203:3): [True: 0, False: 14.7k]
  ------------------
 2204|      0|    {
 2205|      0|      Node *x, *y;
 2206|      0|      y = node;
 2207|      0|      do {
 2208|      0|	x = NCAR(y);
  ------------------
  |  |   86|      0|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 2209|      0|	r = get_min_match_length(x, &tmin, env);
 2210|      0|	if (r != 0) break;
  ------------------
  |  Branch (2210:6): [True: 0, False: 0]
  ------------------
 2211|      0|	if (y == node) *min = tmin;
  ------------------
  |  Branch (2211:6): [True: 0, False: 0]
  ------------------
 2212|      0|	else if (*min > tmin) *min = tmin;
  ------------------
  |  Branch (2212:11): [True: 0, False: 0]
  ------------------
 2213|      0|      } while (r == 0 && IS_NOT_NULL(y = NCDR(y)));
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2213:16): [True: 0, False: 0]
  ------------------
 2214|      0|    }
 2215|      0|    break;
 2216|       |
 2217|  1.23k|  case NT_STR:
  ------------------
  |  |   38|  1.23k|#define NT_STR         0
  ------------------
  |  Branch (2217:3): [True: 1.23k, False: 13.5k]
  ------------------
 2218|  1.23k|    {
 2219|  1.23k|      StrNode* sn = NSTR(node);
  ------------------
  |  |   76|  1.23k|#define NSTR(node)         (&((node)->u.str))
  ------------------
 2220|  1.23k|      *min = sn->end - sn->s;
 2221|  1.23k|    }
 2222|  1.23k|    break;
 2223|       |
 2224|      0|  case NT_CTYPE:
  ------------------
  |  |   40|      0|#define NT_CTYPE       2
  ------------------
  |  Branch (2224:3): [True: 0, False: 14.7k]
  ------------------
 2225|      0|    *min = 1;
 2226|      0|    break;
 2227|       |
 2228|  9.45k|  case NT_CCLASS:
  ------------------
  |  |   39|  9.45k|#define NT_CCLASS      1
  ------------------
  |  Branch (2228:3): [True: 9.45k, False: 5.34k]
  ------------------
 2229|  11.9k|  case NT_CANY:
  ------------------
  |  |   41|  11.9k|#define NT_CANY        3
  ------------------
  |  Branch (2229:3): [True: 2.46k, False: 12.3k]
  ------------------
 2230|  11.9k|    *min = 1;
 2231|  11.9k|    break;
 2232|       |
 2233|    822|  case NT_QTFR:
  ------------------
  |  |   43|    822|#define NT_QTFR        5
  ------------------
  |  Branch (2233:3): [True: 822, False: 13.9k]
  ------------------
 2234|    822|    {
 2235|    822|      QtfrNode* qn = NQTFR(node);
  ------------------
  |  |   80|    822|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 2236|       |
 2237|    822|      if (qn->lower > 0) {
  ------------------
  |  Branch (2237:11): [True: 822, False: 0]
  ------------------
 2238|    822|	r = get_min_match_length(qn->target, min, env);
 2239|    822|	if (r == 0)
  ------------------
  |  Branch (2239:6): [True: 822, False: 0]
  ------------------
 2240|    822|	  *min = distance_multiply(*min, qn->lower);
 2241|    822|      }
 2242|    822|    }
 2243|    822|    break;
 2244|       |
 2245|      0|  case NT_ENCLOSE:
  ------------------
  |  |   44|      0|#define NT_ENCLOSE     6
  ------------------
  |  Branch (2245:3): [True: 0, False: 14.7k]
  ------------------
 2246|      0|    {
 2247|      0|      EncloseNode* en = NENCLOSE(node);
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 2248|      0|      switch (en->type) {
  ------------------
  |  Branch (2248:15): [True: 0, False: 0]
  ------------------
 2249|      0|      case ENCLOSE_MEMORY:
  ------------------
  |  |   94|      0|#define ENCLOSE_MEMORY           (1<<0)
  ------------------
  |  Branch (2249:7): [True: 0, False: 0]
  ------------------
 2250|      0|        if (IS_ENCLOSE_MIN_FIXED(en))
  ------------------
  |  |  152|      0|#define IS_ENCLOSE_MIN_FIXED(en)       (((en)->state & NST_MIN_FIXED)     != 0)
  |  |  ------------------
  |  |  |  |  128|      0|#define NST_MIN_FIXED             (1<<0)
  |  |  ------------------
  |  |  |  Branch (152:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2251|      0|          *min = en->min_len;
 2252|      0|        else {
 2253|      0|	  if (IS_ENCLOSE_MARK1(NENCLOSE(node)))
  ------------------
  |  |  150|      0|#define IS_ENCLOSE_MARK1(en)           (((en)->state & NST_MARK1)         != 0)
  |  |  ------------------
  |  |  |  |  131|      0|#define NST_MARK1                 (1<<3)
  |  |  ------------------
  |  |  |  Branch (150:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2254|      0|	    *min = 0;  /* recursive */
 2255|      0|	  else {
 2256|      0|	    SET_ENCLOSE_STATUS(node, NST_MARK1);
  ------------------
  |  |  144|      0|#define SET_ENCLOSE_STATUS(node,f)      (node)->u.enclose.state |=  (f)
  ------------------
 2257|      0|	    r = get_min_match_length(en->target, min, env);
 2258|      0|	    CLEAR_ENCLOSE_STATUS(node, NST_MARK1);
  ------------------
  |  |  145|      0|#define CLEAR_ENCLOSE_STATUS(node,f)    (node)->u.enclose.state &= ~(f)
  ------------------
 2259|      0|	    if (r == 0) {
  ------------------
  |  Branch (2259:10): [True: 0, False: 0]
  ------------------
 2260|      0|	      en->min_len = *min;
 2261|      0|	      SET_ENCLOSE_STATUS(node, NST_MIN_FIXED);
  ------------------
  |  |  144|      0|#define SET_ENCLOSE_STATUS(node,f)      (node)->u.enclose.state |=  (f)
  ------------------
 2262|      0|	    }
 2263|      0|	  }
 2264|      0|        }
 2265|      0|        break;
 2266|       |
 2267|      0|      case ENCLOSE_OPTION:
  ------------------
  |  |   95|      0|#define ENCLOSE_OPTION           (1<<1)
  ------------------
  |  Branch (2267:7): [True: 0, False: 0]
  ------------------
 2268|      0|      case ENCLOSE_STOP_BACKTRACK:
  ------------------
  |  |   96|      0|#define ENCLOSE_STOP_BACKTRACK   (1<<2)
  ------------------
  |  Branch (2268:7): [True: 0, False: 0]
  ------------------
 2269|      0|      case ENCLOSE_CONDITION:
  ------------------
  |  |   97|      0|#define ENCLOSE_CONDITION        (1<<3)
  ------------------
  |  Branch (2269:7): [True: 0, False: 0]
  ------------------
 2270|      0|	r = get_min_match_length(en->target, min, env);
 2271|      0|	break;
 2272|       |
 2273|      0|      case ENCLOSE_ABSENT:
  ------------------
  |  |   98|      0|#define ENCLOSE_ABSENT           (1<<4)
  ------------------
  |  Branch (2273:7): [True: 0, False: 0]
  ------------------
 2274|      0|	break;
 2275|      0|      }
 2276|      0|    }
 2277|      0|    break;
 2278|       |
 2279|      0|  case NT_ANCHOR:
  ------------------
  |  |   45|      0|#define NT_ANCHOR      7
  ------------------
  |  Branch (2279:3): [True: 0, False: 14.7k]
  ------------------
 2280|      0|  default:
  ------------------
  |  Branch (2280:3): [True: 0, False: 14.7k]
  ------------------
 2281|      0|    break;
 2282|  14.7k|  }
 2283|       |
 2284|  14.7k|  return r;
 2285|  14.7k|}
regcomp.c:distance_multiply:
  108|  13.5k|{
  109|  13.5k|  if (m == 0) return 0;
  ------------------
  |  Branch (109:7): [True: 4.93k, False: 8.63k]
  ------------------
  110|       |
  111|  8.63k|  if (d < ONIG_INFINITE_DISTANCE / m)
  ------------------
  |  |   85|  8.63k|#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)
  ------------------
  |  Branch (111:7): [True: 8.63k, False: 0]
  ------------------
  112|  8.63k|    return d * m;
  113|      0|  else
  114|      0|    return ONIG_INFINITE_DISTANCE;
  ------------------
  |  |   85|      0|#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)
  ------------------
  115|  8.63k|}
regcomp.c:setup_tree:
 3879|  70.6k|{
 3880|  70.6k|  int type;
 3881|  70.6k|  int r = 0;
 3882|       |
 3883|  70.6k|restart:
 3884|  70.6k|  type = NTYPE(node);
  ------------------
  |  |   69|  70.6k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
 3885|  70.6k|  switch (type) {
 3886|  9.86k|  case NT_LIST:
  ------------------
  |  |   46|  9.86k|#define NT_LIST        8
  ------------------
  |  Branch (3886:3): [True: 9.86k, False: 60.8k]
  ------------------
 3887|  9.86k|    {
 3888|  9.86k|      Node* prev = NULL_NODE;
  ------------------
  |  |  283|  9.86k|#define NULL_NODE  ((Node* )0)
  ------------------
 3889|  40.6k|      do {
 3890|  40.6k|	r = setup_tree(NCAR(node), reg, state, env);
  ------------------
  |  |   86|  40.6k|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|  40.6k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 3891|  40.6k|	if (IS_NOT_NULL(prev) && r == 0) {
  ------------------
  |  |  312|  81.3k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 30.8k, False: 9.86k]
  |  |  ------------------
  ------------------
  |  Branch (3891:27): [True: 30.8k, False: 0]
  ------------------
 3892|  30.8k|	  r = next_setup(prev, NCAR(node), reg);
  ------------------
  |  |   86|  30.8k|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|  30.8k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 3893|  30.8k|	}
 3894|  40.6k|	prev = NCAR(node);
  ------------------
  |  |   86|  40.6k|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|  40.6k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 3895|  40.6k|      } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
  ------------------
  |  |  312|  40.6k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 30.8k, False: 9.86k]
  |  |  ------------------
  ------------------
  |  Branch (3895:16): [True: 40.6k, False: 0]
  ------------------
 3896|  9.86k|    }
 3897|  9.86k|    break;
 3898|       |
 3899|  2.46k|  case NT_ALT:
  ------------------
  |  |   47|  2.46k|#define NT_ALT         9
  ------------------
  |  Branch (3899:3): [True: 2.46k, False: 68.2k]
  ------------------
 3900|  5.75k|    do {
 3901|  5.75k|      r = setup_tree(NCAR(node), reg, (state | IN_ALT), env);
  ------------------
  |  |   86|  5.75k|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|  5.75k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
                    r = setup_tree(NCAR(node), reg, (state | IN_ALT), env);
  ------------------
  |  | 3268|  5.75k|#define IN_ALT          (1<<0)
  ------------------
 3902|  5.75k|    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
  ------------------
  |  |  312|  5.75k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 3.28k, False: 2.46k]
  |  |  ------------------
  ------------------
  |  Branch (3902:14): [True: 5.75k, False: 0]
  ------------------
 3903|  2.46k|    break;
 3904|       |
 3905|  9.86k|  case NT_CCLASS:
  ------------------
  |  |   39|  9.86k|#define NT_CCLASS      1
  ------------------
  |  Branch (3905:3): [True: 9.86k, False: 60.8k]
  ------------------
 3906|  9.86k|    break;
 3907|       |
 3908|  17.6k|  case NT_STR:
  ------------------
  |  |   38|  17.6k|#define NT_STR         0
  ------------------
  |  Branch (3908:3): [True: 17.6k, False: 53.0k]
  ------------------
 3909|  17.6k|    if (IS_IGNORECASE(reg->options) && !NSTRING_IS_RAW(node)) {
  ------------------
  |  |  396|  35.3k|#define IS_IGNORECASE(option)     ((option) & ONIG_OPTION_IGNORECASE)
  |  |  ------------------
  |  |  |  |  454|  17.6k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  ------------------
  |  |  |  Branch (396:35): [True: 0, False: 17.6k]
  |  |  ------------------
  ------------------
                  if (IS_IGNORECASE(reg->options) && !NSTRING_IS_RAW(node)) {
  ------------------
  |  |  114|      0|#define NSTRING_IS_RAW(node)          (((node)->u.str.flag & NSTR_RAW)   != 0)
  |  |  ------------------
  |  |  |  |  104|      0|#define NSTR_RAW                (1<<0) /* by backslashed number */
  |  |  ------------------
  ------------------
  |  Branch (3909:40): [True: 0, False: 0]
  ------------------
 3910|      0|      r = expand_case_fold_string(node, reg, state);
 3911|      0|    }
 3912|  17.6k|    break;
 3913|       |
 3914|      0|  case NT_CTYPE:
  ------------------
  |  |   40|      0|#define NT_CTYPE       2
  ------------------
  |  Branch (3914:3): [True: 0, False: 70.6k]
  ------------------
 3915|  4.11k|  case NT_CANY:
  ------------------
  |  |   41|  4.11k|#define NT_CANY        3
  ------------------
  |  Branch (3915:3): [True: 4.11k, False: 66.5k]
  ------------------
 3916|  4.11k|    break;
 3917|       |
 3918|      0|#ifdef USE_SUBEXP_CALL
 3919|      0|  case NT_CALL:
  ------------------
  |  |   48|      0|#define NT_CALL       10
  ------------------
  |  Branch (3919:3): [True: 0, False: 70.6k]
  ------------------
 3920|      0|    break;
 3921|      0|#endif
 3922|       |
 3923|      0|  case NT_BREF:
  ------------------
  |  |   42|      0|#define NT_BREF        4
  ------------------
  |  Branch (3923:3): [True: 0, False: 70.6k]
  ------------------
 3924|      0|    {
 3925|      0|      int i;
 3926|      0|      int* p;
 3927|      0|      Node** nodes = SCANENV_MEM_NODES(env);
  ------------------
  |  |  287|      0| (IS_NOT_NULL((senv)->mem_nodes_dynamic) ? \
  |  |  ------------------
  |  |  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  288|      0|    (senv)->mem_nodes_dynamic : (senv)->mem_nodes_static)
  ------------------
 3928|      0|      BRefNode* br = NBREF(node);
  ------------------
  |  |   79|      0|#define NBREF(node)        (&((node)->u.bref))
  ------------------
 3929|      0|      p = BACKREFS_P(br);
  ------------------
  |  |  120|      0|  (IS_NOT_NULL((br)->back_dynamic) ? (br)->back_dynamic : (br)->back_static);
  |  |  ------------------
  |  |  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3930|      0|      for (i = 0; i < br->back_num; i++) {
  ------------------
  |  Branch (3930:19): [True: 0, False: 0]
  ------------------
 3931|      0|	if (p[i] > env->num_mem)  return ONIGERR_INVALID_BACKREF;
  ------------------
  |  |  677|      0|#define ONIGERR_INVALID_BACKREF                              -208
  ------------------
  |  Branch (3931:6): [True: 0, False: 0]
  ------------------
 3932|      0|	BIT_STATUS_ON_AT(env->backrefed_mem, p[i]);
  ------------------
  |  |  373|      0|#define BIT_STATUS_ON_AT(stats,n) do {\
  |  |  374|      0|  if ((n) < (int )BIT_STATUS_BITS_NUM)\
  |  |  ------------------
  |  |  |  |  367|      0|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  |  |  ------------------
  |  |  |  Branch (374:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  375|      0|    (stats) |= (1 << (n));\
  |  |  376|      0|  else\
  |  |  377|      0|    (stats) |= 1;\
  |  |  378|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (378:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3933|      0|	BIT_STATUS_ON_AT(env->bt_mem_start, p[i]);
  ------------------
  |  |  373|      0|#define BIT_STATUS_ON_AT(stats,n) do {\
  |  |  374|      0|  if ((n) < (int )BIT_STATUS_BITS_NUM)\
  |  |  ------------------
  |  |  |  |  367|      0|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  |  |  ------------------
  |  |  |  Branch (374:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  375|      0|    (stats) |= (1 << (n));\
  |  |  376|      0|  else\
  |  |  377|      0|    (stats) |= 1;\
  |  |  378|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (378:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3934|      0|#ifdef USE_BACKREF_WITH_LEVEL
 3935|      0|	if (IS_BACKREF_NEST_LEVEL(br)) {
  ------------------
  |  |  164|      0|#define IS_BACKREF_NEST_LEVEL(bn)      (((bn)->state & NST_NEST_LEVEL) != 0)
  |  |  ------------------
  |  |  |  |  141|      0|#define NST_NEST_LEVEL            (1<<13)
  |  |  ------------------
  |  |  |  Branch (164:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3936|      0|	  BIT_STATUS_ON_AT(env->bt_mem_end, p[i]);
  ------------------
  |  |  373|      0|#define BIT_STATUS_ON_AT(stats,n) do {\
  |  |  374|      0|  if ((n) < (int )BIT_STATUS_BITS_NUM)\
  |  |  ------------------
  |  |  |  |  367|      0|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  |  |  ------------------
  |  |  |  Branch (374:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  375|      0|    (stats) |= (1 << (n));\
  |  |  376|      0|  else\
  |  |  377|      0|    (stats) |= 1;\
  |  |  378|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (378:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3937|      0|	}
 3938|      0|#endif
 3939|      0|	SET_ENCLOSE_STATUS(nodes[p[i]], NST_MEM_BACKREFED);
  ------------------
  |  |  144|      0|#define SET_ENCLOSE_STATUS(node,f)      (node)->u.enclose.state |=  (f)
  ------------------
 3940|      0|      }
 3941|      0|    }
 3942|      0|    break;
 3943|       |
 3944|  12.3k|  case NT_QTFR:
  ------------------
  |  |   43|  12.3k|#define NT_QTFR        5
  ------------------
  |  Branch (3944:3): [True: 12.3k, False: 58.3k]
  ------------------
 3945|  12.3k|    {
 3946|  12.3k|      OnigDistance d;
 3947|  12.3k|      QtfrNode* qn = NQTFR(node);
  ------------------
  |  |   80|  12.3k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 3948|  12.3k|      Node* target = qn->target;
 3949|       |
 3950|  12.3k|      if ((state & IN_REPEAT) != 0) {
  ------------------
  |  | 3270|  12.3k|#define IN_REPEAT       (1<<2)
  ------------------
  |  Branch (3950:11): [True: 822, False: 11.5k]
  ------------------
 3951|    822|	qn->state |= NST_IN_REPEAT;
  ------------------
  |  |  140|    822|#define NST_IN_REPEAT             (1<<12) /* STK_REPEAT is nested in stack. */
  ------------------
 3952|    822|      }
 3953|       |
 3954|  12.3k|      if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 1) {
  ------------------
  |  |  422|  24.6k|#define IS_REPEAT_INFINITE(n)   ((n) == REPEAT_INFINITE)
  |  |  ------------------
  |  |  |  |  421|  12.3k|#define REPEAT_INFINITE         -1
  |  |  ------------------
  |  |  |  Branch (422:33): [True: 11.9k, False: 411]
  |  |  ------------------
  ------------------
  |  Branch (3954:44): [True: 411, False: 0]
  ------------------
 3955|  12.3k|	r = get_min_match_length(target, &d, env);
 3956|  12.3k|	if (r) break;
  ------------------
  |  Branch (3956:6): [True: 0, False: 12.3k]
  ------------------
 3957|  12.3k|	if (d == 0) {
  ------------------
  |  Branch (3957:6): [True: 0, False: 12.3k]
  ------------------
 3958|      0|	  qn->target_empty_info = NQ_TARGET_IS_EMPTY;
  ------------------
  |  |  123|      0|#define NQ_TARGET_IS_EMPTY        1
  ------------------
 3959|      0|#ifdef USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT
 3960|      0|	  r = quantifiers_memory_node_info(target);
 3961|      0|	  if (r < 0) break;
  ------------------
  |  Branch (3961:8): [True: 0, False: 0]
  ------------------
 3962|      0|	  if (r > 0) {
  ------------------
  |  Branch (3962:8): [True: 0, False: 0]
  ------------------
 3963|      0|	    qn->target_empty_info = r;
 3964|      0|	  }
 3965|      0|#endif
 3966|       |#if 0
 3967|       |	  r = get_max_match_length(target, &d, env);
 3968|       |	  if (r == 0 && d == 0) {
 3969|       |	    /*  ()* ==> ()?, ()+ ==> ()  */
 3970|       |	    qn->upper = 1;
 3971|       |	    if (qn->lower > 1) qn->lower = 1;
 3972|       |	    if (NTYPE(target) == NT_STR) {
 3973|       |	      qn->upper = qn->lower = 0;  /* /(?:)+/ ==> // */
 3974|       |	    }
 3975|       |	  }
 3976|       |#endif
 3977|      0|	}
 3978|  12.3k|      }
 3979|       |
 3980|  12.3k|      state |= IN_REPEAT;
  ------------------
  |  | 3270|  12.3k|#define IN_REPEAT       (1<<2)
  ------------------
 3981|  12.3k|      if (qn->lower != qn->upper)
  ------------------
  |  Branch (3981:11): [True: 12.3k, False: 0]
  ------------------
 3982|  12.3k|	state |= IN_VAR_REPEAT;
  ------------------
  |  | 3271|  12.3k|#define IN_VAR_REPEAT   (1<<3)
  ------------------
 3983|  12.3k|      r = setup_tree(target, reg, state, env);
 3984|  12.3k|      if (r) break;
  ------------------
  |  Branch (3984:11): [True: 0, False: 12.3k]
  ------------------
 3985|       |
 3986|       |      /* expand string */
 3987|  12.3k|#define EXPAND_STRING_MAX_LENGTH  100
 3988|  12.3k|      if (NTYPE(target) == NT_STR) {
  ------------------
  |  |   69|  12.3k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
                    if (NTYPE(target) == NT_STR) {
  ------------------
  |  |   38|  12.3k|#define NT_STR         0
  ------------------
  |  Branch (3988:11): [True: 411, False: 11.9k]
  ------------------
 3989|    411|	if (qn->lower > 1) {
  ------------------
  |  Branch (3989:6): [True: 0, False: 411]
  ------------------
 3990|      0|	  int i, n = qn->lower;
 3991|      0|	  OnigDistance len = NSTRING_LEN(target);
  ------------------
  |  |  108|      0|#define NSTRING_LEN(node) (OnigDistance )((node)->u.str.end - (node)->u.str.s)
  ------------------
 3992|      0|	  StrNode* sn = NSTR(target);
  ------------------
  |  |   76|      0|#define NSTR(node)         (&((node)->u.str))
  ------------------
 3993|      0|	  Node* np;
 3994|       |
 3995|      0|	  np = onig_node_new_str(sn->s, sn->end);
 3996|      0|	  if (IS_NULL(np)) return ONIGERR_MEMORY;
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	  if (IS_NULL(np)) return ONIGERR_MEMORY;
  ------------------
  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  ------------------
 3997|      0|	  NSTR(np)->flag = sn->flag;
  ------------------
  |  |   76|      0|#define NSTR(node)         (&((node)->u.str))
  ------------------
 3998|       |
 3999|      0|	  for (i = 1; i < n && (i+1) * len <= EXPAND_STRING_MAX_LENGTH; i++) {
  ------------------
  |  | 3987|      0|#define EXPAND_STRING_MAX_LENGTH  100
  ------------------
  |  Branch (3999:16): [True: 0, False: 0]
  |  Branch (3999:25): [True: 0, False: 0]
  ------------------
 4000|      0|	    r = onig_node_str_cat(np, sn->s, sn->end);
 4001|      0|	    if (r) {
  ------------------
  |  Branch (4001:10): [True: 0, False: 0]
  ------------------
 4002|      0|	      onig_node_free(np);
 4003|      0|	      return r;
 4004|      0|	    }
 4005|      0|	  }
 4006|      0|	  if (i < qn->upper || IS_REPEAT_INFINITE(qn->upper)) {
  ------------------
  |  |  422|      0|#define IS_REPEAT_INFINITE(n)   ((n) == REPEAT_INFINITE)
  |  |  ------------------
  |  |  |  |  421|      0|#define REPEAT_INFINITE         -1
  |  |  ------------------
  |  |  |  Branch (422:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (4006:8): [True: 0, False: 0]
  ------------------
 4007|      0|	    Node *np1, *np2;
 4008|       |
 4009|      0|	    qn->lower -= i;
 4010|      0|	    if (! IS_REPEAT_INFINITE(qn->upper))
  ------------------
  |  |  422|      0|#define IS_REPEAT_INFINITE(n)   ((n) == REPEAT_INFINITE)
  |  |  ------------------
  |  |  |  |  421|      0|#define REPEAT_INFINITE         -1
  |  |  ------------------
  ------------------
  |  Branch (4010:10): [True: 0, False: 0]
  ------------------
 4011|      0|	      qn->upper -= i;
 4012|       |
 4013|      0|	    np1 = onig_node_new_list(np, NULL);
 4014|      0|	    if (IS_NULL(np1)) {
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4015|      0|	      onig_node_free(np);
 4016|      0|	      return ONIGERR_MEMORY;
  ------------------
  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  ------------------
 4017|      0|	    }
 4018|      0|	    swap_node(np1, node);
 4019|      0|	    np2 = onig_node_list_add(node, np1);
 4020|      0|	    if (IS_NULL(np2)) {
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4021|      0|	      onig_node_free(np1);
 4022|      0|	      return ONIGERR_MEMORY;
  ------------------
  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  ------------------
 4023|      0|	    }
 4024|      0|	  }
 4025|      0|	  else {
 4026|      0|	    swap_node(np, node);
 4027|      0|	    onig_node_free(np);
 4028|      0|	  }
 4029|      0|	  break; /* break case NT_QTFR: */
 4030|      0|	}
 4031|    411|      }
 4032|       |
 4033|       |#ifdef USE_OP_PUSH_OR_JUMP_EXACT
 4034|       |      if (qn->greedy && (qn->target_empty_info != 0)) {
 4035|       |	if (NTYPE(target) == NT_QTFR) {
 4036|       |	  QtfrNode* tqn = NQTFR(target);
 4037|       |	  if (IS_NOT_NULL(tqn->head_exact)) {
 4038|       |	    qn->head_exact  = tqn->head_exact;
 4039|       |	    tqn->head_exact = NULL;
 4040|       |	  }
 4041|       |	}
 4042|       |	else {
 4043|       |	  qn->head_exact = get_head_value_node(qn->target, 1, reg);
 4044|       |	}
 4045|       |      }
 4046|       |#endif
 4047|  12.3k|    }
 4048|  12.3k|    break;
 4049|       |
 4050|  12.3k|  case NT_ENCLOSE:
  ------------------
  |  |   44|  2.46k|#define NT_ENCLOSE     6
  ------------------
  |  Branch (4050:3): [True: 2.46k, False: 68.2k]
  ------------------
 4051|  2.46k|    {
 4052|  2.46k|      EncloseNode* en = NENCLOSE(node);
  ------------------
  |  |   81|  2.46k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 4053|       |
 4054|  2.46k|      switch (en->type) {
  ------------------
  |  Branch (4054:15): [True: 0, False: 2.46k]
  ------------------
 4055|    411|      case ENCLOSE_OPTION:
  ------------------
  |  |   95|    411|#define ENCLOSE_OPTION           (1<<1)
  ------------------
  |  Branch (4055:7): [True: 411, False: 2.05k]
  ------------------
 4056|    411|	{
 4057|    411|	  OnigOptionType options = reg->options;
 4058|    411|	  reg->options = NENCLOSE(node)->option;
  ------------------
  |  |   81|    411|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 4059|    411|	  r = setup_tree(NENCLOSE(node)->target, reg, state, env);
  ------------------
  |  |   81|    411|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 4060|    411|	  reg->options = options;
 4061|    411|	}
 4062|    411|	break;
 4063|       |
 4064|  2.05k|      case ENCLOSE_MEMORY:
  ------------------
  |  |   94|  2.05k|#define ENCLOSE_MEMORY           (1<<0)
  ------------------
  |  Branch (4064:7): [True: 2.05k, False: 411]
  ------------------
 4065|  2.05k|	if ((state & (IN_ALT | IN_NOT | IN_VAR_REPEAT | IN_CALL)) != 0) {
  ------------------
  |  | 3268|  2.05k|#define IN_ALT          (1<<0)
  ------------------
              	if ((state & (IN_ALT | IN_NOT | IN_VAR_REPEAT | IN_CALL)) != 0) {
  ------------------
  |  | 3269|  2.05k|#define IN_NOT          (1<<1)
  ------------------
              	if ((state & (IN_ALT | IN_NOT | IN_VAR_REPEAT | IN_CALL)) != 0) {
  ------------------
  |  | 3271|  2.05k|#define IN_VAR_REPEAT   (1<<3)
  ------------------
              	if ((state & (IN_ALT | IN_NOT | IN_VAR_REPEAT | IN_CALL)) != 0) {
  ------------------
  |  | 3272|  2.05k|#define IN_CALL         (1<<4)
  ------------------
  |  Branch (4065:6): [True: 0, False: 2.05k]
  ------------------
 4066|      0|	  BIT_STATUS_ON_AT(env->bt_mem_start, en->regnum);
  ------------------
  |  |  373|      0|#define BIT_STATUS_ON_AT(stats,n) do {\
  |  |  374|      0|  if ((n) < (int )BIT_STATUS_BITS_NUM)\
  |  |  ------------------
  |  |  |  |  367|      0|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  |  |  ------------------
  |  |  |  Branch (374:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  375|      0|    (stats) |= (1 << (n));\
  |  |  376|      0|  else\
  |  |  377|      0|    (stats) |= 1;\
  |  |  378|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (378:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4067|       |	  /* SET_ENCLOSE_STATUS(node, NST_MEM_IN_ALT_NOT); */
 4068|      0|	}
 4069|  2.05k|	if (IS_ENCLOSE_CALLED(en))
  ------------------
  |  |  147|  2.05k|#define IS_ENCLOSE_CALLED(en)          (((en)->state & NST_CALLED)        != 0)
  |  |  ------------------
  |  |  |  |  136|  2.05k|#define NST_CALLED                (1<<8)
  |  |  ------------------
  |  |  |  Branch (147:40): [True: 0, False: 2.05k]
  |  |  ------------------
  ------------------
 4070|      0|	  state |= IN_CALL;
  ------------------
  |  | 3272|      0|#define IN_CALL         (1<<4)
  ------------------
 4071|  2.05k|	if (IS_ENCLOSE_RECURSION(en))
  ------------------
  |  |  149|  2.05k|#define IS_ENCLOSE_RECURSION(en)       (((en)->state & NST_RECURSION)     != 0)
  |  |  ------------------
  |  |  |  |  135|  2.05k|#define NST_RECURSION             (1<<7)
  |  |  ------------------
  |  |  |  Branch (149:40): [True: 0, False: 2.05k]
  |  |  ------------------
  ------------------
 4072|      0|	  state |= IN_RECCALL;
  ------------------
  |  | 3273|      0|#define IN_RECCALL      (1<<5)
  ------------------
 4073|  2.05k|	else if ((state & IN_RECCALL) != 0)
  ------------------
  |  | 3273|  2.05k|#define IN_RECCALL      (1<<5)
  ------------------
  |  Branch (4073:11): [True: 0, False: 2.05k]
  ------------------
 4074|      0|	  SET_CALL_RECURSION(node);
  ------------------
  |  |  160|      0|#define SET_CALL_RECURSION(node)       (node)->u.call.state |= NST_RECURSION
  |  |  ------------------
  |  |  |  |  135|      0|#define NST_RECURSION             (1<<7)
  |  |  ------------------
  ------------------
 4075|  2.05k|	r = setup_tree(en->target, reg, state, env);
 4076|  2.05k|	break;
 4077|       |
 4078|      0|      case ENCLOSE_STOP_BACKTRACK:
  ------------------
  |  |   96|      0|#define ENCLOSE_STOP_BACKTRACK   (1<<2)
  ------------------
  |  Branch (4078:7): [True: 0, False: 2.46k]
  ------------------
 4079|      0|	{
 4080|      0|	  Node* target = en->target;
 4081|      0|	  r = setup_tree(target, reg, state, env);
 4082|      0|	  if (NTYPE(target) == NT_QTFR) {
  ------------------
  |  |   69|      0|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
              	  if (NTYPE(target) == NT_QTFR) {
  ------------------
  |  |   43|      0|#define NT_QTFR        5
  ------------------
  |  Branch (4082:8): [True: 0, False: 0]
  ------------------
 4083|      0|	    QtfrNode* tqn = NQTFR(target);
  ------------------
  |  |   80|      0|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 4084|      0|	    if (IS_REPEAT_INFINITE(tqn->upper) && tqn->lower <= 1 &&
  ------------------
  |  |  422|      0|#define IS_REPEAT_INFINITE(n)   ((n) == REPEAT_INFINITE)
  |  |  ------------------
  |  |  |  |  421|      0|#define REPEAT_INFINITE         -1
  |  |  ------------------
  |  |  |  Branch (422:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (4084:44): [True: 0, False: 0]
  ------------------
 4085|      0|		tqn->greedy != 0) {  /* (?>a*), a*+ etc... */
  ------------------
  |  Branch (4085:3): [True: 0, False: 0]
  ------------------
 4086|      0|	      int qtype = NTYPE(tqn->target);
  ------------------
  |  |   69|      0|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
 4087|      0|	      if (IS_NODE_TYPE_SIMPLE(qtype))
  ------------------
  |  |   66|      0|  ((NTYPE2BIT(type) & (BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE |\
  |  |  ------------------
  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  ------------------
  |  |                 ((NTYPE2BIT(type) & (BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE |\
  |  |  ------------------
  |  |  |  |   53|      0|#define BIT_NT_STR        NTYPE2BIT(NT_STR)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 ((NTYPE2BIT(type) & (BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE |\
  |  |  ------------------
  |  |  |  |   54|      0|#define BIT_NT_CCLASS     NTYPE2BIT(NT_CCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 ((NTYPE2BIT(type) & (BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE |\
  |  |  ------------------
  |  |  |  |   55|      0|#define BIT_NT_CTYPE      NTYPE2BIT(NT_CTYPE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   67|      0|                       BIT_NT_CANY | BIT_NT_BREF)) != 0)
  |  |  ------------------
  |  |  |  |   56|      0|#define BIT_NT_CANY       NTYPE2BIT(NT_CANY)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                                      BIT_NT_CANY | BIT_NT_BREF)) != 0)
  |  |  ------------------
  |  |  |  |   57|      0|#define BIT_NT_BREF       NTYPE2BIT(NT_BREF)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4088|      0|		SET_ENCLOSE_STATUS(node, NST_STOP_BT_SIMPLE_REPEAT);
  ------------------
  |  |  144|      0|#define SET_ENCLOSE_STATUS(node,f)      (node)->u.enclose.state |=  (f)
  ------------------
 4089|      0|	    }
 4090|      0|	  }
 4091|      0|	}
 4092|      0|	break;
 4093|       |
 4094|      0|      case ENCLOSE_CONDITION:
  ------------------
  |  |   97|      0|#define ENCLOSE_CONDITION        (1<<3)
  ------------------
  |  Branch (4094:7): [True: 0, False: 2.46k]
  ------------------
 4095|      0|#ifdef USE_NAMED_GROUP
 4096|      0|	if (! IS_ENCLOSE_NAME_REF(NENCLOSE(node)) &&
  ------------------
  |  |  158|      0|#define IS_ENCLOSE_NAME_REF(en)        (((en)->state & NST_NAME_REF)      != 0)
  |  |  ------------------
  |  |  |  |  139|      0|#define NST_NAME_REF              (1<<11)
  |  |  ------------------
  ------------------
  |  Branch (4096:6): [True: 0, False: 0]
  ------------------
 4097|      0|	    env->num_named > 0 &&
  ------------------
  |  Branch (4097:6): [True: 0, False: 0]
  ------------------
 4098|      0|	    IS_SYNTAX_BV(env->syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) &&
  ------------------
  |  |  332|      0|#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
  |  |  ------------------
  |  |  |  Branch (332:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4099|      0|	    !ONIG_IS_OPTION_ON(env->option, ONIG_OPTION_CAPTURE_GROUP)) {
  ------------------
  |  |  479|      0|#define ONIG_IS_OPTION_ON(options,option)   ((options) & (option))
  ------------------
  |  Branch (4099:6): [True: 0, False: 0]
  ------------------
 4100|      0|	  return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;
  ------------------
  |  |  678|      0|#define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED         -209
  ------------------
 4101|      0|	}
 4102|      0|#endif
 4103|      0|	if (NENCLOSE(node)->regnum > env->num_mem)
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
  |  Branch (4103:6): [True: 0, False: 0]
  ------------------
 4104|      0|	  return ONIGERR_INVALID_BACKREF;
  ------------------
  |  |  677|      0|#define ONIGERR_INVALID_BACKREF                              -208
  ------------------
 4105|      0|	r = setup_tree(NENCLOSE(node)->target, reg, state, env);
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 4106|      0|	break;
 4107|       |
 4108|      0|      case ENCLOSE_ABSENT:
  ------------------
  |  |   98|      0|#define ENCLOSE_ABSENT           (1<<4)
  ------------------
  |  Branch (4108:7): [True: 0, False: 2.46k]
  ------------------
 4109|      0|	r = setup_tree(NENCLOSE(node)->target, reg, state, env);
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 4110|      0|	break;
 4111|  2.46k|      }
 4112|  2.46k|    }
 4113|  2.46k|    break;
 4114|       |
 4115|  11.9k|  case NT_ANCHOR:
  ------------------
  |  |   45|  11.9k|#define NT_ANCHOR      7
  ------------------
  |  Branch (4115:3): [True: 11.9k, False: 58.7k]
  ------------------
 4116|  11.9k|    {
 4117|  11.9k|      AnchorNode* an = NANCHOR(node);
  ------------------
  |  |   82|  11.9k|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
 4118|       |
 4119|  11.9k|      switch (an->type) {
  ------------------
  |  Branch (4119:15): [True: 11.9k, False: 0]
  ------------------
 4120|      0|      case ANCHOR_PREC_READ:
  ------------------
  |  |  551|      0|#define ANCHOR_PREC_READ        (1<<10)
  ------------------
  |  Branch (4120:7): [True: 0, False: 11.9k]
  ------------------
 4121|      0|	r = setup_tree(an->target, reg, state, env);
 4122|      0|	break;
 4123|      0|      case ANCHOR_PREC_READ_NOT:
  ------------------
  |  |  552|      0|#define ANCHOR_PREC_READ_NOT    (1<<11)
  ------------------
  |  Branch (4123:7): [True: 0, False: 11.9k]
  ------------------
 4124|      0|	r = setup_tree(an->target, reg, (state | IN_NOT), env);
  ------------------
  |  | 3269|      0|#define IN_NOT          (1<<1)
  ------------------
 4125|      0|	break;
 4126|       |
 4127|       |/* allowed node types in look-behind */
 4128|      0|#define ALLOWED_TYPE_IN_LB  \
 4129|      0|  ( BIT_NT_LIST | BIT_NT_ALT | BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE | \
 4130|      0|    BIT_NT_CANY | BIT_NT_ANCHOR | BIT_NT_ENCLOSE | BIT_NT_QTFR | BIT_NT_CALL )
 4131|       |
 4132|      0|#define ALLOWED_ENCLOSE_IN_LB       ( ENCLOSE_MEMORY | ENCLOSE_OPTION )
 4133|      0|#define ALLOWED_ENCLOSE_IN_LB_NOT   ENCLOSE_OPTION
 4134|       |
 4135|      0|#define ALLOWED_ANCHOR_IN_LB \
 4136|      0|( ANCHOR_LOOK_BEHIND | ANCHOR_LOOK_BEHIND_NOT | ANCHOR_BEGIN_LINE | \
 4137|      0|  ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION | ANCHOR_KEEP | \
 4138|      0|  ANCHOR_WORD_BOUND | ANCHOR_NOT_WORD_BOUND | \
 4139|      0|  ANCHOR_WORD_BEGIN | ANCHOR_WORD_END )
 4140|      0|#define ALLOWED_ANCHOR_IN_LB_NOT \
 4141|      0|( ANCHOR_LOOK_BEHIND | ANCHOR_LOOK_BEHIND_NOT | ANCHOR_BEGIN_LINE | \
 4142|      0|  ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION | ANCHOR_KEEP | \
 4143|      0|  ANCHOR_WORD_BOUND | ANCHOR_NOT_WORD_BOUND | \
 4144|      0|  ANCHOR_WORD_BEGIN | ANCHOR_WORD_END )
 4145|       |
 4146|      0|      case ANCHOR_LOOK_BEHIND:
  ------------------
  |  |  553|      0|#define ANCHOR_LOOK_BEHIND      (1<<12)
  ------------------
  |  Branch (4146:7): [True: 0, False: 11.9k]
  ------------------
 4147|      0|	{
 4148|      0|	  r = check_type_tree(an->target, ALLOWED_TYPE_IN_LB,
  ------------------
  |  | 4129|      0|  ( BIT_NT_LIST | BIT_NT_ALT | BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE | \
  |  |  ------------------
  |  |  |  |   61|      0|#define BIT_NT_LIST       NTYPE2BIT(NT_LIST)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 ( BIT_NT_LIST | BIT_NT_ALT | BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE | \
  |  |  ------------------
  |  |  |  |   62|      0|#define BIT_NT_ALT        NTYPE2BIT(NT_ALT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 ( BIT_NT_LIST | BIT_NT_ALT | BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE | \
  |  |  ------------------
  |  |  |  |   53|      0|#define BIT_NT_STR        NTYPE2BIT(NT_STR)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 ( BIT_NT_LIST | BIT_NT_ALT | BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE | \
  |  |  ------------------
  |  |  |  |   54|      0|#define BIT_NT_CCLASS     NTYPE2BIT(NT_CCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 ( BIT_NT_LIST | BIT_NT_ALT | BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE | \
  |  |  ------------------
  |  |  |  |   55|      0|#define BIT_NT_CTYPE      NTYPE2BIT(NT_CTYPE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4130|      0|    BIT_NT_CANY | BIT_NT_ANCHOR | BIT_NT_ENCLOSE | BIT_NT_QTFR | BIT_NT_CALL )
  |  |  ------------------
  |  |  |  |   56|      0|#define BIT_NT_CANY       NTYPE2BIT(NT_CANY)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   BIT_NT_CANY | BIT_NT_ANCHOR | BIT_NT_ENCLOSE | BIT_NT_QTFR | BIT_NT_CALL )
  |  |  ------------------
  |  |  |  |   60|      0|#define BIT_NT_ANCHOR     NTYPE2BIT(NT_ANCHOR)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   BIT_NT_CANY | BIT_NT_ANCHOR | BIT_NT_ENCLOSE | BIT_NT_QTFR | BIT_NT_CALL )
  |  |  ------------------
  |  |  |  |   59|      0|#define BIT_NT_ENCLOSE    NTYPE2BIT(NT_ENCLOSE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   BIT_NT_CANY | BIT_NT_ANCHOR | BIT_NT_ENCLOSE | BIT_NT_QTFR | BIT_NT_CALL )
  |  |  ------------------
  |  |  |  |   58|      0|#define BIT_NT_QTFR       NTYPE2BIT(NT_QTFR)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   BIT_NT_CANY | BIT_NT_ANCHOR | BIT_NT_ENCLOSE | BIT_NT_QTFR | BIT_NT_CALL )
  |  |  ------------------
  |  |  |  |   63|      0|#define BIT_NT_CALL       NTYPE2BIT(NT_CALL)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4149|      0|			      ALLOWED_ENCLOSE_IN_LB, ALLOWED_ANCHOR_IN_LB);
  ------------------
  |  | 4132|      0|#define ALLOWED_ENCLOSE_IN_LB       ( ENCLOSE_MEMORY | ENCLOSE_OPTION )
  |  |  ------------------
  |  |  |  |   94|      0|#define ENCLOSE_MEMORY           (1<<0)
  |  |  ------------------
  |  |               #define ALLOWED_ENCLOSE_IN_LB       ( ENCLOSE_MEMORY | ENCLOSE_OPTION )
  |  |  ------------------
  |  |  |  |   95|      0|#define ENCLOSE_OPTION           (1<<1)
  |  |  ------------------
  ------------------
              			      ALLOWED_ENCLOSE_IN_LB, ALLOWED_ANCHOR_IN_LB);
  ------------------
  |  | 4135|      0|#define ALLOWED_ANCHOR_IN_LB \
  |  | 4136|      0|( ANCHOR_LOOK_BEHIND | ANCHOR_LOOK_BEHIND_NOT | ANCHOR_BEGIN_LINE | \
  |  |  ------------------
  |  |  |  |  553|      0|#define ANCHOR_LOOK_BEHIND      (1<<12)
  |  |  ------------------
  |  |               ( ANCHOR_LOOK_BEHIND | ANCHOR_LOOK_BEHIND_NOT | ANCHOR_BEGIN_LINE | \
  |  |  ------------------
  |  |  |  |  554|      0|#define ANCHOR_LOOK_BEHIND_NOT  (1<<13)
  |  |  ------------------
  |  |               ( ANCHOR_LOOK_BEHIND | ANCHOR_LOOK_BEHIND_NOT | ANCHOR_BEGIN_LINE | \
  |  |  ------------------
  |  |  |  |  541|      0|#define ANCHOR_BEGIN_LINE       (1<<1)
  |  |  ------------------
  |  | 4137|      0|  ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION | ANCHOR_KEEP | \
  |  |  ------------------
  |  |  |  |  545|      0|#define ANCHOR_END_LINE         (1<<5)
  |  |  ------------------
  |  |                 ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION | ANCHOR_KEEP | \
  |  |  ------------------
  |  |  |  |  540|      0|#define ANCHOR_BEGIN_BUF        (1<<0)
  |  |  ------------------
  |  |                 ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION | ANCHOR_KEEP | \
  |  |  ------------------
  |  |  |  |  542|      0|#define ANCHOR_BEGIN_POSITION   (1<<2)
  |  |  ------------------
  |  |                 ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION | ANCHOR_KEEP | \
  |  |  ------------------
  |  |  |  |  559|      0|#define ANCHOR_KEEP             (1<<16)
  |  |  ------------------
  |  | 4138|      0|  ANCHOR_WORD_BOUND | ANCHOR_NOT_WORD_BOUND | \
  |  |  ------------------
  |  |  |  |  547|      0|#define ANCHOR_WORD_BOUND       (1<<6)
  |  |  ------------------
  |  |                 ANCHOR_WORD_BOUND | ANCHOR_NOT_WORD_BOUND | \
  |  |  ------------------
  |  |  |  |  548|      0|#define ANCHOR_NOT_WORD_BOUND   (1<<7)
  |  |  ------------------
  |  | 4139|      0|  ANCHOR_WORD_BEGIN | ANCHOR_WORD_END )
  |  |  ------------------
  |  |  |  |  549|      0|#define ANCHOR_WORD_BEGIN       (1<<8)
  |  |  ------------------
  |  |                 ANCHOR_WORD_BEGIN | ANCHOR_WORD_END )
  |  |  ------------------
  |  |  |  |  550|      0|#define ANCHOR_WORD_END         (1<<9)
  |  |  ------------------
  ------------------
 4150|      0|	  if (r < 0) return r;
  ------------------
  |  Branch (4150:8): [True: 0, False: 0]
  ------------------
 4151|      0|	  if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
  ------------------
  |  |  665|      0|#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN                  -122
  ------------------
  |  Branch (4151:8): [True: 0, False: 0]
  ------------------
 4152|      0|	  if (NTYPE(node) != NT_ANCHOR) goto restart;
  ------------------
  |  |   69|      0|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
              	  if (NTYPE(node) != NT_ANCHOR) goto restart;
  ------------------
  |  |   45|      0|#define NT_ANCHOR      7
  ------------------
  |  Branch (4152:8): [True: 0, False: 0]
  ------------------
 4153|      0|	  r = setup_tree(an->target, reg, (state | IN_LOOK_BEHIND), env);
  ------------------
  |  | 3274|      0|#define IN_LOOK_BEHIND  (1<<6)
  ------------------
 4154|      0|	  if (r != 0) return r;
  ------------------
  |  Branch (4154:8): [True: 0, False: 0]
  ------------------
 4155|      0|	  r = setup_look_behind(node, reg, env);
 4156|      0|	}
 4157|      0|	break;
 4158|       |
 4159|      0|      case ANCHOR_LOOK_BEHIND_NOT:
  ------------------
  |  |  554|      0|#define ANCHOR_LOOK_BEHIND_NOT  (1<<13)
  ------------------
  |  Branch (4159:7): [True: 0, False: 11.9k]
  ------------------
 4160|      0|	{
 4161|      0|	  r = check_type_tree(an->target, ALLOWED_TYPE_IN_LB,
  ------------------
  |  | 4129|      0|  ( BIT_NT_LIST | BIT_NT_ALT | BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE | \
  |  |  ------------------
  |  |  |  |   61|      0|#define BIT_NT_LIST       NTYPE2BIT(NT_LIST)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 ( BIT_NT_LIST | BIT_NT_ALT | BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE | \
  |  |  ------------------
  |  |  |  |   62|      0|#define BIT_NT_ALT        NTYPE2BIT(NT_ALT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 ( BIT_NT_LIST | BIT_NT_ALT | BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE | \
  |  |  ------------------
  |  |  |  |   53|      0|#define BIT_NT_STR        NTYPE2BIT(NT_STR)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 ( BIT_NT_LIST | BIT_NT_ALT | BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE | \
  |  |  ------------------
  |  |  |  |   54|      0|#define BIT_NT_CCLASS     NTYPE2BIT(NT_CCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 ( BIT_NT_LIST | BIT_NT_ALT | BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE | \
  |  |  ------------------
  |  |  |  |   55|      0|#define BIT_NT_CTYPE      NTYPE2BIT(NT_CTYPE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4130|      0|    BIT_NT_CANY | BIT_NT_ANCHOR | BIT_NT_ENCLOSE | BIT_NT_QTFR | BIT_NT_CALL )
  |  |  ------------------
  |  |  |  |   56|      0|#define BIT_NT_CANY       NTYPE2BIT(NT_CANY)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   BIT_NT_CANY | BIT_NT_ANCHOR | BIT_NT_ENCLOSE | BIT_NT_QTFR | BIT_NT_CALL )
  |  |  ------------------
  |  |  |  |   60|      0|#define BIT_NT_ANCHOR     NTYPE2BIT(NT_ANCHOR)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   BIT_NT_CANY | BIT_NT_ANCHOR | BIT_NT_ENCLOSE | BIT_NT_QTFR | BIT_NT_CALL )
  |  |  ------------------
  |  |  |  |   59|      0|#define BIT_NT_ENCLOSE    NTYPE2BIT(NT_ENCLOSE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   BIT_NT_CANY | BIT_NT_ANCHOR | BIT_NT_ENCLOSE | BIT_NT_QTFR | BIT_NT_CALL )
  |  |  ------------------
  |  |  |  |   58|      0|#define BIT_NT_QTFR       NTYPE2BIT(NT_QTFR)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   BIT_NT_CANY | BIT_NT_ANCHOR | BIT_NT_ENCLOSE | BIT_NT_QTFR | BIT_NT_CALL )
  |  |  ------------------
  |  |  |  |   63|      0|#define BIT_NT_CALL       NTYPE2BIT(NT_CALL)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|      0|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4162|      0|		      ALLOWED_ENCLOSE_IN_LB_NOT, ALLOWED_ANCHOR_IN_LB_NOT);
  ------------------
  |  | 4133|      0|#define ALLOWED_ENCLOSE_IN_LB_NOT   ENCLOSE_OPTION
  |  |  ------------------
  |  |  |  |   95|      0|#define ENCLOSE_OPTION           (1<<1)
  |  |  ------------------
  ------------------
              		      ALLOWED_ENCLOSE_IN_LB_NOT, ALLOWED_ANCHOR_IN_LB_NOT);
  ------------------
  |  | 4140|      0|#define ALLOWED_ANCHOR_IN_LB_NOT \
  |  | 4141|      0|( ANCHOR_LOOK_BEHIND | ANCHOR_LOOK_BEHIND_NOT | ANCHOR_BEGIN_LINE | \
  |  |  ------------------
  |  |  |  |  553|      0|#define ANCHOR_LOOK_BEHIND      (1<<12)
  |  |  ------------------
  |  |               ( ANCHOR_LOOK_BEHIND | ANCHOR_LOOK_BEHIND_NOT | ANCHOR_BEGIN_LINE | \
  |  |  ------------------
  |  |  |  |  554|      0|#define ANCHOR_LOOK_BEHIND_NOT  (1<<13)
  |  |  ------------------
  |  |               ( ANCHOR_LOOK_BEHIND | ANCHOR_LOOK_BEHIND_NOT | ANCHOR_BEGIN_LINE | \
  |  |  ------------------
  |  |  |  |  541|      0|#define ANCHOR_BEGIN_LINE       (1<<1)
  |  |  ------------------
  |  | 4142|      0|  ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION | ANCHOR_KEEP | \
  |  |  ------------------
  |  |  |  |  545|      0|#define ANCHOR_END_LINE         (1<<5)
  |  |  ------------------
  |  |                 ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION | ANCHOR_KEEP | \
  |  |  ------------------
  |  |  |  |  540|      0|#define ANCHOR_BEGIN_BUF        (1<<0)
  |  |  ------------------
  |  |                 ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION | ANCHOR_KEEP | \
  |  |  ------------------
  |  |  |  |  542|      0|#define ANCHOR_BEGIN_POSITION   (1<<2)
  |  |  ------------------
  |  |                 ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION | ANCHOR_KEEP | \
  |  |  ------------------
  |  |  |  |  559|      0|#define ANCHOR_KEEP             (1<<16)
  |  |  ------------------
  |  | 4143|      0|  ANCHOR_WORD_BOUND | ANCHOR_NOT_WORD_BOUND | \
  |  |  ------------------
  |  |  |  |  547|      0|#define ANCHOR_WORD_BOUND       (1<<6)
  |  |  ------------------
  |  |                 ANCHOR_WORD_BOUND | ANCHOR_NOT_WORD_BOUND | \
  |  |  ------------------
  |  |  |  |  548|      0|#define ANCHOR_NOT_WORD_BOUND   (1<<7)
  |  |  ------------------
  |  | 4144|      0|  ANCHOR_WORD_BEGIN | ANCHOR_WORD_END )
  |  |  ------------------
  |  |  |  |  549|      0|#define ANCHOR_WORD_BEGIN       (1<<8)
  |  |  ------------------
  |  |                 ANCHOR_WORD_BEGIN | ANCHOR_WORD_END )
  |  |  ------------------
  |  |  |  |  550|      0|#define ANCHOR_WORD_END         (1<<9)
  |  |  ------------------
  ------------------
 4163|      0|	  if (r < 0) return r;
  ------------------
  |  Branch (4163:8): [True: 0, False: 0]
  ------------------
 4164|      0|	  if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
  ------------------
  |  |  665|      0|#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN                  -122
  ------------------
  |  Branch (4164:8): [True: 0, False: 0]
  ------------------
 4165|      0|	  if (NTYPE(node) != NT_ANCHOR) goto restart;
  ------------------
  |  |   69|      0|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
              	  if (NTYPE(node) != NT_ANCHOR) goto restart;
  ------------------
  |  |   45|      0|#define NT_ANCHOR      7
  ------------------
  |  Branch (4165:8): [True: 0, False: 0]
  ------------------
 4166|      0|	  r = setup_tree(an->target, reg, (state | IN_NOT | IN_LOOK_BEHIND),
  ------------------
  |  | 3269|      0|#define IN_NOT          (1<<1)
  ------------------
              	  r = setup_tree(an->target, reg, (state | IN_NOT | IN_LOOK_BEHIND),
  ------------------
  |  | 3274|      0|#define IN_LOOK_BEHIND  (1<<6)
  ------------------
 4167|      0|			 env);
 4168|      0|	  if (r != 0) return r;
  ------------------
  |  Branch (4168:8): [True: 0, False: 0]
  ------------------
 4169|      0|	  r = setup_look_behind(node, reg, env);
 4170|      0|	}
 4171|      0|	break;
 4172|  11.9k|      }
 4173|  11.9k|    }
 4174|  11.9k|    break;
 4175|       |
 4176|  11.9k|  default:
  ------------------
  |  Branch (4176:3): [True: 0, False: 70.6k]
  ------------------
 4177|      0|    break;
 4178|  70.6k|  }
 4179|       |
 4180|  70.6k|  return r;
 4181|  70.6k|}
regcomp.c:next_setup:
 3333|  30.8k|{
 3334|  30.8k|  int type;
 3335|       |
 3336|  32.8k| retry:
 3337|  32.8k|  type = NTYPE(node);
  ------------------
  |  |   69|  32.8k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
 3338|  32.8k|  if (type == NT_QTFR) {
  ------------------
  |  |   43|  32.8k|#define NT_QTFR        5
  ------------------
  |  Branch (3338:7): [True: 11.0k, False: 21.7k]
  ------------------
 3339|  11.0k|    QtfrNode* qn = NQTFR(node);
  ------------------
  |  |   80|  11.0k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 3340|  11.0k|    if (qn->greedy && IS_REPEAT_INFINITE(qn->upper)) {
  ------------------
  |  |  422|  10.6k|#define IS_REPEAT_INFINITE(n)   ((n) == REPEAT_INFINITE)
  |  |  ------------------
  |  |  |  |  421|  10.6k|#define REPEAT_INFINITE         -1
  |  |  ------------------
  |  |  |  Branch (422:33): [True: 10.2k, False: 411]
  |  |  ------------------
  ------------------
  |  Branch (3340:9): [True: 10.6k, False: 411]
  ------------------
 3341|  10.2k|#ifdef USE_QTFR_PEEK_NEXT
 3342|  10.2k|      Node* n = get_head_value_node(next_node, 1, reg);
 3343|       |      /* '\0': for UTF-16BE etc... */
 3344|  10.2k|      if (IS_NOT_NULL(n) && NSTR(n)->s[0] != '\0') {
  ------------------
  |  |  312|  20.5k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 6.16k, False: 4.11k]
  |  |  ------------------
  ------------------
                    if (IS_NOT_NULL(n) && NSTR(n)->s[0] != '\0') {
  ------------------
  |  |   76|  6.16k|#define NSTR(node)         (&((node)->u.str))
  ------------------
  |  Branch (3344:29): [True: 6.16k, False: 0]
  ------------------
 3345|  6.16k|	qn->next_head_exact = n;
 3346|  6.16k|      }
 3347|  10.2k|#endif
 3348|       |      /* automatic possessification a*b ==> (?>a*)b */
 3349|  10.2k|      if (qn->lower <= 1) {
  ------------------
  |  Branch (3349:11): [True: 10.2k, False: 0]
  ------------------
 3350|  10.2k|	int ttype = NTYPE(qn->target);
  ------------------
  |  |   69|  10.2k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
 3351|  10.2k|	if (IS_NODE_TYPE_SIMPLE(ttype)) {
  ------------------
  |  |   66|  10.2k|  ((NTYPE2BIT(type) & (BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE |\
  |  |  ------------------
  |  |  |  |   51|  10.2k|#define NTYPE2BIT(type)      (1<<(type))
  |  |  ------------------
  |  |                 ((NTYPE2BIT(type) & (BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE |\
  |  |  ------------------
  |  |  |  |   53|  10.2k|#define BIT_NT_STR        NTYPE2BIT(NT_STR)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|  10.2k|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 ((NTYPE2BIT(type) & (BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE |\
  |  |  ------------------
  |  |  |  |   54|  10.2k|#define BIT_NT_CCLASS     NTYPE2BIT(NT_CCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|  10.2k|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 ((NTYPE2BIT(type) & (BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE |\
  |  |  ------------------
  |  |  |  |   55|  10.2k|#define BIT_NT_CTYPE      NTYPE2BIT(NT_CTYPE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|  10.2k|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (66:3): [True: 9.45k, False: 822]
  |  |  ------------------
  |  |   67|  10.2k|                       BIT_NT_CANY | BIT_NT_BREF)) != 0)
  |  |  ------------------
  |  |  |  |   56|  10.2k|#define BIT_NT_CANY       NTYPE2BIT(NT_CANY)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|  10.2k|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                                      BIT_NT_CANY | BIT_NT_BREF)) != 0)
  |  |  ------------------
  |  |  |  |   57|  10.2k|#define BIT_NT_BREF       NTYPE2BIT(NT_BREF)
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|  10.2k|#define NTYPE2BIT(type)      (1<<(type))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3352|  9.45k|	  Node *x, *y;
 3353|  9.45k|	  x = get_head_value_node(qn->target, 0, reg);
 3354|  9.45k|	  if (IS_NOT_NULL(x)) {
  ------------------
  |  |  312|  9.45k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 8.22k, False: 1.23k]
  |  |  ------------------
  ------------------
 3355|  8.22k|	    y = get_head_value_node(next_node,  0, reg);
 3356|  8.22k|	    if (IS_NOT_NULL(y) && is_not_included(x, y, reg)) {
  ------------------
  |  |  312|  16.4k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 5.34k, False: 2.87k]
  |  |  ------------------
  ------------------
  |  Branch (3356:28): [True: 5.34k, False: 0]
  ------------------
 3357|  5.34k|	      Node* en = onig_node_new_enclose(ENCLOSE_STOP_BACKTRACK);
  ------------------
  |  |   96|  5.34k|#define ENCLOSE_STOP_BACKTRACK   (1<<2)
  ------------------
 3358|  5.34k|	      CHECK_NULL_RETURN_MEMERR(en);
  ------------------
  |  |  314|  5.34k|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|  5.34k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 5.34k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 3359|  5.34k|	      SET_ENCLOSE_STATUS(en, NST_STOP_BT_SIMPLE_REPEAT);
  ------------------
  |  |  144|  5.34k|#define SET_ENCLOSE_STATUS(node,f)      (node)->u.enclose.state |=  (f)
  ------------------
 3360|  5.34k|	      swap_node(node, en);
 3361|  5.34k|	      NENCLOSE(node)->target = en;
  ------------------
  |  |   81|  5.34k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 3362|  5.34k|	    }
 3363|  8.22k|	  }
 3364|  9.45k|	}
 3365|  10.2k|      }
 3366|  10.2k|    }
 3367|  11.0k|  }
 3368|  21.7k|  else if (type == NT_ENCLOSE) {
  ------------------
  |  |   44|  21.7k|#define NT_ENCLOSE     6
  ------------------
  |  Branch (3368:12): [True: 2.46k, False: 19.3k]
  ------------------
 3369|  2.46k|    EncloseNode* en = NENCLOSE(node);
  ------------------
  |  |   81|  2.46k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 3370|  2.46k|    if (en->type == ENCLOSE_MEMORY) {
  ------------------
  |  |   94|  2.46k|#define ENCLOSE_MEMORY           (1<<0)
  ------------------
  |  Branch (3370:9): [True: 2.05k, False: 411]
  ------------------
 3371|  2.05k|      node = en->target;
 3372|  2.05k|      goto retry;
 3373|  2.05k|    }
 3374|  2.46k|  }
 3375|  30.8k|  return 0;
 3376|  32.8k|}
regcomp.c:get_head_value_node:
 2746|  28.7k|{
 2747|  28.7k|  Node* n = NULL_NODE;
  ------------------
  |  |  283|  28.7k|#define NULL_NODE  ((Node* )0)
  ------------------
 2748|       |
 2749|  28.7k|  switch (NTYPE(node)) {
  ------------------
  |  |   69|  28.7k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
 2750|      0|  case NT_BREF:
  ------------------
  |  |   42|      0|#define NT_BREF        4
  ------------------
  |  Branch (2750:3): [True: 0, False: 28.7k]
  ------------------
 2751|    822|  case NT_ALT:
  ------------------
  |  |   47|    822|#define NT_ALT         9
  ------------------
  |  Branch (2751:3): [True: 822, False: 27.9k]
  ------------------
 2752|  2.87k|  case NT_CANY:
  ------------------
  |  |   41|  2.87k|#define NT_CANY        3
  ------------------
  |  Branch (2752:3): [True: 2.05k, False: 26.7k]
  ------------------
 2753|  2.87k|#ifdef USE_SUBEXP_CALL
 2754|  2.87k|  case NT_CALL:
  ------------------
  |  |   48|  2.87k|#define NT_CALL       10
  ------------------
  |  Branch (2754:3): [True: 0, False: 28.7k]
  ------------------
 2755|  2.87k|#endif
 2756|  2.87k|    break;
 2757|       |
 2758|      0|  case NT_CTYPE:
  ------------------
  |  |   40|      0|#define NT_CTYPE       2
  ------------------
  |  Branch (2758:3): [True: 0, False: 28.7k]
  ------------------
 2759|  9.04k|  case NT_CCLASS:
  ------------------
  |  |   39|  9.04k|#define NT_CCLASS      1
  ------------------
  |  Branch (2759:3): [True: 9.04k, False: 19.7k]
  ------------------
 2760|  9.04k|    if (exact == 0) {
  ------------------
  |  Branch (2760:9): [True: 8.22k, False: 822]
  ------------------
 2761|  8.22k|      n = node;
 2762|  8.22k|    }
 2763|  9.04k|    break;
 2764|       |
 2765|      0|  case NT_LIST:
  ------------------
  |  |   46|      0|#define NT_LIST        8
  ------------------
  |  Branch (2765:3): [True: 0, False: 28.7k]
  ------------------
 2766|      0|    n = get_head_value_node(NCAR(node), exact, reg);
  ------------------
  |  |   86|      0|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 2767|      0|    break;
 2768|       |
 2769|  11.5k|  case NT_STR:
  ------------------
  |  |   38|  11.5k|#define NT_STR         0
  ------------------
  |  Branch (2769:3): [True: 11.5k, False: 17.2k]
  ------------------
 2770|  11.5k|    {
 2771|  11.5k|      StrNode* sn = NSTR(node);
  ------------------
  |  |   76|  11.5k|#define NSTR(node)         (&((node)->u.str))
  ------------------
 2772|       |
 2773|  11.5k|      if (sn->end <= sn->s)
  ------------------
  |  Branch (2773:11): [True: 0, False: 11.5k]
  ------------------
 2774|      0|	break;
 2775|       |
 2776|  11.5k|      if (exact == 0 ||
  ------------------
  |  Branch (2776:11): [True: 5.34k, False: 6.16k]
  ------------------
 2777|  11.5k|	  NSTRING_IS_RAW(node) || !IS_IGNORECASE(reg->options)) {
  ------------------
  |  |  114|  17.6k|#define NSTRING_IS_RAW(node)          (((node)->u.str.flag & NSTR_RAW)   != 0)
  |  |  ------------------
  |  |  |  |  104|  6.16k|#define NSTR_RAW                (1<<0) /* by backslashed number */
  |  |  ------------------
  |  |  |  Branch (114:39): [True: 0, False: 6.16k]
  |  |  ------------------
  ------------------
              	  NSTRING_IS_RAW(node) || !IS_IGNORECASE(reg->options)) {
  ------------------
  |  |  396|  6.16k|#define IS_IGNORECASE(option)     ((option) & ONIG_OPTION_IGNORECASE)
  |  |  ------------------
  |  |  |  |  454|  6.16k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  ------------------
  ------------------
  |  Branch (2777:28): [True: 6.16k, False: 0]
  ------------------
 2778|  11.5k|	n = node;
 2779|  11.5k|      }
 2780|  11.5k|    }
 2781|      0|    break;
 2782|       |
 2783|  4.11k|  case NT_QTFR:
  ------------------
  |  |   43|  4.11k|#define NT_QTFR        5
  ------------------
  |  Branch (2783:3): [True: 4.11k, False: 24.6k]
  ------------------
 2784|  4.11k|    {
 2785|  4.11k|      QtfrNode* qn = NQTFR(node);
  ------------------
  |  |   80|  4.11k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 2786|  4.11k|      if (qn->lower > 0) {
  ------------------
  |  Branch (2786:11): [True: 822, False: 3.28k]
  ------------------
 2787|       |#ifdef USE_OP_PUSH_OR_JUMP_EXACT
 2788|       |	if (IS_NOT_NULL(qn->head_exact))
 2789|       |	  n = qn->head_exact;
 2790|       |	else
 2791|       |#endif
 2792|    822|	  n = get_head_value_node(qn->target, exact, reg);
 2793|    822|      }
 2794|  4.11k|    }
 2795|  4.11k|    break;
 2796|       |
 2797|      0|  case NT_ENCLOSE:
  ------------------
  |  |   44|      0|#define NT_ENCLOSE     6
  ------------------
  |  Branch (2797:3): [True: 0, False: 28.7k]
  ------------------
 2798|      0|    {
 2799|      0|      EncloseNode* en = NENCLOSE(node);
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 2800|      0|      switch (en->type) {
  ------------------
  |  Branch (2800:15): [True: 0, False: 0]
  ------------------
 2801|      0|      case ENCLOSE_OPTION:
  ------------------
  |  |   95|      0|#define ENCLOSE_OPTION           (1<<1)
  ------------------
  |  Branch (2801:7): [True: 0, False: 0]
  ------------------
 2802|      0|	{
 2803|      0|	  OnigOptionType options = reg->options;
 2804|       |
 2805|      0|	  reg->options = NENCLOSE(node)->option;
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 2806|      0|	  n = get_head_value_node(NENCLOSE(node)->target, exact, reg);
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 2807|      0|	  reg->options = options;
 2808|      0|	}
 2809|      0|	break;
 2810|       |
 2811|      0|      case ENCLOSE_MEMORY:
  ------------------
  |  |   94|      0|#define ENCLOSE_MEMORY           (1<<0)
  ------------------
  |  Branch (2811:7): [True: 0, False: 0]
  ------------------
 2812|      0|      case ENCLOSE_STOP_BACKTRACK:
  ------------------
  |  |   96|      0|#define ENCLOSE_STOP_BACKTRACK   (1<<2)
  ------------------
  |  Branch (2812:7): [True: 0, False: 0]
  ------------------
 2813|      0|      case ENCLOSE_CONDITION:
  ------------------
  |  |   97|      0|#define ENCLOSE_CONDITION        (1<<3)
  ------------------
  |  Branch (2813:7): [True: 0, False: 0]
  ------------------
 2814|      0|	n = get_head_value_node(en->target, exact, reg);
 2815|      0|	break;
 2816|       |
 2817|      0|      case ENCLOSE_ABSENT:
  ------------------
  |  |   98|      0|#define ENCLOSE_ABSENT           (1<<4)
  ------------------
  |  Branch (2817:7): [True: 0, False: 0]
  ------------------
 2818|      0|	break;
 2819|      0|      }
 2820|      0|    }
 2821|      0|    break;
 2822|       |
 2823|  1.23k|  case NT_ANCHOR:
  ------------------
  |  |   45|  1.23k|#define NT_ANCHOR      7
  ------------------
  |  Branch (2823:3): [True: 1.23k, False: 27.5k]
  ------------------
 2824|  1.23k|    if (NANCHOR(node)->type == ANCHOR_PREC_READ)
  ------------------
  |  |   82|  1.23k|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
                  if (NANCHOR(node)->type == ANCHOR_PREC_READ)
  ------------------
  |  |  551|  1.23k|#define ANCHOR_PREC_READ        (1<<10)
  ------------------
  |  Branch (2824:9): [True: 0, False: 1.23k]
  ------------------
 2825|      0|      n = get_head_value_node(NANCHOR(node)->target, exact, reg);
  ------------------
  |  |   82|      0|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
 2826|  1.23k|    break;
 2827|       |
 2828|      0|  default:
  ------------------
  |  Branch (2828:3): [True: 0, False: 28.7k]
  ------------------
 2829|      0|    break;
 2830|  28.7k|  }
 2831|       |
 2832|  28.7k|  return n;
 2833|  28.7k|}
regcomp.c:is_not_included:
 2551|  5.34k|{
 2552|  5.34k|  int i;
 2553|  5.34k|  OnigDistance len;
 2554|  5.34k|  OnigCodePoint code;
 2555|  5.34k|  UChar *p;
  ------------------
  |  |   76|  5.34k|# define UChar OnigUChar
  ------------------
 2556|  5.34k|  int ytype;
 2557|       |
 2558|  10.6k| retry:
 2559|  10.6k|  ytype = NTYPE(y);
  ------------------
  |  |   69|  10.6k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
 2560|  10.6k|  switch (NTYPE(x)) {
  ------------------
  |  |   69|  10.6k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
 2561|      0|  case NT_CTYPE:
  ------------------
  |  |   40|      0|#define NT_CTYPE       2
  ------------------
  |  Branch (2561:3): [True: 0, False: 10.6k]
  ------------------
 2562|      0|    {
 2563|      0|      switch (ytype) {
 2564|      0|      case NT_CTYPE:
  ------------------
  |  |   40|      0|#define NT_CTYPE       2
  ------------------
  |  Branch (2564:7): [True: 0, False: 0]
  ------------------
 2565|      0|	if (NCTYPE(y)->ctype == NCTYPE(x)->ctype &&
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
              	if (NCTYPE(y)->ctype == NCTYPE(x)->ctype &&
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
  |  Branch (2565:6): [True: 0, False: 0]
  ------------------
 2566|      0|	    NCTYPE(y)->not   != NCTYPE(x)->not &&
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
              	    NCTYPE(y)->not   != NCTYPE(x)->not &&
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
  |  Branch (2566:6): [True: 0, False: 0]
  ------------------
 2567|      0|	    NCTYPE(y)->ascii_range == NCTYPE(x)->ascii_range)
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
              	    NCTYPE(y)->ascii_range == NCTYPE(x)->ascii_range)
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
  |  Branch (2567:6): [True: 0, False: 0]
  ------------------
 2568|      0|	  return 1;
 2569|      0|	else
 2570|      0|	  return 0;
 2571|      0|	break;
 2572|       |
 2573|      0|      case NT_CCLASS:
  ------------------
  |  |   39|      0|#define NT_CCLASS      1
  ------------------
  |  Branch (2573:7): [True: 0, False: 0]
  ------------------
 2574|  5.34k|      swap:
 2575|  5.34k|	{
 2576|  5.34k|	  Node* tmp;
 2577|  5.34k|	  tmp = x; x = y; y = tmp;
 2578|  5.34k|	  goto retry;
 2579|      0|	}
 2580|      0|	break;
 2581|       |
 2582|      0|      case NT_STR:
  ------------------
  |  |   38|      0|#define NT_STR         0
  ------------------
  |  Branch (2582:7): [True: 0, False: 0]
  ------------------
 2583|      0|	goto swap;
 2584|      0|	break;
 2585|       |
 2586|      0|      default:
  ------------------
  |  Branch (2586:7): [True: 0, False: 0]
  ------------------
 2587|      0|	break;
 2588|      0|      }
 2589|      0|    }
 2590|      0|    break;
 2591|       |
 2592|  5.34k|  case NT_CCLASS:
  ------------------
  |  |   39|  5.34k|#define NT_CCLASS      1
  ------------------
  |  Branch (2592:3): [True: 5.34k, False: 5.34k]
  ------------------
 2593|  5.34k|    {
 2594|  5.34k|      CClassNode* xc = NCCLASS(x);
  ------------------
  |  |   77|  5.34k|#define NCCLASS(node)      (&((node)->u.cclass))
  ------------------
 2595|  5.34k|      switch (ytype) {
 2596|      0|      case NT_CTYPE:
  ------------------
  |  |   40|      0|#define NT_CTYPE       2
  ------------------
  |  Branch (2596:7): [True: 0, False: 5.34k]
  ------------------
 2597|      0|	switch (NCTYPE(y)->ctype) {
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
 2598|      0|	case ONIGENC_CTYPE_WORD:
  ------------------
  |  |  306|      0|#define ONIGENC_CTYPE_WORD     12
  ------------------
  |  Branch (2598:2): [True: 0, False: 0]
  ------------------
 2599|      0|	  if (NCTYPE(y)->not == 0) {
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
  |  Branch (2599:8): [True: 0, False: 0]
  ------------------
 2600|      0|	    if (IS_NULL(xc->mbuf) && !IS_NCCLASS_NOT(xc)) {
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	    if (IS_NULL(xc->mbuf) && !IS_NCCLASS_NOT(xc)) {
  ------------------
  |  |  809|      0|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|      0|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|      0|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2600:31): [True: 0, False: 0]
  ------------------
 2601|      0|	      for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
  ------------------
  |  |  426|      0|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  ------------------
  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  ------------------
  ------------------
  |  Branch (2601:20): [True: 0, False: 0]
  ------------------
 2602|      0|		if (BITSET_AT(xc->bs, i)) {
  ------------------
  |  |  448|      0|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (448:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2603|      0|		  if (NCTYPE(y)->ascii_range) {
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
  |  Branch (2603:9): [True: 0, False: 0]
  ------------------
 2604|      0|		    if (IS_CODE_SB_WORD(reg->enc, i)) return 0;
  ------------------
  |  |  891|      0|  (ONIGENC_IS_CODE_ASCII(code) && ONIGENC_IS_CODE_WORD(enc,code))
  |  |  ------------------
  |  |  |  |  321|      0|#define ONIGENC_IS_CODE_ASCII(code)       ((code) < 128)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (321:43): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 (ONIGENC_IS_CODE_ASCII(code) && ONIGENC_IS_CODE_WORD(enc,code))
  |  |  ------------------
  |  |  |  |  404|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (375:48): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2605|      0|		  }
 2606|      0|		  else {
 2607|      0|		    if (ONIGENC_IS_CODE_WORD(reg->enc, i)) return 0;
  ------------------
  |  |  404|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
  |  |  ------------------
  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (375:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2608|      0|		  }
 2609|      0|		}
 2610|      0|	      }
 2611|      0|	      return 1;
 2612|      0|	    }
 2613|      0|	    return 0;
 2614|      0|	  }
 2615|      0|	  else {
 2616|      0|	    if (IS_NOT_NULL(xc->mbuf)) return 0;
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2617|      0|	    for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
  ------------------
  |  |  426|      0|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  ------------------
  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  ------------------
  ------------------
  |  Branch (2617:18): [True: 0, False: 0]
  ------------------
 2618|      0|	      int is_word;
 2619|      0|	      if (NCTYPE(y)->ascii_range)
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
  |  Branch (2619:12): [True: 0, False: 0]
  ------------------
 2620|      0|		is_word = IS_CODE_SB_WORD(reg->enc, i);
  ------------------
  |  |  891|      0|  (ONIGENC_IS_CODE_ASCII(code) && ONIGENC_IS_CODE_WORD(enc,code))
  |  |  ------------------
  |  |  |  |  321|      0|#define ONIGENC_IS_CODE_ASCII(code)       ((code) < 128)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (321:43): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 (ONIGENC_IS_CODE_ASCII(code) && ONIGENC_IS_CODE_WORD(enc,code))
  |  |  ------------------
  |  |  |  |  404|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (375:48): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2621|      0|	      else
 2622|      0|		is_word = ONIGENC_IS_CODE_WORD(reg->enc, i);
  ------------------
  |  |  404|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
  |  |  ------------------
  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  ------------------
  ------------------
 2623|      0|	      if (! is_word) {
  ------------------
  |  Branch (2623:12): [True: 0, False: 0]
  ------------------
 2624|      0|		if (!IS_NCCLASS_NOT(xc)) {
  ------------------
  |  |  809|      0|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|      0|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|      0|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2624:7): [True: 0, False: 0]
  ------------------
 2625|      0|		  if (BITSET_AT(xc->bs, i))
  ------------------
  |  |  448|      0|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (448:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2626|      0|		    return 0;
 2627|      0|		}
 2628|      0|		else {
 2629|      0|		  if (! BITSET_AT(xc->bs, i))
  ------------------
  |  |  448|      0|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2629:9): [True: 0, False: 0]
  ------------------
 2630|      0|		    return 0;
 2631|      0|		}
 2632|      0|	      }
 2633|      0|	    }
 2634|      0|	    return 1;
 2635|      0|	  }
 2636|      0|	  break;
 2637|       |
 2638|      0|	default:
  ------------------
  |  Branch (2638:2): [True: 0, False: 0]
  ------------------
 2639|      0|	  break;
 2640|      0|	}
 2641|      0|	break;
 2642|       |
 2643|      0|      case NT_CCLASS:
  ------------------
  |  |   39|      0|#define NT_CCLASS      1
  ------------------
  |  Branch (2643:7): [True: 0, False: 5.34k]
  ------------------
 2644|      0|	{
 2645|      0|	  int v;
 2646|      0|	  CClassNode* yc = NCCLASS(y);
  ------------------
  |  |   77|      0|#define NCCLASS(node)      (&((node)->u.cclass))
  ------------------
 2647|       |
 2648|      0|	  for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
  ------------------
  |  |  426|      0|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  ------------------
  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  ------------------
  ------------------
  |  Branch (2648:16): [True: 0, False: 0]
  ------------------
 2649|      0|	    v = BITSET_AT(xc->bs, i);
  ------------------
  |  |  448|      0|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2650|      0|	    if ((v != 0 && !IS_NCCLASS_NOT(xc)) ||
  ------------------
  |  |  809|      0|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|      0|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|      0|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2650:11): [True: 0, False: 0]
  |  Branch (2650:21): [True: 0, False: 0]
  ------------------
 2651|      0|		(v == 0 && IS_NCCLASS_NOT(xc))) {
  ------------------
  |  |  809|      0|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|      0|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|      0|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (802:37): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2651:4): [True: 0, False: 0]
  ------------------
 2652|      0|	      v = BITSET_AT(yc->bs, i);
  ------------------
  |  |  448|      0|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2653|      0|	      if ((v != 0 && !IS_NCCLASS_NOT(yc)) ||
  ------------------
  |  |  809|      0|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|      0|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|      0|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2653:13): [True: 0, False: 0]
  |  Branch (2653:23): [True: 0, False: 0]
  ------------------
 2654|      0|		  (v == 0 && IS_NCCLASS_NOT(yc)))
  ------------------
  |  |  809|      0|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|      0|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|      0|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (802:37): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2654:6): [True: 0, False: 0]
  ------------------
 2655|      0|		return 0;
 2656|      0|	    }
 2657|      0|	  }
 2658|      0|	  if ((IS_NULL(xc->mbuf) && !IS_NCCLASS_NOT(xc)) ||
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	  if ((IS_NULL(xc->mbuf) && !IS_NCCLASS_NOT(xc)) ||
  ------------------
  |  |  809|      0|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|      0|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|      0|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2658:30): [True: 0, False: 0]
  ------------------
 2659|      0|	      (IS_NULL(yc->mbuf) && !IS_NCCLASS_NOT(yc)))
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	      (IS_NULL(yc->mbuf) && !IS_NCCLASS_NOT(yc)))
  ------------------
  |  |  809|      0|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|      0|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|      0|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2659:30): [True: 0, False: 0]
  ------------------
 2660|      0|	    return 1;
 2661|      0|	  return 0;
 2662|      0|	}
 2663|      0|	break;
 2664|       |
 2665|  5.34k|      case NT_STR:
  ------------------
  |  |   38|  5.34k|#define NT_STR         0
  ------------------
  |  Branch (2665:7): [True: 5.34k, False: 0]
  ------------------
 2666|  5.34k|	goto swap;
 2667|      0|	break;
 2668|       |
 2669|      0|      default:
  ------------------
  |  Branch (2669:7): [True: 0, False: 5.34k]
  ------------------
 2670|      0|	break;
 2671|  5.34k|      }
 2672|  5.34k|    }
 2673|      0|    break;
 2674|       |
 2675|  5.34k|  case NT_STR:
  ------------------
  |  |   38|  5.34k|#define NT_STR         0
  ------------------
  |  Branch (2675:3): [True: 5.34k, False: 5.34k]
  ------------------
 2676|  5.34k|    {
 2677|  5.34k|      StrNode* xs = NSTR(x);
  ------------------
  |  |   76|  5.34k|#define NSTR(node)         (&((node)->u.str))
  ------------------
 2678|  5.34k|      if (NSTRING_LEN(x) == 0)
  ------------------
  |  |  108|  5.34k|#define NSTRING_LEN(node) (OnigDistance )((node)->u.str.end - (node)->u.str.s)
  ------------------
  |  Branch (2678:11): [True: 0, False: 5.34k]
  ------------------
 2679|      0|	break;
 2680|       |
 2681|  5.34k|      switch (ytype) {
 2682|      0|      case NT_CTYPE:
  ------------------
  |  |   40|      0|#define NT_CTYPE       2
  ------------------
  |  Branch (2682:7): [True: 0, False: 5.34k]
  ------------------
 2683|      0|	switch (NCTYPE(y)->ctype) {
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
 2684|      0|	case ONIGENC_CTYPE_WORD:
  ------------------
  |  |  306|      0|#define ONIGENC_CTYPE_WORD     12
  ------------------
  |  Branch (2684:2): [True: 0, False: 0]
  ------------------
 2685|      0|	  if (NCTYPE(y)->ascii_range) {
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
  |  Branch (2685:8): [True: 0, False: 0]
  ------------------
 2686|      0|	    if (ONIGENC_IS_MBC_ASCII_WORD(reg->enc, xs->s, xs->end))
  ------------------
  |  |  325|      0|   onigenc_ascii_is_code_ctype( \
  |  |  ------------------
  |  |  |  Branch (325:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  326|      0|	ONIGENC_MBC_TO_CODE(enc,s,end),ONIGENC_CTYPE_WORD,enc)
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |               	ONIGENC_MBC_TO_CODE(enc,s,end),ONIGENC_CTYPE_WORD,enc)
  |  |  ------------------
  |  |  |  |  306|      0|#define ONIGENC_CTYPE_WORD     12
  |  |  ------------------
  ------------------
 2687|      0|	      return NCTYPE(y)->not;
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
 2688|      0|	    else
 2689|      0|	      return !(NCTYPE(y)->not);
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
 2690|      0|	  }
 2691|      0|	  else {
 2692|      0|	    if (ONIGENC_IS_MBC_WORD(reg->enc, xs->s, xs->end))
  ------------------
  |  |  323|      0|   ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end))
  |  |  ------------------
  |  |  |  |  404|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (375:48): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2693|      0|	      return NCTYPE(y)->not;
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
 2694|      0|	    else
 2695|      0|	      return !(NCTYPE(y)->not);
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
 2696|      0|	  }
 2697|      0|	  break;
 2698|      0|	default:
  ------------------
  |  Branch (2698:2): [True: 0, False: 0]
  ------------------
 2699|      0|	  break;
 2700|      0|	}
 2701|      0|	break;
 2702|       |
 2703|  5.34k|      case NT_CCLASS:
  ------------------
  |  |   39|  5.34k|#define NT_CCLASS      1
  ------------------
  |  Branch (2703:7): [True: 5.34k, False: 0]
  ------------------
 2704|  5.34k|	{
 2705|  5.34k|	  CClassNode* cc = NCCLASS(y);
  ------------------
  |  |   77|  5.34k|#define NCCLASS(node)      (&((node)->u.cclass))
  ------------------
 2706|       |
 2707|  5.34k|	  code = ONIGENC_MBC_TO_CODE(reg->enc, xs->s,
  ------------------
  |  |  369|  5.34k|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  ------------------
 2708|  5.34k|				     xs->s + ONIGENC_MBC_MAXLEN(reg->enc));
 2709|  5.34k|	  return (onig_is_code_in_cc(reg->enc, code, cc) != 0 ? 0 : 1);
  ------------------
  |  Branch (2709:12): [True: 0, False: 5.34k]
  ------------------
 2710|      0|	}
 2711|      0|	break;
 2712|       |
 2713|      0|      case NT_STR:
  ------------------
  |  |   38|      0|#define NT_STR         0
  ------------------
  |  Branch (2713:7): [True: 0, False: 5.34k]
  ------------------
 2714|      0|	{
 2715|      0|	  UChar *q;
  ------------------
  |  |   76|      0|# define UChar OnigUChar
  ------------------
 2716|      0|	  StrNode* ys = NSTR(y);
  ------------------
  |  |   76|      0|#define NSTR(node)         (&((node)->u.str))
  ------------------
 2717|      0|	  len = NSTRING_LEN(x);
  ------------------
  |  |  108|      0|#define NSTRING_LEN(node) (OnigDistance )((node)->u.str.end - (node)->u.str.s)
  ------------------
 2718|      0|	  if (len > NSTRING_LEN(y)) len = NSTRING_LEN(y);
  ------------------
  |  |  108|      0|#define NSTRING_LEN(node) (OnigDistance )((node)->u.str.end - (node)->u.str.s)
  ------------------
              	  if (len > NSTRING_LEN(y)) len = NSTRING_LEN(y);
  ------------------
  |  |  108|      0|#define NSTRING_LEN(node) (OnigDistance )((node)->u.str.end - (node)->u.str.s)
  ------------------
  |  Branch (2718:8): [True: 0, False: 0]
  ------------------
 2719|      0|	  if (NSTRING_IS_AMBIG(x) || NSTRING_IS_AMBIG(y)) {
  ------------------
  |  |  115|      0|#define NSTRING_IS_AMBIG(node)        (((node)->u.str.flag & NSTR_AMBIG) != 0)
  |  |  ------------------
  |  |  |  |  105|      0|#define NSTR_AMBIG              (1<<1)
  |  |  ------------------
  |  |  |  Branch (115:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	  if (NSTRING_IS_AMBIG(x) || NSTRING_IS_AMBIG(y)) {
  ------------------
  |  |  115|      0|#define NSTRING_IS_AMBIG(node)        (((node)->u.str.flag & NSTR_AMBIG) != 0)
  |  |  ------------------
  |  |  |  |  105|      0|#define NSTR_AMBIG              (1<<1)
  |  |  ------------------
  |  |  |  Branch (115:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2720|       |	    /* tiny version */
 2721|      0|	    return 0;
 2722|      0|	  }
 2723|      0|	  else {
 2724|      0|	    for (i = 0, p = ys->s, q = xs->s; (OnigDistance )i < len; i++, p++, q++) {
  ------------------
  |  Branch (2724:40): [True: 0, False: 0]
  ------------------
 2725|      0|	      if (*p != *q) return 1;
  ------------------
  |  Branch (2725:12): [True: 0, False: 0]
  ------------------
 2726|      0|	    }
 2727|      0|	  }
 2728|      0|	}
 2729|      0|	break;
 2730|       |
 2731|      0|      default:
  ------------------
  |  Branch (2731:7): [True: 0, False: 5.34k]
  ------------------
 2732|      0|	break;
 2733|  5.34k|      }
 2734|  5.34k|    }
 2735|      0|    break;
 2736|       |
 2737|      0|  default:
  ------------------
  |  Branch (2737:3): [True: 0, False: 10.6k]
  ------------------
 2738|      0|    break;
 2739|  10.6k|  }
 2740|       |
 2741|      0|  return 0;
 2742|  10.6k|}
regcomp.c:swap_node:
   72|  5.34k|{
   73|  5.34k|  Node c;
   74|  5.34k|  c = *a; *a = *b; *b = c;
   75|       |
   76|  5.34k|  if (NTYPE(a) == NT_STR) {
  ------------------
  |  |   69|  5.34k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
                if (NTYPE(a) == NT_STR) {
  ------------------
  |  |   38|  5.34k|#define NT_STR         0
  ------------------
  |  Branch (76:7): [True: 0, False: 5.34k]
  ------------------
   77|      0|    StrNode* sn = NSTR(a);
  ------------------
  |  |   76|      0|#define NSTR(node)         (&((node)->u.str))
  ------------------
   78|      0|    if (sn->capa == 0) {
  ------------------
  |  Branch (78:9): [True: 0, False: 0]
  ------------------
   79|      0|      size_t len = sn->end - sn->s;
   80|      0|      sn->s   = sn->buf;
   81|      0|      sn->end = sn->s + len;
   82|      0|    }
   83|      0|  }
   84|       |
   85|  5.34k|  if (NTYPE(b) == NT_STR) {
  ------------------
  |  |   69|  5.34k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
                if (NTYPE(b) == NT_STR) {
  ------------------
  |  |   38|  5.34k|#define NT_STR         0
  ------------------
  |  Branch (85:7): [True: 0, False: 5.34k]
  ------------------
   86|      0|    StrNode* sn = NSTR(b);
  ------------------
  |  |   76|      0|#define NSTR(node)         (&((node)->u.str))
  ------------------
   87|      0|    if (sn->capa == 0) {
  ------------------
  |  Branch (87:9): [True: 0, False: 0]
  ------------------
   88|      0|      size_t len = sn->end - sn->s;
   89|      0|      sn->s   = sn->buf;
   90|      0|      sn->end = sn->s + len;
   91|      0|    }
   92|      0|  }
   93|  5.34k|}
regcomp.c:distance_add:
   97|   162k|{
   98|   162k|  if (d1 == ONIG_INFINITE_DISTANCE || d2 == ONIG_INFINITE_DISTANCE)
  ------------------
  |  |   85|   325k|#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)
  ------------------
                if (d1 == ONIG_INFINITE_DISTANCE || d2 == ONIG_INFINITE_DISTANCE)
  ------------------
  |  |   85|   124k|#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)
  ------------------
  |  Branch (98:7): [True: 38.6k, False: 124k]
  |  Branch (98:39): [True: 12.3k, False: 111k]
  ------------------
   99|  50.9k|    return ONIG_INFINITE_DISTANCE;
  ------------------
  |  |   85|  50.9k|#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)
  ------------------
  100|   111k|  else {
  101|   111k|    if (d1 <= ONIG_INFINITE_DISTANCE - d2) return d1 + d2;
  ------------------
  |  |   85|   111k|#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)
  ------------------
  |  Branch (101:9): [True: 111k, False: 0]
  ------------------
  102|      0|    else return ONIG_INFINITE_DISTANCE;
  ------------------
  |  |   85|      0|#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)
  ------------------
  103|   111k|  }
  104|   162k|}
regcomp.c:clear_optimize_info:
 5363|  9.45k|{
 5364|  9.45k|  reg->optimize      = ONIG_OPTIMIZE_NONE;
  ------------------
  |  |  355|  9.45k|#define ONIG_OPTIMIZE_NONE              0
  ------------------
 5365|  9.45k|  reg->anchor        = 0;
 5366|  9.45k|  reg->anchor_dmin   = 0;
 5367|  9.45k|  reg->anchor_dmax   = 0;
 5368|  9.45k|  reg->sub_anchor    = 0;
 5369|  9.45k|  reg->exact_end     = (UChar* )NULL;
 5370|  9.45k|  reg->threshold_len = 0;
 5371|  9.45k|  if (IS_NOT_NULL(reg->exact)) {
  ------------------
  |  |  312|  9.45k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 9.45k]
  |  |  ------------------
  ------------------
 5372|      0|    xfree(reg->exact);
  ------------------
  |  |  145|      0|# define xfree       free
  ------------------
 5373|      0|    reg->exact = (UChar* )NULL;
 5374|      0|  }
 5375|  9.45k|}
regcomp.c:set_optimize_info_from_tree:
 5303|  9.45k|{
 5304|       |
 5305|  9.45k|  int r;
 5306|  9.45k|  NodeOptInfo opt;
 5307|  9.45k|  OptEnv env;
 5308|       |
 5309|  9.45k|  env.enc            = reg->enc;
 5310|  9.45k|  env.options        = reg->options;
 5311|  9.45k|  env.case_fold_flag = reg->case_fold_flag;
 5312|  9.45k|  env.scan_env   = scan_env;
 5313|  9.45k|  clear_mml(&env.mmd);
 5314|       |
 5315|  9.45k|  r = optimize_node_left(node, &opt, &env);
 5316|  9.45k|  if (r) return r;
  ------------------
  |  Branch (5316:7): [True: 0, False: 9.45k]
  ------------------
 5317|       |
 5318|  9.45k|  reg->anchor = opt.anc.left_anchor & (ANCHOR_BEGIN_BUF |
  ------------------
  |  |  540|  9.45k|#define ANCHOR_BEGIN_BUF        (1<<0)
  ------------------
 5319|  9.45k|        ANCHOR_BEGIN_POSITION | ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML |
  ------------------
  |  |  542|  9.45k|#define ANCHOR_BEGIN_POSITION   (1<<2)
  ------------------
                      ANCHOR_BEGIN_POSITION | ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML |
  ------------------
  |  |  556|  9.45k|#define ANCHOR_ANYCHAR_STAR     (1<<14)   /* ".*" optimize info */
  ------------------
                      ANCHOR_BEGIN_POSITION | ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML |
  ------------------
  |  |  557|  9.45k|#define ANCHOR_ANYCHAR_STAR_ML  (1<<15)   /* ".*" optimize info (multi-line) */
  ------------------
 5320|  9.45k|        ANCHOR_LOOK_BEHIND);
  ------------------
  |  |  553|  9.45k|#define ANCHOR_LOOK_BEHIND      (1<<12)
  ------------------
 5321|       |
 5322|  9.45k|  if ((opt.anc.left_anchor & (ANCHOR_LOOK_BEHIND | ANCHOR_PREC_READ_NOT)) != 0)
  ------------------
  |  |  553|  9.45k|#define ANCHOR_LOOK_BEHIND      (1<<12)
  ------------------
                if ((opt.anc.left_anchor & (ANCHOR_LOOK_BEHIND | ANCHOR_PREC_READ_NOT)) != 0)
  ------------------
  |  |  552|  9.45k|#define ANCHOR_PREC_READ_NOT    (1<<11)
  ------------------
  |  Branch (5322:7): [True: 0, False: 9.45k]
  ------------------
 5323|      0|    reg->anchor &= ~ANCHOR_ANYCHAR_STAR_ML;
  ------------------
  |  |  557|      0|#define ANCHOR_ANYCHAR_STAR_ML  (1<<15)   /* ".*" optimize info (multi-line) */
  ------------------
 5324|       |
 5325|  9.45k|  reg->anchor |= opt.anc.right_anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF |
  ------------------
  |  |  543|  9.45k|#define ANCHOR_END_BUF          (1<<3)
  ------------------
                reg->anchor |= opt.anc.right_anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF |
  ------------------
  |  |  544|  9.45k|#define ANCHOR_SEMI_END_BUF     (1<<4)
  ------------------
 5326|  9.45k|	ANCHOR_PREC_READ_NOT);
  ------------------
  |  |  552|  9.45k|#define ANCHOR_PREC_READ_NOT    (1<<11)
  ------------------
 5327|       |
 5328|  9.45k|  if (reg->anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF)) {
  ------------------
  |  |  543|  9.45k|#define ANCHOR_END_BUF          (1<<3)
  ------------------
                if (reg->anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF)) {
  ------------------
  |  |  544|  9.45k|#define ANCHOR_SEMI_END_BUF     (1<<4)
  ------------------
  |  Branch (5328:7): [True: 0, False: 9.45k]
  ------------------
 5329|      0|    reg->anchor_dmin = opt.len.min;
 5330|      0|    reg->anchor_dmax = opt.len.max;
 5331|      0|  }
 5332|       |
 5333|  9.45k|  if (opt.exb.len > 0 || opt.exm.len > 0) {
  ------------------
  |  Branch (5333:7): [True: 411, False: 9.04k]
  |  Branch (5333:26): [True: 6.16k, False: 2.87k]
  ------------------
 5334|  6.57k|    select_opt_exact_info(reg->enc, &opt.exb, &opt.exm);
 5335|  6.57k|    if (opt.map.value > 0 &&
  ------------------
  |  Branch (5335:9): [True: 6.57k, False: 0]
  ------------------
 5336|  6.57k|	comp_opt_exact_or_map_info(&opt.exb, &opt.map) > 0) {
  ------------------
  |  Branch (5336:2): [True: 2.05k, False: 4.52k]
  ------------------
 5337|  2.05k|      goto set_map;
 5338|  2.05k|    }
 5339|  4.52k|    else {
 5340|  4.52k|      r = set_optimize_exact_info(reg, &opt.exb);
 5341|  4.52k|      set_sub_anchor(reg, &opt.exb.anc);
 5342|  4.52k|    }
 5343|  6.57k|  }
 5344|  2.87k|  else if (opt.map.value > 0) {
  ------------------
  |  Branch (5344:12): [True: 1.23k, False: 1.64k]
  ------------------
 5345|  3.28k|  set_map:
 5346|  3.28k|    set_optimize_map_info(reg, &opt.map);
 5347|  3.28k|    set_sub_anchor(reg, &opt.map.anc);
 5348|  3.28k|  }
 5349|  1.64k|  else {
 5350|  1.64k|    reg->sub_anchor |= opt.anc.left_anchor & ANCHOR_BEGIN_LINE;
  ------------------
  |  |  541|  1.64k|#define ANCHOR_BEGIN_LINE       (1<<1)
  ------------------
 5351|  1.64k|    if (opt.len.max == 0)
  ------------------
  |  Branch (5351:9): [True: 822, False: 822]
  ------------------
 5352|    822|      reg->sub_anchor |= opt.anc.right_anchor & ANCHOR_END_LINE;
  ------------------
  |  |  545|    822|#define ANCHOR_END_LINE         (1<<5)
  ------------------
 5353|  1.64k|  }
 5354|       |
 5355|       |#if defined(ONIG_DEBUG_COMPILE) || defined(ONIG_DEBUG_MATCH)
 5356|       |  print_optimize_info(stderr, reg);
 5357|       |#endif
 5358|  9.45k|  return r;
 5359|  9.45k|}
regcomp.c:clear_mml:
 4385|   321k|{
 4386|   321k|  mml->min = mml->max = 0;
 4387|   321k|}
regcomp.c:optimize_node_left:
 4866|  76.0k|{
 4867|  76.0k|  int type;
 4868|  76.0k|  int r = 0;
 4869|       |
 4870|  76.0k|  clear_node_opt_info(opt);
 4871|  76.0k|  set_bound_node_opt_info(opt, &env->mmd);
 4872|       |
 4873|  76.0k|  type = NTYPE(node);
  ------------------
  |  |   69|  76.0k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
 4874|  76.0k|  switch (type) {
 4875|  9.86k|  case NT_LIST:
  ------------------
  |  |   46|  9.86k|#define NT_LIST        8
  ------------------
  |  Branch (4875:3): [True: 9.86k, False: 66.1k]
  ------------------
 4876|  9.86k|    {
 4877|  9.86k|      OptEnv nenv;
 4878|  9.86k|      NodeOptInfo nopt;
 4879|  9.86k|      Node* nd = node;
 4880|       |
 4881|  9.86k|      copy_opt_env(&nenv, env);
 4882|  40.6k|      do {
 4883|  40.6k|	r = optimize_node_left(NCAR(nd), &nopt, &nenv);
  ------------------
  |  |   86|  40.6k|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|  40.6k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 4884|  40.6k|	if (r == 0) {
  ------------------
  |  Branch (4884:6): [True: 40.6k, False: 0]
  ------------------
 4885|  40.6k|	  add_mml(&nenv.mmd, &nopt.len);
 4886|  40.6k|	  concat_left_node_opt_info(env->enc, opt, &nopt);
 4887|  40.6k|	}
 4888|  40.6k|      } while (r == 0 && IS_NOT_NULL(nd = NCDR(nd)));
  ------------------
  |  |  312|  40.6k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 30.8k, False: 9.86k]
  |  |  ------------------
  ------------------
  |  Branch (4888:16): [True: 40.6k, False: 0]
  ------------------
 4889|  9.86k|    }
 4890|  9.86k|    break;
 4891|       |
 4892|  2.46k|  case NT_ALT:
  ------------------
  |  |   47|  2.46k|#define NT_ALT         9
  ------------------
  |  Branch (4892:3): [True: 2.46k, False: 73.5k]
  ------------------
 4893|  2.46k|    {
 4894|  2.46k|      NodeOptInfo nopt;
 4895|  2.46k|      Node* nd = node;
 4896|       |
 4897|  5.75k|      do {
 4898|  5.75k|	r = optimize_node_left(NCAR(nd), &nopt, env);
  ------------------
  |  |   86|  5.75k|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|  5.75k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 4899|  5.75k|	if (r == 0) {
  ------------------
  |  Branch (4899:6): [True: 5.75k, False: 0]
  ------------------
 4900|  5.75k|	  if (nd == node) copy_node_opt_info(opt, &nopt);
  ------------------
  |  Branch (4900:8): [True: 2.46k, False: 3.28k]
  ------------------
 4901|  3.28k|	  else            alt_merge_node_opt_info(opt, &nopt, env);
 4902|  5.75k|	}
 4903|  5.75k|      } while ((r == 0) && IS_NOT_NULL(nd = NCDR(nd)));
  ------------------
  |  |  312|  5.75k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 3.28k, False: 2.46k]
  |  |  ------------------
  ------------------
  |  Branch (4903:16): [True: 5.75k, False: 0]
  ------------------
 4904|  2.46k|    }
 4905|  2.46k|    break;
 4906|       |
 4907|  17.6k|  case NT_STR:
  ------------------
  |  |   38|  17.6k|#define NT_STR         0
  ------------------
  |  Branch (4907:3): [True: 17.6k, False: 58.3k]
  ------------------
 4908|  17.6k|    {
 4909|  17.6k|      StrNode* sn = NSTR(node);
  ------------------
  |  |   76|  17.6k|#define NSTR(node)         (&((node)->u.str))
  ------------------
 4910|  17.6k|      OnigDistance slen = sn->end - sn->s;
 4911|  17.6k|      int is_raw = NSTRING_IS_RAW(node);
  ------------------
  |  |  114|  17.6k|#define NSTRING_IS_RAW(node)          (((node)->u.str.flag & NSTR_RAW)   != 0)
  |  |  ------------------
  |  |  |  |  104|  17.6k|#define NSTR_RAW                (1<<0) /* by backslashed number */
  |  |  ------------------
  ------------------
 4912|       |
 4913|  17.6k|      if (! NSTRING_IS_AMBIG(node)) {
  ------------------
  |  |  115|  17.6k|#define NSTRING_IS_AMBIG(node)        (((node)->u.str.flag & NSTR_AMBIG) != 0)
  |  |  ------------------
  |  |  |  |  105|  17.6k|#define NSTR_AMBIG              (1<<1)
  |  |  ------------------
  ------------------
  |  Branch (4913:11): [True: 17.6k, False: 0]
  ------------------
 4914|  17.6k|	concat_opt_exact_info_str(&opt->exb, sn->s, sn->end,
 4915|  17.6k|				  is_raw, env->enc);
 4916|  17.6k|	opt->exb.ignore_case = 0;
 4917|  17.6k|	if (slen > 0) {
  ------------------
  |  Branch (4917:6): [True: 17.2k, False: 411]
  ------------------
 4918|  17.2k|	  add_char_opt_map_info(&opt->map, *(sn->s), env->enc);
 4919|  17.2k|	}
 4920|  17.6k|	set_mml(&opt->len, slen, slen);
 4921|  17.6k|      }
 4922|      0|      else {
 4923|      0|	OnigDistance max;
 4924|       |
 4925|      0|	if (NSTRING_IS_DONT_GET_OPT_INFO(node)) {
  ------------------
  |  |  117|      0|  (((node)->u.str.flag & NSTR_DONT_GET_OPT_INFO) != 0)
  |  |  ------------------
  |  |  |  |  106|      0|#define NSTR_DONT_GET_OPT_INFO  (1<<2)
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4926|      0|	  int n = onigenc_strlen(env->enc, sn->s, sn->end);
 4927|      0|	  max = (OnigDistance )ONIGENC_MBC_MAXLEN_DIST(env->enc) * n;
  ------------------
  |  |  366|      0|#define ONIGENC_MBC_MAXLEN_DIST(enc)           ONIGENC_MBC_MAXLEN(enc)
  |  |  ------------------
  |  |  |  |  365|      0|#define ONIGENC_MBC_MAXLEN(enc)               ((enc)->max_enc_len)
  |  |  ------------------
  ------------------
 4928|      0|	}
 4929|      0|	else {
 4930|      0|	  concat_opt_exact_info_str(&opt->exb, sn->s, sn->end,
 4931|      0|				    is_raw, env->enc);
 4932|      0|	  opt->exb.ignore_case = 1;
 4933|       |
 4934|      0|	  if (slen > 0) {
  ------------------
  |  Branch (4934:8): [True: 0, False: 0]
  ------------------
 4935|      0|	    r = add_char_amb_opt_map_info(&opt->map, sn->s, sn->end,
 4936|      0|					  env->enc, env->case_fold_flag);
 4937|      0|	    if (r != 0) break;
  ------------------
  |  Branch (4937:10): [True: 0, False: 0]
  ------------------
 4938|      0|	  }
 4939|       |
 4940|      0|	  max = slen;
 4941|      0|	}
 4942|       |
 4943|      0|	set_mml(&opt->len, slen, max);
 4944|      0|      }
 4945|       |
 4946|  17.6k|      if ((OnigDistance )opt->exb.len == slen)
  ------------------
  |  Branch (4946:11): [True: 16.0k, False: 1.64k]
  ------------------
 4947|  16.0k|	opt->exb.reach_end = 1;
 4948|  17.6k|    }
 4949|      0|    break;
 4950|       |
 4951|  9.86k|  case NT_CCLASS:
  ------------------
  |  |   39|  9.86k|#define NT_CCLASS      1
  ------------------
  |  Branch (4951:3): [True: 9.86k, False: 66.1k]
  ------------------
 4952|  9.86k|    {
 4953|  9.86k|      int i, z;
 4954|  9.86k|      CClassNode* cc = NCCLASS(node);
  ------------------
  |  |   77|  9.86k|#define NCCLASS(node)      (&((node)->u.cclass))
  ------------------
 4955|       |
 4956|       |      /* no need to check ignore case. (set in setup_tree()) */
 4957|       |
 4958|  9.86k|      if (IS_NOT_NULL(cc->mbuf) || IS_NCCLASS_NOT(cc)) {
  ------------------
  |  |  312|  19.7k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 9.86k]
  |  |  ------------------
  ------------------
                    if (IS_NOT_NULL(cc->mbuf) || IS_NCCLASS_NOT(cc)) {
  ------------------
  |  |  809|  9.86k|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|  9.86k|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|  9.86k|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (802:37): [True: 2.46k, False: 7.39k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4959|  2.46k|	OnigDistance min = ONIGENC_MBC_MINLEN(env->enc);
  ------------------
  |  |  367|  2.46k|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  ------------------
 4960|  2.46k|	OnigDistance max = ONIGENC_MBC_MAXLEN_DIST(env->enc);
  ------------------
  |  |  366|  2.46k|#define ONIGENC_MBC_MAXLEN_DIST(enc)           ONIGENC_MBC_MAXLEN(enc)
  |  |  ------------------
  |  |  |  |  365|  2.46k|#define ONIGENC_MBC_MAXLEN(enc)               ((enc)->max_enc_len)
  |  |  ------------------
  ------------------
 4961|       |
 4962|  2.46k|	set_mml(&opt->len, min, max);
 4963|  2.46k|      }
 4964|  7.39k|      else {
 4965|  1.90M|	for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
  ------------------
  |  |  426|  1.90M|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  ------------------
  |  |  |  |  425|  1.90M|#define BITS_PER_BYTE      8
  |  |  ------------------
  ------------------
  |  Branch (4965:14): [True: 1.89M, False: 7.39k]
  ------------------
 4966|  1.89M|	  z = BITSET_AT(cc->bs, i);
  ------------------
  |  |  448|  1.89M|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  ------------------
  |  |  |  |  445|  1.89M|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|  1.89M|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|  1.89M|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  ------------------
  |  |  |  |  446|  1.89M|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|  1.89M|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|  1.89M|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4967|  1.89M|	  if ((z && !IS_NCCLASS_NOT(cc)) || (!z && IS_NCCLASS_NOT(cc))) {
  ------------------
  |  |  809|  36.5k|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|  36.5k|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|  36.5k|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              	  if ((z && !IS_NCCLASS_NOT(cc)) || (!z && IS_NCCLASS_NOT(cc))) {
  ------------------
  |  |  809|  1.85M|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|  1.85M|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|  1.85M|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (802:37): [True: 0, False: 1.85M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4967:9): [True: 36.5k, False: 1.85M]
  |  Branch (4967:14): [True: 36.5k, False: 0]
  |  Branch (4967:39): [True: 1.85M, False: 0]
  ------------------
 4968|  36.5k|	    add_char_opt_map_info(&opt->map, (UChar )i, env->enc);
 4969|  36.5k|	  }
 4970|  1.89M|	}
 4971|  7.39k|	set_mml(&opt->len, 1, 1);
 4972|  7.39k|      }
 4973|  9.86k|    }
 4974|  9.86k|    break;
 4975|       |
 4976|      0|  case NT_CTYPE:
  ------------------
  |  |   40|      0|#define NT_CTYPE       2
  ------------------
  |  Branch (4976:3): [True: 0, False: 76.0k]
  ------------------
 4977|      0|    {
 4978|      0|      int i, min, max;
 4979|      0|      int maxcode;
 4980|       |
 4981|      0|      max = ONIGENC_MBC_MAXLEN_DIST(env->enc);
  ------------------
  |  |  366|      0|#define ONIGENC_MBC_MAXLEN_DIST(enc)           ONIGENC_MBC_MAXLEN(enc)
  |  |  ------------------
  |  |  |  |  365|      0|#define ONIGENC_MBC_MAXLEN(enc)               ((enc)->max_enc_len)
  |  |  ------------------
  ------------------
 4982|       |
 4983|      0|      if (max == 1) {
  ------------------
  |  Branch (4983:11): [True: 0, False: 0]
  ------------------
 4984|      0|	min = 1;
 4985|       |
 4986|      0|	maxcode = NCTYPE(node)->ascii_range ? 0x80 : SINGLE_BYTE_SIZE;
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
              	maxcode = NCTYPE(node)->ascii_range ? 0x80 : SINGLE_BYTE_SIZE;
  ------------------
  |  |  426|      0|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  ------------------
  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  ------------------
  ------------------
  |  Branch (4986:12): [True: 0, False: 0]
  ------------------
 4987|      0|	switch (NCTYPE(node)->ctype) {
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
  |  Branch (4987:10): [True: 0, False: 0]
  ------------------
 4988|      0|	case ONIGENC_CTYPE_WORD:
  ------------------
  |  |  306|      0|#define ONIGENC_CTYPE_WORD     12
  ------------------
  |  Branch (4988:2): [True: 0, False: 0]
  ------------------
 4989|      0|	  if (NCTYPE(node)->not != 0) {
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
  |  Branch (4989:8): [True: 0, False: 0]
  ------------------
 4990|      0|	    for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
  ------------------
  |  |  426|      0|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  ------------------
  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  ------------------
  ------------------
  |  Branch (4990:18): [True: 0, False: 0]
  ------------------
 4991|      0|	      if (! ONIGENC_IS_CODE_WORD(env->enc, i) || i >= maxcode) {
  ------------------
  |  |  404|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
  |  |  ------------------
  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  ------------------
  ------------------
  |  Branch (4991:12): [True: 0, False: 0]
  |  Branch (4991:51): [True: 0, False: 0]
  ------------------
 4992|      0|		add_char_opt_map_info(&opt->map, (UChar )i, env->enc);
 4993|      0|	      }
 4994|      0|	    }
 4995|      0|	  }
 4996|      0|	  else {
 4997|      0|	    for (i = 0; i < maxcode; i++) {
  ------------------
  |  Branch (4997:18): [True: 0, False: 0]
  ------------------
 4998|      0|	      if (ONIGENC_IS_CODE_WORD(env->enc, i)) {
  ------------------
  |  |  404|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
  |  |  ------------------
  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (375:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4999|      0|		add_char_opt_map_info(&opt->map, (UChar )i, env->enc);
 5000|      0|	      }
 5001|      0|	    }
 5002|      0|	  }
 5003|      0|	  break;
 5004|      0|	}
 5005|      0|      }
 5006|      0|      else {
 5007|      0|	min = ONIGENC_MBC_MINLEN(env->enc);
  ------------------
  |  |  367|      0|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  ------------------
 5008|      0|      }
 5009|      0|      set_mml(&opt->len, min, max);
 5010|      0|    }
 5011|      0|    break;
 5012|       |
 5013|  4.11k|  case NT_CANY:
  ------------------
  |  |   41|  4.11k|#define NT_CANY        3
  ------------------
  |  Branch (5013:3): [True: 4.11k, False: 71.9k]
  ------------------
 5014|  4.11k|    {
 5015|  4.11k|      OnigDistance min = ONIGENC_MBC_MINLEN(env->enc);
  ------------------
  |  |  367|  4.11k|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  ------------------
 5016|  4.11k|      OnigDistance max = ONIGENC_MBC_MAXLEN_DIST(env->enc);
  ------------------
  |  |  366|  4.11k|#define ONIGENC_MBC_MAXLEN_DIST(enc)           ONIGENC_MBC_MAXLEN(enc)
  |  |  ------------------
  |  |  |  |  365|  4.11k|#define ONIGENC_MBC_MAXLEN(enc)               ((enc)->max_enc_len)
  |  |  ------------------
  ------------------
 5017|  4.11k|      set_mml(&opt->len, min, max);
 5018|  4.11k|    }
 5019|  4.11k|    break;
 5020|       |
 5021|  11.9k|  case NT_ANCHOR:
  ------------------
  |  |   45|  11.9k|#define NT_ANCHOR      7
  ------------------
  |  Branch (5021:3): [True: 11.9k, False: 64.1k]
  ------------------
 5022|  11.9k|    switch (NANCHOR(node)->type) {
  ------------------
  |  |   82|  11.9k|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
  |  Branch (5022:13): [True: 411, False: 11.5k]
  ------------------
 5023|      0|    case ANCHOR_BEGIN_BUF:
  ------------------
  |  |  540|      0|#define ANCHOR_BEGIN_BUF        (1<<0)
  ------------------
  |  Branch (5023:5): [True: 0, False: 11.9k]
  ------------------
 5024|      0|    case ANCHOR_BEGIN_POSITION:
  ------------------
  |  |  542|      0|#define ANCHOR_BEGIN_POSITION   (1<<2)
  ------------------
  |  Branch (5024:5): [True: 0, False: 11.9k]
  ------------------
 5025|  8.22k|    case ANCHOR_BEGIN_LINE:
  ------------------
  |  |  541|  8.22k|#define ANCHOR_BEGIN_LINE       (1<<1)
  ------------------
  |  Branch (5025:5): [True: 8.22k, False: 3.69k]
  ------------------
 5026|  8.22k|    case ANCHOR_END_BUF:
  ------------------
  |  |  543|  8.22k|#define ANCHOR_END_BUF          (1<<3)
  ------------------
  |  Branch (5026:5): [True: 0, False: 11.9k]
  ------------------
 5027|  8.22k|    case ANCHOR_SEMI_END_BUF:
  ------------------
  |  |  544|  8.22k|#define ANCHOR_SEMI_END_BUF     (1<<4)
  ------------------
  |  Branch (5027:5): [True: 0, False: 11.9k]
  ------------------
 5028|  11.5k|    case ANCHOR_END_LINE:
  ------------------
  |  |  545|  11.5k|#define ANCHOR_END_LINE         (1<<5)
  ------------------
  |  Branch (5028:5): [True: 3.28k, False: 8.63k]
  ------------------
 5029|  11.5k|    case ANCHOR_LOOK_BEHIND:	/* just for (?<=x).* */
  ------------------
  |  |  553|  11.5k|#define ANCHOR_LOOK_BEHIND      (1<<12)
  ------------------
  |  Branch (5029:5): [True: 0, False: 11.9k]
  ------------------
 5030|  11.5k|    case ANCHOR_PREC_READ_NOT:	/* just for (?!x).* */
  ------------------
  |  |  552|  11.5k|#define ANCHOR_PREC_READ_NOT    (1<<11)
  ------------------
  |  Branch (5030:5): [True: 0, False: 11.9k]
  ------------------
 5031|  11.5k|      add_opt_anc_info(&opt->anc, NANCHOR(node)->type);
  ------------------
  |  |   82|  11.5k|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
 5032|  11.5k|      break;
 5033|       |
 5034|      0|    case ANCHOR_PREC_READ:
  ------------------
  |  |  551|      0|#define ANCHOR_PREC_READ        (1<<10)
  ------------------
  |  Branch (5034:5): [True: 0, False: 11.9k]
  ------------------
 5035|      0|      {
 5036|      0|	NodeOptInfo nopt;
 5037|       |
 5038|      0|	r = optimize_node_left(NANCHOR(node)->target, &nopt, env);
  ------------------
  |  |   82|      0|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
 5039|      0|	if (r == 0) {
  ------------------
  |  Branch (5039:6): [True: 0, False: 0]
  ------------------
 5040|      0|	  if (nopt.exb.len > 0)
  ------------------
  |  Branch (5040:8): [True: 0, False: 0]
  ------------------
 5041|      0|	    copy_opt_exact_info(&opt->expr, &nopt.exb);
 5042|      0|	  else if (nopt.exm.len > 0)
  ------------------
  |  Branch (5042:13): [True: 0, False: 0]
  ------------------
 5043|      0|	    copy_opt_exact_info(&opt->expr, &nopt.exm);
 5044|       |
 5045|      0|	  opt->expr.reach_end = 0;
 5046|       |
 5047|      0|	  if (nopt.map.value > 0)
  ------------------
  |  Branch (5047:8): [True: 0, False: 0]
  ------------------
 5048|      0|	    copy_opt_map_info(&opt->map, &nopt.map);
 5049|      0|	}
 5050|      0|      }
 5051|      0|      break;
 5052|       |
 5053|      0|    case ANCHOR_LOOK_BEHIND_NOT:
  ------------------
  |  |  554|      0|#define ANCHOR_LOOK_BEHIND_NOT  (1<<13)
  ------------------
  |  Branch (5053:5): [True: 0, False: 11.9k]
  ------------------
 5054|      0|      break;
 5055|  11.9k|    }
 5056|  11.9k|    break;
 5057|       |
 5058|  11.9k|  case NT_BREF:
  ------------------
  |  |   42|      0|#define NT_BREF        4
  ------------------
  |  Branch (5058:3): [True: 0, False: 76.0k]
  ------------------
 5059|      0|    {
 5060|      0|      int i;
 5061|      0|      int* backs;
 5062|      0|      OnigDistance min, max, tmin, tmax;
 5063|      0|      Node** nodes = SCANENV_MEM_NODES(env->scan_env);
  ------------------
  |  |  287|      0| (IS_NOT_NULL((senv)->mem_nodes_dynamic) ? \
  |  |  ------------------
  |  |  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  288|      0|    (senv)->mem_nodes_dynamic : (senv)->mem_nodes_static)
  ------------------
 5064|      0|      BRefNode* br = NBREF(node);
  ------------------
  |  |   79|      0|#define NBREF(node)        (&((node)->u.bref))
  ------------------
 5065|       |
 5066|      0|      if (br->state & NST_RECURSION) {
  ------------------
  |  |  135|      0|#define NST_RECURSION             (1<<7)
  ------------------
  |  Branch (5066:11): [True: 0, False: 0]
  ------------------
 5067|      0|	set_mml(&opt->len, 0, ONIG_INFINITE_DISTANCE);
  ------------------
  |  |   85|      0|#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)
  ------------------
 5068|      0|	break;
 5069|      0|      }
 5070|      0|      backs = BACKREFS_P(br);
  ------------------
  |  |  120|      0|  (IS_NOT_NULL((br)->back_dynamic) ? (br)->back_dynamic : (br)->back_static);
  |  |  ------------------
  |  |  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5071|      0|      r = get_min_match_length(nodes[backs[0]], &min, env->scan_env);
 5072|      0|      if (r != 0) break;
  ------------------
  |  Branch (5072:11): [True: 0, False: 0]
  ------------------
 5073|      0|      r = get_max_match_length(nodes[backs[0]], &max, env->scan_env);
 5074|      0|      if (r != 0) break;
  ------------------
  |  Branch (5074:11): [True: 0, False: 0]
  ------------------
 5075|      0|      for (i = 1; i < br->back_num; i++) {
  ------------------
  |  Branch (5075:19): [True: 0, False: 0]
  ------------------
 5076|      0|	r = get_min_match_length(nodes[backs[i]], &tmin, env->scan_env);
 5077|      0|	if (r != 0) break;
  ------------------
  |  Branch (5077:6): [True: 0, False: 0]
  ------------------
 5078|      0|	r = get_max_match_length(nodes[backs[i]], &tmax, env->scan_env);
 5079|      0|	if (r != 0) break;
  ------------------
  |  Branch (5079:6): [True: 0, False: 0]
  ------------------
 5080|      0|	if (min > tmin) min = tmin;
  ------------------
  |  Branch (5080:6): [True: 0, False: 0]
  ------------------
 5081|      0|	if (max < tmax) max = tmax;
  ------------------
  |  Branch (5081:6): [True: 0, False: 0]
  ------------------
 5082|      0|      }
 5083|      0|      if (r == 0) set_mml(&opt->len, min, max);
  ------------------
  |  Branch (5083:11): [True: 0, False: 0]
  ------------------
 5084|      0|    }
 5085|      0|    break;
 5086|       |
 5087|      0|#ifdef USE_SUBEXP_CALL
 5088|      0|  case NT_CALL:
  ------------------
  |  |   48|      0|#define NT_CALL       10
  ------------------
  |  Branch (5088:3): [True: 0, False: 76.0k]
  ------------------
 5089|      0|    if (IS_CALL_RECURSION(NCALL(node)))
  ------------------
  |  |  161|      0|#define IS_CALL_RECURSION(cn)          (((cn)->state & NST_RECURSION)  != 0)
  |  |  ------------------
  |  |  |  |  135|      0|#define NST_RECURSION             (1<<7)
  |  |  ------------------
  |  |  |  Branch (161:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5090|      0|      set_mml(&opt->len, 0, ONIG_INFINITE_DISTANCE);
  ------------------
  |  |   85|      0|#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)
  ------------------
 5091|      0|    else {
 5092|      0|      OnigOptionType save = env->options;
 5093|      0|      env->options = NENCLOSE(NCALL(node)->target)->option;
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 5094|      0|      r = optimize_node_left(NCALL(node)->target, opt, env);
  ------------------
  |  |   84|      0|#define NCALL(node)        (&((node)->u.call))
  ------------------
 5095|      0|      env->options = save;
 5096|      0|    }
 5097|      0|    break;
 5098|      0|#endif
 5099|       |
 5100|  12.3k|  case NT_QTFR:
  ------------------
  |  |   43|  12.3k|#define NT_QTFR        5
  ------------------
  |  Branch (5100:3): [True: 12.3k, False: 63.7k]
  ------------------
 5101|  12.3k|    {
 5102|  12.3k|      int i;
 5103|  12.3k|      OnigDistance min, max;
 5104|  12.3k|      NodeOptInfo nopt;
 5105|  12.3k|      QtfrNode* qn = NQTFR(node);
  ------------------
  |  |   80|  12.3k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 5106|       |
 5107|  12.3k|      r = optimize_node_left(qn->target, &nopt, env);
 5108|  12.3k|      if (r) break;
  ------------------
  |  Branch (5108:11): [True: 0, False: 12.3k]
  ------------------
 5109|       |
 5110|  12.3k|      if (qn->lower == 0 && IS_REPEAT_INFINITE(qn->upper)) {
  ------------------
  |  |  422|  4.93k|#define IS_REPEAT_INFINITE(n)   ((n) == REPEAT_INFINITE)
  |  |  ------------------
  |  |  |  |  421|  4.93k|#define REPEAT_INFINITE         -1
  |  |  ------------------
  |  |  |  Branch (422:33): [True: 4.52k, False: 411]
  |  |  ------------------
  ------------------
  |  Branch (5110:11): [True: 4.93k, False: 7.39k]
  ------------------
 5111|  4.52k|	if (env->mmd.max == 0 &&
  ------------------
  |  Branch (5111:6): [True: 2.46k, False: 2.05k]
  ------------------
 5112|  4.52k|	    NTYPE(qn->target) == NT_CANY && qn->greedy) {
  ------------------
  |  |   69|  2.46k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
              	    NTYPE(qn->target) == NT_CANY && qn->greedy) {
  ------------------
  |  |   41|  6.98k|#define NT_CANY        3
  ------------------
  |  Branch (5112:6): [True: 0, False: 2.46k]
  |  Branch (5112:38): [True: 0, False: 0]
  ------------------
 5113|      0|	  if (IS_MULTILINE(env->options))
  ------------------
  |  |  395|      0|#define IS_MULTILINE(option)      ((option) & ONIG_OPTION_MULTILINE)
  |  |  ------------------
  |  |  |  |  456|      0|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  455|      0|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  454|      0|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (395:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5114|       |	    /* implicit anchor: /.*a/ ==> /\A.*a/ */
 5115|      0|	    add_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_ML);
  ------------------
  |  |  557|      0|#define ANCHOR_ANYCHAR_STAR_ML  (1<<15)   /* ".*" optimize info (multi-line) */
  ------------------
 5116|      0|	  else
 5117|      0|	    add_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR);
  ------------------
  |  |  556|      0|#define ANCHOR_ANYCHAR_STAR     (1<<14)   /* ".*" optimize info */
  ------------------
 5118|      0|	}
 5119|  4.52k|      }
 5120|  7.80k|      else {
 5121|  7.80k|	if (qn->lower > 0) {
  ------------------
  |  Branch (5121:6): [True: 7.39k, False: 411]
  ------------------
 5122|  7.39k|	  copy_node_opt_info(opt, &nopt);
 5123|  7.39k|	  if (nopt.exb.len > 0) {
  ------------------
  |  Branch (5123:8): [True: 0, False: 7.39k]
  ------------------
 5124|      0|	    if (nopt.exb.reach_end) {
  ------------------
  |  Branch (5124:10): [True: 0, False: 0]
  ------------------
 5125|      0|	      for (i = 2; i <= qn->lower &&
  ------------------
  |  Branch (5125:20): [True: 0, False: 0]
  ------------------
 5126|      0|			  ! is_full_opt_exact_info(&opt->exb); i++) {
  ------------------
  |  Branch (5126:6): [True: 0, False: 0]
  ------------------
 5127|      0|		concat_opt_exact_info(&opt->exb, &nopt.exb, env->enc);
 5128|      0|	      }
 5129|      0|	      if (i < qn->lower) {
  ------------------
  |  Branch (5129:12): [True: 0, False: 0]
  ------------------
 5130|      0|		opt->exb.reach_end = 0;
 5131|      0|	      }
 5132|      0|	    }
 5133|      0|	  }
 5134|       |
 5135|  7.39k|	  if (qn->lower != qn->upper) {
  ------------------
  |  Branch (5135:8): [True: 7.39k, False: 0]
  ------------------
 5136|  7.39k|	    opt->exb.reach_end = 0;
 5137|  7.39k|	    opt->exm.reach_end = 0;
 5138|  7.39k|	  }
 5139|  7.39k|	  if (qn->lower > 1)
  ------------------
  |  Branch (5139:8): [True: 0, False: 7.39k]
  ------------------
 5140|      0|	    opt->exm.reach_end = 0;
 5141|  7.39k|	}
 5142|  7.80k|      }
 5143|       |
 5144|  12.3k|      min = distance_multiply(nopt.len.min, qn->lower);
 5145|  12.3k|      if (IS_REPEAT_INFINITE(qn->upper))
  ------------------
  |  |  422|  12.3k|#define IS_REPEAT_INFINITE(n)   ((n) == REPEAT_INFINITE)
  |  |  ------------------
  |  |  |  |  421|  12.3k|#define REPEAT_INFINITE         -1
  |  |  ------------------
  |  |  |  Branch (422:33): [True: 11.9k, False: 411]
  |  |  ------------------
  ------------------
 5146|  11.9k|	max = (nopt.len.max > 0 ? ONIG_INFINITE_DISTANCE : 0);
  ------------------
  |  |   85|  11.9k|#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)
  ------------------
  |  Branch (5146:9): [True: 11.9k, False: 0]
  ------------------
 5147|    411|      else
 5148|    411|	max = distance_multiply(nopt.len.max, qn->upper);
 5149|       |
 5150|  12.3k|      set_mml(&opt->len, min, max);
 5151|  12.3k|    }
 5152|      0|    break;
 5153|       |
 5154|  7.80k|  case NT_ENCLOSE:
  ------------------
  |  |   44|  7.80k|#define NT_ENCLOSE     6
  ------------------
  |  Branch (5154:3): [True: 7.80k, False: 68.2k]
  ------------------
 5155|  7.80k|    {
 5156|  7.80k|      EncloseNode* en = NENCLOSE(node);
  ------------------
  |  |   81|  7.80k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 5157|       |
 5158|  7.80k|      switch (en->type) {
  ------------------
  |  Branch (5158:15): [True: 0, False: 7.80k]
  ------------------
 5159|    411|      case ENCLOSE_OPTION:
  ------------------
  |  |   95|    411|#define ENCLOSE_OPTION           (1<<1)
  ------------------
  |  Branch (5159:7): [True: 411, False: 7.39k]
  ------------------
 5160|    411|	{
 5161|    411|	  OnigOptionType save = env->options;
 5162|       |
 5163|    411|	  env->options = en->option;
 5164|    411|	  r = optimize_node_left(en->target, opt, env);
 5165|    411|	  env->options = save;
 5166|    411|	}
 5167|    411|	break;
 5168|       |
 5169|  2.05k|      case ENCLOSE_MEMORY:
  ------------------
  |  |   94|  2.05k|#define ENCLOSE_MEMORY           (1<<0)
  ------------------
  |  Branch (5169:7): [True: 2.05k, False: 5.75k]
  ------------------
 5170|  2.05k|#ifdef USE_SUBEXP_CALL
 5171|  2.05k|	en->opt_count++;
 5172|  2.05k|	if (en->opt_count > MAX_NODE_OPT_INFO_REF_COUNT) {
  ------------------
  |  | 4862|  2.05k|#define MAX_NODE_OPT_INFO_REF_COUNT    5
  ------------------
  |  Branch (5172:6): [True: 0, False: 2.05k]
  ------------------
 5173|      0|	  OnigDistance min, max;
 5174|       |
 5175|      0|	  min = 0;
 5176|      0|	  max = ONIG_INFINITE_DISTANCE;
  ------------------
  |  |   85|      0|#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)
  ------------------
 5177|      0|	  if (IS_ENCLOSE_MIN_FIXED(en)) min = en->min_len;
  ------------------
  |  |  152|      0|#define IS_ENCLOSE_MIN_FIXED(en)       (((en)->state & NST_MIN_FIXED)     != 0)
  |  |  ------------------
  |  |  |  |  128|      0|#define NST_MIN_FIXED             (1<<0)
  |  |  ------------------
  |  |  |  Branch (152:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5178|      0|	  if (IS_ENCLOSE_MAX_FIXED(en)) max = en->max_len;
  ------------------
  |  |  153|      0|#define IS_ENCLOSE_MAX_FIXED(en)       (((en)->state & NST_MAX_FIXED)     != 0)
  |  |  ------------------
  |  |  |  |  129|      0|#define NST_MAX_FIXED             (1<<1)
  |  |  ------------------
  |  |  |  Branch (153:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5179|      0|	  set_mml(&opt->len, min, max);
 5180|      0|	}
 5181|  2.05k|	else
 5182|  2.05k|#endif
 5183|  2.05k|	{
 5184|  2.05k|	  r = optimize_node_left(en->target, opt, env);
 5185|       |
 5186|  2.05k|	  if (is_set_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_MASK)) {
  ------------------
  |  |   91|  2.05k|#define ANCHOR_ANYCHAR_STAR_MASK (ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML)
  |  |  ------------------
  |  |  |  |  556|  2.05k|#define ANCHOR_ANYCHAR_STAR     (1<<14)   /* ".*" optimize info */
  |  |  ------------------
  |  |               #define ANCHOR_ANYCHAR_STAR_MASK (ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML)
  |  |  ------------------
  |  |  |  |  557|  2.05k|#define ANCHOR_ANYCHAR_STAR_ML  (1<<15)   /* ".*" optimize info (multi-line) */
  |  |  ------------------
  ------------------
  |  Branch (5186:8): [True: 0, False: 2.05k]
  ------------------
 5187|      0|	    if (BIT_STATUS_AT(env->scan_env->backrefed_mem, en->regnum))
  ------------------
  |  |  371|      0|  ((n) < (int )BIT_STATUS_BITS_NUM  ?  ((stats) & ((BitStatusType )1 << n)) : ((stats) & 1))
  |  |  ------------------
  |  |  |  |  367|      0|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  |  |  ------------------
  |  |  |  Branch (371:3): [True: 0, False: 0]
  |  |  |  Branch (371:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5188|      0|	      remove_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_MASK);
  ------------------
  |  |   91|      0|#define ANCHOR_ANYCHAR_STAR_MASK (ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML)
  |  |  ------------------
  |  |  |  |  556|      0|#define ANCHOR_ANYCHAR_STAR     (1<<14)   /* ".*" optimize info */
  |  |  ------------------
  |  |               #define ANCHOR_ANYCHAR_STAR_MASK (ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML)
  |  |  ------------------
  |  |  |  |  557|      0|#define ANCHOR_ANYCHAR_STAR_ML  (1<<15)   /* ".*" optimize info (multi-line) */
  |  |  ------------------
  ------------------
 5189|      0|	  }
 5190|  2.05k|	}
 5191|  2.05k|	break;
 5192|       |
 5193|  5.34k|      case ENCLOSE_STOP_BACKTRACK:
  ------------------
  |  |   96|  5.34k|#define ENCLOSE_STOP_BACKTRACK   (1<<2)
  ------------------
  |  Branch (5193:7): [True: 5.34k, False: 2.46k]
  ------------------
 5194|  5.34k|      case ENCLOSE_CONDITION:
  ------------------
  |  |   97|  5.34k|#define ENCLOSE_CONDITION        (1<<3)
  ------------------
  |  Branch (5194:7): [True: 0, False: 7.80k]
  ------------------
 5195|  5.34k|	r = optimize_node_left(en->target, opt, env);
 5196|  5.34k|	break;
 5197|       |
 5198|      0|      case ENCLOSE_ABSENT:
  ------------------
  |  |   98|      0|#define ENCLOSE_ABSENT           (1<<4)
  ------------------
  |  Branch (5198:7): [True: 0, False: 7.80k]
  ------------------
 5199|      0|	set_mml(&opt->len, 0, ONIG_INFINITE_DISTANCE);
  ------------------
  |  |   85|      0|#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)
  ------------------
 5200|      0|	break;
 5201|  7.80k|      }
 5202|  7.80k|    }
 5203|  7.80k|    break;
 5204|       |
 5205|  7.80k|  default:
  ------------------
  |  Branch (5205:3): [True: 0, False: 76.0k]
  ------------------
 5206|       |#ifdef ONIG_DEBUG
 5207|       |    fprintf(stderr, "optimize_node_left: undefined node type %d\n",
 5208|       |	    NTYPE(node));
 5209|       |#endif
 5210|      0|    r = ONIGERR_TYPE_BUG;
  ------------------
  |  |  633|      0|#define ONIGERR_TYPE_BUG                                       -6
  ------------------
 5211|      0|    break;
 5212|  76.0k|  }
 5213|       |
 5214|  76.0k|  return r;
 5215|  76.0k|}
regcomp.c:clear_node_opt_info:
 4775|  76.0k|{
 4776|  76.0k|  clear_mml(&opt->len);
 4777|  76.0k|  clear_opt_anc_info(&opt->anc);
 4778|  76.0k|  clear_opt_exact_info(&opt->exb);
 4779|  76.0k|  clear_opt_exact_info(&opt->exm);
 4780|  76.0k|  clear_opt_exact_info(&opt->expr);
 4781|  76.0k|  clear_opt_map_info(&opt->map);
 4782|  76.0k|}
regcomp.c:clear_opt_anc_info:
 4427|   355k|{
 4428|   355k|  anc->left_anchor  = 0;
 4429|   355k|  anc->right_anchor = 0;
 4430|   355k|}
regcomp.c:clear_opt_exact_info:
 4510|   235k|{
 4511|   235k|  clear_mml(&ex->mmd);
 4512|   235k|  clear_opt_anc_info(&ex->anc);
 4513|   235k|  ex->reach_end   = 0;
 4514|   235k|  ex->ignore_case = -1;   /* unset */
 4515|   235k|  ex->len         = 0;
 4516|   235k|  ex->s[0]        = '\0';
 4517|   235k|}
regcomp.c:clear_opt_map_info:
 4643|  76.0k|{
 4644|  76.0k|  static const OptMapInfo clean_info = {
 4645|  76.0k|    {0, 0}, {0, 0}, 0,
 4646|  76.0k|    {
 4647|  76.0k|      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 4648|  76.0k|      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 4649|  76.0k|      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 4650|  76.0k|      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 4651|  76.0k|      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 4652|  76.0k|      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 4653|  76.0k|      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 4654|  76.0k|      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 4655|  76.0k|      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 4656|  76.0k|      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 4657|  76.0k|      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 4658|  76.0k|      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 4659|  76.0k|      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 4660|  76.0k|      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 4661|  76.0k|      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 4662|  76.0k|      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 4663|  76.0k|    }
 4664|  76.0k|  };
 4665|       |
 4666|  76.0k|  xmemcpy(map, &clean_info, sizeof(OptMapInfo));
  ------------------
  |  |  215|  76.0k|#define xmemcpy     memcpy
  ------------------
 4667|  76.0k|}
regcomp.c:set_bound_node_opt_info:
 4767|  76.0k|{
 4768|  76.0k|  copy_mml(&(opt->exb.mmd),  mmd);
 4769|  76.0k|  copy_mml(&(opt->expr.mmd), mmd);
 4770|  76.0k|  copy_mml(&(opt->map.mmd),  mmd);
 4771|  76.0k|}
regcomp.c:copy_mml:
 4391|   228k|{
 4392|   228k|  to->min = from->min;
 4393|   228k|  to->max = from->max;
 4394|   228k|}
regcomp.c:copy_opt_env:
 4421|  9.86k|{
 4422|  9.86k|  *to = *from;
 4423|  9.86k|}
regcomp.c:add_mml:
 4398|  81.3k|{
 4399|  81.3k|  to->min = distance_add(to->min, from->min);
 4400|  81.3k|  to->max = distance_add(to->max, from->max);
 4401|  81.3k|}
regcomp.c:concat_left_node_opt_info:
 4792|  40.6k|{
 4793|  40.6k|  int exb_reach, exm_reach;
 4794|  40.6k|  OptAncInfo tanc;
 4795|       |
 4796|  40.6k|  concat_opt_anc_info(&tanc, &to->anc, &add->anc, to->len.max, add->len.max);
 4797|  40.6k|  copy_opt_anc_info(&to->anc, &tanc);
 4798|       |
 4799|  40.6k|  if (add->exb.len > 0 && to->len.max == 0) {
  ------------------
  |  Branch (4799:7): [True: 11.9k, False: 28.7k]
  |  Branch (4799:27): [True: 2.46k, False: 9.45k]
  ------------------
 4800|  2.46k|    concat_opt_anc_info(&tanc, &to->anc, &add->exb.anc,
 4801|  2.46k|			to->len.max, add->len.max);
 4802|  2.46k|    copy_opt_anc_info(&add->exb.anc, &tanc);
 4803|  2.46k|  }
 4804|       |
 4805|  40.6k|  if (add->map.value > 0 && to->len.max == 0) {
  ------------------
  |  Branch (4805:7): [True: 18.9k, False: 21.7k]
  |  Branch (4805:29): [True: 4.52k, False: 14.3k]
  ------------------
 4806|  4.52k|    if (add->map.mmd.max == 0)
  ------------------
  |  Branch (4806:9): [True: 4.52k, False: 0]
  ------------------
 4807|  4.52k|      add->map.anc.left_anchor |= to->anc.left_anchor;
 4808|  4.52k|  }
 4809|       |
 4810|  40.6k|  exb_reach = to->exb.reach_end;
 4811|  40.6k|  exm_reach = to->exm.reach_end;
 4812|       |
 4813|  40.6k|  if (add->len.max != 0)
  ------------------
  |  Branch (4813:7): [True: 28.3k, False: 12.3k]
  ------------------
 4814|  28.3k|    to->exb.reach_end = to->exm.reach_end = 0;
 4815|       |
 4816|  40.6k|  if (add->exb.len > 0) {
  ------------------
  |  Branch (4816:7): [True: 11.9k, False: 28.7k]
  ------------------
 4817|  11.9k|    if (exb_reach) {
  ------------------
  |  Branch (4817:9): [True: 0, False: 11.9k]
  ------------------
 4818|      0|      concat_opt_exact_info(&to->exb, &add->exb, enc);
 4819|      0|      clear_opt_exact_info(&add->exb);
 4820|      0|    }
 4821|  11.9k|    else if (exm_reach) {
  ------------------
  |  Branch (4821:14): [True: 411, False: 11.5k]
  ------------------
 4822|    411|      concat_opt_exact_info(&to->exm, &add->exb, enc);
 4823|    411|      clear_opt_exact_info(&add->exb);
 4824|    411|    }
 4825|  11.9k|  }
 4826|  40.6k|  select_opt_exact_info(enc, &to->exm, &add->exb);
 4827|  40.6k|  select_opt_exact_info(enc, &to->exm, &add->exm);
 4828|       |
 4829|  40.6k|  if (to->expr.len > 0) {
  ------------------
  |  Branch (4829:7): [True: 0, False: 40.6k]
  ------------------
 4830|      0|    if (add->len.max > 0) {
  ------------------
  |  Branch (4830:9): [True: 0, False: 0]
  ------------------
 4831|      0|      if (to->expr.len > (int )add->len.max)
  ------------------
  |  Branch (4831:11): [True: 0, False: 0]
  ------------------
 4832|      0|	to->expr.len = (int )add->len.max;
 4833|       |
 4834|      0|      if (to->expr.mmd.max == 0)
  ------------------
  |  Branch (4834:11): [True: 0, False: 0]
  ------------------
 4835|      0|	select_opt_exact_info(enc, &to->exb, &to->expr);
 4836|      0|      else
 4837|      0|	select_opt_exact_info(enc, &to->exm, &to->expr);
 4838|      0|    }
 4839|      0|  }
 4840|  40.6k|  else if (add->expr.len > 0) {
  ------------------
  |  Branch (4840:12): [True: 0, False: 40.6k]
  ------------------
 4841|      0|    copy_opt_exact_info(&to->expr, &add->expr);
 4842|      0|  }
 4843|       |
 4844|  40.6k|  select_opt_map_info(&to->map, &add->map);
 4845|       |
 4846|  40.6k|  add_mml(&to->len, &add->len);
 4847|  40.6k|}
regcomp.c:concat_opt_anc_info:
 4441|  43.5k|{
 4442|  43.5k|  clear_opt_anc_info(to);
 4443|       |
 4444|  43.5k|  to->left_anchor = left->left_anchor;
 4445|  43.5k|  if (left_len == 0) {
  ------------------
  |  Branch (4445:7): [True: 20.9k, False: 22.6k]
  ------------------
 4446|  20.9k|    to->left_anchor |= right->left_anchor;
 4447|  20.9k|  }
 4448|       |
 4449|  43.5k|  to->right_anchor = right->right_anchor;
 4450|  43.5k|  if (right_len == 0) {
  ------------------
  |  Branch (4450:7): [True: 12.3k, False: 31.2k]
  ------------------
 4451|  12.3k|    to->right_anchor |= left->right_anchor;
 4452|  12.3k|  }
 4453|  31.2k|  else {
 4454|  31.2k|    to->right_anchor |= (left->right_anchor & ANCHOR_PREC_READ_NOT);
  ------------------
  |  |  552|  31.2k|#define ANCHOR_PREC_READ_NOT    (1<<11)
  ------------------
 4455|  31.2k|  }
 4456|  43.5k|}
regcomp.c:copy_opt_anc_info:
 4434|  43.5k|{
 4435|  43.5k|  *to = *from;
 4436|  43.5k|}
regcomp.c:select_opt_map_info:
 4708|  40.6k|{
 4709|  40.6k|  const int z = 1<<15; /* 32768: something big value */
 4710|       |
 4711|  40.6k|  int v1, v2;
 4712|       |
 4713|  40.6k|  if (alt->value == 0) return ;
  ------------------
  |  Branch (4713:7): [True: 21.7k, False: 18.9k]
  ------------------
 4714|  18.9k|  if (now->value == 0) {
  ------------------
  |  Branch (4714:7): [True: 8.63k, False: 10.2k]
  ------------------
 4715|  8.63k|    copy_opt_map_info(now, alt);
 4716|  8.63k|    return ;
 4717|  8.63k|  }
 4718|       |
 4719|  10.2k|  v1 = z / now->value;
 4720|  10.2k|  v2 = z / alt->value;
 4721|  10.2k|  if (comp_distance_value(&now->mmd, &alt->mmd, v1, v2) > 0)
  ------------------
  |  Branch (4721:7): [True: 0, False: 10.2k]
  ------------------
 4722|      0|    copy_opt_map_info(now, alt);
 4723|  10.2k|}
regcomp.c:comp_distance_value:
 4354|  20.5k|{
 4355|  20.5k|  if (v2 <= 0) return -1;
  ------------------
  |  Branch (4355:7): [True: 0, False: 20.5k]
  ------------------
 4356|  20.5k|  if (v1 <= 0) return  1;
  ------------------
  |  Branch (4356:7): [True: 0, False: 20.5k]
  ------------------
 4357|       |
 4358|  20.5k|  v1 *= distance_value(d1);
 4359|  20.5k|  v2 *= distance_value(d2);
 4360|       |
 4361|  20.5k|  if (v2 > v1) return  1;
  ------------------
  |  Branch (4361:7): [True: 1.64k, False: 18.9k]
  ------------------
 4362|  18.9k|  if (v2 < v1) return -1;
  ------------------
  |  Branch (4362:7): [True: 9.04k, False: 9.86k]
  ------------------
 4363|       |
 4364|  9.86k|  if (d2->min < d1->min) return  1;
  ------------------
  |  Branch (4364:7): [True: 411, False: 9.45k]
  ------------------
 4365|  9.45k|  if (d2->min > d1->min) return -1;
  ------------------
  |  Branch (4365:7): [True: 7.39k, False: 2.05k]
  ------------------
 4366|  2.05k|  return 0;
 4367|  9.45k|}
regcomp.c:distance_value:
 4325|  41.1k|{
 4326|       |  /* 1000 / (min-max-dist + 1) */
 4327|  41.1k|  static const short int dist_vals[] = {
 4328|  41.1k|    1000,  500,  333,  250,  200,  167,  143,  125,  111,  100,
 4329|  41.1k|      91,   83,   77,   71,   67,   63,   59,   56,   53,   50,
 4330|  41.1k|      48,   45,   43,   42,   40,   38,   37,   36,   34,   33,
 4331|  41.1k|      32,   31,   30,   29,   29,   28,   27,   26,   26,   25,
 4332|  41.1k|      24,   24,   23,   23,   22,   22,   21,   21,   20,   20,
 4333|  41.1k|      20,   19,   19,   19,   18,   18,   18,   17,   17,   17,
 4334|  41.1k|      16,   16,   16,   16,   15,   15,   15,   15,   14,   14,
 4335|  41.1k|      14,   14,   14,   14,   13,   13,   13,   13,   13,   13,
 4336|  41.1k|      12,   12,   12,   12,   12,   12,   11,   11,   11,   11,
 4337|  41.1k|      11,   11,   11,   11,   11,   10,   10,   10,   10,   10
 4338|  41.1k|  };
 4339|       |
 4340|  41.1k|  OnigDistance d;
 4341|       |
 4342|  41.1k|  if (mm->max == ONIG_INFINITE_DISTANCE) return 0;
  ------------------
  |  |   85|  41.1k|#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)
  ------------------
  |  Branch (4342:7): [True: 25.8k, False: 15.2k]
  ------------------
 4343|       |
 4344|  15.2k|  d = mm->max - mm->min;
 4345|  15.2k|  if (d < numberof(dist_vals))
  ------------------
  |  |  129|  15.2k|# define numberof(array) (int )(sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (4345:7): [True: 15.2k, False: 0]
  ------------------
 4346|       |    /* return dist_vals[d] * 16 / (mm->min + 12); */
 4347|  15.2k|    return (int )dist_vals[d];
 4348|      0|  else
 4349|      0|    return 1;
 4350|  15.2k|}
regcomp.c:copy_node_opt_info:
 4786|  9.86k|{
 4787|  9.86k|  *to = *from;
 4788|  9.86k|}
regcomp.c:alt_merge_node_opt_info:
 4851|  3.28k|{
 4852|  3.28k|  alt_merge_opt_anc_info  (&to->anc,  &add->anc);
 4853|  3.28k|  alt_merge_opt_exact_info(&to->exb,  &add->exb, env);
 4854|  3.28k|  alt_merge_opt_exact_info(&to->exm,  &add->exm, env);
 4855|  3.28k|  alt_merge_opt_exact_info(&to->expr, &add->expr, env);
 4856|  3.28k|  alt_merge_opt_map_info(env->enc, &to->map,  &add->map);
 4857|       |
 4858|  3.28k|  alt_merge_mml(&to->len, &add->len);
 4859|  3.28k|}
regcomp.c:alt_merge_opt_anc_info:
 4497|  9.04k|{
 4498|  9.04k|  to->left_anchor  &= add->left_anchor;
 4499|  9.04k|  to->right_anchor &= add->right_anchor;
 4500|  9.04k|}
regcomp.c:alt_merge_opt_exact_info:
 4573|  9.86k|{
 4574|  9.86k|  int i, j, len;
 4575|       |
 4576|  9.86k|  if (add->len == 0 || to->len == 0) {
  ------------------
  |  Branch (4576:7): [True: 6.57k, False: 3.28k]
  |  Branch (4576:24): [True: 411, False: 2.87k]
  ------------------
 4577|  6.98k|    clear_opt_exact_info(to);
 4578|  6.98k|    return ;
 4579|  6.98k|  }
 4580|       |
 4581|  2.87k|  if (! is_equal_mml(&to->mmd, &add->mmd)) {
  ------------------
  |  Branch (4581:7): [True: 411, False: 2.46k]
  ------------------
 4582|    411|    clear_opt_exact_info(to);
 4583|    411|    return ;
 4584|    411|  }
 4585|       |
 4586|  4.11k|  for (i = 0; i < to->len && i < add->len; ) {
  ------------------
  |  Branch (4586:15): [True: 4.11k, False: 0]
  |  Branch (4586:30): [True: 4.11k, False: 0]
  ------------------
 4587|  4.11k|    if (to->s[i] != add->s[i]) break;
  ------------------
  |  Branch (4587:9): [True: 2.46k, False: 1.64k]
  ------------------
 4588|  1.64k|    len = enclen(env->enc, to->s + i, to->s + to->len);
  ------------------
  |  |   93|  1.64k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  ------------------
  |  |  |  |  364|  1.64k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  ------------------
  |  |  |  Branch (93:26): [True: 0, False: 1.64k]
  |  |  ------------------
  ------------------
 4589|       |
 4590|  1.64k|    for (j = 1; j < len; j++) {
  ------------------
  |  Branch (4590:17): [True: 0, False: 1.64k]
  ------------------
 4591|      0|      if (to->s[i+j] != add->s[i+j]) break;
  ------------------
  |  Branch (4591:11): [True: 0, False: 0]
  ------------------
 4592|      0|    }
 4593|  1.64k|    if (j < len) break;
  ------------------
  |  Branch (4593:9): [True: 0, False: 1.64k]
  ------------------
 4594|  1.64k|    i += len;
 4595|  1.64k|  }
 4596|       |
 4597|  2.46k|  if (! add->reach_end || i < add->len || i < to->len) {
  ------------------
  |  Branch (4597:7): [True: 0, False: 2.46k]
  |  Branch (4597:27): [True: 2.46k, False: 0]
  |  Branch (4597:43): [True: 0, False: 0]
  ------------------
 4598|  2.46k|    to->reach_end = 0;
 4599|  2.46k|  }
 4600|  2.46k|  to->len = i;
 4601|  2.46k|  if (to->ignore_case < 0)
  ------------------
  |  Branch (4601:7): [True: 0, False: 2.46k]
  ------------------
 4602|      0|    to->ignore_case = add->ignore_case;
 4603|  2.46k|  else if (add->ignore_case >= 0)
  ------------------
  |  Branch (4603:12): [True: 2.46k, False: 0]
  ------------------
 4604|  2.46k|    to->ignore_case |= add->ignore_case;
 4605|       |
 4606|  2.46k|  alt_merge_opt_anc_info(&to->anc, &add->anc);
 4607|  2.46k|  if (! to->reach_end) to->anc.right_anchor = 0;
  ------------------
  |  Branch (4607:7): [True: 2.46k, False: 0]
  ------------------
 4608|  2.46k|}
regcomp.c:is_equal_mml:
 4371|  2.87k|{
 4372|  2.87k|  return (a->min == b->min && a->max == b->max) ? 1 : 0;
  ------------------
  |  Branch (4372:11): [True: 2.46k, False: 411]
  |  Branch (4372:31): [True: 2.46k, False: 0]
  ------------------
 4373|  2.87k|}
regcomp.c:alt_merge_opt_map_info:
 4740|  3.28k|{
 4741|  3.28k|  int i, val;
 4742|       |
 4743|       |  /* if (! is_equal_mml(&to->mmd, &add->mmd)) return ; */
 4744|  3.28k|  if (to->value == 0) return ;
  ------------------
  |  Branch (4744:7): [True: 0, False: 3.28k]
  ------------------
 4745|  3.28k|  if (add->value == 0 || to->mmd.max < add->mmd.min) {
  ------------------
  |  Branch (4745:7): [True: 0, False: 3.28k]
  |  Branch (4745:26): [True: 0, False: 3.28k]
  ------------------
 4746|      0|    clear_opt_map_info(to);
 4747|      0|    return ;
 4748|      0|  }
 4749|       |
 4750|  3.28k|  alt_merge_mml(&to->mmd, &add->mmd);
 4751|       |
 4752|  3.28k|  val = 0;
 4753|   845k|  for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) {
  ------------------
  |  |  756|   845k|#define ONIG_CHAR_TABLE_SIZE   256
  ------------------
  |  Branch (4753:15): [True: 841k, False: 3.28k]
  ------------------
 4754|   841k|    if (add->map[i])
  ------------------
  |  Branch (4754:9): [True: 3.28k, False: 838k]
  ------------------
 4755|  3.28k|      to->map[i] = 1;
 4756|       |
 4757|   841k|    if (to->map[i])
  ------------------
  |  Branch (4757:9): [True: 6.16k, False: 835k]
  ------------------
 4758|  6.16k|      val += map_position_value(enc, i);
 4759|   841k|  }
 4760|  3.28k|  to->value = val;
 4761|       |
 4762|  3.28k|  alt_merge_opt_anc_info(&to->anc, &add->anc);
 4763|  3.28k|}
regcomp.c:map_position_value:
 4301|  60.8k|{
 4302|  60.8k|  static const short int ByteValTable[] = {
 4303|  60.8k|     5,  1,  1,  1,  1,  1,  1,  1,  1, 10, 10,  1,  1, 10,  1,  1,
 4304|  60.8k|     1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
 4305|  60.8k|    12,  4,  7,  4,  4,  4,  4,  4,  4,  5,  5,  5,  5,  5,  5,  5,
 4306|  60.8k|     6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  5,  5,  5,  5,  5,  5,
 4307|  60.8k|     5,  6,  6,  6,  6,  7,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
 4308|  60.8k|     6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  5,  6,  5,  5,  5,
 4309|  60.8k|     5,  6,  6,  6,  6,  7,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
 4310|  60.8k|     6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  5,  5,  5,  5,  1
 4311|  60.8k|  };
 4312|       |
 4313|  60.8k|  if (i < numberof(ByteValTable)) {
  ------------------
  |  |  129|  60.8k|# define numberof(array) (int )(sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (4313:7): [True: 60.8k, False: 0]
  ------------------
 4314|  60.8k|    if (i == 0 && ONIGENC_MBC_MINLEN(enc) > 1)
  ------------------
  |  |  367|      0|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  ------------------
  |  Branch (4314:9): [True: 0, False: 60.8k]
  |  Branch (4314:19): [True: 0, False: 0]
  ------------------
 4315|      0|      return 20;
 4316|  60.8k|    else
 4317|  60.8k|      return (int )ByteValTable[i];
 4318|  60.8k|  }
 4319|      0|  else
 4320|      0|    return 4;   /* Take it easy. */
 4321|  60.8k|}
regcomp.c:alt_merge_mml:
 4414|  6.57k|{
 4415|  6.57k|  if (to->min > from->min) to->min = from->min;
  ------------------
  |  Branch (4415:7): [True: 822, False: 5.75k]
  ------------------
 4416|  6.57k|  if (to->max < from->max) to->max = from->max;
  ------------------
  |  Branch (4416:7): [True: 1.23k, False: 5.34k]
  ------------------
 4417|  6.57k|}
regcomp.c:concat_opt_exact_info_str:
 4557|  17.6k|{
 4558|  17.6k|  int i, j, len;
 4559|  17.6k|  UChar *p;
  ------------------
  |  |   76|  17.6k|# define UChar OnigUChar
  ------------------
 4560|       |
 4561|   145k|  for (i = to->len, p = s; p < end && i < OPT_EXACT_MAXLEN; ) {
  ------------------
  |  |   89|   129k|#define OPT_EXACT_MAXLEN   24	/* This must be smaller than ONIG_CHAR_TABLE_SIZE. */
  ------------------
  |  Branch (4561:28): [True: 129k, False: 16.0k]
  |  Branch (4561:39): [True: 128k, False: 1.64k]
  ------------------
 4562|   128k|    len = enclen(enc, p, end);
  ------------------
  |  |   93|   128k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  ------------------
  |  |  |  |  364|   128k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  ------------------
  |  |  |  Branch (93:26): [True: 0, False: 128k]
  |  |  ------------------
  ------------------
 4563|   128k|    if (i + len > OPT_EXACT_MAXLEN) break;
  ------------------
  |  |   89|   128k|#define OPT_EXACT_MAXLEN   24	/* This must be smaller than ONIG_CHAR_TABLE_SIZE. */
  ------------------
  |  Branch (4563:9): [True: 0, False: 128k]
  ------------------
 4564|   256k|    for (j = 0; j < len && p < end; j++)
  ------------------
  |  Branch (4564:17): [True: 128k, False: 128k]
  |  Branch (4564:28): [True: 128k, False: 0]
  ------------------
 4565|   128k|      to->s[i++] = *p++;
 4566|   128k|  }
 4567|       |
 4568|  17.6k|  to->len = i;
 4569|  17.6k|}
regcomp.c:add_char_opt_map_info:
 4677|  53.8k|{
 4678|  53.8k|  if (map->map[c] == 0) {
  ------------------
  |  Branch (4678:7): [True: 53.8k, False: 0]
  ------------------
 4679|  53.8k|    map->map[c] = 1;
 4680|  53.8k|    map->value += map_position_value(enc, c);
 4681|  53.8k|  }
 4682|  53.8k|}
regcomp.c:set_mml:
 4378|  43.9k|{
 4379|  43.9k|  mml->min = min;
 4380|  43.9k|  mml->max = max;
 4381|  43.9k|}
regcomp.c:add_opt_anc_info:
 4479|  11.5k|{
 4480|  11.5k|  if (is_left_anchor(anc))
  ------------------
  |  Branch (4480:7): [True: 8.22k, False: 3.28k]
  ------------------
 4481|  8.22k|    to->left_anchor |= anc;
 4482|  3.28k|  else
 4483|  3.28k|    to->right_anchor |= anc;
 4484|  11.5k|}
regcomp.c:is_left_anchor:
 4460|  11.5k|{
 4461|  11.5k|  if (anc == ANCHOR_END_BUF || anc == ANCHOR_SEMI_END_BUF ||
  ------------------
  |  |  543|  23.0k|#define ANCHOR_END_BUF          (1<<3)
  ------------------
                if (anc == ANCHOR_END_BUF || anc == ANCHOR_SEMI_END_BUF ||
  ------------------
  |  |  544|  23.0k|#define ANCHOR_SEMI_END_BUF     (1<<4)
  ------------------
  |  Branch (4461:7): [True: 0, False: 11.5k]
  |  Branch (4461:32): [True: 0, False: 11.5k]
  ------------------
 4462|  11.5k|      anc == ANCHOR_END_LINE || anc == ANCHOR_PREC_READ ||
  ------------------
  |  |  545|  23.0k|#define ANCHOR_END_LINE         (1<<5)
  ------------------
                    anc == ANCHOR_END_LINE || anc == ANCHOR_PREC_READ ||
  ------------------
  |  |  551|  19.7k|#define ANCHOR_PREC_READ        (1<<10)
  ------------------
  |  Branch (4462:7): [True: 3.28k, False: 8.22k]
  |  Branch (4462:33): [True: 0, False: 8.22k]
  ------------------
 4463|  11.5k|      anc == ANCHOR_PREC_READ_NOT)
  ------------------
  |  |  552|  8.22k|#define ANCHOR_PREC_READ_NOT    (1<<11)
  ------------------
  |  Branch (4463:7): [True: 0, False: 8.22k]
  ------------------
 4464|  3.28k|    return 0;
 4465|       |
 4466|  8.22k|  return 1;
 4467|  11.5k|}
regcomp.c:copy_opt_exact_info:
 4521|  13.9k|{
 4522|  13.9k|  *to = *from;
 4523|  13.9k|}
regcomp.c:copy_opt_map_info:
 4671|  8.63k|{
 4672|  8.63k|  *to = *from;
 4673|  8.63k|}
regcomp.c:concat_opt_exact_info:
 4527|    411|{
 4528|    411|  int i, j, len;
 4529|    411|  UChar *p, *end;
  ------------------
  |  |   76|    411|# define UChar OnigUChar
  ------------------
 4530|    411|  OptAncInfo tanc;
 4531|       |
 4532|    411|  if (to->ignore_case < 0)
  ------------------
  |  Branch (4532:7): [True: 0, False: 411]
  ------------------
 4533|      0|    to->ignore_case = add->ignore_case;
 4534|    411|  else if (to->ignore_case != add->ignore_case)
  ------------------
  |  Branch (4534:12): [True: 0, False: 411]
  ------------------
 4535|      0|    return ;  /* avoid */
 4536|       |
 4537|    411|  p = add->s;
 4538|    411|  end = p + add->len;
 4539|  1.64k|  for (i = to->len; p < end; ) {
  ------------------
  |  Branch (4539:21): [True: 1.23k, False: 411]
  ------------------
 4540|  1.23k|    len = enclen(enc, p, end);
  ------------------
  |  |   93|  1.23k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  ------------------
  |  |  |  |  364|  1.23k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  ------------------
  |  |  |  Branch (93:26): [True: 0, False: 1.23k]
  |  |  ------------------
  ------------------
 4541|  1.23k|    if (i + len > OPT_EXACT_MAXLEN) break;
  ------------------
  |  |   89|  1.23k|#define OPT_EXACT_MAXLEN   24	/* This must be smaller than ONIG_CHAR_TABLE_SIZE. */
  ------------------
  |  Branch (4541:9): [True: 0, False: 1.23k]
  ------------------
 4542|  2.46k|    for (j = 0; j < len && p < end; j++)
  ------------------
  |  Branch (4542:17): [True: 1.23k, False: 1.23k]
  |  Branch (4542:28): [True: 1.23k, False: 0]
  ------------------
 4543|  1.23k|      to->s[i++] = *p++;
 4544|  1.23k|  }
 4545|       |
 4546|    411|  to->len = i;
 4547|    411|  to->reach_end = (p == end ? add->reach_end : 0);
  ------------------
  |  Branch (4547:20): [True: 411, False: 0]
  ------------------
 4548|       |
 4549|    411|  concat_opt_anc_info(&tanc, &to->anc, &add->anc, 1, 1);
 4550|    411|  if (! to->reach_end) tanc.right_anchor = 0;
  ------------------
  |  Branch (4550:7): [True: 411, False: 0]
  ------------------
 4551|    411|  copy_opt_anc_info(&to->anc, &tanc);
 4552|    411|}
regcomp.c:is_set_opt_anc_info:
 4471|  2.05k|{
 4472|  2.05k|  if ((to->left_anchor & anc) != 0) return 1;
  ------------------
  |  Branch (4472:7): [True: 0, False: 2.05k]
  ------------------
 4473|       |
 4474|  2.05k|  return ((to->right_anchor & anc) != 0 ? 1 : 0);
  ------------------
  |  Branch (4474:11): [True: 0, False: 2.05k]
  ------------------
 4475|  2.05k|}
regcomp.c:select_opt_exact_info:
 4612|  87.9k|{
 4613|  87.9k|  int v1, v2;
 4614|       |
 4615|  87.9k|  v1 = now->len;
 4616|  87.9k|  v2 = alt->len;
 4617|       |
 4618|  87.9k|  if (v2 == 0) {
  ------------------
  |  Branch (4618:7): [True: 70.2k, False: 17.6k]
  ------------------
 4619|  70.2k|    return ;
 4620|  70.2k|  }
 4621|  17.6k|  else if (v1 == 0) {
  ------------------
  |  Branch (4621:12): [True: 13.9k, False: 3.69k]
  ------------------
 4622|  13.9k|    copy_opt_exact_info(now, alt);
 4623|  13.9k|    return ;
 4624|  13.9k|  }
 4625|  3.69k|  else if (v1 <= 2 && v2 <= 2) {
  ------------------
  |  Branch (4625:12): [True: 822, False: 2.87k]
  |  Branch (4625:23): [True: 411, False: 411]
  ------------------
 4626|       |    /* ByteValTable[x] is big value --> low price */
 4627|    411|    v2 = map_position_value(enc, now->s[0]);
 4628|    411|    v1 = map_position_value(enc, alt->s[0]);
 4629|       |
 4630|    411|    if (now->len > 1) v1 += 5;
  ------------------
  |  Branch (4630:9): [True: 0, False: 411]
  ------------------
 4631|    411|    if (alt->len > 1) v2 += 5;
  ------------------
  |  Branch (4631:9): [True: 0, False: 411]
  ------------------
 4632|    411|  }
 4633|       |
 4634|  3.69k|  if (now->ignore_case <= 0) v1 *= 2;
  ------------------
  |  Branch (4634:7): [True: 3.69k, False: 0]
  ------------------
 4635|  3.69k|  if (alt->ignore_case <= 0) v2 *= 2;
  ------------------
  |  Branch (4635:7): [True: 3.69k, False: 0]
  ------------------
 4636|       |
 4637|  3.69k|  if (comp_distance_value(&now->mmd, &alt->mmd, v1, v2) > 0)
  ------------------
  |  Branch (4637:7): [True: 0, False: 3.69k]
  ------------------
 4638|      0|    copy_opt_exact_info(now, alt);
 4639|  3.69k|}
regcomp.c:comp_opt_exact_or_map_info:
 4727|  6.57k|{
 4728|  6.57k|#define COMP_EM_BASE  20
 4729|  6.57k|  int ve, vm;
 4730|       |
 4731|  6.57k|  if (m->value <= 0) return -1;
  ------------------
  |  Branch (4731:7): [True: 0, False: 6.57k]
  ------------------
 4732|       |
 4733|  6.57k|  ve = COMP_EM_BASE * e->len * (e->ignore_case > 0 ? 1 : 2);
  ------------------
  |  | 4728|  6.57k|#define COMP_EM_BASE  20
  ------------------
  |  Branch (4733:33): [True: 0, False: 6.57k]
  ------------------
 4734|  6.57k|  vm = COMP_EM_BASE * 5 * 2 / m->value;
  ------------------
  |  | 4728|  6.57k|#define COMP_EM_BASE  20
  ------------------
 4735|  6.57k|  return comp_distance_value(&e->mmd, &m->mmd, ve, vm);
 4736|  6.57k|}
regcomp.c:set_optimize_exact_info:
 5219|  4.52k|{
 5220|  4.52k|  int allow_reverse;
 5221|       |
 5222|  4.52k|  if (e->len == 0) return 0;
  ------------------
  |  Branch (5222:7): [True: 0, False: 4.52k]
  ------------------
 5223|       |
 5224|  4.52k|  reg->exact = (UChar* )xmalloc(e->len);
  ------------------
  |  |  142|  4.52k|# define xmalloc     malloc
  ------------------
 5225|  4.52k|  CHECK_NULL_RETURN_MEMERR(reg->exact);
  ------------------
  |  |  314|  4.52k|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|  4.52k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 4.52k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 5226|  4.52k|  xmemcpy(reg->exact, e->s, e->len);
  ------------------
  |  |  215|  4.52k|#define xmemcpy     memcpy
  ------------------
 5227|  4.52k|  reg->exact_end = reg->exact + e->len;
 5228|       |
 5229|  4.52k|  allow_reverse =
 5230|  4.52k|	ONIGENC_IS_ALLOWED_REVERSE_MATCH(reg->enc, reg->exact, reg->exact_end);
  ------------------
  |  |  335|  4.52k|        (enc)->is_allowed_reverse_match(s,end,enc)
  ------------------
 5231|       |
 5232|  4.52k|  if (e->ignore_case > 0) {
  ------------------
  |  Branch (5232:7): [True: 0, False: 4.52k]
  ------------------
 5233|      0|    if (e->len >= 3 || (e->len >= 2 && allow_reverse)) {
  ------------------
  |  Branch (5233:9): [True: 0, False: 0]
  |  Branch (5233:25): [True: 0, False: 0]
  |  Branch (5233:40): [True: 0, False: 0]
  ------------------
 5234|      0|      e->len = set_bm_skip(reg->exact, reg->exact_end, reg,
 5235|      0|		      reg->map, 1);
 5236|      0|      reg->exact_end = reg->exact + e->len;
 5237|      0|      if (e->len >= 3) {
  ------------------
  |  Branch (5237:11): [True: 0, False: 0]
  ------------------
 5238|      0|	reg->optimize = (allow_reverse != 0
  ------------------
  |  Branch (5238:19): [True: 0, False: 0]
  ------------------
 5239|      0|			 ? ONIG_OPTIMIZE_EXACT_BM_IC : ONIG_OPTIMIZE_EXACT_BM_NOT_REV_IC);
  ------------------
  |  |  361|      0|#define ONIG_OPTIMIZE_EXACT_BM_IC         6 /* BM (ignore case) */
  ------------------
              			 ? ONIG_OPTIMIZE_EXACT_BM_IC : ONIG_OPTIMIZE_EXACT_BM_NOT_REV_IC);
  ------------------
  |  |  362|      0|#define ONIG_OPTIMIZE_EXACT_BM_NOT_REV_IC 7 /* BM (applied to a multibyte string) (ignore case) */
  ------------------
 5240|      0|      }
 5241|      0|      else if (e->len > 0) {
  ------------------
  |  Branch (5241:16): [True: 0, False: 0]
  ------------------
 5242|      0|	reg->optimize = ONIG_OPTIMIZE_EXACT_IC;
  ------------------
  |  |  359|      0|#define ONIG_OPTIMIZE_EXACT_IC          4   /* Slow Search (ignore case) */
  ------------------
 5243|      0|      }
 5244|      0|      else
 5245|      0|	return 0;
 5246|      0|    }
 5247|      0|    else {
 5248|      0|      reg->optimize = ONIG_OPTIMIZE_EXACT_IC;
  ------------------
  |  |  359|      0|#define ONIG_OPTIMIZE_EXACT_IC          4   /* Slow Search (ignore case) */
  ------------------
 5249|      0|    }
 5250|      0|  }
 5251|  4.52k|  else {
 5252|  4.52k|    if (e->len >= 3 || (e->len >= 2 && allow_reverse)) {
  ------------------
  |  Branch (5252:9): [True: 3.28k, False: 1.23k]
  |  Branch (5252:25): [True: 0, False: 1.23k]
  |  Branch (5252:40): [True: 0, False: 0]
  ------------------
 5253|  3.28k|      set_bm_skip(reg->exact, reg->exact_end, reg,
 5254|  3.28k|		  reg->map, 0);
 5255|  3.28k|      reg->optimize = (allow_reverse != 0
  ------------------
  |  Branch (5255:24): [True: 3.28k, False: 0]
  ------------------
 5256|  3.28k|		     ? ONIG_OPTIMIZE_EXACT_BM : ONIG_OPTIMIZE_EXACT_BM_NOT_REV);
  ------------------
  |  |  357|  3.28k|#define ONIG_OPTIMIZE_EXACT_BM          2   /* Boyer Moore Search */
  ------------------
              		     ? ONIG_OPTIMIZE_EXACT_BM : ONIG_OPTIMIZE_EXACT_BM_NOT_REV);
  ------------------
  |  |  358|      0|#define ONIG_OPTIMIZE_EXACT_BM_NOT_REV  3   /* BM (applied to a multibyte string) */
  ------------------
 5257|  3.28k|    }
 5258|  1.23k|    else {
 5259|  1.23k|      reg->optimize = ONIG_OPTIMIZE_EXACT;
  ------------------
  |  |  356|  1.23k|#define ONIG_OPTIMIZE_EXACT             1   /* Slow Search */
  ------------------
 5260|  1.23k|    }
 5261|  4.52k|  }
 5262|       |
 5263|  4.52k|  reg->dmin = e->mmd.min;
 5264|  4.52k|  reg->dmax = e->mmd.max;
 5265|       |
 5266|  4.52k|  if (reg->dmin != ONIG_INFINITE_DISTANCE) {
  ------------------
  |  |   85|  4.52k|#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)
  ------------------
  |  Branch (5266:7): [True: 4.52k, False: 0]
  ------------------
 5267|  4.52k|    reg->threshold_len = (int )(reg->dmin + (reg->exact_end - reg->exact));
 5268|  4.52k|  }
 5269|       |
 5270|  4.52k|  return 0;
 5271|  4.52k|}
regcomp.c:set_bm_skip:
 4187|  3.28k|{
 4188|  3.28k|  OnigDistance i, len;
 4189|  3.28k|  int clen, flen, n, j, k;
 4190|  3.28k|  UChar *p, buf[ONIGENC_MBC_CASE_FOLD_MAXLEN];
  ------------------
  |  |   76|  3.28k|# define UChar OnigUChar
  ------------------
 4191|  3.28k|  OnigCaseFoldCodeItem items[ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM];
 4192|  3.28k|  OnigEncoding enc = reg->enc;
 4193|       |
 4194|  3.28k|  len = end - s;
 4195|  3.28k|  if (len >= ONIG_CHAR_TABLE_SIZE) {
  ------------------
  |  |  756|  3.28k|#define ONIG_CHAR_TABLE_SIZE   256
  ------------------
  |  Branch (4195:7): [True: 0, False: 3.28k]
  ------------------
 4196|       |    /* This should not happen. */
 4197|      0|    return ONIGERR_TYPE_BUG;
  ------------------
  |  |  633|      0|#define ONIGERR_TYPE_BUG                                       -6
  ------------------
 4198|      0|  }
 4199|       |
 4200|  3.28k|  if (ignore_case) {
  ------------------
  |  Branch (4200:7): [True: 0, False: 3.28k]
  ------------------
 4201|      0|    for (i = 0; i < len; i += clen) {
  ------------------
  |  Branch (4201:17): [True: 0, False: 0]
  ------------------
 4202|      0|      p = s + i;
 4203|      0|      n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, reg->case_fold_flag,
  ------------------
  |  |  341|      0|       (enc)->get_case_fold_codes_by_str(case_fold_flag,p,end,acs,enc)
  ------------------
 4204|      0|	  p, end, items);
 4205|      0|      clen = enclen(enc, p, end);
  ------------------
  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  ------------------
  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  ------------------
  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4206|      0|      if (p + clen > end)
  ------------------
  |  Branch (4206:11): [True: 0, False: 0]
  ------------------
 4207|      0|	clen = (int )(end - p);
 4208|       |
 4209|      0|      for (j = 0; j < n; j++) {
  ------------------
  |  Branch (4209:19): [True: 0, False: 0]
  ------------------
 4210|      0|	if ((items[j].code_len != 1) || (items[j].byte_len != clen)) {
  ------------------
  |  Branch (4210:6): [True: 0, False: 0]
  |  Branch (4210:34): [True: 0, False: 0]
  ------------------
 4211|       |	  /* Different length isn't supported. Stop optimization at here. */
 4212|      0|	  end = p;
 4213|      0|	  goto endcheck;
 4214|      0|	}
 4215|      0|	flen = ONIGENC_CODE_TO_MBC(enc, items[j].code[0], buf);
  ------------------
  |  |  371|      0|#define ONIGENC_CODE_TO_MBC(enc,code,buf)      (enc)->code_to_mbc(code,buf,enc)
  ------------------
 4216|      0|	if (flen != clen) {
  ------------------
  |  Branch (4216:6): [True: 0, False: 0]
  ------------------
 4217|       |	  /* Different length isn't supported. Stop optimization at here. */
 4218|      0|	  end = p;
 4219|      0|	  goto endcheck;
 4220|      0|	}
 4221|      0|      }
 4222|      0|    }
 4223|      0|endcheck:
 4224|      0|    len = end - s;
 4225|      0|  }
 4226|       |
 4227|   845k|  for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)
  ------------------
  |  |  756|   845k|#define ONIG_CHAR_TABLE_SIZE   256
  ------------------
  |  Branch (4227:15): [True: 841k, False: 3.28k]
  ------------------
 4228|   841k|    skip[i] = (UChar )(len + 1);
 4229|  3.28k|  n = 0;
 4230|  50.9k|  for (i = 0; i < len; i += clen) {
  ------------------
  |  Branch (4230:15): [True: 47.6k, False: 3.28k]
  ------------------
 4231|  47.6k|    p = s + i;
 4232|  47.6k|    if (ignore_case)
  ------------------
  |  Branch (4232:9): [True: 0, False: 47.6k]
  ------------------
 4233|      0|      n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, reg->case_fold_flag,
  ------------------
  |  |  341|      0|       (enc)->get_case_fold_codes_by_str(case_fold_flag,p,end,acs,enc)
  ------------------
 4234|  47.6k|					     p, end, items);
 4235|  47.6k|    clen = enclen(enc, p, end);
  ------------------
  |  |   93|  47.6k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  ------------------
  |  |  |  |  364|  47.6k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  ------------------
  |  |  |  Branch (93:26): [True: 0, False: 47.6k]
  |  |  ------------------
  ------------------
 4236|  47.6k|    if (p + clen > end)
  ------------------
  |  Branch (4236:9): [True: 0, False: 47.6k]
  ------------------
 4237|      0|      clen = (int )(end - p);
 4238|       |
 4239|  95.3k|    for (j = 0; j < clen; j++) {
  ------------------
  |  Branch (4239:17): [True: 47.6k, False: 47.6k]
  ------------------
 4240|  47.6k|      skip[s[i + j]] = (UChar )(len - i - j);
 4241|  47.6k|      for (k = 0; k < n; k++) {
  ------------------
  |  Branch (4241:19): [True: 0, False: 47.6k]
  ------------------
 4242|      0|	ONIGENC_CODE_TO_MBC(enc, items[k].code[0], buf);
  ------------------
  |  |  371|      0|#define ONIGENC_CODE_TO_MBC(enc,code,buf)      (enc)->code_to_mbc(code,buf,enc)
  ------------------
 4243|      0|	skip[buf[j]] = (UChar )(len - i - j);
 4244|      0|      }
 4245|  47.6k|    }
 4246|  47.6k|  }
 4247|       |
 4248|  3.28k|  return (int )len;
 4249|  3.28k|}
regcomp.c:set_sub_anchor:
 5292|  7.80k|{
 5293|  7.80k|  reg->sub_anchor |= anc->left_anchor  & ANCHOR_BEGIN_LINE;
  ------------------
  |  |  541|  7.80k|#define ANCHOR_BEGIN_LINE       (1<<1)
  ------------------
 5294|  7.80k|  reg->sub_anchor |= anc->right_anchor & ANCHOR_END_LINE;
  ------------------
  |  |  545|  7.80k|#define ANCHOR_END_LINE         (1<<5)
  ------------------
 5295|  7.80k|}
regcomp.c:set_optimize_map_info:
 5275|  3.28k|{
 5276|  3.28k|  int i;
 5277|       |
 5278|   845k|  for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)
  ------------------
  |  |  756|   845k|#define ONIG_CHAR_TABLE_SIZE   256
  ------------------
  |  Branch (5278:15): [True: 841k, False: 3.28k]
  ------------------
 5279|   841k|    reg->map[i] = m->map[i];
 5280|       |
 5281|  3.28k|  reg->optimize   = ONIG_OPTIMIZE_MAP;
  ------------------
  |  |  360|  3.28k|#define ONIG_OPTIMIZE_MAP               5   /* char map */
  ------------------
 5282|  3.28k|  reg->dmin       = m->mmd.min;
 5283|  3.28k|  reg->dmax       = m->mmd.max;
 5284|       |
 5285|  3.28k|  if (reg->dmin != ONIG_INFINITE_DISTANCE) {
  ------------------
  |  |   85|  3.28k|#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)
  ------------------
  |  Branch (5285:7): [True: 3.28k, False: 0]
  ------------------
 5286|  3.28k|    reg->threshold_len = (int )(reg->dmin + 1);
 5287|  3.28k|  }
 5288|  3.28k|}
regcomp.c:compile_tree:
 1688|  76.0k|{
 1689|  76.0k|  int n, type, len, pos, r = 0;
 1690|       |
 1691|  76.0k|  type = NTYPE(node);
  ------------------
  |  |   69|  76.0k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
 1692|  76.0k|  switch (type) {
 1693|  9.86k|  case NT_LIST:
  ------------------
  |  |   46|  9.86k|#define NT_LIST        8
  ------------------
  |  Branch (1693:3): [True: 9.86k, False: 66.1k]
  ------------------
 1694|  40.6k|    do {
 1695|  40.6k|      r = compile_tree(NCAR(node), reg);
  ------------------
  |  |   86|  40.6k|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|  40.6k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1696|  40.6k|    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
  ------------------
  |  |  312|  40.6k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 30.8k, False: 9.86k]
  |  |  ------------------
  ------------------
  |  Branch (1696:14): [True: 40.6k, False: 0]
  ------------------
 1697|  9.86k|    break;
 1698|       |
 1699|  2.46k|  case NT_ALT:
  ------------------
  |  |   47|  2.46k|#define NT_ALT         9
  ------------------
  |  Branch (1699:3): [True: 2.46k, False: 73.5k]
  ------------------
 1700|  2.46k|    {
 1701|  2.46k|      Node* x = node;
 1702|  2.46k|      len = 0;
 1703|  5.75k|      do {
 1704|  5.75k|	len += compile_length_tree(NCAR(x), reg);
  ------------------
  |  |   86|  5.75k|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|  5.75k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1705|  5.75k|	if (NCDR(x) != NULL) {
  ------------------
  |  |   87|  5.75k|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|  5.75k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
  |  Branch (1705:6): [True: 3.28k, False: 2.46k]
  ------------------
 1706|  3.28k|	  len += SIZE_OP_PUSH + SIZE_OP_JUMP;
  ------------------
  |  |  721|  3.28k|#define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|  3.28k|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|  3.28k|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
              	  len += SIZE_OP_PUSH + SIZE_OP_JUMP;
  ------------------
  |  |  720|  3.28k|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|  3.28k|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|  3.28k|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1707|  3.28k|	}
 1708|  5.75k|      } while (IS_NOT_NULL(x = NCDR(x)));
  ------------------
  |  |  312|  5.75k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 3.28k, False: 2.46k]
  |  |  ------------------
  ------------------
 1709|  2.46k|      pos = reg->used + len;  /* goal position */
 1710|       |
 1711|  5.75k|      do {
 1712|  5.75k|	len = compile_length_tree(NCAR(node), reg);
  ------------------
  |  |   86|  5.75k|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|  5.75k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1713|  5.75k|	if (IS_NOT_NULL(NCDR(node))) {
  ------------------
  |  |  312|  5.75k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 3.28k, False: 2.46k]
  |  |  ------------------
  ------------------
 1714|  3.28k|	  r = add_opcode_rel_addr(reg, OP_PUSH, len + SIZE_OP_JUMP);
  ------------------
  |  |  720|  3.28k|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|  3.28k|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|  3.28k|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1715|  3.28k|	  if (r) break;
  ------------------
  |  Branch (1715:8): [True: 0, False: 3.28k]
  ------------------
 1716|  3.28k|	}
 1717|  5.75k|	r = compile_tree(NCAR(node), reg);
  ------------------
  |  |   86|  5.75k|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|  5.75k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1718|  5.75k|	if (r) break;
  ------------------
  |  Branch (1718:6): [True: 0, False: 5.75k]
  ------------------
 1719|  5.75k|	if (IS_NOT_NULL(NCDR(node))) {
  ------------------
  |  |  312|  5.75k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 3.28k, False: 2.46k]
  |  |  ------------------
  ------------------
 1720|  3.28k|	  len = pos - (reg->used + SIZE_OP_JUMP);
  ------------------
  |  |  720|  3.28k|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|  3.28k|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|  3.28k|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1721|  3.28k|	  r = add_opcode_rel_addr(reg, OP_JUMP, len);
 1722|  3.28k|	  if (r) break;
  ------------------
  |  Branch (1722:8): [True: 0, False: 3.28k]
  ------------------
 1723|  3.28k|	}
 1724|  5.75k|      } while (IS_NOT_NULL(node = NCDR(node)));
  ------------------
  |  |  312|  5.75k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 3.28k, False: 2.46k]
  |  |  ------------------
  ------------------
 1725|  2.46k|    }
 1726|      0|    break;
 1727|       |
 1728|  17.6k|  case NT_STR:
  ------------------
  |  |   38|  17.6k|#define NT_STR         0
  ------------------
  |  Branch (1728:3): [True: 17.6k, False: 58.3k]
  ------------------
 1729|  17.6k|    if (NSTRING_IS_RAW(node))
  ------------------
  |  |  114|  17.6k|#define NSTRING_IS_RAW(node)          (((node)->u.str.flag & NSTR_RAW)   != 0)
  |  |  ------------------
  |  |  |  |  104|  17.6k|#define NSTR_RAW                (1<<0) /* by backslashed number */
  |  |  ------------------
  |  |  |  Branch (114:39): [True: 0, False: 17.6k]
  |  |  ------------------
  ------------------
 1730|      0|      r = compile_string_raw_node(NSTR(node), reg);
  ------------------
  |  |   76|      0|#define NSTR(node)         (&((node)->u.str))
  ------------------
 1731|  17.6k|    else
 1732|  17.6k|      r = compile_string_node(node, reg);
 1733|  17.6k|    break;
 1734|       |
 1735|  16.4k|  case NT_CCLASS:
  ------------------
  |  |   39|  16.4k|#define NT_CCLASS      1
  ------------------
  |  Branch (1735:3): [True: 16.4k, False: 59.5k]
  ------------------
 1736|  16.4k|    r = compile_cclass_node(NCCLASS(node), reg);
  ------------------
  |  |   77|  16.4k|#define NCCLASS(node)      (&((node)->u.cclass))
  ------------------
 1737|  16.4k|    break;
 1738|       |
 1739|      0|  case NT_CTYPE:
  ------------------
  |  |   40|      0|#define NT_CTYPE       2
  ------------------
  |  Branch (1739:3): [True: 0, False: 76.0k]
  ------------------
 1740|      0|    {
 1741|      0|      int op;
 1742|       |
 1743|      0|      switch (NCTYPE(node)->ctype) {
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
 1744|      0|      case ONIGENC_CTYPE_WORD:
  ------------------
  |  |  306|      0|#define ONIGENC_CTYPE_WORD     12
  ------------------
  |  Branch (1744:7): [True: 0, False: 0]
  ------------------
 1745|      0|	if (NCTYPE(node)->ascii_range != 0) {
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
  |  Branch (1745:6): [True: 0, False: 0]
  ------------------
 1746|      0|	  if (NCTYPE(node)->not != 0)  op = OP_NOT_ASCII_WORD;
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
  |  Branch (1746:8): [True: 0, False: 0]
  ------------------
 1747|      0|	  else                         op = OP_ASCII_WORD;
 1748|      0|	}
 1749|      0|	else {
 1750|      0|	  if (NCTYPE(node)->not != 0)  op = OP_NOT_WORD;
  ------------------
  |  |   78|      0|#define NCTYPE(node)       (&((node)->u.ctype))
  ------------------
  |  Branch (1750:8): [True: 0, False: 0]
  ------------------
 1751|      0|	  else                         op = OP_WORD;
 1752|      0|	}
 1753|      0|	break;
 1754|      0|      default:
  ------------------
  |  Branch (1754:7): [True: 0, False: 0]
  ------------------
 1755|      0|	return ONIGERR_TYPE_BUG;
  ------------------
  |  |  633|      0|#define ONIGERR_TYPE_BUG                                       -6
  ------------------
 1756|      0|	break;
 1757|      0|      }
 1758|      0|      r = add_opcode(reg, op);
 1759|      0|    }
 1760|      0|    break;
 1761|       |
 1762|  2.87k|  case NT_CANY:
  ------------------
  |  |   41|  2.87k|#define NT_CANY        3
  ------------------
  |  Branch (1762:3): [True: 2.87k, False: 73.1k]
  ------------------
 1763|  2.87k|    if (IS_MULTILINE(reg->options))
  ------------------
  |  |  395|  2.87k|#define IS_MULTILINE(option)      ((option) & ONIG_OPTION_MULTILINE)
  |  |  ------------------
  |  |  |  |  456|  2.87k|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  455|  2.87k|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  454|  2.87k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (395:35): [True: 0, False: 2.87k]
  |  |  ------------------
  ------------------
 1764|      0|      r = add_opcode(reg, OP_ANYCHAR_ML);
 1765|  2.87k|    else
 1766|  2.87k|      r = add_opcode(reg, OP_ANYCHAR);
 1767|  2.87k|    break;
 1768|       |
 1769|      0|  case NT_BREF:
  ------------------
  |  |   42|      0|#define NT_BREF        4
  ------------------
  |  Branch (1769:3): [True: 0, False: 76.0k]
  ------------------
 1770|      0|    {
 1771|      0|      BRefNode* br = NBREF(node);
  ------------------
  |  |   79|      0|#define NBREF(node)        (&((node)->u.bref))
  ------------------
 1772|       |
 1773|      0|#ifdef USE_BACKREF_WITH_LEVEL
 1774|      0|      if (IS_BACKREF_NEST_LEVEL(br)) {
  ------------------
  |  |  164|      0|#define IS_BACKREF_NEST_LEVEL(bn)      (((bn)->state & NST_NEST_LEVEL) != 0)
  |  |  ------------------
  |  |  |  |  141|      0|#define NST_NEST_LEVEL            (1<<13)
  |  |  ------------------
  |  |  |  Branch (164:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1775|      0|	r = add_opcode(reg, OP_BACKREF_WITH_LEVEL);
 1776|      0|	if (r) return r;
  ------------------
  |  Branch (1776:6): [True: 0, False: 0]
  ------------------
 1777|      0|	r = add_option(reg, (reg->options & ONIG_OPTION_IGNORECASE));
  ------------------
  |  |  454|      0|#define ONIG_OPTION_IGNORECASE           1U
  ------------------
 1778|      0|	if (r) return r;
  ------------------
  |  Branch (1778:6): [True: 0, False: 0]
  ------------------
 1779|      0|	r = add_length(reg, br->nest_level);
 1780|      0|	if (r) return r;
  ------------------
  |  Branch (1780:6): [True: 0, False: 0]
  ------------------
 1781|       |
 1782|      0|	goto add_bacref_mems;
 1783|      0|      }
 1784|      0|      else
 1785|      0|#endif
 1786|      0|      if (br->back_num == 1) {
  ------------------
  |  Branch (1786:11): [True: 0, False: 0]
  ------------------
 1787|      0|	n = br->back_static[0];
 1788|      0|	if (IS_IGNORECASE(reg->options)) {
  ------------------
  |  |  396|      0|#define IS_IGNORECASE(option)     ((option) & ONIG_OPTION_IGNORECASE)
  |  |  ------------------
  |  |  |  |  454|      0|#define ONIG_OPTION_IGNORECASE           1U
  |  |  ------------------
  |  |  |  Branch (396:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1789|      0|	  r = add_opcode(reg, OP_BACKREFN_IC);
 1790|      0|	  if (r) return r;
  ------------------
  |  Branch (1790:8): [True: 0, False: 0]
  ------------------
 1791|      0|	  r = add_mem_num(reg, n);
 1792|      0|	}
 1793|      0|	else {
 1794|      0|	  switch (n) {
 1795|      0|	  case 1:  r = add_opcode(reg, OP_BACKREF1); break;
  ------------------
  |  Branch (1795:4): [True: 0, False: 0]
  ------------------
 1796|      0|	  case 2:  r = add_opcode(reg, OP_BACKREF2); break;
  ------------------
  |  Branch (1796:4): [True: 0, False: 0]
  ------------------
 1797|      0|	  default:
  ------------------
  |  Branch (1797:4): [True: 0, False: 0]
  ------------------
 1798|      0|	    r = add_opcode(reg, OP_BACKREFN);
 1799|      0|	    if (r) return r;
  ------------------
  |  Branch (1799:10): [True: 0, False: 0]
  ------------------
 1800|      0|	    r = add_mem_num(reg, n);
 1801|      0|	    break;
 1802|      0|	  }
 1803|      0|	}
 1804|      0|      }
 1805|      0|      else {
 1806|      0|	int i;
 1807|      0|	int* p;
 1808|       |
 1809|      0|	if (IS_IGNORECASE(reg->options)) {
  ------------------
  |  |  396|      0|#define IS_IGNORECASE(option)     ((option) & ONIG_OPTION_IGNORECASE)
  |  |  ------------------
  |  |  |  |  454|      0|#define ONIG_OPTION_IGNORECASE           1U
  |  |  ------------------
  |  |  |  Branch (396:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1810|      0|	  r = add_opcode(reg, OP_BACKREF_MULTI_IC);
 1811|      0|	}
 1812|      0|	else {
 1813|      0|	  r = add_opcode(reg, OP_BACKREF_MULTI);
 1814|      0|	}
 1815|      0|	if (r) return r;
  ------------------
  |  Branch (1815:6): [True: 0, False: 0]
  ------------------
 1816|       |
 1817|      0|#ifdef USE_BACKREF_WITH_LEVEL
 1818|      0|      add_bacref_mems:
 1819|      0|#endif
 1820|      0|	r = add_length(reg, br->back_num);
 1821|      0|	if (r) return r;
  ------------------
  |  Branch (1821:6): [True: 0, False: 0]
  ------------------
 1822|      0|	p = BACKREFS_P(br);
  ------------------
  |  |  120|      0|  (IS_NOT_NULL((br)->back_dynamic) ? (br)->back_dynamic : (br)->back_static);
  |  |  ------------------
  |  |  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1823|      0|	for (i = br->back_num - 1; i >= 0; i--) {
  ------------------
  |  Branch (1823:29): [True: 0, False: 0]
  ------------------
 1824|      0|	  r = add_mem_num(reg, p[i]);
 1825|      0|	  if (r) return r;
  ------------------
  |  Branch (1825:8): [True: 0, False: 0]
  ------------------
 1826|      0|	}
 1827|      0|      }
 1828|      0|    }
 1829|      0|    break;
 1830|       |
 1831|      0|#ifdef USE_SUBEXP_CALL
 1832|      0|  case NT_CALL:
  ------------------
  |  |   48|      0|#define NT_CALL       10
  ------------------
  |  Branch (1832:3): [True: 0, False: 76.0k]
  ------------------
 1833|      0|    r = compile_call(NCALL(node), reg);
  ------------------
  |  |   84|      0|#define NCALL(node)        (&((node)->u.call))
  ------------------
 1834|      0|    break;
 1835|      0|#endif
 1836|       |
 1837|  6.98k|  case NT_QTFR:
  ------------------
  |  |   43|  6.98k|#define NT_QTFR        5
  ------------------
  |  Branch (1837:3): [True: 6.98k, False: 69.0k]
  ------------------
 1838|  6.98k|    r = compile_quantifier_node(NQTFR(node), reg);
  ------------------
  |  |   80|  6.98k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 1839|  6.98k|    break;
 1840|       |
 1841|  7.80k|  case NT_ENCLOSE:
  ------------------
  |  |   44|  7.80k|#define NT_ENCLOSE     6
  ------------------
  |  Branch (1841:3): [True: 7.80k, False: 68.2k]
  ------------------
 1842|  7.80k|    r = compile_enclose_node(NENCLOSE(node), reg);
  ------------------
  |  |   81|  7.80k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 1843|  7.80k|    break;
 1844|       |
 1845|  11.9k|  case NT_ANCHOR:
  ------------------
  |  |   45|  11.9k|#define NT_ANCHOR      7
  ------------------
  |  Branch (1845:3): [True: 11.9k, False: 64.1k]
  ------------------
 1846|  11.9k|    r = compile_anchor_node(NANCHOR(node), reg);
  ------------------
  |  |   82|  11.9k|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
 1847|  11.9k|    break;
 1848|       |
 1849|      0|  default:
  ------------------
  |  Branch (1849:3): [True: 0, False: 76.0k]
  ------------------
 1850|       |#ifdef ONIG_DEBUG
 1851|       |    fprintf(stderr, "compile_tree: undefined node type %d\n", NTYPE(node));
 1852|       |#endif
 1853|      0|    break;
 1854|  76.0k|  }
 1855|       |
 1856|  76.0k|  return r;
 1857|  76.0k|}
regcomp.c:compile_length_tree:
 1593|  40.2k|{
 1594|  40.2k|  int len, type, r;
 1595|       |
 1596|  40.2k|  type = NTYPE(node);
  ------------------
  |  |   69|  40.2k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
 1597|  40.2k|  switch (type) {
 1598|  3.28k|  case NT_LIST:
  ------------------
  |  |   46|  3.28k|#define NT_LIST        8
  ------------------
  |  Branch (1598:3): [True: 3.28k, False: 36.9k]
  ------------------
 1599|  3.28k|    len = 0;
 1600|  8.22k|    do {
 1601|  8.22k|      r = compile_length_tree(NCAR(node), reg);
  ------------------
  |  |   86|  8.22k|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|  8.22k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1602|  8.22k|      if (r < 0) return r;
  ------------------
  |  Branch (1602:11): [True: 0, False: 8.22k]
  ------------------
 1603|  8.22k|      len += r;
 1604|  8.22k|    } while (IS_NOT_NULL(node = NCDR(node)));
  ------------------
  |  |  312|  8.22k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 4.93k, False: 3.28k]
  |  |  ------------------
  ------------------
 1605|  3.28k|    r = len;
 1606|  3.28k|    break;
 1607|       |
 1608|      0|  case NT_ALT:
  ------------------
  |  |   47|      0|#define NT_ALT         9
  ------------------
  |  Branch (1608:3): [True: 0, False: 40.2k]
  ------------------
 1609|      0|    {
 1610|      0|      int n = 0;
 1611|      0|      len = 0;
 1612|      0|      do {
 1613|      0|	r = compile_length_tree(NCAR(node), reg);
  ------------------
  |  |   86|      0|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1614|      0|	if (r < 0) return r;
  ------------------
  |  Branch (1614:6): [True: 0, False: 0]
  ------------------
 1615|      0|	len += r;
 1616|      0|	n++;
 1617|      0|      } while (IS_NOT_NULL(node = NCDR(node)));
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1618|      0|      r = len;
 1619|      0|      r += (SIZE_OP_PUSH + SIZE_OP_JUMP) * (n - 1);
  ------------------
  |  |  721|      0|#define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
                    r += (SIZE_OP_PUSH + SIZE_OP_JUMP) * (n - 1);
  ------------------
  |  |  720|      0|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1620|      0|    }
 1621|      0|    break;
 1622|       |
 1623|  13.5k|  case NT_STR:
  ------------------
  |  |   38|  13.5k|#define NT_STR         0
  ------------------
  |  Branch (1623:3): [True: 13.5k, False: 26.7k]
  ------------------
 1624|  13.5k|    if (NSTRING_IS_RAW(node))
  ------------------
  |  |  114|  13.5k|#define NSTRING_IS_RAW(node)          (((node)->u.str.flag & NSTR_RAW)   != 0)
  |  |  ------------------
  |  |  |  |  104|  13.5k|#define NSTR_RAW                (1<<0) /* by backslashed number */
  |  |  ------------------
  |  |  |  Branch (114:39): [True: 0, False: 13.5k]
  |  |  ------------------
  ------------------
 1625|      0|      r = compile_length_string_raw_node(NSTR(node), reg);
  ------------------
  |  |   76|      0|#define NSTR(node)         (&((node)->u.str))
  ------------------
 1626|  13.5k|    else
 1627|  13.5k|      r = compile_length_string_node(node, reg);
 1628|  13.5k|    break;
 1629|       |
 1630|  13.5k|  case NT_CCLASS:
  ------------------
  |  |   39|  13.5k|#define NT_CCLASS      1
  ------------------
  |  Branch (1630:3): [True: 13.5k, False: 26.7k]
  ------------------
 1631|  13.5k|    r = compile_length_cclass_node(NCCLASS(node), reg);
  ------------------
  |  |   77|  13.5k|#define NCCLASS(node)      (&((node)->u.cclass))
  ------------------
 1632|  13.5k|    break;
 1633|       |
 1634|      0|  case NT_CTYPE:
  ------------------
  |  |   40|      0|#define NT_CTYPE       2
  ------------------
  |  Branch (1634:3): [True: 0, False: 40.2k]
  ------------------
 1635|  2.46k|  case NT_CANY:
  ------------------
  |  |   41|  2.46k|#define NT_CANY        3
  ------------------
  |  Branch (1635:3): [True: 2.46k, False: 37.8k]
  ------------------
 1636|  2.46k|    r = SIZE_OPCODE;
  ------------------
  |  |  688|  2.46k|#define SIZE_OPCODE           1
  ------------------
 1637|  2.46k|    break;
 1638|       |
 1639|      0|  case NT_BREF:
  ------------------
  |  |   42|      0|#define NT_BREF        4
  ------------------
  |  Branch (1639:3): [True: 0, False: 40.2k]
  ------------------
 1640|      0|    {
 1641|      0|      BRefNode* br = NBREF(node);
  ------------------
  |  |   79|      0|#define NBREF(node)        (&((node)->u.bref))
  ------------------
 1642|       |
 1643|      0|#ifdef USE_BACKREF_WITH_LEVEL
 1644|      0|      if (IS_BACKREF_NEST_LEVEL(br)) {
  ------------------
  |  |  164|      0|#define IS_BACKREF_NEST_LEVEL(bn)      (((bn)->state & NST_NEST_LEVEL) != 0)
  |  |  ------------------
  |  |  |  |  141|      0|#define NST_NEST_LEVEL            (1<<13)
  |  |  ------------------
  |  |  |  Branch (164:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1645|      0|	r = SIZE_OPCODE + SIZE_OPTION + SIZE_LENGTH +
  ------------------
  |  |  688|      0|#define SIZE_OPCODE           1
  ------------------
              	r = SIZE_OPCODE + SIZE_OPTION + SIZE_LENGTH +
  ------------------
  |  |  695|      0|#define SIZE_OPTION           (int )sizeof(OnigOptionType)
  ------------------
              	r = SIZE_OPCODE + SIZE_OPTION + SIZE_LENGTH +
  ------------------
  |  |  691|      0|#define SIZE_LENGTH           (int )sizeof(LengthType)
  ------------------
 1646|      0|            SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
  ------------------
  |  |  691|      0|#define SIZE_LENGTH           (int )sizeof(LengthType)
  ------------------
                          SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
  ------------------
  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  ------------------
 1647|      0|      }
 1648|      0|      else
 1649|      0|#endif
 1650|      0|      if (br->back_num == 1) {
  ------------------
  |  Branch (1650:11): [True: 0, False: 0]
  ------------------
 1651|      0|	r = ((!IS_IGNORECASE(reg->options) && br->back_static[0] <= 2)
  ------------------
  |  |  396|      0|#define IS_IGNORECASE(option)     ((option) & ONIG_OPTION_IGNORECASE)
  |  |  ------------------
  |  |  |  |  454|      0|#define ONIG_OPTION_IGNORECASE           1U
  |  |  ------------------
  ------------------
  |  Branch (1651:8): [True: 0, False: 0]
  |  Branch (1651:40): [True: 0, False: 0]
  ------------------
 1652|      0|	     ? SIZE_OPCODE : (SIZE_OPCODE + SIZE_MEMNUM));
  ------------------
  |  |  688|      0|#define SIZE_OPCODE           1
  ------------------
              	     ? SIZE_OPCODE : (SIZE_OPCODE + SIZE_MEMNUM));
  ------------------
  |  |  688|      0|#define SIZE_OPCODE           1
  ------------------
              	     ? SIZE_OPCODE : (SIZE_OPCODE + SIZE_MEMNUM));
  ------------------
  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  ------------------
 1653|      0|      }
 1654|      0|      else {
 1655|      0|	r = SIZE_OPCODE + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
  ------------------
  |  |  688|      0|#define SIZE_OPCODE           1
  ------------------
              	r = SIZE_OPCODE + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
  ------------------
  |  |  691|      0|#define SIZE_LENGTH           (int )sizeof(LengthType)
  ------------------
              	r = SIZE_OPCODE + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
  ------------------
  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  ------------------
 1656|      0|      }
 1657|      0|    }
 1658|      0|    break;
 1659|       |
 1660|      0|#ifdef USE_SUBEXP_CALL
 1661|      0|  case NT_CALL:
  ------------------
  |  |   48|      0|#define NT_CALL       10
  ------------------
  |  Branch (1661:3): [True: 0, False: 40.2k]
  ------------------
 1662|      0|    r = SIZE_OP_CALL;
  ------------------
  |  |  747|      0|#define SIZE_OP_CALL                   (SIZE_OPCODE + SIZE_ABSADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_CALL                   (SIZE_OPCODE + SIZE_ABSADDR)
  |  |  ------------------
  |  |  |  |  690|      0|#define SIZE_ABSADDR          (int )sizeof(AbsAddrType)
  |  |  ------------------
  ------------------
 1663|      0|    break;
 1664|      0|#endif
 1665|       |
 1666|  3.28k|  case NT_QTFR:
  ------------------
  |  |   43|  3.28k|#define NT_QTFR        5
  ------------------
  |  Branch (1666:3): [True: 3.28k, False: 36.9k]
  ------------------
 1667|  3.28k|    r = compile_length_quantifier_node(NQTFR(node), reg);
  ------------------
  |  |   80|  3.28k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 1668|  3.28k|    break;
 1669|       |
 1670|  2.46k|  case NT_ENCLOSE:
  ------------------
  |  |   44|  2.46k|#define NT_ENCLOSE     6
  ------------------
  |  Branch (1670:3): [True: 2.46k, False: 37.8k]
  ------------------
 1671|  2.46k|    r = compile_length_enclose_node(NENCLOSE(node), reg);
  ------------------
  |  |   81|  2.46k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 1672|  2.46k|    break;
 1673|       |
 1674|  1.64k|  case NT_ANCHOR:
  ------------------
  |  |   45|  1.64k|#define NT_ANCHOR      7
  ------------------
  |  Branch (1674:3): [True: 1.64k, False: 38.6k]
  ------------------
 1675|  1.64k|    r = compile_length_anchor_node(NANCHOR(node), reg);
  ------------------
  |  |   82|  1.64k|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
 1676|  1.64k|    break;
 1677|       |
 1678|      0|  default:
  ------------------
  |  Branch (1678:3): [True: 0, False: 40.2k]
  ------------------
 1679|      0|    return ONIGERR_TYPE_BUG;
  ------------------
  |  |  633|      0|#define ONIGERR_TYPE_BUG                                       -6
  ------------------
 1680|      0|    break;
 1681|  40.2k|  }
 1682|       |
 1683|  40.2k|  return r;
 1684|  40.2k|}
regcomp.c:add_compile_string_length:
  427|  13.5k|{
  428|  13.5k|  int len;
  429|  13.5k|  int op = select_str_opcode(mb_len, byte_len, ignore_case);
  430|       |
  431|  13.5k|  len = SIZE_OPCODE;
  ------------------
  |  |  688|  13.5k|#define SIZE_OPCODE           1
  ------------------
  432|       |
  433|  13.5k|  if (op == OP_EXACTMBN)  len += SIZE_LENGTH;
  ------------------
  |  |  691|      0|#define SIZE_LENGTH           (int )sizeof(LengthType)
  ------------------
  |  Branch (433:7): [True: 0, False: 13.5k]
  ------------------
  434|  13.5k|  if (IS_NEED_STR_LEN_OP_EXACT(op))
  ------------------
  |  |  316|  13.5k|   ((op) == OP_EXACTN    || (op) == OP_EXACTMB2N ||\
  |  |  ------------------
  |  |  |  Branch (316:5): [True: 7.39k, False: 6.16k]
  |  |  |  Branch (316:29): [True: 0, False: 6.16k]
  |  |  ------------------
  |  |  317|  13.5k|    (op) == OP_EXACTMB3N || (op) == OP_EXACTMBN  || (op) == OP_EXACTN_IC)
  |  |  ------------------
  |  |  |  Branch (317:5): [True: 0, False: 6.16k]
  |  |  |  Branch (317:29): [True: 0, False: 6.16k]
  |  |  |  Branch (317:53): [True: 0, False: 6.16k]
  |  |  ------------------
  ------------------
  435|  7.39k|    len += SIZE_LENGTH;
  ------------------
  |  |  691|  7.39k|#define SIZE_LENGTH           (int )sizeof(LengthType)
  ------------------
  436|       |
  437|  13.5k|  len += (int )byte_len;
  438|  13.5k|  return len;
  439|  13.5k|}
regcomp.c:select_str_opcode:
  321|  30.8k|{
  322|  30.8k|  int op;
  323|  30.8k|  OnigDistance str_len = (byte_len + mb_len - 1) / mb_len;
  324|       |
  325|  30.8k|  if (ignore_case) {
  ------------------
  |  Branch (325:7): [True: 0, False: 30.8k]
  ------------------
  326|      0|    switch (str_len) {
  327|      0|    case 1:  op = OP_EXACT1_IC; break;
  ------------------
  |  Branch (327:5): [True: 0, False: 0]
  ------------------
  328|      0|    default: op = OP_EXACTN_IC; break;
  ------------------
  |  Branch (328:5): [True: 0, False: 0]
  ------------------
  329|      0|    }
  330|      0|  }
  331|  30.8k|  else {
  332|  30.8k|    switch (mb_len) {
  333|  30.8k|    case 1:
  ------------------
  |  Branch (333:5): [True: 30.8k, False: 0]
  ------------------
  334|  30.8k|      switch (str_len) {
  335|  9.86k|      case 1:  op = OP_EXACT1; break;
  ------------------
  |  Branch (335:7): [True: 9.86k, False: 20.9k]
  ------------------
  336|    822|      case 2:  op = OP_EXACT2; break;
  ------------------
  |  Branch (336:7): [True: 822, False: 30.0k]
  ------------------
  337|  1.23k|      case 3:  op = OP_EXACT3; break;
  ------------------
  |  Branch (337:7): [True: 1.23k, False: 29.5k]
  ------------------
  338|  1.64k|      case 4:  op = OP_EXACT4; break;
  ------------------
  |  Branch (338:7): [True: 1.64k, False: 29.1k]
  ------------------
  339|  2.46k|      case 5:  op = OP_EXACT5; break;
  ------------------
  |  Branch (339:7): [True: 2.46k, False: 28.3k]
  ------------------
  340|  14.7k|      default: op = OP_EXACTN; break;
  ------------------
  |  Branch (340:7): [True: 14.7k, False: 16.0k]
  ------------------
  341|  30.8k|      }
  342|  30.8k|      break;
  343|       |
  344|  30.8k|    case 2:
  ------------------
  |  Branch (344:5): [True: 0, False: 30.8k]
  ------------------
  345|      0|      switch (str_len) {
  346|      0|      case 1:  op = OP_EXACTMB2N1; break;
  ------------------
  |  Branch (346:7): [True: 0, False: 0]
  ------------------
  347|      0|      case 2:  op = OP_EXACTMB2N2; break;
  ------------------
  |  Branch (347:7): [True: 0, False: 0]
  ------------------
  348|      0|      case 3:  op = OP_EXACTMB2N3; break;
  ------------------
  |  Branch (348:7): [True: 0, False: 0]
  ------------------
  349|      0|      default: op = OP_EXACTMB2N;  break;
  ------------------
  |  Branch (349:7): [True: 0, False: 0]
  ------------------
  350|      0|      }
  351|      0|      break;
  352|       |
  353|      0|    case 3:
  ------------------
  |  Branch (353:5): [True: 0, False: 30.8k]
  ------------------
  354|      0|      op = OP_EXACTMB3N;
  355|      0|      break;
  356|       |
  357|      0|    default:
  ------------------
  |  Branch (357:5): [True: 0, False: 30.8k]
  ------------------
  358|      0|      op = OP_EXACTMBN;
  359|      0|      break;
  360|  30.8k|    }
  361|  30.8k|  }
  362|  30.8k|  return op;
  363|  30.8k|}
regcomp.c:compile_length_string_node:
  465|  13.5k|{
  466|  13.5k|  int rlen, r, len, prev_len, blen, ambig;
  467|  13.5k|  OnigEncoding enc = reg->enc;
  468|  13.5k|  UChar *p, *prev;
  ------------------
  |  |   76|  13.5k|# define UChar OnigUChar
  ------------------
  469|  13.5k|  StrNode* sn;
  470|       |
  471|  13.5k|  sn = NSTR(node);
  ------------------
  |  |   76|  13.5k|#define NSTR(node)         (&((node)->u.str))
  ------------------
  472|  13.5k|  if (sn->end <= sn->s)
  ------------------
  |  Branch (472:7): [True: 0, False: 13.5k]
  ------------------
  473|      0|    return 0;
  474|       |
  475|  13.5k|  ambig = NSTRING_IS_AMBIG(node);
  ------------------
  |  |  115|  13.5k|#define NSTRING_IS_AMBIG(node)        (((node)->u.str.flag & NSTR_AMBIG) != 0)
  |  |  ------------------
  |  |  |  |  105|  13.5k|#define NSTR_AMBIG              (1<<1)
  |  |  ------------------
  ------------------
  476|       |
  477|  13.5k|  p = prev = sn->s;
  478|  13.5k|  prev_len = enclen(enc, p, sn->end);
  ------------------
  |  |   93|  13.5k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  ------------------
  |  |  |  |  364|  13.5k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  ------------------
  |  |  |  Branch (93:26): [True: 0, False: 13.5k]
  |  |  ------------------
  ------------------
  479|  13.5k|  p += prev_len;
  480|  13.5k|  blen = prev_len;
  481|  13.5k|  rlen = 0;
  482|       |
  483|  97.4k|  for (; p < sn->end; ) {
  ------------------
  |  Branch (483:10): [True: 83.8k, False: 13.5k]
  ------------------
  484|  83.8k|    len = enclen(enc, p, sn->end);
  ------------------
  |  |   93|  83.8k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  ------------------
  |  |  |  |  364|  83.8k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  ------------------
  |  |  |  Branch (93:26): [True: 0, False: 83.8k]
  |  |  ------------------
  ------------------
  485|  83.8k|    if (len == prev_len || ambig) {
  ------------------
  |  Branch (485:9): [True: 83.8k, False: 0]
  |  Branch (485:28): [True: 0, False: 0]
  ------------------
  486|  83.8k|      blen += len;
  487|  83.8k|    }
  488|      0|    else {
  489|      0|      r = add_compile_string_length(prev, prev_len, blen, reg, ambig);
  490|      0|      rlen += r;
  491|      0|      prev = p;
  492|      0|      blen = len;
  493|      0|      prev_len = len;
  494|      0|    }
  495|  83.8k|    p += len;
  496|  83.8k|  }
  497|  13.5k|  r = add_compile_string_length(prev, prev_len, blen, reg, ambig);
  498|  13.5k|  rlen += r;
  499|  13.5k|  return rlen;
  500|  13.5k|}
regcomp.c:compile_length_cclass_node:
  587|  13.5k|{
  588|  13.5k|  int len;
  589|       |
  590|  13.5k|  if (IS_NULL(cc->mbuf)) {
  ------------------
  |  |  311|  13.5k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 13.5k, False: 0]
  |  |  ------------------
  ------------------
  591|  13.5k|    len = SIZE_OPCODE + SIZE_BITSET;
  ------------------
  |  |  688|  13.5k|#define SIZE_OPCODE           1
  ------------------
                  len = SIZE_OPCODE + SIZE_BITSET;
  ------------------
  |  |  438|  13.5k|#define SIZE_BITSET        (int )sizeof(BitSet)
  ------------------
  592|  13.5k|  }
  593|      0|  else {
  594|      0|    if (ONIGENC_MBC_MINLEN(reg->enc) > 1 || bitset_is_empty(cc->bs)) {
  ------------------
  |  |  367|      0|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  ------------------
  |  Branch (594:9): [True: 0, False: 0]
  |  Branch (594:45): [True: 0, False: 0]
  ------------------
  595|      0|      len = SIZE_OPCODE;
  ------------------
  |  |  688|      0|#define SIZE_OPCODE           1
  ------------------
  596|      0|    }
  597|      0|    else {
  598|      0|      len = SIZE_OPCODE + SIZE_BITSET;
  ------------------
  |  |  688|      0|#define SIZE_OPCODE           1
  ------------------
                    len = SIZE_OPCODE + SIZE_BITSET;
  ------------------
  |  |  438|      0|#define SIZE_BITSET        (int )sizeof(BitSet)
  ------------------
  599|      0|    }
  600|      0|#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
  601|      0|    len += SIZE_LENGTH + cc->mbuf->used;
  ------------------
  |  |  691|      0|#define SIZE_LENGTH           (int )sizeof(LengthType)
  ------------------
  602|       |#else
  603|       |    len += SIZE_LENGTH + cc->mbuf->used + (WORD_ALIGNMENT_SIZE - 1);
  604|       |#endif
  605|      0|  }
  606|       |
  607|  13.5k|  return len;
  608|  13.5k|}
regcomp.c:compile_length_quantifier_node:
  965|  3.28k|{
  966|  3.28k|  int len, mod_tlen;
  967|  3.28k|  int infinite = IS_REPEAT_INFINITE(qn->upper);
  ------------------
  |  |  422|  3.28k|#define IS_REPEAT_INFINITE(n)   ((n) == REPEAT_INFINITE)
  |  |  ------------------
  |  |  |  |  421|  3.28k|#define REPEAT_INFINITE         -1
  |  |  ------------------
  ------------------
  968|  3.28k|  int empty_info = qn->target_empty_info;
  969|  3.28k|  int tlen = compile_length_tree(qn->target, reg);
  970|       |
  971|  3.28k|  if (tlen < 0) return tlen;
  ------------------
  |  Branch (971:7): [True: 0, False: 3.28k]
  ------------------
  972|       |
  973|       |  /* anychar repeat */
  974|  3.28k|  if (NTYPE(qn->target) == NT_CANY) {
  ------------------
  |  |   69|  3.28k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
                if (NTYPE(qn->target) == NT_CANY) {
  ------------------
  |  |   41|  3.28k|#define NT_CANY        3
  ------------------
  |  Branch (974:7): [True: 0, False: 3.28k]
  ------------------
  975|      0|    if (qn->greedy && infinite) {
  ------------------
  |  Branch (975:9): [True: 0, False: 0]
  |  Branch (975:23): [True: 0, False: 0]
  ------------------
  976|      0|      if (IS_NOT_NULL(qn->next_head_exact))
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  977|      0|	return SIZE_OP_ANYCHAR_STAR_PEEK_NEXT + tlen * qn->lower;
  ------------------
  |  |  719|      0|#define SIZE_OP_ANYCHAR_STAR_PEEK_NEXT (SIZE_OPCODE + 1)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
  978|      0|      else
  979|      0|	return SIZE_OP_ANYCHAR_STAR + tlen * qn->lower;
  ------------------
  |  |  718|      0|#define SIZE_OP_ANYCHAR_STAR            SIZE_OPCODE
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
  980|      0|    }
  981|      0|  }
  982|       |
  983|  3.28k|  if (empty_info != 0)
  ------------------
  |  Branch (983:7): [True: 0, False: 3.28k]
  ------------------
  984|      0|    mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);
  ------------------
  |  |  742|      0|#define SIZE_OP_NULL_CHECK_START       (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_NULL_CHECK_START       (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
                  mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);
  ------------------
  |  |  743|      0|#define SIZE_OP_NULL_CHECK_END         (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_NULL_CHECK_END         (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
  985|  3.28k|  else
  986|  3.28k|    mod_tlen = tlen;
  987|       |
  988|  3.28k|  if (infinite &&
  ------------------
  |  Branch (988:7): [True: 3.28k, False: 0]
  ------------------
  989|  3.28k|      (qn->lower <= 1 || tlen * qn->lower <= QUANTIFIER_EXPAND_LIMIT_SIZE)) {
  ------------------
  |  |  724|      0|#define QUANTIFIER_EXPAND_LIMIT_SIZE   50
  ------------------
  |  Branch (989:8): [True: 3.28k, False: 0]
  |  Branch (989:26): [True: 0, False: 0]
  ------------------
  990|  3.28k|    if (qn->lower == 1 && tlen > QUANTIFIER_EXPAND_LIMIT_SIZE) {
  ------------------
  |  |  724|  2.46k|#define QUANTIFIER_EXPAND_LIMIT_SIZE   50
  ------------------
  |  Branch (990:9): [True: 2.46k, False: 822]
  |  Branch (990:27): [True: 0, False: 2.46k]
  ------------------
  991|      0|      len = SIZE_OP_JUMP;
  ------------------
  |  |  720|      0|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
  992|      0|    }
  993|  3.28k|    else {
  994|  3.28k|      len = tlen * qn->lower;
  995|  3.28k|    }
  996|       |
  997|  3.28k|    if (qn->greedy) {
  ------------------
  |  Branch (997:9): [True: 3.28k, False: 0]
  ------------------
  998|       |#ifdef USE_OP_PUSH_OR_JUMP_EXACT
  999|       |      if (IS_NOT_NULL(qn->head_exact))
 1000|       |	len += SIZE_OP_PUSH_OR_JUMP_EXACT1 + mod_tlen + SIZE_OP_JUMP;
 1001|       |      else
 1002|       |#endif
 1003|  3.28k|      if (IS_NOT_NULL(qn->next_head_exact))
  ------------------
  |  |  312|  3.28k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 2.46k, False: 822]
  |  |  ------------------
  ------------------
 1004|  2.46k|	len += SIZE_OP_PUSH_IF_PEEK_NEXT + mod_tlen + SIZE_OP_JUMP;
  ------------------
  |  |  724|  2.46k|#define SIZE_OP_PUSH_IF_PEEK_NEXT      (SIZE_OPCODE + SIZE_RELADDR + 1)
  |  |  ------------------
  |  |  |  |  688|  2.46k|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH_IF_PEEK_NEXT      (SIZE_OPCODE + SIZE_RELADDR + 1)
  |  |  ------------------
  |  |  |  |  689|  2.46k|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
              	len += SIZE_OP_PUSH_IF_PEEK_NEXT + mod_tlen + SIZE_OP_JUMP;
  ------------------
  |  |  720|  2.46k|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|  2.46k|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|  2.46k|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1005|    822|      else
 1006|    822|	len += SIZE_OP_PUSH + mod_tlen + SIZE_OP_JUMP;
  ------------------
  |  |  721|    822|#define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|    822|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|    822|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
              	len += SIZE_OP_PUSH + mod_tlen + SIZE_OP_JUMP;
  ------------------
  |  |  720|    822|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|    822|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|    822|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1007|  3.28k|    }
 1008|      0|    else
 1009|      0|      len += SIZE_OP_JUMP + mod_tlen + SIZE_OP_PUSH;
  ------------------
  |  |  720|      0|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
                    len += SIZE_OP_JUMP + mod_tlen + SIZE_OP_PUSH;
  ------------------
  |  |  721|      0|#define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1010|  3.28k|  }
 1011|      0|  else if (qn->upper == 0 && qn->is_referred != 0) { /* /(?<n>..){0}/ */
  ------------------
  |  Branch (1011:12): [True: 0, False: 0]
  |  Branch (1011:30): [True: 0, False: 0]
  ------------------
 1012|      0|    len = SIZE_OP_JUMP + tlen;
  ------------------
  |  |  720|      0|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1013|      0|  }
 1014|      0|  else if (!infinite && qn->greedy &&
  ------------------
  |  Branch (1014:12): [True: 0, False: 0]
  |  Branch (1014:25): [True: 0, False: 0]
  ------------------
 1015|      0|           (qn->upper == 1 || (tlen + SIZE_OP_PUSH) * qn->upper
  ------------------
  |  |  721|      0|#define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
  |  Branch (1015:13): [True: 0, False: 0]
  |  Branch (1015:31): [True: 0, False: 0]
  ------------------
 1016|      0|                                      <= QUANTIFIER_EXPAND_LIMIT_SIZE)) {
  ------------------
  |  |  724|      0|#define QUANTIFIER_EXPAND_LIMIT_SIZE   50
  ------------------
 1017|      0|    len = tlen * qn->lower;
 1018|      0|    len += (SIZE_OP_PUSH + tlen) * (qn->upper - qn->lower);
  ------------------
  |  |  721|      0|#define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1019|      0|  }
 1020|      0|  else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */
  ------------------
  |  Branch (1020:12): [True: 0, False: 0]
  |  Branch (1020:27): [True: 0, False: 0]
  |  Branch (1020:45): [True: 0, False: 0]
  ------------------
 1021|      0|    len = SIZE_OP_PUSH + SIZE_OP_JUMP + tlen;
  ------------------
  |  |  721|      0|#define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
                  len = SIZE_OP_PUSH + SIZE_OP_JUMP + tlen;
  ------------------
  |  |  720|      0|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1022|      0|  }
 1023|      0|  else {
 1024|      0|    len = SIZE_OP_REPEAT_INC
  ------------------
  |  |  725|      0|#define SIZE_OP_REPEAT_INC             (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_REPEAT_INC             (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
 1025|      0|        + mod_tlen + SIZE_OPCODE + SIZE_RELADDR + SIZE_MEMNUM;
  ------------------
  |  |  688|      0|#define SIZE_OPCODE           1
  ------------------
                      + mod_tlen + SIZE_OPCODE + SIZE_RELADDR + SIZE_MEMNUM;
  ------------------
  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  ------------------
                      + mod_tlen + SIZE_OPCODE + SIZE_RELADDR + SIZE_MEMNUM;
  ------------------
  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  ------------------
 1026|      0|  }
 1027|       |
 1028|  3.28k|  return len;
 1029|  3.28k|}
regcomp.c:compile_length_enclose_node:
 1213|  2.46k|{
 1214|  2.46k|  int len;
 1215|  2.46k|  int tlen;
 1216|       |
 1217|  2.46k|  if (node->type == ENCLOSE_OPTION)
  ------------------
  |  |   95|  2.46k|#define ENCLOSE_OPTION           (1<<1)
  ------------------
  |  Branch (1217:7): [True: 0, False: 2.46k]
  ------------------
 1218|      0|    return compile_length_option_node(node, reg);
 1219|       |
 1220|  2.46k|  if (node->target) {
  ------------------
  |  Branch (1220:7): [True: 2.46k, False: 0]
  ------------------
 1221|  2.46k|    tlen = compile_length_tree(node->target, reg);
 1222|  2.46k|    if (tlen < 0) return tlen;
  ------------------
  |  Branch (1222:9): [True: 0, False: 2.46k]
  ------------------
 1223|  2.46k|  }
 1224|      0|  else
 1225|      0|    tlen = 0;
 1226|       |
 1227|  2.46k|  switch (node->type) {
 1228|      0|  case ENCLOSE_MEMORY:
  ------------------
  |  |   94|      0|#define ENCLOSE_MEMORY           (1<<0)
  ------------------
  |  Branch (1228:3): [True: 0, False: 2.46k]
  ------------------
 1229|      0|#ifdef USE_SUBEXP_CALL
 1230|      0|    if (IS_ENCLOSE_CALLED(node)) {
  ------------------
  |  |  147|      0|#define IS_ENCLOSE_CALLED(en)          (((en)->state & NST_CALLED)        != 0)
  |  |  ------------------
  |  |  |  |  136|      0|#define NST_CALLED                (1<<8)
  |  |  ------------------
  |  |  |  Branch (147:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1231|      0|      len = SIZE_OP_MEMORY_START_PUSH + tlen
  ------------------
  |  |  735|      0|#define SIZE_OP_MEMORY_START_PUSH      (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_MEMORY_START_PUSH      (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
 1232|      0|	  + SIZE_OP_CALL + SIZE_OP_JUMP + SIZE_OP_RETURN;
  ------------------
  |  |  747|      0|#define SIZE_OP_CALL                   (SIZE_OPCODE + SIZE_ABSADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_CALL                   (SIZE_OPCODE + SIZE_ABSADDR)
  |  |  ------------------
  |  |  |  |  690|      0|#define SIZE_ABSADDR          (int )sizeof(AbsAddrType)
  |  |  ------------------
  ------------------
              	  + SIZE_OP_CALL + SIZE_OP_JUMP + SIZE_OP_RETURN;
  ------------------
  |  |  720|      0|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
              	  + SIZE_OP_CALL + SIZE_OP_JUMP + SIZE_OP_RETURN;
  ------------------
  |  |  748|      0|#define SIZE_OP_RETURN                  SIZE_OPCODE
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
 1233|      0|      if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))
  ------------------
  |  |  371|      0|  ((n) < (int )BIT_STATUS_BITS_NUM  ?  ((stats) & ((BitStatusType )1 << n)) : ((stats) & 1))
  |  |  ------------------
  |  |  |  |  367|      0|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  |  |  ------------------
  |  |  |  Branch (371:3): [True: 0, False: 0]
  |  |  |  Branch (371:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1234|      0|	len += (IS_ENCLOSE_RECURSION(node)
  ------------------
  |  |  149|      0|#define IS_ENCLOSE_RECURSION(en)       (((en)->state & NST_RECURSION)     != 0)
  |  |  ------------------
  |  |  |  |  135|      0|#define NST_RECURSION             (1<<7)
  |  |  ------------------
  |  |  |  Branch (149:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1235|      0|		? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);
  ------------------
  |  |  737|      0|#define SIZE_OP_MEMORY_END_PUSH_REC    (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_MEMORY_END_PUSH_REC    (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
              		? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);
  ------------------
  |  |  736|      0|#define SIZE_OP_MEMORY_END_PUSH        (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_MEMORY_END_PUSH        (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
 1236|      0|      else
 1237|      0|	len += (IS_ENCLOSE_RECURSION(node)
  ------------------
  |  |  149|      0|#define IS_ENCLOSE_RECURSION(en)       (((en)->state & NST_RECURSION)     != 0)
  |  |  ------------------
  |  |  |  |  135|      0|#define NST_RECURSION             (1<<7)
  |  |  ------------------
  |  |  |  Branch (149:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1238|      0|		? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);
  ------------------
  |  |  739|      0|#define SIZE_OP_MEMORY_END_REC         (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_MEMORY_END_REC         (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
              		? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);
  ------------------
  |  |  738|      0|#define SIZE_OP_MEMORY_END             (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_MEMORY_END             (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
 1239|      0|    }
 1240|      0|    else if (IS_ENCLOSE_RECURSION(node)) {
  ------------------
  |  |  149|      0|#define IS_ENCLOSE_RECURSION(en)       (((en)->state & NST_RECURSION)     != 0)
  |  |  ------------------
  |  |  |  |  135|      0|#define NST_RECURSION             (1<<7)
  |  |  ------------------
  |  |  |  Branch (149:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1241|      0|      len = SIZE_OP_MEMORY_START_PUSH;
  ------------------
  |  |  735|      0|#define SIZE_OP_MEMORY_START_PUSH      (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_MEMORY_START_PUSH      (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
 1242|      0|      len += tlen + (BIT_STATUS_AT(reg->bt_mem_end, node->regnum)
  ------------------
  |  |  371|      0|  ((n) < (int )BIT_STATUS_BITS_NUM  ?  ((stats) & ((BitStatusType )1 << n)) : ((stats) & 1))
  |  |  ------------------
  |  |  |  |  367|      0|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  |  |  ------------------
  |  |  |  Branch (371:3): [True: 0, False: 0]
  |  |  |  Branch (371:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1243|      0|		     ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_REC);
  ------------------
  |  |  737|      0|#define SIZE_OP_MEMORY_END_PUSH_REC    (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_MEMORY_END_PUSH_REC    (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
              		     ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_REC);
  ------------------
  |  |  739|      0|#define SIZE_OP_MEMORY_END_REC         (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_MEMORY_END_REC         (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
 1244|      0|    }
 1245|      0|    else
 1246|      0|#endif
 1247|      0|    {
 1248|      0|      if (BIT_STATUS_AT(reg->bt_mem_start, node->regnum))
  ------------------
  |  |  371|      0|  ((n) < (int )BIT_STATUS_BITS_NUM  ?  ((stats) & ((BitStatusType )1 << n)) : ((stats) & 1))
  |  |  ------------------
  |  |  |  |  367|      0|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  |  |  ------------------
  |  |  |  Branch (371:3): [True: 0, False: 0]
  |  |  |  Branch (371:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1249|      0|	len = SIZE_OP_MEMORY_START_PUSH;
  ------------------
  |  |  735|      0|#define SIZE_OP_MEMORY_START_PUSH      (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_MEMORY_START_PUSH      (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
 1250|      0|      else
 1251|      0|	len = SIZE_OP_MEMORY_START;
  ------------------
  |  |  734|      0|#define SIZE_OP_MEMORY_START           (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_MEMORY_START           (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
 1252|       |
 1253|      0|      len += tlen + (BIT_STATUS_AT(reg->bt_mem_end, node->regnum)
  ------------------
  |  |  371|      0|  ((n) < (int )BIT_STATUS_BITS_NUM  ?  ((stats) & ((BitStatusType )1 << n)) : ((stats) & 1))
  |  |  ------------------
  |  |  |  |  367|      0|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  |  |  ------------------
  |  |  |  Branch (371:3): [True: 0, False: 0]
  |  |  |  Branch (371:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1254|      0|		     ? SIZE_OP_MEMORY_END_PUSH : SIZE_OP_MEMORY_END);
  ------------------
  |  |  736|      0|#define SIZE_OP_MEMORY_END_PUSH        (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_MEMORY_END_PUSH        (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
              		     ? SIZE_OP_MEMORY_END_PUSH : SIZE_OP_MEMORY_END);
  ------------------
  |  |  738|      0|#define SIZE_OP_MEMORY_END             (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_MEMORY_END             (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
 1255|      0|    }
 1256|      0|    break;
 1257|       |
 1258|  2.46k|  case ENCLOSE_STOP_BACKTRACK:
  ------------------
  |  |   96|  2.46k|#define ENCLOSE_STOP_BACKTRACK   (1<<2)
  ------------------
  |  Branch (1258:3): [True: 2.46k, False: 0]
  ------------------
 1259|  2.46k|    if (IS_ENCLOSE_STOP_BT_SIMPLE_REPEAT(node)) {
  ------------------
  |  |  156|  2.46k|    (((en)->state & NST_STOP_BT_SIMPLE_REPEAT) != 0)
  |  |  ------------------
  |  |  |  |  134|  2.46k|#define NST_STOP_BT_SIMPLE_REPEAT (1<<6)
  |  |  ------------------
  |  |  |  Branch (156:5): [True: 2.46k, False: 0]
  |  |  ------------------
  ------------------
 1260|  2.46k|      QtfrNode* qn = NQTFR(node->target);
  ------------------
  |  |   80|  2.46k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 1261|  2.46k|      tlen = compile_length_tree(qn->target, reg);
 1262|  2.46k|      if (tlen < 0) return tlen;
  ------------------
  |  Branch (1262:11): [True: 0, False: 2.46k]
  ------------------
 1263|       |
 1264|  2.46k|      len = tlen * qn->lower
 1265|  2.46k|	  + SIZE_OP_PUSH + tlen + SIZE_OP_POP + SIZE_OP_JUMP;
  ------------------
  |  |  721|  2.46k|#define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|  2.46k|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|  2.46k|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
              	  + SIZE_OP_PUSH + tlen + SIZE_OP_POP + SIZE_OP_JUMP;
  ------------------
  |  |  722|  2.46k|#define SIZE_OP_POP                     SIZE_OPCODE
  |  |  ------------------
  |  |  |  |  688|  2.46k|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
              	  + SIZE_OP_PUSH + tlen + SIZE_OP_POP + SIZE_OP_JUMP;
  ------------------
  |  |  720|  2.46k|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|  2.46k|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|  2.46k|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1266|  2.46k|    }
 1267|      0|    else {
 1268|      0|      len = SIZE_OP_PUSH_STOP_BT + tlen + SIZE_OP_POP_STOP_BT;
  ------------------
  |  |  740|      0|#define SIZE_OP_PUSH_STOP_BT            SIZE_OPCODE
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
                    len = SIZE_OP_PUSH_STOP_BT + tlen + SIZE_OP_POP_STOP_BT;
  ------------------
  |  |  741|      0|#define SIZE_OP_POP_STOP_BT             SIZE_OPCODE
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
 1269|      0|    }
 1270|  2.46k|    break;
 1271|       |
 1272|  2.46k|  case ENCLOSE_CONDITION:
  ------------------
  |  |   97|      0|#define ENCLOSE_CONDITION        (1<<3)
  ------------------
  |  Branch (1272:3): [True: 0, False: 2.46k]
  ------------------
 1273|      0|    len = SIZE_OP_CONDITION;
  ------------------
  |  |  749|      0|#define SIZE_OP_CONDITION              (SIZE_OPCODE + SIZE_MEMNUM + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_CONDITION              (SIZE_OPCODE + SIZE_MEMNUM + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  |  |               #define SIZE_OP_CONDITION              (SIZE_OPCODE + SIZE_MEMNUM + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1274|      0|    if (NTYPE(node->target) == NT_ALT) {
  ------------------
  |  |   69|      0|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
                  if (NTYPE(node->target) == NT_ALT) {
  ------------------
  |  |   47|      0|#define NT_ALT         9
  ------------------
  |  Branch (1274:9): [True: 0, False: 0]
  ------------------
 1275|      0|      Node* x = node->target;
 1276|       |
 1277|      0|      tlen = compile_length_tree(NCAR(x), reg); /* yes-node */
  ------------------
  |  |   86|      0|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1278|      0|      if (tlen < 0) return tlen;
  ------------------
  |  Branch (1278:11): [True: 0, False: 0]
  ------------------
 1279|      0|      len += tlen + SIZE_OP_JUMP;
  ------------------
  |  |  720|      0|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1280|      0|      if (NCDR(x) == NULL) return ONIGERR_PARSER_BUG;
  ------------------
  |  |   87|      0|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
                    if (NCDR(x) == NULL) return ONIGERR_PARSER_BUG;
  ------------------
  |  |  634|      0|#define ONIGERR_PARSER_BUG                                    -11
  ------------------
  |  Branch (1280:11): [True: 0, False: 0]
  ------------------
 1281|      0|      x = NCDR(x);
  ------------------
  |  |   87|      0|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1282|      0|      tlen = compile_length_tree(NCAR(x), reg); /* no-node */
  ------------------
  |  |   86|      0|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1283|      0|      if (tlen < 0) return tlen;
  ------------------
  |  Branch (1283:11): [True: 0, False: 0]
  ------------------
 1284|      0|      len += tlen;
 1285|      0|      if (NCDR(x) != NULL) return ONIGERR_INVALID_CONDITION_PATTERN;
  ------------------
  |  |   87|      0|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
                    if (NCDR(x) != NULL) return ONIGERR_INVALID_CONDITION_PATTERN;
  ------------------
  |  |  667|      0|#define ONIGERR_INVALID_CONDITION_PATTERN                    -124
  ------------------
  |  Branch (1285:11): [True: 0, False: 0]
  ------------------
 1286|      0|    }
 1287|      0|    else {
 1288|      0|      return ONIGERR_PARSER_BUG;
  ------------------
  |  |  634|      0|#define ONIGERR_PARSER_BUG                                    -11
  ------------------
 1289|      0|    }
 1290|      0|    break;
 1291|       |
 1292|      0|  case ENCLOSE_ABSENT:
  ------------------
  |  |   98|      0|#define ENCLOSE_ABSENT           (1<<4)
  ------------------
  |  Branch (1292:3): [True: 0, False: 2.46k]
  ------------------
 1293|      0|    len = SIZE_OP_PUSH_ABSENT_POS + SIZE_OP_ABSENT + tlen + SIZE_OP_ABSENT_END;
  ------------------
  |  |  750|      0|#define SIZE_OP_PUSH_ABSENT_POS         SIZE_OPCODE
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
                  len = SIZE_OP_PUSH_ABSENT_POS + SIZE_OP_ABSENT + tlen + SIZE_OP_ABSENT_END;
  ------------------
  |  |  751|      0|#define SIZE_OP_ABSENT                 (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_ABSENT                 (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
                  len = SIZE_OP_PUSH_ABSENT_POS + SIZE_OP_ABSENT + tlen + SIZE_OP_ABSENT_END;
  ------------------
  |  |  752|      0|#define SIZE_OP_ABSENT_END              SIZE_OPCODE
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
 1294|      0|    break;
 1295|       |
 1296|      0|  default:
  ------------------
  |  Branch (1296:3): [True: 0, False: 2.46k]
  ------------------
 1297|      0|    return ONIGERR_TYPE_BUG;
  ------------------
  |  |  633|      0|#define ONIGERR_TYPE_BUG                                       -6
  ------------------
 1298|      0|    break;
 1299|  2.46k|  }
 1300|       |
 1301|  2.46k|  return len;
 1302|  2.46k|}
regcomp.c:compile_length_anchor_node:
 1463|  1.64k|{
 1464|  1.64k|  int len;
 1465|  1.64k|  int tlen = 0;
 1466|       |
 1467|  1.64k|  if (node->target) {
  ------------------
  |  Branch (1467:7): [True: 0, False: 1.64k]
  ------------------
 1468|      0|    tlen = compile_length_tree(node->target, reg);
 1469|      0|    if (tlen < 0) return tlen;
  ------------------
  |  Branch (1469:9): [True: 0, False: 0]
  ------------------
 1470|      0|  }
 1471|       |
 1472|  1.64k|  switch (node->type) {
 1473|      0|  case ANCHOR_PREC_READ:
  ------------------
  |  |  551|      0|#define ANCHOR_PREC_READ        (1<<10)
  ------------------
  |  Branch (1473:3): [True: 0, False: 1.64k]
  ------------------
 1474|      0|    len = SIZE_OP_PUSH_POS + tlen + SIZE_OP_POP_POS;
  ------------------
  |  |  727|      0|#define SIZE_OP_PUSH_POS                SIZE_OPCODE
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
                  len = SIZE_OP_PUSH_POS + tlen + SIZE_OP_POP_POS;
  ------------------
  |  |  729|      0|#define SIZE_OP_POP_POS                 SIZE_OPCODE
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
 1475|      0|    break;
 1476|      0|  case ANCHOR_PREC_READ_NOT:
  ------------------
  |  |  552|      0|#define ANCHOR_PREC_READ_NOT    (1<<11)
  ------------------
  |  Branch (1476:3): [True: 0, False: 1.64k]
  ------------------
 1477|      0|    len = SIZE_OP_PUSH_POS_NOT + tlen + SIZE_OP_FAIL_POS;
  ------------------
  |  |  728|      0|#define SIZE_OP_PUSH_POS_NOT           (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH_POS_NOT           (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
                  len = SIZE_OP_PUSH_POS_NOT + tlen + SIZE_OP_FAIL_POS;
  ------------------
  |  |  730|      0|#define SIZE_OP_FAIL_POS                SIZE_OPCODE
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
 1478|      0|    break;
 1479|      0|  case ANCHOR_LOOK_BEHIND:
  ------------------
  |  |  553|      0|#define ANCHOR_LOOK_BEHIND      (1<<12)
  ------------------
  |  Branch (1479:3): [True: 0, False: 1.64k]
  ------------------
 1480|      0|    len = SIZE_OP_LOOK_BEHIND + tlen;
  ------------------
  |  |  744|      0|#define SIZE_OP_LOOK_BEHIND            (SIZE_OPCODE + SIZE_LENGTH)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_LOOK_BEHIND            (SIZE_OPCODE + SIZE_LENGTH)
  |  |  ------------------
  |  |  |  |  691|      0|#define SIZE_LENGTH           (int )sizeof(LengthType)
  |  |  ------------------
  ------------------
 1481|      0|    break;
 1482|      0|  case ANCHOR_LOOK_BEHIND_NOT:
  ------------------
  |  |  554|      0|#define ANCHOR_LOOK_BEHIND_NOT  (1<<13)
  ------------------
  |  Branch (1482:3): [True: 0, False: 1.64k]
  ------------------
 1483|      0|    len = SIZE_OP_PUSH_LOOK_BEHIND_NOT + tlen + SIZE_OP_FAIL_LOOK_BEHIND_NOT;
  ------------------
  |  |  745|      0|#define SIZE_OP_PUSH_LOOK_BEHIND_NOT   (SIZE_OPCODE + SIZE_RELADDR + SIZE_LENGTH)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH_LOOK_BEHIND_NOT   (SIZE_OPCODE + SIZE_RELADDR + SIZE_LENGTH)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH_LOOK_BEHIND_NOT   (SIZE_OPCODE + SIZE_RELADDR + SIZE_LENGTH)
  |  |  ------------------
  |  |  |  |  691|      0|#define SIZE_LENGTH           (int )sizeof(LengthType)
  |  |  ------------------
  ------------------
                  len = SIZE_OP_PUSH_LOOK_BEHIND_NOT + tlen + SIZE_OP_FAIL_LOOK_BEHIND_NOT;
  ------------------
  |  |  746|      0|#define SIZE_OP_FAIL_LOOK_BEHIND_NOT    SIZE_OPCODE
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
 1484|      0|    break;
 1485|       |
 1486|  1.64k|  default:
  ------------------
  |  Branch (1486:3): [True: 1.64k, False: 0]
  ------------------
 1487|  1.64k|    len = SIZE_OPCODE;
  ------------------
  |  |  688|  1.64k|#define SIZE_OPCODE           1
  ------------------
 1488|  1.64k|    break;
 1489|  1.64k|  }
 1490|       |
 1491|  1.64k|  return len;
 1492|  1.64k|}
regcomp.c:add_opcode_rel_addr:
  277|  26.7k|{
  278|  26.7k|  int r;
  279|       |
  280|  26.7k|  r = add_opcode(reg, opcode);
  281|  26.7k|  if (r) return r;
  ------------------
  |  Branch (281:7): [True: 0, False: 26.7k]
  ------------------
  282|  26.7k|  r = add_rel_addr(reg, addr);
  283|  26.7k|  return r;
  284|  26.7k|}
regcomp.c:add_rel_addr:
  223|  26.7k|{
  224|  26.7k|  RelAddrType ra = (RelAddrType )addr;
  225|       |
  226|  26.7k|  BBUF_ADD(reg, &ra, SIZE_RELADDR);
  ------------------
  |  |  504|  26.7k|#define BBUF_ADD(buf,bytes,n)       BBUF_WRITE((buf),(buf)->used,(bytes),(n))
  |  |  ------------------
  |  |  |  |  490|  26.7k|#define BBUF_WRITE(buf,pos,bytes,n) do{\
  |  |  |  |  491|  26.7k|  int used = (pos) + (int )(n);\
  |  |  |  |  492|  26.7k|  if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  470|  1.23k|#define BBUF_EXPAND(buf,low) do{\
  |  |  |  |  |  |  471|  1.23k|  UChar *tmp;\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   76|  1.23k|# define UChar OnigUChar
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  472|  1.23k|  do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (472:36): [True: 0, False: 1.23k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  473|  1.23k|  tmp = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  143|  1.23k|# define xrealloc    realloc
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  474|  1.23k|  if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  311|  1.23k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (311:39): [True: 0, False: 1.23k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                 if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  475|  1.23k|  (buf)->p = tmp;\
  |  |  |  |  |  |  476|  1.23k|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (476:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (492:7): [True: 1.23k, False: 25.4k]
  |  |  |  |  ------------------
  |  |  |  |  493|  26.7k|  xmemcpy((buf)->p + (pos), (bytes), (n));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  26.7k|#define xmemcpy     memcpy
  |  |  |  |  ------------------
  |  |  |  |  494|  26.7k|  if ((buf)->used < (unsigned int )used) (buf)->used = used;\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:7): [True: 26.7k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  495|  26.7k|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (495:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  227|  26.7k|  return 0;
  228|  26.7k|}
regcomp.c:add_compile_string:
  444|  17.2k|{
  445|  17.2k|  int op = select_str_opcode(mb_len, byte_len, ignore_case);
  446|  17.2k|  add_opcode(reg, op);
  447|       |
  448|  17.2k|  if (op == OP_EXACTMBN)
  ------------------
  |  Branch (448:7): [True: 0, False: 17.2k]
  ------------------
  449|      0|    add_length(reg, mb_len);
  450|       |
  451|  17.2k|  if (IS_NEED_STR_LEN_OP_EXACT(op)) {
  ------------------
  |  |  316|  17.2k|   ((op) == OP_EXACTN    || (op) == OP_EXACTMB2N ||\
  |  |  ------------------
  |  |  |  Branch (316:5): [True: 7.39k, False: 9.86k]
  |  |  |  Branch (316:29): [True: 0, False: 9.86k]
  |  |  ------------------
  |  |  317|  17.2k|    (op) == OP_EXACTMB3N || (op) == OP_EXACTMBN  || (op) == OP_EXACTN_IC)
  |  |  ------------------
  |  |  |  Branch (317:5): [True: 0, False: 9.86k]
  |  |  |  Branch (317:29): [True: 0, False: 9.86k]
  |  |  |  Branch (317:53): [True: 0, False: 9.86k]
  |  |  ------------------
  ------------------
  452|  7.39k|    if (op == OP_EXACTN_IC)
  ------------------
  |  Branch (452:9): [True: 0, False: 7.39k]
  ------------------
  453|      0|      add_length(reg, byte_len);
  454|  7.39k|    else
  455|  7.39k|      add_length(reg, byte_len / mb_len);
  456|  7.39k|  }
  457|       |
  458|  17.2k|  add_bytes(reg, s, byte_len);
  459|  17.2k|  return 0;
  460|  17.2k|}
regcomp.c:add_bytes:
  288|  18.0k|{
  289|  18.0k|  BBUF_ADD(reg, bytes, len);
  ------------------
  |  |  504|  18.0k|#define BBUF_ADD(buf,bytes,n)       BBUF_WRITE((buf),(buf)->used,(bytes),(n))
  |  |  ------------------
  |  |  |  |  490|  18.0k|#define BBUF_WRITE(buf,pos,bytes,n) do{\
  |  |  |  |  491|  18.0k|  int used = (pos) + (int )(n);\
  |  |  |  |  492|  18.0k|  if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  470|    822|#define BBUF_EXPAND(buf,low) do{\
  |  |  |  |  |  |  471|    822|  UChar *tmp;\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   76|    822|# define UChar OnigUChar
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    822|  do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (472:36): [True: 0, False: 822]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  473|    822|  tmp = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  143|    822|# define xrealloc    realloc
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  474|    822|  if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  311|    822|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (311:39): [True: 0, False: 822]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                 if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  475|    822|  (buf)->p = tmp;\
  |  |  |  |  |  |  476|    822|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (476:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (492:7): [True: 822, False: 17.2k]
  |  |  |  |  ------------------
  |  |  |  |  493|  18.0k|  xmemcpy((buf)->p + (pos), (bytes), (n));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  18.0k|#define xmemcpy     memcpy
  |  |  |  |  ------------------
  |  |  |  |  494|  18.0k|  if ((buf)->used < (unsigned int )used) (buf)->used = used;\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:7): [True: 18.0k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  495|  18.0k|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (495:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  290|  18.0k|  return 0;
  291|  18.0k|}
regcomp.c:compile_string_node:
  513|  17.6k|{
  514|  17.6k|  int r, len, prev_len, blen, ambig;
  515|  17.6k|  OnigEncoding enc = reg->enc;
  516|  17.6k|  UChar *p, *prev, *end;
  ------------------
  |  |   76|  17.6k|# define UChar OnigUChar
  ------------------
  517|  17.6k|  StrNode* sn;
  518|       |
  519|  17.6k|  sn = NSTR(node);
  ------------------
  |  |   76|  17.6k|#define NSTR(node)         (&((node)->u.str))
  ------------------
  520|  17.6k|  if (sn->end <= sn->s)
  ------------------
  |  Branch (520:7): [True: 411, False: 17.2k]
  ------------------
  521|    411|    return 0;
  522|       |
  523|  17.2k|  end = sn->end;
  524|  17.2k|  ambig = NSTRING_IS_AMBIG(node);
  ------------------
  |  |  115|  17.2k|#define NSTRING_IS_AMBIG(node)        (((node)->u.str.flag & NSTR_AMBIG) != 0)
  |  |  ------------------
  |  |  |  |  105|  17.2k|#define NSTR_AMBIG              (1<<1)
  |  |  ------------------
  ------------------
  525|       |
  526|  17.2k|  p = prev = sn->s;
  527|  17.2k|  prev_len = enclen(enc, p, end);
  ------------------
  |  |   93|  17.2k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  ------------------
  |  |  |  |  364|  17.2k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  ------------------
  |  |  |  Branch (93:26): [True: 0, False: 17.2k]
  |  |  ------------------
  ------------------
  528|  17.2k|  p += prev_len;
  529|  17.2k|  blen = prev_len;
  530|       |
  531|   151k|  for (; p < end; ) {
  ------------------
  |  Branch (531:10): [True: 133k, False: 17.2k]
  ------------------
  532|   133k|    len = enclen(enc, p, end);
  ------------------
  |  |   93|   133k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  ------------------
  |  |  |  |  364|   133k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  ------------------
  |  |  |  Branch (93:26): [True: 0, False: 133k]
  |  |  ------------------
  ------------------
  533|   133k|    if (len == prev_len || ambig) {
  ------------------
  |  Branch (533:9): [True: 133k, False: 0]
  |  Branch (533:28): [True: 0, False: 0]
  ------------------
  534|   133k|      blen += len;
  535|   133k|    }
  536|      0|    else {
  537|      0|      r = add_compile_string(prev, prev_len, blen, reg, ambig);
  538|      0|      if (p + len > end) {
  ------------------
  |  Branch (538:11): [True: 0, False: 0]
  ------------------
  539|      0|        return 0;
  540|      0|      }
  541|      0|      if (r) return r;
  ------------------
  |  Branch (541:11): [True: 0, False: 0]
  ------------------
  542|       |
  543|      0|      prev  = p;
  544|      0|      blen  = len;
  545|      0|      prev_len = len;
  546|      0|    }
  547|       |
  548|   133k|    p += len;
  549|   133k|  }
  550|  17.2k|  return add_compile_string(prev, prev_len, blen, reg, ambig);
  551|  17.2k|}
regcomp.c:compile_cclass_node:
  612|  16.4k|{
  613|  16.4k|  int r;
  614|       |
  615|  16.4k|  if (IS_NULL(cc->mbuf)) {
  ------------------
  |  |  311|  16.4k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 16.4k, False: 0]
  |  |  ------------------
  ------------------
  616|  16.4k|    if (IS_NCCLASS_NOT(cc))
  ------------------
  |  |  809|  16.4k|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|  16.4k|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|  16.4k|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (802:37): [True: 4.52k, False: 11.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  617|  4.52k|      add_opcode(reg, OP_CCLASS_NOT);
  618|  11.9k|    else
  619|  11.9k|      add_opcode(reg, OP_CCLASS);
  620|       |
  621|  16.4k|    r = add_bitset(reg, cc->bs);
  622|  16.4k|  }
  623|      0|  else {
  624|      0|    if (ONIGENC_MBC_MINLEN(reg->enc) > 1 || bitset_is_empty(cc->bs)) {
  ------------------
  |  |  367|      0|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  ------------------
  |  Branch (624:9): [True: 0, False: 0]
  |  Branch (624:45): [True: 0, False: 0]
  ------------------
  625|      0|      if (IS_NCCLASS_NOT(cc))
  ------------------
  |  |  809|      0|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|      0|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|      0|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (802:37): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  626|      0|	add_opcode(reg, OP_CCLASS_MB_NOT);
  627|      0|      else
  628|      0|	add_opcode(reg, OP_CCLASS_MB);
  629|       |
  630|      0|      r = add_multi_byte_cclass(cc->mbuf, reg);
  631|      0|    }
  632|      0|    else {
  633|      0|      if (IS_NCCLASS_NOT(cc))
  ------------------
  |  |  809|      0|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|      0|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|      0|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (802:37): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  634|      0|	add_opcode(reg, OP_CCLASS_MIX_NOT);
  635|      0|      else
  636|      0|	add_opcode(reg, OP_CCLASS_MIX);
  637|       |
  638|      0|      r = add_bitset(reg, cc->bs);
  639|      0|      if (r) return r;
  ------------------
  |  Branch (639:11): [True: 0, False: 0]
  ------------------
  640|      0|      r = add_multi_byte_cclass(cc->mbuf, reg);
  641|      0|    }
  642|      0|  }
  643|       |
  644|  16.4k|  return r;
  645|  16.4k|}
regcomp.c:add_bitset:
  295|  16.4k|{
  296|  16.4k|  BBUF_ADD(reg, bs, SIZE_BITSET);
  ------------------
  |  |  504|  16.4k|#define BBUF_ADD(buf,bytes,n)       BBUF_WRITE((buf),(buf)->used,(bytes),(n))
  |  |  ------------------
  |  |  |  |  490|  16.4k|#define BBUF_WRITE(buf,pos,bytes,n) do{\
  |  |  |  |  491|  16.4k|  int used = (pos) + (int )(n);\
  |  |  |  |  492|  16.4k|  if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  470|  6.57k|#define BBUF_EXPAND(buf,low) do{\
  |  |  |  |  |  |  471|  6.57k|  UChar *tmp;\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   76|  6.57k|# define UChar OnigUChar
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  472|  8.22k|  do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (472:36): [True: 1.64k, False: 6.57k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  473|  6.57k|  tmp = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  143|  6.57k|# define xrealloc    realloc
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  474|  6.57k|  if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  311|  6.57k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (311:39): [True: 0, False: 6.57k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                 if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  475|  6.57k|  (buf)->p = tmp;\
  |  |  |  |  |  |  476|  6.57k|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (476:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (492:7): [True: 6.57k, False: 9.86k]
  |  |  |  |  ------------------
  |  |  |  |  493|  16.4k|  xmemcpy((buf)->p + (pos), (bytes), (n));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  16.4k|#define xmemcpy     memcpy
  |  |  |  |  ------------------
  |  |  |  |  494|  16.4k|  if ((buf)->used < (unsigned int )used) (buf)->used = used;\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:7): [True: 16.4k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  495|  16.4k|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (495:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|  16.4k|  return 0;
  298|  16.4k|}
regcomp.c:add_length:
  241|  7.39k|{
  242|  7.39k|  LengthType l = (LengthType )len;
  243|       |
  244|  7.39k|  BBUF_ADD(reg, &l, SIZE_LENGTH);
  ------------------
  |  |  504|  7.39k|#define BBUF_ADD(buf,bytes,n)       BBUF_WRITE((buf),(buf)->used,(bytes),(n))
  |  |  ------------------
  |  |  |  |  490|  7.39k|#define BBUF_WRITE(buf,pos,bytes,n) do{\
  |  |  |  |  491|  7.39k|  int used = (pos) + (int )(n);\
  |  |  |  |  492|  7.39k|  if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  470|      0|#define BBUF_EXPAND(buf,low) do{\
  |  |  |  |  |  |  471|      0|  UChar *tmp;\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   76|      0|# define UChar OnigUChar
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|  do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (472:36): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  473|      0|  tmp = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  143|      0|# define xrealloc    realloc
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  474|      0|  if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                 if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  475|      0|  (buf)->p = tmp;\
  |  |  |  |  |  |  476|      0|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (476:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (492:7): [True: 0, False: 7.39k]
  |  |  |  |  ------------------
  |  |  |  |  493|  7.39k|  xmemcpy((buf)->p + (pos), (bytes), (n));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  7.39k|#define xmemcpy     memcpy
  |  |  |  |  ------------------
  |  |  |  |  494|  7.39k|  if ((buf)->used < (unsigned int )used) (buf)->used = used;\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:7): [True: 7.39k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  495|  7.39k|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (495:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  245|  7.39k|  return 0;
  246|  7.39k|}
regcomp.c:add_mem_num:
  250|  4.11k|{
  251|  4.11k|  MemNumType n = (MemNumType )num;
  252|       |
  253|  4.11k|  BBUF_ADD(reg, &n, SIZE_MEMNUM);
  ------------------
  |  |  504|  4.11k|#define BBUF_ADD(buf,bytes,n)       BBUF_WRITE((buf),(buf)->used,(bytes),(n))
  |  |  ------------------
  |  |  |  |  490|  4.11k|#define BBUF_WRITE(buf,pos,bytes,n) do{\
  |  |  |  |  491|  4.11k|  int used = (pos) + (int )(n);\
  |  |  |  |  492|  4.11k|  if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  470|      0|#define BBUF_EXPAND(buf,low) do{\
  |  |  |  |  |  |  471|      0|  UChar *tmp;\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   76|      0|# define UChar OnigUChar
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|  do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (472:36): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  473|      0|  tmp = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  143|      0|# define xrealloc    realloc
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  474|      0|  if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                 if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  475|      0|  (buf)->p = tmp;\
  |  |  |  |  |  |  476|      0|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (476:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (492:7): [True: 0, False: 4.11k]
  |  |  |  |  ------------------
  |  |  |  |  493|  4.11k|  xmemcpy((buf)->p + (pos), (bytes), (n));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  4.11k|#define xmemcpy     memcpy
  |  |  |  |  ------------------
  |  |  |  |  494|  4.11k|  if ((buf)->used < (unsigned int )used) (buf)->used = used;\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:7): [True: 4.11k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  495|  4.11k|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (495:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|  4.11k|  return 0;
  255|  4.11k|}
regcomp.c:compile_quantifier_node:
 1033|  6.98k|{
 1034|  6.98k|  int i, r, mod_tlen;
 1035|  6.98k|  int infinite = IS_REPEAT_INFINITE(qn->upper);
  ------------------
  |  |  422|  6.98k|#define IS_REPEAT_INFINITE(n)   ((n) == REPEAT_INFINITE)
  |  |  ------------------
  |  |  |  |  421|  6.98k|#define REPEAT_INFINITE         -1
  |  |  ------------------
  ------------------
 1036|  6.98k|  int empty_info = qn->target_empty_info;
 1037|  6.98k|  int tlen = compile_length_tree(qn->target, reg);
 1038|       |
 1039|  6.98k|  if (tlen < 0) return tlen;
  ------------------
  |  Branch (1039:7): [True: 0, False: 6.98k]
  ------------------
 1040|       |
 1041|  6.98k|  if (is_anychar_star_quantifier(qn)) {
  ------------------
  |  Branch (1041:7): [True: 2.05k, False: 4.93k]
  ------------------
 1042|  2.05k|    r = compile_tree_n_times(qn->target, qn->lower, reg);
 1043|  2.05k|    if (r) return r;
  ------------------
  |  Branch (1043:9): [True: 0, False: 2.05k]
  ------------------
 1044|  2.05k|    if (IS_NOT_NULL(qn->next_head_exact)) {
  ------------------
  |  |  312|  2.05k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 822, False: 1.23k]
  |  |  ------------------
  ------------------
 1045|    822|      if (IS_MULTILINE(reg->options))
  ------------------
  |  |  395|    822|#define IS_MULTILINE(option)      ((option) & ONIG_OPTION_MULTILINE)
  |  |  ------------------
  |  |  |  |  456|    822|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  455|    822|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  454|    822|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (395:35): [True: 0, False: 822]
  |  |  ------------------
  ------------------
 1046|      0|	r = add_opcode(reg, OP_ANYCHAR_ML_STAR_PEEK_NEXT);
 1047|    822|      else
 1048|    822|	r = add_opcode(reg, OP_ANYCHAR_STAR_PEEK_NEXT);
 1049|    822|      if (r) return r;
  ------------------
  |  Branch (1049:11): [True: 0, False: 822]
  ------------------
 1050|    822|      return add_bytes(reg, NSTR(qn->next_head_exact)->s, 1);
  ------------------
  |  |   76|    822|#define NSTR(node)         (&((node)->u.str))
  ------------------
 1051|    822|    }
 1052|  1.23k|    else {
 1053|  1.23k|      if (IS_MULTILINE(reg->options))
  ------------------
  |  |  395|  1.23k|#define IS_MULTILINE(option)      ((option) & ONIG_OPTION_MULTILINE)
  |  |  ------------------
  |  |  |  |  456|  1.23k|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  455|  1.23k|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  454|  1.23k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (395:35): [True: 0, False: 1.23k]
  |  |  ------------------
  ------------------
 1054|      0|	return add_opcode(reg, OP_ANYCHAR_ML_STAR);
 1055|  1.23k|      else
 1056|  1.23k|	return add_opcode(reg, OP_ANYCHAR_STAR);
 1057|  1.23k|    }
 1058|  2.05k|  }
 1059|       |
 1060|  4.93k|  if (empty_info != 0)
  ------------------
  |  Branch (1060:7): [True: 0, False: 4.93k]
  ------------------
 1061|      0|    mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);
  ------------------
  |  |  742|      0|#define SIZE_OP_NULL_CHECK_START       (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_NULL_CHECK_START       (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
                  mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);
  ------------------
  |  |  743|      0|#define SIZE_OP_NULL_CHECK_END         (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_NULL_CHECK_END         (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
 1062|  4.93k|  else
 1063|  4.93k|    mod_tlen = tlen;
 1064|       |
 1065|  4.93k|  if (infinite &&
  ------------------
  |  Branch (1065:7): [True: 4.52k, False: 411]
  ------------------
 1066|  4.93k|      (qn->lower <= 1 || tlen * qn->lower <= QUANTIFIER_EXPAND_LIMIT_SIZE)) {
  ------------------
  |  |  724|      0|#define QUANTIFIER_EXPAND_LIMIT_SIZE   50
  ------------------
  |  Branch (1066:8): [True: 4.52k, False: 0]
  |  Branch (1066:26): [True: 0, False: 0]
  ------------------
 1067|  4.52k|    if (qn->lower == 1 && tlen > QUANTIFIER_EXPAND_LIMIT_SIZE) {
  ------------------
  |  |  724|  2.05k|#define QUANTIFIER_EXPAND_LIMIT_SIZE   50
  ------------------
  |  Branch (1067:9): [True: 2.05k, False: 2.46k]
  |  Branch (1067:27): [True: 0, False: 2.05k]
  ------------------
 1068|      0|      if (qn->greedy) {
  ------------------
  |  Branch (1068:11): [True: 0, False: 0]
  ------------------
 1069|       |#ifdef USE_OP_PUSH_OR_JUMP_EXACT
 1070|       |	if (IS_NOT_NULL(qn->head_exact))
 1071|       |	  r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_OR_JUMP_EXACT1);
 1072|       |	else
 1073|       |#endif
 1074|      0|	if (IS_NOT_NULL(qn->next_head_exact))
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1075|      0|	  r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_IF_PEEK_NEXT);
  ------------------
  |  |  724|      0|#define SIZE_OP_PUSH_IF_PEEK_NEXT      (SIZE_OPCODE + SIZE_RELADDR + 1)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH_IF_PEEK_NEXT      (SIZE_OPCODE + SIZE_RELADDR + 1)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1076|      0|	else
 1077|      0|	  r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH);
  ------------------
  |  |  721|      0|#define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1078|      0|      }
 1079|      0|      else {
 1080|      0|	r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_JUMP);
  ------------------
  |  |  720|      0|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1081|      0|      }
 1082|      0|      if (r) return r;
  ------------------
  |  Branch (1082:11): [True: 0, False: 0]
  ------------------
 1083|      0|    }
 1084|  4.52k|    else {
 1085|  4.52k|      r = compile_tree_n_times(qn->target, qn->lower, reg);
 1086|  4.52k|      if (r) return r;
  ------------------
  |  Branch (1086:11): [True: 0, False: 4.52k]
  ------------------
 1087|  4.52k|    }
 1088|       |
 1089|  4.52k|    if (qn->greedy) {
  ------------------
  |  Branch (1089:9): [True: 4.11k, False: 411]
  ------------------
 1090|       |#ifdef USE_OP_PUSH_OR_JUMP_EXACT
 1091|       |      if (IS_NOT_NULL(qn->head_exact)) {
 1092|       |	r = add_opcode_rel_addr(reg, OP_PUSH_OR_JUMP_EXACT1,
 1093|       |			     mod_tlen + SIZE_OP_JUMP);
 1094|       |	if (r) return r;
 1095|       |	add_bytes(reg, NSTR(qn->head_exact)->s, 1);
 1096|       |	r = compile_tree_empty_check(qn->target, reg, empty_info);
 1097|       |	if (r) return r;
 1098|       |	r = add_opcode_rel_addr(reg, OP_JUMP,
 1099|       |	-(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_OR_JUMP_EXACT1));
 1100|       |      }
 1101|       |      else
 1102|       |#endif
 1103|  4.11k|      if (IS_NOT_NULL(qn->next_head_exact)) {
  ------------------
  |  |  312|  4.11k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 4.11k]
  |  |  ------------------
  ------------------
 1104|      0|	r = add_opcode_rel_addr(reg, OP_PUSH_IF_PEEK_NEXT,
 1105|      0|				mod_tlen + SIZE_OP_JUMP);
  ------------------
  |  |  720|      0|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1106|      0|	if (r) return r;
  ------------------
  |  Branch (1106:6): [True: 0, False: 0]
  ------------------
 1107|      0|	add_bytes(reg, NSTR(qn->next_head_exact)->s, 1);
  ------------------
  |  |   76|      0|#define NSTR(node)         (&((node)->u.str))
  ------------------
 1108|      0|	r = compile_tree_empty_check(qn->target, reg, empty_info);
 1109|      0|	if (r) return r;
  ------------------
  |  Branch (1109:6): [True: 0, False: 0]
  ------------------
 1110|      0|	r = add_opcode_rel_addr(reg, OP_JUMP,
 1111|      0|          -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_IF_PEEK_NEXT));
  ------------------
  |  |  720|      0|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
                        -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_IF_PEEK_NEXT));
  ------------------
  |  |  724|      0|#define SIZE_OP_PUSH_IF_PEEK_NEXT      (SIZE_OPCODE + SIZE_RELADDR + 1)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH_IF_PEEK_NEXT      (SIZE_OPCODE + SIZE_RELADDR + 1)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1112|      0|      }
 1113|  4.11k|      else {
 1114|  4.11k|	r = add_opcode_rel_addr(reg, OP_PUSH, mod_tlen + SIZE_OP_JUMP);
  ------------------
  |  |  720|  4.11k|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|  4.11k|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|  4.11k|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1115|  4.11k|	if (r) return r;
  ------------------
  |  Branch (1115:6): [True: 0, False: 4.11k]
  ------------------
 1116|  4.11k|	r = compile_tree_empty_check(qn->target, reg, empty_info);
 1117|  4.11k|	if (r) return r;
  ------------------
  |  Branch (1117:6): [True: 0, False: 4.11k]
  ------------------
 1118|  4.11k|	r = add_opcode_rel_addr(reg, OP_JUMP,
 1119|  4.11k|		     -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH));
  ------------------
  |  |  720|  4.11k|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|  4.11k|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|  4.11k|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
              		     -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH));
  ------------------
  |  |  721|  4.11k|#define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|  4.11k|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|  4.11k|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1120|  4.11k|      }
 1121|  4.11k|    }
 1122|    411|    else {
 1123|    411|      r = add_opcode_rel_addr(reg, OP_JUMP, mod_tlen);
 1124|    411|      if (r) return r;
  ------------------
  |  Branch (1124:11): [True: 0, False: 411]
  ------------------
 1125|    411|      r = compile_tree_empty_check(qn->target, reg, empty_info);
 1126|    411|      if (r) return r;
  ------------------
  |  Branch (1126:11): [True: 0, False: 411]
  ------------------
 1127|    411|      r = add_opcode_rel_addr(reg, OP_PUSH, -(mod_tlen + (int )SIZE_OP_PUSH));
  ------------------
  |  |  721|    411|#define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|    411|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|    411|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1128|    411|    }
 1129|  4.52k|  }
 1130|    411|  else if (qn->upper == 0 && qn->is_referred != 0) { /* /(?<n>..){0}/ */
  ------------------
  |  Branch (1130:12): [True: 0, False: 411]
  |  Branch (1130:30): [True: 0, False: 0]
  ------------------
 1131|      0|    r = add_opcode_rel_addr(reg, OP_JUMP, tlen);
 1132|      0|    if (r) return r;
  ------------------
  |  Branch (1132:9): [True: 0, False: 0]
  ------------------
 1133|      0|    r = compile_tree(qn->target, reg);
 1134|      0|  }
 1135|    411|  else if (!infinite && qn->greedy &&
  ------------------
  |  Branch (1135:12): [True: 411, False: 0]
  |  Branch (1135:25): [True: 411, False: 0]
  ------------------
 1136|    411|           (qn->upper == 1 || (tlen + SIZE_OP_PUSH) * qn->upper
  ------------------
  |  |  721|      0|#define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
  |  Branch (1136:13): [True: 411, False: 0]
  |  Branch (1136:31): [True: 0, False: 0]
  ------------------
 1137|    411|                                  <= QUANTIFIER_EXPAND_LIMIT_SIZE)) {
  ------------------
  |  |  724|      0|#define QUANTIFIER_EXPAND_LIMIT_SIZE   50
  ------------------
 1138|    411|    int n = qn->upper - qn->lower;
 1139|       |
 1140|    411|    r = compile_tree_n_times(qn->target, qn->lower, reg);
 1141|    411|    if (r) return r;
  ------------------
  |  Branch (1141:9): [True: 0, False: 411]
  ------------------
 1142|       |
 1143|    822|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (1143:17): [True: 411, False: 411]
  ------------------
 1144|    411|      r = add_opcode_rel_addr(reg, OP_PUSH,
 1145|    411|			   (n - i) * tlen + (n - i - 1) * SIZE_OP_PUSH);
  ------------------
  |  |  721|    411|#define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|    411|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|    411|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1146|    411|      if (r) return r;
  ------------------
  |  Branch (1146:11): [True: 0, False: 411]
  ------------------
 1147|    411|      r = compile_tree(qn->target, reg);
 1148|    411|      if (r) return r;
  ------------------
  |  Branch (1148:11): [True: 0, False: 411]
  ------------------
 1149|    411|    }
 1150|    411|  }
 1151|      0|  else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */
  ------------------
  |  Branch (1151:12): [True: 0, False: 0]
  |  Branch (1151:27): [True: 0, False: 0]
  |  Branch (1151:45): [True: 0, False: 0]
  ------------------
 1152|      0|    r = add_opcode_rel_addr(reg, OP_PUSH, SIZE_OP_JUMP);
  ------------------
  |  |  720|      0|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1153|      0|    if (r) return r;
  ------------------
  |  Branch (1153:9): [True: 0, False: 0]
  ------------------
 1154|      0|    r = add_opcode_rel_addr(reg, OP_JUMP, tlen);
 1155|      0|    if (r) return r;
  ------------------
  |  Branch (1155:9): [True: 0, False: 0]
  ------------------
 1156|      0|    r = compile_tree(qn->target, reg);
 1157|      0|  }
 1158|      0|  else {
 1159|      0|    r = compile_range_repeat_node(qn, mod_tlen, empty_info, reg);
 1160|      0|  }
 1161|  4.93k|  return r;
 1162|  4.93k|}
regcomp.c:is_anychar_star_quantifier:
  716|  6.98k|{
  717|  6.98k|  if (qn->greedy && IS_REPEAT_INFINITE(qn->upper) &&
  ------------------
  |  |  422|  13.5k|#define IS_REPEAT_INFINITE(n)   ((n) == REPEAT_INFINITE)
  |  |  ------------------
  |  |  |  |  421|  6.57k|#define REPEAT_INFINITE         -1
  |  |  ------------------
  |  |  |  Branch (422:33): [True: 6.16k, False: 411]
  |  |  ------------------
  ------------------
  |  Branch (717:7): [True: 6.57k, False: 411]
  ------------------
  718|  6.98k|      NTYPE(qn->target) == NT_CANY)
  ------------------
  |  |   69|  6.16k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
                    NTYPE(qn->target) == NT_CANY)
  ------------------
  |  |   41|  6.16k|#define NT_CANY        3
  ------------------
  |  Branch (718:7): [True: 2.05k, False: 4.11k]
  ------------------
  719|  2.05k|    return 1;
  720|  4.93k|  else
  721|  4.93k|    return 0;
  722|  6.98k|}
regcomp.c:compile_tree_n_times:
  414|  12.3k|{
  415|  12.3k|  int i, r;
  416|       |
  417|  19.7k|  for (i = 0; i < n; i++) {
  ------------------
  |  Branch (417:15): [True: 7.39k, False: 12.3k]
  ------------------
  418|  7.39k|    r = compile_tree(node, reg);
  419|  7.39k|    if (r) return r;
  ------------------
  |  Branch (419:9): [True: 0, False: 7.39k]
  ------------------
  420|  7.39k|  }
  421|  12.3k|  return 0;
  422|  12.3k|}
regcomp.c:compile_tree_empty_check:
  367|  4.52k|{
  368|  4.52k|  int r;
  369|  4.52k|  int saved_num_null_check = reg->num_null_check;
  370|       |
  371|  4.52k|  if (empty_info != 0) {
  ------------------
  |  Branch (371:7): [True: 0, False: 4.52k]
  ------------------
  372|      0|    r = add_opcode(reg, OP_NULL_CHECK_START);
  373|      0|    if (r) return r;
  ------------------
  |  Branch (373:9): [True: 0, False: 0]
  ------------------
  374|      0|    r = add_mem_num(reg, reg->num_null_check); /* NULL CHECK ID */
  375|      0|    if (r) return r;
  ------------------
  |  Branch (375:9): [True: 0, False: 0]
  ------------------
  376|      0|    reg->num_null_check++;
  377|      0|  }
  378|       |
  379|  4.52k|  r = compile_tree(node, reg);
  380|  4.52k|  if (r) return r;
  ------------------
  |  Branch (380:7): [True: 0, False: 4.52k]
  ------------------
  381|       |
  382|  4.52k|  if (empty_info != 0) {
  ------------------
  |  Branch (382:7): [True: 0, False: 4.52k]
  ------------------
  383|      0|    if (empty_info == NQ_TARGET_IS_EMPTY)
  ------------------
  |  |  123|      0|#define NQ_TARGET_IS_EMPTY        1
  ------------------
  |  Branch (383:9): [True: 0, False: 0]
  ------------------
  384|      0|      r = add_opcode(reg, OP_NULL_CHECK_END);
  385|      0|    else if (empty_info == NQ_TARGET_IS_EMPTY_MEM)
  ------------------
  |  |  124|      0|#define NQ_TARGET_IS_EMPTY_MEM    2
  ------------------
  |  Branch (385:14): [True: 0, False: 0]
  ------------------
  386|      0|      r = add_opcode(reg, OP_NULL_CHECK_END_MEMST);
  387|      0|    else if (empty_info == NQ_TARGET_IS_EMPTY_REC)
  ------------------
  |  |  125|      0|#define NQ_TARGET_IS_EMPTY_REC    3
  ------------------
  |  Branch (387:14): [True: 0, False: 0]
  ------------------
  388|      0|      r = add_opcode(reg, OP_NULL_CHECK_END_MEMST_PUSH);
  389|       |
  390|      0|    if (r) return r;
  ------------------
  |  Branch (390:9): [True: 0, False: 0]
  ------------------
  391|      0|    r = add_mem_num(reg, saved_num_null_check); /* NULL CHECK ID */
  392|      0|  }
  393|  4.52k|  return r;
  394|  4.52k|}
regcomp.c:compile_enclose_node:
 1308|  7.80k|{
 1309|  7.80k|  int r, len;
 1310|       |
 1311|  7.80k|  if (node->type == ENCLOSE_OPTION)
  ------------------
  |  |   95|  7.80k|#define ENCLOSE_OPTION           (1<<1)
  ------------------
  |  Branch (1311:7): [True: 411, False: 7.39k]
  ------------------
 1312|    411|    return compile_option_node(node, reg);
 1313|       |
 1314|  7.39k|  switch (node->type) {
 1315|  2.05k|  case ENCLOSE_MEMORY:
  ------------------
  |  |   94|  2.05k|#define ENCLOSE_MEMORY           (1<<0)
  ------------------
  |  Branch (1315:3): [True: 2.05k, False: 5.34k]
  ------------------
 1316|  2.05k|#ifdef USE_SUBEXP_CALL
 1317|  2.05k|    if (IS_ENCLOSE_CALLED(node)) {
  ------------------
  |  |  147|  2.05k|#define IS_ENCLOSE_CALLED(en)          (((en)->state & NST_CALLED)        != 0)
  |  |  ------------------
  |  |  |  |  136|  2.05k|#define NST_CALLED                (1<<8)
  |  |  ------------------
  |  |  |  Branch (147:40): [True: 0, False: 2.05k]
  |  |  ------------------
  ------------------
 1318|      0|      r = add_opcode(reg, OP_CALL);
 1319|      0|      if (r) return r;
  ------------------
  |  Branch (1319:11): [True: 0, False: 0]
  ------------------
 1320|      0|      node->call_addr = BBUF_GET_OFFSET_POS(reg) + SIZE_ABSADDR + SIZE_OP_JUMP;
  ------------------
  |  |  507|      0|#define BBUF_GET_OFFSET_POS(buf)    ((buf)->used)
  ------------------
                    node->call_addr = BBUF_GET_OFFSET_POS(reg) + SIZE_ABSADDR + SIZE_OP_JUMP;
  ------------------
  |  |  690|      0|#define SIZE_ABSADDR          (int )sizeof(AbsAddrType)
  ------------------
                    node->call_addr = BBUF_GET_OFFSET_POS(reg) + SIZE_ABSADDR + SIZE_OP_JUMP;
  ------------------
  |  |  720|      0|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1321|      0|      node->state |= NST_ADDR_FIXED;
  ------------------
  |  |  137|      0|#define NST_ADDR_FIXED            (1<<9)
  ------------------
 1322|      0|      r = add_abs_addr(reg, (int )node->call_addr);
 1323|      0|      if (r) return r;
  ------------------
  |  Branch (1323:11): [True: 0, False: 0]
  ------------------
 1324|      0|      len = compile_length_tree(node->target, reg);
 1325|      0|      len += (SIZE_OP_MEMORY_START_PUSH + SIZE_OP_RETURN);
  ------------------
  |  |  735|      0|#define SIZE_OP_MEMORY_START_PUSH      (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_MEMORY_START_PUSH      (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
                    len += (SIZE_OP_MEMORY_START_PUSH + SIZE_OP_RETURN);
  ------------------
  |  |  748|      0|#define SIZE_OP_RETURN                  SIZE_OPCODE
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
 1326|      0|      if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))
  ------------------
  |  |  371|      0|  ((n) < (int )BIT_STATUS_BITS_NUM  ?  ((stats) & ((BitStatusType )1 << n)) : ((stats) & 1))
  |  |  ------------------
  |  |  |  |  367|      0|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  |  |  ------------------
  |  |  |  Branch (371:3): [True: 0, False: 0]
  |  |  |  Branch (371:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1327|      0|	len += (IS_ENCLOSE_RECURSION(node)
  ------------------
  |  |  149|      0|#define IS_ENCLOSE_RECURSION(en)       (((en)->state & NST_RECURSION)     != 0)
  |  |  ------------------
  |  |  |  |  135|      0|#define NST_RECURSION             (1<<7)
  |  |  ------------------
  |  |  |  Branch (149:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1328|      0|		? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);
  ------------------
  |  |  737|      0|#define SIZE_OP_MEMORY_END_PUSH_REC    (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_MEMORY_END_PUSH_REC    (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
              		? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);
  ------------------
  |  |  736|      0|#define SIZE_OP_MEMORY_END_PUSH        (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_MEMORY_END_PUSH        (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
 1329|      0|      else
 1330|      0|	len += (IS_ENCLOSE_RECURSION(node)
  ------------------
  |  |  149|      0|#define IS_ENCLOSE_RECURSION(en)       (((en)->state & NST_RECURSION)     != 0)
  |  |  ------------------
  |  |  |  |  135|      0|#define NST_RECURSION             (1<<7)
  |  |  ------------------
  |  |  |  Branch (149:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1331|      0|		? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);
  ------------------
  |  |  739|      0|#define SIZE_OP_MEMORY_END_REC         (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_MEMORY_END_REC         (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
              		? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);
  ------------------
  |  |  738|      0|#define SIZE_OP_MEMORY_END             (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_MEMORY_END             (SIZE_OPCODE + SIZE_MEMNUM)
  |  |  ------------------
  |  |  |  |  692|      0|#define SIZE_MEMNUM           (int )sizeof(MemNumType)
  |  |  ------------------
  ------------------
 1332|       |
 1333|      0|      r = add_opcode_rel_addr(reg, OP_JUMP, len);
 1334|      0|      if (r) return r;
  ------------------
  |  Branch (1334:11): [True: 0, False: 0]
  ------------------
 1335|      0|    }
 1336|  2.05k|#endif
 1337|  2.05k|    if (BIT_STATUS_AT(reg->bt_mem_start, node->regnum))
  ------------------
  |  |  371|  2.05k|  ((n) < (int )BIT_STATUS_BITS_NUM  ?  ((stats) & ((BitStatusType )1 << n)) : ((stats) & 1))
  |  |  ------------------
  |  |  |  |  367|  2.05k|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  |  |  ------------------
  |  |  |  Branch (371:3): [True: 0, False: 2.05k]
  |  |  |  Branch (371:4): [True: 2.05k, False: 0]
  |  |  ------------------
  ------------------
 1338|      0|      r = add_opcode(reg, OP_MEMORY_START_PUSH);
 1339|  2.05k|    else
 1340|  2.05k|      r = add_opcode(reg, OP_MEMORY_START);
 1341|  2.05k|    if (r) return r;
  ------------------
  |  Branch (1341:9): [True: 0, False: 2.05k]
  ------------------
 1342|  2.05k|    r = add_mem_num(reg, node->regnum);
 1343|  2.05k|    if (r) return r;
  ------------------
  |  Branch (1343:9): [True: 0, False: 2.05k]
  ------------------
 1344|  2.05k|    r = compile_tree(node->target, reg);
 1345|  2.05k|    if (r) return r;
  ------------------
  |  Branch (1345:9): [True: 0, False: 2.05k]
  ------------------
 1346|  2.05k|#ifdef USE_SUBEXP_CALL
 1347|  2.05k|    if (IS_ENCLOSE_CALLED(node)) {
  ------------------
  |  |  147|  2.05k|#define IS_ENCLOSE_CALLED(en)          (((en)->state & NST_CALLED)        != 0)
  |  |  ------------------
  |  |  |  |  136|  2.05k|#define NST_CALLED                (1<<8)
  |  |  ------------------
  |  |  |  Branch (147:40): [True: 0, False: 2.05k]
  |  |  ------------------
  ------------------
 1348|      0|      if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))
  ------------------
  |  |  371|      0|  ((n) < (int )BIT_STATUS_BITS_NUM  ?  ((stats) & ((BitStatusType )1 << n)) : ((stats) & 1))
  |  |  ------------------
  |  |  |  |  367|      0|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  |  |  ------------------
  |  |  |  Branch (371:3): [True: 0, False: 0]
  |  |  |  Branch (371:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1349|      0|	r = add_opcode(reg, (IS_ENCLOSE_RECURSION(node)
  ------------------
  |  |  149|      0|#define IS_ENCLOSE_RECURSION(en)       (((en)->state & NST_RECURSION)     != 0)
  |  |  ------------------
  |  |  |  |  135|      0|#define NST_RECURSION             (1<<7)
  |  |  ------------------
  |  |  |  Branch (149:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1350|      0|			     ? OP_MEMORY_END_PUSH_REC : OP_MEMORY_END_PUSH));
 1351|      0|      else
 1352|      0|	r = add_opcode(reg, (IS_ENCLOSE_RECURSION(node)
  ------------------
  |  |  149|      0|#define IS_ENCLOSE_RECURSION(en)       (((en)->state & NST_RECURSION)     != 0)
  |  |  ------------------
  |  |  |  |  135|      0|#define NST_RECURSION             (1<<7)
  |  |  ------------------
  |  |  |  Branch (149:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1353|      0|			     ? OP_MEMORY_END_REC : OP_MEMORY_END));
 1354|       |
 1355|      0|      if (r) return r;
  ------------------
  |  Branch (1355:11): [True: 0, False: 0]
  ------------------
 1356|      0|      r = add_mem_num(reg, node->regnum);
 1357|      0|      if (r) return r;
  ------------------
  |  Branch (1357:11): [True: 0, False: 0]
  ------------------
 1358|      0|      r = add_opcode(reg, OP_RETURN);
 1359|      0|    }
 1360|  2.05k|    else if (IS_ENCLOSE_RECURSION(node)) {
  ------------------
  |  |  149|  2.05k|#define IS_ENCLOSE_RECURSION(en)       (((en)->state & NST_RECURSION)     != 0)
  |  |  ------------------
  |  |  |  |  135|  2.05k|#define NST_RECURSION             (1<<7)
  |  |  ------------------
  |  |  |  Branch (149:40): [True: 0, False: 2.05k]
  |  |  ------------------
  ------------------
 1361|      0|      if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))
  ------------------
  |  |  371|      0|  ((n) < (int )BIT_STATUS_BITS_NUM  ?  ((stats) & ((BitStatusType )1 << n)) : ((stats) & 1))
  |  |  ------------------
  |  |  |  |  367|      0|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  |  |  ------------------
  |  |  |  Branch (371:3): [True: 0, False: 0]
  |  |  |  Branch (371:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1362|      0|	r = add_opcode(reg, OP_MEMORY_END_PUSH_REC);
 1363|      0|      else
 1364|      0|	r = add_opcode(reg, OP_MEMORY_END_REC);
 1365|      0|      if (r) return r;
  ------------------
  |  Branch (1365:11): [True: 0, False: 0]
  ------------------
 1366|      0|      r = add_mem_num(reg, node->regnum);
 1367|      0|    }
 1368|  2.05k|    else
 1369|  2.05k|#endif
 1370|  2.05k|    {
 1371|  2.05k|      if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))
  ------------------
  |  |  371|  2.05k|  ((n) < (int )BIT_STATUS_BITS_NUM  ?  ((stats) & ((BitStatusType )1 << n)) : ((stats) & 1))
  |  |  ------------------
  |  |  |  |  367|  2.05k|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  |  |  ------------------
  |  |  |  Branch (371:3): [True: 0, False: 2.05k]
  |  |  |  Branch (371:4): [True: 2.05k, False: 0]
  |  |  ------------------
  ------------------
 1372|      0|	r = add_opcode(reg, OP_MEMORY_END_PUSH);
 1373|  2.05k|      else
 1374|  2.05k|	r = add_opcode(reg, OP_MEMORY_END);
 1375|  2.05k|      if (r) return r;
  ------------------
  |  Branch (1375:11): [True: 0, False: 2.05k]
  ------------------
 1376|  2.05k|      r = add_mem_num(reg, node->regnum);
 1377|  2.05k|    }
 1378|  2.05k|    break;
 1379|       |
 1380|  5.34k|  case ENCLOSE_STOP_BACKTRACK:
  ------------------
  |  |   96|  5.34k|#define ENCLOSE_STOP_BACKTRACK   (1<<2)
  ------------------
  |  Branch (1380:3): [True: 5.34k, False: 2.05k]
  ------------------
 1381|  5.34k|    if (IS_ENCLOSE_STOP_BT_SIMPLE_REPEAT(node)) {
  ------------------
  |  |  156|  5.34k|    (((en)->state & NST_STOP_BT_SIMPLE_REPEAT) != 0)
  |  |  ------------------
  |  |  |  |  134|  5.34k|#define NST_STOP_BT_SIMPLE_REPEAT (1<<6)
  |  |  ------------------
  |  |  |  Branch (156:5): [True: 5.34k, False: 0]
  |  |  ------------------
  ------------------
 1382|  5.34k|      QtfrNode* qn = NQTFR(node->target);
  ------------------
  |  |   80|  5.34k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 1383|  5.34k|      r = compile_tree_n_times(qn->target, qn->lower, reg);
 1384|  5.34k|      if (r) return r;
  ------------------
  |  Branch (1384:11): [True: 0, False: 5.34k]
  ------------------
 1385|       |
 1386|  5.34k|      len = compile_length_tree(qn->target, reg);
 1387|  5.34k|      if (len < 0) return len;
  ------------------
  |  Branch (1387:11): [True: 0, False: 5.34k]
  ------------------
 1388|       |
 1389|  5.34k|      r = add_opcode_rel_addr(reg, OP_PUSH, len + SIZE_OP_POP + SIZE_OP_JUMP);
  ------------------
  |  |  722|  5.34k|#define SIZE_OP_POP                     SIZE_OPCODE
  |  |  ------------------
  |  |  |  |  688|  5.34k|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
                    r = add_opcode_rel_addr(reg, OP_PUSH, len + SIZE_OP_POP + SIZE_OP_JUMP);
  ------------------
  |  |  720|  5.34k|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|  5.34k|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|  5.34k|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1390|  5.34k|      if (r) return r;
  ------------------
  |  Branch (1390:11): [True: 0, False: 5.34k]
  ------------------
 1391|  5.34k|      r = compile_tree(qn->target, reg);
 1392|  5.34k|      if (r) return r;
  ------------------
  |  Branch (1392:11): [True: 0, False: 5.34k]
  ------------------
 1393|  5.34k|      r = add_opcode(reg, OP_POP);
 1394|  5.34k|      if (r) return r;
  ------------------
  |  Branch (1394:11): [True: 0, False: 5.34k]
  ------------------
 1395|  5.34k|      r = add_opcode_rel_addr(reg, OP_JUMP,
 1396|  5.34k|	 -((int )SIZE_OP_PUSH + len + (int )SIZE_OP_POP + (int )SIZE_OP_JUMP));
  ------------------
  |  |  721|  5.34k|#define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|  5.34k|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|  5.34k|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
              	 -((int )SIZE_OP_PUSH + len + (int )SIZE_OP_POP + (int )SIZE_OP_JUMP));
  ------------------
  |  |  722|  5.34k|#define SIZE_OP_POP                     SIZE_OPCODE
  |  |  ------------------
  |  |  |  |  688|  5.34k|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
              	 -((int )SIZE_OP_PUSH + len + (int )SIZE_OP_POP + (int )SIZE_OP_JUMP));
  ------------------
  |  |  720|  5.34k|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|  5.34k|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|  5.34k|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1397|  5.34k|    }
 1398|      0|    else {
 1399|      0|      r = add_opcode(reg, OP_PUSH_STOP_BT);
 1400|      0|      if (r) return r;
  ------------------
  |  Branch (1400:11): [True: 0, False: 0]
  ------------------
 1401|      0|      r = compile_tree(node->target, reg);
 1402|      0|      if (r) return r;
  ------------------
  |  Branch (1402:11): [True: 0, False: 0]
  ------------------
 1403|      0|      r = add_opcode(reg, OP_POP_STOP_BT);
 1404|      0|    }
 1405|  5.34k|    break;
 1406|       |
 1407|  5.34k|  case ENCLOSE_CONDITION:
  ------------------
  |  |   97|      0|#define ENCLOSE_CONDITION        (1<<3)
  ------------------
  |  Branch (1407:3): [True: 0, False: 7.39k]
  ------------------
 1408|      0|    r = add_opcode(reg, OP_CONDITION);
 1409|      0|    if (r) return r;
  ------------------
  |  Branch (1409:9): [True: 0, False: 0]
  ------------------
 1410|      0|    r = add_mem_num(reg, node->regnum);
 1411|      0|    if (r) return r;
  ------------------
  |  Branch (1411:9): [True: 0, False: 0]
  ------------------
 1412|       |
 1413|      0|    if (NTYPE(node->target) == NT_ALT) {
  ------------------
  |  |   69|      0|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
                  if (NTYPE(node->target) == NT_ALT) {
  ------------------
  |  |   47|      0|#define NT_ALT         9
  ------------------
  |  Branch (1413:9): [True: 0, False: 0]
  ------------------
 1414|      0|      Node* x = node->target;
 1415|      0|      int len2;
 1416|       |
 1417|      0|      len = compile_length_tree(NCAR(x), reg);  /* yes-node */
  ------------------
  |  |   86|      0|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1418|      0|      if (len < 0) return len;
  ------------------
  |  Branch (1418:11): [True: 0, False: 0]
  ------------------
 1419|      0|      if (NCDR(x) == NULL) return ONIGERR_PARSER_BUG;
  ------------------
  |  |   87|      0|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
                    if (NCDR(x) == NULL) return ONIGERR_PARSER_BUG;
  ------------------
  |  |  634|      0|#define ONIGERR_PARSER_BUG                                    -11
  ------------------
  |  Branch (1419:11): [True: 0, False: 0]
  ------------------
 1420|      0|      x = NCDR(x);
  ------------------
  |  |   87|      0|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1421|      0|      len2 = compile_length_tree(NCAR(x), reg); /* no-node */
  ------------------
  |  |   86|      0|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1422|      0|      if (len2 < 0) return len2;
  ------------------
  |  Branch (1422:11): [True: 0, False: 0]
  ------------------
 1423|      0|      if (NCDR(x) != NULL) return ONIGERR_INVALID_CONDITION_PATTERN;
  ------------------
  |  |   87|      0|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
                    if (NCDR(x) != NULL) return ONIGERR_INVALID_CONDITION_PATTERN;
  ------------------
  |  |  667|      0|#define ONIGERR_INVALID_CONDITION_PATTERN                    -124
  ------------------
  |  Branch (1423:11): [True: 0, False: 0]
  ------------------
 1424|       |
 1425|      0|      x = node->target;
 1426|      0|      r = add_rel_addr(reg, len + SIZE_OP_JUMP);
  ------------------
  |  |  720|      0|#define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  |  |               #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
  |  |  ------------------
  |  |  |  |  689|      0|#define SIZE_RELADDR          (int )sizeof(RelAddrType)
  |  |  ------------------
  ------------------
 1427|      0|      if (r) return r;
  ------------------
  |  Branch (1427:11): [True: 0, False: 0]
  ------------------
 1428|      0|      r = compile_tree(NCAR(x), reg);   /* yes-node */
  ------------------
  |  |   86|      0|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1429|      0|      if (r) return r;
  ------------------
  |  Branch (1429:11): [True: 0, False: 0]
  ------------------
 1430|      0|      r = add_opcode_rel_addr(reg, OP_JUMP, len2);
 1431|      0|      if (r) return r;
  ------------------
  |  Branch (1431:11): [True: 0, False: 0]
  ------------------
 1432|      0|      x = NCDR(x);
  ------------------
  |  |   87|      0|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1433|      0|      r = compile_tree(NCAR(x), reg);   /* no-node */
  ------------------
  |  |   86|      0|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1434|      0|    }
 1435|      0|    else {
 1436|      0|      return ONIGERR_PARSER_BUG;
  ------------------
  |  |  634|      0|#define ONIGERR_PARSER_BUG                                    -11
  ------------------
 1437|      0|    }
 1438|      0|    break;
 1439|       |
 1440|      0|  case ENCLOSE_ABSENT:
  ------------------
  |  |   98|      0|#define ENCLOSE_ABSENT           (1<<4)
  ------------------
  |  Branch (1440:3): [True: 0, False: 7.39k]
  ------------------
 1441|      0|    len = compile_length_tree(node->target, reg);
 1442|      0|    if (len < 0) return len;
  ------------------
  |  Branch (1442:9): [True: 0, False: 0]
  ------------------
 1443|       |
 1444|      0|    r = add_opcode(reg, OP_PUSH_ABSENT_POS);
 1445|      0|    if (r) return r;
  ------------------
  |  Branch (1445:9): [True: 0, False: 0]
  ------------------
 1446|      0|    r = add_opcode_rel_addr(reg, OP_ABSENT, len + SIZE_OP_ABSENT_END);
  ------------------
  |  |  752|      0|#define SIZE_OP_ABSENT_END              SIZE_OPCODE
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
 1447|      0|    if (r) return r;
  ------------------
  |  Branch (1447:9): [True: 0, False: 0]
  ------------------
 1448|      0|    r = compile_tree(node->target, reg);
 1449|      0|    if (r) return r;
  ------------------
  |  Branch (1449:9): [True: 0, False: 0]
  ------------------
 1450|      0|    r = add_opcode(reg, OP_ABSENT_END);
 1451|      0|    break;
 1452|       |
 1453|      0|  default:
  ------------------
  |  Branch (1453:3): [True: 0, False: 7.39k]
  ------------------
 1454|      0|    return ONIGERR_TYPE_BUG;
  ------------------
  |  |  633|      0|#define ONIGERR_TYPE_BUG                                       -6
  ------------------
 1455|      0|    break;
 1456|  7.39k|  }
 1457|       |
 1458|  7.39k|  return r;
 1459|  7.39k|}
regcomp.c:compile_option_node:
 1187|    411|{
 1188|    411|  int r;
 1189|    411|  OnigOptionType prev = reg->options;
 1190|       |
 1191|    411|  if (IS_DYNAMIC_OPTION(prev ^ node->option)) {
  ------------------
  |  |  416|    411|#define IS_DYNAMIC_OPTION(option)  0
  |  |  ------------------
  |  |  |  Branch (416:36): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1192|      0|    r = add_opcode_option(reg, OP_SET_OPTION_PUSH, node->option);
 1193|      0|    if (r) return r;
  ------------------
  |  Branch (1193:9): [True: 0, False: 0]
  ------------------
 1194|      0|    r = add_opcode_option(reg, OP_SET_OPTION, prev);
 1195|      0|    if (r) return r;
  ------------------
  |  Branch (1195:9): [True: 0, False: 0]
  ------------------
 1196|      0|    r = add_opcode(reg, OP_FAIL);
 1197|      0|    if (r) return r;
  ------------------
  |  Branch (1197:9): [True: 0, False: 0]
  ------------------
 1198|      0|  }
 1199|       |
 1200|    411|  reg->options = node->option;
 1201|    411|  r = compile_tree(node->target, reg);
 1202|    411|  reg->options = prev;
 1203|       |
 1204|    411|  if (IS_DYNAMIC_OPTION(prev ^ node->option)) {
  ------------------
  |  |  416|    411|#define IS_DYNAMIC_OPTION(option)  0
  |  |  ------------------
  |  |  |  Branch (416:36): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1205|      0|    if (r) return r;
  ------------------
  |  Branch (1205:9): [True: 0, False: 0]
  ------------------
 1206|      0|    r = add_opcode_option(reg, OP_SET_OPTION, prev);
 1207|      0|  }
 1208|    411|  return r;
 1209|    411|}
regcomp.c:compile_anchor_node:
 1496|  11.9k|{
 1497|  11.9k|  int r, len;
 1498|       |
 1499|  11.9k|  switch (node->type) {
 1500|      0|  case ANCHOR_BEGIN_BUF:      r = add_opcode(reg, OP_BEGIN_BUF);      break;
  ------------------
  |  |  540|      0|#define ANCHOR_BEGIN_BUF        (1<<0)
  ------------------
  |  Branch (1500:3): [True: 0, False: 11.9k]
  ------------------
 1501|      0|  case ANCHOR_END_BUF:        r = add_opcode(reg, OP_END_BUF);        break;
  ------------------
  |  |  543|      0|#define ANCHOR_END_BUF          (1<<3)
  ------------------
  |  Branch (1501:3): [True: 0, False: 11.9k]
  ------------------
 1502|  8.22k|  case ANCHOR_BEGIN_LINE:     r = add_opcode(reg, OP_BEGIN_LINE);     break;
  ------------------
  |  |  541|  8.22k|#define ANCHOR_BEGIN_LINE       (1<<1)
  ------------------
  |  Branch (1502:3): [True: 8.22k, False: 3.69k]
  ------------------
 1503|  3.28k|  case ANCHOR_END_LINE:       r = add_opcode(reg, OP_END_LINE);       break;
  ------------------
  |  |  545|  3.28k|#define ANCHOR_END_LINE         (1<<5)
  ------------------
  |  Branch (1503:3): [True: 3.28k, False: 8.63k]
  ------------------
 1504|      0|  case ANCHOR_SEMI_END_BUF:   r = add_opcode(reg, OP_SEMI_END_BUF);   break;
  ------------------
  |  |  544|      0|#define ANCHOR_SEMI_END_BUF     (1<<4)
  ------------------
  |  Branch (1504:3): [True: 0, False: 11.9k]
  ------------------
 1505|      0|  case ANCHOR_BEGIN_POSITION: r = add_opcode(reg, OP_BEGIN_POSITION); break;
  ------------------
  |  |  542|      0|#define ANCHOR_BEGIN_POSITION   (1<<2)
  ------------------
  |  Branch (1505:3): [True: 0, False: 11.9k]
  ------------------
 1506|       |
 1507|    411|  case ANCHOR_WORD_BOUND:
  ------------------
  |  |  547|    411|#define ANCHOR_WORD_BOUND       (1<<6)
  ------------------
  |  Branch (1507:3): [True: 411, False: 11.5k]
  ------------------
 1508|    411|    if (node->ascii_range)    r = add_opcode(reg, OP_ASCII_WORD_BOUND);
  ------------------
  |  Branch (1508:9): [True: 0, False: 411]
  ------------------
 1509|    411|    else                      r = add_opcode(reg, OP_WORD_BOUND);
 1510|    411|    break;
 1511|      0|  case ANCHOR_NOT_WORD_BOUND:
  ------------------
  |  |  548|      0|#define ANCHOR_NOT_WORD_BOUND   (1<<7)
  ------------------
  |  Branch (1511:3): [True: 0, False: 11.9k]
  ------------------
 1512|      0|    if (node->ascii_range)    r = add_opcode(reg, OP_NOT_ASCII_WORD_BOUND);
  ------------------
  |  Branch (1512:9): [True: 0, False: 0]
  ------------------
 1513|      0|    else                      r = add_opcode(reg, OP_NOT_WORD_BOUND);
 1514|      0|    break;
 1515|      0|#ifdef USE_WORD_BEGIN_END
 1516|      0|  case ANCHOR_WORD_BEGIN:
  ------------------
  |  |  549|      0|#define ANCHOR_WORD_BEGIN       (1<<8)
  ------------------
  |  Branch (1516:3): [True: 0, False: 11.9k]
  ------------------
 1517|      0|    if (node->ascii_range)    r = add_opcode(reg, OP_ASCII_WORD_BEGIN);
  ------------------
  |  Branch (1517:9): [True: 0, False: 0]
  ------------------
 1518|      0|    else                      r = add_opcode(reg, OP_WORD_BEGIN);
 1519|      0|    break;
 1520|      0|  case ANCHOR_WORD_END:
  ------------------
  |  |  550|      0|#define ANCHOR_WORD_END         (1<<9)
  ------------------
  |  Branch (1520:3): [True: 0, False: 11.9k]
  ------------------
 1521|      0|    if (node->ascii_range)    r = add_opcode(reg, OP_ASCII_WORD_END);
  ------------------
  |  Branch (1521:9): [True: 0, False: 0]
  ------------------
 1522|      0|    else                      r = add_opcode(reg, OP_WORD_END);
 1523|      0|    break;
 1524|      0|#endif
 1525|      0|  case ANCHOR_KEEP:           r = add_opcode(reg, OP_KEEP);           break;
  ------------------
  |  |  559|      0|#define ANCHOR_KEEP             (1<<16)
  ------------------
  |  Branch (1525:3): [True: 0, False: 11.9k]
  ------------------
 1526|       |
 1527|      0|  case ANCHOR_PREC_READ:
  ------------------
  |  |  551|      0|#define ANCHOR_PREC_READ        (1<<10)
  ------------------
  |  Branch (1527:3): [True: 0, False: 11.9k]
  ------------------
 1528|      0|    r = add_opcode(reg, OP_PUSH_POS);
 1529|      0|    if (r) return r;
  ------------------
  |  Branch (1529:9): [True: 0, False: 0]
  ------------------
 1530|      0|    r = compile_tree(node->target, reg);
 1531|      0|    if (r) return r;
  ------------------
  |  Branch (1531:9): [True: 0, False: 0]
  ------------------
 1532|      0|    r = add_opcode(reg, OP_POP_POS);
 1533|      0|    break;
 1534|       |
 1535|      0|  case ANCHOR_PREC_READ_NOT:
  ------------------
  |  |  552|      0|#define ANCHOR_PREC_READ_NOT    (1<<11)
  ------------------
  |  Branch (1535:3): [True: 0, False: 11.9k]
  ------------------
 1536|      0|    len = compile_length_tree(node->target, reg);
 1537|      0|    if (len < 0) return len;
  ------------------
  |  Branch (1537:9): [True: 0, False: 0]
  ------------------
 1538|      0|    r = add_opcode_rel_addr(reg, OP_PUSH_POS_NOT, len + SIZE_OP_FAIL_POS);
  ------------------
  |  |  730|      0|#define SIZE_OP_FAIL_POS                SIZE_OPCODE
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
 1539|      0|    if (r) return r;
  ------------------
  |  Branch (1539:9): [True: 0, False: 0]
  ------------------
 1540|      0|    r = compile_tree(node->target, reg);
 1541|      0|    if (r) return r;
  ------------------
  |  Branch (1541:9): [True: 0, False: 0]
  ------------------
 1542|      0|    r = add_opcode(reg, OP_FAIL_POS);
 1543|      0|    break;
 1544|       |
 1545|      0|  case ANCHOR_LOOK_BEHIND:
  ------------------
  |  |  553|      0|#define ANCHOR_LOOK_BEHIND      (1<<12)
  ------------------
  |  Branch (1545:3): [True: 0, False: 11.9k]
  ------------------
 1546|      0|    {
 1547|      0|      int n;
 1548|      0|      r = add_opcode(reg, OP_LOOK_BEHIND);
 1549|      0|      if (r) return r;
  ------------------
  |  Branch (1549:11): [True: 0, False: 0]
  ------------------
 1550|      0|      if (node->char_len < 0) {
  ------------------
  |  Branch (1550:11): [True: 0, False: 0]
  ------------------
 1551|      0|	r = get_char_length_tree(node->target, reg, &n);
 1552|      0|	if (r) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
  ------------------
  |  |  665|      0|#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN                  -122
  ------------------
  |  Branch (1552:6): [True: 0, False: 0]
  ------------------
 1553|      0|      }
 1554|      0|      else
 1555|      0|	n = node->char_len;
 1556|      0|      r = add_length(reg, n);
 1557|      0|      if (r) return r;
  ------------------
  |  Branch (1557:11): [True: 0, False: 0]
  ------------------
 1558|      0|      r = compile_tree(node->target, reg);
 1559|      0|    }
 1560|      0|    break;
 1561|       |
 1562|      0|  case ANCHOR_LOOK_BEHIND_NOT:
  ------------------
  |  |  554|      0|#define ANCHOR_LOOK_BEHIND_NOT  (1<<13)
  ------------------
  |  Branch (1562:3): [True: 0, False: 11.9k]
  ------------------
 1563|      0|    {
 1564|      0|      int n;
 1565|      0|      len = compile_length_tree(node->target, reg);
 1566|      0|      r = add_opcode_rel_addr(reg, OP_PUSH_LOOK_BEHIND_NOT,
 1567|      0|			   len + SIZE_OP_FAIL_LOOK_BEHIND_NOT);
  ------------------
  |  |  746|      0|#define SIZE_OP_FAIL_LOOK_BEHIND_NOT    SIZE_OPCODE
  |  |  ------------------
  |  |  |  |  688|      0|#define SIZE_OPCODE           1
  |  |  ------------------
  ------------------
 1568|      0|      if (r) return r;
  ------------------
  |  Branch (1568:11): [True: 0, False: 0]
  ------------------
 1569|      0|      if (node->char_len < 0) {
  ------------------
  |  Branch (1569:11): [True: 0, False: 0]
  ------------------
 1570|      0|	r = get_char_length_tree(node->target, reg, &n);
 1571|      0|	if (r) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
  ------------------
  |  |  665|      0|#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN                  -122
  ------------------
  |  Branch (1571:6): [True: 0, False: 0]
  ------------------
 1572|      0|      }
 1573|      0|      else
 1574|      0|	n = node->char_len;
 1575|      0|      r = add_length(reg, n);
 1576|      0|      if (r) return r;
  ------------------
  |  Branch (1576:11): [True: 0, False: 0]
  ------------------
 1577|      0|      r = compile_tree(node->target, reg);
 1578|      0|      if (r) return r;
  ------------------
  |  Branch (1578:11): [True: 0, False: 0]
  ------------------
 1579|      0|      r = add_opcode(reg, OP_FAIL_LOOK_BEHIND_NOT);
 1580|      0|    }
 1581|      0|    break;
 1582|       |
 1583|      0|  default:
  ------------------
  |  Branch (1583:3): [True: 0, False: 11.9k]
  ------------------
 1584|      0|    return ONIGERR_TYPE_BUG;
  ------------------
  |  |  633|      0|#define ONIGERR_TYPE_BUG                                       -6
  ------------------
 1585|      0|    break;
 1586|  11.9k|  }
 1587|       |
 1588|  11.9k|  return r;
 1589|  11.9k|}
regcomp.c:add_opcode:
  205|  96.1k|{
  206|  96.1k|  BBUF_ADD1(reg, opcode);
  ------------------
  |  |  505|  96.1k|#define BBUF_ADD1(buf,byte)         BBUF_WRITE1((buf),(buf)->used,(byte))
  |  |  ------------------
  |  |  |  |  497|  96.1k|#define BBUF_WRITE1(buf,pos,byte) do{\
  |  |  |  |  498|  96.1k|  int used = (pos) + 1;\
  |  |  |  |  499|  96.1k|  if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  470|  1.23k|#define BBUF_EXPAND(buf,low) do{\
  |  |  |  |  |  |  471|  1.23k|  UChar *tmp;\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   76|  1.23k|# define UChar OnigUChar
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  472|  1.23k|  do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (472:36): [True: 0, False: 1.23k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  473|  1.23k|  tmp = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  143|  1.23k|# define xrealloc    realloc
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  474|  1.23k|  if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  311|  1.23k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (311:39): [True: 0, False: 1.23k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                 if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  475|  1.23k|  (buf)->p = tmp;\
  |  |  |  |  |  |  476|  1.23k|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (476:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (499:7): [True: 1.23k, False: 94.9k]
  |  |  |  |  ------------------
  |  |  |  |  500|  96.1k|  (buf)->p[(pos)] = (UChar )(byte);\
  |  |  |  |  501|  96.1k|  if ((buf)->used < (unsigned int )used) (buf)->used = used;\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (501:7): [True: 96.1k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  502|  96.1k|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (502:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  207|  96.1k|  return 0;
  208|  96.1k|}

onigenc_init:
   37|      1|{
   38|      1|  return 0;
   39|      1|}
onigenc_mbclen:
   56|   702k|{
   57|   702k|  int ret = ONIGENC_PRECISE_MBC_ENC_LEN(enc, p, e);
  ------------------
  |  |  356|   702k|#define ONIGENC_PRECISE_MBC_ENC_LEN(enc,p,e)   (enc)->precise_mbc_enc_len(p,e,enc)
  ------------------
   58|   702k|  if (ONIGENC_MBCLEN_CHARFOUND_P(ret)) {
  ------------------
  |  |  346|   702k|#define ONIGENC_MBCLEN_CHARFOUND_P(r)           (0 < (r))
  |  |  ------------------
  |  |  |  Branch (346:49): [True: 702k, False: 0]
  |  |  ------------------
  ------------------
   59|   702k|    ret = ONIGENC_MBCLEN_CHARFOUND_LEN(ret);
  ------------------
  |  |  347|   702k|#define ONIGENC_MBCLEN_CHARFOUND_LEN(r)         (r)
  ------------------
   60|   702k|    if (ret > (int)(e - p)) ret = (int)(e - p); // just for case
  ------------------
  |  Branch (60:9): [True: 0, False: 702k]
  ------------------
   61|   702k|    return ret;
   62|   702k|  }
   63|      0|  else if (ONIGENC_MBCLEN_NEEDMORE_P(ret)) {
  ------------------
  |  |  353|      0|#define ONIGENC_MBCLEN_NEEDMORE_P(r)            ((r) < -1)
  |  |  ------------------
  |  |  |  Branch (353:49): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   64|      0|    return (int)(e - p);
   65|      0|  }
   66|      0|  return p < e ? 1 : 0;
  ------------------
  |  Branch (66:10): [True: 0, False: 0]
  ------------------
   67|   702k|}
onigenc_always_true_is_allowed_reverse_match:
  677|  4.52k|{
  678|  4.52k|  return TRUE;
  ------------------
  |  |   73|  4.52k|# define TRUE    1
  ------------------
  679|  4.52k|}

onig_strcpy:
  260|   152k|{
  261|   152k|  ptrdiff_t len = end - src;
  262|   152k|  if (len > 0) {
  ------------------
  |  Branch (262:7): [True: 152k, False: 0]
  ------------------
  263|   152k|    xmemcpy(dest, src, len);
  ------------------
  |  |  215|   152k|#define xmemcpy     memcpy
  ------------------
  264|   152k|    dest[len] = (UChar )0;
  265|   152k|  }
  266|   152k|}
onig_st_init_strend_table_with_size:
  407|    411|{
  408|    411|  static const struct st_hash_type hashType = {
  409|    411|    str_end_cmp,
  410|    411|    str_end_hash,
  411|    411|  };
  412|       |
  413|    411|  return (hash_table_type* )
  414|    411|           onig_st_init_table_with_size(&hashType, size);
  415|    411|}
onig_st_lookup_strend:
  420|  1.23k|{
  421|  1.23k|  st_str_end_key key;
  422|       |
  423|  1.23k|  key.s   = (UChar* )str_key;
  424|  1.23k|  key.end = (UChar* )end_key;
  425|       |
  426|  1.23k|  return onig_st_lookup(table, (st_data_t )(&key), value);
  427|  1.23k|}
onig_st_insert_strend:
  432|  1.64k|{
  433|  1.64k|  st_str_end_key* key;
  434|  1.64k|  int result;
  435|       |
  436|  1.64k|  key = (st_str_end_key* )xmalloc(sizeof(st_str_end_key));
  ------------------
  |  |  142|  1.64k|# define xmalloc     malloc
  ------------------
  437|  1.64k|  key->s   = (UChar* )str_key;
  438|  1.64k|  key->end = (UChar* )end_key;
  439|  1.64k|  result = onig_st_insert(table, (st_data_t )key, value);
  440|  1.64k|  if (result) {
  ------------------
  |  Branch (440:7): [True: 0, False: 1.64k]
  ------------------
  441|      0|    xfree(key);
  ------------------
  |  |  145|      0|# define xfree       free
  ------------------
  442|      0|  }
  443|  1.64k|  return result;
  444|  1.64k|}
onig_names_free:
  526|  9.45k|{
  527|  9.45k|  int r;
  528|  9.45k|  NameTable* t;
  529|       |
  530|  9.45k|  r = names_clear(reg);
  531|  9.45k|  if (r) return r;
  ------------------
  |  Branch (531:7): [True: 0, False: 9.45k]
  ------------------
  532|       |
  533|  9.45k|  t = (NameTable* )reg->name_table;
  534|  9.45k|  if (IS_NOT_NULL(t)) onig_st_free_table(t);
  ------------------
  |  |  312|  9.45k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 411, False: 9.04k]
  |  |  ------------------
  ------------------
  535|  9.45k|  reg->name_table = (void* )NULL;
  536|  9.45k|  return 0;
  537|  9.45k|}
onig_node_free:
 1063|  82.2k|{
 1064|   128k| start:
 1065|   128k|  if (IS_NULL(node)) return ;
  ------------------
  |  |  311|   128k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 18.4k, False: 110k]
  |  |  ------------------
  ------------------
 1066|       |
 1067|   110k|  switch (NTYPE(node)) {
  ------------------
  |  |   69|   110k|#define NTYPE(node)             ((node)->u.base.type)
  |  |  ------------------
  |  |  |  Branch (69:33): [True: 4.11k, False: 106k]
  |  |  ------------------
  ------------------
 1068|  17.6k|  case NT_STR:
  ------------------
  |  |   38|  17.6k|#define NT_STR         0
  ------------------
  |  Branch (1068:3): [True: 17.6k, False: 92.4k]
  ------------------
 1069|  17.6k|    if (NSTR(node)->capa != 0 &&
  ------------------
  |  |   76|  17.6k|#define NSTR(node)         (&((node)->u.str))
  ------------------
  |  Branch (1069:9): [True: 1.64k, False: 16.0k]
  ------------------
 1070|  17.6k|	IS_NOT_NULL(NSTR(node)->s) && NSTR(node)->s != NSTR(node)->buf) {
  ------------------
  |  |  312|  19.3k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 1.64k, False: 0]
  |  |  ------------------
  ------------------
              	IS_NOT_NULL(NSTR(node)->s) && NSTR(node)->s != NSTR(node)->buf) {
  ------------------
  |  |   76|  1.64k|#define NSTR(node)         (&((node)->u.str))
  ------------------
              	IS_NOT_NULL(NSTR(node)->s) && NSTR(node)->s != NSTR(node)->buf) {
  ------------------
  |  |   76|  1.64k|#define NSTR(node)         (&((node)->u.str))
  ------------------
  |  Branch (1070:32): [True: 1.64k, False: 0]
  ------------------
 1071|  1.64k|      xfree(NSTR(node)->s);
  ------------------
  |  |  145|  1.64k|# define xfree       free
  ------------------
                    xfree(NSTR(node)->s);
  ------------------
  |  |   76|  1.64k|#define NSTR(node)         (&((node)->u.str))
  ------------------
 1072|  1.64k|    }
 1073|  17.6k|    break;
 1074|       |
 1075|  40.6k|  case NT_LIST:
  ------------------
  |  |   46|  40.6k|#define NT_LIST        8
  ------------------
  |  Branch (1075:3): [True: 40.6k, False: 69.4k]
  ------------------
 1076|  46.4k|  case NT_ALT:
  ------------------
  |  |   47|  46.4k|#define NT_ALT         9
  ------------------
  |  Branch (1076:3): [True: 5.75k, False: 104k]
  ------------------
 1077|  46.4k|    onig_node_free(NCAR(node));
  ------------------
  |  |   86|  46.4k|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|  46.4k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1078|  46.4k|    {
 1079|  46.4k|      Node* next_node = NCDR(node);
  ------------------
  |  |   87|  46.4k|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|  46.4k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1080|       |
 1081|  46.4k|      xfree(node);
  ------------------
  |  |  145|  46.4k|# define xfree       free
  ------------------
 1082|  46.4k|      node = next_node;
 1083|  46.4k|      goto start;
 1084|  40.6k|    }
 1085|      0|    break;
 1086|       |
 1087|  9.86k|  case NT_CCLASS:
  ------------------
  |  |   39|  9.86k|#define NT_CCLASS      1
  ------------------
  |  Branch (1087:3): [True: 9.86k, False: 100k]
  ------------------
 1088|  9.86k|    {
 1089|  9.86k|      CClassNode* cc = NCCLASS(node);
  ------------------
  |  |   77|  9.86k|#define NCCLASS(node)      (&((node)->u.cclass))
  ------------------
 1090|       |
 1091|  9.86k|      if (cc->mbuf)
  ------------------
  |  Branch (1091:11): [True: 0, False: 9.86k]
  ------------------
 1092|      0|	bbuf_free(cc->mbuf);
 1093|  9.86k|    }
 1094|  9.86k|    break;
 1095|       |
 1096|  12.3k|  case NT_QTFR:
  ------------------
  |  |   43|  12.3k|#define NT_QTFR        5
  ------------------
  |  Branch (1096:3): [True: 12.3k, False: 97.8k]
  ------------------
 1097|  12.3k|    if (NQTFR(node)->target)
  ------------------
  |  |   80|  12.3k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
  |  Branch (1097:9): [True: 12.3k, False: 0]
  ------------------
 1098|  12.3k|      onig_node_free(NQTFR(node)->target);
  ------------------
  |  |   80|  12.3k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 1099|  12.3k|    break;
 1100|       |
 1101|  7.80k|  case NT_ENCLOSE:
  ------------------
  |  |   44|  7.80k|#define NT_ENCLOSE     6
  ------------------
  |  Branch (1101:3): [True: 7.80k, False: 102k]
  ------------------
 1102|  7.80k|    if (NENCLOSE(node)->target)
  ------------------
  |  |   81|  7.80k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
  |  Branch (1102:9): [True: 7.80k, False: 0]
  ------------------
 1103|  7.80k|      onig_node_free(NENCLOSE(node)->target);
  ------------------
  |  |   81|  7.80k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 1104|  7.80k|    break;
 1105|       |
 1106|      0|  case NT_BREF:
  ------------------
  |  |   42|      0|#define NT_BREF        4
  ------------------
  |  Branch (1106:3): [True: 0, False: 110k]
  ------------------
 1107|      0|    if (IS_NOT_NULL(NBREF(node)->back_dynamic))
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1108|      0|      xfree(NBREF(node)->back_dynamic);
  ------------------
  |  |  145|      0|# define xfree       free
  ------------------
                    xfree(NBREF(node)->back_dynamic);
  ------------------
  |  |   79|      0|#define NBREF(node)        (&((node)->u.bref))
  ------------------
 1109|      0|    break;
 1110|       |
 1111|  11.9k|  case NT_ANCHOR:
  ------------------
  |  |   45|  11.9k|#define NT_ANCHOR      7
  ------------------
  |  Branch (1111:3): [True: 11.9k, False: 98.2k]
  ------------------
 1112|  11.9k|    if (NANCHOR(node)->target)
  ------------------
  |  |   82|  11.9k|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
  |  Branch (1112:9): [True: 0, False: 11.9k]
  ------------------
 1113|      0|      onig_node_free(NANCHOR(node)->target);
  ------------------
  |  |   82|      0|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
 1114|  11.9k|    break;
 1115|   110k|  }
 1116|       |
 1117|  63.7k|  xfree(node);
  ------------------
  |  |  145|  63.7k|# define xfree       free
  ------------------
 1118|  63.7k|}
onig_node_new_alt:
 1211|  5.75k|{
 1212|  5.75k|  Node* node = node_new();
 1213|  5.75k|  CHECK_NULL_RETURN(node);
  ------------------
  |  |  313|  5.75k|#define CHECK_NULL_RETURN(p)          if (IS_NULL(p)) return NULL
  |  |  ------------------
  |  |  |  |  311|  5.75k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 5.75k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1214|       |
 1215|  5.75k|  SET_NTYPE(node, NT_ALT);
  ------------------
  |  |   71|  5.75k|    do { \
  |  |   72|  5.75k|	int value = ntype; \
  |  |   73|  5.75k|	memcpy(&((node)->u.base.type), &value, sizeof(int)); \
  |  |   74|  5.75k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1216|  5.75k|  NCAR(node)  = left;
  ------------------
  |  |   86|  5.75k|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|  5.75k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1217|  5.75k|  NCDR(node) = right;
  ------------------
  |  |   87|  5.75k|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|  5.75k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1218|  5.75k|  return node;
 1219|  5.75k|}
onig_node_new_anchor:
 1223|  11.9k|{
 1224|  11.9k|  Node* node = node_new();
 1225|  11.9k|  CHECK_NULL_RETURN(node);
  ------------------
  |  |  313|  11.9k|#define CHECK_NULL_RETURN(p)          if (IS_NULL(p)) return NULL
  |  |  ------------------
  |  |  |  |  311|  11.9k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 11.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1226|       |
 1227|  11.9k|  SET_NTYPE(node, NT_ANCHOR);
  ------------------
  |  |   71|  11.9k|    do { \
  |  |   72|  11.9k|	int value = ntype; \
  |  |   73|  11.9k|	memcpy(&((node)->u.base.type), &value, sizeof(int)); \
  |  |   74|  11.9k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1228|  11.9k|  NANCHOR(node)->type     = type;
  ------------------
  |  |   82|  11.9k|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
 1229|  11.9k|  NANCHOR(node)->target   = NULL;
  ------------------
  |  |   82|  11.9k|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
 1230|  11.9k|  NANCHOR(node)->char_len = -1;
  ------------------
  |  |   82|  11.9k|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
 1231|  11.9k|  NANCHOR(node)->ascii_range = 0;
  ------------------
  |  |   82|  11.9k|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
 1232|  11.9k|  return node;
 1233|  11.9k|}
onig_node_new_enclose:
 1348|  5.34k|{
 1349|  5.34k|  return node_new_enclose(type);
 1350|  5.34k|}
onig_node_str_cat:
 1377|   151k|{
 1378|   151k|  ptrdiff_t addlen = end - s;
 1379|       |
 1380|   151k|  if (addlen > 0) {
  ------------------
  |  Branch (1380:7): [True: 151k, False: 411]
  ------------------
 1381|   151k|    ptrdiff_t len  = NSTR(node)->end - NSTR(node)->s;
  ------------------
  |  |   76|   151k|#define NSTR(node)         (&((node)->u.str))
  ------------------
                  ptrdiff_t len  = NSTR(node)->end - NSTR(node)->s;
  ------------------
  |  |   76|   151k|#define NSTR(node)         (&((node)->u.str))
  ------------------
 1382|       |
 1383|   151k|    if (NSTR(node)->capa > 0 || (len + addlen > NODE_STR_BUF_SIZE - 1)) {
  ------------------
  |  |   76|   151k|#define NSTR(node)         (&((node)->u.str))
  ------------------
                  if (NSTR(node)->capa > 0 || (len + addlen > NODE_STR_BUF_SIZE - 1)) {
  ------------------
  |  |  101|   128k|#define NODE_STR_BUF_SIZE       24  /* sizeof(CClassNode) - sizeof(int)*4 */
  ------------------
  |  Branch (1383:9): [True: 23.0k, False: 128k]
  |  Branch (1383:33): [True: 1.64k, False: 126k]
  ------------------
 1384|  24.6k|      UChar* p;
  ------------------
  |  |   76|  24.6k|# define UChar OnigUChar
  ------------------
 1385|  24.6k|      ptrdiff_t capa = len + addlen + NODE_STR_MARGIN;
  ------------------
  |  |  100|  24.6k|#define NODE_STR_MARGIN         16
  ------------------
 1386|       |
 1387|  24.6k|      if (capa <= NSTR(node)->capa) {
  ------------------
  |  |   76|  24.6k|#define NSTR(node)         (&((node)->u.str))
  ------------------
  |  Branch (1387:11): [True: 0, False: 24.6k]
  ------------------
 1388|      0|	onig_strcpy(NSTR(node)->s + len, s, end);
  ------------------
  |  |   76|      0|#define NSTR(node)         (&((node)->u.str))
  ------------------
 1389|      0|      }
 1390|  24.6k|      else {
 1391|  24.6k|	if (NSTR(node)->s == NSTR(node)->buf)
  ------------------
  |  |   76|  24.6k|#define NSTR(node)         (&((node)->u.str))
  ------------------
              	if (NSTR(node)->s == NSTR(node)->buf)
  ------------------
  |  |   76|  24.6k|#define NSTR(node)         (&((node)->u.str))
  ------------------
  |  Branch (1391:6): [True: 1.64k, False: 23.0k]
  ------------------
 1392|  1.64k|	  p = strcat_capa_from_static(NSTR(node)->s, NSTR(node)->end,
  ------------------
  |  |   76|  1.64k|#define NSTR(node)         (&((node)->u.str))
  ------------------
              	  p = strcat_capa_from_static(NSTR(node)->s, NSTR(node)->end,
  ------------------
  |  |   76|  1.64k|#define NSTR(node)         (&((node)->u.str))
  ------------------
 1393|  1.64k|				      s, end, capa);
 1394|  23.0k|	else
 1395|  23.0k|	  p = strcat_capa(NSTR(node)->s, NSTR(node)->end, s, end, capa);
  ------------------
  |  |   76|  23.0k|#define NSTR(node)         (&((node)->u.str))
  ------------------
              	  p = strcat_capa(NSTR(node)->s, NSTR(node)->end, s, end, capa);
  ------------------
  |  |   76|  23.0k|#define NSTR(node)         (&((node)->u.str))
  ------------------
 1396|       |
 1397|  24.6k|	CHECK_NULL_RETURN_MEMERR(p);
  ------------------
  |  |  314|  24.6k|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|  24.6k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 24.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 1398|  24.6k|	NSTR(node)->s    = p;
  ------------------
  |  |   76|  24.6k|#define NSTR(node)         (&((node)->u.str))
  ------------------
 1399|  24.6k|	NSTR(node)->capa = (int )capa;
  ------------------
  |  |   76|  24.6k|#define NSTR(node)         (&((node)->u.str))
  ------------------
 1400|  24.6k|      }
 1401|  24.6k|    }
 1402|   126k|    else {
 1403|   126k|      onig_strcpy(NSTR(node)->s + len, s, end);
  ------------------
  |  |   76|   126k|#define NSTR(node)         (&((node)->u.str))
  ------------------
 1404|   126k|    }
 1405|   151k|    NSTR(node)->end = NSTR(node)->s + len + addlen;
  ------------------
  |  |   76|   151k|#define NSTR(node)         (&((node)->u.str))
  ------------------
                  NSTR(node)->end = NSTR(node)->s + len + addlen;
  ------------------
  |  |   76|   151k|#define NSTR(node)         (&((node)->u.str))
  ------------------
 1406|   151k|  }
 1407|       |
 1408|   151k|  return 0;
 1409|   151k|}
onig_parse_make_tree:
 6633|  9.45k|{
 6634|  9.45k|  int r;
 6635|  9.45k|  UChar* p;
  ------------------
  |  |   76|  9.45k|# define UChar OnigUChar
  ------------------
 6636|       |
 6637|  9.45k|#ifdef USE_NAMED_GROUP
 6638|  9.45k|  names_clear(reg);
 6639|  9.45k|#endif
 6640|       |
 6641|  9.45k|  scan_env_clear(env);
 6642|  9.45k|  env->option         = reg->options;
 6643|  9.45k|  env->case_fold_flag = reg->case_fold_flag;
 6644|  9.45k|  env->enc            = reg->enc;
 6645|  9.45k|  env->syntax         = reg->syntax;
 6646|  9.45k|  env->pattern        = (UChar* )pattern;
 6647|  9.45k|  env->pattern_end    = (UChar* )end;
 6648|  9.45k|  env->reg            = reg;
 6649|       |
 6650|  9.45k|  *root = NULL;
 6651|  9.45k|  p = (UChar* )pattern;
 6652|  9.45k|  r = parse_regexp(root, &p, (UChar* )end, env);
 6653|  9.45k|  reg->num_mem = env->num_mem;
 6654|  9.45k|  return r;
 6655|  9.45k|}
regparse.c:str_end_hash:
  392|  2.87k|{
  393|  2.87k|  const st_str_end_key *x = (const st_str_end_key *)xp;
  394|  2.87k|  const UChar *p;
  395|  2.87k|  st_index_t val = 0;
  396|       |
  397|  2.87k|  p = x->s;
  398|  13.5k|  while (p < x->end) {
  ------------------
  |  Branch (398:10): [True: 10.6k, False: 2.87k]
  ------------------
  399|  10.6k|    val = val * 997 + (int )*p++;
  400|  10.6k|  }
  401|       |
  402|  2.87k|  return val + (val >> 5);
  403|  2.87k|}
regparse.c:names_clear:
  515|  18.9k|{
  516|  18.9k|  NameTable* t = (NameTable* )reg->name_table;
  517|       |
  518|  18.9k|  if (IS_NOT_NULL(t)) {
  ------------------
  |  |  312|  18.9k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 411, False: 18.4k]
  |  |  ------------------
  ------------------
  519|    411|    onig_st_foreach(t, i_free_name_entry, 0);
  520|    411|  }
  521|  18.9k|  return 0;
  522|  18.9k|}
regparse.c:i_free_name_entry:
  505|  1.64k|{
  506|  1.64k|  xfree(e->name);
  ------------------
  |  |  145|  1.64k|# define xfree       free
  ------------------
  507|  1.64k|  if (IS_NOT_NULL(e->back_refs)) xfree(e->back_refs);
  ------------------
  |  |  312|  1.64k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 1.64k]
  |  |  ------------------
  ------------------
                if (IS_NOT_NULL(e->back_refs)) xfree(e->back_refs);
  ------------------
  |  |  145|      0|# define xfree       free
  ------------------
  508|  1.64k|  xfree(key);
  ------------------
  |  |  145|  1.64k|# define xfree       free
  ------------------
  509|  1.64k|  xfree(e);
  ------------------
  |  |  145|  1.64k|# define xfree       free
  ------------------
  510|  1.64k|  return ST_DELETE;
  511|  1.64k|}
regparse.c:name_find:
  541|  1.64k|{
  542|  1.64k|  NameEntry* e;
  543|  1.64k|  NameTable* t = (NameTable* )reg->name_table;
  544|       |
  545|  1.64k|  e = (NameEntry* )NULL;
  546|  1.64k|  if (IS_NOT_NULL(t)) {
  ------------------
  |  |  312|  1.64k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 1.23k, False: 411]
  |  |  ------------------
  ------------------
  547|  1.23k|    onig_st_lookup_strend(t, name, name_end, (HashDataType* )((void* )(&e)));
  548|  1.23k|  }
  549|  1.64k|  return e;
  550|  1.64k|}
regparse.c:bbuf_free:
  135|  10.6k|{
  136|  10.6k|  if (IS_NOT_NULL(bbuf)) {
  ------------------
  |  |  312|  10.6k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 5.34k, False: 5.34k]
  |  |  ------------------
  ------------------
  137|  5.34k|    if (IS_NOT_NULL(bbuf->p)) xfree(bbuf->p);
  ------------------
  |  |  312|  5.34k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 5.34k, False: 0]
  |  |  ------------------
  ------------------
                  if (IS_NOT_NULL(bbuf->p)) xfree(bbuf->p);
  ------------------
  |  |  145|  5.34k|# define xfree       free
  ------------------
  138|  5.34k|    xfree(bbuf);
  ------------------
  |  |  145|  5.34k|# define xfree       free
  ------------------
  139|  5.34k|  }
  140|  10.6k|}
regparse.c:node_new_list:
 1175|  40.6k|{
 1176|  40.6k|  Node* node = node_new();
 1177|  40.6k|  CHECK_NULL_RETURN(node);
  ------------------
  |  |  313|  40.6k|#define CHECK_NULL_RETURN(p)          if (IS_NULL(p)) return NULL
  |  |  ------------------
  |  |  |  |  311|  40.6k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 40.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1178|       |
 1179|  40.6k|  SET_NTYPE(node, NT_LIST);
  ------------------
  |  |   71|  40.6k|    do { \
  |  |   72|  40.6k|	int value = ntype; \
  |  |   73|  40.6k|	memcpy(&((node)->u.base.type), &value, sizeof(int)); \
  |  |   74|  40.6k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1180|  40.6k|  NCAR(node)  = left;
  ------------------
  |  |   86|  40.6k|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|  40.6k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1181|  40.6k|  NCDR(node) = right;
  ------------------
  |  |   87|  40.6k|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|  40.6k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 1182|  40.6k|  return node;
 1183|  40.6k|}
regparse.c:node_new:
 1122|   110k|{
 1123|   110k|  Node* node;
 1124|       |
 1125|   110k|  node = (Node* )xmalloc(sizeof(Node));
  ------------------
  |  |  142|   110k|# define xmalloc     malloc
  ------------------
 1126|       |  /* xmemset(node, 0, sizeof(Node)); */
 1127|   110k|  return node;
 1128|   110k|}
regparse.c:node_new_enclose:
 1331|  7.80k|{
 1332|  7.80k|  Node* node = node_new();
 1333|  7.80k|  CHECK_NULL_RETURN(node);
  ------------------
  |  |  313|  7.80k|#define CHECK_NULL_RETURN(p)          if (IS_NULL(p)) return NULL
  |  |  ------------------
  |  |  |  |  311|  7.80k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 7.80k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1334|       |
 1335|  7.80k|  SET_NTYPE(node, NT_ENCLOSE);
  ------------------
  |  |   71|  7.80k|    do { \
  |  |   72|  7.80k|	int value = ntype; \
  |  |   73|  7.80k|	memcpy(&((node)->u.base.type), &value, sizeof(int)); \
  |  |   74|  7.80k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1336|  7.80k|  NENCLOSE(node)->type      = type;
  ------------------
  |  |   81|  7.80k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 1337|  7.80k|  NENCLOSE(node)->state     =  0;
  ------------------
  |  |   81|  7.80k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 1338|  7.80k|  NENCLOSE(node)->regnum    =  0;
  ------------------
  |  |   81|  7.80k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 1339|  7.80k|  NENCLOSE(node)->option    =  0;
  ------------------
  |  |   81|  7.80k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 1340|  7.80k|  NENCLOSE(node)->target    = NULL;
  ------------------
  |  |   81|  7.80k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 1341|  7.80k|  NENCLOSE(node)->call_addr = -1;
  ------------------
  |  |   81|  7.80k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 1342|  7.80k|  NENCLOSE(node)->opt_count =  0;
  ------------------
  |  |   81|  7.80k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 1343|  7.80k|  return node;
 1344|  7.80k|}
regparse.c:strcat_capa_from_static:
  342|  1.64k|{
  343|  1.64k|  UChar* r;
  ------------------
  |  |   76|  1.64k|# define UChar OnigUChar
  ------------------
  344|       |
  345|  1.64k|  r = (UChar* )xmalloc(capa + 1);
  ------------------
  |  |  142|  1.64k|# define xmalloc     malloc
  ------------------
  346|  1.64k|  CHECK_NULL_RETURN(r);
  ------------------
  |  |  313|  1.64k|#define CHECK_NULL_RETURN(p)          if (IS_NULL(p)) return NULL
  |  |  ------------------
  |  |  |  |  311|  1.64k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 1.64k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  347|  1.64k|  onig_strcpy(r, dest, dest_end);
  348|  1.64k|  onig_strcpy(r + (dest_end - dest), src, src_end);
  349|  1.64k|  return r;
  350|  1.64k|}
regparse.c:strcat_capa:
  325|  23.0k|{
  326|  23.0k|  UChar* r;
  ------------------
  |  |   76|  23.0k|# define UChar OnigUChar
  ------------------
  327|       |
  328|  23.0k|  if (dest)
  ------------------
  |  Branch (328:7): [True: 23.0k, False: 0]
  ------------------
  329|  23.0k|    r = (UChar* )xrealloc(dest, capa + 1);
  ------------------
  |  |  143|  23.0k|# define xrealloc    realloc
  ------------------
  330|      0|  else
  331|      0|    r = (UChar* )xmalloc(capa + 1);
  ------------------
  |  |  142|      0|# define xmalloc     malloc
  ------------------
  332|       |
  333|  23.0k|  CHECK_NULL_RETURN(r);
  ------------------
  |  |  313|  23.0k|#define CHECK_NULL_RETURN(p)          if (IS_NULL(p)) return NULL
  |  |  ------------------
  |  |  |  |  311|  23.0k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 23.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  334|  23.0k|  onig_strcpy(r + (dest_end - dest), src, src_end);
  335|  23.0k|  return r;
  336|  23.0k|}
regparse.c:node_new_str:
 1464|  17.6k|{
 1465|  17.6k|  Node* node = node_new();
 1466|  17.6k|  CHECK_NULL_RETURN(node);
  ------------------
  |  |  313|  17.6k|#define CHECK_NULL_RETURN(p)          if (IS_NULL(p)) return NULL
  |  |  ------------------
  |  |  |  |  311|  17.6k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 17.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1467|       |
 1468|  17.6k|  SET_NTYPE(node, NT_STR);
  ------------------
  |  |   71|  17.6k|    do { \
  |  |   72|  17.6k|	int value = ntype; \
  |  |   73|  17.6k|	memcpy(&((node)->u.base.type), &value, sizeof(int)); \
  |  |   74|  17.6k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1469|  17.6k|  NSTR(node)->capa = 0;
  ------------------
  |  |   76|  17.6k|#define NSTR(node)         (&((node)->u.str))
  ------------------
 1470|  17.6k|  NSTR(node)->flag = 0;
  ------------------
  |  |   76|  17.6k|#define NSTR(node)         (&((node)->u.str))
  ------------------
 1471|  17.6k|  NSTR(node)->s    = NSTR(node)->buf;
  ------------------
  |  |   76|  17.6k|#define NSTR(node)         (&((node)->u.str))
  ------------------
                NSTR(node)->s    = NSTR(node)->buf;
  ------------------
  |  |   76|  17.6k|#define NSTR(node)         (&((node)->u.str))
  ------------------
 1472|  17.6k|  NSTR(node)->end  = NSTR(node)->buf;
  ------------------
  |  |   76|  17.6k|#define NSTR(node)         (&((node)->u.str))
  ------------------
                NSTR(node)->end  = NSTR(node)->buf;
  ------------------
  |  |   76|  17.6k|#define NSTR(node)         (&((node)->u.str))
  ------------------
 1473|  17.6k|  if (onig_node_str_cat(node, s, end)) {
  ------------------
  |  Branch (1473:7): [True: 0, False: 17.6k]
  ------------------
 1474|      0|    onig_node_free(node);
 1475|      0|    return NULL;
 1476|      0|  }
 1477|  17.6k|  return node;
 1478|  17.6k|}
regparse.c:scan_env_clear:
  984|  9.45k|{
  985|  9.45k|  int i;
  986|       |
  987|  9.45k|  BIT_STATUS_CLEAR(env->capture_history);
  ------------------
  |  |  368|  9.45k|#define BIT_STATUS_CLEAR(stats)      (stats) = 0
  ------------------
  988|  9.45k|  BIT_STATUS_CLEAR(env->bt_mem_start);
  ------------------
  |  |  368|  9.45k|#define BIT_STATUS_CLEAR(stats)      (stats) = 0
  ------------------
  989|  9.45k|  BIT_STATUS_CLEAR(env->bt_mem_end);
  ------------------
  |  |  368|  9.45k|#define BIT_STATUS_CLEAR(stats)      (stats) = 0
  ------------------
  990|  9.45k|  BIT_STATUS_CLEAR(env->backrefed_mem);
  ------------------
  |  |  368|  9.45k|#define BIT_STATUS_CLEAR(stats)      (stats) = 0
  ------------------
  991|  9.45k|  env->error      = (UChar* )NULL;
  992|  9.45k|  env->error_end  = (UChar* )NULL;
  993|  9.45k|  env->num_call   = 0;
  994|  9.45k|  env->num_mem    = 0;
  995|  9.45k|#ifdef USE_NAMED_GROUP
  996|  9.45k|  env->num_named  = 0;
  997|  9.45k|#endif
  998|  9.45k|  env->mem_alloc         = 0;
  999|  9.45k|  env->mem_nodes_dynamic = (Node** )NULL;
 1000|       |
 1001|  85.0k|  for (i = 0; i < SCANENV_MEMNODES_SIZE; i++)
  ------------------
  |  |  285|  85.0k|#define SCANENV_MEMNODES_SIZE               8
  ------------------
  |  Branch (1001:15): [True: 75.6k, False: 9.45k]
  ------------------
 1002|  75.6k|    env->mem_nodes_static[i] = NULL_NODE;
  ------------------
  |  |  283|  75.6k|#define NULL_NODE  ((Node* )0)
  ------------------
 1003|       |
 1004|       |#ifdef USE_COMBINATION_EXPLOSION_CHECK
 1005|       |  env->num_comb_exp_check  = 0;
 1006|       |  env->comb_exp_max_regnum = 0;
 1007|       |  env->curr_max_regnum     = 0;
 1008|       |  env->has_recursion       = 0;
 1009|       |#endif
 1010|  9.45k|  env->parse_depth         = 0;
 1011|  9.45k|  env->warnings_flag       = 0;
 1012|  9.45k|}
regparse.c:parse_regexp:
 6601|  9.45k|{
 6602|  9.45k|  int r;
 6603|  9.45k|  OnigToken tok;
 6604|       |
 6605|  9.45k|  r = fetch_token(&tok, src, end, env);
 6606|  9.45k|  if (r < 0) return r;
  ------------------
  |  Branch (6606:7): [True: 0, False: 9.45k]
  ------------------
 6607|  9.45k|  r = parse_subexp(top, &tok, TK_EOT, src, end, env);
 6608|  9.45k|  if (r < 0) return r;
  ------------------
  |  Branch (6608:7): [True: 0, False: 9.45k]
  ------------------
 6609|       |
 6610|  9.45k|#ifdef USE_SUBEXP_CALL
 6611|  9.45k|  if (env->num_call > 0) {
  ------------------
  |  Branch (6611:7): [True: 0, False: 9.45k]
  ------------------
 6612|       |    /* Capture the pattern itself. It is used for (?R), (?0) and \g<0>. */
 6613|      0|    const int num = 0;
 6614|      0|    Node* np;
 6615|      0|    np = node_new_enclose_memory(env->option, 0);
 6616|      0|    CHECK_NULL_RETURN_MEMERR(np);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 6617|      0|    NENCLOSE(np)->regnum = num;
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 6618|      0|    NENCLOSE(np)->target = *top;
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 6619|      0|    r = scan_env_set_mem_node(env, num, np);
 6620|      0|    if (r != 0) {
  ------------------
  |  Branch (6620:9): [True: 0, False: 0]
  ------------------
 6621|      0|	onig_node_free(np);
 6622|      0|	return r;
 6623|      0|    }
 6624|      0|    *top = np;
 6625|      0|  }
 6626|  9.45k|#endif
 6627|  9.45k|  return 0;
 6628|  9.45k|}
regparse.c:fetch_token:
 3306|   212k|{
 3307|   212k|  int r, num;
 3308|   212k|  OnigCodePoint c;
 3309|   212k|  OnigEncoding enc = env->enc;
 3310|   212k|  const OnigSyntaxType* syn = env->syntax;
 3311|   212k|  UChar* prev;
  ------------------
  |  |   76|   212k|# define UChar OnigUChar
  ------------------
 3312|   212k|  UChar* p = *src;
  ------------------
  |  |   76|   212k|# define UChar OnigUChar
  ------------------
 3313|   212k|  PFETCH_READY;
  ------------------
  |  |  295|   212k|# define PFETCH_READY  UChar* pfetch_prev = NULL; (void)pfetch_prev
  |  |  ------------------
  |  |  |  |   76|   212k|# define UChar OnigUChar
  |  |  ------------------
  ------------------
 3314|       |
 3315|   212k| start:
 3316|   212k|  if (PEND) {
  ------------------
  |  |  299|   212k|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 9.45k, False: 202k]
  |  |  |  Branch (299:23): [True: 202k, False: 9.45k]
  |  |  ------------------
  ------------------
 3317|  9.45k|    tok->type = TK_EOT;
 3318|  9.45k|    return tok->type;
 3319|  9.45k|  }
 3320|       |
 3321|   202k|  tok->type  = TK_STRING;
 3322|   202k|  tok->base  = 0;
 3323|   202k|  tok->backp = p;
 3324|       |
 3325|   202k|  PFETCH(c);
  ------------------
  |  |  305|   202k|#define PFETCH(c)  do { \
  |  |  306|   202k|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|   202k|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 202k]
  |  |  ------------------
  |  |  307|   202k|  pfetch_prev = p; \
  |  |  308|   202k|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|   202k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|   202k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 202k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|   202k|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3326|   202k|	if (p > end) return ONIGERR_PREMATURE_END_OF_CHAR_CLASS;
  ------------------
  |  |  648|      0|#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS                  -103
  ------------------
  |  Branch (3326:6): [True: 0, False: 202k]
  ------------------
 3327|   202k|  if (IS_MC_ESC_CODE(c, syn)) {
  ------------------
  |  |  769|   202k|  ((code) == MC_ESC(syn) && \
  |  |  ------------------
  |  |  |  |  761|   405k|#define MC_ESC(syn)               (syn)->meta_char_table.esc
  |  |  ------------------
  |  |  |  Branch (769:4): [True: 7.39k, False: 195k]
  |  |  ------------------
  |  |  770|   202k|   !IS_SYNTAX_OP2((syn), ONIG_SYN_OP2_INEFFECTIVE_ESCAPE))
  |  |  ------------------
  |  |  |  |  331|  7.39k|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (770:4): [True: 7.39k, False: 0]
  |  |  ------------------
  ------------------
 3328|  7.39k|    if (PEND) return ONIGERR_END_PATTERN_AT_ESCAPE;
  ------------------
  |  |  299|  7.39k|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 7.39k]
  |  |  |  Branch (299:23): [True: 7.39k, False: 0]
  |  |  ------------------
  ------------------
                  if (PEND) return ONIGERR_END_PATTERN_AT_ESCAPE;
  ------------------
  |  |  649|      0|#define ONIGERR_END_PATTERN_AT_ESCAPE                        -104
  ------------------
 3329|       |
 3330|  7.39k|    tok->backp = p;
 3331|  7.39k|    PFETCH(c);
  ------------------
  |  |  305|  7.39k|#define PFETCH(c)  do { \
  |  |  306|  7.39k|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|  7.39k|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 7.39k]
  |  |  ------------------
  |  |  307|  7.39k|  pfetch_prev = p; \
  |  |  308|  7.39k|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|  7.39k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|  7.39k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 7.39k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|  7.39k|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3332|       |
 3333|  7.39k|    tok->u.c = c;
 3334|  7.39k|    tok->escaped = 1;
 3335|  7.39k|    switch (c) {
 3336|      0|    case '*':
  ------------------
  |  Branch (3336:5): [True: 0, False: 7.39k]
  ------------------
 3337|      0|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF)) break;
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3337:11): [True: 0, False: 0]
  ------------------
 3338|      0|      tok->type = TK_OP_REPEAT;
 3339|      0|      tok->u.repeat.lower = 0;
 3340|      0|      tok->u.repeat.upper = REPEAT_INFINITE;
  ------------------
  |  |  421|      0|#define REPEAT_INFINITE         -1
  ------------------
 3341|      0|      goto greedy_check;
 3342|      0|      break;
 3343|       |
 3344|      0|    case '+':
  ------------------
  |  Branch (3344:5): [True: 0, False: 7.39k]
  ------------------
 3345|      0|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_PLUS_ONE_INF)) break;
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3345:11): [True: 0, False: 0]
  ------------------
 3346|      0|      tok->type = TK_OP_REPEAT;
 3347|      0|      tok->u.repeat.lower = 1;
 3348|      0|      tok->u.repeat.upper = REPEAT_INFINITE;
  ------------------
  |  |  421|      0|#define REPEAT_INFINITE         -1
  ------------------
 3349|      0|      goto greedy_check;
 3350|      0|      break;
 3351|       |
 3352|      0|    case '?':
  ------------------
  |  Branch (3352:5): [True: 0, False: 7.39k]
  ------------------
 3353|      0|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_QMARK_ZERO_ONE)) break;
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3353:11): [True: 0, False: 0]
  ------------------
 3354|      0|      tok->type = TK_OP_REPEAT;
 3355|      0|      tok->u.repeat.lower = 0;
 3356|      0|      tok->u.repeat.upper = 1;
 3357|  12.3k|    greedy_check:
 3358|  12.3k|      if (!PEND && PPEEK_IS('?') &&
  ------------------
  |  |  299|  24.6k|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 11.0k, False: 1.23k]
  |  |  ------------------
  ------------------
                    if (!PEND && PPEEK_IS('?') &&
  ------------------
  |  |  320|  23.4k|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|  11.0k|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|  11.0k|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 11.0k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 411, False: 10.6k]
  |  |  ------------------
  ------------------
  |  Branch (3358:11): [True: 11.0k, False: 1.23k]
  ------------------
 3359|  12.3k|	  IS_SYNTAX_OP(syn, ONIG_SYN_OP_QMARK_NON_GREEDY)) {
  ------------------
  |  |  330|    411|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (330:35): [True: 411, False: 0]
  |  |  ------------------
  ------------------
 3360|    411|	PFETCH(c);
  ------------------
  |  |  305|    411|#define PFETCH(c)  do { \
  |  |  306|    411|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|    411|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 411]
  |  |  ------------------
  |  |  307|    411|  pfetch_prev = p; \
  |  |  308|    411|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|    411|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|    411|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 411]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|    411|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3361|    411|	tok->u.repeat.greedy     = 0;
 3362|    411|	tok->u.repeat.possessive = 0;
 3363|    411|      }
 3364|  11.9k|      else {
 3365|  11.9k|      possessive_check:
 3366|  11.9k|	if (!PEND && PPEEK_IS('+') &&
  ------------------
  |  |  299|  23.8k|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 10.6k, False: 1.23k]
  |  |  ------------------
  ------------------
              	if (!PEND && PPEEK_IS('+') &&
  ------------------
  |  |  320|  22.6k|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|  10.6k|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|  10.6k|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 10.6k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 0, False: 10.6k]
  |  |  ------------------
  ------------------
  |  Branch (3366:6): [True: 10.6k, False: 1.23k]
  ------------------
 3367|  11.9k|	    ((IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT) &&
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3368|      0|	      tok->type != TK_INTERVAL)  ||
  ------------------
  |  Branch (3368:8): [True: 0, False: 0]
  ------------------
 3369|      0|	     (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL) &&
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3370|      0|	      tok->type == TK_INTERVAL))) {
  ------------------
  |  Branch (3370:8): [True: 0, False: 0]
  ------------------
 3371|      0|	  PFETCH(c);
  ------------------
  |  |  305|      0|#define PFETCH(c)  do { \
  |  |  306|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  307|      0|  pfetch_prev = p; \
  |  |  308|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3372|      0|	  tok->u.repeat.greedy     = 1;
 3373|      0|	  tok->u.repeat.possessive = 1;
 3374|      0|	}
 3375|  11.9k|	else {
 3376|  11.9k|	  tok->u.repeat.greedy     = 1;
 3377|  11.9k|	  tok->u.repeat.possessive = 0;
 3378|  11.9k|	}
 3379|  11.9k|      }
 3380|  12.3k|      break;
 3381|       |
 3382|  12.3k|    case '{':
  ------------------
  |  Branch (3382:5): [True: 0, False: 7.39k]
  ------------------
 3383|      0|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_BRACE_INTERVAL)) break;
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3383:11): [True: 0, False: 0]
  ------------------
 3384|      0|      r = fetch_range_quantifier(&p, end, tok, env);
 3385|      0|      if (r < 0) return r;  /* error */
  ------------------
  |  Branch (3385:11): [True: 0, False: 0]
  ------------------
 3386|      0|      if (r == 0) goto greedy_check;
  ------------------
  |  Branch (3386:11): [True: 0, False: 0]
  ------------------
 3387|      0|      else if (r == 2) { /* {n} */
  ------------------
  |  Branch (3387:16): [True: 0, False: 0]
  ------------------
 3388|      0|	if (IS_SYNTAX_BV(syn, ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY))
  ------------------
  |  |  332|      0|#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
  |  |  ------------------
  |  |  |  Branch (332:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3389|      0|	  goto possessive_check;
 3390|       |
 3391|      0|	goto greedy_check;
 3392|      0|      }
 3393|       |      /* r == 1 : normal char */
 3394|      0|      break;
 3395|       |
 3396|      0|    case '|':
  ------------------
  |  Branch (3396:5): [True: 0, False: 7.39k]
  ------------------
 3397|      0|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_VBAR_ALT)) break;
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3397:11): [True: 0, False: 0]
  ------------------
 3398|      0|      tok->type = TK_ALT;
 3399|      0|      break;
 3400|       |
 3401|    822|    case '(':
  ------------------
  |  Branch (3401:5): [True: 822, False: 6.57k]
  ------------------
 3402|    822|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LPAREN_SUBEXP)) break;
  ------------------
  |  |  330|    822|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3402:11): [True: 822, False: 0]
  ------------------
 3403|      0|      tok->type = TK_SUBEXP_OPEN;
 3404|      0|      break;
 3405|       |
 3406|    411|    case ')':
  ------------------
  |  Branch (3406:5): [True: 411, False: 6.98k]
  ------------------
 3407|    411|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LPAREN_SUBEXP)) break;
  ------------------
  |  |  330|    411|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3407:11): [True: 411, False: 0]
  ------------------
 3408|      0|      tok->type = TK_SUBEXP_CLOSE;
 3409|      0|      break;
 3410|       |
 3411|      0|    case 'w':
  ------------------
  |  Branch (3411:5): [True: 0, False: 7.39k]
  ------------------
 3412|      0|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_W_WORD)) break;
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3412:11): [True: 0, False: 0]
  ------------------
 3413|      0|      tok->type = TK_CHAR_TYPE;
 3414|      0|      tok->u.prop.ctype = ONIGENC_CTYPE_WORD;
  ------------------
  |  |  306|      0|#define ONIGENC_CTYPE_WORD     12
  ------------------
 3415|      0|      tok->u.prop.not   = 0;
 3416|      0|      break;
 3417|       |
 3418|      0|    case 'W':
  ------------------
  |  Branch (3418:5): [True: 0, False: 7.39k]
  ------------------
 3419|      0|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_W_WORD)) break;
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3419:11): [True: 0, False: 0]
  ------------------
 3420|      0|      tok->type = TK_CHAR_TYPE;
 3421|      0|      tok->u.prop.ctype = ONIGENC_CTYPE_WORD;
  ------------------
  |  |  306|      0|#define ONIGENC_CTYPE_WORD     12
  ------------------
 3422|      0|      tok->u.prop.not   = 1;
 3423|      0|      break;
 3424|       |
 3425|    411|    case 'b':
  ------------------
  |  Branch (3425:5): [True: 411, False: 6.98k]
  ------------------
 3426|    411|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_B_WORD_BOUND)) break;
  ------------------
  |  |  330|    411|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3426:11): [True: 0, False: 411]
  ------------------
 3427|    411|      tok->type = TK_ANCHOR;
 3428|    411|      tok->u.anchor.subtype = ANCHOR_WORD_BOUND;
  ------------------
  |  |  547|    411|#define ANCHOR_WORD_BOUND       (1<<6)
  ------------------
 3429|    411|      tok->u.anchor.ascii_range = IS_ASCII_RANGE(env->option)
  ------------------
  |  |  406|    822|#define IS_ASCII_RANGE(option)    ((option) & ONIG_OPTION_ASCII_RANGE)
  |  |  ------------------
  |  |  |  |  470|    411|#define ONIG_OPTION_ASCII_RANGE          (ONIG_OPTION_NOTEOS << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  468|    411|#define ONIG_OPTION_NOTEOS               (ONIG_OPTION_NOTBOS << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  467|    411|#define ONIG_OPTION_NOTBOS               (ONIG_OPTION_NOTEOL << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|    411|#define ONIG_OPTION_NOTEOL               (ONIG_OPTION_NOTBOL << 1)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  465|    411|#define ONIG_OPTION_NOTBOL               (ONIG_OPTION_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  463|    411|#define ONIG_OPTION_CAPTURE_GROUP        (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  462|    411|#define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  461|    411|#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  460|    411|#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  459|    411|#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  458|    411|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  456|    411|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  455|    411|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  454|    411|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (406:35): [True: 411, False: 0]
  |  |  ------------------
  ------------------
 3430|    411|		&& ! IS_WORD_BOUND_ALL_RANGE(env->option);
  ------------------
  |  |  408|    822|#define IS_WORD_BOUND_ALL_RANGE(option)     ((option) & ONIG_OPTION_WORD_BOUND_ALL_RANGE)
  |  |  ------------------
  |  |  |  |  472|    411|#define ONIG_OPTION_WORD_BOUND_ALL_RANGE    (ONIG_OPTION_POSIX_BRACKET_ALL_RANGE << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  471|    411|#define ONIG_OPTION_POSIX_BRACKET_ALL_RANGE (ONIG_OPTION_ASCII_RANGE << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  470|    411|#define ONIG_OPTION_ASCII_RANGE          (ONIG_OPTION_NOTEOS << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  468|    411|#define ONIG_OPTION_NOTEOS               (ONIG_OPTION_NOTBOS << 1)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  467|    411|#define ONIG_OPTION_NOTBOS               (ONIG_OPTION_NOTEOL << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  466|    411|#define ONIG_OPTION_NOTEOL               (ONIG_OPTION_NOTBOL << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  465|    411|#define ONIG_OPTION_NOTBOL               (ONIG_OPTION_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  463|    411|#define ONIG_OPTION_CAPTURE_GROUP        (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  462|    411|#define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  461|    411|#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  460|    411|#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  459|    411|#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  458|    411|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  456|    411|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  455|    411|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  454|    411|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3430:6): [True: 0, False: 411]
  ------------------
 3431|    411|      break;
 3432|       |
 3433|      0|    case 'B':
  ------------------
  |  Branch (3433:5): [True: 0, False: 7.39k]
  ------------------
 3434|      0|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_B_WORD_BOUND)) break;
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3434:11): [True: 0, False: 0]
  ------------------
 3435|      0|      tok->type = TK_ANCHOR;
 3436|      0|      tok->u.anchor.subtype = ANCHOR_NOT_WORD_BOUND;
  ------------------
  |  |  548|      0|#define ANCHOR_NOT_WORD_BOUND   (1<<7)
  ------------------
 3437|      0|      tok->u.anchor.ascii_range = IS_ASCII_RANGE(env->option)
  ------------------
  |  |  406|      0|#define IS_ASCII_RANGE(option)    ((option) & ONIG_OPTION_ASCII_RANGE)
  |  |  ------------------
  |  |  |  |  470|      0|#define ONIG_OPTION_ASCII_RANGE          (ONIG_OPTION_NOTEOS << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  468|      0|#define ONIG_OPTION_NOTEOS               (ONIG_OPTION_NOTBOS << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  467|      0|#define ONIG_OPTION_NOTBOS               (ONIG_OPTION_NOTEOL << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define ONIG_OPTION_NOTEOL               (ONIG_OPTION_NOTBOL << 1)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  465|      0|#define ONIG_OPTION_NOTBOL               (ONIG_OPTION_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  463|      0|#define ONIG_OPTION_CAPTURE_GROUP        (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  462|      0|#define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  461|      0|#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  460|      0|#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  459|      0|#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  458|      0|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  456|      0|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  455|      0|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  454|      0|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (406:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3438|      0|		&& ! IS_WORD_BOUND_ALL_RANGE(env->option);
  ------------------
  |  |  408|      0|#define IS_WORD_BOUND_ALL_RANGE(option)     ((option) & ONIG_OPTION_WORD_BOUND_ALL_RANGE)
  |  |  ------------------
  |  |  |  |  472|      0|#define ONIG_OPTION_WORD_BOUND_ALL_RANGE    (ONIG_OPTION_POSIX_BRACKET_ALL_RANGE << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  471|      0|#define ONIG_OPTION_POSIX_BRACKET_ALL_RANGE (ONIG_OPTION_ASCII_RANGE << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  470|      0|#define ONIG_OPTION_ASCII_RANGE          (ONIG_OPTION_NOTEOS << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  468|      0|#define ONIG_OPTION_NOTEOS               (ONIG_OPTION_NOTBOS << 1)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  467|      0|#define ONIG_OPTION_NOTBOS               (ONIG_OPTION_NOTEOL << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  466|      0|#define ONIG_OPTION_NOTEOL               (ONIG_OPTION_NOTBOL << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  465|      0|#define ONIG_OPTION_NOTBOL               (ONIG_OPTION_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  463|      0|#define ONIG_OPTION_CAPTURE_GROUP        (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  462|      0|#define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  461|      0|#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  460|      0|#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  459|      0|#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  458|      0|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  456|      0|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  455|      0|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  454|      0|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3438:6): [True: 0, False: 0]
  ------------------
 3439|      0|      break;
 3440|       |
 3441|      0|#ifdef USE_WORD_BEGIN_END
 3442|      0|    case '<':
  ------------------
  |  Branch (3442:5): [True: 0, False: 7.39k]
  ------------------
 3443|      0|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END)) break;
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3443:11): [True: 0, False: 0]
  ------------------
 3444|      0|      tok->type = TK_ANCHOR;
 3445|      0|      tok->u.anchor.subtype = ANCHOR_WORD_BEGIN;
  ------------------
  |  |  549|      0|#define ANCHOR_WORD_BEGIN       (1<<8)
  ------------------
 3446|      0|      tok->u.anchor.ascii_range = IS_ASCII_RANGE(env->option);
  ------------------
  |  |  406|      0|#define IS_ASCII_RANGE(option)    ((option) & ONIG_OPTION_ASCII_RANGE)
  |  |  ------------------
  |  |  |  |  470|      0|#define ONIG_OPTION_ASCII_RANGE          (ONIG_OPTION_NOTEOS << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  468|      0|#define ONIG_OPTION_NOTEOS               (ONIG_OPTION_NOTBOS << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  467|      0|#define ONIG_OPTION_NOTBOS               (ONIG_OPTION_NOTEOL << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define ONIG_OPTION_NOTEOL               (ONIG_OPTION_NOTBOL << 1)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  465|      0|#define ONIG_OPTION_NOTBOL               (ONIG_OPTION_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  463|      0|#define ONIG_OPTION_CAPTURE_GROUP        (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  462|      0|#define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  461|      0|#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  460|      0|#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  459|      0|#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  458|      0|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  456|      0|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  455|      0|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  454|      0|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3447|      0|      break;
 3448|       |
 3449|      0|    case '>':
  ------------------
  |  Branch (3449:5): [True: 0, False: 7.39k]
  ------------------
 3450|      0|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END)) break;
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3450:11): [True: 0, False: 0]
  ------------------
 3451|      0|      tok->type = TK_ANCHOR;
 3452|      0|      tok->u.anchor.subtype = ANCHOR_WORD_END;
  ------------------
  |  |  550|      0|#define ANCHOR_WORD_END         (1<<9)
  ------------------
 3453|      0|      tok->u.anchor.ascii_range = IS_ASCII_RANGE(env->option);
  ------------------
  |  |  406|      0|#define IS_ASCII_RANGE(option)    ((option) & ONIG_OPTION_ASCII_RANGE)
  |  |  ------------------
  |  |  |  |  470|      0|#define ONIG_OPTION_ASCII_RANGE          (ONIG_OPTION_NOTEOS << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  468|      0|#define ONIG_OPTION_NOTEOS               (ONIG_OPTION_NOTBOS << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  467|      0|#define ONIG_OPTION_NOTBOS               (ONIG_OPTION_NOTEOL << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define ONIG_OPTION_NOTEOL               (ONIG_OPTION_NOTBOL << 1)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  465|      0|#define ONIG_OPTION_NOTBOL               (ONIG_OPTION_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  463|      0|#define ONIG_OPTION_CAPTURE_GROUP        (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  462|      0|#define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  461|      0|#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  460|      0|#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  459|      0|#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  458|      0|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  456|      0|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  455|      0|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  454|      0|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3454|      0|      break;
 3455|      0|#endif
 3456|       |
 3457|  2.05k|    case 's':
  ------------------
  |  Branch (3457:5): [True: 2.05k, False: 5.34k]
  ------------------
 3458|  2.05k|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_S_WHITE_SPACE)) break;
  ------------------
  |  |  330|  2.05k|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3458:11): [True: 0, False: 2.05k]
  ------------------
 3459|  2.05k|      tok->type = TK_CHAR_TYPE;
 3460|  2.05k|      tok->u.prop.ctype = ONIGENC_CTYPE_SPACE;
  ------------------
  |  |  303|  2.05k|#define ONIGENC_CTYPE_SPACE     9
  ------------------
 3461|  2.05k|      tok->u.prop.not   = 0;
 3462|  2.05k|      break;
 3463|       |
 3464|      0|    case 'S':
  ------------------
  |  Branch (3464:5): [True: 0, False: 7.39k]
  ------------------
 3465|      0|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_S_WHITE_SPACE)) break;
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3465:11): [True: 0, False: 0]
  ------------------
 3466|      0|      tok->type = TK_CHAR_TYPE;
 3467|      0|      tok->u.prop.ctype = ONIGENC_CTYPE_SPACE;
  ------------------
  |  |  303|      0|#define ONIGENC_CTYPE_SPACE     9
  ------------------
 3468|      0|      tok->u.prop.not   = 1;
 3469|      0|      break;
 3470|       |
 3471|  1.64k|    case 'd':
  ------------------
  |  Branch (3471:5): [True: 1.64k, False: 5.75k]
  ------------------
 3472|  1.64k|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_D_DIGIT)) break;
  ------------------
  |  |  330|  1.64k|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3472:11): [True: 0, False: 1.64k]
  ------------------
 3473|  1.64k|      tok->type = TK_CHAR_TYPE;
 3474|  1.64k|      tok->u.prop.ctype = ONIGENC_CTYPE_DIGIT;
  ------------------
  |  |  298|  1.64k|#define ONIGENC_CTYPE_DIGIT     4
  ------------------
 3475|  1.64k|      tok->u.prop.not   = 0;
 3476|  1.64k|      break;
 3477|       |
 3478|      0|    case 'D':
  ------------------
  |  Branch (3478:5): [True: 0, False: 7.39k]
  ------------------
 3479|      0|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_D_DIGIT)) break;
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3479:11): [True: 0, False: 0]
  ------------------
 3480|      0|      tok->type = TK_CHAR_TYPE;
 3481|      0|      tok->u.prop.ctype = ONIGENC_CTYPE_DIGIT;
  ------------------
  |  |  298|      0|#define ONIGENC_CTYPE_DIGIT     4
  ------------------
 3482|      0|      tok->u.prop.not   = 1;
 3483|      0|      break;
 3484|       |
 3485|      0|    case 'h':
  ------------------
  |  Branch (3485:5): [True: 0, False: 7.39k]
  ------------------
 3486|      0|      if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_H_XDIGIT)) break;
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  ------------------
  |  Branch (3486:11): [True: 0, False: 0]
  ------------------
 3487|      0|      tok->type = TK_CHAR_TYPE;
 3488|      0|      tok->u.prop.ctype = ONIGENC_CTYPE_XDIGIT;
  ------------------
  |  |  305|      0|#define ONIGENC_CTYPE_XDIGIT   11
  ------------------
 3489|      0|      tok->u.prop.not   = 0;
 3490|      0|      break;
 3491|       |
 3492|      0|    case 'H':
  ------------------
  |  Branch (3492:5): [True: 0, False: 7.39k]
  ------------------
 3493|      0|      if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_H_XDIGIT)) break;
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  ------------------
  |  Branch (3493:11): [True: 0, False: 0]
  ------------------
 3494|      0|      tok->type = TK_CHAR_TYPE;
 3495|      0|      tok->u.prop.ctype = ONIGENC_CTYPE_XDIGIT;
  ------------------
  |  |  305|      0|#define ONIGENC_CTYPE_XDIGIT   11
  ------------------
 3496|      0|      tok->u.prop.not   = 1;
 3497|      0|      break;
 3498|       |
 3499|      0|    case 'A':
  ------------------
  |  Branch (3499:5): [True: 0, False: 7.39k]
  ------------------
 3500|      0|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR)) break;
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3500:11): [True: 0, False: 0]
  ------------------
 3501|      0|    begin_buf:
 3502|      0|      tok->type = TK_ANCHOR;
 3503|      0|      tok->u.anchor.subtype = ANCHOR_BEGIN_BUF;
  ------------------
  |  |  540|      0|#define ANCHOR_BEGIN_BUF        (1<<0)
  ------------------
 3504|      0|      break;
 3505|       |
 3506|      0|    case 'Z':
  ------------------
  |  Branch (3506:5): [True: 0, False: 7.39k]
  ------------------
 3507|      0|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR)) break;
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3507:11): [True: 0, False: 0]
  ------------------
 3508|      0|      tok->type = TK_ANCHOR;
 3509|      0|      tok->u.anchor.subtype = ANCHOR_SEMI_END_BUF;
  ------------------
  |  |  544|      0|#define ANCHOR_SEMI_END_BUF     (1<<4)
  ------------------
 3510|      0|      break;
 3511|       |
 3512|      0|    case 'z':
  ------------------
  |  Branch (3512:5): [True: 0, False: 7.39k]
  ------------------
 3513|      0|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR)) break;
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3513:11): [True: 0, False: 0]
  ------------------
 3514|      0|    end_buf:
 3515|      0|      tok->type = TK_ANCHOR;
 3516|      0|      tok->u.anchor.subtype = ANCHOR_END_BUF;
  ------------------
  |  |  543|      0|#define ANCHOR_END_BUF          (1<<3)
  ------------------
 3517|      0|      break;
 3518|       |
 3519|      0|    case 'G':
  ------------------
  |  Branch (3519:5): [True: 0, False: 7.39k]
  ------------------
 3520|      0|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR)) break;
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3520:11): [True: 0, False: 0]
  ------------------
 3521|      0|      tok->type = TK_ANCHOR;
 3522|      0|      tok->u.anchor.subtype = ANCHOR_BEGIN_POSITION;
  ------------------
  |  |  542|      0|#define ANCHOR_BEGIN_POSITION   (1<<2)
  ------------------
 3523|      0|      break;
 3524|       |
 3525|      0|    case '`':
  ------------------
  |  Branch (3525:5): [True: 0, False: 7.39k]
  ------------------
 3526|      0|      if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR)) break;
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  ------------------
  |  Branch (3526:11): [True: 0, False: 0]
  ------------------
 3527|      0|      goto begin_buf;
 3528|      0|      break;
 3529|       |
 3530|      0|    case '\'':
  ------------------
  |  Branch (3530:5): [True: 0, False: 7.39k]
  ------------------
 3531|      0|      if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR)) break;
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  ------------------
  |  Branch (3531:11): [True: 0, False: 0]
  ------------------
 3532|      0|      goto end_buf;
 3533|      0|      break;
 3534|       |
 3535|      0|    case 'x':
  ------------------
  |  Branch (3535:5): [True: 0, False: 7.39k]
  ------------------
 3536|      0|      if (PEND) break;
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 0]
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3537|       |
 3538|      0|      prev = p;
 3539|      0|      if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_BRACE_HEX8)) {
  ------------------
  |  |  320|      0|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                    if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_BRACE_HEX8)) {
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (330:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3540|      0|	PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3541|      0|	num = scan_unsigned_hexadecimal_number(&p, end, 0, 8, enc);
 3542|      0|	if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
  ------------------
  |  |  694|      0|#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE                      -401
  ------------------
  |  Branch (3542:6): [True: 0, False: 0]
  ------------------
 3543|      0|	if (!PEND) {
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (3543:6): [True: 0, False: 0]
  ------------------
 3544|      0|	  if (ONIGENC_IS_CODE_XDIGIT(enc, PPEEK))
  ------------------
  |  |  402|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT)
  |  |  ------------------
  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (375:48): [True: 0, False: 0]
  |  |  |  |  |  Branch (375:69): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3545|      0|	    return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
  ------------------
  |  |  681|      0|#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE                     -212
  ------------------
 3546|      0|	}
 3547|       |
 3548|      0|	if ((p > prev + enclen(enc, prev, end)) && !PEND && PPEEK_IS('}')) {
  ------------------
  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  ------------------
  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  ------------------
  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	if ((p > prev + enclen(enc, prev, end)) && !PEND && PPEEK_IS('}')) {
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	if ((p > prev + enclen(enc, prev, end)) && !PEND && PPEEK_IS('}')) {
  ------------------
  |  |  320|      0|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (3548:6): [True: 0, False: 0]
  |  Branch (3548:45): [True: 0, False: 0]
  ------------------
 3549|      0|	  PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3550|      0|	  tok->type   = TK_CODE_POINT;
 3551|      0|	  tok->u.code = (OnigCodePoint )num;
 3552|      0|	}
 3553|      0|	else {
 3554|       |	  /* can't read nothing or invalid format */
 3555|      0|	  p = prev;
 3556|      0|	}
 3557|      0|      }
 3558|      0|      else if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_HEX2)) {
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (330:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3559|      0|	num = scan_unsigned_hexadecimal_number(&p, end, 0, 2, enc);
 3560|      0|	if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
  ------------------
  |  |  669|      0|#define ONIGERR_TOO_BIG_NUMBER                               -200
  ------------------
  |  Branch (3560:6): [True: 0, False: 0]
  ------------------
 3561|      0|	if (p == prev) {  /* can't read nothing. */
  ------------------
  |  Branch (3561:6): [True: 0, False: 0]
  ------------------
 3562|      0|	  num = 0; /* but, it's not error */
 3563|      0|	}
 3564|      0|	tok->type = TK_RAW_BYTE;
 3565|      0|	tok->base = 16;
 3566|      0|	tok->u.c  = num;
 3567|      0|      }
 3568|      0|      break;
 3569|       |
 3570|      0|    case 'u':
  ------------------
  |  Branch (3570:5): [True: 0, False: 7.39k]
  ------------------
 3571|      0|      if (PEND) break;
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 0]
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3572|       |
 3573|      0|      prev = p;
 3574|      0|      if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_U_HEX4)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3575|      0|	num = scan_unsigned_hexadecimal_number(&p, end, 4, 4, enc);
 3576|      0|	if (num < -1) return ONIGERR_TOO_SHORT_DIGITS;
  ------------------
  |  |  680|      0|#define ONIGERR_TOO_SHORT_DIGITS                             -211
  ------------------
  |  Branch (3576:6): [True: 0, False: 0]
  ------------------
 3577|      0|	else if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
  ------------------
  |  |  669|      0|#define ONIGERR_TOO_BIG_NUMBER                               -200
  ------------------
  |  Branch (3577:11): [True: 0, False: 0]
  ------------------
 3578|      0|	if (p == prev) {  /* can't read nothing. */
  ------------------
  |  Branch (3578:6): [True: 0, False: 0]
  ------------------
 3579|      0|	  num = 0; /* but, it's not error */
 3580|      0|	}
 3581|      0|	tok->type   = TK_CODE_POINT;
 3582|      0|	tok->base   = 16;
 3583|      0|	tok->u.code = (OnigCodePoint )num;
 3584|      0|      }
 3585|      0|      break;
 3586|       |
 3587|      0|    case 'o':
  ------------------
  |  Branch (3587:5): [True: 0, False: 7.39k]
  ------------------
 3588|      0|      if (PEND) break;
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 0]
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3589|       |
 3590|      0|      prev = p;
 3591|      0|      if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_O_BRACE_OCTAL)) {
  ------------------
  |  |  320|      0|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                    if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_O_BRACE_OCTAL)) {
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (330:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3592|      0|	PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3593|      0|	num = scan_unsigned_octal_number(&p, end, 11, enc);
 3594|      0|	if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
  ------------------
  |  |  694|      0|#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE                      -401
  ------------------
  |  Branch (3594:6): [True: 0, False: 0]
  ------------------
 3595|      0|	if (!PEND) {
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (3595:6): [True: 0, False: 0]
  ------------------
 3596|      0|	  OnigCodePoint c = PPEEK;
  ------------------
  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  ------------------
  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  ------------------
  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3597|      0|	  if (ONIGENC_IS_CODE_DIGIT(enc, c) && c < '8')
  ------------------
  |  |  400|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)
  |  |  ------------------
  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (375:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3597:41): [True: 0, False: 0]
  ------------------
 3598|      0|	    return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
  ------------------
  |  |  681|      0|#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE                     -212
  ------------------
 3599|      0|	}
 3600|       |
 3601|      0|	if ((p > prev + enclen(enc, prev, end)) && !PEND && PPEEK_IS('}')) {
  ------------------
  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  ------------------
  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  ------------------
  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	if ((p > prev + enclen(enc, prev, end)) && !PEND && PPEEK_IS('}')) {
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	if ((p > prev + enclen(enc, prev, end)) && !PEND && PPEEK_IS('}')) {
  ------------------
  |  |  320|      0|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (3601:6): [True: 0, False: 0]
  |  Branch (3601:45): [True: 0, False: 0]
  ------------------
 3602|      0|	  PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3603|      0|	  tok->type   = TK_CODE_POINT;
 3604|      0|	  tok->u.code = (OnigCodePoint )num;
 3605|      0|	}
 3606|      0|	else {
 3607|       |	  /* can't read nothing or invalid format */
 3608|      0|	  p = prev;
 3609|      0|	}
 3610|      0|      }
 3611|      0|      break;
 3612|       |
 3613|      0|    case '1': case '2': case '3': case '4':
  ------------------
  |  Branch (3613:5): [True: 0, False: 7.39k]
  |  Branch (3613:15): [True: 0, False: 7.39k]
  |  Branch (3613:25): [True: 0, False: 7.39k]
  |  Branch (3613:35): [True: 0, False: 7.39k]
  ------------------
 3614|      0|    case '5': case '6': case '7': case '8': case '9':
  ------------------
  |  Branch (3614:5): [True: 0, False: 7.39k]
  |  Branch (3614:15): [True: 0, False: 7.39k]
  |  Branch (3614:25): [True: 0, False: 7.39k]
  |  Branch (3614:35): [True: 0, False: 7.39k]
  |  Branch (3614:45): [True: 0, False: 7.39k]
  ------------------
 3615|      0|      PUNFETCH;
  ------------------
  |  |  300|      0|#define PUNFETCH     p = pfetch_prev
  ------------------
 3616|      0|      prev = p;
 3617|      0|      num = onig_scan_unsigned_number(&p, end, enc);
 3618|      0|      if (num < 0 || num > ONIG_MAX_BACKREF_NUM) {
  ------------------
  |  |  442|      0|#define ONIG_MAX_BACKREF_NUM                1000
  ------------------
  |  Branch (3618:11): [True: 0, False: 0]
  |  Branch (3618:22): [True: 0, False: 0]
  ------------------
 3619|      0|	goto skip_backref;
 3620|      0|      }
 3621|       |
 3622|      0|      if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_DECIMAL_BACKREF) &&
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (330:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3623|      0|	  (num <= env->num_mem || num <= 9)) { /* This spec. from GNU regex */
  ------------------
  |  Branch (3623:5): [True: 0, False: 0]
  |  Branch (3623:28): [True: 0, False: 0]
  ------------------
 3624|      0|	if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) {
  ------------------
  |  |  332|      0|#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
  |  |  ------------------
  |  |  |  Branch (332:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3625|      0|	  if (num > env->num_mem || IS_NULL(SCANENV_MEM_NODES(env)[num]))
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  Branch (311:49): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (3625:8): [True: 0, False: 0]
  ------------------
 3626|      0|	    return ONIGERR_INVALID_BACKREF;
  ------------------
  |  |  677|      0|#define ONIGERR_INVALID_BACKREF                              -208
  ------------------
 3627|      0|	}
 3628|       |
 3629|      0|	tok->type = TK_BACKREF;
 3630|      0|	tok->u.backref.num     = 1;
 3631|      0|	tok->u.backref.ref1    = num;
 3632|      0|	tok->u.backref.by_name = 0;
 3633|      0|#ifdef USE_BACKREF_WITH_LEVEL
 3634|      0|	tok->u.backref.exist_level = 0;
 3635|      0|#endif
 3636|      0|	break;
 3637|      0|      }
 3638|       |
 3639|      0|    skip_backref:
 3640|      0|      if (c == '8' || c == '9') {
  ------------------
  |  Branch (3640:11): [True: 0, False: 0]
  |  Branch (3640:23): [True: 0, False: 0]
  ------------------
 3641|       |	/* normal char */
 3642|      0|	p = prev; PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3643|      0|	break;
 3644|      0|      }
 3645|       |
 3646|      0|      p = prev;
 3647|       |      /* fall through */
 3648|      0|    case '0':
  ------------------
  |  Branch (3648:5): [True: 0, False: 7.39k]
  ------------------
 3649|      0|      if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_OCTAL3)) {
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (330:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3650|      0|	prev = p;
 3651|      0|	num = scan_unsigned_octal_number(&p, end, (c == '0' ? 2:3), enc);
  ------------------
  |  Branch (3651:45): [True: 0, False: 0]
  ------------------
 3652|      0|	if (num < 0 || 0xff < num) return ONIGERR_TOO_BIG_NUMBER;
  ------------------
  |  |  669|      0|#define ONIGERR_TOO_BIG_NUMBER                               -200
  ------------------
  |  Branch (3652:6): [True: 0, False: 0]
  |  Branch (3652:17): [True: 0, False: 0]
  ------------------
 3653|      0|	if (p == prev) {  /* can't read nothing. */
  ------------------
  |  Branch (3653:6): [True: 0, False: 0]
  ------------------
 3654|      0|	  num = 0; /* but, it's not error */
 3655|      0|	}
 3656|      0|	tok->type = TK_RAW_BYTE;
 3657|      0|	tok->base = 8;
 3658|      0|	tok->u.c  = num;
 3659|      0|      }
 3660|      0|      else if (c != '0') {
  ------------------
  |  Branch (3660:16): [True: 0, False: 0]
  ------------------
 3661|      0|	PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3662|      0|      }
 3663|      0|      break;
 3664|       |
 3665|      0|#ifdef USE_NAMED_GROUP
 3666|      0|    case 'k':
  ------------------
  |  Branch (3666:5): [True: 0, False: 7.39k]
  ------------------
 3667|      0|      if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_K_NAMED_BACKREF)) {
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                    if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_K_NAMED_BACKREF)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (3667:11): [True: 0, False: 0]
  ------------------
 3668|      0|	PFETCH(c);
  ------------------
  |  |  305|      0|#define PFETCH(c)  do { \
  |  |  306|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  307|      0|  pfetch_prev = p; \
  |  |  308|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3669|      0|	if (c == '<' || c == '\'') {
  ------------------
  |  Branch (3669:6): [True: 0, False: 0]
  |  Branch (3669:18): [True: 0, False: 0]
  ------------------
 3670|      0|	  r = fetch_named_backref_token(c, tok, &p, end, env);
 3671|      0|	  if (r < 0) return r;
  ------------------
  |  Branch (3671:8): [True: 0, False: 0]
  ------------------
 3672|      0|	}
 3673|      0|	else {
 3674|      0|	  PUNFETCH;
  ------------------
  |  |  300|      0|#define PUNFETCH     p = pfetch_prev
  ------------------
 3675|      0|	  onig_syntax_warn(env, "invalid back reference");
 3676|      0|	}
 3677|      0|      }
 3678|      0|      break;
 3679|      0|#endif
 3680|       |
 3681|      0|#if defined(USE_SUBEXP_CALL) || defined(USE_NAMED_GROUP)
 3682|      0|    case 'g':
  ------------------
  |  Branch (3682:5): [True: 0, False: 7.39k]
  ------------------
 3683|      0|# ifdef USE_NAMED_GROUP
 3684|      0|      if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_G_BRACE_BACKREF)) {
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                    if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_G_BRACE_BACKREF)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (3684:11): [True: 0, False: 0]
  ------------------
 3685|      0|	PFETCH(c);
  ------------------
  |  |  305|      0|#define PFETCH(c)  do { \
  |  |  306|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  307|      0|  pfetch_prev = p; \
  |  |  308|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3686|      0|	if (c == '{') {
  ------------------
  |  Branch (3686:6): [True: 0, False: 0]
  ------------------
 3687|      0|	  r = fetch_named_backref_token(c, tok, &p, end, env);
 3688|      0|	  if (r < 0) return r;
  ------------------
  |  Branch (3688:8): [True: 0, False: 0]
  ------------------
 3689|      0|	}
 3690|      0|	else
 3691|      0|	  PUNFETCH;
  ------------------
  |  |  300|      0|#define PUNFETCH     p = pfetch_prev
  ------------------
 3692|      0|      }
 3693|      0|# endif
 3694|      0|# ifdef USE_SUBEXP_CALL
 3695|      0|      if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_G_SUBEXP_CALL)) {
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                    if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_G_SUBEXP_CALL)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (3695:11): [True: 0, False: 0]
  ------------------
 3696|      0|	PFETCH(c);
  ------------------
  |  |  305|      0|#define PFETCH(c)  do { \
  |  |  306|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  307|      0|  pfetch_prev = p; \
  |  |  308|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3697|      0|	if (c == '<' || c == '\'') {
  ------------------
  |  Branch (3697:6): [True: 0, False: 0]
  |  Branch (3697:18): [True: 0, False: 0]
  ------------------
 3698|      0|	  int gnum = -1, rel = 0;
 3699|      0|	  UChar* name_end;
  ------------------
  |  |   76|      0|# define UChar OnigUChar
  ------------------
 3700|      0|	  OnigCodePoint cnext;
 3701|       |
 3702|      0|	  cnext = PPEEK;
  ------------------
  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  ------------------
  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  ------------------
  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3703|      0|	  if (cnext == '0') {
  ------------------
  |  Branch (3703:8): [True: 0, False: 0]
  ------------------
 3704|      0|	    PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3705|      0|	    if (PPEEK_IS(get_name_end_code_point(c))) {  /* \g<0>, \g'0' */
  ------------------
  |  |  320|      0|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3706|      0|	      PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3707|      0|	      name_end = p;
 3708|      0|	      gnum = 0;
 3709|      0|	    }
 3710|      0|	  }
 3711|      0|	  else if (cnext == '+') {
  ------------------
  |  Branch (3711:13): [True: 0, False: 0]
  ------------------
 3712|      0|	    PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3713|      0|	    rel = 1;
 3714|      0|	  }
 3715|      0|	  prev = p;
 3716|      0|	  if (gnum < 0) {
  ------------------
  |  Branch (3716:8): [True: 0, False: 0]
  ------------------
 3717|      0|	    r = fetch_name((OnigCodePoint )c, &p, end, &name_end, env, &gnum, 1);
 3718|      0|	    if (r < 0) return r;
  ------------------
  |  Branch (3718:10): [True: 0, False: 0]
  ------------------
 3719|      0|	  }
 3720|       |
 3721|      0|	  tok->type = TK_CALL;
 3722|      0|	  tok->u.call.name     = prev;
 3723|      0|	  tok->u.call.name_end = name_end;
 3724|      0|	  tok->u.call.gnum     = gnum;
 3725|      0|	  tok->u.call.rel      = rel;
 3726|      0|	}
 3727|      0|	else {
 3728|      0|	  onig_syntax_warn(env, "invalid subexp call");
 3729|      0|	  PUNFETCH;
  ------------------
  |  |  300|      0|#define PUNFETCH     p = pfetch_prev
  ------------------
 3730|      0|	}
 3731|      0|      }
 3732|      0|# endif
 3733|      0|      break;
 3734|      0|#endif
 3735|       |
 3736|      0|    case 'Q':
  ------------------
  |  Branch (3736:5): [True: 0, False: 7.39k]
  ------------------
 3737|      0|      if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3738|      0|	tok->type = TK_QUOTE_OPEN;
 3739|      0|      }
 3740|      0|      break;
 3741|       |
 3742|      0|    case 'p':
  ------------------
  |  Branch (3742:5): [True: 0, False: 7.39k]
  ------------------
 3743|      0|    case 'P':
  ------------------
  |  Branch (3743:5): [True: 0, False: 7.39k]
  ------------------
 3744|      0|      if (PPEEK_IS('{') &&
  ------------------
  |  |  320|      0|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3745|      0|	  IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3746|      0|	PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3747|      0|	tok->type = TK_CHAR_PROPERTY;
 3748|      0|	tok->u.prop.not = (c == 'P' ? 1 : 0);
  ------------------
  |  Branch (3748:21): [True: 0, False: 0]
  ------------------
 3749|       |
 3750|      0|	if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) {
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (3750:6): [True: 0, False: 0]
  ------------------
 3751|      0|	  PFETCH(c);
  ------------------
  |  |  305|      0|#define PFETCH(c)  do { \
  |  |  306|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  307|      0|  pfetch_prev = p; \
  |  |  308|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3752|      0|	  if (c == '^') {
  ------------------
  |  Branch (3752:8): [True: 0, False: 0]
  ------------------
 3753|      0|	    tok->u.prop.not = (tok->u.prop.not == 0 ? 1 : 0);
  ------------------
  |  Branch (3753:25): [True: 0, False: 0]
  ------------------
 3754|      0|	  }
 3755|      0|	  else
 3756|      0|	    PUNFETCH;
  ------------------
  |  |  300|      0|#define PUNFETCH     p = pfetch_prev
  ------------------
 3757|      0|	}
 3758|      0|      }
 3759|      0|      else {
 3760|      0|	onig_syntax_warn(env, "invalid Unicode Property \\%c", c);
 3761|      0|      }
 3762|      0|      break;
 3763|       |
 3764|      0|    case 'R':
  ------------------
  |  Branch (3764:5): [True: 0, False: 7.39k]
  ------------------
 3765|      0|      if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3766|      0|	tok->type = TK_LINEBREAK;
 3767|      0|      }
 3768|      0|      break;
 3769|       |
 3770|      0|    case 'X':
  ------------------
  |  Branch (3770:5): [True: 0, False: 7.39k]
  ------------------
 3771|      0|      if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3772|      0|	tok->type = TK_EXTENDED_GRAPHEME_CLUSTER;
 3773|      0|      }
 3774|      0|      break;
 3775|       |
 3776|      0|    case 'K':
  ------------------
  |  Branch (3776:5): [True: 0, False: 7.39k]
  ------------------
 3777|      0|      if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3778|      0|	tok->type = TK_KEEP;
 3779|      0|      }
 3780|      0|      break;
 3781|       |
 3782|  2.05k|    default:
  ------------------
  |  Branch (3782:5): [True: 2.05k, False: 5.34k]
  ------------------
 3783|  2.05k|      {
 3784|  2.05k|	OnigCodePoint c2;
 3785|       |
 3786|  2.05k|	PUNFETCH;
  ------------------
  |  |  300|  2.05k|#define PUNFETCH     p = pfetch_prev
  ------------------
 3787|  2.05k|	num = fetch_escaped_value(&p, end, env, &c2);
 3788|  2.05k|	if (num < 0) return num;
  ------------------
  |  Branch (3788:6): [True: 0, False: 2.05k]
  ------------------
 3789|       |	/* set_raw: */
 3790|  2.05k|	if ((OnigCodePoint )tok->u.c != c2) {
  ------------------
  |  Branch (3790:6): [True: 0, False: 2.05k]
  ------------------
 3791|      0|	  tok->type = TK_CODE_POINT;
 3792|      0|	  tok->u.code = (OnigCodePoint )c2;
 3793|      0|	}
 3794|  2.05k|	else { /* string */
 3795|  2.05k|	  p = tok->backp + enclen(enc, tok->backp, end);
  ------------------
  |  |   93|  2.05k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  ------------------
  |  |  |  |  364|  2.05k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  ------------------
  |  |  |  Branch (93:26): [True: 0, False: 2.05k]
  |  |  ------------------
  ------------------
 3796|  2.05k|	}
 3797|  2.05k|      }
 3798|      0|      break;
 3799|  7.39k|    }
 3800|  7.39k|  }
 3801|   195k|  else {
 3802|   195k|    tok->u.c = c;
 3803|   195k|    tok->escaped = 0;
 3804|       |
 3805|   195k|#ifdef USE_VARIABLE_META_CHARS
 3806|   195k|    if ((c != ONIG_INEFFECTIVE_META_CHAR) &&
  ------------------
  |  |  622|   195k|#define ONIG_INEFFECTIVE_META_CHAR          0
  ------------------
  |  Branch (3806:9): [True: 195k, False: 0]
  ------------------
 3807|   195k|	IS_SYNTAX_OP(syn, ONIG_SYN_OP_VARIABLE_META_CHARACTERS)) {
  ------------------
  |  |  330|   195k|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (330:35): [True: 0, False: 195k]
  |  |  ------------------
  ------------------
 3808|      0|      if (c == MC_ANYCHAR(syn))
  ------------------
  |  |  762|      0|#define MC_ANYCHAR(syn)           (syn)->meta_char_table.anychar
  ------------------
  |  Branch (3808:11): [True: 0, False: 0]
  ------------------
 3809|      0|	goto any_char;
 3810|      0|      else if (c == MC_ANYTIME(syn))
  ------------------
  |  |  763|      0|#define MC_ANYTIME(syn)           (syn)->meta_char_table.anytime
  ------------------
  |  Branch (3810:16): [True: 0, False: 0]
  ------------------
 3811|      0|	goto anytime;
 3812|      0|      else if (c == MC_ZERO_OR_ONE_TIME(syn))
  ------------------
  |  |  764|      0|#define MC_ZERO_OR_ONE_TIME(syn)  (syn)->meta_char_table.zero_or_one_time
  ------------------
  |  Branch (3812:16): [True: 0, False: 0]
  ------------------
 3813|      0|	goto zero_or_one_time;
 3814|      0|      else if (c == MC_ONE_OR_MORE_TIME(syn))
  ------------------
  |  |  765|      0|#define MC_ONE_OR_MORE_TIME(syn)  (syn)->meta_char_table.one_or_more_time
  ------------------
  |  Branch (3814:16): [True: 0, False: 0]
  ------------------
 3815|      0|	goto one_or_more_time;
 3816|      0|      else if (c == MC_ANYCHAR_ANYTIME(syn)) {
  ------------------
  |  |  766|      0|#define MC_ANYCHAR_ANYTIME(syn)   (syn)->meta_char_table.anychar_anytime
  ------------------
  |  Branch (3816:16): [True: 0, False: 0]
  ------------------
 3817|      0|	tok->type = TK_ANYCHAR_ANYTIME;
 3818|      0|	goto out;
 3819|      0|      }
 3820|      0|    }
 3821|   195k|#endif
 3822|       |
 3823|   195k|    switch (c) {
 3824|  4.11k|    case '.':
  ------------------
  |  Branch (3824:5): [True: 4.11k, False: 191k]
  ------------------
 3825|  4.11k|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_DOT_ANYCHAR)) break;
  ------------------
  |  |  330|  4.11k|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3825:11): [True: 0, False: 4.11k]
  ------------------
 3826|  4.11k|#ifdef USE_VARIABLE_META_CHARS
 3827|  4.11k|    any_char:
 3828|  4.11k|#endif
 3829|  4.11k|      tok->type = TK_ANYCHAR;
 3830|  4.11k|      break;
 3831|       |
 3832|  4.52k|    case '*':
  ------------------
  |  Branch (3832:5): [True: 4.52k, False: 190k]
  ------------------
 3833|  4.52k|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ASTERISK_ZERO_INF)) break;
  ------------------
  |  |  330|  4.52k|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3833:11): [True: 0, False: 4.52k]
  ------------------
 3834|  4.52k|#ifdef USE_VARIABLE_META_CHARS
 3835|  4.52k|    anytime:
 3836|  4.52k|#endif
 3837|  4.52k|      tok->type = TK_OP_REPEAT;
 3838|  4.52k|      tok->u.repeat.lower = 0;
 3839|  4.52k|      tok->u.repeat.upper = REPEAT_INFINITE;
  ------------------
  |  |  421|  4.52k|#define REPEAT_INFINITE         -1
  ------------------
 3840|  4.52k|      goto greedy_check;
 3841|      0|      break;
 3842|       |
 3843|  7.39k|    case '+':
  ------------------
  |  Branch (3843:5): [True: 7.39k, False: 187k]
  ------------------
 3844|  7.39k|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_PLUS_ONE_INF)) break;
  ------------------
  |  |  330|  7.39k|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3844:11): [True: 0, False: 7.39k]
  ------------------
 3845|  7.39k|#ifdef USE_VARIABLE_META_CHARS
 3846|  7.39k|    one_or_more_time:
 3847|  7.39k|#endif
 3848|  7.39k|      tok->type = TK_OP_REPEAT;
 3849|  7.39k|      tok->u.repeat.lower = 1;
 3850|  7.39k|      tok->u.repeat.upper = REPEAT_INFINITE;
  ------------------
  |  |  421|  7.39k|#define REPEAT_INFINITE         -1
  ------------------
 3851|  7.39k|      goto greedy_check;
 3852|      0|      break;
 3853|       |
 3854|    411|    case '?':
  ------------------
  |  Branch (3854:5): [True: 411, False: 194k]
  ------------------
 3855|    411|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_QMARK_ZERO_ONE)) break;
  ------------------
  |  |  330|    411|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3855:11): [True: 0, False: 411]
  ------------------
 3856|    411|#ifdef USE_VARIABLE_META_CHARS
 3857|    411|    zero_or_one_time:
 3858|    411|#endif
 3859|    411|      tok->type = TK_OP_REPEAT;
 3860|    411|      tok->u.repeat.lower = 0;
 3861|    411|      tok->u.repeat.upper = 1;
 3862|    411|      goto greedy_check;
 3863|      0|      break;
 3864|       |
 3865|      0|    case '{':
  ------------------
  |  Branch (3865:5): [True: 0, False: 195k]
  ------------------
 3866|      0|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_BRACE_INTERVAL)) break;
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3866:11): [True: 0, False: 0]
  ------------------
 3867|      0|      r = fetch_range_quantifier(&p, end, tok, env);
 3868|      0|      if (r < 0) return r;  /* error */
  ------------------
  |  Branch (3868:11): [True: 0, False: 0]
  ------------------
 3869|      0|      if (r == 0) goto greedy_check;
  ------------------
  |  Branch (3869:11): [True: 0, False: 0]
  ------------------
 3870|      0|      else if (r == 2) { /* {n} */
  ------------------
  |  Branch (3870:16): [True: 0, False: 0]
  ------------------
 3871|      0|	if (IS_SYNTAX_BV(syn, ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY))
  ------------------
  |  |  332|      0|#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
  |  |  ------------------
  |  |  |  Branch (332:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3872|      0|	  goto possessive_check;
 3873|       |
 3874|      0|	goto greedy_check;
 3875|      0|      }
 3876|       |      /* r == 1 : normal char */
 3877|      0|      break;
 3878|       |
 3879|  3.28k|    case '|':
  ------------------
  |  Branch (3879:5): [True: 3.28k, False: 191k]
  ------------------
 3880|  3.28k|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_VBAR_ALT)) break;
  ------------------
  |  |  330|  3.28k|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (3880:11): [True: 0, False: 3.28k]
  ------------------
 3881|  3.28k|      tok->type = TK_ALT;
 3882|  3.28k|      break;
 3883|       |
 3884|  4.93k|    case '(':
  ------------------
  |  Branch (3884:5): [True: 4.93k, False: 190k]
  ------------------
 3885|  4.93k|      if (PPEEK_IS('?') &&
  ------------------
  |  |  320|  9.86k|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|  4.93k|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|  4.93k|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 4.93k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 4.52k, False: 411]
  |  |  ------------------
  ------------------
 3886|  4.93k|	  IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_QMARK_GROUP_EFFECT)) {
  ------------------
  |  |  331|  4.52k|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 4.52k, False: 0]
  |  |  ------------------
  ------------------
 3887|  4.52k|	PINC;
  ------------------
  |  |  301|  4.52k|#define PINC       do { \
  |  |  302|  4.52k|  pfetch_prev = p; \
  |  |  303|  4.52k|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|  4.52k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|  4.52k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 4.52k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|  4.52k|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3888|  4.52k|	if (PPEEK_IS('#')) {
  ------------------
  |  |  320|  4.52k|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|  4.52k|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|  4.52k|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 4.52k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 0, False: 4.52k]
  |  |  ------------------
  ------------------
 3889|      0|	  PFETCH(c);
  ------------------
  |  |  305|      0|#define PFETCH(c)  do { \
  |  |  306|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  307|      0|  pfetch_prev = p; \
  |  |  308|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3890|      0|	  while (1) {
  ------------------
  |  Branch (3890:11): [Folded - Ignored]
  ------------------
 3891|      0|	    if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 0]
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	    if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
  ------------------
  |  |  662|      0|#define ONIGERR_END_PATTERN_IN_GROUP                         -118
  ------------------
 3892|      0|	    PFETCH(c);
  ------------------
  |  |  305|      0|#define PFETCH(c)  do { \
  |  |  306|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  307|      0|  pfetch_prev = p; \
  |  |  308|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3893|      0|	    if (c == MC_ESC(syn)) {
  ------------------
  |  |  761|      0|#define MC_ESC(syn)               (syn)->meta_char_table.esc
  ------------------
  |  Branch (3893:10): [True: 0, False: 0]
  ------------------
 3894|      0|	      if (!PEND) PFETCH(c);
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	      if (!PEND) PFETCH(c);
  ------------------
  |  |  305|      0|#define PFETCH(c)  do { \
  |  |  306|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  307|      0|  pfetch_prev = p; \
  |  |  308|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (3894:12): [True: 0, False: 0]
  ------------------
 3895|      0|	    }
 3896|      0|	    else {
 3897|      0|	      if (c == ')') break;
  ------------------
  |  Branch (3897:12): [True: 0, False: 0]
  ------------------
 3898|      0|	    }
 3899|      0|	  }
 3900|      0|	  goto start;
 3901|      0|	}
 3902|  4.52k|#ifdef USE_PERL_SUBEXP_CALL
 3903|       |	/* (?&name), (?n), (?R), (?0), (?+n), (?-n) */
 3904|  4.52k|	c = PPEEK;
  ------------------
  |  |  319|  4.52k|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  ------------------
  |  |  |  |  369|  4.52k|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  ------------------
  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  ------------------
  |  |  |  Branch (319:23): [True: 4.52k, False: 0]
  |  |  ------------------
  ------------------
 3905|  4.52k|	if ((c == '&' || c == 'R' || ONIGENC_IS_CODE_DIGIT(enc, c)) &&
  ------------------
  |  |  400|  4.52k|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)
  |  |  ------------------
  |  |  |  |  375|  4.52k|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (375:48): [True: 0, False: 4.52k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3905:7): [True: 0, False: 4.52k]
  |  Branch (3905:19): [True: 0, False: 4.52k]
  ------------------
 3906|  4.52k|	    IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_SUBEXP_CALL)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3907|       |	  /* (?&name), (?n), (?R), (?0) */
 3908|      0|	  int gnum;
 3909|      0|	  UChar *name;
  ------------------
  |  |   76|      0|# define UChar OnigUChar
  ------------------
 3910|      0|	  UChar *name_end;
  ------------------
  |  |   76|      0|# define UChar OnigUChar
  ------------------
 3911|       |
 3912|      0|	  if (c == 'R' || c == '0') {
  ------------------
  |  Branch (3912:8): [True: 0, False: 0]
  |  Branch (3912:20): [True: 0, False: 0]
  ------------------
 3913|      0|	    PINC;   /* skip 'R' / '0' */
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3914|      0|	    if (!PPEEK_IS(')')) {
  ------------------
  |  |  320|      0|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3914:10): [True: 0, False: 0]
  ------------------
 3915|      0|	      r = ONIGERR_INVALID_GROUP_NAME;
  ------------------
  |  |  683|      0|#define ONIGERR_INVALID_GROUP_NAME                           -215
  ------------------
 3916|      0|	      onig_scan_env_set_error_string(env, r, p - 1, p + 1);
 3917|      0|	      return r;
 3918|      0|	    }
 3919|      0|	    PINC;   /* skip ')' */
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3920|      0|	    name_end = name = p;
 3921|      0|	    gnum = 0;
 3922|      0|	  }
 3923|      0|	  else {
 3924|      0|	    int numref = 1;
 3925|      0|	    if (c == '&') {     /* (?&name) */
  ------------------
  |  Branch (3925:10): [True: 0, False: 0]
  ------------------
 3926|      0|	      PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3927|      0|	      numref = 0;       /* don't allow number name */
 3928|      0|	    }
 3929|      0|	    name = p;
 3930|      0|	    r = fetch_name((OnigCodePoint )'(', &p, end, &name_end, env, &gnum, numref);
 3931|      0|	    if (r < 0) return r;
  ------------------
  |  Branch (3931:10): [True: 0, False: 0]
  ------------------
 3932|      0|	  }
 3933|       |
 3934|      0|	  tok->type = TK_CALL;
 3935|      0|	  tok->u.call.name     = name;
 3936|      0|	  tok->u.call.name_end = name_end;
 3937|      0|	  tok->u.call.gnum     = gnum;
 3938|      0|	  tok->u.call.rel      = 0;
 3939|      0|	  break;
 3940|      0|	}
 3941|  4.52k|	else if ((c == '-' || c == '+') &&
  ------------------
  |  Branch (3941:12): [True: 0, False: 4.52k]
  |  Branch (3941:24): [True: 0, False: 4.52k]
  ------------------
 3942|  4.52k|	    IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_SUBEXP_CALL)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3943|       |	  /* (?+n), (?-n) */
 3944|      0|	  int gnum;
 3945|      0|	  UChar *name;
  ------------------
  |  |   76|      0|# define UChar OnigUChar
  ------------------
 3946|      0|	  UChar *name_end;
  ------------------
  |  |   76|      0|# define UChar OnigUChar
  ------------------
 3947|      0|	  OnigCodePoint cnext;
 3948|      0|	  PFETCH_READY;
  ------------------
  |  |  295|      0|# define PFETCH_READY  UChar* pfetch_prev = NULL; (void)pfetch_prev
  |  |  ------------------
  |  |  |  |   76|      0|# define UChar OnigUChar
  |  |  ------------------
  ------------------
 3949|       |
 3950|      0|	  PINC;     /* skip '-' / '+' */
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3951|      0|	  cnext = PPEEK;
  ------------------
  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  ------------------
  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  ------------------
  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3952|      0|	  if (ONIGENC_IS_CODE_DIGIT(enc, cnext)) {
  ------------------
  |  |  400|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)
  |  |  ------------------
  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (375:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3953|      0|	    if (c == '-') PUNFETCH;
  ------------------
  |  |  300|      0|#define PUNFETCH     p = pfetch_prev
  ------------------
  |  Branch (3953:10): [True: 0, False: 0]
  ------------------
 3954|      0|	    name = p;
 3955|      0|	    r = fetch_name((OnigCodePoint )'(', &p, end, &name_end, env, &gnum, 1);
 3956|      0|	    if (r < 0) return r;
  ------------------
  |  Branch (3956:10): [True: 0, False: 0]
  ------------------
 3957|       |
 3958|      0|	    tok->type = TK_CALL;
 3959|      0|	    tok->u.call.name     = name;
 3960|      0|	    tok->u.call.name_end = name_end;
 3961|      0|	    tok->u.call.gnum     = gnum;
 3962|      0|	    tok->u.call.rel      = 1;
 3963|      0|	    break;
 3964|      0|	  }
 3965|      0|	}
 3966|  4.52k|#endif /* USE_PERL_SUBEXP_CALL */
 3967|  4.52k|#ifdef USE_CAPITAL_P_NAMED_GROUP
 3968|  4.52k|	if (PPEEK_IS('P') &&
  ------------------
  |  |  320|  9.04k|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|  4.52k|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|  4.52k|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 4.52k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 0, False: 4.52k]
  |  |  ------------------
  ------------------
 3969|  4.52k|	    IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3970|      0|	  int gnum;
 3971|      0|	  UChar *name;
  ------------------
  |  |   76|      0|# define UChar OnigUChar
  ------------------
 3972|      0|	  UChar *name_end;
  ------------------
  |  |   76|      0|# define UChar OnigUChar
  ------------------
 3973|      0|	  PFETCH_READY;
  ------------------
  |  |  295|      0|# define PFETCH_READY  UChar* pfetch_prev = NULL; (void)pfetch_prev
  |  |  ------------------
  |  |  |  |   76|      0|# define UChar OnigUChar
  |  |  ------------------
  ------------------
 3974|       |
 3975|      0|	  PINC;     /* skip 'P' */
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3976|      0|	  if (PEND) return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 0]
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	  if (PEND) return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  663|      0|#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
  ------------------
 3977|      0|	  PFETCH(c);
  ------------------
  |  |  305|      0|#define PFETCH(c)  do { \
  |  |  306|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  307|      0|  pfetch_prev = p; \
  |  |  308|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3978|      0|	  if (c == '=') {       /* (?P=name): backref */
  ------------------
  |  Branch (3978:8): [True: 0, False: 0]
  ------------------
 3979|      0|	    r = fetch_named_backref_token((OnigCodePoint )'(', tok, &p, end, env);
 3980|      0|	    if (r < 0) return r;
  ------------------
  |  Branch (3980:10): [True: 0, False: 0]
  ------------------
 3981|      0|	    break;
 3982|      0|	  }
 3983|      0|	  else if (c == '>') {  /* (?P>name): subexp call */
  ------------------
  |  Branch (3983:13): [True: 0, False: 0]
  ------------------
 3984|      0|	    name = p;
 3985|      0|	    r = fetch_name((OnigCodePoint )'(', &p, end, &name_end, env, &gnum, 0);
 3986|      0|	    if (r < 0) return r;
  ------------------
  |  Branch (3986:10): [True: 0, False: 0]
  ------------------
 3987|       |
 3988|      0|	    tok->type = TK_CALL;
 3989|      0|	    tok->u.call.name     = name;
 3990|      0|	    tok->u.call.name_end = name_end;
 3991|      0|	    tok->u.call.gnum     = gnum;
 3992|      0|	    tok->u.call.rel      = 0;
 3993|      0|	    break;
 3994|      0|	  }
 3995|      0|	}
 3996|  4.52k|#endif /* USE_CAPITAL_P_NAMED_GROUP */
 3997|  4.52k|	PUNFETCH;
  ------------------
  |  |  300|  4.52k|#define PUNFETCH     p = pfetch_prev
  ------------------
 3998|  4.52k|      }
 3999|       |
 4000|  4.93k|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LPAREN_SUBEXP)) break;
  ------------------
  |  |  330|  4.93k|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (4000:11): [True: 0, False: 4.93k]
  ------------------
 4001|  4.93k|      tok->type = TK_SUBEXP_OPEN;
 4002|  4.93k|      break;
 4003|       |
 4004|  4.93k|    case ')':
  ------------------
  |  Branch (4004:5): [True: 4.93k, False: 190k]
  ------------------
 4005|  4.93k|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LPAREN_SUBEXP)) break;
  ------------------
  |  |  330|  4.93k|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (4005:11): [True: 0, False: 4.93k]
  ------------------
 4006|  4.93k|      tok->type = TK_SUBEXP_CLOSE;
 4007|  4.93k|      break;
 4008|       |
 4009|  8.22k|    case '^':
  ------------------
  |  Branch (4009:5): [True: 8.22k, False: 187k]
  ------------------
 4010|  8.22k|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LINE_ANCHOR)) break;
  ------------------
  |  |  330|  8.22k|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (4010:11): [True: 0, False: 8.22k]
  ------------------
 4011|  8.22k|      tok->type = TK_ANCHOR;
 4012|  8.22k|      tok->u.anchor.subtype = (IS_SINGLELINE(env->option)
  ------------------
  |  |  394|  8.22k|#define IS_SINGLELINE(option)     ((option) & ONIG_OPTION_SINGLELINE)
  |  |  ------------------
  |  |  |  |  458|  8.22k|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  456|  8.22k|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  455|  8.22k|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  454|  8.22k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (394:35): [True: 0, False: 8.22k]
  |  |  ------------------
  ------------------
 4013|  8.22k|			       ? ANCHOR_BEGIN_BUF : ANCHOR_BEGIN_LINE);
  ------------------
  |  |  540|      0|#define ANCHOR_BEGIN_BUF        (1<<0)
  ------------------
              			       ? ANCHOR_BEGIN_BUF : ANCHOR_BEGIN_LINE);
  ------------------
  |  |  541|  8.22k|#define ANCHOR_BEGIN_LINE       (1<<1)
  ------------------
 4014|  8.22k|      break;
 4015|       |
 4016|  3.28k|    case '$':
  ------------------
  |  Branch (4016:5): [True: 3.28k, False: 191k]
  ------------------
 4017|  3.28k|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LINE_ANCHOR)) break;
  ------------------
  |  |  330|  3.28k|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (4017:11): [True: 0, False: 3.28k]
  ------------------
 4018|  3.28k|      tok->type = TK_ANCHOR;
 4019|  3.28k|      tok->u.anchor.subtype = (IS_SINGLELINE(env->option)
  ------------------
  |  |  394|  3.28k|#define IS_SINGLELINE(option)     ((option) & ONIG_OPTION_SINGLELINE)
  |  |  ------------------
  |  |  |  |  458|  3.28k|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  456|  3.28k|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  455|  3.28k|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  454|  3.28k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (394:35): [True: 0, False: 3.28k]
  |  |  ------------------
  ------------------
 4020|  3.28k|			       ? ANCHOR_SEMI_END_BUF : ANCHOR_END_LINE);
  ------------------
  |  |  544|      0|#define ANCHOR_SEMI_END_BUF     (1<<4)
  ------------------
              			       ? ANCHOR_SEMI_END_BUF : ANCHOR_END_LINE);
  ------------------
  |  |  545|  3.28k|#define ANCHOR_END_LINE         (1<<5)
  ------------------
 4021|  3.28k|      break;
 4022|       |
 4023|  6.16k|    case '[':
  ------------------
  |  Branch (4023:5): [True: 6.16k, False: 189k]
  ------------------
 4024|  6.16k|      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_BRACKET_CC)) break;
  ------------------
  |  |  330|  6.16k|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  ------------------
  |  Branch (4024:11): [True: 0, False: 6.16k]
  ------------------
 4025|  6.16k|      tok->type = TK_CC_OPEN;
 4026|  6.16k|      break;
 4027|       |
 4028|      0|    case ']':
  ------------------
  |  Branch (4028:5): [True: 0, False: 195k]
  ------------------
 4029|      0|      if (*src > env->pattern)   /* /].../ is allowed. */
  ------------------
  |  Branch (4029:11): [True: 0, False: 0]
  ------------------
 4030|      0|	CLOSE_BRACKET_WITHOUT_ESC_WARN(env, (UChar* )"]");
 4031|      0|      break;
 4032|       |
 4033|      0|    case '#':
  ------------------
  |  Branch (4033:5): [True: 0, False: 195k]
  ------------------
 4034|      0|      if (IS_EXTEND(env->option)) {
  ------------------
  |  |  397|      0|#define IS_EXTEND(option)         ((option) & ONIG_OPTION_EXTEND)
  |  |  ------------------
  |  |  |  |  455|      0|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  454|      0|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (397:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4035|      0|	while (!PEND) {
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (4035:9): [True: 0, False: 0]
  ------------------
 4036|      0|	  PFETCH(c);
  ------------------
  |  |  305|      0|#define PFETCH(c)  do { \
  |  |  306|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  307|      0|  pfetch_prev = p; \
  |  |  308|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4037|      0|	  if (ONIGENC_IS_CODE_NEWLINE(enc, c))
  ------------------
  |  |  378|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE)
  |  |  ------------------
  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (375:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4038|      0|	    break;
 4039|      0|	}
 4040|      0|	goto start;
 4041|      0|	break;
 4042|      0|      }
 4043|      0|      break;
 4044|       |
 4045|  19.3k|    case ' ': case '\t': case '\n': case '\r': case '\f':
  ------------------
  |  Branch (4045:5): [True: 19.3k, False: 175k]
  |  Branch (4045:15): [True: 0, False: 195k]
  |  Branch (4045:26): [True: 0, False: 195k]
  |  Branch (4045:37): [True: 0, False: 195k]
  |  Branch (4045:48): [True: 0, False: 195k]
  ------------------
 4046|  19.3k|      if (IS_EXTEND(env->option))
  ------------------
  |  |  397|  19.3k|#define IS_EXTEND(option)         ((option) & ONIG_OPTION_EXTEND)
  |  |  ------------------
  |  |  |  |  455|  19.3k|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  454|  19.3k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (397:35): [True: 0, False: 19.3k]
  |  |  ------------------
  ------------------
 4047|      0|	goto start;
 4048|  19.3k|      break;
 4049|       |
 4050|   128k|    default:
  ------------------
  |  Branch (4050:5): [True: 128k, False: 66.5k]
  ------------------
 4051|       |      /* string */
 4052|   128k|      break;
 4053|   195k|    }
 4054|   195k|  }
 4055|       |
 4056|   202k|#ifdef USE_VARIABLE_META_CHARS
 4057|   202k| out:
 4058|   202k|#endif
 4059|   202k|  *src = p;
 4060|   202k|  return tok->type;
 4061|   202k|}
regparse.c:get_name_end_code_point:
 2495|  1.64k|{
 2496|  1.64k|  switch (start) {
 2497|  1.64k|  case '<':  return (OnigCodePoint )'>'; break;
  ------------------
  |  Branch (2497:3): [True: 1.64k, False: 0]
  ------------------
 2498|      0|  case '\'': return (OnigCodePoint )'\''; break;
  ------------------
  |  Branch (2498:3): [True: 0, False: 1.64k]
  ------------------
 2499|      0|  case '(':  return (OnigCodePoint )')'; break;
  ------------------
  |  Branch (2499:3): [True: 0, False: 1.64k]
  ------------------
 2500|      0|  case '{':  return (OnigCodePoint )'}'; break;
  ------------------
  |  Branch (2500:3): [True: 0, False: 1.64k]
  ------------------
 2501|      0|  default:
  ------------------
  |  Branch (2501:3): [True: 0, False: 1.64k]
  ------------------
 2502|      0|    break;
 2503|  1.64k|  }
 2504|       |
 2505|      0|  return (OnigCodePoint )0;
 2506|  1.64k|}
regparse.c:fetch_name:
 2644|  1.64k|{
 2645|  1.64k|  int r, is_num, sign;
 2646|  1.64k|  OnigCodePoint end_code;
 2647|  1.64k|  OnigCodePoint c = 0;
 2648|  1.64k|  OnigEncoding enc = env->enc;
 2649|  1.64k|  UChar *name_end;
  ------------------
  |  |   76|  1.64k|# define UChar OnigUChar
  ------------------
 2650|  1.64k|  UChar *pnum_head;
  ------------------
  |  |   76|  1.64k|# define UChar OnigUChar
  ------------------
 2651|  1.64k|  UChar *p = *src;
  ------------------
  |  |   76|  1.64k|# define UChar OnigUChar
  ------------------
 2652|       |
 2653|  1.64k|  *rback_num = 0;
 2654|       |
 2655|  1.64k|  end_code = get_name_end_code_point(start_code);
 2656|       |
 2657|  1.64k|  name_end = end;
 2658|  1.64k|  pnum_head = *src;
 2659|  1.64k|  r = 0;
 2660|  1.64k|  is_num = 0;
 2661|  1.64k|  sign = 1;
 2662|  1.64k|  if (PEND) {
  ------------------
  |  |  299|  1.64k|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 1.64k]
  |  |  |  Branch (299:23): [True: 1.64k, False: 0]
  |  |  ------------------
  ------------------
 2663|      0|    return ONIGERR_EMPTY_GROUP_NAME;
  ------------------
  |  |  682|      0|#define ONIGERR_EMPTY_GROUP_NAME                             -214
  ------------------
 2664|      0|  }
 2665|  1.64k|  else {
 2666|  1.64k|    PFETCH_S(c);
  ------------------
  |  |  314|  1.64k|#define PFETCH_S(c) do { \
  |  |  315|  1.64k|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|  1.64k|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (315:8): [True: 0, False: 1.64k]
  |  |  ------------------
  |  |  316|  1.64k|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|  1.64k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|  1.64k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 1.64k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  317|  1.64k|} while (0)
  |  |  ------------------
  |  |  |  Branch (317:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2667|  1.64k|    if (c == end_code)
  ------------------
  |  Branch (2667:9): [True: 0, False: 1.64k]
  ------------------
 2668|      0|      return ONIGERR_EMPTY_GROUP_NAME;
  ------------------
  |  |  682|      0|#define ONIGERR_EMPTY_GROUP_NAME                             -214
  ------------------
 2669|       |
 2670|  1.64k|    if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
  ------------------
  |  |  400|  1.64k|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)
  |  |  ------------------
  |  |  |  |  375|  1.64k|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (375:48): [True: 0, False: 1.64k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2671|      0|      if (ref == 1)
  ------------------
  |  Branch (2671:11): [True: 0, False: 0]
  ------------------
 2672|      0|	is_num = 1;
 2673|      0|      else {
 2674|      0|	r = ONIGERR_INVALID_GROUP_NAME;
  ------------------
  |  |  683|      0|#define ONIGERR_INVALID_GROUP_NAME                           -215
  ------------------
 2675|      0|	is_num = 0;
 2676|      0|      }
 2677|      0|    }
 2678|  1.64k|    else if (c == '-') {
  ------------------
  |  Branch (2678:14): [True: 0, False: 1.64k]
  ------------------
 2679|      0|      if (ref == 1) {
  ------------------
  |  Branch (2679:11): [True: 0, False: 0]
  ------------------
 2680|      0|	is_num = 2;
 2681|      0|	sign = -1;
 2682|      0|	pnum_head = p;
 2683|      0|      }
 2684|      0|      else {
 2685|      0|	r = ONIGERR_INVALID_GROUP_NAME;
  ------------------
  |  |  683|      0|#define ONIGERR_INVALID_GROUP_NAME                           -215
  ------------------
 2686|      0|	is_num = 0;
 2687|      0|      }
 2688|      0|    }
 2689|  1.64k|    else if (!ONIGENC_IS_CODE_NAME(enc, c)) {
  ------------------
  |  | 2512|  1.64k|#  define ONIGENC_IS_CODE_NAME(enc, c)  ONIGENC_IS_CODE_WORD(enc, c)
  |  |  ------------------
  |  |  |  |  404|  1.64k|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  375|  1.64k|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2689:14): [True: 0, False: 1.64k]
  ------------------
 2690|      0|      r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
  ------------------
  |  |  684|      0|#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME                   -216
  ------------------
 2691|      0|    }
 2692|  1.64k|  }
 2693|       |
 2694|  1.64k|  if (r == 0) {
  ------------------
  |  Branch (2694:7): [True: 1.64k, False: 0]
  ------------------
 2695|  6.16k|    while (!PEND) {
  ------------------
  |  |  299|  6.16k|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 6.16k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2695:12): [True: 6.16k, False: 0]
  ------------------
 2696|  6.16k|      name_end = p;
 2697|  6.16k|      PFETCH_S(c);
  ------------------
  |  |  314|  6.16k|#define PFETCH_S(c) do { \
  |  |  315|  6.16k|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|  6.16k|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (315:8): [True: 0, False: 6.16k]
  |  |  ------------------
  |  |  316|  6.16k|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|  6.16k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|  6.16k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 6.16k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  317|  6.16k|} while (0)
  |  |  ------------------
  |  |  |  Branch (317:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2698|  6.16k|      if (c == end_code || c == ')') {
  ------------------
  |  Branch (2698:11): [True: 1.64k, False: 4.52k]
  |  Branch (2698:28): [True: 0, False: 4.52k]
  ------------------
 2699|  1.64k|	if (is_num == 2) {
  ------------------
  |  Branch (2699:6): [True: 0, False: 1.64k]
  ------------------
 2700|      0|	  r = ONIGERR_INVALID_GROUP_NAME;
  ------------------
  |  |  683|      0|#define ONIGERR_INVALID_GROUP_NAME                           -215
  ------------------
 2701|      0|	  goto teardown;
 2702|      0|	}
 2703|  1.64k|	break;
 2704|  1.64k|      }
 2705|       |
 2706|  4.52k|      if (is_num != 0) {
  ------------------
  |  Branch (2706:11): [True: 0, False: 4.52k]
  ------------------
 2707|      0|	if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
  ------------------
  |  |  400|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)
  |  |  ------------------
  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (375:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2708|      0|	  is_num = 1;
 2709|      0|	}
 2710|      0|	else {
 2711|      0|	  if (!ONIGENC_IS_CODE_WORD(enc, c))
  ------------------
  |  |  404|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
  |  |  ------------------
  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  ------------------
  ------------------
  |  Branch (2711:8): [True: 0, False: 0]
  ------------------
 2712|      0|	    r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
  ------------------
  |  |  684|      0|#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME                   -216
  ------------------
 2713|      0|	  else
 2714|      0|	    r = ONIGERR_INVALID_GROUP_NAME;
  ------------------
  |  |  683|      0|#define ONIGERR_INVALID_GROUP_NAME                           -215
  ------------------
 2715|      0|	  goto teardown;
 2716|      0|	}
 2717|      0|      }
 2718|  4.52k|      else {
 2719|  4.52k|	if (!ONIGENC_IS_CODE_NAME(enc, c)) {
  ------------------
  |  | 2512|  4.52k|#  define ONIGENC_IS_CODE_NAME(enc, c)  ONIGENC_IS_CODE_WORD(enc, c)
  |  |  ------------------
  |  |  |  |  404|  4.52k|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  375|  4.52k|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2719:6): [True: 0, False: 4.52k]
  ------------------
 2720|      0|	  r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
  ------------------
  |  |  684|      0|#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME                   -216
  ------------------
 2721|      0|	  goto teardown;
 2722|      0|	}
 2723|  4.52k|      }
 2724|  4.52k|    }
 2725|       |
 2726|  1.64k|    if (c != end_code) {
  ------------------
  |  Branch (2726:9): [True: 0, False: 1.64k]
  ------------------
 2727|      0|      r = ONIGERR_INVALID_GROUP_NAME;
  ------------------
  |  |  683|      0|#define ONIGERR_INVALID_GROUP_NAME                           -215
  ------------------
 2728|      0|      name_end = end;
 2729|      0|      goto err;
 2730|      0|    }
 2731|       |
 2732|  1.64k|    if (is_num != 0) {
  ------------------
  |  Branch (2732:9): [True: 0, False: 1.64k]
  ------------------
 2733|      0|      *rback_num = onig_scan_unsigned_number(&pnum_head, name_end, enc);
 2734|      0|      if (*rback_num < 0) return ONIGERR_TOO_BIG_NUMBER;
  ------------------
  |  |  669|      0|#define ONIGERR_TOO_BIG_NUMBER                               -200
  ------------------
  |  Branch (2734:11): [True: 0, False: 0]
  ------------------
 2735|      0|      else if (*rback_num == 0) {
  ------------------
  |  Branch (2735:16): [True: 0, False: 0]
  ------------------
 2736|      0|	r = ONIGERR_INVALID_GROUP_NAME;
  ------------------
  |  |  683|      0|#define ONIGERR_INVALID_GROUP_NAME                           -215
  ------------------
 2737|      0|	goto err;
 2738|      0|      }
 2739|       |
 2740|      0|      *rback_num *= sign;
 2741|      0|    }
 2742|       |
 2743|  1.64k|    *rname_end = name_end;
 2744|  1.64k|    *src = p;
 2745|  1.64k|    return 0;
 2746|  1.64k|  }
 2747|      0|  else {
 2748|      0|teardown:
 2749|      0|    while (!PEND) {
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2749:12): [True: 0, False: 0]
  ------------------
 2750|      0|      name_end = p;
 2751|      0|      PFETCH_S(c);
  ------------------
  |  |  314|      0|#define PFETCH_S(c) do { \
  |  |  315|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (315:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  316|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  317|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (317:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2752|      0|      if (c == end_code || c == ')')
  ------------------
  |  Branch (2752:11): [True: 0, False: 0]
  |  Branch (2752:28): [True: 0, False: 0]
  ------------------
 2753|      0|	break;
 2754|      0|    }
 2755|      0|    if (PEND)
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 0]
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2756|      0|      name_end = end;
 2757|       |
 2758|      0|  err:
 2759|      0|    onig_scan_env_set_error_string(env, r, *src, name_end);
 2760|      0|    return r;
 2761|      0|  }
 2762|  1.64k|}
regparse.c:fetch_escaped_value:
 2422|  7.39k|{
 2423|  7.39k|  int v;
 2424|  7.39k|  OnigCodePoint c;
 2425|  7.39k|  OnigEncoding enc = env->enc;
 2426|  7.39k|  UChar* p = *src;
  ------------------
  |  |   76|  7.39k|# define UChar OnigUChar
  ------------------
 2427|       |
 2428|  7.39k|  if (PEND) return ONIGERR_END_PATTERN_AT_ESCAPE;
  ------------------
  |  |  299|  7.39k|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 7.39k]
  |  |  |  Branch (299:23): [True: 7.39k, False: 0]
  |  |  ------------------
  ------------------
                if (PEND) return ONIGERR_END_PATTERN_AT_ESCAPE;
  ------------------
  |  |  649|      0|#define ONIGERR_END_PATTERN_AT_ESCAPE                        -104
  ------------------
 2429|       |
 2430|  7.39k|  PFETCH_S(c);
  ------------------
  |  |  314|  7.39k|#define PFETCH_S(c) do { \
  |  |  315|  7.39k|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|  7.39k|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (315:8): [True: 0, False: 7.39k]
  |  |  ------------------
  |  |  316|  7.39k|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|  7.39k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|  7.39k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 7.39k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  317|  7.39k|} while (0)
  |  |  ------------------
  |  |  |  Branch (317:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2431|  7.39k|  switch (c) {
 2432|      0|  case 'M':
  ------------------
  |  Branch (2432:3): [True: 0, False: 7.39k]
  ------------------
 2433|      0|    if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2434|      0|      if (PEND) return ONIGERR_END_PATTERN_AT_META;
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 0]
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                    if (PEND) return ONIGERR_END_PATTERN_AT_META;
  ------------------
  |  |  650|      0|#define ONIGERR_END_PATTERN_AT_META                          -105
  ------------------
 2435|      0|      PFETCH_S(c);
  ------------------
  |  |  314|      0|#define PFETCH_S(c) do { \
  |  |  315|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (315:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  316|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  317|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (317:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2436|      0|      if (c != '-') return ONIGERR_META_CODE_SYNTAX;
  ------------------
  |  |  652|      0|#define ONIGERR_META_CODE_SYNTAX                             -108
  ------------------
  |  Branch (2436:11): [True: 0, False: 0]
  ------------------
 2437|      0|      if (PEND) return ONIGERR_END_PATTERN_AT_META;
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 0]
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                    if (PEND) return ONIGERR_END_PATTERN_AT_META;
  ------------------
  |  |  650|      0|#define ONIGERR_END_PATTERN_AT_META                          -105
  ------------------
 2438|      0|      PFETCH_S(c);
  ------------------
  |  |  314|      0|#define PFETCH_S(c) do { \
  |  |  315|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (315:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  316|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  317|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (317:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2439|      0|      if (c == MC_ESC(env->syntax)) {
  ------------------
  |  |  761|      0|#define MC_ESC(syn)               (syn)->meta_char_table.esc
  ------------------
  |  Branch (2439:11): [True: 0, False: 0]
  ------------------
 2440|      0|	v = fetch_escaped_value(&p, end, env, &c);
 2441|      0|	if (v < 0) return v;
  ------------------
  |  Branch (2441:6): [True: 0, False: 0]
  ------------------
 2442|      0|      }
 2443|      0|      c = ((c & 0xff) | 0x80);
 2444|      0|    }
 2445|      0|    else
 2446|      0|      goto backslash;
 2447|      0|    break;
 2448|       |
 2449|      0|  case 'C':
  ------------------
  |  Branch (2449:3): [True: 0, False: 7.39k]
  ------------------
 2450|      0|    if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2451|      0|      if (PEND) return ONIGERR_END_PATTERN_AT_CONTROL;
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 0]
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                    if (PEND) return ONIGERR_END_PATTERN_AT_CONTROL;
  ------------------
  |  |  651|      0|#define ONIGERR_END_PATTERN_AT_CONTROL                       -106
  ------------------
 2452|      0|      PFETCH_S(c);
  ------------------
  |  |  314|      0|#define PFETCH_S(c) do { \
  |  |  315|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (315:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  316|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  317|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (317:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2453|      0|      if (c != '-') return ONIGERR_CONTROL_CODE_SYNTAX;
  ------------------
  |  |  653|      0|#define ONIGERR_CONTROL_CODE_SYNTAX                          -109
  ------------------
  |  Branch (2453:11): [True: 0, False: 0]
  ------------------
 2454|      0|      goto control;
 2455|      0|    }
 2456|      0|    else
 2457|      0|      goto backslash;
 2458|       |
 2459|      0|  case 'c':
  ------------------
  |  Branch (2459:3): [True: 0, False: 7.39k]
  ------------------
 2460|      0|    if (IS_SYNTAX_OP(env->syntax, ONIG_SYN_OP_ESC_C_CONTROL)) {
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (330:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2461|      0|    control:
 2462|      0|      if (PEND) return ONIGERR_END_PATTERN_AT_CONTROL;
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 0]
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                    if (PEND) return ONIGERR_END_PATTERN_AT_CONTROL;
  ------------------
  |  |  651|      0|#define ONIGERR_END_PATTERN_AT_CONTROL                       -106
  ------------------
 2463|      0|      PFETCH_S(c);
  ------------------
  |  |  314|      0|#define PFETCH_S(c) do { \
  |  |  315|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (315:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  316|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  317|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (317:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2464|      0|      if (c == '?') {
  ------------------
  |  Branch (2464:11): [True: 0, False: 0]
  ------------------
 2465|      0|	c = 0177;
 2466|      0|      }
 2467|      0|      else {
 2468|      0|	if (c == MC_ESC(env->syntax)) {
  ------------------
  |  |  761|      0|#define MC_ESC(syn)               (syn)->meta_char_table.esc
  ------------------
  |  Branch (2468:6): [True: 0, False: 0]
  ------------------
 2469|      0|	  v = fetch_escaped_value(&p, end, env, &c);
 2470|      0|	  if (v < 0) return v;
  ------------------
  |  Branch (2470:8): [True: 0, False: 0]
  ------------------
 2471|      0|	}
 2472|      0|	c &= 0x9f;
 2473|      0|      }
 2474|      0|      break;
 2475|      0|    }
 2476|       |    /* fall through */
 2477|       |
 2478|  7.39k|  default:
  ------------------
  |  Branch (2478:3): [True: 7.39k, False: 0]
  ------------------
 2479|  7.39k|    {
 2480|  7.39k|    backslash:
 2481|  7.39k|      c = conv_backslash_value(c, env);
 2482|  7.39k|    }
 2483|  7.39k|    break;
 2484|  7.39k|  }
 2485|       |
 2486|  7.39k|  *src = p;
 2487|  7.39k|  *val = c;
 2488|  7.39k|  return 0;
 2489|  7.39k|}
regparse.c:conv_backslash_value:
 2097|  7.39k|{
 2098|  7.39k|  if (IS_SYNTAX_OP(env->syntax, ONIG_SYN_OP_ESC_CONTROL_CHARS)) {
  ------------------
  |  |  330|  7.39k|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (330:35): [True: 7.39k, False: 0]
  |  |  ------------------
  ------------------
 2099|  7.39k|    switch (c) {
 2100|    822|    case 'n': return '\n';
  ------------------
  |  Branch (2100:5): [True: 822, False: 6.57k]
  ------------------
 2101|  3.28k|    case 't': return '\t';
  ------------------
  |  Branch (2101:5): [True: 3.28k, False: 4.11k]
  ------------------
 2102|    822|    case 'r': return '\r';
  ------------------
  |  Branch (2102:5): [True: 822, False: 6.57k]
  ------------------
 2103|      0|    case 'f': return '\f';
  ------------------
  |  Branch (2103:5): [True: 0, False: 7.39k]
  ------------------
 2104|      0|    case 'a': return '\007';
  ------------------
  |  Branch (2104:5): [True: 0, False: 7.39k]
  ------------------
 2105|      0|    case 'b': return '\010';
  ------------------
  |  Branch (2105:5): [True: 0, False: 7.39k]
  ------------------
 2106|      0|    case 'e': return '\033';
  ------------------
  |  Branch (2106:5): [True: 0, False: 7.39k]
  ------------------
 2107|      0|    case 'v':
  ------------------
  |  Branch (2107:5): [True: 0, False: 7.39k]
  ------------------
 2108|      0|      if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_V_VTAB))
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2109|      0|	return '\v';
 2110|      0|      break;
 2111|       |
 2112|  2.46k|    default:
  ------------------
  |  Branch (2112:5): [True: 2.46k, False: 4.93k]
  ------------------
 2113|  2.46k|      if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'))
  ------------------
  |  Branch (2113:12): [True: 0, False: 2.46k]
  |  Branch (2113:24): [True: 0, False: 0]
  |  Branch (2113:38): [True: 1.64k, False: 822]
  |  Branch (2113:50): [True: 0, False: 1.64k]
  ------------------
 2114|      0|	  UNKNOWN_ESC_WARN(env, c);
 2115|  2.46k|      break;
 2116|  7.39k|    }
 2117|  7.39k|  }
 2118|  2.46k|  return c;
 2119|  7.39k|}
regparse.c:parse_subexp:
 6550|  14.3k|{
 6551|  14.3k|  int r;
 6552|  14.3k|  Node *node, **headp;
 6553|       |
 6554|  14.3k|  *top = NULL;
 6555|  14.3k|  env->parse_depth++;
 6556|  14.3k|  if (env->parse_depth > ParseDepthLimit)
  ------------------
  |  Branch (6556:7): [True: 0, False: 14.3k]
  ------------------
 6557|      0|    return ONIGERR_PARSE_DEPTH_LIMIT_OVER;
  ------------------
  |  |  639|      0|#define ONIGERR_PARSE_DEPTH_LIMIT_OVER                        -16
  ------------------
 6558|  14.3k|  r = parse_branch(&node, tok, term, src, end, env);
 6559|  14.3k|  if (r < 0) {
  ------------------
  |  Branch (6559:7): [True: 0, False: 14.3k]
  ------------------
 6560|      0|    onig_node_free(node);
 6561|      0|    return r;
 6562|      0|  }
 6563|       |
 6564|  14.3k|  if (r == term) {
  ------------------
  |  Branch (6564:7): [True: 11.9k, False: 2.46k]
  ------------------
 6565|  11.9k|    *top = node;
 6566|  11.9k|  }
 6567|  2.46k|  else if (r == TK_ALT) {
  ------------------
  |  Branch (6567:12): [True: 2.46k, False: 0]
  ------------------
 6568|  2.46k|    *top  = onig_node_new_alt(node, NULL);
 6569|  2.46k|    headp = &(NCDR(*top));
  ------------------
  |  |   87|  2.46k|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|  2.46k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 6570|  5.75k|    while (r == TK_ALT) {
  ------------------
  |  Branch (6570:12): [True: 3.28k, False: 2.46k]
  ------------------
 6571|  3.28k|      r = fetch_token(tok, src, end, env);
 6572|  3.28k|      if (r < 0) return r;
  ------------------
  |  Branch (6572:11): [True: 0, False: 3.28k]
  ------------------
 6573|  3.28k|      r = parse_branch(&node, tok, term, src, end, env);
 6574|  3.28k|      if (r < 0) {
  ------------------
  |  Branch (6574:11): [True: 0, False: 3.28k]
  ------------------
 6575|      0|	onig_node_free(node);
 6576|      0|	return r;
 6577|      0|      }
 6578|       |
 6579|  3.28k|      *headp = onig_node_new_alt(node, NULL);
 6580|  3.28k|      headp = &(NCDR(*headp));
  ------------------
  |  |   87|  3.28k|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|  3.28k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 6581|  3.28k|    }
 6582|       |
 6583|  2.46k|    if (tok->type != (enum TokenSyms )term)
  ------------------
  |  Branch (6583:9): [True: 0, False: 2.46k]
  ------------------
 6584|      0|      goto err;
 6585|  2.46k|  }
 6586|      0|  else {
 6587|      0|    onig_node_free(node);
 6588|      0|  err:
 6589|      0|    if (term == TK_SUBEXP_CLOSE)
  ------------------
  |  Branch (6589:9): [True: 0, False: 0]
  ------------------
 6590|      0|      return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS;
  ------------------
  |  |  661|      0|#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS       -117
  ------------------
 6591|      0|    else
 6592|      0|      return ONIGERR_PARSER_BUG;
  ------------------
  |  |  634|      0|#define ONIGERR_PARSER_BUG                                    -11
  ------------------
 6593|      0|  }
 6594|       |
 6595|  14.3k|  env->parse_depth--;
 6596|  14.3k|  return r;
 6597|  14.3k|}
regparse.c:parse_branch:
 6507|  17.6k|{
 6508|  17.6k|  int r;
 6509|  17.6k|  Node *node, **headp;
 6510|       |
 6511|  17.6k|  *top = NULL;
 6512|  17.6k|  r = parse_exp(&node, tok, term, src, end, env);
 6513|  17.6k|  if (r < 0) {
  ------------------
  |  Branch (6513:7): [True: 0, False: 17.6k]
  ------------------
 6514|      0|    onig_node_free(node);
 6515|      0|    return r;
 6516|      0|  }
 6517|       |
 6518|  17.6k|  if (r == TK_EOT || r == term || r == TK_ALT) {
  ------------------
  |  Branch (6518:7): [True: 822, False: 16.8k]
  |  Branch (6518:22): [True: 4.11k, False: 12.7k]
  |  Branch (6518:35): [True: 2.87k, False: 9.86k]
  ------------------
 6519|  7.80k|    *top = node;
 6520|  7.80k|  }
 6521|  9.86k|  else {
 6522|  9.86k|    *top  = node_new_list(node, NULL);
 6523|  9.86k|    headp = &(NCDR(*top));
  ------------------
  |  |   87|  9.86k|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|  9.86k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 6524|  40.6k|    while (r != TK_EOT && r != term && r != TK_ALT) {
  ------------------
  |  Branch (6524:12): [True: 32.0k, False: 8.63k]
  |  Branch (6524:27): [True: 31.2k, False: 822]
  |  Branch (6524:40): [True: 30.8k, False: 411]
  ------------------
 6525|  30.8k|      r = parse_exp(&node, tok, term, src, end, env);
 6526|  30.8k|      if (r < 0) {
  ------------------
  |  Branch (6526:11): [True: 0, False: 30.8k]
  ------------------
 6527|      0|	onig_node_free(node);
 6528|      0|	return r;
 6529|      0|      }
 6530|       |
 6531|  30.8k|      if (NTYPE(node) == NT_LIST) {
  ------------------
  |  |   69|  30.8k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
                    if (NTYPE(node) == NT_LIST) {
  ------------------
  |  |   46|  30.8k|#define NT_LIST        8
  ------------------
  |  Branch (6531:11): [True: 0, False: 30.8k]
  ------------------
 6532|      0|	*headp = node;
 6533|      0|	while (IS_NOT_NULL(NCDR(node))) node = NCDR(node);
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	while (IS_NOT_NULL(NCDR(node))) node = NCDR(node);
  ------------------
  |  |   87|      0|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 6534|      0|	headp = &(NCDR(node));
  ------------------
  |  |   87|      0|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 6535|      0|      }
 6536|  30.8k|      else {
 6537|  30.8k|	*headp = node_new_list(node, NULL);
 6538|  30.8k|	headp = &(NCDR(*headp));
  ------------------
  |  |   87|  30.8k|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|  30.8k|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 6539|  30.8k|      }
 6540|  30.8k|    }
 6541|  9.86k|  }
 6542|       |
 6543|  17.6k|  return r;
 6544|  17.6k|}
regparse.c:parse_exp:
 6129|  48.4k|{
 6130|  48.4k|  int r, len, group = 0;
 6131|  48.4k|  Node* qn;
 6132|  48.4k|  Node** targetp;
 6133|  48.4k|  unsigned int parse_depth;
 6134|       |
 6135|  48.4k|  *np = NULL;
 6136|  48.4k|  if (tok->type == (enum TokenSyms )term)
  ------------------
  |  Branch (6136:7): [True: 411, False: 48.0k]
  ------------------
 6137|    411|    goto end_of_token;
 6138|       |
 6139|  48.0k|  parse_depth = env->parse_depth;
 6140|       |
 6141|  48.0k|  switch (tok->type) {
 6142|      0|  case TK_ALT:
  ------------------
  |  Branch (6142:3): [True: 0, False: 48.0k]
  ------------------
 6143|      0|  case TK_EOT:
  ------------------
  |  Branch (6143:3): [True: 0, False: 48.0k]
  ------------------
 6144|    411|  end_of_token:
 6145|    411|    *np = node_new_empty();
 6146|    411|    return tok->type;
 6147|      0|    break;
 6148|       |
 6149|  4.93k|  case TK_SUBEXP_OPEN:
  ------------------
  |  Branch (6149:3): [True: 4.93k, False: 43.1k]
  ------------------
 6150|  4.93k|    r = parse_enclose(np, tok, TK_SUBEXP_CLOSE, src, end, env);
 6151|  4.93k|    if (r < 0) return r;
  ------------------
  |  Branch (6151:9): [True: 0, False: 4.93k]
  ------------------
 6152|  4.93k|    if (r == 1) group = 1;
  ------------------
  |  Branch (6152:9): [True: 2.46k, False: 2.46k]
  ------------------
 6153|  2.46k|    else if (r == 2) { /* option only */
  ------------------
  |  Branch (6153:14): [True: 0, False: 2.46k]
  ------------------
 6154|      0|      Node* target;
 6155|      0|      OnigOptionType prev = env->option;
 6156|       |
 6157|      0|      env->option = NENCLOSE(*np)->option;
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 6158|      0|      r = fetch_token(tok, src, end, env);
 6159|      0|      if (r < 0) {
  ------------------
  |  Branch (6159:11): [True: 0, False: 0]
  ------------------
 6160|      0|	env->option = prev;
 6161|      0|	return r;
 6162|      0|      }
 6163|      0|      r = parse_subexp(&target, tok, term, src, end, env);
 6164|      0|      env->option = prev;
 6165|      0|      if (r < 0) {
  ------------------
  |  Branch (6165:11): [True: 0, False: 0]
  ------------------
 6166|      0|	onig_node_free(target);
 6167|      0|	return r;
 6168|      0|      }
 6169|      0|      NENCLOSE(*np)->target = target;
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 6170|      0|      return tok->type;
 6171|      0|    }
 6172|  4.93k|    break;
 6173|       |
 6174|  4.93k|  case TK_SUBEXP_CLOSE:
  ------------------
  |  Branch (6174:3): [True: 0, False: 48.0k]
  ------------------
 6175|      0|    if (! IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP))
  ------------------
  |  |  332|      0|#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
  ------------------
  |  Branch (6175:9): [True: 0, False: 0]
  ------------------
 6176|      0|      return ONIGERR_UNMATCHED_CLOSE_PARENTHESIS;
  ------------------
  |  |  660|      0|#define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS                  -116
  ------------------
 6177|       |
 6178|      0|    if (tok->escaped) goto tk_raw_byte;
  ------------------
  |  Branch (6178:9): [True: 0, False: 0]
  ------------------
 6179|      0|    else goto tk_byte;
 6180|      0|    break;
 6181|       |
 6182|      0|  case TK_LINEBREAK:
  ------------------
  |  Branch (6182:3): [True: 0, False: 48.0k]
  ------------------
 6183|      0|    r = node_linebreak(np, env);
 6184|      0|    if (r < 0) return r;
  ------------------
  |  Branch (6184:9): [True: 0, False: 0]
  ------------------
 6185|      0|    break;
 6186|       |
 6187|      0|  case TK_EXTENDED_GRAPHEME_CLUSTER:
  ------------------
  |  Branch (6187:3): [True: 0, False: 48.0k]
  ------------------
 6188|      0|    r = node_extended_grapheme_cluster(np, env);
 6189|      0|    if (r < 0) return r;
  ------------------
  |  Branch (6189:9): [True: 0, False: 0]
  ------------------
 6190|      0|    break;
 6191|       |
 6192|      0|  case TK_KEEP:
  ------------------
  |  Branch (6192:3): [True: 0, False: 48.0k]
  ------------------
 6193|      0|    *np = onig_node_new_anchor(ANCHOR_KEEP);
  ------------------
  |  |  559|      0|#define ANCHOR_KEEP             (1<<16)
  ------------------
 6194|      0|    CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 6195|      0|    break;
 6196|       |
 6197|  17.2k|  case TK_STRING:
  ------------------
  |  Branch (6197:3): [True: 17.2k, False: 30.8k]
  ------------------
 6198|  17.2k|  tk_byte:
 6199|  17.2k|    {
 6200|  17.2k|      *np = node_new_str(tok->backp, *src);
 6201|  17.2k|      CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|  17.2k|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|  17.2k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 17.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 6202|       |
 6203|  17.2k|    string_loop:
 6204|   151k|      while (1) {
  ------------------
  |  Branch (6204:14): [Folded - Ignored]
  ------------------
 6205|   151k|	r = fetch_token(tok, src, end, env);
 6206|   151k|	if (r < 0) return r;
  ------------------
  |  Branch (6206:6): [True: 0, False: 151k]
  ------------------
 6207|   151k|	if (r == TK_STRING) {
  ------------------
  |  Branch (6207:6): [True: 133k, False: 17.2k]
  ------------------
 6208|   133k|	  r = onig_node_str_cat(*np, tok->backp, *src);
 6209|   133k|	}
 6210|  17.2k|#ifndef NUMBERED_CHAR_IS_NOT_CASE_AMBIG
 6211|  17.2k|	else if (r == TK_CODE_POINT) {
  ------------------
  |  Branch (6211:11): [True: 0, False: 17.2k]
  ------------------
 6212|      0|	  r = node_str_cat_codepoint(*np, env->enc, tok->u.code);
 6213|      0|	}
 6214|  17.2k|#endif
 6215|  17.2k|	else {
 6216|  17.2k|	  break;
 6217|  17.2k|	}
 6218|   133k|	if (r < 0) return r;
  ------------------
  |  Branch (6218:6): [True: 0, False: 133k]
  ------------------
 6219|   133k|      }
 6220|       |
 6221|  17.2k|    string_end:
 6222|  17.2k|      targetp = np;
 6223|  17.2k|      goto repeat;
 6224|  17.2k|    }
 6225|      0|    break;
 6226|       |
 6227|      0|  case TK_RAW_BYTE:
  ------------------
  |  Branch (6227:3): [True: 0, False: 48.0k]
  ------------------
 6228|      0|  tk_raw_byte:
 6229|      0|    {
 6230|      0|      *np = node_new_str_raw_char((UChar )tok->u.c);
 6231|      0|      CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 6232|      0|      len = 1;
 6233|      0|      while (1) {
  ------------------
  |  Branch (6233:14): [Folded - Ignored]
  ------------------
 6234|      0|	if (len >= ONIGENC_MBC_MINLEN(env->enc)) {
  ------------------
  |  |  367|      0|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  ------------------
  |  Branch (6234:6): [True: 0, False: 0]
  ------------------
 6235|      0|	  if (len == enclen(env->enc, NSTR(*np)->s, NSTR(*np)->end)) {
  ------------------
  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  ------------------
  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  ------------------
  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (6235:8): [True: 0, False: 0]
  ------------------
 6236|      0|	    r = fetch_token(tok, src, end, env);
 6237|      0|	    NSTRING_CLEAR_RAW(*np);
  ------------------
  |  |  110|      0|#define NSTRING_CLEAR_RAW(node)        (node)->u.str.flag &= ~NSTR_RAW
  |  |  ------------------
  |  |  |  |  104|      0|#define NSTR_RAW                (1<<0) /* by backslashed number */
  |  |  ------------------
  ------------------
 6238|      0|	    goto string_end;
 6239|      0|	  }
 6240|      0|	}
 6241|       |
 6242|      0|	r = fetch_token(tok, src, end, env);
 6243|      0|	if (r < 0) return r;
  ------------------
  |  Branch (6243:6): [True: 0, False: 0]
  ------------------
 6244|      0|	if (r != TK_RAW_BYTE) {
  ------------------
  |  Branch (6244:6): [True: 0, False: 0]
  ------------------
 6245|       |	  /* Don't use this, it is wrong for little endian encodings. */
 6246|       |#ifdef USE_PAD_TO_SHORT_BYTE_CHAR
 6247|       |	  int rem;
 6248|       |	  if (len < ONIGENC_MBC_MINLEN(env->enc)) {
 6249|       |	    rem = ONIGENC_MBC_MINLEN(env->enc) - len;
 6250|       |	    (void )node_str_head_pad(NSTR(*np), rem, (UChar )0);
 6251|       |	    if (len + rem == enclen(env->enc, NSTR(*np)->s)) {
 6252|       |	      NSTRING_CLEAR_RAW(*np);
 6253|       |	      goto string_end;
 6254|       |	    }
 6255|       |	  }
 6256|       |#endif
 6257|      0|	  return ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;
  ------------------
  |  |  675|      0|#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING                  -206
  ------------------
 6258|      0|	}
 6259|       |
 6260|      0|	r = node_str_cat_char(*np, (UChar )tok->u.c);
 6261|      0|	if (r < 0) return r;
  ------------------
  |  Branch (6261:6): [True: 0, False: 0]
  ------------------
 6262|       |
 6263|      0|	len++;
 6264|      0|      }
 6265|      0|    }
 6266|      0|    break;
 6267|       |
 6268|      0|  case TK_CODE_POINT:
  ------------------
  |  Branch (6268:3): [True: 0, False: 48.0k]
  ------------------
 6269|      0|    {
 6270|      0|      *np = node_new_empty();
 6271|      0|      CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 6272|      0|      r = node_str_cat_codepoint(*np, env->enc, tok->u.code);
 6273|      0|      if (r != 0) return r;
  ------------------
  |  Branch (6273:11): [True: 0, False: 0]
  ------------------
 6274|       |#ifdef NUMBERED_CHAR_IS_NOT_CASE_AMBIG
 6275|       |      NSTRING_SET_RAW(*np);
 6276|       |#else
 6277|      0|      goto string_loop;
 6278|      0|#endif
 6279|      0|    }
 6280|      0|    break;
 6281|       |
 6282|      0|  case TK_QUOTE_OPEN:
  ------------------
  |  Branch (6282:3): [True: 0, False: 48.0k]
  ------------------
 6283|      0|    {
 6284|      0|      OnigCodePoint end_op[2];
 6285|      0|      UChar *qstart, *qend, *nextp;
  ------------------
  |  |   76|      0|# define UChar OnigUChar
  ------------------
 6286|       |
 6287|      0|      end_op[0] = (OnigCodePoint )MC_ESC(env->syntax);
  ------------------
  |  |  761|      0|#define MC_ESC(syn)               (syn)->meta_char_table.esc
  ------------------
 6288|      0|      end_op[1] = (OnigCodePoint )'E';
 6289|      0|      qstart = *src;
 6290|      0|      qend = find_str_position(end_op, 2, qstart, end, &nextp, env->enc);
 6291|      0|      if (IS_NULL(qend)) {
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 6292|      0|	nextp = qend = end;
 6293|      0|      }
 6294|      0|      *np = node_new_str(qstart, qend);
 6295|      0|      CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 6296|      0|      *src = nextp;
 6297|      0|    }
 6298|      0|    break;
 6299|       |
 6300|  3.69k|  case TK_CHAR_TYPE:
  ------------------
  |  Branch (6300:3): [True: 3.69k, False: 44.3k]
  ------------------
 6301|  3.69k|    {
 6302|  3.69k|      switch (tok->u.prop.ctype) {
 6303|      0|      case ONIGENC_CTYPE_WORD:
  ------------------
  |  |  306|      0|#define ONIGENC_CTYPE_WORD     12
  ------------------
  |  Branch (6303:7): [True: 0, False: 3.69k]
  ------------------
 6304|      0|	*np = node_new_ctype(tok->u.prop.ctype, tok->u.prop.not,
 6305|      0|			     IS_ASCII_RANGE(env->option));
  ------------------
  |  |  406|      0|#define IS_ASCII_RANGE(option)    ((option) & ONIG_OPTION_ASCII_RANGE)
  |  |  ------------------
  |  |  |  |  470|      0|#define ONIG_OPTION_ASCII_RANGE          (ONIG_OPTION_NOTEOS << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  468|      0|#define ONIG_OPTION_NOTEOS               (ONIG_OPTION_NOTBOS << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  467|      0|#define ONIG_OPTION_NOTBOS               (ONIG_OPTION_NOTEOL << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define ONIG_OPTION_NOTEOL               (ONIG_OPTION_NOTBOL << 1)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  465|      0|#define ONIG_OPTION_NOTBOL               (ONIG_OPTION_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  463|      0|#define ONIG_OPTION_CAPTURE_GROUP        (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  462|      0|#define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  461|      0|#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  460|      0|#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  459|      0|#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  458|      0|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  456|      0|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  455|      0|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  454|      0|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6306|      0|	CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 6307|      0|	break;
 6308|       |
 6309|  2.05k|      case ONIGENC_CTYPE_SPACE:
  ------------------
  |  |  303|  2.05k|#define ONIGENC_CTYPE_SPACE     9
  ------------------
  |  Branch (6309:7): [True: 2.05k, False: 1.64k]
  ------------------
 6310|  3.69k|      case ONIGENC_CTYPE_DIGIT:
  ------------------
  |  |  298|  3.69k|#define ONIGENC_CTYPE_DIGIT     4
  ------------------
  |  Branch (6310:7): [True: 1.64k, False: 2.05k]
  ------------------
 6311|  3.69k|      case ONIGENC_CTYPE_XDIGIT:
  ------------------
  |  |  305|  3.69k|#define ONIGENC_CTYPE_XDIGIT   11
  ------------------
  |  Branch (6311:7): [True: 0, False: 3.69k]
  ------------------
 6312|  3.69k|	{
 6313|  3.69k|	  CClassNode* cc;
 6314|       |
 6315|  3.69k|	  *np = node_new_cclass();
 6316|  3.69k|	  CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|  3.69k|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|  3.69k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 3.69k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 6317|  3.69k|	  cc = NCCLASS(*np);
  ------------------
  |  |   77|  3.69k|#define NCCLASS(node)      (&((node)->u.cclass))
  ------------------
 6318|  3.69k|	  r = add_ctype_to_cc(cc, tok->u.prop.ctype, 0,
 6319|  3.69k|	      IS_ASCII_RANGE(env->option), env);
  ------------------
  |  |  406|  3.69k|#define IS_ASCII_RANGE(option)    ((option) & ONIG_OPTION_ASCII_RANGE)
  |  |  ------------------
  |  |  |  |  470|  3.69k|#define ONIG_OPTION_ASCII_RANGE          (ONIG_OPTION_NOTEOS << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  468|  3.69k|#define ONIG_OPTION_NOTEOS               (ONIG_OPTION_NOTBOS << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  467|  3.69k|#define ONIG_OPTION_NOTBOS               (ONIG_OPTION_NOTEOL << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|  3.69k|#define ONIG_OPTION_NOTEOL               (ONIG_OPTION_NOTBOL << 1)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  465|  3.69k|#define ONIG_OPTION_NOTBOL               (ONIG_OPTION_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  463|  3.69k|#define ONIG_OPTION_CAPTURE_GROUP        (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  462|  3.69k|#define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  461|  3.69k|#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  460|  3.69k|#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  459|  3.69k|#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  458|  3.69k|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  456|  3.69k|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  455|  3.69k|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  454|  3.69k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6320|  3.69k|	  if (r != 0) return r;
  ------------------
  |  Branch (6320:8): [True: 0, False: 3.69k]
  ------------------
 6321|  3.69k|	  if (tok->u.prop.not != 0) NCCLASS_SET_NOT(cc);
  ------------------
  |  |  807|      0|#define NCCLASS_SET_NOT(nd)     NCCLASS_FLAG_SET(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  800|      0|#define NCCLASS_FLAG_SET(cc,flag)    (NCCLASS_FLAGS(cc) |= (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|      0|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6321:8): [True: 0, False: 3.69k]
  ------------------
 6322|  3.69k|	}
 6323|      0|	break;
 6324|       |
 6325|      0|      default:
  ------------------
  |  Branch (6325:7): [True: 0, False: 3.69k]
  ------------------
 6326|      0|	return ONIGERR_PARSER_BUG;
  ------------------
  |  |  634|      0|#define ONIGERR_PARSER_BUG                                    -11
  ------------------
 6327|      0|	break;
 6328|  3.69k|      }
 6329|  3.69k|    }
 6330|  3.69k|    break;
 6331|       |
 6332|  3.69k|  case TK_CHAR_PROPERTY:
  ------------------
  |  Branch (6332:3): [True: 0, False: 48.0k]
  ------------------
 6333|      0|    r = parse_char_property(np, tok, src, end, env);
 6334|      0|    if (r != 0) return r;
  ------------------
  |  Branch (6334:9): [True: 0, False: 0]
  ------------------
 6335|      0|    break;
 6336|       |
 6337|  6.16k|  case TK_CC_OPEN:
  ------------------
  |  Branch (6337:3): [True: 6.16k, False: 41.9k]
  ------------------
 6338|  6.16k|    {
 6339|  6.16k|      Node *asc_node;
 6340|  6.16k|      CClassNode* cc;
 6341|  6.16k|      OnigCodePoint code;
 6342|       |
 6343|  6.16k|      r = parse_char_class(np, &asc_node, tok, src, end, env);
 6344|  6.16k|      if (r != 0) {
  ------------------
  |  Branch (6344:11): [True: 0, False: 6.16k]
  ------------------
 6345|      0|	onig_node_free(asc_node);
 6346|      0|	return r;
 6347|      0|      }
 6348|       |
 6349|  6.16k|      cc = NCCLASS(*np);
  ------------------
  |  |   77|  6.16k|#define NCCLASS(node)      (&((node)->u.cclass))
  ------------------
 6350|  6.16k|      if (is_onechar_cclass(cc, &code)) {
  ------------------
  |  Branch (6350:11): [True: 0, False: 6.16k]
  ------------------
 6351|      0|	onig_node_free(*np);
 6352|      0|	onig_node_free(asc_node);
 6353|      0|	*np = node_new_empty();
 6354|      0|	CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 6355|      0|	r = node_str_cat_codepoint(*np, env->enc, code);
 6356|      0|	if (r != 0) return r;
  ------------------
  |  Branch (6356:6): [True: 0, False: 0]
  ------------------
 6357|      0|	goto string_loop;
 6358|      0|      }
 6359|  6.16k|      if (IS_IGNORECASE(env->option)) {
  ------------------
  |  |  396|  6.16k|#define IS_IGNORECASE(option)     ((option) & ONIG_OPTION_IGNORECASE)
  |  |  ------------------
  |  |  |  |  454|  6.16k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  ------------------
  |  |  |  Branch (396:35): [True: 0, False: 6.16k]
  |  |  ------------------
  ------------------
 6360|      0|	r = cclass_case_fold(np, cc, NCCLASS(asc_node), env);
  ------------------
  |  |   77|      0|#define NCCLASS(node)      (&((node)->u.cclass))
  ------------------
 6361|      0|	if (r != 0) {
  ------------------
  |  Branch (6361:6): [True: 0, False: 0]
  ------------------
 6362|      0|	  onig_node_free(asc_node);
 6363|      0|	  return r;
 6364|      0|	}
 6365|      0|      }
 6366|  6.16k|      onig_node_free(asc_node);
 6367|  6.16k|    }
 6368|      0|    break;
 6369|       |
 6370|  4.11k|  case TK_ANYCHAR:
  ------------------
  |  Branch (6370:3): [True: 4.11k, False: 43.9k]
  ------------------
 6371|  4.11k|    *np = node_new_anychar();
 6372|  4.11k|    CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|  4.11k|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|  4.11k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 4.11k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 6373|  4.11k|    break;
 6374|       |
 6375|  4.11k|  case TK_ANYCHAR_ANYTIME:
  ------------------
  |  Branch (6375:3): [True: 0, False: 48.0k]
  ------------------
 6376|      0|    *np = node_new_anychar();
 6377|      0|    CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 6378|      0|    qn = node_new_quantifier(0, REPEAT_INFINITE, 0);
  ------------------
  |  |  421|      0|#define REPEAT_INFINITE         -1
  ------------------
 6379|      0|    CHECK_NULL_RETURN_MEMERR(qn);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 6380|      0|    NQTFR(qn)->target = *np;
  ------------------
  |  |   80|      0|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 6381|      0|    *np = qn;
 6382|      0|    break;
 6383|       |
 6384|      0|  case TK_BACKREF:
  ------------------
  |  Branch (6384:3): [True: 0, False: 48.0k]
  ------------------
 6385|      0|    len = tok->u.backref.num;
 6386|      0|    *np = node_new_backref(len,
 6387|      0|		   (len > 1 ? tok->u.backref.refs : &(tok->u.backref.ref1)),
  ------------------
  |  Branch (6387:7): [True: 0, False: 0]
  ------------------
 6388|      0|			   tok->u.backref.by_name,
 6389|      0|#ifdef USE_BACKREF_WITH_LEVEL
 6390|      0|			   tok->u.backref.exist_level,
 6391|      0|			   tok->u.backref.level,
 6392|      0|#endif
 6393|      0|			   env);
 6394|      0|    CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 6395|      0|    break;
 6396|       |
 6397|      0|#ifdef USE_SUBEXP_CALL
 6398|      0|  case TK_CALL:
  ------------------
  |  Branch (6398:3): [True: 0, False: 48.0k]
  ------------------
 6399|      0|    {
 6400|      0|      int gnum = tok->u.call.gnum;
 6401|       |
 6402|      0|      if (gnum < 0 || tok->u.call.rel != 0) {
  ------------------
  |  Branch (6402:11): [True: 0, False: 0]
  |  Branch (6402:23): [True: 0, False: 0]
  ------------------
 6403|      0|	if (gnum > 0) gnum--;
  ------------------
  |  Branch (6403:6): [True: 0, False: 0]
  ------------------
 6404|      0|	gnum = BACKREF_REL_TO_ABS(gnum, env);
  ------------------
  |  |  158|      0|  ((env)->num_mem + 1 + (rel_no))
  ------------------
 6405|      0|	if (gnum <= 0)
  ------------------
  |  Branch (6405:6): [True: 0, False: 0]
  ------------------
 6406|      0|	  return ONIGERR_INVALID_BACKREF;
  ------------------
  |  |  677|      0|#define ONIGERR_INVALID_BACKREF                              -208
  ------------------
 6407|      0|      }
 6408|      0|      *np = node_new_call(tok->u.call.name, tok->u.call.name_end, gnum);
 6409|      0|      CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 6410|      0|      env->num_call++;
 6411|      0|    }
 6412|      0|    break;
 6413|      0|#endif
 6414|       |
 6415|  11.9k|  case TK_ANCHOR:
  ------------------
  |  Branch (6415:3): [True: 11.9k, False: 36.1k]
  ------------------
 6416|  11.9k|    *np = onig_node_new_anchor(tok->u.anchor.subtype);
 6417|  11.9k|    CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|  11.9k|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|  11.9k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 11.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 6418|  11.9k|    NANCHOR(*np)->ascii_range = tok->u.anchor.ascii_range;
  ------------------
  |  |   82|  11.9k|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
 6419|  11.9k|    break;
 6420|       |
 6421|      0|  case TK_OP_REPEAT:
  ------------------
  |  Branch (6421:3): [True: 0, False: 48.0k]
  ------------------
 6422|      0|  case TK_INTERVAL:
  ------------------
  |  Branch (6422:3): [True: 0, False: 48.0k]
  ------------------
 6423|      0|    if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS)) {
  ------------------
  |  |  332|      0|#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
  |  |  ------------------
  |  |  |  Branch (332:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 6424|      0|      if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS))
  ------------------
  |  |  332|      0|#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
  |  |  ------------------
  |  |  |  Branch (332:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 6425|      0|	return ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED;
  ------------------
  |  |  657|      0|#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED      -113
  ------------------
 6426|      0|      else
 6427|      0|	*np = node_new_empty();
 6428|      0|    }
 6429|      0|    else {
 6430|      0|      goto tk_byte;
 6431|      0|    }
 6432|      0|    break;
 6433|       |
 6434|      0|  default:
  ------------------
  |  Branch (6434:3): [True: 0, False: 48.0k]
  ------------------
 6435|      0|    return ONIGERR_PARSER_BUG;
  ------------------
  |  |  634|      0|#define ONIGERR_PARSER_BUG                                    -11
  ------------------
 6436|      0|    break;
 6437|  48.0k|  }
 6438|       |
 6439|  30.8k|  {
 6440|  30.8k|    targetp = np;
 6441|       |
 6442|  43.1k|  re_entry:
 6443|  43.1k|    r = fetch_token(tok, src, end, env);
 6444|  43.1k|    if (r < 0) return r;
  ------------------
  |  Branch (6444:9): [True: 0, False: 43.1k]
  ------------------
 6445|       |
 6446|  60.4k|  repeat:
 6447|  60.4k|    if (r == TK_OP_REPEAT || r == TK_INTERVAL) {
  ------------------
  |  Branch (6447:9): [True: 12.3k, False: 48.0k]
  |  Branch (6447:30): [True: 0, False: 48.0k]
  ------------------
 6448|  12.3k|      if (is_invalid_quantifier_target(*targetp))
  ------------------
  |  | 2122|  12.3k|# define is_invalid_quantifier_target(node) 0
  |  |  ------------------
  |  |  |  Branch (2122:45): [Folded - Ignored]
  |  |  ------------------
  ------------------
 6449|      0|	return ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID;
  ------------------
  |  |  658|      0|#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID            -114
  ------------------
 6450|       |
 6451|  12.3k|      parse_depth++;
 6452|  12.3k|      if (parse_depth > ParseDepthLimit)
  ------------------
  |  Branch (6452:11): [True: 0, False: 12.3k]
  ------------------
 6453|      0|	return ONIGERR_PARSE_DEPTH_LIMIT_OVER;
  ------------------
  |  |  639|      0|#define ONIGERR_PARSE_DEPTH_LIMIT_OVER                        -16
  ------------------
 6454|       |
 6455|  12.3k|      qn = node_new_quantifier(tok->u.repeat.lower, tok->u.repeat.upper,
 6456|  12.3k|			       (r == TK_INTERVAL ? 1 : 0));
  ------------------
  |  Branch (6456:12): [True: 0, False: 12.3k]
  ------------------
 6457|  12.3k|      CHECK_NULL_RETURN_MEMERR(qn);
  ------------------
  |  |  314|  12.3k|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|  12.3k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 12.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 6458|  12.3k|      NQTFR(qn)->greedy = tok->u.repeat.greedy;
  ------------------
  |  |   80|  12.3k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 6459|  12.3k|      r = set_quantifier(qn, *targetp, group, env);
 6460|  12.3k|      if (r < 0) {
  ------------------
  |  Branch (6460:11): [True: 0, False: 12.3k]
  ------------------
 6461|      0|	onig_node_free(qn);
 6462|      0|	return r;
 6463|      0|      }
 6464|       |
 6465|  12.3k|      if (tok->u.repeat.possessive != 0) {
  ------------------
  |  Branch (6465:11): [True: 0, False: 12.3k]
  ------------------
 6466|      0|	Node* en;
 6467|      0|	en = node_new_enclose(ENCLOSE_STOP_BACKTRACK);
  ------------------
  |  |   96|      0|#define ENCLOSE_STOP_BACKTRACK   (1<<2)
  ------------------
 6468|      0|	if (IS_NULL(en)) {
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 6469|      0|	  onig_node_free(qn);
 6470|      0|	  return ONIGERR_MEMORY;
  ------------------
  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  ------------------
 6471|      0|	}
 6472|      0|	NENCLOSE(en)->target = qn;
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 6473|      0|	qn = en;
 6474|      0|      }
 6475|       |
 6476|  12.3k|      if (r == 0) {
  ------------------
  |  Branch (6476:11): [True: 12.3k, False: 0]
  ------------------
 6477|  12.3k|	*targetp = qn;
 6478|  12.3k|      }
 6479|      0|      else if (r == 1) {
  ------------------
  |  Branch (6479:16): [True: 0, False: 0]
  ------------------
 6480|      0|	onig_node_free(qn);
 6481|      0|      }
 6482|      0|      else if (r == 2) { /* split case: /abc+/ */
  ------------------
  |  Branch (6482:16): [True: 0, False: 0]
  ------------------
 6483|      0|	Node *tmp;
 6484|       |
 6485|      0|	*targetp = node_new_list(*targetp, NULL);
 6486|      0|	if (IS_NULL(*targetp)) {
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 6487|      0|	  onig_node_free(qn);
 6488|      0|	  return ONIGERR_MEMORY;
  ------------------
  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  ------------------
 6489|      0|	}
 6490|      0|	tmp = NCDR(*targetp) = node_new_list(qn, NULL);
  ------------------
  |  |   87|      0|#define NCDR(node)         (NCONS(node)->cdr)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 6491|      0|	if (IS_NULL(tmp)) {
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 6492|      0|	  onig_node_free(qn);
 6493|      0|	  return ONIGERR_MEMORY;
  ------------------
  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  ------------------
 6494|      0|	}
 6495|      0|	targetp = &(NCAR(tmp));
  ------------------
  |  |   86|      0|#define NCAR(node)         (NCONS(node)->car)
  |  |  ------------------
  |  |  |  |   83|      0|#define NCONS(node)        (&((node)->u.cons))
  |  |  ------------------
  ------------------
 6496|      0|      }
 6497|  12.3k|      goto re_entry;
 6498|  12.3k|    }
 6499|  60.4k|  }
 6500|       |
 6501|  48.0k|  return r;
 6502|  60.4k|}
regparse.c:node_new_empty:
 1497|    411|{
 1498|    411|  return node_new_str(NULL, NULL);
 1499|    411|}
regparse.c:parse_enclose:
 4965|  4.93k|{
 4966|  4.93k|  int r = 0, num;
 4967|  4.93k|  Node *target, *work1 = NULL, *work2 = NULL;
 4968|  4.93k|  OnigOptionType option;
 4969|  4.93k|  OnigCodePoint c;
 4970|  4.93k|  OnigEncoding enc = env->enc;
 4971|       |
 4972|  4.93k|#ifdef USE_NAMED_GROUP
 4973|  4.93k|  int list_capture;
 4974|  4.93k|#endif
 4975|       |
 4976|  4.93k|  UChar* p = *src;
  ------------------
  |  |   76|  4.93k|# define UChar OnigUChar
  ------------------
 4977|  4.93k|  PFETCH_READY;
  ------------------
  |  |  295|  4.93k|# define PFETCH_READY  UChar* pfetch_prev = NULL; (void)pfetch_prev
  |  |  ------------------
  |  |  |  |   76|  4.93k|# define UChar OnigUChar
  |  |  ------------------
  ------------------
 4978|       |
 4979|  4.93k|  *np = NULL;
 4980|  4.93k|  if (PEND) return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS;
  ------------------
  |  |  299|  4.93k|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 4.93k]
  |  |  |  Branch (299:23): [True: 4.93k, False: 0]
  |  |  ------------------
  ------------------
                if (PEND) return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS;
  ------------------
  |  |  661|      0|#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS       -117
  ------------------
 4981|       |
 4982|  4.93k|  option = env->option;
 4983|  4.93k|  if (PPEEK_IS('?') &&
  ------------------
  |  |  320|  9.86k|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|  4.93k|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|  4.93k|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 4.93k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 4.52k, False: 411]
  |  |  ------------------
  ------------------
 4984|  4.93k|      IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_GROUP_EFFECT)) {
  ------------------
  |  |  331|  4.52k|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 4.52k, False: 0]
  |  |  ------------------
  ------------------
 4985|  4.52k|    PINC;
  ------------------
  |  |  301|  4.52k|#define PINC       do { \
  |  |  302|  4.52k|  pfetch_prev = p; \
  |  |  303|  4.52k|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|  4.52k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|  4.52k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 4.52k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|  4.52k|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4986|  4.52k|    if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
  ------------------
  |  |  299|  4.52k|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 4.52k]
  |  |  |  Branch (299:23): [True: 4.52k, False: 0]
  |  |  ------------------
  ------------------
                  if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
  ------------------
  |  |  662|      0|#define ONIGERR_END_PATTERN_IN_GROUP                         -118
  ------------------
 4987|       |
 4988|  4.52k|    PFETCH(c);
  ------------------
  |  |  305|  4.52k|#define PFETCH(c)  do { \
  |  |  306|  4.52k|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|  4.52k|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 4.52k]
  |  |  ------------------
  |  |  307|  4.52k|  pfetch_prev = p; \
  |  |  308|  4.52k|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|  4.52k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|  4.52k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 4.52k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|  4.52k|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4989|  4.52k|    switch (c) {
 4990|  2.46k|    case ':':   /* (?:...) grouping only */
  ------------------
  |  Branch (4990:5): [True: 2.46k, False: 2.05k]
  ------------------
 4991|  2.46k|    group:
 4992|  2.46k|      r = fetch_token(tok, &p, end, env);
 4993|  2.46k|      if (r < 0) return r;
  ------------------
  |  Branch (4993:11): [True: 0, False: 2.46k]
  ------------------
 4994|  2.46k|      r = parse_subexp(np, tok, term, &p, end, env);
 4995|  2.46k|      if (r < 0) return r;
  ------------------
  |  Branch (4995:11): [True: 0, False: 2.46k]
  ------------------
 4996|  2.46k|      *src = p;
 4997|  2.46k|      return 1; /* group */
 4998|      0|      break;
 4999|       |
 5000|      0|    case '=':
  ------------------
  |  Branch (5000:5): [True: 0, False: 4.52k]
  ------------------
 5001|      0|      *np = onig_node_new_anchor(ANCHOR_PREC_READ);
  ------------------
  |  |  551|      0|#define ANCHOR_PREC_READ        (1<<10)
  ------------------
 5002|      0|      break;
 5003|      0|    case '!':   /* preceding read */
  ------------------
  |  Branch (5003:5): [True: 0, False: 4.52k]
  ------------------
 5004|      0|      *np = onig_node_new_anchor(ANCHOR_PREC_READ_NOT);
  ------------------
  |  |  552|      0|#define ANCHOR_PREC_READ_NOT    (1<<11)
  ------------------
 5005|      0|      break;
 5006|      0|    case '>':   /* (?>...) stop backtrack */
  ------------------
  |  Branch (5006:5): [True: 0, False: 4.52k]
  ------------------
 5007|      0|      *np = node_new_enclose(ENCLOSE_STOP_BACKTRACK);
  ------------------
  |  |   96|      0|#define ENCLOSE_STOP_BACKTRACK   (1<<2)
  ------------------
 5008|      0|      break;
 5009|      0|    case '~':   /* (?~...) absent operator */
  ------------------
  |  Branch (5009:5): [True: 0, False: 4.52k]
  ------------------
 5010|      0|      if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_TILDE_ABSENT)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5011|      0|	*np = node_new_enclose(ENCLOSE_ABSENT);
  ------------------
  |  |   98|      0|#define ENCLOSE_ABSENT           (1<<4)
  ------------------
 5012|      0|      }
 5013|      0|      else {
 5014|      0|	return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  663|      0|#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
  ------------------
 5015|      0|      }
 5016|      0|      break;
 5017|       |
 5018|      0|#ifdef USE_NAMED_GROUP
 5019|      0|    case '\'':
  ------------------
  |  Branch (5019:5): [True: 0, False: 4.52k]
  ------------------
 5020|      0|      if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5021|      0|	goto named_group1;
 5022|      0|      }
 5023|      0|      else
 5024|      0|	return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  663|      0|#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
  ------------------
 5025|      0|      break;
 5026|       |
 5027|      0|# ifdef USE_CAPITAL_P_NAMED_GROUP
 5028|      0|    case 'P':   /* (?P<name>...) */
  ------------------
  |  Branch (5028:5): [True: 0, False: 4.52k]
  ------------------
 5029|      0|      if (!PEND &&
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (5029:11): [True: 0, False: 0]
  ------------------
 5030|      0|	  IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5031|      0|	PFETCH(c);
  ------------------
  |  |  305|      0|#define PFETCH(c)  do { \
  |  |  306|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  307|      0|  pfetch_prev = p; \
  |  |  308|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5032|      0|	if (c == '<') goto named_group1;
  ------------------
  |  Branch (5032:6): [True: 0, False: 0]
  ------------------
 5033|      0|      }
 5034|      0|      return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  663|      0|#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
  ------------------
 5035|      0|      break;
 5036|      0|# endif
 5037|      0|#endif
 5038|       |
 5039|  1.64k|    case '<':   /* look behind (?<=...), (?<!...) */
  ------------------
  |  Branch (5039:5): [True: 1.64k, False: 2.87k]
  ------------------
 5040|  1.64k|      if (PEND) return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS;
  ------------------
  |  |  299|  1.64k|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 1.64k]
  |  |  |  Branch (299:23): [True: 1.64k, False: 0]
  |  |  ------------------
  ------------------
                    if (PEND) return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS;
  ------------------
  |  |  661|      0|#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS       -117
  ------------------
 5041|  1.64k|      PFETCH(c);
  ------------------
  |  |  305|  1.64k|#define PFETCH(c)  do { \
  |  |  306|  1.64k|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|  1.64k|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 1.64k]
  |  |  ------------------
  |  |  307|  1.64k|  pfetch_prev = p; \
  |  |  308|  1.64k|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|  1.64k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|  1.64k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 1.64k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|  1.64k|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5042|  1.64k|      if (c == '=')
  ------------------
  |  Branch (5042:11): [True: 0, False: 1.64k]
  ------------------
 5043|      0|	*np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND);
  ------------------
  |  |  553|      0|#define ANCHOR_LOOK_BEHIND      (1<<12)
  ------------------
 5044|  1.64k|      else if (c == '!')
  ------------------
  |  Branch (5044:16): [True: 0, False: 1.64k]
  ------------------
 5045|      0|	*np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND_NOT);
  ------------------
  |  |  554|      0|#define ANCHOR_LOOK_BEHIND_NOT  (1<<13)
  ------------------
 5046|  1.64k|#ifdef USE_NAMED_GROUP
 5047|  1.64k|      else {    /* (?<name>...) */
 5048|  1.64k|	if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {
  ------------------
  |  |  331|  1.64k|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 1.64k, False: 0]
  |  |  ------------------
  ------------------
 5049|  1.64k|	  UChar *name;
  ------------------
  |  |   76|  1.64k|# define UChar OnigUChar
  ------------------
 5050|  1.64k|	  UChar *name_end;
  ------------------
  |  |   76|  1.64k|# define UChar OnigUChar
  ------------------
 5051|       |
 5052|  1.64k|	  PUNFETCH;
  ------------------
  |  |  300|  1.64k|#define PUNFETCH     p = pfetch_prev
  ------------------
 5053|  1.64k|	  c = '<';
 5054|       |
 5055|  1.64k|	named_group1:
 5056|  1.64k|	  list_capture = 0;
 5057|       |
 5058|  1.64k|# ifdef USE_CAPTURE_HISTORY
 5059|  1.64k|	named_group2:
 5060|  1.64k|# endif
 5061|  1.64k|	  name = p;
 5062|  1.64k|	  r = fetch_name((OnigCodePoint )c, &p, end, &name_end, env, &num, 0);
 5063|  1.64k|	  if (r < 0) return r;
  ------------------
  |  Branch (5063:8): [True: 0, False: 1.64k]
  ------------------
 5064|       |
 5065|  1.64k|	  num = scan_env_add_mem_entry(env);
 5066|  1.64k|	  if (num < 0) return num;
  ------------------
  |  Branch (5066:8): [True: 0, False: 1.64k]
  ------------------
 5067|  1.64k|	  if (list_capture != 0 && num >= (int )BIT_STATUS_BITS_NUM)
  ------------------
  |  |  367|      0|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  ------------------
  |  Branch (5067:8): [True: 0, False: 1.64k]
  |  Branch (5067:29): [True: 0, False: 0]
  ------------------
 5068|      0|	    return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY;
  ------------------
  |  |  690|      0|#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY        -222
  ------------------
 5069|       |
 5070|  1.64k|	  r = name_add(env->reg, name, name_end, num, env);
 5071|  1.64k|	  if (r != 0) return r;
  ------------------
  |  Branch (5071:8): [True: 0, False: 1.64k]
  ------------------
 5072|  1.64k|	  *np = node_new_enclose_memory(env->option, 1);
 5073|  1.64k|	  CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|  1.64k|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|  1.64k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 1.64k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 5074|  1.64k|	  NENCLOSE(*np)->regnum = num;
  ------------------
  |  |   81|  1.64k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 5075|  1.64k|	  if (list_capture != 0)
  ------------------
  |  Branch (5075:8): [True: 0, False: 1.64k]
  ------------------
 5076|      0|	    BIT_STATUS_ON_AT_SIMPLE(env->capture_history, num);
  ------------------
  |  |  380|      0|#define BIT_STATUS_ON_AT_SIMPLE(stats,n) do {\
  |  |  381|      0|  if ((n) < (int )BIT_STATUS_BITS_NUM)\
  |  |  ------------------
  |  |  |  |  367|      0|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  |  |  ------------------
  |  |  |  Branch (381:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  382|      0|    (stats) |= (1 << (n));\
  |  |  383|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (383:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5077|  1.64k|	  env->num_named++;
 5078|  1.64k|	}
 5079|      0|	else {
 5080|      0|	  return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  663|      0|#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
  ------------------
 5081|      0|	}
 5082|  1.64k|      }
 5083|       |#else
 5084|       |      else {
 5085|       |	return ONIGERR_UNDEFINED_GROUP_OPTION;
 5086|       |      }
 5087|       |#endif
 5088|  1.64k|      break;
 5089|       |
 5090|  1.64k|#ifdef USE_CAPTURE_HISTORY
 5091|  1.64k|    case '@':
  ------------------
  |  Branch (5091:5): [True: 0, False: 4.52k]
  ------------------
 5092|      0|      if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5093|      0|# ifdef USE_NAMED_GROUP
 5094|      0|	if (!PEND &&
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (5094:6): [True: 0, False: 0]
  ------------------
 5095|      0|	    IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5096|      0|	  PFETCH(c);
  ------------------
  |  |  305|      0|#define PFETCH(c)  do { \
  |  |  306|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  307|      0|  pfetch_prev = p; \
  |  |  308|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5097|      0|	  if (c == '<' || c == '\'') {
  ------------------
  |  Branch (5097:8): [True: 0, False: 0]
  |  Branch (5097:20): [True: 0, False: 0]
  ------------------
 5098|      0|	    list_capture = 1;
 5099|      0|	    goto named_group2; /* (?@<name>...) */
 5100|      0|	  }
 5101|      0|	  PUNFETCH;
  ------------------
  |  |  300|      0|#define PUNFETCH     p = pfetch_prev
  ------------------
 5102|      0|	}
 5103|      0|# endif
 5104|      0|	*np = node_new_enclose_memory(env->option, 0);
 5105|      0|	CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 5106|      0|	num = scan_env_add_mem_entry(env);
 5107|      0|	if (num < 0) return num;
  ------------------
  |  Branch (5107:6): [True: 0, False: 0]
  ------------------
 5108|      0|	if (num >= (int )BIT_STATUS_BITS_NUM)
  ------------------
  |  |  367|      0|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  ------------------
  |  Branch (5108:6): [True: 0, False: 0]
  ------------------
 5109|      0|	  return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY;
  ------------------
  |  |  690|      0|#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY        -222
  ------------------
 5110|       |
 5111|      0|	NENCLOSE(*np)->regnum = num;
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 5112|      0|	BIT_STATUS_ON_AT_SIMPLE(env->capture_history, num);
  ------------------
  |  |  380|      0|#define BIT_STATUS_ON_AT_SIMPLE(stats,n) do {\
  |  |  381|      0|  if ((n) < (int )BIT_STATUS_BITS_NUM)\
  |  |  ------------------
  |  |  |  |  367|      0|#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
  |  |  ------------------
  |  |  |  Branch (381:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  382|      0|    (stats) |= (1 << (n));\
  |  |  383|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (383:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5113|      0|      }
 5114|      0|      else {
 5115|      0|	return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  663|      0|#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
  ------------------
 5116|      0|      }
 5117|      0|      break;
 5118|      0|#endif /* USE_CAPTURE_HISTORY */
 5119|       |
 5120|      0|    case '(':   /* conditional expression: (?(cond)yes), (?(cond)yes|no) */
  ------------------
  |  Branch (5120:5): [True: 0, False: 4.52k]
  ------------------
 5121|      0|      if (!PEND &&
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (5121:11): [True: 0, False: 0]
  ------------------
 5122|      0|	  IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LPAREN_CONDITION)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5123|      0|	UChar *name = NULL;
  ------------------
  |  |   76|      0|# define UChar OnigUChar
  ------------------
 5124|      0|	UChar *name_end;
  ------------------
  |  |   76|      0|# define UChar OnigUChar
  ------------------
 5125|      0|	PFETCH(c);
  ------------------
  |  |  305|      0|#define PFETCH(c)  do { \
  |  |  306|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  307|      0|  pfetch_prev = p; \
  |  |  308|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5126|      0|	if (ONIGENC_IS_CODE_DIGIT(enc, c)) {     /* (n) */
  ------------------
  |  |  400|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)
  |  |  ------------------
  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (375:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5127|      0|	  PUNFETCH;
  ------------------
  |  |  300|      0|#define PUNFETCH     p = pfetch_prev
  ------------------
 5128|      0|	  r = fetch_name((OnigCodePoint )'(', &p, end, &name_end, env, &num, 1);
 5129|      0|	  if (r < 0) return r;
  ------------------
  |  Branch (5129:8): [True: 0, False: 0]
  ------------------
 5130|       |#if 0
 5131|       |	  /* Relative number is not currently supported. (same as Perl) */
 5132|       |	  if (num < 0) {
 5133|       |	    num = BACKREF_REL_TO_ABS(num, env);
 5134|       |	    if (num <= 0)
 5135|       |	      return ONIGERR_INVALID_BACKREF;
 5136|       |	  }
 5137|       |#endif
 5138|      0|	  if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_STRICT_CHECK_BACKREF)) {
  ------------------
  |  |  332|      0|#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
  |  |  ------------------
  |  |  |  Branch (332:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5139|      0|	    if (num > env->num_mem ||
  ------------------
  |  Branch (5139:10): [True: 0, False: 0]
  ------------------
 5140|      0|		IS_NULL(SCANENV_MEM_NODES(env)[num]))
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  Branch (311:49): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5141|      0|	    return ONIGERR_INVALID_BACKREF;
  ------------------
  |  |  677|      0|#define ONIGERR_INVALID_BACKREF                              -208
  ------------------
 5142|      0|	  }
 5143|      0|	}
 5144|      0|#ifdef USE_NAMED_GROUP
 5145|      0|	else if (c == '<' || c == '\'') {    /* (<name>), ('name') */
  ------------------
  |  Branch (5145:11): [True: 0, False: 0]
  |  Branch (5145:23): [True: 0, False: 0]
  ------------------
 5146|      0|	  name = p;
 5147|      0|	  r = fetch_named_backref_token(c, tok, &p, end, env);
 5148|      0|	  if (r < 0) return r;
  ------------------
  |  Branch (5148:8): [True: 0, False: 0]
  ------------------
 5149|      0|	  if (!PPEEK_IS(')')) return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  320|      0|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              	  if (!PPEEK_IS(')')) return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  663|      0|#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
  ------------------
  |  Branch (5149:8): [True: 0, False: 0]
  ------------------
 5150|      0|	  PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5151|       |
 5152|      0|	  if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_USE_LEFT_MOST_NAMED_GROUP)) {
  ------------------
  |  |  332|      0|#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
  |  |  ------------------
  |  |  |  Branch (332:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5153|      0|	    num = tok->u.backref.ref1;
 5154|      0|	  }
 5155|      0|	  else {
 5156|       |	    /* FIXME:
 5157|       |	     * Use left most named group for now. This is the same as Perl.
 5158|       |	     * However this should use the same strategy as normal back-
 5159|       |	     * references on Ruby syntax; search right to left. */
 5160|      0|	    int len = tok->u.backref.num;
 5161|      0|	    num = len > 1 ? tok->u.backref.refs[0] : tok->u.backref.ref1;
  ------------------
  |  Branch (5161:12): [True: 0, False: 0]
  ------------------
 5162|      0|	  }
 5163|      0|	}
 5164|      0|#endif
 5165|      0|	else
 5166|      0|	  return ONIGERR_INVALID_CONDITION_PATTERN;
  ------------------
  |  |  667|      0|#define ONIGERR_INVALID_CONDITION_PATTERN                    -124
  ------------------
 5167|      0|	*np = node_new_enclose(ENCLOSE_CONDITION);
  ------------------
  |  |   97|      0|#define ENCLOSE_CONDITION        (1<<3)
  ------------------
 5168|      0|	CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 5169|      0|	NENCLOSE(*np)->regnum = num;
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 5170|      0|	if (IS_NOT_NULL(name)) NENCLOSE(*np)->state |= NST_NAME_REF;
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	if (IS_NOT_NULL(name)) NENCLOSE(*np)->state |= NST_NAME_REF;
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
              	if (IS_NOT_NULL(name)) NENCLOSE(*np)->state |= NST_NAME_REF;
  ------------------
  |  |  139|      0|#define NST_NAME_REF              (1<<11)
  ------------------
 5171|      0|      }
 5172|      0|      else
 5173|      0|	return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  663|      0|#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
  ------------------
 5174|      0|      break;
 5175|       |
 5176|       |#if 0
 5177|       |    case '|':   /* branch reset: (?|...) */
 5178|       |      if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_VBAR_BRANCH_RESET)) {
 5179|       |	/* TODO */
 5180|       |      }
 5181|       |      else
 5182|       |	return ONIGERR_UNDEFINED_GROUP_OPTION;
 5183|       |      break;
 5184|       |#endif
 5185|       |
 5186|      0|    case '^':   /* loads default options */
  ------------------
  |  Branch (5186:5): [True: 0, False: 4.52k]
  ------------------
 5187|      0|      if (!PEND && IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                    if (!PEND && IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (5187:11): [True: 0, False: 0]
  ------------------
 5188|       |	/* d-imsx */
 5189|      0|	ONOFF(option, ONIG_OPTION_ASCII_RANGE, 1);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5190|      0|	ONOFF(option, ONIG_OPTION_IGNORECASE, 1);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5191|      0|	ONOFF(option, ONIG_OPTION_SINGLELINE, 0);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5192|      0|	ONOFF(option, ONIG_OPTION_MULTILINE,  1);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5193|      0|	ONOFF(option, ONIG_OPTION_EXTEND, 1);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5194|      0|	PFETCH(c);
  ------------------
  |  |  305|      0|#define PFETCH(c)  do { \
  |  |  306|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  307|      0|  pfetch_prev = p; \
  |  |  308|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5195|      0|      }
 5196|       |#if 0
 5197|       |      else if (!PEND && IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) {
 5198|       |	/* d-imx */
 5199|       |	ONOFF(option, ONIG_OPTION_ASCII_RANGE, 0);
 5200|       |	ONOFF(option, ONIG_OPTION_POSIX_BRACKET_ALL_RANGE, 0);
 5201|       |	ONOFF(option, ONIG_OPTION_WORD_BOUND_ALL_RANGE, 0);
 5202|       |	ONOFF(option, ONIG_OPTION_IGNORECASE, 1);
 5203|       |	ONOFF(option, ONIG_OPTION_MULTILINE,  1);
 5204|       |	ONOFF(option, ONIG_OPTION_EXTEND, 1);
 5205|       |	PFETCH(c);
 5206|       |      }
 5207|       |#endif
 5208|      0|      else {
 5209|      0|	return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  663|      0|#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
  ------------------
 5210|      0|      }
 5211|       |      /* fall through */
 5212|       |#ifdef USE_POSIXLINE_OPTION
 5213|       |    case 'p':
 5214|       |#endif
 5215|    411|    case '-': case 'i': case 'm': case 's': case 'x':
  ------------------
  |  Branch (5215:5): [True: 0, False: 4.52k]
  |  Branch (5215:15): [True: 0, False: 4.52k]
  |  Branch (5215:25): [True: 0, False: 4.52k]
  |  Branch (5215:35): [True: 0, False: 4.52k]
  |  Branch (5215:45): [True: 411, False: 4.11k]
  ------------------
 5216|    411|    case 'a': case 'd': case 'l': case 'u':
  ------------------
  |  Branch (5216:5): [True: 0, False: 4.52k]
  |  Branch (5216:15): [True: 0, False: 4.52k]
  |  Branch (5216:25): [True: 0, False: 4.52k]
  |  Branch (5216:35): [True: 0, False: 4.52k]
  ------------------
 5217|    411|      {
 5218|    411|	int neg = 0;
 5219|       |
 5220|    822|	while (1) {
  ------------------
  |  Branch (5220:9): [Folded - Ignored]
  ------------------
 5221|    822|	  switch (c) {
 5222|    411|	  case ':':
  ------------------
  |  Branch (5222:4): [True: 411, False: 411]
  ------------------
 5223|    411|	  case ')':
  ------------------
  |  Branch (5223:4): [True: 0, False: 822]
  ------------------
 5224|    411|	  break;
 5225|       |
 5226|      0|	  case '-':  neg = 1; break;
  ------------------
  |  Branch (5226:4): [True: 0, False: 822]
  ------------------
 5227|    411|	  case 'x':  ONOFF(option, ONIG_OPTION_EXTEND,     neg); break;
  ------------------
  |  |  160|    411|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  |  Branch (5227:4): [True: 411, False: 411]
  ------------------
 5228|      0|	  case 'i':  ONOFF(option, ONIG_OPTION_IGNORECASE, neg); break;
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (5228:4): [True: 0, False: 822]
  ------------------
 5229|      0|	  case 's':
  ------------------
  |  Branch (5229:4): [True: 0, False: 822]
  ------------------
 5230|      0|	    if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5231|      0|	      ONOFF(option, ONIG_OPTION_MULTILINE,  neg);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5232|      0|	    }
 5233|      0|	    else
 5234|      0|	      return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  663|      0|#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
  ------------------
 5235|      0|	    break;
 5236|       |
 5237|      0|	  case 'm':
  ------------------
  |  Branch (5237:4): [True: 0, False: 822]
  ------------------
 5238|      0|	    if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5239|      0|	      ONOFF(option, ONIG_OPTION_SINGLELINE, (neg == 0 ? 1 : 0));
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [True: 0, False: 0]
  |  |  |  Branch (160:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5240|      0|	    }
 5241|      0|	    else if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5242|      0|	      ONOFF(option, ONIG_OPTION_MULTILINE,  neg);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5243|      0|	    }
 5244|      0|	    else
 5245|      0|	      return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  663|      0|#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
  ------------------
 5246|      0|	    break;
 5247|       |#ifdef USE_POSIXLINE_OPTION
 5248|       |	  case 'p':
 5249|       |	    ONOFF(option, ONIG_OPTION_MULTILINE|ONIG_OPTION_SINGLELINE, neg);
 5250|       |	    break;
 5251|       |#endif
 5252|       |
 5253|      0|	  case 'a':     /* limits \d, \s, \w and POSIX brackets to ASCII range */
  ------------------
  |  Branch (5253:4): [True: 0, False: 822]
  ------------------
 5254|      0|	    if ((IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL) ||
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5255|      0|		 IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) &&
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5256|      0|		(neg == 0)) {
  ------------------
  |  Branch (5256:3): [True: 0, False: 0]
  ------------------
 5257|      0|	      ONOFF(option, ONIG_OPTION_ASCII_RANGE, 0);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5258|      0|	      ONOFF(option, ONIG_OPTION_POSIX_BRACKET_ALL_RANGE, 1);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5259|      0|	      ONOFF(option, ONIG_OPTION_WORD_BOUND_ALL_RANGE, 1);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5260|      0|	    }
 5261|      0|	    else
 5262|      0|	      return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  663|      0|#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
  ------------------
 5263|      0|	    break;
 5264|       |
 5265|      0|	  case 'u':
  ------------------
  |  Branch (5265:4): [True: 0, False: 822]
  ------------------
 5266|      0|	    if ((IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL) ||
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5267|      0|		 IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) &&
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5268|      0|		(neg == 0)) {
  ------------------
  |  Branch (5268:3): [True: 0, False: 0]
  ------------------
 5269|      0|	      ONOFF(option, ONIG_OPTION_ASCII_RANGE, 1);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5270|      0|	      ONOFF(option, ONIG_OPTION_POSIX_BRACKET_ALL_RANGE, 1);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5271|      0|	      ONOFF(option, ONIG_OPTION_WORD_BOUND_ALL_RANGE, 1);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5272|      0|	    }
 5273|      0|	    else
 5274|      0|	      return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  663|      0|#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
  ------------------
 5275|      0|	    break;
 5276|       |
 5277|      0|	  case 'd':
  ------------------
  |  Branch (5277:4): [True: 0, False: 822]
  ------------------
 5278|      0|	    if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL) &&
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5279|      0|		(neg == 0)) {
  ------------------
  |  Branch (5279:3): [True: 0, False: 0]
  ------------------
 5280|      0|	      ONOFF(option, ONIG_OPTION_ASCII_RANGE, 1);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5281|      0|	    }
 5282|      0|	    else if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY) &&
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5283|      0|		(neg == 0)) {
  ------------------
  |  Branch (5283:3): [True: 0, False: 0]
  ------------------
 5284|      0|	      ONOFF(option, ONIG_OPTION_ASCII_RANGE, 0);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5285|      0|	      ONOFF(option, ONIG_OPTION_POSIX_BRACKET_ALL_RANGE, 0);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5286|      0|	      ONOFF(option, ONIG_OPTION_WORD_BOUND_ALL_RANGE, 0);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5287|      0|	    }
 5288|      0|	    else
 5289|      0|	      return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  663|      0|#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
  ------------------
 5290|      0|	    break;
 5291|       |
 5292|      0|	  case 'l':
  ------------------
  |  Branch (5292:4): [True: 0, False: 822]
  ------------------
 5293|      0|	    if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL) && (neg == 0)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (5293:66): [True: 0, False: 0]
  ------------------
 5294|      0|	      ONOFF(option, ONIG_OPTION_ASCII_RANGE, 1);
  ------------------
  |  |  160|      0|#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))
  |  |  ------------------
  |  |  |  Branch (160:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5295|      0|	    }
 5296|      0|	    else
 5297|      0|	      return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  663|      0|#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
  ------------------
 5298|      0|	    break;
 5299|       |
 5300|      0|	  default:
  ------------------
  |  Branch (5300:4): [True: 0, False: 822]
  ------------------
 5301|      0|	    return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  663|      0|#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
  ------------------
 5302|    822|	  }
 5303|       |
 5304|    822|	  if (c == ')') {
  ------------------
  |  Branch (5304:8): [True: 0, False: 822]
  ------------------
 5305|      0|	    *np = node_new_option(option);
 5306|      0|	    CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 5307|      0|	    *src = p;
 5308|      0|	    return 2; /* option only */
 5309|      0|	  }
 5310|    822|	  else if (c == ':') {
  ------------------
  |  Branch (5310:13): [True: 411, False: 411]
  ------------------
 5311|    411|	    OnigOptionType prev = env->option;
 5312|       |
 5313|    411|	    env->option = option;
 5314|    411|	    r = fetch_token(tok, &p, end, env);
 5315|    411|	    if (r < 0) {
  ------------------
  |  Branch (5315:10): [True: 0, False: 411]
  ------------------
 5316|      0|	      env->option = prev;
 5317|      0|	      return r;
 5318|      0|	    }
 5319|    411|	    r = parse_subexp(&target, tok, term, &p, end, env);
 5320|    411|	    env->option = prev;
 5321|    411|	    if (r < 0) return r;
  ------------------
  |  Branch (5321:10): [True: 0, False: 411]
  ------------------
 5322|    411|	    *np = node_new_option(option);
 5323|    411|	    CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|    411|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|    411|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 411]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 5324|    411|	    NENCLOSE(*np)->target = target;
  ------------------
  |  |   81|    411|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 5325|    411|	    *src = p;
 5326|    411|	    return 0;
 5327|    411|	  }
 5328|       |
 5329|    411|	  if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
  ------------------
  |  |  299|    411|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 411]
  |  |  |  Branch (299:23): [True: 411, False: 0]
  |  |  ------------------
  ------------------
              	  if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
  ------------------
  |  |  662|      0|#define ONIGERR_END_PATTERN_IN_GROUP                         -118
  ------------------
 5330|    411|	  PFETCH(c);
  ------------------
  |  |  305|    411|#define PFETCH(c)  do { \
  |  |  306|    411|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|    411|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 411]
  |  |  ------------------
  |  |  307|    411|  pfetch_prev = p; \
  |  |  308|    411|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|    411|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|    411|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 411]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|    411|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 5331|    411|	}
 5332|    411|      }
 5333|      0|      break;
 5334|       |
 5335|      0|    default:
  ------------------
  |  Branch (5335:5): [True: 0, False: 4.52k]
  ------------------
 5336|      0|      return ONIGERR_UNDEFINED_GROUP_OPTION;
  ------------------
  |  |  663|      0|#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
  ------------------
 5337|  4.52k|    }
 5338|  4.52k|  }
 5339|    411|  else {
 5340|    411|    if (ONIG_IS_OPTION_ON(env->option, ONIG_OPTION_DONT_CAPTURE_GROUP))
  ------------------
  |  |  479|    411|#define ONIG_IS_OPTION_ON(options,option)   ((options) & (option))
  |  |  ------------------
  |  |  |  Branch (479:45): [True: 0, False: 411]
  |  |  ------------------
  ------------------
 5341|      0|      goto group;
 5342|       |
 5343|    411|    *np = node_new_enclose_memory(env->option, 0);
 5344|    411|    CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|    411|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|    411|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 411]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 5345|    411|    num = scan_env_add_mem_entry(env);
 5346|    411|    if (num < 0) return num;
  ------------------
  |  Branch (5346:9): [True: 0, False: 411]
  ------------------
 5347|    411|    NENCLOSE(*np)->regnum = num;
  ------------------
  |  |   81|    411|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 5348|    411|  }
 5349|       |
 5350|  2.05k|  CHECK_NULL_RETURN_MEMERR(*np);
  ------------------
  |  |  314|  2.05k|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|  2.05k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 2.05k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 5351|  2.05k|  r = fetch_token(tok, &p, end, env);
 5352|  2.05k|  if (r < 0) return r;
  ------------------
  |  Branch (5352:7): [True: 0, False: 2.05k]
  ------------------
 5353|  2.05k|  r = parse_subexp(&target, tok, term, &p, end, env);
 5354|  2.05k|  if (r < 0) {
  ------------------
  |  Branch (5354:7): [True: 0, False: 2.05k]
  ------------------
 5355|      0|    onig_node_free(target);
 5356|      0|    return r;
 5357|      0|  }
 5358|       |
 5359|  2.05k|  if (NTYPE(*np) == NT_ANCHOR)
  ------------------
  |  |   69|  2.05k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
                if (NTYPE(*np) == NT_ANCHOR)
  ------------------
  |  |   45|  2.05k|#define NT_ANCHOR      7
  ------------------
  |  Branch (5359:7): [True: 0, False: 2.05k]
  ------------------
 5360|      0|    NANCHOR(*np)->target = target;
  ------------------
  |  |   82|      0|#define NANCHOR(node)      (&((node)->u.anchor))
  ------------------
 5361|  2.05k|  else {
 5362|  2.05k|    NENCLOSE(*np)->target = target;
  ------------------
  |  |   81|  2.05k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 5363|  2.05k|    if (NENCLOSE(*np)->type == ENCLOSE_MEMORY) {
  ------------------
  |  |   81|  2.05k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
                  if (NENCLOSE(*np)->type == ENCLOSE_MEMORY) {
  ------------------
  |  |   94|  2.05k|#define ENCLOSE_MEMORY           (1<<0)
  ------------------
  |  Branch (5363:9): [True: 2.05k, False: 0]
  ------------------
 5364|       |      /* Don't move this to previous of parse_subexp() */
 5365|  2.05k|      r = scan_env_set_mem_node(env, NENCLOSE(*np)->regnum, *np);
  ------------------
  |  |   81|  2.05k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 5366|  2.05k|      if (r != 0) return r;
  ------------------
  |  Branch (5366:11): [True: 0, False: 2.05k]
  ------------------
 5367|  2.05k|    }
 5368|      0|    else if (NENCLOSE(*np)->type == ENCLOSE_CONDITION) {
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
                  else if (NENCLOSE(*np)->type == ENCLOSE_CONDITION) {
  ------------------
  |  |   97|      0|#define ENCLOSE_CONDITION        (1<<3)
  ------------------
  |  Branch (5368:14): [True: 0, False: 0]
  ------------------
 5369|      0|      if (NTYPE(target) != NT_ALT) {
  ------------------
  |  |   69|      0|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
                    if (NTYPE(target) != NT_ALT) {
  ------------------
  |  |   47|      0|#define NT_ALT         9
  ------------------
  |  Branch (5369:11): [True: 0, False: 0]
  ------------------
 5370|       |	/* convert (?(cond)yes) to (?(cond)yes|empty) */
 5371|      0|	work1 = node_new_empty();
 5372|      0|	if (IS_NULL(work1)) goto err;
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5373|      0|	work2 = onig_node_new_alt(work1, NULL_NODE);
  ------------------
  |  |  283|      0|#define NULL_NODE  ((Node* )0)
  ------------------
 5374|      0|	if (IS_NULL(work2)) goto err;
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5375|      0|	work1 = onig_node_new_alt(target, work2);
 5376|      0|	if (IS_NULL(work1)) goto err;
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5377|      0|	NENCLOSE(*np)->target = work1;
  ------------------
  |  |   81|      0|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 5378|      0|      }
 5379|      0|    }
 5380|  2.05k|  }
 5381|       |
 5382|  2.05k|  *src = p;
 5383|  2.05k|  return 0;
 5384|       |
 5385|      0| err:
 5386|      0|  onig_node_free(work1);
 5387|      0|  onig_node_free(work2);
 5388|      0|  onig_node_free(*np);
 5389|      0|  *np = NULL;
 5390|      0|  return ONIGERR_MEMORY;
  ------------------
  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  ------------------
 5391|  2.05k|}
regparse.c:scan_env_add_mem_entry:
 1016|  2.05k|{
 1017|  2.05k|  int i, need, alloc;
 1018|  2.05k|  Node** p;
 1019|       |
 1020|  2.05k|  need = env->num_mem + 1;
 1021|  2.05k|  if (need > ONIG_MAX_CAPTURE_GROUP_NUM)
  ------------------
  |  |  441|  2.05k|#define ONIG_MAX_CAPTURE_GROUP_NUM         32767
  ------------------
  |  Branch (1021:7): [True: 0, False: 2.05k]
  ------------------
 1022|      0|    return ONIGERR_TOO_MANY_CAPTURE_GROUPS;
  ------------------
  |  |  679|      0|#define ONIGERR_TOO_MANY_CAPTURE_GROUPS                      -210
  ------------------
 1023|  2.05k|  if (need >= SCANENV_MEMNODES_SIZE) {
  ------------------
  |  |  285|  2.05k|#define SCANENV_MEMNODES_SIZE               8
  ------------------
  |  Branch (1023:7): [True: 0, False: 2.05k]
  ------------------
 1024|      0|    if (env->mem_alloc <= need) {
  ------------------
  |  Branch (1024:9): [True: 0, False: 0]
  ------------------
 1025|      0|      if (IS_NULL(env->mem_nodes_dynamic)) {
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1026|      0|	alloc = INIT_SCANENV_MEMNODES_ALLOC_SIZE;
  ------------------
  |  |  980|      0|#define INIT_SCANENV_MEMNODES_ALLOC_SIZE   16
  ------------------
 1027|      0|	p = (Node** )xmalloc(sizeof(Node*) * alloc);
  ------------------
  |  |  142|      0|# define xmalloc     malloc
  ------------------
 1028|      0|	CHECK_NULL_RETURN_MEMERR(p);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 1029|      0|	xmemcpy(p, env->mem_nodes_static,
  ------------------
  |  |  215|      0|#define xmemcpy     memcpy
  ------------------
 1030|      0|		sizeof(Node*) * SCANENV_MEMNODES_SIZE);
  ------------------
  |  |  285|      0|#define SCANENV_MEMNODES_SIZE               8
  ------------------
 1031|      0|      }
 1032|      0|      else {
 1033|      0|	alloc = env->mem_alloc * 2;
 1034|      0|	p = (Node** )xrealloc(env->mem_nodes_dynamic, sizeof(Node*) * alloc);
  ------------------
  |  |  143|      0|# define xrealloc    realloc
  ------------------
 1035|      0|	CHECK_NULL_RETURN_MEMERR(p);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 1036|      0|      }
 1037|       |
 1038|      0|      for (i = env->num_mem + 1; i < alloc; i++)
  ------------------
  |  Branch (1038:34): [True: 0, False: 0]
  ------------------
 1039|      0|	p[i] = NULL_NODE;
  ------------------
  |  |  283|      0|#define NULL_NODE  ((Node* )0)
  ------------------
 1040|       |
 1041|      0|      env->mem_nodes_dynamic = p;
 1042|      0|      env->mem_alloc = alloc;
 1043|      0|    }
 1044|      0|  }
 1045|       |
 1046|  2.05k|  env->num_mem++;
 1047|  2.05k|  return env->num_mem;
 1048|  2.05k|}
regparse.c:name_add:
  773|  1.64k|{
  774|  1.64k|  int alloc;
  775|  1.64k|  NameEntry* e;
  776|  1.64k|  NameTable* t = (NameTable* )reg->name_table;
  777|       |
  778|  1.64k|  if (name_end - name <= 0)
  ------------------
  |  Branch (778:7): [True: 0, False: 1.64k]
  ------------------
  779|      0|    return ONIGERR_EMPTY_GROUP_NAME;
  ------------------
  |  |  682|      0|#define ONIGERR_EMPTY_GROUP_NAME                             -214
  ------------------
  780|       |
  781|  1.64k|  e = name_find(reg, name, name_end);
  782|  1.64k|  if (IS_NULL(e)) {
  ------------------
  |  |  311|  1.64k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 1.64k, False: 0]
  |  |  ------------------
  ------------------
  783|  1.64k|# ifdef USE_ST_LIBRARY
  784|  1.64k|    if (IS_NULL(t)) {
  ------------------
  |  |  311|  1.64k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 411, False: 1.23k]
  |  |  ------------------
  ------------------
  785|    411|      t = onig_st_init_strend_table_with_size(5);
  786|    411|      reg->name_table = (void* )t;
  787|    411|    }
  788|  1.64k|    e = (NameEntry* )xmalloc(sizeof(NameEntry));
  ------------------
  |  |  142|  1.64k|# define xmalloc     malloc
  ------------------
  789|  1.64k|    CHECK_NULL_RETURN_MEMERR(e);
  ------------------
  |  |  314|  1.64k|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|  1.64k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 1.64k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
  790|       |
  791|  1.64k|    e->name = strdup_with_null(reg->enc, name, name_end);
  792|  1.64k|    if (IS_NULL(e->name)) {
  ------------------
  |  |  311|  1.64k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 1.64k]
  |  |  ------------------
  ------------------
  793|      0|      xfree(e);
  ------------------
  |  |  145|      0|# define xfree       free
  ------------------
  794|      0|      return ONIGERR_MEMORY;
  ------------------
  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  ------------------
  795|      0|    }
  796|  1.64k|    onig_st_insert_strend(t, e->name, (e->name + (name_end - name)),
  797|  1.64k|                          (HashDataType )e);
  798|       |
  799|  1.64k|    e->name_len   = name_end - name;
  800|  1.64k|    e->back_num   = 0;
  801|  1.64k|    e->back_alloc = 0;
  802|  1.64k|    e->back_refs  = (int* )NULL;
  803|       |
  804|       |# else
  805|       |
  806|       |    if (IS_NULL(t)) {
  807|       |      alloc = INIT_NAMES_ALLOC_NUM;
  808|       |      t = (NameTable* )xmalloc(sizeof(NameTable));
  809|       |      CHECK_NULL_RETURN_MEMERR(t);
  810|       |      t->e     = NULL;
  811|       |      t->alloc = 0;
  812|       |      t->num   = 0;
  813|       |
  814|       |      t->e = (NameEntry* )xmalloc(sizeof(NameEntry) * alloc);
  815|       |      if (IS_NULL(t->e)) {
  816|       |	xfree(t);
  817|       |	return ONIGERR_MEMORY;
  818|       |      }
  819|       |      t->alloc = alloc;
  820|       |      reg->name_table = t;
  821|       |      goto clear;
  822|       |    }
  823|       |    else if (t->num == t->alloc) {
  824|       |      int i;
  825|       |      NameEntry* p;
  826|       |
  827|       |      alloc = t->alloc * 2;
  828|       |      p = (NameEntry* )xrealloc(t->e, sizeof(NameEntry) * alloc);
  829|       |      CHECK_NULL_RETURN_MEMERR(p);
  830|       |      t->e = p;
  831|       |      t->alloc = alloc;
  832|       |
  833|       |    clear:
  834|       |      for (i = t->num; i < t->alloc; i++) {
  835|       |	t->e[i].name       = NULL;
  836|       |	t->e[i].name_len   = 0;
  837|       |	t->e[i].back_num   = 0;
  838|       |	t->e[i].back_alloc = 0;
  839|       |	t->e[i].back_refs  = (int* )NULL;
  840|       |      }
  841|       |    }
  842|       |    e = &(t->e[t->num]);
  843|       |    t->num++;
  844|       |    e->name = strdup_with_null(reg->enc, name, name_end);
  845|       |    if (IS_NULL(e->name)) return ONIGERR_MEMORY;
  846|       |    e->name_len = name_end - name;
  847|       |# endif
  848|  1.64k|  }
  849|       |
  850|  1.64k|  if (e->back_num >= 1 &&
  ------------------
  |  Branch (850:7): [True: 0, False: 1.64k]
  ------------------
  851|  1.64k|      ! IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME)) {
  ------------------
  |  |  332|      0|#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
  ------------------
  |  Branch (851:7): [True: 0, False: 0]
  ------------------
  852|      0|    onig_scan_env_set_error_string(env, ONIGERR_MULTIPLEX_DEFINED_NAME,
  ------------------
  |  |  687|      0|#define ONIGERR_MULTIPLEX_DEFINED_NAME                       -219
  ------------------
  853|      0|				    name, name_end);
  854|      0|    return ONIGERR_MULTIPLEX_DEFINED_NAME;
  ------------------
  |  |  687|      0|#define ONIGERR_MULTIPLEX_DEFINED_NAME                       -219
  ------------------
  855|      0|  }
  856|       |
  857|  1.64k|  e->back_num++;
  858|  1.64k|  if (e->back_num == 1) {
  ------------------
  |  Branch (858:7): [True: 1.64k, False: 0]
  ------------------
  859|  1.64k|    e->back_ref1 = backref;
  860|  1.64k|  }
  861|      0|  else {
  862|      0|    if (e->back_num == 2) {
  ------------------
  |  Branch (862:9): [True: 0, False: 0]
  ------------------
  863|      0|      alloc = INIT_NAME_BACKREFS_ALLOC_NUM;
  ------------------
  |  |  451|      0|# define INIT_NAME_BACKREFS_ALLOC_NUM   8
  ------------------
  864|      0|      e->back_refs = (int* )xmalloc(sizeof(int) * alloc);
  ------------------
  |  |  142|      0|# define xmalloc     malloc
  ------------------
  865|      0|      CHECK_NULL_RETURN_MEMERR(e->back_refs);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
  866|      0|      e->back_alloc = alloc;
  867|      0|      e->back_refs[0] = e->back_ref1;
  868|      0|      e->back_refs[1] = backref;
  869|      0|    }
  870|      0|    else {
  871|      0|      if (e->back_num > e->back_alloc) {
  ------------------
  |  Branch (871:11): [True: 0, False: 0]
  ------------------
  872|      0|	int* p;
  873|      0|	alloc = e->back_alloc * 2;
  874|      0|	p = (int* )xrealloc(e->back_refs, sizeof(int) * alloc);
  ------------------
  |  |  143|      0|# define xrealloc    realloc
  ------------------
  875|      0|	CHECK_NULL_RETURN_MEMERR(p);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
  876|      0|	e->back_refs = p;
  877|      0|	e->back_alloc = alloc;
  878|      0|      }
  879|      0|      e->back_refs[e->back_num - 1] = backref;
  880|      0|    }
  881|      0|  }
  882|       |
  883|  1.64k|  return 0;
  884|  1.64k|}
regparse.c:strdup_with_null:
  271|  1.64k|{
  272|  1.64k|  ptrdiff_t slen;
  273|  1.64k|  int term_len, i;
  274|  1.64k|  UChar *r;
  ------------------
  |  |   76|  1.64k|# define UChar OnigUChar
  ------------------
  275|       |
  276|  1.64k|  slen = end - s;
  277|  1.64k|  term_len = ONIGENC_MBC_MINLEN(enc);
  ------------------
  |  |  367|  1.64k|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  ------------------
  278|       |
  279|  1.64k|  r = (UChar* )xmalloc(slen + term_len);
  ------------------
  |  |  142|  1.64k|# define xmalloc     malloc
  ------------------
  280|  1.64k|  CHECK_NULL_RETURN(r);
  ------------------
  |  |  313|  1.64k|#define CHECK_NULL_RETURN(p)          if (IS_NULL(p)) return NULL
  |  |  ------------------
  |  |  |  |  311|  1.64k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 1.64k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  281|  1.64k|  xmemcpy(r, s, slen);
  ------------------
  |  |  215|  1.64k|#define xmemcpy     memcpy
  ------------------
  282|       |
  283|  3.28k|  for (i = 0; i < term_len; i++)
  ------------------
  |  Branch (283:15): [True: 1.64k, False: 1.64k]
  ------------------
  284|  1.64k|    r[slen + i] = (UChar )0;
  285|       |
  286|  1.64k|  return r;
  287|  1.64k|}
regparse.c:node_new_option:
 1368|    411|{
 1369|    411|  Node* node = node_new_enclose(ENCLOSE_OPTION);
  ------------------
  |  |   95|    411|#define ENCLOSE_OPTION           (1<<1)
  ------------------
 1370|    411|  CHECK_NULL_RETURN(node);
  ------------------
  |  |  313|    411|#define CHECK_NULL_RETURN(p)          if (IS_NULL(p)) return NULL
  |  |  ------------------
  |  |  |  |  311|    411|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 411]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1371|    411|  NENCLOSE(node)->option = option;
  ------------------
  |  |   81|    411|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 1372|    411|  return node;
 1373|    411|}
regparse.c:add_code_range_to_buf0:
 1672|   133k|{
 1673|   133k|  int r, inc_n, pos;
 1674|   133k|  OnigCodePoint low, high, bound, x;
 1675|   133k|  OnigCodePoint n, *data;
 1676|   133k|  BBuf* bbuf;
 1677|       |
 1678|   133k|  if (from > to) {
  ------------------
  |  Branch (1678:7): [True: 0, False: 133k]
  ------------------
 1679|      0|    n = from; from = to; to = n;
 1680|      0|  }
 1681|       |
 1682|   133k|  if (IS_NULL(*pbuf)) {
  ------------------
  |  |  311|   133k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 5.34k, False: 127k]
  |  |  ------------------
  ------------------
 1683|  5.34k|    r = new_code_range(pbuf);
 1684|  5.34k|    if (r) return r;
  ------------------
  |  Branch (1684:9): [True: 0, False: 5.34k]
  ------------------
 1685|  5.34k|    bbuf = *pbuf;
 1686|  5.34k|    n = 0;
 1687|  5.34k|  }
 1688|   127k|  else {
 1689|   127k|    bbuf = *pbuf;
 1690|   127k|    GET_CODE_POINT(n, bbuf->p);
  ------------------
  |  |  710|   127k|#define GET_CODE_POINT(code,p)   code = *((OnigCodePoint* )(p))
  ------------------
 1691|   127k|  }
 1692|   133k|  data = (OnigCodePoint* )(bbuf->p);
 1693|   133k|  data++;
 1694|       |
 1695|   133k|  bound = (from == 0) ? 0 : n;
  ------------------
  |  Branch (1695:11): [True: 0, False: 133k]
  ------------------
 1696|   605k|  for (low = 0; low < bound; ) {
  ------------------
  |  Branch (1696:17): [True: 472k, False: 133k]
  ------------------
 1697|   472k|    x = (low + bound) >> 1;
 1698|   472k|    if (from - 1 > data[x*2 + 1])
  ------------------
  |  Branch (1698:9): [True: 472k, False: 0]
  ------------------
 1699|   472k|      low = x + 1;
 1700|      0|    else
 1701|      0|      bound = x;
 1702|   472k|  }
 1703|       |
 1704|   133k|  high = (to == ONIG_LAST_CODE_POINT) ? n : low;
  ------------------
  |  |  317|   133k|#define ONIG_LAST_CODE_POINT    (~((OnigCodePoint )0))
  ------------------
  |  Branch (1704:10): [True: 0, False: 133k]
  ------------------
 1705|   133k|  for (bound = n; high < bound; ) {
  ------------------
  |  Branch (1705:19): [True: 0, False: 133k]
  ------------------
 1706|      0|    x = (high + bound) >> 1;
 1707|      0|    if (to + 1 >= data[x*2])
  ------------------
  |  Branch (1707:9): [True: 0, False: 0]
  ------------------
 1708|      0|      high = x + 1;
 1709|      0|    else
 1710|      0|      bound = x;
 1711|      0|  }
 1712|       |  /* data[(low-1)*2+1] << from <= data[low*2]
 1713|       |   * data[(high-1)*2+1] <= to << data[high*2]
 1714|       |   */
 1715|       |
 1716|   133k|  inc_n = low + 1 - high;
 1717|   133k|  if (n + inc_n > ONIG_MAX_MULTI_BYTE_RANGES_NUM)
  ------------------
  |  |  444|   133k|#define ONIG_MAX_MULTI_BYTE_RANGES_NUM     10000
  ------------------
  |  Branch (1717:7): [True: 0, False: 133k]
  ------------------
 1718|      0|    return ONIGERR_TOO_MANY_MULTI_BYTE_RANGES;
  ------------------
  |  |  674|      0|#define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES                   -205
  ------------------
 1719|       |
 1720|   133k|  if (inc_n != 1) {
  ------------------
  |  Branch (1720:7): [True: 0, False: 133k]
  ------------------
 1721|      0|    if (checkdup && from <= data[low*2+1]
  ------------------
  |  Branch (1721:9): [True: 0, False: 0]
  |  Branch (1721:21): [True: 0, False: 0]
  ------------------
 1722|      0|	&& (data[low*2] <= from || data[low*2+1] <= to))
  ------------------
  |  Branch (1722:6): [True: 0, False: 0]
  |  Branch (1722:29): [True: 0, False: 0]
  ------------------
 1723|      0|      CC_DUP_WARN(env, from, to);
 1724|      0|    if (from > data[low*2])
  ------------------
  |  Branch (1724:9): [True: 0, False: 0]
  ------------------
 1725|      0|      from = data[low*2];
 1726|      0|    if (to < data[(high - 1)*2 + 1])
  ------------------
  |  Branch (1726:9): [True: 0, False: 0]
  ------------------
 1727|      0|      to = data[(high - 1)*2 + 1];
 1728|      0|  }
 1729|       |
 1730|   133k|  if (inc_n != 0) {
  ------------------
  |  Branch (1730:7): [True: 133k, False: 0]
  ------------------
 1731|   133k|    int from_pos = SIZE_CODE_POINT * (1 + high * 2);
  ------------------
  |  |  696|   133k|#define SIZE_CODE_POINT       (int )sizeof(OnigCodePoint)
  ------------------
 1732|   133k|    int to_pos   = SIZE_CODE_POINT * (1 + (low + 1) * 2);
  ------------------
  |  |  696|   133k|#define SIZE_CODE_POINT       (int )sizeof(OnigCodePoint)
  ------------------
 1733|       |
 1734|   133k|    if (inc_n > 0) {
  ------------------
  |  Branch (1734:9): [True: 133k, False: 0]
  ------------------
 1735|   133k|      if (high < n) {
  ------------------
  |  Branch (1735:11): [True: 0, False: 133k]
  ------------------
 1736|      0|	int size = (n - high) * 2 * SIZE_CODE_POINT;
  ------------------
  |  |  696|      0|#define SIZE_CODE_POINT       (int )sizeof(OnigCodePoint)
  ------------------
 1737|      0|	BBUF_MOVE_RIGHT(bbuf, from_pos, to_pos, size);
  ------------------
  |  |  510|      0|#define BBUF_MOVE_RIGHT(buf,from,to,n) do {\
  |  |  511|      0|  if ((unsigned int )((to)+(n)) > (buf)->alloc) BBUF_EXPAND((buf),(to) + (n));\
  |  |  ------------------
  |  |  |  |  470|      0|#define BBUF_EXPAND(buf,low) do{\
  |  |  |  |  471|      0|  UChar *tmp;\
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      0|# define UChar OnigUChar
  |  |  |  |  ------------------
  |  |  |  |  472|      0|  do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (472:36): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  473|      0|  tmp = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  143|      0|# define xrealloc    realloc
  |  |  |  |  ------------------
  |  |  |  |  474|      0|  if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                 if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  |  |  ------------------
  |  |  |  |  475|      0|  (buf)->p = tmp;\
  |  |  |  |  476|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (476:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (511:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  512|      0|  xmemmove((buf)->p + (to), (buf)->p + (from), (n));\
  |  |  ------------------
  |  |  |  |  216|      0|#define xmemmove    memmove
  |  |  ------------------
  |  |  513|      0|  if ((unsigned int )((to)+(n)) > (buf)->used) (buf)->used = (to) + (n);\
  |  |  ------------------
  |  |  |  Branch (513:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  514|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (514:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1738|      0|      }
 1739|   133k|    }
 1740|      0|    else {
 1741|      0|      BBUF_MOVE_LEFT_REDUCE(bbuf, from_pos, to_pos);
  ------------------
  |  |  522|      0|#define BBUF_MOVE_LEFT_REDUCE(buf,from,to) do {\
  |  |  523|      0|  xmemmove((buf)->p + (to), (buf)->p + (from), (buf)->used - (from));\
  |  |  ------------------
  |  |  |  |  216|      0|#define xmemmove    memmove
  |  |  ------------------
  |  |  524|      0|  (buf)->used -= (from - to);\
  |  |  525|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (525:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1742|      0|    }
 1743|   133k|  }
 1744|       |
 1745|   133k|  pos = SIZE_CODE_POINT * (1 + low * 2);
  ------------------
  |  |  696|   133k|#define SIZE_CODE_POINT       (int )sizeof(OnigCodePoint)
  ------------------
 1746|   133k|  BBUF_ENSURE_SIZE(bbuf, pos + SIZE_CODE_POINT * 2);
  ------------------
  |  |  478|   133k|#define BBUF_ENSURE_SIZE(buf,size) do{\
  |  |  479|   133k|  unsigned int new_alloc = (buf)->alloc;\
  |  |  480|   148k|  while (new_alloc < (unsigned int )(size)) { new_alloc *= 2; }\
  |  |  ------------------
  |  |  |  Branch (480:10): [True: 15.6k, False: 133k]
  |  |  ------------------
  |  |  481|   133k|  if ((buf)->alloc != new_alloc) {\
  |  |  ------------------
  |  |  |  Branch (481:7): [True: 15.6k, False: 117k]
  |  |  ------------------
  |  |  482|  15.6k|    UChar *tmp;\
  |  |  ------------------
  |  |  |  |   76|  15.6k|# define UChar OnigUChar
  |  |  ------------------
  |  |  483|  15.6k|    tmp = (UChar* )xrealloc((buf)->p, new_alloc);\
  |  |  ------------------
  |  |  |  |  143|  15.6k|# define xrealloc    realloc
  |  |  ------------------
  |  |  484|  15.6k|    if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  ------------------
  |  |  |  |  311|  15.6k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 15.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  |  |  485|  15.6k|    (buf)->p = tmp;\
  |  |  486|  15.6k|    (buf)->alloc = new_alloc;\
  |  |  487|  15.6k|  }\
  |  |  488|   133k|} while (0)
  |  |  ------------------
  |  |  |  Branch (488:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1747|   133k|  BBUF_WRITE_CODE_POINT(bbuf, pos, from);
  ------------------
  |  | 1645|   133k|    BBUF_WRITE(bbuf, pos, &(code), SIZE_CODE_POINT)
  |  |  ------------------
  |  |  |  |  490|   133k|#define BBUF_WRITE(buf,pos,bytes,n) do{\
  |  |  |  |  491|   133k|  int used = (pos) + (int )(n);\
  |  |  |  |  492|   133k|  if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  470|      0|#define BBUF_EXPAND(buf,low) do{\
  |  |  |  |  |  |  471|      0|  UChar *tmp;\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   76|      0|# define UChar OnigUChar
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|  do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (472:36): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  473|      0|  tmp = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  143|      0|# define xrealloc    realloc
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  474|      0|  if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                 if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  475|      0|  (buf)->p = tmp;\
  |  |  |  |  |  |  476|      0|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (476:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (492:7): [True: 0, False: 133k]
  |  |  |  |  ------------------
  |  |  |  |  493|   133k|  xmemcpy((buf)->p + (pos), (bytes), (n));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|   133k|#define xmemcpy     memcpy
  |  |  |  |  ------------------
  |  |  |  |  494|   133k|  if ((buf)->used < (unsigned int )used) (buf)->used = used;\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:7): [True: 133k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  495|   133k|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (495:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1748|   133k|  BBUF_WRITE_CODE_POINT(bbuf, pos + SIZE_CODE_POINT, to);
  ------------------
  |  | 1645|   133k|    BBUF_WRITE(bbuf, pos, &(code), SIZE_CODE_POINT)
  |  |  ------------------
  |  |  |  |  490|   133k|#define BBUF_WRITE(buf,pos,bytes,n) do{\
  |  |  |  |  491|   133k|  int used = (pos) + (int )(n);\
  |  |  |  |  492|   133k|  if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  470|      0|#define BBUF_EXPAND(buf,low) do{\
  |  |  |  |  |  |  471|      0|  UChar *tmp;\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   76|      0|# define UChar OnigUChar
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|  do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (472:36): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  473|      0|  tmp = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  143|      0|# define xrealloc    realloc
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  474|      0|  if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                 if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  475|      0|  (buf)->p = tmp;\
  |  |  |  |  |  |  476|      0|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (476:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (492:7): [True: 0, False: 133k]
  |  |  |  |  ------------------
  |  |  |  |  493|   133k|  xmemcpy((buf)->p + (pos), (bytes), (n));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|   133k|#define xmemcpy     memcpy
  |  |  |  |  ------------------
  |  |  |  |  494|   133k|  if ((buf)->used < (unsigned int )used) (buf)->used = used;\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:7): [True: 133k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  495|   133k|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (495:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1749|   133k|  n += inc_n;
 1750|   133k|  BBUF_WRITE_CODE_POINT(bbuf, 0, n);
  ------------------
  |  | 1645|   133k|    BBUF_WRITE(bbuf, pos, &(code), SIZE_CODE_POINT)
  |  |  ------------------
  |  |  |  |  490|   133k|#define BBUF_WRITE(buf,pos,bytes,n) do{\
  |  |  |  |  491|   133k|  int used = (pos) + (int )(n);\
  |  |  |  |  492|   133k|  if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  470|      0|#define BBUF_EXPAND(buf,low) do{\
  |  |  |  |  |  |  471|      0|  UChar *tmp;\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   76|      0|# define UChar OnigUChar
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|  do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (472:36): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  473|      0|  tmp = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  143|      0|# define xrealloc    realloc
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  474|      0|  if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                 if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  475|      0|  (buf)->p = tmp;\
  |  |  |  |  |  |  476|      0|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (476:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (492:7): [True: 0, False: 133k]
  |  |  |  |  ------------------
  |  |  |  |  493|   133k|  xmemcpy((buf)->p + (pos), (bytes), (n));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|   133k|#define xmemcpy     memcpy
  |  |  |  |  ------------------
  |  |  |  |  494|   133k|  if ((buf)->used < (unsigned int )used) (buf)->used = used;\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:7): [True: 0, False: 133k]
  |  |  |  |  ------------------
  |  |  |  |  495|   133k|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (495:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1751|       |
 1752|   133k|  return 0;
 1753|   133k|}
regparse.c:new_code_range:
 1653|  5.34k|{
 1654|  5.34k|#define INIT_MULTI_BYTE_RANGE_SIZE  (SIZE_CODE_POINT * 5)
 1655|  5.34k|  int r;
 1656|  5.34k|  OnigCodePoint n;
 1657|  5.34k|  BBuf* bbuf;
 1658|       |
 1659|  5.34k|  bbuf = *pbuf = (BBuf* )xmalloc(sizeof(BBuf));
  ------------------
  |  |  142|  5.34k|# define xmalloc     malloc
  ------------------
 1660|  5.34k|  CHECK_NULL_RETURN_MEMERR(*pbuf);
  ------------------
  |  |  314|  5.34k|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|  5.34k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 5.34k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 1661|  5.34k|  r = BBUF_INIT(*pbuf, INIT_MULTI_BYTE_RANGE_SIZE);
  ------------------
  |  |  460|  5.34k|#define BBUF_INIT(buf,size)    onig_bbuf_init((BBuf* )(buf), (size))
  ------------------
 1662|  5.34k|  if (r) return r;
  ------------------
  |  Branch (1662:7): [True: 0, False: 5.34k]
  ------------------
 1663|       |
 1664|  5.34k|  n = 0;
 1665|  5.34k|  BBUF_WRITE_CODE_POINT(bbuf, 0, n);
  ------------------
  |  | 1645|  5.34k|    BBUF_WRITE(bbuf, pos, &(code), SIZE_CODE_POINT)
  |  |  ------------------
  |  |  |  |  490|  5.34k|#define BBUF_WRITE(buf,pos,bytes,n) do{\
  |  |  |  |  491|  5.34k|  int used = (pos) + (int )(n);\
  |  |  |  |  492|  5.34k|  if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\
  |  |  |  |  ------------------
  |  |  |  |  |  |  470|      0|#define BBUF_EXPAND(buf,low) do{\
  |  |  |  |  |  |  471|      0|  UChar *tmp;\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   76|      0|# define UChar OnigUChar
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|  do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (472:36): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  473|      0|  tmp = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  143|      0|# define xrealloc    realloc
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  474|      0|  if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                 if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  475|      0|  (buf)->p = tmp;\
  |  |  |  |  |  |  476|      0|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (476:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (492:7): [True: 0, False: 5.34k]
  |  |  |  |  ------------------
  |  |  |  |  493|  5.34k|  xmemcpy((buf)->p + (pos), (bytes), (n));\
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  5.34k|#define xmemcpy     memcpy
  |  |  |  |  ------------------
  |  |  |  |  494|  5.34k|  if ((buf)->used < (unsigned int )used) (buf)->used = used;\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:7): [True: 5.34k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  495|  5.34k|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (495:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1666|  5.34k|  return 0;
 1667|  5.34k|}
regparse.c:bitset_set_range:
  193|  5.34k|{
  194|  5.34k|  int i;
  195|   689k|  for (i = from; i <= to && i < SINGLE_BYTE_SIZE; i++) {
  ------------------
  |  |  426|   683k|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  ------------------
  |  |  |  |  425|   683k|#define BITS_PER_BYTE      8
  |  |  ------------------
  ------------------
  |  Branch (195:18): [True: 683k, False: 5.34k]
  |  Branch (195:29): [True: 683k, False: 0]
  ------------------
  196|   683k|    BITSET_SET_BIT_CHKDUP(bs, i);
  ------------------
  |  |  176|   683k|#define BITSET_SET_BIT_CHKDUP(bs, pos) do { \
  |  |  177|   683k|  if (BITSET_AT(bs, pos)) CC_DUP_WARN(env, pos, pos); \
  |  |  ------------------
  |  |  |  |  448|   683k|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  445|   683k|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|   683k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|   683k|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  446|   683k|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|   683k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|   683k|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (448:36): [True: 0, False: 683k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|   683k|  BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  445|   683k|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|   683k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|   683k|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  446|   683k|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|   683k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|   683k|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|   683k|} while (0)
  |  |  ------------------
  |  |  |  Branch (179:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
  197|   683k|  }
  198|  5.34k|}
regparse.c:add_code_range_to_buf:
 1757|   133k|{
 1758|   133k|  return add_code_range_to_buf0(pbuf, env, from, to, 1);
 1759|   133k|}
regparse.c:node_new_cclass:
 1141|  9.86k|{
 1142|  9.86k|  Node* node = node_new();
 1143|  9.86k|  CHECK_NULL_RETURN(node);
  ------------------
  |  |  313|  9.86k|#define CHECK_NULL_RETURN(p)          if (IS_NULL(p)) return NULL
  |  |  ------------------
  |  |  |  |  311|  9.86k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 9.86k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1144|       |
 1145|  9.86k|  SET_NTYPE(node, NT_CCLASS);
  ------------------
  |  |   71|  9.86k|    do { \
  |  |   72|  9.86k|	int value = ntype; \
  |  |   73|  9.86k|	memcpy(&((node)->u.base.type), &value, sizeof(int)); \
  |  |   74|  9.86k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1146|  9.86k|  initialize_cclass(NCCLASS(node));
  ------------------
  |  |   77|  9.86k|#define NCCLASS(node)      (&((node)->u.cclass))
  ------------------
 1147|  9.86k|  return node;
 1148|  9.86k|}
regparse.c:initialize_cclass:
 1132|  20.5k|{
 1133|  20.5k|  BITSET_CLEAR(cc->bs);
  ------------------
  |  |  440|  20.5k|#define BITSET_CLEAR(bs) do {\
  |  |  441|  20.5k|  int i;\
  |  |  442|   184k|  for (i = 0; i < BITSET_SIZE; i++) { (bs)[i] = 0; }	\
  |  |  ------------------
  |  |  |  |  428|   184k|#define BITSET_SIZE        (SINGLE_BYTE_SIZE / BITS_IN_ROOM)
  |  |  |  |  ------------------
  |  |  |  |  |  |  426|   184k|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|   184k|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define BITSET_SIZE        (SINGLE_BYTE_SIZE / BITS_IN_ROOM)
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|   184k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|   184k|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (442:15): [True: 164k, False: 20.5k]
  |  |  ------------------
  |  |  443|  20.5k|} while (0)
  |  |  ------------------
  |  |  |  Branch (443:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1134|       |  /* cc->base.flags = 0; */
 1135|  20.5k|  cc->flags = 0;
 1136|  20.5k|  cc->mbuf  = NULL;
 1137|  20.5k|}
regparse.c:add_ctype_to_cc:
 4138|  5.34k|{
 4139|  5.34k|  int maxcode;
 4140|  5.34k|  int c, r;
 4141|  5.34k|  const OnigCodePoint *ranges;
 4142|  5.34k|  OnigCodePoint sb_out;
 4143|  5.34k|  OnigEncoding enc = env->enc;
 4144|       |
 4145|  5.34k|  r = ONIGENC_GET_CTYPE_CODE_RANGE(enc, ctype, &sb_out, &ranges);
  ------------------
  |  |  407|  5.34k|        (enc)->get_ctype_code_range(ctype,sbout,ranges,enc)
  ------------------
 4146|  5.34k|  if (r == 0) {
  ------------------
  |  Branch (4146:7): [True: 5.34k, False: 0]
  ------------------
 4147|  5.34k|    if (ascii_range) {
  ------------------
  |  Branch (4147:9): [True: 5.34k, False: 0]
  ------------------
 4148|  5.34k|      CClassNode ccwork;
 4149|  5.34k|      initialize_cclass(&ccwork);
 4150|  5.34k|      r = add_ctype_to_cc_by_range(&ccwork, ctype, not, env, sb_out,
 4151|  5.34k|				   ranges);
 4152|  5.34k|      if (r == 0) {
  ------------------
  |  Branch (4152:11): [True: 5.34k, False: 0]
  ------------------
 4153|  5.34k|	if (not) {
  ------------------
  |  Branch (4153:6): [True: 0, False: 5.34k]
  ------------------
 4154|      0|	  r = add_code_range_to_buf0(&(ccwork.mbuf), env, 0x80, ONIG_LAST_CODE_POINT, FALSE);
  ------------------
  |  |  317|      0|#define ONIG_LAST_CODE_POINT    (~((OnigCodePoint )0))
  ------------------
              	  r = add_code_range_to_buf0(&(ccwork.mbuf), env, 0x80, ONIG_LAST_CODE_POINT, FALSE);
  ------------------
  |  |   77|      0|# define FALSE   0
  ------------------
 4155|      0|	}
 4156|  5.34k|	else {
 4157|  5.34k|	  CClassNode ccascii;
 4158|  5.34k|	  initialize_cclass(&ccascii);
 4159|  5.34k|	  if (ONIGENC_MBC_MINLEN(env->enc) > 1) {
  ------------------
  |  |  367|  5.34k|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  ------------------
  |  Branch (4159:8): [True: 0, False: 5.34k]
  ------------------
 4160|      0|	    r = add_code_range(&(ccascii.mbuf), env, 0x00, 0x7F);
 4161|      0|	  }
 4162|  5.34k|	  else {
 4163|  5.34k|	    bitset_set_range(env, ccascii.bs, 0x00, 0x7F);
 4164|  5.34k|	    r = 0;
 4165|  5.34k|	  }
 4166|  5.34k|	  if (r == 0) {
  ------------------
  |  Branch (4166:8): [True: 5.34k, False: 0]
  ------------------
 4167|  5.34k|	    r = and_cclass(&ccwork, &ccascii, env);
 4168|  5.34k|	  }
 4169|  5.34k|	  if (IS_NOT_NULL(ccascii.mbuf)) bbuf_free(ccascii.mbuf);
  ------------------
  |  |  312|  5.34k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 5.34k]
  |  |  ------------------
  ------------------
 4170|  5.34k|	}
 4171|  5.34k|	if (r == 0) {
  ------------------
  |  Branch (4171:6): [True: 5.34k, False: 0]
  ------------------
 4172|  5.34k|	  r = or_cclass(cc, &ccwork, env);
 4173|  5.34k|	}
 4174|  5.34k|	if (IS_NOT_NULL(ccwork.mbuf)) bbuf_free(ccwork.mbuf);
  ------------------
  |  |  312|  5.34k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 5.34k]
  |  |  ------------------
  ------------------
 4175|  5.34k|      }
 4176|  5.34k|    }
 4177|      0|    else {
 4178|      0|      r = add_ctype_to_cc_by_range(cc, ctype, not, env, sb_out, ranges);
 4179|      0|    }
 4180|  5.34k|    return r;
 4181|  5.34k|  }
 4182|      0|  else if (r != ONIG_NO_SUPPORT_CONFIG) {
  ------------------
  |  |  629|      0|#define ONIG_NO_SUPPORT_CONFIG                                -2
  ------------------
  |  Branch (4182:12): [True: 0, False: 0]
  ------------------
 4183|      0|    return r;
 4184|      0|  }
 4185|       |
 4186|      0|  maxcode = ascii_range ? 0x80 : SINGLE_BYTE_SIZE;
  ------------------
  |  |  426|      0|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  ------------------
  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  ------------------
  ------------------
  |  Branch (4186:13): [True: 0, False: 0]
  ------------------
 4187|      0|  r = 0;
 4188|      0|  switch (ctype) {
 4189|      0|  case ONIGENC_CTYPE_ALPHA:
  ------------------
  |  |  295|      0|#define ONIGENC_CTYPE_ALPHA     1
  ------------------
  |  Branch (4189:3): [True: 0, False: 0]
  ------------------
 4190|      0|  case ONIGENC_CTYPE_BLANK:
  ------------------
  |  |  296|      0|#define ONIGENC_CTYPE_BLANK     2
  ------------------
  |  Branch (4190:3): [True: 0, False: 0]
  ------------------
 4191|      0|  case ONIGENC_CTYPE_CNTRL:
  ------------------
  |  |  297|      0|#define ONIGENC_CTYPE_CNTRL     3
  ------------------
  |  Branch (4191:3): [True: 0, False: 0]
  ------------------
 4192|      0|  case ONIGENC_CTYPE_DIGIT:
  ------------------
  |  |  298|      0|#define ONIGENC_CTYPE_DIGIT     4
  ------------------
  |  Branch (4192:3): [True: 0, False: 0]
  ------------------
 4193|      0|  case ONIGENC_CTYPE_LOWER:
  ------------------
  |  |  300|      0|#define ONIGENC_CTYPE_LOWER     6
  ------------------
  |  Branch (4193:3): [True: 0, False: 0]
  ------------------
 4194|      0|  case ONIGENC_CTYPE_PUNCT:
  ------------------
  |  |  302|      0|#define ONIGENC_CTYPE_PUNCT     8
  ------------------
  |  Branch (4194:3): [True: 0, False: 0]
  ------------------
 4195|      0|  case ONIGENC_CTYPE_SPACE:
  ------------------
  |  |  303|      0|#define ONIGENC_CTYPE_SPACE     9
  ------------------
  |  Branch (4195:3): [True: 0, False: 0]
  ------------------
 4196|      0|  case ONIGENC_CTYPE_UPPER:
  ------------------
  |  |  304|      0|#define ONIGENC_CTYPE_UPPER    10
  ------------------
  |  Branch (4196:3): [True: 0, False: 0]
  ------------------
 4197|      0|  case ONIGENC_CTYPE_XDIGIT:
  ------------------
  |  |  305|      0|#define ONIGENC_CTYPE_XDIGIT   11
  ------------------
  |  Branch (4197:3): [True: 0, False: 0]
  ------------------
 4198|      0|  case ONIGENC_CTYPE_ASCII:
  ------------------
  |  |  308|      0|#define ONIGENC_CTYPE_ASCII    14
  ------------------
  |  Branch (4198:3): [True: 0, False: 0]
  ------------------
 4199|      0|  case ONIGENC_CTYPE_ALNUM:
  ------------------
  |  |  307|      0|#define ONIGENC_CTYPE_ALNUM    13  /* alpha || digit */
  ------------------
  |  Branch (4199:3): [True: 0, False: 0]
  ------------------
 4200|      0|    if (not != 0) {
  ------------------
  |  Branch (4200:9): [True: 0, False: 0]
  ------------------
 4201|      0|      for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
  ------------------
  |  |  426|      0|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  ------------------
  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  ------------------
  ------------------
  |  Branch (4201:19): [True: 0, False: 0]
  ------------------
 4202|      0|	if (! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
  ------------------
  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  ------------------
  |  Branch (4202:6): [True: 0, False: 0]
  ------------------
 4203|      0|	  BITSET_SET_BIT_CHKDUP(cc->bs, c);
  ------------------
  |  |  176|      0|#define BITSET_SET_BIT_CHKDUP(bs, pos) do { \
  |  |  177|      0|  if (BITSET_AT(bs, pos)) CC_DUP_WARN(env, pos, pos); \
  |  |  ------------------
  |  |  |  |  448|      0|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (448:36): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|      0|  BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (179:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4204|      0|      }
 4205|      0|      ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
  ------------------
  |  |  168|      0|#define ADD_ALL_MULTI_BYTE_RANGE(enc, mbuf) do {\
  |  |  169|      0|  if (! ONIGENC_IS_SINGLEBYTE(enc)) {\
  |  |  ------------------
  |  |  |  |  318|      0|#define ONIGENC_IS_SINGLEBYTE(enc)     (ONIGENC_MBC_MAXLEN(enc) == 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  365|      0|#define ONIGENC_MBC_MAXLEN(enc)               ((enc)->max_enc_len)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (169:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  170|      0|    r = SET_ALL_MULTI_BYTE_RANGE(enc, &(mbuf));\
  |  |  ------------------
  |  |  |  |  166|      0|  add_code_range_to_buf(pbuf, env, MBCODE_START_POS(enc), ONIG_LAST_CODE_POINT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  163|      0|  (OnigCodePoint )(ONIGENC_MBC_MINLEN(enc) > 1 ? 0 : 0x80)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (163:20): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                 add_code_range_to_buf(pbuf, env, MBCODE_START_POS(enc), ONIG_LAST_CODE_POINT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  317|      0|#define ONIG_LAST_CODE_POINT    (~((OnigCodePoint )0))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  171|      0|    if (r) return r;\
  |  |  ------------------
  |  |  |  Branch (171:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  172|      0|  }\
  |  |  173|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (173:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4206|      0|    }
 4207|      0|    else {
 4208|      0|      for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
  ------------------
  |  |  426|      0|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  ------------------
  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  ------------------
  ------------------
  |  Branch (4208:19): [True: 0, False: 0]
  ------------------
 4209|      0|	if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
  ------------------
  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  ------------------
  |  |  |  Branch (375:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4210|      0|	  BITSET_SET_BIT_CHKDUP(cc->bs, c);
  ------------------
  |  |  176|      0|#define BITSET_SET_BIT_CHKDUP(bs, pos) do { \
  |  |  177|      0|  if (BITSET_AT(bs, pos)) CC_DUP_WARN(env, pos, pos); \
  |  |  ------------------
  |  |  |  |  448|      0|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (448:36): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|      0|  BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (179:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4211|      0|      }
 4212|      0|    }
 4213|      0|    break;
 4214|       |
 4215|      0|  case ONIGENC_CTYPE_GRAPH:
  ------------------
  |  |  299|      0|#define ONIGENC_CTYPE_GRAPH     5
  ------------------
  |  Branch (4215:3): [True: 0, False: 0]
  ------------------
 4216|      0|  case ONIGENC_CTYPE_PRINT:
  ------------------
  |  |  301|      0|#define ONIGENC_CTYPE_PRINT     7
  ------------------
  |  Branch (4216:3): [True: 0, False: 0]
  ------------------
 4217|      0|    if (not != 0) {
  ------------------
  |  Branch (4217:9): [True: 0, False: 0]
  ------------------
 4218|      0|      for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
  ------------------
  |  |  426|      0|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  ------------------
  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  ------------------
  ------------------
  |  Branch (4218:19): [True: 0, False: 0]
  ------------------
 4219|      0|	if (! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype)
  ------------------
  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  ------------------
  |  Branch (4219:6): [True: 0, False: 0]
  ------------------
 4220|      0|	    || c >= maxcode)
  ------------------
  |  Branch (4220:9): [True: 0, False: 0]
  ------------------
 4221|      0|	  BITSET_SET_BIT_CHKDUP(cc->bs, c);
  ------------------
  |  |  176|      0|#define BITSET_SET_BIT_CHKDUP(bs, pos) do { \
  |  |  177|      0|  if (BITSET_AT(bs, pos)) CC_DUP_WARN(env, pos, pos); \
  |  |  ------------------
  |  |  |  |  448|      0|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (448:36): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|      0|  BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (179:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4222|      0|      }
 4223|      0|      if (ascii_range)
  ------------------
  |  Branch (4223:11): [True: 0, False: 0]
  ------------------
 4224|      0|	ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
  ------------------
  |  |  168|      0|#define ADD_ALL_MULTI_BYTE_RANGE(enc, mbuf) do {\
  |  |  169|      0|  if (! ONIGENC_IS_SINGLEBYTE(enc)) {\
  |  |  ------------------
  |  |  |  |  318|      0|#define ONIGENC_IS_SINGLEBYTE(enc)     (ONIGENC_MBC_MAXLEN(enc) == 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  365|      0|#define ONIGENC_MBC_MAXLEN(enc)               ((enc)->max_enc_len)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (169:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  170|      0|    r = SET_ALL_MULTI_BYTE_RANGE(enc, &(mbuf));\
  |  |  ------------------
  |  |  |  |  166|      0|  add_code_range_to_buf(pbuf, env, MBCODE_START_POS(enc), ONIG_LAST_CODE_POINT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  163|      0|  (OnigCodePoint )(ONIGENC_MBC_MINLEN(enc) > 1 ? 0 : 0x80)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (163:20): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                 add_code_range_to_buf(pbuf, env, MBCODE_START_POS(enc), ONIG_LAST_CODE_POINT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  317|      0|#define ONIG_LAST_CODE_POINT    (~((OnigCodePoint )0))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  171|      0|    if (r) return r;\
  |  |  ------------------
  |  |  |  Branch (171:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  172|      0|  }\
  |  |  173|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (173:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4225|      0|    }
 4226|      0|    else {
 4227|      0|      for (c = 0; c < maxcode; c++) {
  ------------------
  |  Branch (4227:19): [True: 0, False: 0]
  ------------------
 4228|      0|	if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
  ------------------
  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  ------------------
  |  |  |  Branch (375:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4229|      0|	  BITSET_SET_BIT_CHKDUP(cc->bs, c);
  ------------------
  |  |  176|      0|#define BITSET_SET_BIT_CHKDUP(bs, pos) do { \
  |  |  177|      0|  if (BITSET_AT(bs, pos)) CC_DUP_WARN(env, pos, pos); \
  |  |  ------------------
  |  |  |  |  448|      0|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (448:36): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|      0|  BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (179:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4230|      0|      }
 4231|      0|      if (! ascii_range)
  ------------------
  |  Branch (4231:11): [True: 0, False: 0]
  ------------------
 4232|      0|	ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
  ------------------
  |  |  168|      0|#define ADD_ALL_MULTI_BYTE_RANGE(enc, mbuf) do {\
  |  |  169|      0|  if (! ONIGENC_IS_SINGLEBYTE(enc)) {\
  |  |  ------------------
  |  |  |  |  318|      0|#define ONIGENC_IS_SINGLEBYTE(enc)     (ONIGENC_MBC_MAXLEN(enc) == 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  365|      0|#define ONIGENC_MBC_MAXLEN(enc)               ((enc)->max_enc_len)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (169:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  170|      0|    r = SET_ALL_MULTI_BYTE_RANGE(enc, &(mbuf));\
  |  |  ------------------
  |  |  |  |  166|      0|  add_code_range_to_buf(pbuf, env, MBCODE_START_POS(enc), ONIG_LAST_CODE_POINT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  163|      0|  (OnigCodePoint )(ONIGENC_MBC_MINLEN(enc) > 1 ? 0 : 0x80)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (163:20): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                 add_code_range_to_buf(pbuf, env, MBCODE_START_POS(enc), ONIG_LAST_CODE_POINT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  317|      0|#define ONIG_LAST_CODE_POINT    (~((OnigCodePoint )0))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  171|      0|    if (r) return r;\
  |  |  ------------------
  |  |  |  Branch (171:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  172|      0|  }\
  |  |  173|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (173:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4233|      0|    }
 4234|      0|    break;
 4235|       |
 4236|      0|  case ONIGENC_CTYPE_WORD:
  ------------------
  |  |  306|      0|#define ONIGENC_CTYPE_WORD     12
  ------------------
  |  Branch (4236:3): [True: 0, False: 0]
  ------------------
 4237|      0|    if (not == 0) {
  ------------------
  |  Branch (4237:9): [True: 0, False: 0]
  ------------------
 4238|      0|      for (c = 0; c < maxcode; c++) {
  ------------------
  |  Branch (4238:19): [True: 0, False: 0]
  ------------------
 4239|      0|	if (ONIGENC_IS_CODE_WORD(enc, c)) BITSET_SET_BIT_CHKDUP(cc->bs, c);
  ------------------
  |  |  404|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
  |  |  ------------------
  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (375:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              	if (ONIGENC_IS_CODE_WORD(enc, c)) BITSET_SET_BIT_CHKDUP(cc->bs, c);
  ------------------
  |  |  176|      0|#define BITSET_SET_BIT_CHKDUP(bs, pos) do { \
  |  |  177|      0|  if (BITSET_AT(bs, pos)) CC_DUP_WARN(env, pos, pos); \
  |  |  ------------------
  |  |  |  |  448|      0|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (448:36): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|      0|  BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (179:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4240|      0|      }
 4241|      0|      if (! ascii_range)
  ------------------
  |  Branch (4241:11): [True: 0, False: 0]
  ------------------
 4242|      0|	ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
  ------------------
  |  |  168|      0|#define ADD_ALL_MULTI_BYTE_RANGE(enc, mbuf) do {\
  |  |  169|      0|  if (! ONIGENC_IS_SINGLEBYTE(enc)) {\
  |  |  ------------------
  |  |  |  |  318|      0|#define ONIGENC_IS_SINGLEBYTE(enc)     (ONIGENC_MBC_MAXLEN(enc) == 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  365|      0|#define ONIGENC_MBC_MAXLEN(enc)               ((enc)->max_enc_len)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (169:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  170|      0|    r = SET_ALL_MULTI_BYTE_RANGE(enc, &(mbuf));\
  |  |  ------------------
  |  |  |  |  166|      0|  add_code_range_to_buf(pbuf, env, MBCODE_START_POS(enc), ONIG_LAST_CODE_POINT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  163|      0|  (OnigCodePoint )(ONIGENC_MBC_MINLEN(enc) > 1 ? 0 : 0x80)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (163:20): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                 add_code_range_to_buf(pbuf, env, MBCODE_START_POS(enc), ONIG_LAST_CODE_POINT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  317|      0|#define ONIG_LAST_CODE_POINT    (~((OnigCodePoint )0))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  171|      0|    if (r) return r;\
  |  |  ------------------
  |  |  |  Branch (171:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  172|      0|  }\
  |  |  173|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (173:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4243|      0|    }
 4244|      0|    else {
 4245|      0|      for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
  ------------------
  |  |  426|      0|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  ------------------
  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  ------------------
  ------------------
  |  Branch (4245:19): [True: 0, False: 0]
  ------------------
 4246|      0|	if ((ONIGENC_CODE_TO_MBCLEN(enc, c) > 0) /* check invalid code point */
  ------------------
  |  |  370|      0|#define ONIGENC_CODE_TO_MBCLEN(enc,code)       (enc)->code_to_mbclen(code,enc)
  ------------------
  |  Branch (4246:6): [True: 0, False: 0]
  ------------------
 4247|      0|	    && (! ONIGENC_IS_CODE_WORD(enc, c) || c >= maxcode))
  ------------------
  |  |  404|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
  |  |  ------------------
  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  ------------------
  ------------------
  |  Branch (4247:10): [True: 0, False: 0]
  |  Branch (4247:44): [True: 0, False: 0]
  ------------------
 4248|      0|	  BITSET_SET_BIT_CHKDUP(cc->bs, c);
  ------------------
  |  |  176|      0|#define BITSET_SET_BIT_CHKDUP(bs, pos) do { \
  |  |  177|      0|  if (BITSET_AT(bs, pos)) CC_DUP_WARN(env, pos, pos); \
  |  |  ------------------
  |  |  |  |  448|      0|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (448:36): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|      0|  BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (179:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4249|      0|      }
 4250|      0|      if (ascii_range)
  ------------------
  |  Branch (4250:11): [True: 0, False: 0]
  ------------------
 4251|      0|	ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
  ------------------
  |  |  168|      0|#define ADD_ALL_MULTI_BYTE_RANGE(enc, mbuf) do {\
  |  |  169|      0|  if (! ONIGENC_IS_SINGLEBYTE(enc)) {\
  |  |  ------------------
  |  |  |  |  318|      0|#define ONIGENC_IS_SINGLEBYTE(enc)     (ONIGENC_MBC_MAXLEN(enc) == 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  365|      0|#define ONIGENC_MBC_MAXLEN(enc)               ((enc)->max_enc_len)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (169:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  170|      0|    r = SET_ALL_MULTI_BYTE_RANGE(enc, &(mbuf));\
  |  |  ------------------
  |  |  |  |  166|      0|  add_code_range_to_buf(pbuf, env, MBCODE_START_POS(enc), ONIG_LAST_CODE_POINT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  163|      0|  (OnigCodePoint )(ONIGENC_MBC_MINLEN(enc) > 1 ? 0 : 0x80)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (163:20): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                 add_code_range_to_buf(pbuf, env, MBCODE_START_POS(enc), ONIG_LAST_CODE_POINT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  317|      0|#define ONIG_LAST_CODE_POINT    (~((OnigCodePoint )0))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  171|      0|    if (r) return r;\
  |  |  ------------------
  |  |  |  Branch (171:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  172|      0|  }\
  |  |  173|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (173:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4252|      0|    }
 4253|      0|    break;
 4254|       |
 4255|      0|  default:
  ------------------
  |  Branch (4255:3): [True: 0, False: 0]
  ------------------
 4256|      0|    return ONIGERR_PARSER_BUG;
  ------------------
  |  |  634|      0|#define ONIGERR_PARSER_BUG                                    -11
  ------------------
 4257|      0|    break;
 4258|      0|  }
 4259|       |
 4260|      0|  return r;
 4261|      0|}
regparse.c:add_ctype_to_cc_by_range:
 4067|  5.34k|{
 4068|  5.34k|  int i, r;
 4069|  5.34k|  OnigCodePoint j;
 4070|       |
 4071|  5.34k|  int n = ONIGENC_CODE_RANGE_NUM(mbr);
  ------------------
  |  |  139|  5.34k|#define ONIGENC_CODE_RANGE_NUM(range)     ((int )range[0])
  ------------------
 4072|       |
 4073|  5.34k|  if (not == 0) {
  ------------------
  |  Branch (4073:7): [True: 5.34k, False: 0]
  ------------------
 4074|  14.3k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (4074:17): [True: 14.3k, False: 0]
  ------------------
 4075|  14.3k|      for (j = ONIGENC_CODE_RANGE_FROM(mbr, i);
  ------------------
  |  |  140|  14.3k|#define ONIGENC_CODE_RANGE_FROM(range,i)  range[((i)*2) + 1]
  ------------------
 4076|  53.0k|	  j <= ONIGENC_CODE_RANGE_TO(mbr, i); j++) {
  ------------------
  |  |  141|  53.0k|#define ONIGENC_CODE_RANGE_TO(range,i)    range[((i)*2) + 2]
  ------------------
  |  Branch (4076:4): [True: 43.9k, False: 9.04k]
  ------------------
 4077|  43.9k|	if (j >= sb_out) {
  ------------------
  |  Branch (4077:6): [True: 5.34k, False: 38.6k]
  ------------------
 4078|  5.34k|	  if (j > ONIGENC_CODE_RANGE_FROM(mbr, i)) {
  ------------------
  |  |  140|  5.34k|#define ONIGENC_CODE_RANGE_FROM(range,i)  range[((i)*2) + 1]
  ------------------
  |  Branch (4078:8): [True: 0, False: 5.34k]
  ------------------
 4079|      0|	    r = add_code_range_to_buf(&(cc->mbuf), env, j,
 4080|      0|				      ONIGENC_CODE_RANGE_TO(mbr, i));
  ------------------
  |  |  141|      0|#define ONIGENC_CODE_RANGE_TO(range,i)    range[((i)*2) + 2]
  ------------------
 4081|      0|	    if (r != 0) return r;
  ------------------
  |  Branch (4081:10): [True: 0, False: 0]
  ------------------
 4082|      0|	    i++;
 4083|      0|	  }
 4084|       |
 4085|  5.34k|	  goto sb_end;
 4086|  5.34k|	}
 4087|  38.6k|	BITSET_SET_BIT_CHKDUP(cc->bs, j);
  ------------------
  |  |  176|  38.6k|#define BITSET_SET_BIT_CHKDUP(bs, pos) do { \
  |  |  177|  38.6k|  if (BITSET_AT(bs, pos)) CC_DUP_WARN(env, pos, pos); \
  |  |  ------------------
  |  |  |  |  448|  38.6k|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  445|  38.6k|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|  38.6k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|  38.6k|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  446|  38.6k|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|  38.6k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|  38.6k|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (448:36): [True: 0, False: 38.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|  38.6k|  BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  445|  38.6k|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|  38.6k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|  38.6k|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  446|  38.6k|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|  38.6k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|  38.6k|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|  38.6k|} while (0)
  |  |  ------------------
  |  |  |  Branch (179:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4088|  38.6k|      }
 4089|  14.3k|    }
 4090|       |
 4091|  5.34k|  sb_end:
 4092|   138k|    for ( ; i < n; i++) {
  ------------------
  |  Branch (4092:13): [True: 133k, False: 5.34k]
  ------------------
 4093|   133k|      r = add_code_range_to_buf(&(cc->mbuf), env,
 4094|   133k|                                ONIGENC_CODE_RANGE_FROM(mbr, i),
  ------------------
  |  |  140|   133k|#define ONIGENC_CODE_RANGE_FROM(range,i)  range[((i)*2) + 1]
  ------------------
 4095|   133k|                                ONIGENC_CODE_RANGE_TO(mbr, i));
  ------------------
  |  |  141|   133k|#define ONIGENC_CODE_RANGE_TO(range,i)    range[((i)*2) + 2]
  ------------------
 4096|   133k|      if (r != 0) return r;
  ------------------
  |  Branch (4096:11): [True: 0, False: 133k]
  ------------------
 4097|   133k|    }
 4098|  5.34k|  }
 4099|      0|  else {
 4100|      0|    OnigCodePoint prev = 0;
 4101|       |
 4102|      0|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (4102:17): [True: 0, False: 0]
  ------------------
 4103|      0|      for (j = prev;
 4104|      0|	   j < ONIGENC_CODE_RANGE_FROM(mbr, i); j++) {
  ------------------
  |  |  140|      0|#define ONIGENC_CODE_RANGE_FROM(range,i)  range[((i)*2) + 1]
  ------------------
  |  Branch (4104:5): [True: 0, False: 0]
  ------------------
 4105|      0|	if (j >= sb_out) {
  ------------------
  |  Branch (4105:6): [True: 0, False: 0]
  ------------------
 4106|      0|	  goto sb_end2;
 4107|      0|	}
 4108|      0|	BITSET_SET_BIT_CHKDUP(cc->bs, j);
  ------------------
  |  |  176|      0|#define BITSET_SET_BIT_CHKDUP(bs, pos) do { \
  |  |  177|      0|  if (BITSET_AT(bs, pos)) CC_DUP_WARN(env, pos, pos); \
  |  |  ------------------
  |  |  |  |  448|      0|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (448:36): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|      0|  BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (179:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4109|      0|      }
 4110|      0|      prev = ONIGENC_CODE_RANGE_TO(mbr, i) + 1;
  ------------------
  |  |  141|      0|#define ONIGENC_CODE_RANGE_TO(range,i)    range[((i)*2) + 2]
  ------------------
 4111|      0|    }
 4112|      0|    for (j = prev; j < sb_out; j++) {
  ------------------
  |  Branch (4112:20): [True: 0, False: 0]
  ------------------
 4113|      0|      BITSET_SET_BIT_CHKDUP(cc->bs, j);
  ------------------
  |  |  176|      0|#define BITSET_SET_BIT_CHKDUP(bs, pos) do { \
  |  |  177|      0|  if (BITSET_AT(bs, pos)) CC_DUP_WARN(env, pos, pos); \
  |  |  ------------------
  |  |  |  |  448|      0|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (448:36): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|      0|  BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (179:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4114|      0|    }
 4115|       |
 4116|      0|  sb_end2:
 4117|      0|    prev = sb_out;
 4118|       |
 4119|      0|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (4119:17): [True: 0, False: 0]
  ------------------
 4120|      0|      if (prev < ONIGENC_CODE_RANGE_FROM(mbr, i)) {
  ------------------
  |  |  140|      0|#define ONIGENC_CODE_RANGE_FROM(range,i)  range[((i)*2) + 1]
  ------------------
  |  Branch (4120:11): [True: 0, False: 0]
  ------------------
 4121|      0|	r = add_code_range_to_buf(&(cc->mbuf), env, prev,
 4122|      0|                                  ONIGENC_CODE_RANGE_FROM(mbr, i) - 1);
  ------------------
  |  |  140|      0|#define ONIGENC_CODE_RANGE_FROM(range,i)  range[((i)*2) + 1]
  ------------------
 4123|      0|	if (r != 0) return r;
  ------------------
  |  Branch (4123:6): [True: 0, False: 0]
  ------------------
 4124|      0|      }
 4125|      0|      prev = ONIGENC_CODE_RANGE_TO(mbr, i) + 1;
  ------------------
  |  |  141|      0|#define ONIGENC_CODE_RANGE_TO(range,i)    range[((i)*2) + 2]
  ------------------
 4126|      0|    }
 4127|      0|    if (prev < 0x7fffffff) {
  ------------------
  |  Branch (4127:9): [True: 0, False: 0]
  ------------------
 4128|      0|      r = add_code_range_to_buf(&(cc->mbuf), env, prev, 0x7fffffff);
 4129|      0|      if (r != 0) return r;
  ------------------
  |  Branch (4129:11): [True: 0, False: 0]
  ------------------
 4130|      0|    }
 4131|      0|  }
 4132|       |
 4133|  5.34k|  return 0;
 4134|  5.34k|}
regparse.c:and_cclass:
 1978|  5.34k|{
 1979|  5.34k|  OnigEncoding enc = env->enc;
 1980|  5.34k|  int r, not1, not2;
 1981|  5.34k|  BBuf *buf1, *buf2, *pbuf = 0;
 1982|  5.34k|  BitSetRef bsr1, bsr2;
 1983|  5.34k|  BitSet bs1, bs2;
 1984|       |
 1985|  5.34k|  not1 = IS_NCCLASS_NOT(dest);
  ------------------
  |  |  809|  5.34k|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|  5.34k|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|  5.34k|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1986|  5.34k|  bsr1 = dest->bs;
 1987|  5.34k|  buf1 = dest->mbuf;
 1988|  5.34k|  not2 = IS_NCCLASS_NOT(cc);
  ------------------
  |  |  809|  5.34k|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|  5.34k|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|  5.34k|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1989|  5.34k|  bsr2 = cc->bs;
 1990|  5.34k|  buf2 = cc->mbuf;
 1991|       |
 1992|  5.34k|  if (not1 != 0) {
  ------------------
  |  Branch (1992:7): [True: 0, False: 5.34k]
  ------------------
 1993|      0|    bitset_invert_to(bsr1, bs1);
 1994|      0|    bsr1 = bs1;
 1995|      0|  }
 1996|  5.34k|  if (not2 != 0) {
  ------------------
  |  Branch (1996:7): [True: 0, False: 5.34k]
  ------------------
 1997|      0|    bitset_invert_to(bsr2, bs2);
 1998|      0|    bsr2 = bs2;
 1999|      0|  }
 2000|  5.34k|  bitset_and(bsr1, bsr2);
 2001|  5.34k|  if (bsr1 != dest->bs) {
  ------------------
  |  Branch (2001:7): [True: 0, False: 5.34k]
  ------------------
 2002|      0|    bitset_copy(dest->bs, bsr1);
 2003|      0|    bsr1 = dest->bs;
 2004|      0|  }
 2005|  5.34k|  if (not1 != 0) {
  ------------------
  |  Branch (2005:7): [True: 0, False: 5.34k]
  ------------------
 2006|      0|    bitset_invert(dest->bs);
 2007|      0|  }
 2008|       |
 2009|  5.34k|  if (! ONIGENC_IS_SINGLEBYTE(enc)) {
  ------------------
  |  |  318|  5.34k|#define ONIGENC_IS_SINGLEBYTE(enc)     (ONIGENC_MBC_MAXLEN(enc) == 1)
  |  |  ------------------
  |  |  |  |  365|  5.34k|#define ONIGENC_MBC_MAXLEN(enc)               ((enc)->max_enc_len)
  |  |  ------------------
  ------------------
  |  Branch (2009:7): [True: 5.34k, False: 0]
  ------------------
 2010|  5.34k|    if (not1 != 0 && not2 != 0) {
  ------------------
  |  Branch (2010:9): [True: 0, False: 5.34k]
  |  Branch (2010:22): [True: 0, False: 0]
  ------------------
 2011|      0|      r = or_code_range_buf(enc, buf1, 0, buf2, 0, &pbuf, env);
 2012|      0|    }
 2013|  5.34k|    else {
 2014|  5.34k|      r = and_code_range_buf(buf1, not1, buf2, not2, &pbuf, env);
 2015|  5.34k|      if (r == 0 && not1 != 0) {
  ------------------
  |  Branch (2015:11): [True: 5.34k, False: 0]
  |  Branch (2015:21): [True: 0, False: 5.34k]
  ------------------
 2016|      0|	BBuf *tbuf = 0;
 2017|      0|	r = not_code_range_buf(enc, pbuf, &tbuf, env);
 2018|      0|	bbuf_free(pbuf);
 2019|      0|	pbuf = tbuf;
 2020|      0|      }
 2021|  5.34k|    }
 2022|  5.34k|    if (r != 0) {
  ------------------
  |  Branch (2022:9): [True: 0, False: 5.34k]
  ------------------
 2023|      0|      bbuf_free(pbuf);
 2024|      0|      return r;
 2025|      0|    }
 2026|       |
 2027|  5.34k|    dest->mbuf = pbuf;
 2028|  5.34k|    bbuf_free(buf1);
 2029|  5.34k|    return r;
 2030|  5.34k|  }
 2031|      0|  return 0;
 2032|  5.34k|}
regparse.c:bitset_and:
  225|  5.34k|{
  226|  5.34k|  int i;
  227|  48.0k|  for (i = 0; i < BITSET_SIZE; i++) { dest[i] &= bs[i]; }
  ------------------
  |  |  428|  48.0k|#define BITSET_SIZE        (SINGLE_BYTE_SIZE / BITS_IN_ROOM)
  |  |  ------------------
  |  |  |  |  426|  48.0k|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  425|  48.0k|#define BITS_PER_BYTE      8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define BITSET_SIZE        (SINGLE_BYTE_SIZE / BITS_IN_ROOM)
  |  |  ------------------
  |  |  |  |  427|  48.0k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  425|  48.0k|#define BITS_PER_BYTE      8
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (227:15): [True: 42.7k, False: 5.34k]
  ------------------
  228|  5.34k|}
regparse.c:or_code_range_buf:
 1825|  5.34k|{
 1826|  5.34k|  int r;
 1827|  5.34k|  OnigCodePoint i, n1, *data1;
 1828|  5.34k|  OnigCodePoint from, to;
 1829|       |
 1830|  5.34k|  *pbuf = (BBuf* )NULL;
 1831|  5.34k|  if (IS_NULL(bbuf1) && IS_NULL(bbuf2)) {
  ------------------
  |  |  311|  10.6k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 5.34k, False: 0]
  |  |  ------------------
  ------------------
                if (IS_NULL(bbuf1) && IS_NULL(bbuf2)) {
  ------------------
  |  |  311|  5.34k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 5.34k, False: 0]
  |  |  ------------------
  ------------------
 1832|  5.34k|    if (not1 != 0 || not2 != 0)
  ------------------
  |  Branch (1832:9): [True: 0, False: 5.34k]
  |  Branch (1832:22): [True: 0, False: 5.34k]
  ------------------
 1833|      0|      return SET_ALL_MULTI_BYTE_RANGE(enc, pbuf);
  ------------------
  |  |  166|      0|  add_code_range_to_buf(pbuf, env, MBCODE_START_POS(enc), ONIG_LAST_CODE_POINT)
  |  |  ------------------
  |  |  |  |  163|      0|  (OnigCodePoint )(ONIGENC_MBC_MINLEN(enc) > 1 ? 0 : 0x80)
  |  |  |  |  ------------------
  |  |  |  |  |  |  367|      0|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:20): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 add_code_range_to_buf(pbuf, env, MBCODE_START_POS(enc), ONIG_LAST_CODE_POINT)
  |  |  ------------------
  |  |  |  |  317|      0|#define ONIG_LAST_CODE_POINT    (~((OnigCodePoint )0))
  |  |  ------------------
  ------------------
 1834|  5.34k|    return 0;
 1835|  5.34k|  }
 1836|       |
 1837|      0|  r = 0;
 1838|      0|  if (IS_NULL(bbuf2))
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1839|      0|    SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2);
  ------------------
  |  | 1815|      0|#define SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2) do {\
  |  | 1816|      0|  BBuf *tbuf; \
  |  | 1817|      0|  int  tnot; \
  |  | 1818|      0|  tnot = not1;  not1  = not2;  not2  = tnot; \
  |  | 1819|      0|  tbuf = bbuf1; bbuf1 = bbuf2; bbuf2 = tbuf; \
  |  | 1820|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (1820:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1840|       |
 1841|      0|  if (IS_NULL(bbuf1)) {
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1842|      0|    if (not1 != 0) {
  ------------------
  |  Branch (1842:9): [True: 0, False: 0]
  ------------------
 1843|      0|      return SET_ALL_MULTI_BYTE_RANGE(enc, pbuf);
  ------------------
  |  |  166|      0|  add_code_range_to_buf(pbuf, env, MBCODE_START_POS(enc), ONIG_LAST_CODE_POINT)
  |  |  ------------------
  |  |  |  |  163|      0|  (OnigCodePoint )(ONIGENC_MBC_MINLEN(enc) > 1 ? 0 : 0x80)
  |  |  |  |  ------------------
  |  |  |  |  |  |  367|      0|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:20): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 add_code_range_to_buf(pbuf, env, MBCODE_START_POS(enc), ONIG_LAST_CODE_POINT)
  |  |  ------------------
  |  |  |  |  317|      0|#define ONIG_LAST_CODE_POINT    (~((OnigCodePoint )0))
  |  |  ------------------
  ------------------
 1844|      0|    }
 1845|      0|    else {
 1846|      0|      if (not2 == 0) {
  ------------------
  |  Branch (1846:11): [True: 0, False: 0]
  ------------------
 1847|      0|	return bbuf_clone(pbuf, bbuf2);
 1848|      0|      }
 1849|      0|      else {
 1850|      0|	return not_code_range_buf(enc, bbuf2, pbuf, env);
 1851|      0|      }
 1852|      0|    }
 1853|      0|  }
 1854|       |
 1855|      0|  if (not1 != 0)
  ------------------
  |  Branch (1855:7): [True: 0, False: 0]
  ------------------
 1856|      0|    SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2);
  ------------------
  |  | 1815|      0|#define SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2) do {\
  |  | 1816|      0|  BBuf *tbuf; \
  |  | 1817|      0|  int  tnot; \
  |  | 1818|      0|  tnot = not1;  not1  = not2;  not2  = tnot; \
  |  | 1819|      0|  tbuf = bbuf1; bbuf1 = bbuf2; bbuf2 = tbuf; \
  |  | 1820|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (1820:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1857|       |
 1858|      0|  data1 = (OnigCodePoint* )(bbuf1->p);
 1859|      0|  GET_CODE_POINT(n1, data1);
  ------------------
  |  |  710|      0|#define GET_CODE_POINT(code,p)   code = *((OnigCodePoint* )(p))
  ------------------
 1860|      0|  data1++;
 1861|       |
 1862|      0|  if (not2 == 0 && not1 == 0) { /* 1 OR 2 */
  ------------------
  |  Branch (1862:7): [True: 0, False: 0]
  |  Branch (1862:20): [True: 0, False: 0]
  ------------------
 1863|      0|    r = bbuf_clone(pbuf, bbuf2);
 1864|      0|  }
 1865|      0|  else if (not1 == 0) { /* 1 OR (not 2) */
  ------------------
  |  Branch (1865:12): [True: 0, False: 0]
  ------------------
 1866|      0|    r = not_code_range_buf(enc, bbuf2, pbuf, env);
 1867|      0|  }
 1868|      0|  if (r != 0) return r;
  ------------------
  |  Branch (1868:7): [True: 0, False: 0]
  ------------------
 1869|       |
 1870|      0|  for (i = 0; i < n1; i++) {
  ------------------
  |  Branch (1870:15): [True: 0, False: 0]
  ------------------
 1871|      0|    from = data1[i*2];
 1872|      0|    to   = data1[i*2+1];
 1873|      0|    r = add_code_range_to_buf(pbuf, env, from, to);
 1874|      0|    if (r != 0) return r;
  ------------------
  |  Branch (1874:9): [True: 0, False: 0]
  ------------------
 1875|      0|  }
 1876|      0|  return 0;
 1877|      0|}
regparse.c:and_code_range_buf:
 1921|  5.34k|{
 1922|  5.34k|  int r;
 1923|  5.34k|  OnigCodePoint i, j, n1, n2, *data1, *data2;
 1924|  5.34k|  OnigCodePoint from, to, from1, to1, from2, to2;
 1925|       |
 1926|  5.34k|  *pbuf = (BBuf* )NULL;
 1927|  5.34k|  if (IS_NULL(bbuf1)) {
  ------------------
  |  |  311|  5.34k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 5.34k]
  |  |  ------------------
  ------------------
 1928|      0|    if (not1 != 0 && IS_NOT_NULL(bbuf2)) /* not1 != 0 -> not2 == 0 */
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1928:9): [True: 0, False: 0]
  ------------------
 1929|      0|      return bbuf_clone(pbuf, bbuf2);
 1930|      0|    return 0;
 1931|      0|  }
 1932|  5.34k|  else if (IS_NULL(bbuf2)) {
  ------------------
  |  |  311|  5.34k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 5.34k, False: 0]
  |  |  ------------------
  ------------------
 1933|  5.34k|    if (not2 != 0)
  ------------------
  |  Branch (1933:9): [True: 0, False: 5.34k]
  ------------------
 1934|      0|      return bbuf_clone(pbuf, bbuf1);
 1935|  5.34k|    return 0;
 1936|  5.34k|  }
 1937|       |
 1938|      0|  if (not1 != 0)
  ------------------
  |  Branch (1938:7): [True: 0, False: 0]
  ------------------
 1939|      0|    SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2);
  ------------------
  |  | 1815|      0|#define SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2) do {\
  |  | 1816|      0|  BBuf *tbuf; \
  |  | 1817|      0|  int  tnot; \
  |  | 1818|      0|  tnot = not1;  not1  = not2;  not2  = tnot; \
  |  | 1819|      0|  tbuf = bbuf1; bbuf1 = bbuf2; bbuf2 = tbuf; \
  |  | 1820|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (1820:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1940|       |
 1941|      0|  data1 = (OnigCodePoint* )(bbuf1->p);
 1942|      0|  data2 = (OnigCodePoint* )(bbuf2->p);
 1943|      0|  GET_CODE_POINT(n1, data1);
  ------------------
  |  |  710|      0|#define GET_CODE_POINT(code,p)   code = *((OnigCodePoint* )(p))
  ------------------
 1944|      0|  GET_CODE_POINT(n2, data2);
  ------------------
  |  |  710|      0|#define GET_CODE_POINT(code,p)   code = *((OnigCodePoint* )(p))
  ------------------
 1945|      0|  data1++;
 1946|      0|  data2++;
 1947|       |
 1948|      0|  if (not2 == 0 && not1 == 0) { /* 1 AND 2 */
  ------------------
  |  Branch (1948:7): [True: 0, False: 0]
  |  Branch (1948:20): [True: 0, False: 0]
  ------------------
 1949|      0|    for (i = 0; i < n1; i++) {
  ------------------
  |  Branch (1949:17): [True: 0, False: 0]
  ------------------
 1950|      0|      from1 = data1[i*2];
 1951|      0|      to1   = data1[i*2+1];
 1952|      0|      for (j = 0; j < n2; j++) {
  ------------------
  |  Branch (1952:19): [True: 0, False: 0]
  ------------------
 1953|      0|	from2 = data2[j*2];
 1954|      0|	to2   = data2[j*2+1];
 1955|      0|	if (from2 > to1) break;
  ------------------
  |  Branch (1955:6): [True: 0, False: 0]
  ------------------
 1956|      0|	if (to2 < from1) continue;
  ------------------
  |  Branch (1956:6): [True: 0, False: 0]
  ------------------
 1957|      0|	from = MAX(from1, from2);
  ------------------
  |  |  309|      0|#define MAX(a,b) (((a)<(b))?(b):(a))
  |  |  ------------------
  |  |  |  Branch (309:19): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1958|      0|	to   = MIN(to1, to2);
  ------------------
  |  |  308|      0|#define MIN(a,b) (((a)>(b))?(b):(a))
  |  |  ------------------
  |  |  |  Branch (308:19): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1959|      0|	r = add_code_range_to_buf(pbuf, env, from, to);
 1960|      0|	if (r != 0) return r;
  ------------------
  |  Branch (1960:6): [True: 0, False: 0]
  ------------------
 1961|      0|      }
 1962|      0|    }
 1963|      0|  }
 1964|      0|  else if (not1 == 0) { /* 1 AND (not 2) */
  ------------------
  |  Branch (1964:12): [True: 0, False: 0]
  ------------------
 1965|      0|    for (i = 0; i < n1; i++) {
  ------------------
  |  Branch (1965:17): [True: 0, False: 0]
  ------------------
 1966|      0|      from1 = data1[i*2];
 1967|      0|      to1   = data1[i*2+1];
 1968|      0|      r = and_code_range1(pbuf, env, from1, to1, data2, n2);
 1969|      0|      if (r != 0) return r;
  ------------------
  |  Branch (1969:11): [True: 0, False: 0]
  ------------------
 1970|      0|    }
 1971|      0|  }
 1972|       |
 1973|      0|  return 0;
 1974|      0|}
regparse.c:or_cclass:
 2036|  5.34k|{
 2037|  5.34k|  OnigEncoding enc = env->enc;
 2038|  5.34k|  int r, not1, not2;
 2039|  5.34k|  BBuf *buf1, *buf2, *pbuf = 0;
 2040|  5.34k|  BitSetRef bsr1, bsr2;
 2041|  5.34k|  BitSet bs1, bs2;
 2042|       |
 2043|  5.34k|  not1 = IS_NCCLASS_NOT(dest);
  ------------------
  |  |  809|  5.34k|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|  5.34k|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|  5.34k|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2044|  5.34k|  bsr1 = dest->bs;
 2045|  5.34k|  buf1 = dest->mbuf;
 2046|  5.34k|  not2 = IS_NCCLASS_NOT(cc);
  ------------------
  |  |  809|  5.34k|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|  5.34k|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|  5.34k|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2047|  5.34k|  bsr2 = cc->bs;
 2048|  5.34k|  buf2 = cc->mbuf;
 2049|       |
 2050|  5.34k|  if (not1 != 0) {
  ------------------
  |  Branch (2050:7): [True: 0, False: 5.34k]
  ------------------
 2051|      0|    bitset_invert_to(bsr1, bs1);
 2052|      0|    bsr1 = bs1;
 2053|      0|  }
 2054|  5.34k|  if (not2 != 0) {
  ------------------
  |  Branch (2054:7): [True: 0, False: 5.34k]
  ------------------
 2055|      0|    bitset_invert_to(bsr2, bs2);
 2056|      0|    bsr2 = bs2;
 2057|      0|  }
 2058|  5.34k|  bitset_or(bsr1, bsr2);
 2059|  5.34k|  if (bsr1 != dest->bs) {
  ------------------
  |  Branch (2059:7): [True: 0, False: 5.34k]
  ------------------
 2060|      0|    bitset_copy(dest->bs, bsr1);
 2061|      0|    bsr1 = dest->bs;
 2062|      0|  }
 2063|  5.34k|  if (not1 != 0) {
  ------------------
  |  Branch (2063:7): [True: 0, False: 5.34k]
  ------------------
 2064|      0|    bitset_invert(dest->bs);
 2065|      0|  }
 2066|       |
 2067|  5.34k|  if (! ONIGENC_IS_SINGLEBYTE(enc)) {
  ------------------
  |  |  318|  5.34k|#define ONIGENC_IS_SINGLEBYTE(enc)     (ONIGENC_MBC_MAXLEN(enc) == 1)
  |  |  ------------------
  |  |  |  |  365|  5.34k|#define ONIGENC_MBC_MAXLEN(enc)               ((enc)->max_enc_len)
  |  |  ------------------
  ------------------
  |  Branch (2067:7): [True: 5.34k, False: 0]
  ------------------
 2068|  5.34k|    if (not1 != 0 && not2 != 0) {
  ------------------
  |  Branch (2068:9): [True: 0, False: 5.34k]
  |  Branch (2068:22): [True: 0, False: 0]
  ------------------
 2069|      0|      r = and_code_range_buf(buf1, 0, buf2, 0, &pbuf, env);
 2070|      0|    }
 2071|  5.34k|    else {
 2072|  5.34k|      r = or_code_range_buf(enc, buf1, not1, buf2, not2, &pbuf, env);
 2073|  5.34k|      if (r == 0 && not1 != 0) {
  ------------------
  |  Branch (2073:11): [True: 5.34k, False: 0]
  |  Branch (2073:21): [True: 0, False: 5.34k]
  ------------------
 2074|      0|	BBuf *tbuf = 0;
 2075|      0|	r = not_code_range_buf(enc, pbuf, &tbuf, env);
 2076|      0|	bbuf_free(pbuf);
 2077|      0|	pbuf = tbuf;
 2078|      0|      }
 2079|  5.34k|    }
 2080|  5.34k|    if (r != 0) {
  ------------------
  |  Branch (2080:9): [True: 0, False: 5.34k]
  ------------------
 2081|      0|      bbuf_free(pbuf);
 2082|      0|      return r;
 2083|      0|    }
 2084|       |
 2085|  5.34k|    dest->mbuf = pbuf;
 2086|  5.34k|    bbuf_free(buf1);
 2087|  5.34k|    return r;
 2088|  5.34k|  }
 2089|      0|  else
 2090|      0|    return 0;
 2091|  5.34k|}
regparse.c:bitset_or:
  232|  5.34k|{
  233|  5.34k|  int i;
  234|  48.0k|  for (i = 0; i < BITSET_SIZE; i++) { dest[i] |= bs[i]; }
  ------------------
  |  |  428|  48.0k|#define BITSET_SIZE        (SINGLE_BYTE_SIZE / BITS_IN_ROOM)
  |  |  ------------------
  |  |  |  |  426|  48.0k|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  425|  48.0k|#define BITS_PER_BYTE      8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define BITSET_SIZE        (SINGLE_BYTE_SIZE / BITS_IN_ROOM)
  |  |  ------------------
  |  |  |  |  427|  48.0k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  425|  48.0k|#define BITS_PER_BYTE      8
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (234:15): [True: 42.7k, False: 5.34k]
  ------------------
  235|  5.34k|}
regparse.c:parse_char_class:
 4562|  6.16k|{
 4563|  6.16k|  int r, neg, len, fetched, and_start;
 4564|  6.16k|  OnigCodePoint v, vs;
 4565|  6.16k|  UChar *p;
  ------------------
  |  |   76|  6.16k|# define UChar OnigUChar
  ------------------
 4566|  6.16k|  Node* node;
 4567|  6.16k|  Node* asc_node;
 4568|  6.16k|  CClassNode *cc, *prev_cc;
 4569|  6.16k|  CClassNode *asc_cc, *asc_prev_cc;
 4570|  6.16k|  CClassNode work_cc, asc_work_cc;
 4571|       |
 4572|  6.16k|  enum CCSTATE state;
 4573|  6.16k|  enum CCVALTYPE val_type, in_type;
 4574|  6.16k|  int val_israw, in_israw;
 4575|       |
 4576|  6.16k|  *np = *asc_np = NULL_NODE;
  ------------------
  |  |  283|  6.16k|#define NULL_NODE  ((Node* )0)
  ------------------
 4577|  6.16k|  env->parse_depth++;
 4578|  6.16k|  if (env->parse_depth > ParseDepthLimit)
  ------------------
  |  Branch (4578:7): [True: 0, False: 6.16k]
  ------------------
 4579|      0|    return ONIGERR_PARSE_DEPTH_LIMIT_OVER;
  ------------------
  |  |  639|      0|#define ONIGERR_PARSE_DEPTH_LIMIT_OVER                        -16
  ------------------
 4580|  6.16k|  prev_cc = asc_prev_cc = (CClassNode* )NULL;
 4581|  6.16k|  r = fetch_token_in_cc(tok, src, end, env);
 4582|  6.16k|  if (r == TK_CHAR && tok->u.c == '^' && tok->escaped == 0) {
  ------------------
  |  Branch (4582:7): [True: 2.87k, False: 3.28k]
  |  Branch (4582:23): [True: 2.46k, False: 411]
  |  Branch (4582:42): [True: 2.46k, False: 0]
  ------------------
 4583|  2.46k|    neg = 1;
 4584|  2.46k|    r = fetch_token_in_cc(tok, src, end, env);
 4585|  2.46k|  }
 4586|  3.69k|  else {
 4587|  3.69k|    neg = 0;
 4588|  3.69k|  }
 4589|       |
 4590|  6.16k|  if (r < 0) return r;
  ------------------
  |  Branch (4590:7): [True: 0, False: 6.16k]
  ------------------
 4591|  6.16k|  if (r == TK_CC_CLOSE) {
  ------------------
  |  Branch (4591:7): [True: 0, False: 6.16k]
  ------------------
 4592|      0|    if (! code_exist_check((OnigCodePoint )']',
  ------------------
  |  Branch (4592:9): [True: 0, False: 0]
  ------------------
 4593|      0|                           *src, env->pattern_end, 1, env))
 4594|      0|      return ONIGERR_EMPTY_CHAR_CLASS;
  ------------------
  |  |  647|      0|#define ONIGERR_EMPTY_CHAR_CLASS                             -102
  ------------------
 4595|       |
 4596|      0|    CC_ESC_WARN(env, (UChar* )"]");
 4597|      0|    r = tok->type = TK_CHAR;  /* allow []...] */
 4598|      0|  }
 4599|       |
 4600|  6.16k|  *np = node = node_new_cclass();
 4601|  6.16k|  CHECK_NULL_RETURN_MEMERR(node);
  ------------------
  |  |  314|  6.16k|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|  6.16k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 6.16k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 4602|  6.16k|  cc = NCCLASS(node);
  ------------------
  |  |   77|  6.16k|#define NCCLASS(node)      (&((node)->u.cclass))
  ------------------
 4603|       |
 4604|  6.16k|  if (IS_IGNORECASE(env->option)) {
  ------------------
  |  |  396|  6.16k|#define IS_IGNORECASE(option)     ((option) & ONIG_OPTION_IGNORECASE)
  |  |  ------------------
  |  |  |  |  454|  6.16k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  ------------------
  |  |  |  Branch (396:35): [True: 0, False: 6.16k]
  |  |  ------------------
  ------------------
 4605|      0|    *asc_np = asc_node = node_new_cclass();
 4606|      0|    CHECK_NULL_RETURN_MEMERR(asc_node);
  ------------------
  |  |  314|      0|#define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY
  |  |  ------------------
  |  |  |  |  632|      0|#define ONIGERR_MEMORY                                         -5
  |  |  ------------------
  ------------------
 4607|      0|    asc_cc = NCCLASS(asc_node);
  ------------------
  |  |   77|      0|#define NCCLASS(node)      (&((node)->u.cclass))
  ------------------
 4608|      0|  }
 4609|  6.16k|  else {
 4610|  6.16k|    asc_node = NULL_NODE;
  ------------------
  |  |  283|  6.16k|#define NULL_NODE  ((Node* )0)
  ------------------
 4611|  6.16k|    asc_cc = NULL;
 4612|  6.16k|  }
 4613|       |
 4614|  6.16k|  and_start = 0;
 4615|  6.16k|  state = CCS_START;
 4616|  6.16k|  p = *src;
 4617|  22.6k|  while (r != TK_CC_CLOSE) {
  ------------------
  |  Branch (4617:10): [True: 16.4k, False: 6.16k]
  ------------------
 4618|  16.4k|    fetched = 0;
 4619|  16.4k|    switch (r) {
 4620|  9.86k|    case TK_CHAR:
  ------------------
  |  Branch (4620:5): [True: 9.86k, False: 6.57k]
  ------------------
 4621|  9.86k|      if ((tok->u.code >= SINGLE_BYTE_SIZE) ||
  ------------------
  |  |  426|  9.86k|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  ------------------
  |  |  |  |  425|  9.86k|#define BITS_PER_BYTE      8
  |  |  ------------------
  ------------------
  |  Branch (4621:11): [True: 0, False: 9.86k]
  ------------------
 4622|  9.86k|	  (len = ONIGENC_CODE_TO_MBCLEN(env->enc, tok->u.c)) > 1) {
  ------------------
  |  |  370|  9.86k|#define ONIGENC_CODE_TO_MBCLEN(enc,code)       (enc)->code_to_mbclen(code,enc)
  ------------------
  |  Branch (4622:4): [True: 0, False: 9.86k]
  ------------------
 4623|      0|	in_type = CCV_CODE_POINT;
 4624|      0|      }
 4625|  9.86k|      else if (len < 0) {
  ------------------
  |  Branch (4625:16): [True: 0, False: 9.86k]
  ------------------
 4626|      0|	r = len;
 4627|      0|	goto err;
 4628|      0|      }
 4629|  9.86k|      else {
 4630|  9.86k|      sb_char:
 4631|  9.86k|	in_type = CCV_SB;
 4632|  9.86k|      }
 4633|  9.86k|      v = (OnigCodePoint )tok->u.c;
 4634|  9.86k|      in_israw = 0;
 4635|  9.86k|      goto val_entry2;
 4636|      0|      break;
 4637|       |
 4638|      0|    case TK_RAW_BYTE:
  ------------------
  |  Branch (4638:5): [True: 0, False: 16.4k]
  ------------------
 4639|       |      /* tok->base != 0 : octal or hexadec. */
 4640|      0|      if (! ONIGENC_IS_SINGLEBYTE(env->enc) && tok->base != 0) {
  ------------------
  |  |  318|      0|#define ONIGENC_IS_SINGLEBYTE(enc)     (ONIGENC_MBC_MAXLEN(enc) == 1)
  |  |  ------------------
  |  |  |  |  365|      0|#define ONIGENC_MBC_MAXLEN(enc)               ((enc)->max_enc_len)
  |  |  ------------------
  ------------------
  |  Branch (4640:11): [True: 0, False: 0]
  |  Branch (4640:48): [True: 0, False: 0]
  ------------------
 4641|      0|	UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];
  ------------------
  |  |   76|      0|# define UChar OnigUChar
  ------------------
 4642|      0|	UChar* bufe = buf + ONIGENC_CODE_TO_MBC_MAXLEN;
  ------------------
  |  |   76|      0|# define UChar OnigUChar
  ------------------
              	UChar* bufe = buf + ONIGENC_CODE_TO_MBC_MAXLEN;
  ------------------
  |  |  289|      0|#define ONIGENC_CODE_TO_MBC_MAXLEN       7
  ------------------
 4643|      0|	UChar* psave = p;
  ------------------
  |  |   76|      0|# define UChar OnigUChar
  ------------------
 4644|      0|	int i, base = tok->base;
 4645|       |
 4646|      0|	buf[0] = (UChar )tok->u.c;
 4647|      0|	for (i = 1; i < ONIGENC_MBC_MAXLEN(env->enc); i++) {
  ------------------
  |  |  365|      0|#define ONIGENC_MBC_MAXLEN(enc)               ((enc)->max_enc_len)
  ------------------
  |  Branch (4647:14): [True: 0, False: 0]
  ------------------
 4648|      0|	  r = fetch_token_in_cc(tok, &p, end, env);
 4649|      0|	  if (r < 0) goto err;
  ------------------
  |  Branch (4649:8): [True: 0, False: 0]
  ------------------
 4650|      0|	  if (r != TK_RAW_BYTE || tok->base != base) {
  ------------------
  |  Branch (4650:8): [True: 0, False: 0]
  |  Branch (4650:28): [True: 0, False: 0]
  ------------------
 4651|      0|	    fetched = 1;
 4652|      0|	    break;
 4653|      0|	  }
 4654|      0|	  buf[i] = (UChar )tok->u.c;
 4655|      0|	}
 4656|       |
 4657|      0|	if (i < ONIGENC_MBC_MINLEN(env->enc)) {
  ------------------
  |  |  367|      0|#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
  ------------------
  |  Branch (4657:6): [True: 0, False: 0]
  ------------------
 4658|      0|	  r = ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;
  ------------------
  |  |  675|      0|#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING                  -206
  ------------------
 4659|      0|	  goto err;
 4660|      0|	}
 4661|       |
 4662|      0|	if (env->enc == ONIG_ENCODING_EUC_JP ||
  ------------------
  |  |  247|      0|# define ONIG_ENCODING_EUC_JP       (&OnigEncodingEUC_JP)
  ------------------
  |  Branch (4662:6): [True: 0, False: 0]
  ------------------
 4663|      0|		env->enc == ONIG_ENCODING_SJIS) {
  ------------------
  |  |  266|      0|# define ONIG_ENCODING_SJIS         ONIG_ENCODING_SHIFT_JIS
  |  |  ------------------
  |  |  |  |  251|      0|# define ONIG_ENCODING_SHIFT_JIS    (&OnigEncodingShift_JIS)
  |  |  ------------------
  ------------------
  |  Branch (4663:3): [True: 0, False: 0]
  ------------------
 4664|       |	  /* Strict version of enclen does not handle invalid single code
 4665|       |	   * point for SJIS and EUC-JP...*/
 4666|      0|	  len = enclen_approximate(env->enc, buf, buf + i);
  ------------------
  |  |   94|      0|#define enclen_approximate(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN_APPROX(enc,p,e))
  |  |  ------------------
  |  |  |  |  363|      0|#define ONIGENC_MBC_ENC_LEN_APPROX(enc,p,e)   onigenc_mbclen_approximate(p,e,enc)
  |  |  ------------------
  |  |  |  Branch (94:38): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4667|      0|	}
 4668|      0|	else {
 4669|      0|	  len = enclen(env->enc, buf, buf + i);
  ------------------
  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  ------------------
  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  ------------------
  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4670|      0|	}
 4671|      0|	if (i < len) {
  ------------------
  |  Branch (4671:6): [True: 0, False: 0]
  ------------------
 4672|      0|	  r = ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;
  ------------------
  |  |  675|      0|#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING                  -206
  ------------------
 4673|      0|	  goto err;
 4674|      0|	}
 4675|      0|	else if (i > len) { /* fetch back */
  ------------------
  |  Branch (4675:11): [True: 0, False: 0]
  ------------------
 4676|      0|	  p = psave;
 4677|      0|	  for (i = 1; i < len; i++) {
  ------------------
  |  Branch (4677:16): [True: 0, False: 0]
  ------------------
 4678|      0|	    (void)fetch_token_in_cc(tok, &p, end, env);
 4679|       |	    /* no need to check the retun value (already checked above) */
 4680|      0|	  }
 4681|      0|	  fetched = 0;
 4682|      0|	}
 4683|       |
 4684|      0|	if (i == 1) {
  ------------------
  |  Branch (4684:6): [True: 0, False: 0]
  ------------------
 4685|      0|	  v = (OnigCodePoint )buf[0];
 4686|      0|	  goto raw_single;
 4687|      0|	}
 4688|      0|	else {
 4689|      0|	  v = ONIGENC_MBC_TO_CODE(env->enc, buf, bufe);
  ------------------
  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  ------------------
 4690|      0|	  in_type = CCV_CODE_POINT;
 4691|      0|	}
 4692|      0|      }
 4693|      0|      else {
 4694|      0|	v = (OnigCodePoint )tok->u.c;
 4695|      0|      raw_single:
 4696|      0|	in_type = CCV_SB;
 4697|      0|      }
 4698|      0|      in_israw = 1;
 4699|      0|      goto val_entry2;
 4700|      0|      break;
 4701|       |
 4702|  4.93k|    case TK_CODE_POINT:
  ------------------
  |  Branch (4702:5): [True: 4.93k, False: 11.5k]
  ------------------
 4703|  4.93k|      v = tok->u.code;
 4704|  4.93k|      in_israw = 1;
 4705|  4.93k|    val_entry:
 4706|  4.93k|      len = ONIGENC_CODE_TO_MBCLEN(env->enc, v);
  ------------------
  |  |  370|  4.93k|#define ONIGENC_CODE_TO_MBCLEN(enc,code)       (enc)->code_to_mbclen(code,enc)
  ------------------
 4707|  4.93k|      if (len < 0) {
  ------------------
  |  Branch (4707:11): [True: 0, False: 4.93k]
  ------------------
 4708|      0|	r = len;
 4709|      0|	goto err;
 4710|      0|      }
 4711|  4.93k|      in_type = (len == 1 ? CCV_SB : CCV_CODE_POINT);
  ------------------
  |  Branch (4711:18): [True: 4.93k, False: 0]
  ------------------
 4712|  14.7k|    val_entry2:
 4713|  14.7k|      r = next_state_val(cc, asc_cc, &vs, v, &val_israw, in_israw, in_type, &val_type,
 4714|  14.7k|			 &state, env);
 4715|  14.7k|      if (r != 0) goto err;
  ------------------
  |  Branch (4715:11): [True: 0, False: 14.7k]
  ------------------
 4716|  14.7k|      break;
 4717|       |
 4718|  14.7k|    case TK_POSIX_BRACKET_OPEN:
  ------------------
  |  Branch (4718:5): [True: 0, False: 16.4k]
  ------------------
 4719|      0|      r = parse_posix_bracket(cc, asc_cc, &p, end, env);
 4720|      0|      if (r < 0) goto err;
  ------------------
  |  Branch (4720:11): [True: 0, False: 0]
  ------------------
 4721|      0|      if (r == 1) {  /* is not POSIX bracket */
  ------------------
  |  Branch (4721:11): [True: 0, False: 0]
  ------------------
 4722|      0|	CC_ESC_WARN(env, (UChar* )"[");
 4723|      0|	p = tok->backp;
 4724|      0|	v = (OnigCodePoint )tok->u.c;
 4725|      0|	in_israw = 0;
 4726|      0|	goto val_entry;
 4727|      0|      }
 4728|      0|      goto next_class;
 4729|      0|      break;
 4730|       |
 4731|  1.64k|    case TK_CHAR_TYPE:
  ------------------
  |  Branch (4731:5): [True: 1.64k, False: 14.7k]
  ------------------
 4732|  1.64k|      r = add_ctype_to_cc(cc, tok->u.prop.ctype, tok->u.prop.not,
 4733|  1.64k|			  IS_ASCII_RANGE(env->option), env);
  ------------------
  |  |  406|  1.64k|#define IS_ASCII_RANGE(option)    ((option) & ONIG_OPTION_ASCII_RANGE)
  |  |  ------------------
  |  |  |  |  470|  1.64k|#define ONIG_OPTION_ASCII_RANGE          (ONIG_OPTION_NOTEOS << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  468|  1.64k|#define ONIG_OPTION_NOTEOS               (ONIG_OPTION_NOTBOS << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  467|  1.64k|#define ONIG_OPTION_NOTBOS               (ONIG_OPTION_NOTEOL << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|  1.64k|#define ONIG_OPTION_NOTEOL               (ONIG_OPTION_NOTBOL << 1)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  465|  1.64k|#define ONIG_OPTION_NOTBOL               (ONIG_OPTION_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  463|  1.64k|#define ONIG_OPTION_CAPTURE_GROUP        (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  462|  1.64k|#define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  461|  1.64k|#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  460|  1.64k|#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  459|  1.64k|#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  458|  1.64k|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  456|  1.64k|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  455|  1.64k|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  454|  1.64k|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4734|  1.64k|      if (r != 0) return r;
  ------------------
  |  Branch (4734:11): [True: 0, False: 1.64k]
  ------------------
 4735|  1.64k|      if (IS_NOT_NULL(asc_cc)) {
  ------------------
  |  |  312|  1.64k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 1.64k]
  |  |  ------------------
  ------------------
 4736|      0|	if (tok->u.prop.ctype != ONIGENC_CTYPE_WORD)
  ------------------
  |  |  306|      0|#define ONIGENC_CTYPE_WORD     12
  ------------------
  |  Branch (4736:6): [True: 0, False: 0]
  ------------------
 4737|      0|	  r = add_ctype_to_cc(asc_cc, tok->u.prop.ctype, tok->u.prop.not,
 4738|      0|			      IS_ASCII_RANGE(env->option), env);
  ------------------
  |  |  406|      0|#define IS_ASCII_RANGE(option)    ((option) & ONIG_OPTION_ASCII_RANGE)
  |  |  ------------------
  |  |  |  |  470|      0|#define ONIG_OPTION_ASCII_RANGE          (ONIG_OPTION_NOTEOS << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  468|      0|#define ONIG_OPTION_NOTEOS               (ONIG_OPTION_NOTBOS << 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  467|      0|#define ONIG_OPTION_NOTBOS               (ONIG_OPTION_NOTEOL << 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define ONIG_OPTION_NOTEOL               (ONIG_OPTION_NOTBOL << 1)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  465|      0|#define ONIG_OPTION_NOTBOL               (ONIG_OPTION_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  463|      0|#define ONIG_OPTION_CAPTURE_GROUP        (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  462|      0|#define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  461|      0|#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  460|      0|#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  459|      0|#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  458|      0|#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  456|      0|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  455|      0|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  454|      0|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4739|      0|	if (r != 0) return r;
  ------------------
  |  Branch (4739:6): [True: 0, False: 0]
  ------------------
 4740|      0|      }
 4741|       |
 4742|  1.64k|    next_class:
 4743|  1.64k|      r = next_state_class(cc, asc_cc, &vs, &val_type, &state, env);
 4744|  1.64k|      if (r != 0) goto err;
  ------------------
  |  Branch (4744:11): [True: 0, False: 1.64k]
  ------------------
 4745|  1.64k|      break;
 4746|       |
 4747|  1.64k|    case TK_CHAR_PROPERTY:
  ------------------
  |  Branch (4747:5): [True: 0, False: 16.4k]
  ------------------
 4748|      0|      {
 4749|      0|	int ctype;
 4750|       |
 4751|      0|	ctype = fetch_char_property_to_ctype(&p, end, env);
 4752|      0|	if (ctype < 0) return ctype;
  ------------------
  |  Branch (4752:6): [True: 0, False: 0]
  ------------------
 4753|      0|	r = add_ctype_to_cc(cc, ctype, tok->u.prop.not, 0, env);
 4754|      0|	if (r != 0) return r;
  ------------------
  |  Branch (4754:6): [True: 0, False: 0]
  ------------------
 4755|      0|	if (IS_NOT_NULL(asc_cc)) {
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4756|      0|	  if (ctype != ONIGENC_CTYPE_ASCII)
  ------------------
  |  |  308|      0|#define ONIGENC_CTYPE_ASCII    14
  ------------------
  |  Branch (4756:8): [True: 0, False: 0]
  ------------------
 4757|      0|	    r = add_ctype_to_cc(asc_cc, ctype, tok->u.prop.not, 0, env);
 4758|      0|	  if (r != 0) return r;
  ------------------
  |  Branch (4758:8): [True: 0, False: 0]
  ------------------
 4759|      0|	}
 4760|      0|	goto next_class;
 4761|      0|      }
 4762|      0|      break;
 4763|       |
 4764|      0|    case TK_CC_RANGE:
  ------------------
  |  Branch (4764:5): [True: 0, False: 16.4k]
  ------------------
 4765|      0|      if (state == CCS_VALUE) {
  ------------------
  |  Branch (4765:11): [True: 0, False: 0]
  ------------------
 4766|      0|	r = fetch_token_in_cc(tok, &p, end, env);
 4767|      0|	if (r < 0) goto err;
  ------------------
  |  Branch (4767:6): [True: 0, False: 0]
  ------------------
 4768|      0|	fetched = 1;
 4769|      0|	if (r == TK_CC_CLOSE) { /* allow [x-] */
  ------------------
  |  Branch (4769:6): [True: 0, False: 0]
  ------------------
 4770|      0|	range_end_val:
 4771|      0|	  v = (OnigCodePoint )'-';
 4772|      0|	  in_israw = 0;
 4773|      0|	  goto val_entry;
 4774|      0|	}
 4775|      0|	else if (r == TK_CC_AND) {
  ------------------
  |  Branch (4775:11): [True: 0, False: 0]
  ------------------
 4776|      0|	  CC_ESC_WARN(env, (UChar* )"-");
 4777|      0|	  goto range_end_val;
 4778|      0|	}
 4779|       |
 4780|      0|	if (val_type == CCV_CLASS) {
  ------------------
  |  Branch (4780:6): [True: 0, False: 0]
  ------------------
 4781|      0|	  r = ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS;
  ------------------
  |  |  656|      0|#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS      -112
  ------------------
 4782|      0|	  goto err;
 4783|      0|	}
 4784|       |
 4785|      0|	state = CCS_RANGE;
 4786|      0|      }
 4787|      0|      else if (state == CCS_START) {
  ------------------
  |  Branch (4787:16): [True: 0, False: 0]
  ------------------
 4788|       |	/* [-xa] is allowed */
 4789|      0|	v = (OnigCodePoint )tok->u.c;
 4790|      0|	in_israw = 0;
 4791|       |
 4792|      0|	r = fetch_token_in_cc(tok, &p, end, env);
 4793|      0|	if (r < 0) goto err;
  ------------------
  |  Branch (4793:6): [True: 0, False: 0]
  ------------------
 4794|      0|	fetched = 1;
 4795|       |	/* [--x] or [a&&-x] is warned. */
 4796|      0|	if (r == TK_CC_RANGE || and_start != 0)
  ------------------
  |  Branch (4796:6): [True: 0, False: 0]
  |  Branch (4796:26): [True: 0, False: 0]
  ------------------
 4797|      0|	  CC_ESC_WARN(env, (UChar* )"-");
 4798|       |
 4799|      0|	goto val_entry;
 4800|      0|      }
 4801|      0|      else if (state == CCS_RANGE) {
  ------------------
  |  Branch (4801:16): [True: 0, False: 0]
  ------------------
 4802|      0|	CC_ESC_WARN(env, (UChar* )"-");
 4803|      0|	goto sb_char;  /* [!--x] is allowed */
 4804|      0|      }
 4805|      0|      else { /* CCS_COMPLETE */
 4806|      0|	r = fetch_token_in_cc(tok, &p, end, env);
 4807|      0|	if (r < 0) goto err;
  ------------------
  |  Branch (4807:6): [True: 0, False: 0]
  ------------------
 4808|      0|	fetched = 1;
 4809|      0|	if (r == TK_CC_CLOSE) goto range_end_val; /* allow [a-b-] */
  ------------------
  |  Branch (4809:6): [True: 0, False: 0]
  ------------------
 4810|      0|	else if (r == TK_CC_AND) {
  ------------------
  |  Branch (4810:11): [True: 0, False: 0]
  ------------------
 4811|      0|	  CC_ESC_WARN(env, (UChar* )"-");
 4812|      0|	  goto range_end_val;
 4813|      0|	}
 4814|       |
 4815|      0|	if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC)) {
  ------------------
  |  |  332|      0|#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
  |  |  ------------------
  |  |  |  Branch (332:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4816|      0|	  CC_ESC_WARN(env, (UChar* )"-");
 4817|      0|	  goto range_end_val;   /* [0-9-a] is allowed as [0-9\-a] */
 4818|      0|	}
 4819|      0|	r = ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS;
  ------------------
  |  |  656|      0|#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS      -112
  ------------------
 4820|      0|	goto err;
 4821|      0|      }
 4822|      0|      break;
 4823|       |
 4824|      0|    case TK_CC_CC_OPEN: /* [ */
  ------------------
  |  Branch (4824:5): [True: 0, False: 16.4k]
  ------------------
 4825|      0|      {
 4826|      0|	Node *anode, *aasc_node;
 4827|      0|	CClassNode* acc;
 4828|       |
 4829|      0|	r = parse_char_class(&anode, &aasc_node, tok, &p, end, env);
 4830|      0|	if (r == 0) {
  ------------------
  |  Branch (4830:6): [True: 0, False: 0]
  ------------------
 4831|      0|	  acc = NCCLASS(anode);
  ------------------
  |  |   77|      0|#define NCCLASS(node)      (&((node)->u.cclass))
  ------------------
 4832|      0|	  r = or_cclass(cc, acc, env);
 4833|      0|	}
 4834|      0|	if (r == 0 && IS_NOT_NULL(aasc_node)) {
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (4834:6): [True: 0, False: 0]
  ------------------
 4835|      0|	  acc = NCCLASS(aasc_node);
  ------------------
  |  |   77|      0|#define NCCLASS(node)      (&((node)->u.cclass))
  ------------------
 4836|      0|	  r = or_cclass(asc_cc, acc, env);
 4837|      0|	}
 4838|      0|	onig_node_free(anode);
 4839|      0|	onig_node_free(aasc_node);
 4840|      0|	if (r != 0) goto err;
  ------------------
  |  Branch (4840:6): [True: 0, False: 0]
  ------------------
 4841|      0|      }
 4842|      0|      break;
 4843|       |
 4844|      0|    case TK_CC_AND: /* && */
  ------------------
  |  Branch (4844:5): [True: 0, False: 16.4k]
  ------------------
 4845|      0|      {
 4846|      0|	if (state == CCS_VALUE) {
  ------------------
  |  Branch (4846:6): [True: 0, False: 0]
  ------------------
 4847|      0|	  r = next_state_val(cc, asc_cc, &vs, 0, &val_israw, 0, val_type,
 4848|      0|			     &val_type, &state, env);
 4849|      0|	  if (r != 0) goto err;
  ------------------
  |  Branch (4849:8): [True: 0, False: 0]
  ------------------
 4850|      0|	}
 4851|       |	/* initialize local variables */
 4852|      0|	and_start = 1;
 4853|      0|	state = CCS_START;
 4854|       |
 4855|      0|	if (IS_NOT_NULL(prev_cc)) {
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4856|      0|	  r = and_cclass(prev_cc, cc, env);
 4857|      0|	  if (r != 0) goto err;
  ------------------
  |  Branch (4857:8): [True: 0, False: 0]
  ------------------
 4858|      0|	  bbuf_free(cc->mbuf);
 4859|      0|	  if (IS_NOT_NULL(asc_cc)) {
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4860|      0|	    r = and_cclass(asc_prev_cc, asc_cc, env);
 4861|      0|	    if (r != 0) goto err;
  ------------------
  |  Branch (4861:10): [True: 0, False: 0]
  ------------------
 4862|      0|	    bbuf_free(asc_cc->mbuf);
 4863|      0|	  }
 4864|      0|	}
 4865|      0|	else {
 4866|      0|	  prev_cc = cc;
 4867|      0|	  cc = &work_cc;
 4868|      0|	  if (IS_NOT_NULL(asc_cc)) {
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4869|      0|	    asc_prev_cc = asc_cc;
 4870|      0|	    asc_cc = &asc_work_cc;
 4871|      0|	  }
 4872|      0|	}
 4873|      0|	initialize_cclass(cc);
 4874|      0|	if (IS_NOT_NULL(asc_cc))
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4875|      0|	  initialize_cclass(asc_cc);
 4876|      0|      }
 4877|      0|      break;
 4878|       |
 4879|      0|    case TK_EOT:
  ------------------
  |  Branch (4879:5): [True: 0, False: 16.4k]
  ------------------
 4880|      0|      r = ONIGERR_PREMATURE_END_OF_CHAR_CLASS;
  ------------------
  |  |  648|      0|#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS                  -103
  ------------------
 4881|      0|      goto err;
 4882|      0|      break;
 4883|      0|    default:
  ------------------
  |  Branch (4883:5): [True: 0, False: 16.4k]
  ------------------
 4884|      0|      r = ONIGERR_PARSER_BUG;
  ------------------
  |  |  634|      0|#define ONIGERR_PARSER_BUG                                    -11
  ------------------
 4885|      0|      goto err;
 4886|      0|      break;
 4887|  16.4k|    }
 4888|       |
 4889|  16.4k|    if (fetched)
  ------------------
  |  Branch (4889:9): [True: 0, False: 16.4k]
  ------------------
 4890|      0|      r = tok->type;
 4891|  16.4k|    else {
 4892|  16.4k|      r = fetch_token_in_cc(tok, &p, end, env);
 4893|  16.4k|      if (r < 0) goto err;
  ------------------
  |  Branch (4893:11): [True: 0, False: 16.4k]
  ------------------
 4894|  16.4k|    }
 4895|  16.4k|  }
 4896|       |
 4897|  6.16k|  if (state == CCS_VALUE) {
  ------------------
  |  Branch (4897:7): [True: 6.16k, False: 0]
  ------------------
 4898|  6.16k|    r = next_state_val(cc, asc_cc, &vs, 0, &val_israw, 0, val_type,
 4899|  6.16k|		       &val_type, &state, env);
 4900|  6.16k|    if (r != 0) goto err;
  ------------------
  |  Branch (4900:9): [True: 0, False: 6.16k]
  ------------------
 4901|  6.16k|  }
 4902|       |
 4903|  6.16k|  if (IS_NOT_NULL(prev_cc)) {
  ------------------
  |  |  312|  6.16k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 6.16k]
  |  |  ------------------
  ------------------
 4904|      0|    r = and_cclass(prev_cc, cc, env);
 4905|      0|    if (r != 0) goto err;
  ------------------
  |  Branch (4905:9): [True: 0, False: 0]
  ------------------
 4906|      0|    bbuf_free(cc->mbuf);
 4907|      0|    cc = prev_cc;
 4908|      0|    if (IS_NOT_NULL(asc_cc)) {
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4909|      0|      r = and_cclass(asc_prev_cc, asc_cc, env);
 4910|      0|      if (r != 0) goto err;
  ------------------
  |  Branch (4910:11): [True: 0, False: 0]
  ------------------
 4911|      0|      bbuf_free(asc_cc->mbuf);
 4912|      0|      asc_cc = asc_prev_cc;
 4913|      0|    }
 4914|      0|  }
 4915|       |
 4916|  6.16k|  if (neg != 0) {
  ------------------
  |  Branch (4916:7): [True: 2.46k, False: 3.69k]
  ------------------
 4917|  2.46k|    NCCLASS_SET_NOT(cc);
  ------------------
  |  |  807|  2.46k|#define NCCLASS_SET_NOT(nd)     NCCLASS_FLAG_SET(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  800|  2.46k|#define NCCLASS_FLAG_SET(cc,flag)    (NCCLASS_FLAGS(cc) |= (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|  2.46k|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4918|  2.46k|    if (IS_NOT_NULL(asc_cc))
  ------------------
  |  |  312|  2.46k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 2.46k]
  |  |  ------------------
  ------------------
 4919|  2.46k|      NCCLASS_SET_NOT(asc_cc);
  ------------------
  |  |  807|      0|#define NCCLASS_SET_NOT(nd)     NCCLASS_FLAG_SET(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  800|      0|#define NCCLASS_FLAG_SET(cc,flag)    (NCCLASS_FLAGS(cc) |= (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|      0|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4920|  2.46k|  }
 4921|  3.69k|  else {
 4922|  3.69k|    NCCLASS_CLEAR_NOT(cc);
  ------------------
  |  |  808|  3.69k|#define NCCLASS_CLEAR_NOT(nd)   NCCLASS_FLAG_CLEAR(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  801|  3.69k|#define NCCLASS_FLAG_CLEAR(cc,flag)  (NCCLASS_FLAGS(cc) &= ~(flag))
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|  3.69k|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4923|  3.69k|    if (IS_NOT_NULL(asc_cc))
  ------------------
  |  |  312|  3.69k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 3.69k]
  |  |  ------------------
  ------------------
 4924|  3.69k|      NCCLASS_CLEAR_NOT(asc_cc);
  ------------------
  |  |  808|      0|#define NCCLASS_CLEAR_NOT(nd)   NCCLASS_FLAG_CLEAR(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  801|      0|#define NCCLASS_FLAG_CLEAR(cc,flag)  (NCCLASS_FLAGS(cc) &= ~(flag))
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|      0|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4925|  3.69k|  }
 4926|  6.16k|  if (IS_NCCLASS_NOT(cc) &&
  ------------------
  |  |  809|  6.16k|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|  12.3k|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|  6.16k|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (802:37): [True: 2.46k, False: 3.69k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4927|  6.16k|      IS_SYNTAX_BV(env->syntax, ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC)) {
  ------------------
  |  |  332|  2.46k|#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
  |  |  ------------------
  |  |  |  Branch (332:35): [True: 0, False: 2.46k]
  |  |  ------------------
  ------------------
 4928|      0|    int is_empty;
 4929|       |
 4930|      0|    is_empty = (IS_NULL(cc->mbuf) ? 1 : 0);
  ------------------
  |  |  311|      0|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  ------------------
  |  |  |  Branch (311:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4931|      0|    if (is_empty != 0)
  ------------------
  |  Branch (4931:9): [True: 0, False: 0]
  ------------------
 4932|      0|      BITSET_IS_EMPTY(cc->bs, is_empty);
  ------------------
  |  |  181|      0|#define BITSET_IS_EMPTY(bs,empty) do {\
  |  |  182|      0|  int i;\
  |  |  183|      0|  empty = 1;\
  |  |  184|      0|  for (i = 0; i < BITSET_SIZE; i++) {\
  |  |  ------------------
  |  |  |  |  428|      0|#define BITSET_SIZE        (SINGLE_BYTE_SIZE / BITS_IN_ROOM)
  |  |  |  |  ------------------
  |  |  |  |  |  |  426|      0|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define BITSET_SIZE        (SINGLE_BYTE_SIZE / BITS_IN_ROOM)
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (184:15): [True: 0, False: 0]
  |  |  ------------------
  |  |  185|      0|    if ((bs)[i] != 0) {\
  |  |  ------------------
  |  |  |  Branch (185:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  186|      0|      empty = 0; break;\
  |  |  187|      0|    }\
  |  |  188|      0|  }\
  |  |  189|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (189:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4933|       |
 4934|      0|    if (is_empty == 0) {
  ------------------
  |  Branch (4934:9): [True: 0, False: 0]
  ------------------
 4935|      0|#define NEWLINE_CODE    0x0a
 4936|       |
 4937|      0|      if (ONIGENC_IS_CODE_NEWLINE(env->enc, NEWLINE_CODE)) {
  ------------------
  |  |  378|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE)
  |  |  ------------------
  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (375:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4938|      0|	if (ONIGENC_CODE_TO_MBCLEN(env->enc, NEWLINE_CODE) == 1)
  ------------------
  |  |  370|      0|#define ONIGENC_CODE_TO_MBCLEN(enc,code)       (enc)->code_to_mbclen(code,enc)
  ------------------
  |  Branch (4938:6): [True: 0, False: 0]
  ------------------
 4939|      0|	  BITSET_SET_BIT_CHKDUP(cc->bs, NEWLINE_CODE);
  ------------------
  |  |  176|      0|#define BITSET_SET_BIT_CHKDUP(bs, pos) do { \
  |  |  177|      0|  if (BITSET_AT(bs, pos)) CC_DUP_WARN(env, pos, pos); \
  |  |  ------------------
  |  |  |  |  448|      0|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (448:36): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|      0|  BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (179:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4940|      0|	else {
 4941|      0|	  r = add_code_range(&(cc->mbuf), env, NEWLINE_CODE, NEWLINE_CODE);
  ------------------
  |  | 4935|      0|#define NEWLINE_CODE    0x0a
  ------------------
              	  r = add_code_range(&(cc->mbuf), env, NEWLINE_CODE, NEWLINE_CODE);
  ------------------
  |  | 4935|      0|#define NEWLINE_CODE    0x0a
  ------------------
 4942|      0|	  if (r < 0) goto err;
  ------------------
  |  Branch (4942:8): [True: 0, False: 0]
  ------------------
 4943|      0|	}
 4944|      0|      }
 4945|      0|    }
 4946|      0|  }
 4947|  6.16k|  *src = p;
 4948|  6.16k|  env->parse_depth--;
 4949|  6.16k|  return 0;
 4950|       |
 4951|      0| err:
 4952|      0|  if (cc != NCCLASS(*np))
  ------------------
  |  |   77|      0|#define NCCLASS(node)      (&((node)->u.cclass))
  ------------------
  |  Branch (4952:7): [True: 0, False: 0]
  ------------------
 4953|      0|    bbuf_free(cc->mbuf);
 4954|      0|  if (IS_NOT_NULL(asc_cc) && (asc_cc != NCCLASS(*asc_np)))
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                if (IS_NOT_NULL(asc_cc) && (asc_cc != NCCLASS(*asc_np)))
  ------------------
  |  |   77|      0|#define NCCLASS(node)      (&((node)->u.cclass))
  ------------------
  |  Branch (4954:30): [True: 0, False: 0]
  ------------------
 4955|      0|    bbuf_free(asc_cc->mbuf);
 4956|      0|  return r;
 4957|  6.16k|}
regparse.c:fetch_token_in_cc:
 2980|  25.0k|{
 2981|  25.0k|  int num;
 2982|  25.0k|  OnigCodePoint c, c2;
 2983|  25.0k|  const OnigSyntaxType* syn = env->syntax;
 2984|  25.0k|  OnigEncoding enc = env->enc;
 2985|  25.0k|  UChar* prev;
  ------------------
  |  |   76|  25.0k|# define UChar OnigUChar
  ------------------
 2986|  25.0k|  UChar* p = *src;
  ------------------
  |  |   76|  25.0k|# define UChar OnigUChar
  ------------------
 2987|  25.0k|  PFETCH_READY;
  ------------------
  |  |  295|  25.0k|# define PFETCH_READY  UChar* pfetch_prev = NULL; (void)pfetch_prev
  |  |  ------------------
  |  |  |  |   76|  25.0k|# define UChar OnigUChar
  |  |  ------------------
  ------------------
 2988|       |
 2989|  25.0k|  if (PEND) {
  ------------------
  |  |  299|  25.0k|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 25.0k]
  |  |  |  Branch (299:23): [True: 25.0k, False: 0]
  |  |  ------------------
  ------------------
 2990|      0|    tok->type = TK_EOT;
 2991|      0|    return tok->type;
 2992|      0|  }
 2993|       |
 2994|  25.0k|  PFETCH(c);
  ------------------
  |  |  305|  25.0k|#define PFETCH(c)  do { \
  |  |  306|  25.0k|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|  25.0k|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 25.0k]
  |  |  ------------------
  |  |  307|  25.0k|  pfetch_prev = p; \
  |  |  308|  25.0k|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|  25.0k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|  25.0k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 25.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|  25.0k|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2995|  25.0k|  tok->type = TK_CHAR;
 2996|  25.0k|  tok->base = 0;
 2997|  25.0k|  tok->u.c  = c;
 2998|  25.0k|  tok->escaped = 0;
 2999|       |
 3000|  25.0k|  if (c == ']') {
  ------------------
  |  Branch (3000:7): [True: 6.16k, False: 18.9k]
  ------------------
 3001|  6.16k|    tok->type = TK_CC_CLOSE;
 3002|  6.16k|  }
 3003|  18.9k|  else if (c == '-') {
  ------------------
  |  Branch (3003:12): [True: 0, False: 18.9k]
  ------------------
 3004|      0|    tok->type = TK_CC_RANGE;
 3005|      0|  }
 3006|  18.9k|  else if (c == MC_ESC(syn)) {
  ------------------
  |  |  761|  18.9k|#define MC_ESC(syn)               (syn)->meta_char_table.esc
  ------------------
  |  Branch (3006:12): [True: 6.98k, False: 11.9k]
  ------------------
 3007|  6.98k|    if (! IS_SYNTAX_BV(syn, ONIG_SYN_BACKSLASH_ESCAPE_IN_CC))
  ------------------
  |  |  332|  6.98k|#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
  ------------------
  |  Branch (3007:9): [True: 0, False: 6.98k]
  ------------------
 3008|      0|      goto end;
 3009|       |
 3010|  6.98k|    if (PEND) return ONIGERR_END_PATTERN_AT_ESCAPE;
  ------------------
  |  |  299|  6.98k|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 6.98k]
  |  |  |  Branch (299:23): [True: 6.98k, False: 0]
  |  |  ------------------
  ------------------
                  if (PEND) return ONIGERR_END_PATTERN_AT_ESCAPE;
  ------------------
  |  |  649|      0|#define ONIGERR_END_PATTERN_AT_ESCAPE                        -104
  ------------------
 3011|       |
 3012|  6.98k|    PFETCH(c);
  ------------------
  |  |  305|  6.98k|#define PFETCH(c)  do { \
  |  |  306|  6.98k|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|  6.98k|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 6.98k]
  |  |  ------------------
  |  |  307|  6.98k|  pfetch_prev = p; \
  |  |  308|  6.98k|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|  6.98k|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|  6.98k|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 6.98k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|  6.98k|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3013|  6.98k|    tok->escaped = 1;
 3014|  6.98k|    tok->u.c = c;
 3015|  6.98k|    switch (c) {
 3016|      0|    case 'w':
  ------------------
  |  Branch (3016:5): [True: 0, False: 6.98k]
  ------------------
 3017|      0|      tok->type = TK_CHAR_TYPE;
 3018|      0|      tok->u.prop.ctype = ONIGENC_CTYPE_WORD;
  ------------------
  |  |  306|      0|#define ONIGENC_CTYPE_WORD     12
  ------------------
 3019|      0|      tok->u.prop.not   = 0;
 3020|      0|      break;
 3021|      0|    case 'W':
  ------------------
  |  Branch (3021:5): [True: 0, False: 6.98k]
  ------------------
 3022|      0|      tok->type = TK_CHAR_TYPE;
 3023|      0|      tok->u.prop.ctype = ONIGENC_CTYPE_WORD;
  ------------------
  |  |  306|      0|#define ONIGENC_CTYPE_WORD     12
  ------------------
 3024|      0|      tok->u.prop.not   = 1;
 3025|      0|      break;
 3026|      0|    case 'd':
  ------------------
  |  Branch (3026:5): [True: 0, False: 6.98k]
  ------------------
 3027|      0|      tok->type = TK_CHAR_TYPE;
 3028|      0|      tok->u.prop.ctype = ONIGENC_CTYPE_DIGIT;
  ------------------
  |  |  298|      0|#define ONIGENC_CTYPE_DIGIT     4
  ------------------
 3029|      0|      tok->u.prop.not   = 0;
 3030|      0|      break;
 3031|      0|    case 'D':
  ------------------
  |  Branch (3031:5): [True: 0, False: 6.98k]
  ------------------
 3032|      0|      tok->type = TK_CHAR_TYPE;
 3033|      0|      tok->u.prop.ctype = ONIGENC_CTYPE_DIGIT;
  ------------------
  |  |  298|      0|#define ONIGENC_CTYPE_DIGIT     4
  ------------------
 3034|      0|      tok->u.prop.not   = 1;
 3035|      0|      break;
 3036|  1.64k|    case 's':
  ------------------
  |  Branch (3036:5): [True: 1.64k, False: 5.34k]
  ------------------
 3037|  1.64k|      tok->type = TK_CHAR_TYPE;
 3038|  1.64k|      tok->u.prop.ctype = ONIGENC_CTYPE_SPACE;
  ------------------
  |  |  303|  1.64k|#define ONIGENC_CTYPE_SPACE     9
  ------------------
 3039|  1.64k|      tok->u.prop.not   = 0;
 3040|  1.64k|      break;
 3041|      0|    case 'S':
  ------------------
  |  Branch (3041:5): [True: 0, False: 6.98k]
  ------------------
 3042|      0|      tok->type = TK_CHAR_TYPE;
 3043|      0|      tok->u.prop.ctype = ONIGENC_CTYPE_SPACE;
  ------------------
  |  |  303|      0|#define ONIGENC_CTYPE_SPACE     9
  ------------------
 3044|      0|      tok->u.prop.not   = 1;
 3045|      0|      break;
 3046|      0|    case 'h':
  ------------------
  |  Branch (3046:5): [True: 0, False: 6.98k]
  ------------------
 3047|      0|      if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_H_XDIGIT)) break;
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  ------------------
  |  Branch (3047:11): [True: 0, False: 0]
  ------------------
 3048|      0|      tok->type = TK_CHAR_TYPE;
 3049|      0|      tok->u.prop.ctype = ONIGENC_CTYPE_XDIGIT;
  ------------------
  |  |  305|      0|#define ONIGENC_CTYPE_XDIGIT   11
  ------------------
 3050|      0|      tok->u.prop.not   = 0;
 3051|      0|      break;
 3052|      0|    case 'H':
  ------------------
  |  Branch (3052:5): [True: 0, False: 6.98k]
  ------------------
 3053|      0|      if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_H_XDIGIT)) break;
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  ------------------
  |  Branch (3053:11): [True: 0, False: 0]
  ------------------
 3054|      0|      tok->type = TK_CHAR_TYPE;
 3055|      0|      tok->u.prop.ctype = ONIGENC_CTYPE_XDIGIT;
  ------------------
  |  |  305|      0|#define ONIGENC_CTYPE_XDIGIT   11
  ------------------
 3056|      0|      tok->u.prop.not   = 1;
 3057|      0|      break;
 3058|       |
 3059|      0|    case 'p':
  ------------------
  |  Branch (3059:5): [True: 0, False: 6.98k]
  ------------------
 3060|      0|    case 'P':
  ------------------
  |  Branch (3060:5): [True: 0, False: 6.98k]
  ------------------
 3061|      0|      if (PEND) break;
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 0]
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3062|       |
 3063|      0|      c2 = PPEEK;
  ------------------
  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  ------------------
  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  ------------------
  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3064|      0|      if (c2 == '{' &&
  ------------------
  |  Branch (3064:11): [True: 0, False: 0]
  ------------------
 3065|      0|	  IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3066|      0|	PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3067|      0|	tok->type = TK_CHAR_PROPERTY;
 3068|      0|	tok->u.prop.not = (c == 'P' ? 1 : 0);
  ------------------
  |  Branch (3068:21): [True: 0, False: 0]
  ------------------
 3069|       |
 3070|      0|	if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) {
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (3070:6): [True: 0, False: 0]
  ------------------
 3071|      0|	  PFETCH(c2);
  ------------------
  |  |  305|      0|#define PFETCH(c)  do { \
  |  |  306|      0|  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |  |  Branch (306:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  307|      0|  pfetch_prev = p; \
  |  |  308|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  309|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (309:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3072|      0|	  if (c2 == '^') {
  ------------------
  |  Branch (3072:8): [True: 0, False: 0]
  ------------------
 3073|      0|	    tok->u.prop.not = (tok->u.prop.not == 0 ? 1 : 0);
  ------------------
  |  Branch (3073:25): [True: 0, False: 0]
  ------------------
 3074|      0|	  }
 3075|      0|	  else
 3076|      0|	    PUNFETCH;
  ------------------
  |  |  300|      0|#define PUNFETCH     p = pfetch_prev
  ------------------
 3077|      0|	}
 3078|      0|      }
 3079|      0|      else {
 3080|      0|	onig_syntax_warn(env, "invalid Unicode Property \\%c", c);
 3081|      0|      }
 3082|      0|      break;
 3083|       |
 3084|      0|    case 'x':
  ------------------
  |  Branch (3084:5): [True: 0, False: 6.98k]
  ------------------
 3085|      0|      if (PEND) break;
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 0]
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3086|       |
 3087|      0|      prev = p;
 3088|      0|      if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_BRACE_HEX8)) {
  ------------------
  |  |  320|      0|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                    if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_BRACE_HEX8)) {
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (330:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3089|      0|	PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3090|      0|	num = scan_unsigned_hexadecimal_number(&p, end, 0, 8, enc);
 3091|      0|	if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
  ------------------
  |  |  694|      0|#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE                      -401
  ------------------
  |  Branch (3091:6): [True: 0, False: 0]
  ------------------
 3092|      0|	if (!PEND) {
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (3092:6): [True: 0, False: 0]
  ------------------
 3093|      0|	  c2 = PPEEK;
  ------------------
  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  ------------------
  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  ------------------
  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3094|      0|	  if (ONIGENC_IS_CODE_XDIGIT(enc, c2))
  ------------------
  |  |  402|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT)
  |  |  ------------------
  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (375:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3095|      0|	    return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
  ------------------
  |  |  681|      0|#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE                     -212
  ------------------
 3096|      0|	}
 3097|       |
 3098|      0|	if (p > prev + enclen(enc, prev, end) && !PEND && (PPEEK_IS('}'))) {
  ------------------
  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  ------------------
  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  ------------------
  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	if (p > prev + enclen(enc, prev, end) && !PEND && (PPEEK_IS('}'))) {
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	if (p > prev + enclen(enc, prev, end) && !PEND && (PPEEK_IS('}'))) {
  ------------------
  |  |  320|      0|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3098:6): [True: 0, False: 0]
  |  Branch (3098:43): [True: 0, False: 0]
  |  Branch (3098:52): [True: 0, False: 0]
  ------------------
 3099|      0|	  PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3100|      0|	  tok->type   = TK_CODE_POINT;
 3101|      0|	  tok->base   = 16;
 3102|      0|	  tok->u.code = (OnigCodePoint )num;
 3103|      0|	}
 3104|      0|	else {
 3105|       |	  /* can't read nothing or invalid format */
 3106|      0|	  p = prev;
 3107|      0|	}
 3108|      0|      }
 3109|      0|      else if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_HEX2)) {
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (330:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3110|      0|	num = scan_unsigned_hexadecimal_number(&p, end, 0, 2, enc);
 3111|      0|	if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
  ------------------
  |  |  669|      0|#define ONIGERR_TOO_BIG_NUMBER                               -200
  ------------------
  |  Branch (3111:6): [True: 0, False: 0]
  ------------------
 3112|      0|	if (p == prev) {  /* can't read nothing. */
  ------------------
  |  Branch (3112:6): [True: 0, False: 0]
  ------------------
 3113|      0|	  num = 0; /* but, it's not error */
 3114|      0|	}
 3115|      0|	tok->type = TK_RAW_BYTE;
 3116|      0|	tok->base = 16;
 3117|      0|	tok->u.c  = num;
 3118|      0|      }
 3119|      0|      break;
 3120|       |
 3121|      0|    case 'u':
  ------------------
  |  Branch (3121:5): [True: 0, False: 6.98k]
  ------------------
 3122|      0|      if (PEND) break;
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 0]
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3123|       |
 3124|      0|      prev = p;
 3125|      0|      if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_U_HEX4)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3126|      0|	num = scan_unsigned_hexadecimal_number(&p, end, 4, 4, enc);
 3127|      0|	if (num < -1) return ONIGERR_TOO_SHORT_DIGITS;
  ------------------
  |  |  680|      0|#define ONIGERR_TOO_SHORT_DIGITS                             -211
  ------------------
  |  Branch (3127:6): [True: 0, False: 0]
  ------------------
 3128|      0|	else if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
  ------------------
  |  |  669|      0|#define ONIGERR_TOO_BIG_NUMBER                               -200
  ------------------
  |  Branch (3128:11): [True: 0, False: 0]
  ------------------
 3129|      0|	if (p == prev) {  /* can't read nothing. */
  ------------------
  |  Branch (3129:6): [True: 0, False: 0]
  ------------------
 3130|      0|	  num = 0; /* but, it's not error */
 3131|      0|	}
 3132|      0|	tok->type   = TK_CODE_POINT;
 3133|      0|	tok->base   = 16;
 3134|      0|	tok->u.code = (OnigCodePoint )num;
 3135|      0|      }
 3136|      0|      break;
 3137|       |
 3138|      0|    case 'o':
  ------------------
  |  Branch (3138:5): [True: 0, False: 6.98k]
  ------------------
 3139|      0|      if (PEND) break;
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:22): [True: 0, False: 0]
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3140|       |
 3141|      0|      prev = p;
 3142|      0|      if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_O_BRACE_OCTAL)) {
  ------------------
  |  |  320|      0|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                    if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_O_BRACE_OCTAL)) {
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (330:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3143|      0|	PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3144|      0|	num = scan_unsigned_octal_number(&p, end, 11, enc);
 3145|      0|	if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
  ------------------
  |  |  694|      0|#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE                      -401
  ------------------
  |  Branch (3145:6): [True: 0, False: 0]
  ------------------
 3146|      0|	if (!PEND) {
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (3146:6): [True: 0, False: 0]
  ------------------
 3147|      0|	  c2 = PPEEK;
  ------------------
  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  ------------------
  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  ------------------
  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  ------------------
  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  ------------------
  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3148|      0|	  if (ONIGENC_IS_CODE_DIGIT(enc, c2) && c2 < '8')
  ------------------
  |  |  400|      0|        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)
  |  |  ------------------
  |  |  |  |  375|      0|#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (375:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3148:42): [True: 0, False: 0]
  ------------------
 3149|      0|	    return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
  ------------------
  |  |  681|      0|#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE                     -212
  ------------------
 3150|      0|	}
 3151|       |
 3152|      0|	if (p > prev + enclen(enc, prev, end) && !PEND && (PPEEK_IS('}'))) {
  ------------------
  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  ------------------
  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  ------------------
  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	if (p > prev + enclen(enc, prev, end) && !PEND && (PPEEK_IS('}'))) {
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	if (p > prev + enclen(enc, prev, end) && !PEND && (PPEEK_IS('}'))) {
  ------------------
  |  |  320|      0|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3152:6): [True: 0, False: 0]
  |  Branch (3152:43): [True: 0, False: 0]
  |  Branch (3152:52): [True: 0, False: 0]
  ------------------
 3153|      0|	  PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3154|      0|	  tok->type   = TK_CODE_POINT;
 3155|      0|	  tok->base   = 8;
 3156|      0|	  tok->u.code = (OnigCodePoint )num;
 3157|      0|	}
 3158|      0|	else {
 3159|       |	  /* can't read nothing or invalid format */
 3160|      0|	  p = prev;
 3161|      0|	}
 3162|      0|      }
 3163|      0|      break;
 3164|       |
 3165|      0|    case '0':
  ------------------
  |  Branch (3165:5): [True: 0, False: 6.98k]
  ------------------
 3166|      0|    case '1': case '2': case '3': case '4': case '5': case '6': case '7':
  ------------------
  |  Branch (3166:5): [True: 0, False: 6.98k]
  |  Branch (3166:15): [True: 0, False: 6.98k]
  |  Branch (3166:25): [True: 0, False: 6.98k]
  |  Branch (3166:35): [True: 0, False: 6.98k]
  |  Branch (3166:45): [True: 0, False: 6.98k]
  |  Branch (3166:55): [True: 0, False: 6.98k]
  |  Branch (3166:65): [True: 0, False: 6.98k]
  ------------------
 3167|      0|      if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_OCTAL3)) {
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (330:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3168|      0|	PUNFETCH;
  ------------------
  |  |  300|      0|#define PUNFETCH     p = pfetch_prev
  ------------------
 3169|      0|	prev = p;
 3170|      0|	num = scan_unsigned_octal_number(&p, end, 3, enc);
 3171|      0|	if (num < 0 || 0xff < num) return ONIGERR_TOO_BIG_NUMBER;
  ------------------
  |  |  669|      0|#define ONIGERR_TOO_BIG_NUMBER                               -200
  ------------------
  |  Branch (3171:6): [True: 0, False: 0]
  |  Branch (3171:17): [True: 0, False: 0]
  ------------------
 3172|      0|	if (p == prev) {  /* can't read nothing. */
  ------------------
  |  Branch (3172:6): [True: 0, False: 0]
  ------------------
 3173|      0|	  num = 0; /* but, it's not error */
 3174|      0|	}
 3175|      0|	tok->type = TK_RAW_BYTE;
 3176|      0|	tok->base = 8;
 3177|      0|	tok->u.c  = num;
 3178|      0|      }
 3179|      0|      break;
 3180|       |
 3181|  5.34k|    default:
  ------------------
  |  Branch (3181:5): [True: 5.34k, False: 1.64k]
  ------------------
 3182|  5.34k|      PUNFETCH;
  ------------------
  |  |  300|  5.34k|#define PUNFETCH     p = pfetch_prev
  ------------------
 3183|  5.34k|      num = fetch_escaped_value(&p, end, env, &c2);
 3184|  5.34k|      if (num < 0) return num;
  ------------------
  |  Branch (3184:11): [True: 0, False: 5.34k]
  ------------------
 3185|  5.34k|      if ((OnigCodePoint )tok->u.c != c2) {
  ------------------
  |  Branch (3185:11): [True: 4.93k, False: 411]
  ------------------
 3186|  4.93k|	tok->u.code = (OnigCodePoint )c2;
 3187|  4.93k|	tok->type   = TK_CODE_POINT;
 3188|  4.93k|      }
 3189|  5.34k|      break;
 3190|  6.98k|    }
 3191|  6.98k|  }
 3192|  11.9k|  else if (c == '[') {
  ------------------
  |  Branch (3192:12): [True: 0, False: 11.9k]
  ------------------
 3193|      0|    if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_POSIX_BRACKET) && (PPEEK_IS(':'))) {
  ------------------
  |  |  330|      0|#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (330:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                  if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_POSIX_BRACKET) && (PPEEK_IS(':'))) {
  ------------------
  |  |  320|      0|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3193:57): [True: 0, False: 0]
  ------------------
 3194|      0|      OnigCodePoint send[] = { (OnigCodePoint )':', (OnigCodePoint )']' };
 3195|      0|      tok->backp = p; /* point at '[' is read */
 3196|      0|      PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3197|      0|      if (str_exist_check_with_esc(send, 2, p, end,
  ------------------
  |  Branch (3197:11): [True: 0, False: 0]
  ------------------
 3198|      0|                                   (OnigCodePoint )']', enc, syn)) {
 3199|      0|	tok->type = TK_POSIX_BRACKET_OPEN;
 3200|      0|      }
 3201|      0|      else {
 3202|      0|	PUNFETCH;
  ------------------
  |  |  300|      0|#define PUNFETCH     p = pfetch_prev
  ------------------
 3203|      0|	goto cc_in_cc;
 3204|      0|      }
 3205|      0|    }
 3206|      0|    else {
 3207|      0|    cc_in_cc:
 3208|      0|      if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_CCLASS_SET_OP)) {
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3209|      0|	tok->type = TK_CC_CC_OPEN;
 3210|      0|      }
 3211|      0|      else {
 3212|      0|	CC_ESC_WARN(env, (UChar* )"[");
 3213|      0|      }
 3214|      0|    }
 3215|      0|  }
 3216|  11.9k|  else if (c == '&') {
  ------------------
  |  Branch (3216:12): [True: 0, False: 11.9k]
  ------------------
 3217|      0|    if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_CCLASS_SET_OP) &&
  ------------------
  |  |  331|      0|#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
  |  |  ------------------
  |  |  |  Branch (331:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3218|      0|	!PEND && (PPEEK_IS('&'))) {
  ------------------
  |  |  299|      0|#define PEND         (p < end ?  0 : 1)
  |  |  ------------------
  |  |  |  Branch (299:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
              	!PEND && (PPEEK_IS('&'))) {
  ------------------
  |  |  320|      0|#define PPEEK_IS(c)  (PPEEK == (OnigCodePoint )c)
  |  |  ------------------
  |  |  |  |  319|      0|#define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  369|      0|#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
  |  |  |  |  ------------------
  |  |  |  |               #define PPEEK        (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  291|      0|#define PEND_VALUE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:23): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3218:2): [True: 0, False: 0]
  |  Branch (3218:11): [True: 0, False: 0]
  ------------------
 3219|      0|      PINC;
  ------------------
  |  |  301|      0|#define PINC       do { \
  |  |  302|      0|  pfetch_prev = p; \
  |  |  303|      0|  p += enclen(enc, p, end); \
  |  |  ------------------
  |  |  |  |   93|      0|#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
  |  |  |  |  ------------------
  |  |  |  |  |  |  364|      0|#define ONIGENC_MBC_ENC_LEN(enc,p,e)          onigenc_mbclen(p,e,enc)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (93:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  304|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (304:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3220|      0|      tok->type = TK_CC_AND;
 3221|      0|    }
 3222|      0|  }
 3223|       |
 3224|  25.0k| end:
 3225|  25.0k|  *src = p;
 3226|  25.0k|  return tok->type;
 3227|  25.0k|}
regparse.c:next_state_val:
 4456|  20.9k|{
 4457|  20.9k|  int r;
 4458|       |
 4459|  20.9k|  switch (*state) {
 4460|  16.4k|  case CCS_VALUE:
  ------------------
  |  Branch (4460:3): [True: 16.4k, False: 4.52k]
  ------------------
 4461|  16.4k|    if (*type == CCV_SB) {
  ------------------
  |  Branch (4461:9): [True: 14.7k, False: 1.64k]
  ------------------
 4462|  14.7k|      BITSET_SET_BIT_CHKDUP(cc->bs, (int )(*from));
  ------------------
  |  |  176|  14.7k|#define BITSET_SET_BIT_CHKDUP(bs, pos) do { \
  |  |  177|  14.7k|  if (BITSET_AT(bs, pos)) CC_DUP_WARN(env, pos, pos); \
  |  |  ------------------
  |  |  |  |  448|  14.7k|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  445|  14.7k|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|  14.7k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|  14.7k|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  446|  14.7k|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|  14.7k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|  14.7k|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (448:36): [True: 0, False: 14.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|  14.7k|  BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  445|  14.7k|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|  14.7k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|  14.7k|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  446|  14.7k|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|  14.7k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|  14.7k|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|  14.7k|} while (0)
  |  |  ------------------
  |  |  |  Branch (179:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4463|  14.7k|      if (IS_NOT_NULL(asc_cc))
  ------------------
  |  |  312|  14.7k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 14.7k]
  |  |  ------------------
  ------------------
 4464|  14.7k|	BITSET_SET_BIT(asc_cc->bs, (int )(*from));
  ------------------
  |  |  449|      0|#define BITSET_SET_BIT(bs, pos)     BS_ROOM(bs,pos) |= BS_BIT(pos)
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define BITSET_SET_BIT(bs, pos)     BS_ROOM(bs,pos) |= BS_BIT(pos)
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4465|  14.7k|    }
 4466|  1.64k|    else if (*type == CCV_CODE_POINT) {
  ------------------
  |  Branch (4466:14): [True: 0, False: 1.64k]
  ------------------
 4467|      0|      r = add_code_range(&(cc->mbuf), env, *from, *from);
 4468|      0|      if (r < 0) return r;
  ------------------
  |  Branch (4468:11): [True: 0, False: 0]
  ------------------
 4469|      0|      if (IS_NOT_NULL(asc_cc)) {
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4470|      0|	r = add_code_range0(&(asc_cc->mbuf), env, *from, *from, 0);
 4471|      0|	if (r < 0) return r;
  ------------------
  |  Branch (4471:6): [True: 0, False: 0]
  ------------------
 4472|      0|      }
 4473|      0|    }
 4474|  16.4k|    break;
 4475|       |
 4476|  16.4k|  case CCS_RANGE:
  ------------------
  |  Branch (4476:3): [True: 0, False: 20.9k]
  ------------------
 4477|      0|    if (intype == *type) {
  ------------------
  |  Branch (4477:9): [True: 0, False: 0]
  ------------------
 4478|      0|      if (intype == CCV_SB) {
  ------------------
  |  Branch (4478:11): [True: 0, False: 0]
  ------------------
 4479|      0|	if (*from > 0xff || to > 0xff)
  ------------------
  |  Branch (4479:6): [True: 0, False: 0]
  |  Branch (4479:22): [True: 0, False: 0]
  ------------------
 4480|      0|	  return ONIGERR_INVALID_CODE_POINT_VALUE;
  ------------------
  |  |  692|      0|#define ONIGERR_INVALID_CODE_POINT_VALUE                     -400
  ------------------
 4481|       |
 4482|      0|	if (*from > to) {
  ------------------
  |  Branch (4482:6): [True: 0, False: 0]
  ------------------
 4483|      0|	  if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC))
  ------------------
  |  |  332|      0|#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
  |  |  ------------------
  |  |  |  Branch (332:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4484|      0|	    goto ccs_range_end;
 4485|      0|	  else
 4486|      0|	    return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;
  ------------------
  |  |  672|      0|#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS                    -203
  ------------------
 4487|      0|	}
 4488|      0|	bitset_set_range(env, cc->bs, (int )*from, (int )to);
 4489|      0|	if (IS_NOT_NULL(asc_cc))
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4490|      0|	  bitset_set_range(env, asc_cc->bs, (int )*from, (int )to);
 4491|      0|      }
 4492|      0|      else {
 4493|      0|	r = add_code_range(&(cc->mbuf), env, *from, to);
 4494|      0|	if (r < 0) return r;
  ------------------
  |  Branch (4494:6): [True: 0, False: 0]
  ------------------
 4495|      0|	if (IS_NOT_NULL(asc_cc)) {
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4496|      0|	  r = add_code_range0(&(asc_cc->mbuf), env, *from, to, 0);
 4497|      0|	  if (r < 0) return r;
  ------------------
  |  Branch (4497:8): [True: 0, False: 0]
  ------------------
 4498|      0|	}
 4499|      0|      }
 4500|      0|    }
 4501|      0|    else {
 4502|      0|      if (*from > to) {
  ------------------
  |  Branch (4502:11): [True: 0, False: 0]
  ------------------
 4503|      0|	if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC))
  ------------------
  |  |  332|      0|#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
  |  |  ------------------
  |  |  |  Branch (332:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4504|      0|	  goto ccs_range_end;
 4505|      0|	else
 4506|      0|	  return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;
  ------------------
  |  |  672|      0|#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS                    -203
  ------------------
 4507|      0|      }
 4508|      0|      bitset_set_range(env, cc->bs, (int )*from, (int )(to < 0xff ? to : 0xff));
  ------------------
  |  Branch (4508:57): [True: 0, False: 0]
  ------------------
 4509|      0|      r = add_code_range(&(cc->mbuf), env, (OnigCodePoint )*from, to);
 4510|      0|      if (r < 0) return r;
  ------------------
  |  Branch (4510:11): [True: 0, False: 0]
  ------------------
 4511|      0|      if (IS_NOT_NULL(asc_cc)) {
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4512|      0|	bitset_set_range(env, asc_cc->bs, (int )*from, (int )(to < 0xff ? to : 0xff));
  ------------------
  |  Branch (4512:56): [True: 0, False: 0]
  ------------------
 4513|      0|	r = add_code_range0(&(asc_cc->mbuf), env, (OnigCodePoint )*from, to, 0);
 4514|      0|	if (r < 0) return r;
  ------------------
  |  Branch (4514:6): [True: 0, False: 0]
  ------------------
 4515|      0|      }
 4516|      0|    }
 4517|      0|  ccs_range_end:
 4518|      0|    *state = CCS_COMPLETE;
 4519|      0|    break;
 4520|       |
 4521|      0|  case CCS_COMPLETE:
  ------------------
  |  Branch (4521:3): [True: 0, False: 20.9k]
  ------------------
 4522|  4.52k|  case CCS_START:
  ------------------
  |  Branch (4522:3): [True: 4.52k, False: 16.4k]
  ------------------
 4523|  4.52k|    *state = CCS_VALUE;
 4524|  4.52k|    break;
 4525|       |
 4526|      0|  default:
  ------------------
  |  Branch (4526:3): [True: 0, False: 20.9k]
  ------------------
 4527|      0|    break;
 4528|  20.9k|  }
 4529|       |
 4530|  20.9k|  *from_israw = to_israw;
 4531|  20.9k|  *from       = to;
 4532|  20.9k|  *type       = intype;
 4533|  20.9k|  return 0;
 4534|  20.9k|}
regparse.c:next_state_class:
 4423|  1.64k|{
 4424|  1.64k|  int r;
 4425|       |
 4426|  1.64k|  if (*state == CCS_RANGE)
  ------------------
  |  Branch (4426:7): [True: 0, False: 1.64k]
  ------------------
 4427|      0|    return ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE;
  ------------------
  |  |  654|      0|#define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE             -110
  ------------------
 4428|       |
 4429|  1.64k|  if (*state == CCS_VALUE && *type != CCV_CLASS) {
  ------------------
  |  Branch (4429:7): [True: 0, False: 1.64k]
  |  Branch (4429:30): [True: 0, False: 0]
  ------------------
 4430|      0|    if (*type == CCV_SB) {
  ------------------
  |  Branch (4430:9): [True: 0, False: 0]
  ------------------
 4431|      0|      BITSET_SET_BIT_CHKDUP(cc->bs, (int )(*vs));
  ------------------
  |  |  176|      0|#define BITSET_SET_BIT_CHKDUP(bs, pos) do { \
  |  |  177|      0|  if (BITSET_AT(bs, pos)) CC_DUP_WARN(env, pos, pos); \
  |  |  ------------------
  |  |  |  |  448|      0|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  |  |  ------------------
  |  |  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (448:36): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|      0|  BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                 BS_ROOM(bs, pos) |= BS_BIT(pos); \
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (179:10): [Folded - Ignored]
  |  |  ------------------
  ------------------
 4432|      0|      if (IS_NOT_NULL(asc_cc))
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4433|      0|	BITSET_SET_BIT(asc_cc->bs, (int )(*vs));
  ------------------
  |  |  449|      0|#define BITSET_SET_BIT(bs, pos)     BS_ROOM(bs,pos) |= BS_BIT(pos)
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define BITSET_SET_BIT(bs, pos)     BS_ROOM(bs,pos) |= BS_BIT(pos)
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4434|      0|    }
 4435|      0|    else if (*type == CCV_CODE_POINT) {
  ------------------
  |  Branch (4435:14): [True: 0, False: 0]
  ------------------
 4436|      0|      r = add_code_range(&(cc->mbuf), env, *vs, *vs);
 4437|      0|      if (r < 0) return r;
  ------------------
  |  Branch (4437:11): [True: 0, False: 0]
  ------------------
 4438|      0|      if (IS_NOT_NULL(asc_cc)) {
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4439|      0|	r = add_code_range0(&(asc_cc->mbuf), env, *vs, *vs, 0);
 4440|      0|	if (r < 0) return r;
  ------------------
  |  Branch (4440:6): [True: 0, False: 0]
  ------------------
 4441|      0|      }
 4442|      0|    }
 4443|      0|  }
 4444|       |
 4445|  1.64k|  *state = CCS_VALUE;
 4446|  1.64k|  *type  = CCV_CLASS;
 4447|  1.64k|  return 0;
 4448|  1.64k|}
regparse.c:is_onechar_cclass:
 6078|  6.16k|{
 6079|  6.16k|  const OnigCodePoint not_found = ONIG_LAST_CODE_POINT;
  ------------------
  |  |  317|  6.16k|#define ONIG_LAST_CODE_POINT    (~((OnigCodePoint )0))
  ------------------
 6080|  6.16k|  OnigCodePoint c = not_found;
 6081|  6.16k|  int i;
 6082|  6.16k|  BBuf *bbuf = cc->mbuf;
 6083|       |
 6084|  6.16k|  if (IS_NCCLASS_NOT(cc)) return 0;
  ------------------
  |  |  809|  6.16k|#define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
  |  |  ------------------
  |  |  |  |  802|  6.16k|#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|  6.16k|#define NCCLASS_FLAGS(cc)           ((cc)->flags)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (802:37): [True: 2.46k, False: 3.69k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6085|       |
 6086|       |  /* check bbuf */
 6087|  3.69k|  if (IS_NOT_NULL(bbuf)) {
  ------------------
  |  |  312|  3.69k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 3.69k]
  |  |  ------------------
  ------------------
 6088|      0|    OnigCodePoint n, *data;
 6089|      0|    GET_CODE_POINT(n, bbuf->p);
  ------------------
  |  |  710|      0|#define GET_CODE_POINT(code,p)   code = *((OnigCodePoint* )(p))
  ------------------
 6090|      0|    data = (OnigCodePoint* )(bbuf->p) + 1;
 6091|      0|    if ((n == 1) && (data[0] == data[1])) {
  ------------------
  |  Branch (6091:9): [True: 0, False: 0]
  |  Branch (6091:21): [True: 0, False: 0]
  ------------------
 6092|       |      /* only one char found in the bbuf, save the code point. */
 6093|      0|      c = data[0];
 6094|      0|      if (((c < SINGLE_BYTE_SIZE) && BITSET_AT(cc->bs, c))) {
  ------------------
  |  |  426|      0|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  ------------------
  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  ------------------
  ------------------
                    if (((c < SINGLE_BYTE_SIZE) && BITSET_AT(cc->bs, c))) {
  ------------------
  |  |  448|      0|#define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  ------------------
  |  |  |  |  445|      0|#define BS_ROOM(bs,pos)            (bs)[(int )(pos) / BITS_IN_ROOM]
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
  |  |  ------------------
  |  |  |  |  446|      0|#define BS_BIT(pos)                (1U << ((int )(pos) % BITS_IN_ROOM))
  |  |  |  |  ------------------
  |  |  |  |  |  |  427|      0|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  425|      0|#define BITS_PER_BYTE      8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (448:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (6094:12): [True: 0, False: 0]
  ------------------
 6095|       |	/* skip if c is included in the bitset */
 6096|      0|	c = not_found;
 6097|      0|      }
 6098|      0|    }
 6099|      0|    else {
 6100|      0|      return 0;  /* the bbuf contains multiple chars */
 6101|      0|    }
 6102|      0|  }
 6103|       |
 6104|       |  /* check bitset */
 6105|  6.57k|  for (i = 0; i < BITSET_SIZE; i++) {
  ------------------
  |  |  428|  6.57k|#define BITSET_SIZE        (SINGLE_BYTE_SIZE / BITS_IN_ROOM)
  |  |  ------------------
  |  |  |  |  426|  6.57k|#define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  425|  6.57k|#define BITS_PER_BYTE      8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define BITSET_SIZE        (SINGLE_BYTE_SIZE / BITS_IN_ROOM)
  |  |  ------------------
  |  |  |  |  427|  6.57k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  425|  6.57k|#define BITS_PER_BYTE      8
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6105:15): [True: 6.57k, False: 0]
  ------------------
 6106|  6.57k|    Bits b1 = cc->bs[i];
 6107|  6.57k|    if (b1 != 0) {
  ------------------
  |  Branch (6107:9): [True: 6.57k, False: 0]
  ------------------
 6108|  6.57k|      if (((b1 & (b1 - 1)) == 0) && (c == not_found)) {
  ------------------
  |  Branch (6108:11): [True: 5.75k, False: 822]
  |  Branch (6108:37): [True: 2.87k, False: 2.87k]
  ------------------
 6109|  2.87k|	c = BITS_IN_ROOM * i + countbits(b1 - 1);
  ------------------
  |  |  427|  2.87k|#define BITS_IN_ROOM       ((int )sizeof(Bits) * BITS_PER_BYTE)
  |  |  ------------------
  |  |  |  |  425|  2.87k|#define BITS_PER_BYTE      8
  |  |  ------------------
  ------------------
 6110|  3.69k|      } else {
 6111|  3.69k|	return 0;  /* the character class contains multiple chars */
 6112|  3.69k|      }
 6113|  6.57k|    }
 6114|  6.57k|  }
 6115|       |
 6116|      0|  if (c != not_found) {
  ------------------
  |  Branch (6116:7): [True: 0, False: 0]
  ------------------
 6117|      0|    *code = c;
 6118|      0|    return 1;
 6119|      0|  }
 6120|       |
 6121|       |  /* the character class contains no char. */
 6122|      0|  return 0;
 6123|      0|}
regparse.c:countbits:
 6068|  2.87k|{
 6069|  2.87k|  bits = (bits & 0x55555555) + ((bits >> 1) & 0x55555555);
 6070|  2.87k|  bits = (bits & 0x33333333) + ((bits >> 2) & 0x33333333);
 6071|  2.87k|  bits = (bits & 0x0f0f0f0f) + ((bits >> 4) & 0x0f0f0f0f);
 6072|  2.87k|  bits = (bits & 0x00ff00ff) + ((bits >> 8) & 0x00ff00ff);
 6073|  2.87k|  return (bits & 0x0000ffff) + ((bits >>16) & 0x0000ffff);
 6074|  2.87k|}
regparse.c:node_new_anychar:
 1165|  4.11k|{
 1166|  4.11k|  Node* node = node_new();
 1167|  4.11k|  CHECK_NULL_RETURN(node);
  ------------------
  |  |  313|  4.11k|#define CHECK_NULL_RETURN(p)          if (IS_NULL(p)) return NULL
  |  |  ------------------
  |  |  |  |  311|  4.11k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 4.11k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1168|       |
 1169|  4.11k|  SET_NTYPE(node, NT_CANY);
  ------------------
  |  |   71|  4.11k|    do { \
  |  |   72|  4.11k|	int value = ntype; \
  |  |   73|  4.11k|	memcpy(&((node)->u.base.type), &value, sizeof(int)); \
  |  |   74|  4.11k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1170|  4.11k|  return node;
 1171|  4.11k|}
regparse.c:node_new_quantifier:
 1305|  12.3k|{
 1306|  12.3k|  Node* node = node_new();
 1307|  12.3k|  CHECK_NULL_RETURN(node);
  ------------------
  |  |  313|  12.3k|#define CHECK_NULL_RETURN(p)          if (IS_NULL(p)) return NULL
  |  |  ------------------
  |  |  |  |  311|  12.3k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 12.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1308|       |
 1309|  12.3k|  SET_NTYPE(node, NT_QTFR);
  ------------------
  |  |   71|  12.3k|    do { \
  |  |   72|  12.3k|	int value = ntype; \
  |  |   73|  12.3k|	memcpy(&((node)->u.base.type), &value, sizeof(int)); \
  |  |   74|  12.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1310|  12.3k|  NQTFR(node)->state  = 0;
  ------------------
  |  |   80|  12.3k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 1311|  12.3k|  NQTFR(node)->target = NULL;
  ------------------
  |  |   80|  12.3k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 1312|  12.3k|  NQTFR(node)->lower  = lower;
  ------------------
  |  |   80|  12.3k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 1313|  12.3k|  NQTFR(node)->upper  = upper;
  ------------------
  |  |   80|  12.3k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 1314|  12.3k|  NQTFR(node)->greedy = 1;
  ------------------
  |  |   80|  12.3k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 1315|  12.3k|  NQTFR(node)->target_empty_info = NQ_TARGET_ISNOT_EMPTY;
  ------------------
  |  |   80|  12.3k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
                NQTFR(node)->target_empty_info = NQ_TARGET_ISNOT_EMPTY;
  ------------------
  |  |  122|  12.3k|#define NQ_TARGET_ISNOT_EMPTY     0
  ------------------
 1316|  12.3k|  NQTFR(node)->head_exact        = NULL_NODE;
  ------------------
  |  |   80|  12.3k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
                NQTFR(node)->head_exact        = NULL_NODE;
  ------------------
  |  |  283|  12.3k|#define NULL_NODE  ((Node* )0)
  ------------------
 1317|  12.3k|  NQTFR(node)->next_head_exact   = NULL_NODE;
  ------------------
  |  |   80|  12.3k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
                NQTFR(node)->next_head_exact   = NULL_NODE;
  ------------------
  |  |  283|  12.3k|#define NULL_NODE  ((Node* )0)
  ------------------
 1318|  12.3k|  NQTFR(node)->is_referred       = 0;
  ------------------
  |  |   80|  12.3k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 1319|  12.3k|  if (by_number != 0)
  ------------------
  |  Branch (1319:7): [True: 0, False: 12.3k]
  ------------------
 1320|      0|    NQTFR(node)->state |= NST_BY_NUMBER;
  ------------------
  |  |   80|      0|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
                  NQTFR(node)->state |= NST_BY_NUMBER;
  ------------------
  |  |  142|      0|#define NST_BY_NUMBER             (1<<14) /* {n,m} */
  ------------------
 1321|       |
 1322|       |#ifdef USE_COMBINATION_EXPLOSION_CHECK
 1323|       |  NQTFR(node)->comb_exp_check_num = 0;
 1324|       |#endif
 1325|       |
 1326|  12.3k|  return node;
 1327|  12.3k|}
regparse.c:set_quantifier:
 5403|  12.3k|{
 5404|  12.3k|  QtfrNode* qn;
 5405|       |
 5406|  12.3k|  qn = NQTFR(qnode);
  ------------------
  |  |   80|  12.3k|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 5407|  12.3k|  if (qn->lower == 1 && qn->upper == 1) {
  ------------------
  |  Branch (5407:7): [True: 7.39k, False: 4.93k]
  |  Branch (5407:25): [True: 0, False: 7.39k]
  ------------------
 5408|      0|    return 1;
 5409|      0|  }
 5410|       |
 5411|  12.3k|  switch (NTYPE(target)) {
  ------------------
  |  |   69|  12.3k|#define NTYPE(node)             ((node)->u.base.type)
  ------------------
 5412|    411|  case NT_STR:
  ------------------
  |  |   38|    411|#define NT_STR         0
  ------------------
  |  Branch (5412:3): [True: 411, False: 11.9k]
  ------------------
 5413|    411|    if (! group) {
  ------------------
  |  Branch (5413:9): [True: 0, False: 411]
  ------------------
 5414|      0|      StrNode* sn = NSTR(target);
  ------------------
  |  |   76|      0|#define NSTR(node)         (&((node)->u.str))
  ------------------
 5415|      0|      if (str_node_can_be_split(sn, env->enc)) {
  ------------------
  |  Branch (5415:11): [True: 0, False: 0]
  ------------------
 5416|      0|	Node* n = str_node_split_last_char(sn, env->enc);
 5417|      0|	if (IS_NOT_NULL(n)) {
  ------------------
  |  |  312|      0|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  ------------------
  |  |  |  Branch (312:39): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5418|      0|	  qn->target = n;
 5419|      0|	  return 2;
 5420|      0|	}
 5421|      0|      }
 5422|      0|    }
 5423|    411|    break;
 5424|       |
 5425|    411|  case NT_QTFR:
  ------------------
  |  |   43|      0|#define NT_QTFR        5
  ------------------
  |  Branch (5425:3): [True: 0, False: 12.3k]
  ------------------
 5426|      0|    { /* check redundant double repeat. */
 5427|       |      /* verbose warn (?:.?)? etc... but not warn (.?)? etc... */
 5428|      0|      QtfrNode* qnt   = NQTFR(target);
  ------------------
  |  |   80|      0|#define NQTFR(node)        (&((node)->u.qtfr))
  ------------------
 5429|      0|      int nestq_num   = popular_quantifier_num(qn);
 5430|      0|      int targetq_num = popular_quantifier_num(qnt);
 5431|       |
 5432|      0|#ifdef USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR
 5433|      0|      if (nestq_num >= 0 && targetq_num >= 0 &&
  ------------------
  |  Branch (5433:11): [True: 0, False: 0]
  |  Branch (5433:29): [True: 0, False: 0]
  ------------------
 5434|      0|	  IS_SYNTAX_BV(env->syntax, ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT)) {
  ------------------
  |  |  332|      0|#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
  |  |  ------------------
  |  |  |  Branch (332:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5435|      0|	switch (ReduceTypeTable[targetq_num][nestq_num]) {
 5436|      0|	case RQ_ASIS:
  ------------------
  |  Branch (5436:2): [True: 0, False: 0]
  ------------------
 5437|      0|	  break;
 5438|       |
 5439|      0|	case RQ_DEL:
  ------------------
  |  Branch (5439:2): [True: 0, False: 0]
  ------------------
 5440|      0|	  if (onig_warn != onig_null_warn) {
  ------------------
  |  Branch (5440:8): [True: 0, False: 0]
  ------------------
 5441|      0|	    onig_syntax_warn(env, "regular expression has redundant nested repeat operator '%s'",
 5442|      0|		PopularQStr[targetq_num]);
 5443|      0|	  }
 5444|      0|	  goto warn_exit;
 5445|      0|	  break;
 5446|       |
 5447|      0|	default:
  ------------------
  |  Branch (5447:2): [True: 0, False: 0]
  ------------------
 5448|      0|	  if (onig_warn != onig_null_warn) {
  ------------------
  |  Branch (5448:8): [True: 0, False: 0]
  ------------------
 5449|      0|	    onig_syntax_warn(env, "nested repeat operator '%s' and '%s' was replaced with '%s' in regular expression",
 5450|      0|		PopularQStr[targetq_num], PopularQStr[nestq_num],
 5451|      0|		ReduceQStr[ReduceTypeTable[targetq_num][nestq_num]]);
 5452|      0|	  }
 5453|      0|	  goto warn_exit;
 5454|      0|	  break;
 5455|      0|	}
 5456|      0|      }
 5457|       |
 5458|      0|    warn_exit:
 5459|      0|#endif
 5460|      0|      if (targetq_num >= 0) {
  ------------------
  |  Branch (5460:11): [True: 0, False: 0]
  ------------------
 5461|      0|	if (nestq_num >= 0) {
  ------------------
  |  Branch (5461:6): [True: 0, False: 0]
  ------------------
 5462|      0|	  onig_reduce_nested_quantifier(qnode, target);
 5463|      0|	  goto q_exit;
 5464|      0|	}
 5465|      0|	else if (targetq_num == 1 || targetq_num == 2) { /* * or + */
  ------------------
  |  Branch (5465:11): [True: 0, False: 0]
  |  Branch (5465:31): [True: 0, False: 0]
  ------------------
 5466|       |	  /* (?:a*){n,m}, (?:a+){n,m} => (?:a*){n,n}, (?:a+){n,n} */
 5467|      0|	  if (! IS_REPEAT_INFINITE(qn->upper) && qn->upper > 1 && qn->greedy) {
  ------------------
  |  |  422|      0|#define IS_REPEAT_INFINITE(n)   ((n) == REPEAT_INFINITE)
  |  |  ------------------
  |  |  |  |  421|      0|#define REPEAT_INFINITE         -1
  |  |  ------------------
  ------------------
  |  Branch (5467:8): [True: 0, False: 0]
  |  Branch (5467:43): [True: 0, False: 0]
  |  Branch (5467:60): [True: 0, False: 0]
  ------------------
 5468|      0|	    qn->upper = (qn->lower == 0 ? 1 : qn->lower);
  ------------------
  |  Branch (5468:19): [True: 0, False: 0]
  ------------------
 5469|      0|	  }
 5470|      0|	}
 5471|      0|      }
 5472|      0|    }
 5473|      0|    break;
 5474|       |
 5475|  11.9k|  default:
  ------------------
  |  Branch (5475:3): [True: 11.9k, False: 411]
  ------------------
 5476|  11.9k|    break;
 5477|  12.3k|  }
 5478|       |
 5479|  12.3k|  qn->target = target;
 5480|  12.3k| q_exit:
 5481|  12.3k|  return 0;
 5482|  12.3k|}
regparse.c:node_new_enclose_memory:
 1354|  2.05k|{
 1355|  2.05k|  Node* node = node_new_enclose(ENCLOSE_MEMORY);
  ------------------
  |  |   94|  2.05k|#define ENCLOSE_MEMORY           (1<<0)
  ------------------
 1356|  2.05k|  CHECK_NULL_RETURN(node);
  ------------------
  |  |  313|  2.05k|#define CHECK_NULL_RETURN(p)          if (IS_NULL(p)) return NULL
  |  |  ------------------
  |  |  |  |  311|  2.05k|#define IS_NULL(p)                    (((void*)(p)) == (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (311:39): [True: 0, False: 2.05k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1357|  2.05k|  if (is_named != 0)
  ------------------
  |  Branch (1357:7): [True: 1.64k, False: 411]
  ------------------
 1358|  1.64k|    SET_ENCLOSE_STATUS(node, NST_NAMED_GROUP);
  ------------------
  |  |  144|  1.64k|#define SET_ENCLOSE_STATUS(node,f)      (node)->u.enclose.state |=  (f)
  ------------------
 1359|       |
 1360|  2.05k|#ifdef USE_SUBEXP_CALL
 1361|  2.05k|  NENCLOSE(node)->option = option;
  ------------------
  |  |   81|  2.05k|#define NENCLOSE(node)     (&((node)->u.enclose))
  ------------------
 1362|  2.05k|#endif
 1363|  2.05k|  return node;
 1364|  2.05k|}
regparse.c:scan_env_set_mem_node:
 1052|  2.05k|{
 1053|  2.05k|  if (env->num_mem >= num)
  ------------------
  |  Branch (1053:7): [True: 2.05k, False: 0]
  ------------------
 1054|  2.05k|    SCANENV_MEM_NODES(env)[num] = node;
  ------------------
  |  |  287|  2.05k| (IS_NOT_NULL((senv)->mem_nodes_dynamic) ? \
  |  |  ------------------
  |  |  |  |  312|  2.05k|#define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (312:39): [True: 0, False: 2.05k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  288|  2.05k|    (senv)->mem_nodes_dynamic : (senv)->mem_nodes_static)
  ------------------
 1055|      0|  else
 1056|      0|    return ONIGERR_PARSER_BUG;
  ------------------
  |  |  634|      0|#define ONIGERR_PARSER_BUG                                    -11
  ------------------
 1057|  2.05k|  return 0;
 1058|  2.05k|}

onig_st_init_table_with_size:
  582|    411|{
  583|    411|    st_table *tab;
  584|    411|    int n;
  585|       |
  586|       |#ifdef HASH_LOG
  587|       |#if HASH_LOG+0 < 0
  588|       |    {
  589|       |        const char *e = getenv("ST_HASH_LOG");
  590|       |        if (!e || !*e) init_st = 1;
  591|       |    }
  592|       |#endif
  593|       |    if (init_st == 0) {
  594|       |        init_st = 1;
  595|       |        atexit(stat_col);
  596|       |    }
  597|       |#endif
  598|       |
  599|    411|    n = get_power2(size);
  600|    411|#ifndef RUBY
  601|    411|    if (n < 0)
  ------------------
  |  Branch (601:9): [True: 0, False: 411]
  ------------------
  602|      0|        return NULL;
  603|    411|#endif
  604|    411|    tab = (st_table *) malloc(sizeof (st_table));
  605|    411|#ifndef RUBY
  606|    411|    if (tab == NULL)
  ------------------
  |  Branch (606:9): [True: 0, False: 411]
  ------------------
  607|      0|        return NULL;
  608|    411|#endif
  609|    411|    tab->type = type;
  610|    411|    tab->entry_power = n;
  611|    411|    tab->bin_power = features[n].bin_power;
  612|    411|    tab->size_ind = features[n].size_ind;
  613|    411|    if (n <= MAX_POWER2_FOR_TABLES_WITHOUT_BINS)
  ------------------
  |  |  343|    411|#define MAX_POWER2_FOR_TABLES_WITHOUT_BINS 4
  ------------------
  |  Branch (613:9): [True: 411, False: 0]
  ------------------
  614|    411|        tab->bins = NULL;
  615|      0|    else {
  616|      0|        tab->bins = (st_index_t *) malloc(bins_size(tab));
  617|      0|#ifndef RUBY
  618|      0|        if (tab->bins == NULL) {
  ------------------
  |  Branch (618:13): [True: 0, False: 0]
  ------------------
  619|      0|            free(tab);
  620|      0|            return NULL;
  621|      0|        }
  622|      0|#endif
  623|      0|    }
  624|    411|    tab->entries = (st_table_entry *) malloc(get_allocated_entries(tab)
  625|    411|					     * sizeof(st_table_entry));
  626|    411|#ifndef RUBY
  627|    411|    if (tab->entries == NULL) {
  ------------------
  |  Branch (627:9): [True: 0, False: 411]
  ------------------
  628|      0|        st_free_table(tab);
  ------------------
  |  |  193|      0|# define st_free_table                  onig_st_free_table
  ------------------
  629|      0|        return NULL;
  630|      0|    }
  631|    411|#endif
  632|       |#ifdef ST_DEBUG
  633|       |    memset(tab->entries, ST_INIT_VAL_BYTE,
  634|       |	   get_allocated_entries(tab) * sizeof(st_table_entry));
  635|       |    if (tab->bins != NULL)
  636|       |        memset(tab->bins, ST_INIT_VAL_BYTE, bins_size(tab));
  637|       |#endif
  638|    411|    make_tab_empty(tab);
  639|    411|    tab->rebuilds_num = 0;
  640|       |#ifdef ST_DEBUG
  641|       |    st_check(tab);
  642|       |#endif
  643|    411|    return tab;
  644|    411|}
onig_st_free_table:
  716|    411|{
  717|    411|    if (tab->bins != NULL)
  ------------------
  |  Branch (717:9): [True: 0, False: 411]
  ------------------
  718|      0|        free(tab->bins);
  719|    411|    free(tab->entries);
  720|    411|    free(tab);
  721|    411|}
onig_st_lookup:
 1110|  1.23k|{
 1111|  1.23k|    st_index_t bin;
 1112|  1.23k|    st_hash_t hash = do_hash(key, tab);
 1113|       |
 1114|  1.23k| retry:
 1115|  1.23k|    if (tab->bins == NULL) {
  ------------------
  |  Branch (1115:9): [True: 1.23k, False: 0]
  ------------------
 1116|  1.23k|        bin = find_entry(tab, hash, key);
 1117|  1.23k|	if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0))
  ------------------
  |  |  117|  1.23k|#define EXPECT(expr, val) __builtin_expect(expr, val)
  |  |  ------------------
  |  |  |  Branch (117:27): [True: 0, False: 1.23k]
  |  |  ------------------
  ------------------
 1118|      0|	    goto retry;
 1119|  1.23k|	if (bin == UNDEFINED_ENTRY_IND)
  ------------------
  |  |  399|  1.23k|#define UNDEFINED_ENTRY_IND (~(st_index_t) 0)
  ------------------
  |  Branch (1119:6): [True: 1.23k, False: 0]
  ------------------
 1120|  1.23k|	    return 0;
 1121|  1.23k|    }
 1122|      0|    else {
 1123|      0|        bin = find_table_entry_ind(tab, hash, key);
 1124|      0|	if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0))
  ------------------
  |  |  117|      0|#define EXPECT(expr, val) __builtin_expect(expr, val)
  |  |  ------------------
  |  |  |  Branch (117:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1125|      0|	    goto retry;
 1126|      0|	if (bin == UNDEFINED_ENTRY_IND)
  ------------------
  |  |  399|      0|#define UNDEFINED_ENTRY_IND (~(st_index_t) 0)
  ------------------
  |  Branch (1126:6): [True: 0, False: 0]
  ------------------
 1127|      0|	    return 0;
 1128|      0|	bin -= ENTRY_BASE;
  ------------------
  |  |  391|      0|#define ENTRY_BASE 2
  ------------------
 1129|      0|    }
 1130|      0|    if (value != 0)
  ------------------
  |  Branch (1130:9): [True: 0, False: 0]
  ------------------
 1131|      0|        *value = tab->entries[bin].record;
 1132|      0|    return 1;
 1133|  1.23k|}
onig_st_insert:
 1182|  1.64k|{
 1183|  1.64k|    st_table_entry *entry;
 1184|  1.64k|    st_index_t bin;
 1185|  1.64k|    st_index_t ind;
 1186|  1.64k|    st_hash_t hash_value;
 1187|  1.64k|    st_index_t bin_ind;
 1188|  1.64k|    int new_p;
 1189|       |
 1190|  1.64k|    hash_value = do_hash(key, tab);
 1191|  1.64k| retry:
 1192|  1.64k|    rebuild_table_if_necessary(tab);
 1193|  1.64k|    if (tab->bins == NULL) {
  ------------------
  |  Branch (1193:9): [True: 1.64k, False: 0]
  ------------------
 1194|  1.64k|        bin = find_entry(tab, hash_value, key);
 1195|  1.64k|	if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0))
  ------------------
  |  |  117|  1.64k|#define EXPECT(expr, val) __builtin_expect(expr, val)
  |  |  ------------------
  |  |  |  Branch (117:27): [True: 0, False: 1.64k]
  |  |  ------------------
  ------------------
 1196|      0|	    goto retry;
 1197|  1.64k|	new_p = bin == UNDEFINED_ENTRY_IND;
  ------------------
  |  |  399|  1.64k|#define UNDEFINED_ENTRY_IND (~(st_index_t) 0)
  ------------------
 1198|  1.64k|	if (new_p)
  ------------------
  |  Branch (1198:6): [True: 1.64k, False: 0]
  ------------------
 1199|  1.64k|	    tab->num_entries++;
 1200|  1.64k|	bin_ind = UNDEFINED_BIN_IND;
  ------------------
  |  |  400|  1.64k|#define UNDEFINED_BIN_IND (~(st_index_t) 0)
  ------------------
 1201|  1.64k|    }
 1202|      0|    else {
 1203|      0|        bin = find_table_bin_ptr_and_reserve(tab, &hash_value,
 1204|      0|					     key, &bin_ind);
 1205|      0|	if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0))
  ------------------
  |  |  117|      0|#define EXPECT(expr, val) __builtin_expect(expr, val)
  |  |  ------------------
  |  |  |  Branch (117:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1206|      0|	    goto retry;
 1207|      0|	new_p = bin == UNDEFINED_ENTRY_IND;
  ------------------
  |  |  399|      0|#define UNDEFINED_ENTRY_IND (~(st_index_t) 0)
  ------------------
 1208|      0|	bin -= ENTRY_BASE;
  ------------------
  |  |  391|      0|#define ENTRY_BASE 2
  ------------------
 1209|      0|    }
 1210|  1.64k|    if (new_p) {
  ------------------
  |  Branch (1210:9): [True: 1.64k, False: 0]
  ------------------
 1211|  1.64k|        st_assert(tab->entries_bound < get_allocated_entries(tab));
  ------------------
  |  |  128|  1.64k|#define st_assert(cond) ((void)(0 && (cond)))
  |  |  ------------------
  |  |  |  Branch (128:33): [Folded - Ignored]
  |  |  |  Branch (128:38): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1212|  1.64k|	ind = tab->entries_bound++;
 1213|  1.64k|        entry = &tab->entries[ind];
 1214|  1.64k|        entry->hash = hash_value;
 1215|  1.64k|        entry->key = key;
 1216|  1.64k|        entry->record = value;
 1217|  1.64k|	if (bin_ind != UNDEFINED_BIN_IND)
  ------------------
  |  |  400|  1.64k|#define UNDEFINED_BIN_IND (~(st_index_t) 0)
  ------------------
  |  Branch (1217:6): [True: 0, False: 1.64k]
  ------------------
 1218|      0|	    set_bin(tab->bins, get_size_ind(tab), bin_ind, ind + ENTRY_BASE);
  ------------------
  |  |  391|      0|#define ENTRY_BASE 2
  ------------------
 1219|       |#ifdef ST_DEBUG
 1220|       |	st_check(tab);
 1221|       |#endif
 1222|  1.64k|        return 0;
 1223|  1.64k|    }
 1224|      0|    tab->entries[bin].record = value;
 1225|       |#ifdef ST_DEBUG
 1226|       |    st_check(tab);
 1227|       |#endif
 1228|      0|    return 1;
 1229|  1.64k|}
onig_st_foreach:
 1723|    411|{
 1724|    411|    return st_general_foreach(tab, func, NULL, arg, FALSE);
  ------------------
  |  |   77|    411|# define FALSE   0
  ------------------
 1725|    411|}
st.c:get_power2:
  348|    411|{
  349|    411|    unsigned int n;
  350|       |
  351|  1.64k|    for (n = 0; size != 0; n++)
  ------------------
  |  Branch (351:17): [True: 1.23k, False: 411]
  ------------------
  352|  1.23k|        size >>= 1;
  353|    411|    if (n <= MAX_POWER2)
  ------------------
  |  |  210|    411|#define MAX_POWER2 62
  ------------------
  |  Branch (353:9): [True: 411, False: 0]
  ------------------
  354|    411|        return n < MINIMAL_POWER2 ? MINIMAL_POWER2 : n;
  ------------------
  |  |  335|    411|#define MINIMAL_POWER2 2
  ------------------
                      return n < MINIMAL_POWER2 ? MINIMAL_POWER2 : n;
  ------------------
  |  |  335|      0|#define MINIMAL_POWER2 2
  ------------------
  |  Branch (354:16): [True: 0, False: 411]
  ------------------
  355|       |#ifdef RUBY
  356|       |    /* Ran out of the table entries */
  357|       |    rb_raise(rb_eRuntimeError, "st_table too big");
  358|       |#endif
  359|       |    /* should raise exception */
  360|      0|    return -1;
  361|    411|}
st.c:get_allocated_entries:
  466|  2.05k|{
  467|  2.05k|    return ((st_index_t) 1)<<tab->entry_power;
  468|  2.05k|}
st.c:make_tab_empty:
  487|    411|{
  488|    411|    tab->num_entries = 0;
  489|    411|    tab->entries_start = tab->entries_bound = 0;
  490|    411|    if (tab->bins != NULL)
  ------------------
  |  Branch (490:9): [True: 0, False: 411]
  ------------------
  491|      0|        initialize_bins(tab);
  492|    411|}
st.c:do_hash:
  326|  2.87k|{
  327|  2.87k|    st_hash_t hash = (st_hash_t)(tab->type->hash)(key);
  328|       |
  329|       |    /* RESERVED_HASH_VAL is used for a deleted entry.  Map it into
  330|       |       another value.  Such mapping should be extremely rare.  */
  331|  2.87k|    return hash == RESERVED_HASH_VAL ? RESERVED_HASH_SUBSTITUTION_VAL : hash;
  ------------------
  |  |  317|  2.87k|#define RESERVED_HASH_VAL (~(st_hash_t) 0)
  ------------------
                  return hash == RESERVED_HASH_VAL ? RESERVED_HASH_SUBSTITUTION_VAL : hash;
  ------------------
  |  |  318|      0|#define RESERVED_HASH_SUBSTITUTION_VAL ((st_hash_t) 0)
  ------------------
  |  Branch (331:12): [True: 0, False: 2.87k]
  ------------------
  332|  2.87k|}
st.c:find_entry:
  881|  4.52k|{
  882|  4.52k|    int eq_p, rebuilt_p;
  883|  4.52k|    st_index_t i, bound;
  884|  4.52k|    st_table_entry *entries;
  885|       |
  886|  4.52k|    bound = tab->entries_bound;
  887|  4.52k|    entries = tab->entries;
  888|  9.45k|    for (i = tab->entries_start; i < bound; i++) {
  ------------------
  |  Branch (888:34): [True: 6.57k, False: 2.87k]
  ------------------
  889|  6.57k|	DO_PTR_EQUAL_CHECK(tab, &entries[i], hash_value, key, eq_p, rebuilt_p);
  ------------------
  |  |  187|  6.57k|    do {							    \
  |  |  188|  6.57k|	unsigned int _old_rebuilds_num = (tab)->rebuilds_num;       \
  |  |  189|  6.57k|	res = PTR_EQUAL(tab, ptr, hash_val, key);		    \
  |  |  ------------------
  |  |  |  |  182|  6.57k|    ((ptr)->hash == (hash_val) && EQUAL((tab), (key_), (ptr)->key))
  |  |  |  |  ------------------
  |  |  |  |  |  |  180|  1.64k|#define EQUAL(tab,x,y) ((x) == (y) || (*(tab)->type->compare)((x),(y)) == 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (180:25): [True: 1.64k, False: 0]
  |  |  |  |  |  |  |  Branch (180:39): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:6): [True: 1.64k, False: 4.93k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  190|  6.57k|	rebuilt_p = _old_rebuilds_num != (tab)->rebuilds_num;	    \
  |  |  191|  6.57k|    } while (FALSE)
  |  |  ------------------
  |  |  |  |   77|  6.57k|# define FALSE   0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (77:18): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  890|  6.57k|	if (EXPECT(rebuilt_p, 0))
  ------------------
  |  |  117|  6.57k|#define EXPECT(expr, val) __builtin_expect(expr, val)
  |  |  ------------------
  |  |  |  Branch (117:27): [True: 0, False: 6.57k]
  |  |  ------------------
  ------------------
  891|      0|	    return REBUILT_TABLE_ENTRY_IND;
  ------------------
  |  |  404|      0|#define REBUILT_TABLE_ENTRY_IND (~(st_index_t) 1)
  ------------------
  892|  6.57k|	if (eq_p)
  ------------------
  |  Branch (892:6): [True: 1.64k, False: 4.93k]
  ------------------
  893|  1.64k|	    return i;
  894|  6.57k|    }
  895|  2.87k|    return UNDEFINED_ENTRY_IND;
  ------------------
  |  |  399|  2.87k|#define UNDEFINED_ENTRY_IND (~(st_index_t) 0)
  ------------------
  896|  4.52k|}
st.c:rebuild_table_if_necessary:
 1169|  1.64k|{
 1170|  1.64k|    st_index_t bound = tab->entries_bound;
 1171|       |
 1172|  1.64k|    if (bound == get_allocated_entries(tab))
  ------------------
  |  Branch (1172:9): [True: 0, False: 1.64k]
  ------------------
 1173|      0|        rebuild_table(tab);
 1174|  1.64k|    st_assert(tab->entries_bound < get_allocated_entries(tab));
  ------------------
  |  |  128|  1.64k|#define st_assert(cond) ((void)(0 && (cond)))
  |  |  ------------------
  |  |  |  Branch (128:33): [Folded - Ignored]
  |  |  |  Branch (128:38): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1175|  1.64k|}
st.c:st_general_foreach:
 1605|    411|{
 1606|    411|    st_index_t bin;
 1607|    411|    st_index_t bin_ind;
 1608|    411|    st_table_entry *entries, *curr_entry_ptr;
 1609|    411|    enum st_retval retval;
 1610|    411|    st_index_t i, rebuilds_num;
 1611|    411|    st_hash_t hash;
 1612|    411|    st_data_t key;
 1613|    411|    int error_p, packed_p = tab->bins == NULL;
 1614|       |
 1615|    411|    st_assert(tab->entries_start <= tab->entries_bound);
  ------------------
  |  |  128|    411|#define st_assert(cond) ((void)(0 && (cond)))
  |  |  ------------------
  |  |  |  Branch (128:33): [Folded - Ignored]
  |  |  |  Branch (128:38): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1616|    411|    entries = tab->entries;
 1617|       |    /* The bound can change inside the loop even without rebuilding
 1618|       |       the table, e.g. by an entry inesrtion.  */
 1619|  2.05k|    for (i = tab->entries_start; i < tab->entries_bound; i++) {
  ------------------
  |  Branch (1619:34): [True: 1.64k, False: 411]
  ------------------
 1620|  1.64k|        curr_entry_ptr = &entries[i];
 1621|  1.64k|	if (EXPECT(DELETED_ENTRY_P(curr_entry_ptr), 0))
  ------------------
  |  |  117|  1.64k|#define EXPECT(expr, val) __builtin_expect(expr, val)
  |  |  ------------------
  |  |  |  Branch (117:27): [True: 0, False: 1.64k]
  |  |  ------------------
  ------------------
 1622|      0|	    continue;
 1623|  1.64k|	key = curr_entry_ptr->key;
 1624|  1.64k|	rebuilds_num = tab->rebuilds_num;
 1625|  1.64k|	hash = curr_entry_ptr->hash;
 1626|  1.64k|	retval = (*func)(key, curr_entry_ptr->record, arg, 0);
 1627|       |
 1628|  1.64k|        if (retval == ST_REPLACE && replace) {
  ------------------
  |  Branch (1628:13): [True: 0, False: 1.64k]
  |  Branch (1628:37): [True: 0, False: 0]
  ------------------
 1629|      0|            st_data_t value;
 1630|      0|            value = curr_entry_ptr->record;
 1631|      0|            retval = (*replace)(&key, &value, arg, TRUE);
  ------------------
  |  |   73|      0|# define TRUE    1
  ------------------
 1632|      0|            curr_entry_ptr->key = key;
 1633|      0|            curr_entry_ptr->record = value;
 1634|      0|        }
 1635|       |
 1636|  1.64k|	if (rebuilds_num != tab->rebuilds_num) {
  ------------------
  |  Branch (1636:6): [True: 0, False: 1.64k]
  ------------------
 1637|      0|	retry:
 1638|      0|	    entries = tab->entries;
 1639|      0|	    packed_p = tab->bins == NULL;
 1640|      0|	    if (packed_p) {
  ------------------
  |  Branch (1640:10): [True: 0, False: 0]
  ------------------
 1641|      0|	        i = find_entry(tab, hash, key);
 1642|      0|		if (EXPECT(i == REBUILT_TABLE_ENTRY_IND, 0))
  ------------------
  |  |  117|      0|#define EXPECT(expr, val) __builtin_expect(expr, val)
  |  |  ------------------
  |  |  |  Branch (117:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1643|      0|		    goto retry;
 1644|      0|		error_p = i == UNDEFINED_ENTRY_IND;
  ------------------
  |  |  399|      0|#define UNDEFINED_ENTRY_IND (~(st_index_t) 0)
  ------------------
 1645|      0|	    }
 1646|      0|	    else {
 1647|      0|	        i = find_table_entry_ind(tab, hash, key);
 1648|      0|		if (EXPECT(i == REBUILT_TABLE_ENTRY_IND, 0))
  ------------------
  |  |  117|      0|#define EXPECT(expr, val) __builtin_expect(expr, val)
  |  |  ------------------
  |  |  |  Branch (117:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1649|      0|		    goto retry;
 1650|      0|		error_p = i == UNDEFINED_ENTRY_IND;
  ------------------
  |  |  399|      0|#define UNDEFINED_ENTRY_IND (~(st_index_t) 0)
  ------------------
 1651|      0|		i -= ENTRY_BASE;
  ------------------
  |  |  391|      0|#define ENTRY_BASE 2
  ------------------
 1652|      0|	    }
 1653|      0|	    if (error_p && check_p) {
  ------------------
  |  Branch (1653:10): [True: 0, False: 0]
  |  Branch (1653:21): [True: 0, False: 0]
  ------------------
 1654|       |	        /* call func with error notice */
 1655|      0|	        retval = (*func)(0, 0, arg, 1);
 1656|       |#ifdef ST_DEBUG
 1657|       |		st_check(tab);
 1658|       |#endif
 1659|      0|		return 1;
 1660|      0|	    }
 1661|      0|	    curr_entry_ptr = &entries[i];
 1662|      0|	}
 1663|  1.64k|	switch (retval) {
  ------------------
  |  Branch (1663:10): [True: 0, False: 1.64k]
  ------------------
 1664|      0|          case ST_REPLACE:
  ------------------
  |  Branch (1664:11): [True: 0, False: 1.64k]
  ------------------
 1665|      0|            break;
 1666|      0|	  case ST_CONTINUE:
  ------------------
  |  Branch (1666:4): [True: 0, False: 1.64k]
  ------------------
 1667|      0|	    break;
 1668|      0|	  case ST_CHECK:
  ------------------
  |  Branch (1668:4): [True: 0, False: 1.64k]
  ------------------
 1669|      0|	    if (check_p)
  ------------------
  |  Branch (1669:10): [True: 0, False: 0]
  ------------------
 1670|      0|		break;
 1671|      0|	  case ST_STOP:
  ------------------
  |  Branch (1671:4): [True: 0, False: 1.64k]
  ------------------
 1672|       |#ifdef ST_DEBUG
 1673|       |	    st_check(tab);
 1674|       |#endif
 1675|      0|	    return 0;
 1676|  1.64k|	  case ST_DELETE: {
  ------------------
  |  Branch (1676:4): [True: 1.64k, False: 0]
  ------------------
 1677|  1.64k|	    st_data_t key = curr_entry_ptr->key;
 1678|       |
 1679|  1.64k|	    again:
 1680|  1.64k|	    if (packed_p) {
  ------------------
  |  Branch (1680:10): [True: 1.64k, False: 0]
  ------------------
 1681|  1.64k|		bin = find_entry(tab, hash, key);
 1682|  1.64k|		if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0))
  ------------------
  |  |  117|  1.64k|#define EXPECT(expr, val) __builtin_expect(expr, val)
  |  |  ------------------
  |  |  |  Branch (117:27): [True: 0, False: 1.64k]
  |  |  ------------------
  ------------------
 1683|      0|		    goto again;
 1684|  1.64k|		if (bin == UNDEFINED_ENTRY_IND)
  ------------------
  |  |  399|  1.64k|#define UNDEFINED_ENTRY_IND (~(st_index_t) 0)
  ------------------
  |  Branch (1684:7): [True: 0, False: 1.64k]
  ------------------
 1685|      0|		    break;
 1686|  1.64k|	    }
 1687|      0|	    else {
 1688|      0|		bin_ind = find_table_bin_ind(tab, hash, key);
 1689|      0|		if (EXPECT(bin_ind == REBUILT_TABLE_BIN_IND, 0))
  ------------------
  |  |  117|      0|#define EXPECT(expr, val) __builtin_expect(expr, val)
  |  |  ------------------
  |  |  |  Branch (117:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1690|      0|		    goto again;
 1691|      0|		if (bin_ind == UNDEFINED_BIN_IND)
  ------------------
  |  |  400|      0|#define UNDEFINED_BIN_IND (~(st_index_t) 0)
  ------------------
  |  Branch (1691:7): [True: 0, False: 0]
  ------------------
 1692|      0|		    break;
 1693|      0|		bin = get_bin(tab->bins, get_size_ind(tab), bin_ind) - ENTRY_BASE;
  ------------------
  |  |  391|      0|#define ENTRY_BASE 2
  ------------------
 1694|      0|		MARK_BIN_DELETED(tab, bin_ind);
  ------------------
  |  |  411|      0|    do {                                                        \
  |  |  412|      0|        st_assert(i != UNDEFINED_BIN_IND);			\
  |  |  ------------------
  |  |  |  |  128|      0|#define st_assert(cond) ((void)(0 && (cond)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (128:33): [Folded - Ignored]
  |  |  |  |  |  Branch (128:38): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  413|      0|	st_assert(! IND_EMPTY_OR_DELETED_BIN_P(tab, i)); 	\
  |  |  ------------------
  |  |  |  |  128|      0|#define st_assert(cond) ((void)(0 && (cond)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (128:33): [Folded - Ignored]
  |  |  |  |  |  Branch (128:38): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  414|      0|        set_bin((tab)->bins, get_size_ind(tab), i, DELETED_BIN); \
  |  |  ------------------
  |  |  |  |  389|      0|#define DELETED_BIN  1
  |  |  ------------------
  |  |  415|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (415:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1695|      0|	    }
 1696|  1.64k|	    curr_entry_ptr = &entries[bin];
 1697|  1.64k|	    MARK_ENTRY_DELETED(curr_entry_ptr);
  ------------------
  |  |  431|  1.64k|#define MARK_ENTRY_DELETED(e_ptr) ((e_ptr)->hash = RESERVED_HASH_VAL)
  |  |  ------------------
  |  |  |  |  317|  1.64k|#define RESERVED_HASH_VAL (~(st_hash_t) 0)
  |  |  ------------------
  ------------------
 1698|  1.64k|	    tab->num_entries--;
 1699|  1.64k|	    update_range_for_deleted(tab, bin);
 1700|       |#ifdef ST_DEBUG
 1701|       |	    st_check(tab);
 1702|       |#endif
 1703|  1.64k|	    break;
 1704|  1.64k|	  }
 1705|  1.64k|	}
 1706|  1.64k|    }
 1707|       |#ifdef ST_DEBUG
 1708|       |    st_check(tab);
 1709|       |#endif
 1710|    411|    return 0;
 1711|    411|}
st.c:update_range_for_deleted:
 1375|  1.64k|{
 1376|       |    /* Do not update entries_bound here.  Otherwise, we can fill all
 1377|       |       bins by deleted entry value before rebuilding the table.  */
 1378|  1.64k|    if (tab->entries_start == n)
  ------------------
  |  Branch (1378:9): [True: 1.64k, False: 0]
  ------------------
 1379|  1.64k|        tab->entries_start = n + 1;
 1380|  1.64k|}

flb_cf_create:
  102|    411|{
  103|    411|    struct flb_cf *ctx;
  104|       |
  105|    411|    ctx = flb_calloc(1, sizeof(struct flb_cf));
  106|    411|    if (!ctx) {
  ------------------
  |  Branch (106:9): [True: 0, False: 411]
  ------------------
  107|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  108|      0|        return NULL;
  109|      0|    }
  110|    411|    ctx->format = FLB_CF_CLASSIC;
  ------------------
  |  |   53|    411|#define FLB_CF_CLASSIC FLB_CF_FLUENTBIT
  ------------------
  111|       |
  112|       |    /* env vars */
  113|    411|    mk_list_init(&ctx->env);
  114|       |
  115|       |    /* meta commands */
  116|    411|    mk_list_init(&ctx->metas);
  117|       |
  118|       |    /* parsers */
  119|    411|    mk_list_init(&ctx->parsers);
  120|    411|    mk_list_init(&ctx->multiline_parsers);
  121|       |
  122|       |    /* stream processors */
  123|    411|    mk_list_init(&ctx->stream_processors);
  124|       |
  125|       |    /* external plugins (*.so) */
  126|    411|    mk_list_init(&ctx->plugins);
  127|       |
  128|       |    /* upstream servers */
  129|    411|    mk_list_init(&ctx->upstream_servers);
  130|       |
  131|       |    /* 'custom' type plugins */
  132|    411|    mk_list_init(&ctx->customs);
  133|       |
  134|       |    /* pipeline */
  135|    411|    mk_list_init(&ctx->inputs);
  136|    411|    mk_list_init(&ctx->filters);
  137|    411|    mk_list_init(&ctx->outputs);
  138|       |
  139|       |    /* other sections */
  140|    411|    mk_list_init(&ctx->others);
  141|       |
  142|       |    /* general list for sections */
  143|    411|    mk_list_init(&ctx->sections);
  144|       |
  145|    411|    return ctx;
  146|    411|}
flb_cf_destroy:
  149|    411|{
  150|    411|    flb_kv_release(&cf->env);
  151|    411|    flb_kv_release(&cf->metas);
  152|    411|    flb_cf_section_destroy_all(cf);
  153|    411|    flb_free(cf);
  154|    411|}
flb_cf_section_create:
  600|    411|{
  601|    411|    int type;
  602|    411|    struct flb_cf_section *s;
  603|       |
  604|    411|    if (!name) {
  ------------------
  |  Branch (604:9): [True: 0, False: 411]
  ------------------
  605|      0|        return NULL;
  606|      0|    }
  607|       |
  608|       |    /* determinate type by name */
  609|    411|    if (len <= 0) {
  ------------------
  |  Branch (609:9): [True: 411, False: 0]
  ------------------
  610|    411|        len = strlen(name);
  611|    411|    }
  612|       |
  613|       |    /* get the section type */
  614|    411|    type = get_section_type(name, len);
  615|       |
  616|       |    /* check if 'service' already exists */
  617|    411|    if (type == FLB_CF_SERVICE && cf->service) {
  ------------------
  |  Branch (617:9): [True: 411, False: 0]
  |  Branch (617:35): [True: 0, False: 411]
  ------------------
  618|      0|        return cf->service;
  619|      0|    }
  620|       |
  621|       |    /* section context */
  622|    411|    s = flb_malloc(sizeof(struct flb_cf_section));
  623|    411|    if (!s) {
  ------------------
  |  Branch (623:9): [True: 0, False: 411]
  ------------------
  624|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  625|      0|        return NULL;
  626|      0|    }
  627|       |
  628|       |    /* initialize lists */
  629|    411|    s->properties = cfl_kvlist_create();
  630|    411|    mk_list_init(&s->groups);
  631|       |
  632|       |    /* create a NULL terminated name */
  633|    411|    s->name = flb_sds_create_len(name, len);
  634|    411|    if (!s->name) {
  ------------------
  |  Branch (634:9): [True: 0, False: 411]
  ------------------
  635|      0|        flb_free(s->properties);
  636|      0|        flb_free(s);
  637|      0|        return NULL;
  638|      0|    }
  639|    411|    s->type = type;
  640|       |
  641|    411|    if (type == FLB_CF_SERVICE && !cf->service) {
  ------------------
  |  Branch (641:9): [True: 411, False: 0]
  |  Branch (641:35): [True: 411, False: 0]
  ------------------
  642|    411|        cf->service = s;
  643|    411|    }
  644|       |
  645|       |    /* link to global section */
  646|    411|    mk_list_add(&s->_head, &cf->sections);
  647|       |
  648|       |    /* link to list per type */
  649|    411|    if (type == FLB_CF_PARSER) {
  ------------------
  |  Branch (649:9): [True: 0, False: 411]
  ------------------
  650|      0|        mk_list_add(&s->_head_section, &cf->parsers);
  651|      0|    }
  652|    411|    else if (type == FLB_CF_MULTILINE_PARSER) {
  ------------------
  |  Branch (652:14): [True: 0, False: 411]
  ------------------
  653|      0|        mk_list_add(&s->_head_section, &cf->multiline_parsers);
  654|      0|    }
  655|    411|    else if (type == FLB_CF_STREAM_PROCESSOR) {
  ------------------
  |  Branch (655:14): [True: 0, False: 411]
  ------------------
  656|      0|        mk_list_add(&s->_head_section, &cf->stream_processors);
  657|      0|    }
  658|    411|    else if (type == FLB_CF_PLUGINS) {
  ------------------
  |  Branch (658:14): [True: 0, False: 411]
  ------------------
  659|      0|        mk_list_add(&s->_head_section, &cf->plugins);
  660|      0|    }
  661|    411|    else if (type == FLB_CF_UPSTREAM_SERVERS) {
  ------------------
  |  Branch (661:14): [True: 0, False: 411]
  ------------------
  662|      0|        mk_list_add(&s->_head_section, &cf->upstream_servers);
  663|      0|    }
  664|    411|    else if (type == FLB_CF_CUSTOM) {
  ------------------
  |  Branch (664:14): [True: 0, False: 411]
  ------------------
  665|      0|        mk_list_add(&s->_head_section, &cf->customs);
  666|      0|    }
  667|    411|    else if (type == FLB_CF_INPUT) {
  ------------------
  |  Branch (667:14): [True: 0, False: 411]
  ------------------
  668|      0|        mk_list_add(&s->_head_section, &cf->inputs);
  669|      0|    }
  670|    411|    else if (type == FLB_CF_FILTER) {
  ------------------
  |  Branch (670:14): [True: 0, False: 411]
  ------------------
  671|      0|        mk_list_add(&s->_head_section, &cf->filters);
  672|      0|    }
  673|    411|    else if (type == FLB_CF_OUTPUT) {
  ------------------
  |  Branch (673:14): [True: 0, False: 411]
  ------------------
  674|      0|        mk_list_add(&s->_head_section, &cf->outputs);
  675|      0|    }
  676|    411|    else if (type == FLB_CF_OTHER) {
  ------------------
  |  Branch (676:14): [True: 0, False: 411]
  ------------------
  677|      0|        mk_list_add(&s->_head_section, &cf->others);
  678|      0|    }
  679|       |
  680|    411|    return s;
  681|    411|}
flb_cf_section_destroy:
  700|    411|{
  701|    411|    struct mk_list *tmp;
  702|    411|    struct mk_list *head;
  703|    411|    struct flb_cf_group *g;
  704|       |
  705|    411|    if (s->name) {
  ------------------
  |  Branch (705:9): [True: 411, False: 0]
  ------------------
  706|    411|        flb_sds_destroy(s->name);
  707|    411|        s->name = NULL;
  708|    411|    }
  709|    411|    cfl_kvlist_destroy(s->properties);
  710|       |
  711|       |    /* groups */
  712|    411|    mk_list_foreach_safe(head, tmp, &s->groups) {
  ------------------
  |  |  207|    411|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  713|      0|        g = mk_list_entry(head, struct flb_cf_group, _head);
  ------------------
  |  |  214|      0|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|      0|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|      0|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|      0|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  714|      0|        flb_cf_group_destroy(g);
  715|      0|    }
  716|       |
  717|       |    /* unlink */
  718|    411|    mk_list_del(&s->_head);
  719|       |
  720|    411|    if (s->type != FLB_CF_SERVICE) {
  ------------------
  |  Branch (720:9): [True: 0, False: 411]
  ------------------
  721|      0|        mk_list_del(&s->_head_section);
  722|      0|    }
  723|       |
  724|    411|    flb_free(s);
  725|    411|}
flb_cf_section_destroy_all:
  740|    411|{
  741|    411|    section_destroy_list(cf, &cf->sections);
  742|    411|}
flb_config_format.c:get_section_type:
  171|    411|{
  172|    411|    if (strncasecmp(name, "service", len) == 0) {
  ------------------
  |  Branch (172:9): [True: 411, False: 0]
  ------------------
  173|    411|        return FLB_CF_SERVICE;
  174|    411|    }
  175|      0|    else if (strncasecmp(name, "parser", len) == 0) {
  ------------------
  |  Branch (175:14): [True: 0, False: 0]
  ------------------
  176|      0|        return FLB_CF_PARSER;
  177|      0|    }
  178|      0|    else if (strncasecmp(name, "multiline_parser", len) == 0) {
  ------------------
  |  Branch (178:14): [True: 0, False: 0]
  ------------------
  179|      0|        return FLB_CF_MULTILINE_PARSER;
  180|      0|    }
  181|      0|    else if (strncasecmp(name, "stream_processor", len) == 0) {
  ------------------
  |  Branch (181:14): [True: 0, False: 0]
  ------------------
  182|      0|        return FLB_CF_STREAM_PROCESSOR;
  183|      0|    }
  184|      0|    else if (strncasecmp(name, "plugins", len) == 0) {
  ------------------
  |  Branch (184:14): [True: 0, False: 0]
  ------------------
  185|      0|        return FLB_CF_PLUGINS;
  186|      0|    }
  187|      0|    else if (strncasecmp(name, "upstream_servers", len) == 0) {
  ------------------
  |  Branch (187:14): [True: 0, False: 0]
  ------------------
  188|      0|        return FLB_CF_UPSTREAM_SERVERS;
  189|      0|    }
  190|      0|    else if (strncasecmp(name, "custom", len) == 0 ||
  ------------------
  |  Branch (190:14): [True: 0, False: 0]
  ------------------
  191|      0|             strncasecmp(name, "customs", len) == 0) {
  ------------------
  |  Branch (191:14): [True: 0, False: 0]
  ------------------
  192|      0|        return FLB_CF_CUSTOM;
  193|      0|    }
  194|      0|    else if (strncasecmp(name, "input", len) == 0 ||
  ------------------
  |  Branch (194:14): [True: 0, False: 0]
  ------------------
  195|      0|             strncasecmp(name, "inputs", len) == 0) {
  ------------------
  |  Branch (195:14): [True: 0, False: 0]
  ------------------
  196|      0|        return FLB_CF_INPUT;
  197|      0|    }
  198|      0|    else if (strncasecmp(name, "filter", len) == 0 ||
  ------------------
  |  Branch (198:14): [True: 0, False: 0]
  ------------------
  199|      0|             strncasecmp(name, "filters", len) == 0) {
  ------------------
  |  Branch (199:14): [True: 0, False: 0]
  ------------------
  200|      0|        return FLB_CF_FILTER;
  201|      0|    }
  202|      0|    else if (strncasecmp(name, "output", len) == 0 ||
  ------------------
  |  Branch (202:14): [True: 0, False: 0]
  ------------------
  203|      0|             strncasecmp(name, "outputs", len) == 0) {
  ------------------
  |  Branch (203:14): [True: 0, False: 0]
  ------------------
  204|      0|        return FLB_CF_OUTPUT;
  205|      0|    }
  206|       |
  207|      0|    return FLB_CF_OTHER;
  208|    411|}
flb_config_format.c:section_destroy_list:
  728|    411|{
  729|    411|    struct mk_list *tmp;
  730|    411|    struct mk_list *head;
  731|    411|    struct flb_cf_section *s;
  732|       |
  733|    411|    mk_list_foreach_safe(head, tmp, list) {
  ------------------
  |  |  207|    822|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 411, False: 411]
  |  |  ------------------
  ------------------
  734|    411|        s = mk_list_entry(head, struct flb_cf_section, _head);
  ------------------
  |  |  214|    411|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|    411|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|    411|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|    411|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  735|    411|        flb_cf_section_destroy(cf, s);
  736|    411|    }
  737|    411|}

flb_base64_encode:
   90|    399|{
   91|    399|    size_t i, n;
   92|    399|    int C1, C2, C3;
   93|    399|    unsigned char *p;
   94|       |
   95|    399|    if( slen == 0 )
  ------------------
  |  Branch (95:9): [True: 0, False: 399]
  ------------------
   96|      0|    {
   97|      0|        *olen = 0;
   98|      0|        return( 0 );
   99|      0|    }
  100|       |
  101|    399|    n = slen / 3 + ( slen % 3 != 0 );
  102|       |
  103|    399|    if( n > ( BASE64_SIZE_T_MAX - 1 ) / 4 )
  ------------------
  |  |   83|    399|#define BASE64_SIZE_T_MAX   ( (size_t) -1 ) /* SIZE_T_MAX is not standard */
  ------------------
  |  Branch (103:9): [True: 0, False: 399]
  ------------------
  104|      0|    {
  105|      0|        *olen = BASE64_SIZE_T_MAX;
  ------------------
  |  |   83|      0|#define BASE64_SIZE_T_MAX   ( (size_t) -1 ) /* SIZE_T_MAX is not standard */
  ------------------
  106|      0|        return( FLB_BASE64_ERR_BUFFER_TOO_SMALL );
  ------------------
  |  |   61|      0|#define FLB_BASE64_ERR_BUFFER_TOO_SMALL               -0x002A  /**< Output buffer too small. */
  ------------------
  107|      0|    }
  108|       |
  109|    399|    n *= 4;
  110|       |
  111|    399|    if( ( dlen < n + 1 ) || ( NULL == dst ) )
  ------------------
  |  Branch (111:9): [True: 0, False: 399]
  |  Branch (111:29): [True: 0, False: 399]
  ------------------
  112|      0|    {
  113|      0|        *olen = n + 1;
  114|      0|        return( FLB_BASE64_ERR_BUFFER_TOO_SMALL );
  ------------------
  |  |   61|      0|#define FLB_BASE64_ERR_BUFFER_TOO_SMALL               -0x002A  /**< Output buffer too small. */
  ------------------
  115|      0|    }
  116|       |
  117|    399|    n = ( slen / 3 ) * 3;
  118|       |
  119|  3.74k|    for( i = 0, p = dst; i < n; i += 3 )
  ------------------
  |  Branch (119:26): [True: 3.35k, False: 399]
  ------------------
  120|  3.35k|    {
  121|  3.35k|        C1 = *src++;
  122|  3.35k|        C2 = *src++;
  123|  3.35k|        C3 = *src++;
  124|       |
  125|  3.35k|        *p++ = base64_enc_map[(C1 >> 2) & 0x3F];
  126|  3.35k|        *p++ = base64_enc_map[(((C1 &  3) << 4) + (C2 >> 4)) & 0x3F];
  127|  3.35k|        *p++ = base64_enc_map[(((C2 & 15) << 2) + (C3 >> 6)) & 0x3F];
  128|  3.35k|        *p++ = base64_enc_map[C3 & 0x3F];
  129|  3.35k|    }
  130|       |
  131|    399|    if( i < slen )
  ------------------
  |  Branch (131:9): [True: 323, False: 76]
  ------------------
  132|    323|    {
  133|    323|        C1 = *src++;
  134|    323|        C2 = ( ( i + 1 ) < slen ) ? *src++ : 0;
  ------------------
  |  Branch (134:14): [True: 62, False: 261]
  ------------------
  135|       |
  136|    323|        *p++ = base64_enc_map[(C1 >> 2) & 0x3F];
  137|    323|        *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F];
  138|       |
  139|    323|        if( ( i + 1 ) < slen )
  ------------------
  |  Branch (139:13): [True: 62, False: 261]
  ------------------
  140|     62|             *p++ = base64_enc_map[((C2 & 15) << 2) & 0x3F];
  141|    261|        else *p++ = '=';
  142|       |
  143|    323|        *p++ = '=';
  144|    323|    }
  145|       |
  146|    399|    *olen = p - dst;
  147|    399|    *p = 0;
  148|       |
  149|    399|    return( 0 );
  150|    399|}

flb_config_init:
  199|    411|{
  200|    411|    int ret;
  201|    411|    struct flb_config *config;
  202|    411|    struct flb_cf *cf;
  203|    411|    struct flb_cf_section *section;
  204|       |
  205|    411|    config = flb_calloc(1, sizeof(struct flb_config));
  206|    411|    if (!config) {
  ------------------
  |  Branch (206:9): [True: 0, False: 411]
  ------------------
  207|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  208|      0|        return NULL;
  209|      0|    }
  210|       |
  211|    411|    MK_EVENT_ZERO(&config->ch_event);
  212|    411|    MK_EVENT_ZERO(&config->event_flush);
  213|    411|    MK_EVENT_ZERO(&config->event_shutdown);
  214|       |
  215|       |    /* is data ingestion active ? */
  216|    411|    config->is_ingestion_active = FLB_TRUE;
  ------------------
  |  |   26|    411|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    411|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  217|       |
  218|       |    /* Is the engine (event loop) actively running ? */
  219|    411|    config->is_running = FLB_TRUE;
  ------------------
  |  |   26|    411|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    411|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  220|       |
  221|       |    /* Initialize config_format context */
  222|    411|    cf = flb_cf_create();
  223|    411|    if (!cf) {
  ------------------
  |  Branch (223:9): [True: 0, False: 411]
  ------------------
  224|      0|        flb_free(config);
  225|      0|        return NULL;
  226|      0|    }
  227|    411|    config->cf_main = cf;
  228|       |
  229|    411|    section = flb_cf_section_create(cf, "service", 0);
  230|    411|    if (!section) {
  ------------------
  |  Branch (230:9): [True: 0, False: 411]
  ------------------
  231|      0|        flb_cf_destroy(cf);
  232|      0|        flb_free(config);
  233|      0|        return NULL;
  234|      0|    }
  235|       |
  236|       |    /* Flush */
  237|    411|    config->flush        = FLB_CONFIG_FLUSH_SECS;
  ------------------
  |  |   33|    411|#define FLB_CONFIG_FLUSH_SECS   1
  ------------------
  238|    411|    config->daemon       = FLB_FALSE;
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
  239|    411|    config->init_time    = time(NULL);
  240|    411|    config->kernel       = flb_kernel_info();
  241|    411|    config->verbose      = 3;
  242|    411|    config->grace        = 5;
  243|    411|    config->grace_count  = 0;
  244|    411|    config->exit_status_code = 0;
  245|       |
  246|       |    /* json */
  247|    411|    config->convert_nan_to_null = FLB_FALSE;
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
  248|       |
  249|    411|#ifdef FLB_HAVE_HTTP_SERVER
  250|    411|    config->http_ctx                     = NULL;
  251|    411|    config->http_server                  = FLB_FALSE;
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
  252|    411|    config->http_listen                  = flb_strdup(FLB_CONFIG_HTTP_LISTEN);
  ------------------
  |  |   34|    411|#define FLB_CONFIG_HTTP_LISTEN  "0.0.0.0"
  ------------------
  253|    411|    config->http_port                    = flb_strdup(FLB_CONFIG_HTTP_PORT);
  ------------------
  |  |   35|    411|#define FLB_CONFIG_HTTP_PORT    "2020"
  ------------------
  254|    411|    config->health_check                 = FLB_FALSE;
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
  255|    411|    config->hc_errors_count              = HC_ERRORS_COUNT_DEFAULT;
  ------------------
  |  |   36|    411|#define HC_ERRORS_COUNT_DEFAULT 5
  ------------------
  256|    411|    config->hc_retry_failure_count       = HC_RETRY_FAILURE_COUNTS_DEFAULT;
  ------------------
  |  |   37|    411|#define HC_RETRY_FAILURE_COUNTS_DEFAULT 5
  ------------------
  257|    411|    config->health_check_period          = HEALTH_CHECK_PERIOD;
  ------------------
  |  |   38|    411|#define HEALTH_CHECK_PERIOD 60
  ------------------
  258|    411|#endif
  259|       |
  260|    411|    config->http_proxy = getenv("HTTP_PROXY");
  261|    411|    if (flb_str_emptyval(config->http_proxy) == FLB_TRUE) {
  ------------------
  |  |   26|    411|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    411|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  |  Branch (261:9): [True: 0, False: 411]
  ------------------
  262|      0|        config->http_proxy = getenv("http_proxy");
  263|      0|        if (flb_str_emptyval(config->http_proxy) == FLB_TRUE) {
  ------------------
  |  |   26|      0|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|      0|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  |  Branch (263:13): [True: 0, False: 0]
  ------------------
  264|       |            /* Proxy should not be set when `HTTP_PROXY` or `http_proxy` are set to "" */
  265|      0|            config->http_proxy = NULL;
  266|      0|        }
  267|      0|    }
  268|    411|    config->no_proxy = getenv("NO_PROXY");
  269|    411|    if (flb_str_emptyval(config->no_proxy) == FLB_TRUE || config->http_proxy == NULL) {
  ------------------
  |  |   26|    822|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    822|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  |  Branch (269:9): [True: 0, False: 411]
  |  Branch (269:59): [True: 411, False: 0]
  ------------------
  270|    411|        config->no_proxy = getenv("no_proxy");
  271|    411|        if (flb_str_emptyval(config->no_proxy) == FLB_TRUE || config->http_proxy == NULL) {
  ------------------
  |  |   26|    822|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    822|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  |  Branch (271:13): [True: 0, False: 411]
  |  Branch (271:63): [True: 411, False: 0]
  ------------------
  272|       |            /* NoProxy  should not be set when `NO_PROXY` or `no_proxy` are set to "" or there is no Proxy. */
  273|    411|            config->no_proxy = NULL;
  274|    411|        }
  275|    411|    }
  276|       |
  277|    411|    config->cio          = NULL;
  278|    411|    config->storage_path = NULL;
  279|    411|    config->storage_input_plugin = NULL;
  280|    411|    config->storage_metrics = FLB_TRUE;
  ------------------
  |  |   26|    411|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    411|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  281|       |
  282|    411|    config->sched_cap  = FLB_SCHED_CAP;
  ------------------
  |  |   29|    411|#define FLB_SCHED_CAP            2000
  ------------------
  283|    411|    config->sched_base = FLB_SCHED_BASE;
  ------------------
  |  |   30|    411|#define FLB_SCHED_BASE           5
  ------------------
  284|       |
  285|       |    /* reload */
  286|    411|    config->ensure_thread_safety_on_hot_reloading = FLB_TRUE;
  ------------------
  |  |   26|    411|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    411|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  287|    411|    config->hot_reloaded_count = 0;
  288|    411|    config->shutdown_by_hot_reloading = FLB_FALSE;
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
  289|    411|    config->hot_reloading = FLB_FALSE;
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
  290|       |
  291|    411|#ifdef FLB_HAVE_SQLDB
  292|    411|    mk_list_init(&config->sqldb_list);
  293|    411|#endif
  294|       |
  295|       |#ifdef FLB_HAVE_LUAJIT
  296|       |    mk_list_init(&config->luajit_list);
  297|       |#endif
  298|       |
  299|       |#ifdef FLB_HAVE_STREAM_PROCESSOR
  300|       |    flb_slist_create(&config->stream_processor_tasks);
  301|       |    config->stream_processor_str_conv = FLB_TRUE;
  302|       |#endif
  303|       |
  304|    411|    flb_slist_create(&config->external_plugins);
  305|       |
  306|       |    /* Set default coroutines stack size */
  307|    411|    config->coro_stack_size = FLB_CORO_STACK_SIZE_BYTE;
  ------------------
  |  |   77|    411|#define FLB_CORO_STACK_SIZE_BYTE      ((3 * STACK_FACTOR * PTHREAD_STACK_MIN) / 2)
  |  |  ------------------
  |  |  |  |   71|    411|#define STACK_FACTOR 1
  |  |  ------------------
  ------------------
  308|    411|    if (config->coro_stack_size < getpagesize()) {
  ------------------
  |  Branch (308:9): [True: 0, False: 411]
  ------------------
  309|      0|        flb_info("[config] changing coro_stack_size from %u to %u bytes",
  ------------------
  |  |  188|      0|    if (flb_log_check(FLB_LOG_INFO))                                 \
  |  |  ------------------
  |  |  |  |   42|      0|#define FLB_LOG_INFO    3  /* default */
  |  |  ------------------
  |  |  |  Branch (188:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  189|      0|        flb_log_print(FLB_LOG_INFO, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   42|      0|#define FLB_LOG_INFO    3  /* default */
  |  |  ------------------
  ------------------
  310|      0|                 config->coro_stack_size, getpagesize());
  311|      0|        config->coro_stack_size = (unsigned int)getpagesize();
  312|      0|    }
  313|       |
  314|       |    /* collectors */
  315|    411|    pthread_mutex_init(&config->collectors_mutex, NULL);
  316|       |
  317|       |    /* Initialize linked lists */
  318|    411|    mk_list_init(&config->processor_plugins);
  319|    411|    mk_list_init(&config->custom_plugins);
  320|    411|    mk_list_init(&config->in_plugins);
  321|    411|    mk_list_init(&config->parser_plugins);
  322|    411|    mk_list_init(&config->filter_plugins);
  323|    411|    mk_list_init(&config->out_plugins);
  324|    411|    mk_list_init(&config->customs);
  325|    411|    mk_list_init(&config->inputs);
  326|    411|    mk_list_init(&config->parsers);
  327|    411|    mk_list_init(&config->filters);
  328|    411|    mk_list_init(&config->outputs);
  329|    411|    mk_list_init(&config->proxies);
  330|    411|    mk_list_init(&config->workers);
  331|    411|    mk_list_init(&config->upstreams);
  332|    411|    mk_list_init(&config->downstreams);
  333|    411|    mk_list_init(&config->cmetrics);
  334|    411|    mk_list_init(&config->cf_parsers_list);
  335|       |
  336|    411|    memset(&config->tasks_map, '\0', sizeof(config->tasks_map));
  337|       |
  338|       |    /* Initialize multiline-parser list. We need this here, because from now
  339|       |     * on we use flb_config_exit to cleanup the config, which requires
  340|       |     * the config->multiline_parsers list to be initialized. */
  341|    411|    mk_list_init(&config->multiline_parsers);
  342|       |
  343|       |    /* Environment */
  344|    411|    config->env = flb_env_create();
  345|    411|    if (config->env == NULL) {
  ------------------
  |  Branch (345:9): [True: 0, False: 411]
  ------------------
  346|      0|        flb_error("[config] environment creation failed");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  347|      0|        flb_config_exit(config);
  348|      0|        return NULL;
  349|      0|    }
  350|       |
  351|       |    /* Multiline core */
  352|    411|    ret = flb_ml_init(config);
  353|    411|    if (ret == -1) {
  ------------------
  |  Branch (353:9): [True: 0, False: 411]
  ------------------
  354|      0|        flb_error("[config] multiline core initialization failed");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  355|      0|        flb_config_exit(config);
  356|      0|        return NULL;
  357|      0|    }
  358|       |
  359|       |    /* Register static plugins */
  360|    411|    ret = flb_plugins_register(config);
  361|    411|    if (ret == -1) {
  ------------------
  |  Branch (361:9): [True: 0, False: 411]
  ------------------
  362|      0|        flb_error("[config] plugins registration failed");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  363|      0|        flb_config_exit(config);
  364|      0|        return NULL;
  365|      0|    }
  366|       |
  367|       |    /* Create environment for dynamic plugins */
  368|    411|    config->dso_plugins = flb_plugin_create();
  369|       |
  370|       |    /* Ignoring SIGPIPE on Windows (scary) */
  371|    411|#ifndef _WIN32
  372|       |    /* Ignore SIGPIPE */
  373|    411|    signal(SIGPIPE, SIG_IGN);
  374|    411|#endif
  375|       |
  376|       |    /* Prepare worker interface */
  377|    411|    flb_worker_init(config);
  378|       |
  379|    411|#ifdef FLB_HAVE_REGEX
  380|       |    /* Regex support */
  381|    411|    flb_regex_init();
  382|    411|#endif
  383|       |
  384|    411|    return config;
  385|    411|}
flb_config_exit:
  388|    411|{
  389|    411|    struct mk_list *tmp;
  390|    411|    struct mk_list *head;
  391|    411|    struct flb_cf *cf;
  392|       |
  393|    411|    if (config->log) {
  ------------------
  |  Branch (393:9): [True: 0, False: 411]
  ------------------
  394|      0|        flb_log_destroy(config->log, config);
  395|      0|    }
  396|       |
  397|    411|    if (config->log_file) {
  ------------------
  |  Branch (397:9): [True: 0, False: 411]
  ------------------
  398|      0|        flb_free(config->log_file);
  399|      0|    }
  400|       |
  401|    411|    if (config->parsers_file) {
  ------------------
  |  Branch (401:9): [True: 0, False: 411]
  ------------------
  402|      0|        flb_free(config->parsers_file);
  403|      0|    }
  404|       |
  405|    411|    if (config->plugins_file) {
  ------------------
  |  Branch (405:9): [True: 0, False: 411]
  ------------------
  406|      0|        flb_free(config->plugins_file);
  407|      0|    }
  408|       |
  409|    411|    if (config->kernel) {
  ------------------
  |  Branch (409:9): [True: 411, False: 0]
  ------------------
  410|    411|        flb_kernel_destroy(config->kernel);
  411|    411|    }
  412|       |
  413|       |    /* release resources */
  414|    411|    if (config->ch_event.fd) {
  ------------------
  |  Branch (414:9): [True: 411, False: 0]
  ------------------
  415|    411|        mk_event_closesocket(config->ch_event.fd);
  ------------------
  |  |   99|    411|    #define mk_event_closesocket(s) close(s)
  ------------------
  416|    411|    }
  417|       |
  418|       |    /* Pipe */
  419|    411|    if (config->ch_data[0]) {
  ------------------
  |  Branch (419:9): [True: 0, False: 411]
  ------------------
  420|      0|        flb_pipe_destroy(config->ch_data);
  421|      0|    }
  422|       |
  423|       |    /* Channel manager */
  424|    411|    if (config->ch_manager[0] > 0) {
  ------------------
  |  Branch (424:9): [True: 0, False: 411]
  ------------------
  425|      0|        mk_event_closesocket(config->ch_manager[0]);
  ------------------
  |  |   99|      0|    #define mk_event_closesocket(s) close(s)
  ------------------
  426|      0|        if (config->ch_manager[0] != config->ch_manager[1]) {
  ------------------
  |  Branch (426:13): [True: 0, False: 0]
  ------------------
  427|      0|            mk_event_closesocket(config->ch_manager[1]);
  ------------------
  |  |   99|      0|    #define mk_event_closesocket(s) close(s)
  ------------------
  428|      0|        }
  429|      0|    }
  430|       |
  431|       |    /* Channel notifications */
  432|    411|    if (config->ch_notif[0] > 0) {
  ------------------
  |  Branch (432:9): [True: 0, False: 411]
  ------------------
  433|      0|        mk_event_closesocket(config->ch_notif[0]);
  ------------------
  |  |   99|      0|    #define mk_event_closesocket(s) close(s)
  ------------------
  434|      0|        if (config->ch_notif[0] != config->ch_notif[1]) {
  ------------------
  |  Branch (434:13): [True: 0, False: 0]
  ------------------
  435|      0|            mk_event_closesocket(config->ch_notif[1]);
  ------------------
  |  |   99|      0|    #define mk_event_closesocket(s) close(s)
  ------------------
  436|      0|        }
  437|      0|    }
  438|       |
  439|    411|    if (config->env) {
  ------------------
  |  Branch (439:9): [True: 411, False: 0]
  ------------------
  440|    411|        flb_env_destroy(config->env);
  441|    411|    }
  442|       |
  443|       |    /* Program name */
  444|    411|    if (config->program_name) {
  ------------------
  |  Branch (444:9): [True: 0, False: 411]
  ------------------
  445|      0|        flb_sds_destroy(config->program_name);
  446|      0|    }
  447|       |
  448|       |    /* Conf path */
  449|    411|    if (config->conf_path) {
  ------------------
  |  Branch (449:9): [True: 0, False: 411]
  ------------------
  450|      0|        flb_free(config->conf_path);
  451|      0|    }
  452|       |
  453|       |    /* conf path file (file system config path) */
  454|    411|    if (config->conf_path_file) {
  ------------------
  |  Branch (454:9): [True: 0, False: 411]
  ------------------
  455|      0|        flb_sds_destroy(config->conf_path_file);
  456|      0|    }
  457|       |
  458|       |    /* Working directory */
  459|    411|    if (config->workdir) {
  ------------------
  |  Branch (459:9): [True: 0, False: 411]
  ------------------
  460|      0|        flb_free(config->workdir);
  461|      0|    }
  462|       |
  463|       |    /* Destroy any DSO context */
  464|    411|    if (config->dso_plugins) {
  ------------------
  |  Branch (464:9): [True: 411, False: 0]
  ------------------
  465|    411|        flb_plugin_destroy(config->dso_plugins);
  466|    411|    }
  467|       |
  468|       |    /* Workers */
  469|    411|    flb_worker_exit(config);
  470|       |
  471|       |    /* Event flush */
  472|    411|    if (config->evl) {
  ------------------
  |  Branch (472:9): [True: 0, False: 411]
  ------------------
  473|      0|        if (config->event_flush.status != MK_EVENT_NONE) {
  ------------------
  |  |   52|      0|#define MK_EVENT_NONE            1    /* nothing */
  ------------------
  |  Branch (473:13): [True: 0, False: 0]
  ------------------
  474|      0|            mk_event_timeout_destroy(config->evl, &config->event_flush);
  475|      0|        }
  476|      0|    }
  477|       |
  478|       |    /* Release scheduler */
  479|    411|    if (config->sched) {
  ------------------
  |  Branch (479:9): [True: 0, False: 411]
  ------------------
  480|      0|        flb_sched_destroy(config->sched);
  481|      0|    }
  482|       |
  483|    411|#ifdef FLB_HAVE_HTTP_SERVER
  484|    411|    if (config->http_listen) {
  ------------------
  |  Branch (484:9): [True: 411, False: 0]
  ------------------
  485|    411|        flb_free(config->http_listen);
  486|    411|    }
  487|       |
  488|    411|    if (config->http_port) {
  ------------------
  |  Branch (488:9): [True: 411, False: 0]
  ------------------
  489|    411|        flb_free(config->http_port);
  490|    411|    }
  491|    411|#endif
  492|       |
  493|    411|#ifdef FLB_HAVE_PARSER
  494|       |    /* parsers */
  495|    411|    flb_parser_exit(config);
  496|    411|#endif
  497|       |
  498|    411|    if (config->dns_mode) {
  ------------------
  |  Branch (498:9): [True: 0, False: 411]
  ------------------
  499|      0|        flb_free(config->dns_mode);
  500|      0|    }
  501|    411|    if (config->dns_resolver) {
  ------------------
  |  Branch (501:9): [True: 0, False: 411]
  ------------------
  502|      0|        flb_free(config->dns_resolver);
  503|      0|    }
  504|       |
  505|    411|    if (config->storage_path) {
  ------------------
  |  Branch (505:9): [True: 0, False: 411]
  ------------------
  506|      0|        flb_free(config->storage_path);
  507|      0|    }
  508|    411|    if (config->storage_sync) {
  ------------------
  |  Branch (508:9): [True: 0, False: 411]
  ------------------
  509|      0|        flb_free(config->storage_sync);
  510|      0|    }
  511|    411|    if (config->storage_bl_mem_limit) {
  ------------------
  |  Branch (511:9): [True: 0, False: 411]
  ------------------
  512|      0|        flb_free(config->storage_bl_mem_limit);
  513|      0|    }
  514|       |
  515|       |#ifdef FLB_HAVE_STREAM_PROCESSOR
  516|       |    if (config->stream_processor_file) {
  517|       |        flb_free(config->stream_processor_file);
  518|       |    }
  519|       |
  520|       |    flb_slist_destroy(&config->stream_processor_tasks);
  521|       |#endif
  522|       |
  523|    411|    flb_slist_destroy(&config->external_plugins);
  524|       |
  525|    411|    if (config->evl) {
  ------------------
  |  Branch (525:9): [True: 0, False: 411]
  ------------------
  526|      0|        mk_event_loop_destroy(config->evl);
  527|      0|    }
  528|    411|    if (config->evl_bktq) {
  ------------------
  |  Branch (528:9): [True: 0, False: 411]
  ------------------
  529|      0|        flb_bucket_queue_destroy(config->evl_bktq);
  530|      0|    }
  531|       |
  532|    411|    flb_plugins_unregister(config);
  533|       |
  534|    411|    if (config->cf_main) {
  ------------------
  |  Branch (534:9): [True: 411, False: 0]
  ------------------
  535|    411|        flb_cf_destroy(config->cf_main);
  536|    411|    }
  537|       |
  538|       |    /* cf_opts' lifetime should differ from config's lifetime.
  539|       |     * This member should be storing just for the cf_opts reference.
  540|       |     * Don't destroy it here.
  541|       |     */
  542|       |
  543|       |    /* remove parsers */
  544|    411|    mk_list_foreach_safe(head, tmp, &config->cf_parsers_list) {
  ------------------
  |  |  207|    411|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  545|      0|        cf = mk_list_entry(head, struct flb_cf, _head);
  ------------------
  |  |  214|      0|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|      0|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|      0|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|      0|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  546|      0|        mk_list_del(&cf->_head);
  547|      0|        flb_cf_destroy(cf);
  548|      0|    }
  549|       |
  550|    411|    flb_free(config);
  551|    411|}

flb_connection_setup:
   13|    411|{
   14|    411|    assert(connection != NULL);
   15|       |
   16|    411|    memset(connection, 0, sizeof(struct flb_connection));
   17|       |
   18|    411|    connection->fd                      = socket;
   19|    411|    connection->type                    = type;
   20|    411|    connection->stream                  = stream;
   21|    411|    connection->net_error               = -1;
   22|    411|    connection->evl                     = event_loop;
   23|    411|    connection->coroutine               = coroutine;
   24|    411|    connection->tls_session             = NULL;
   25|    411|    connection->ts_created              = time(NULL);
   26|    411|    connection->ts_assigned             = time(NULL);
   27|    411|    connection->busy_flag               = FLB_FALSE;
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
   28|    411|    connection->shutdown_flag           = FLB_FALSE;
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
   29|       |
   30|    411|    connection->net = &connection->stream->net;
   31|       |
   32|    411|    assert(connection->net != NULL);
   33|       |
   34|    411|    MK_EVENT_ZERO(&connection->event);
   35|       |
   36|    411|    flb_connection_unset_connection_timeout(connection);
   37|    411|    flb_connection_unset_io_timeout(connection);
   38|       |
   39|    411|    return 0;
   40|    411|}
flb_connection_create:
   47|    411|{
   48|    411|    struct flb_connection *connection;
   49|    411|    int                    result;
   50|       |
   51|    411|    connection = flb_calloc(1, sizeof(struct flb_connection));
   52|       |
   53|    411|    if (connection == NULL) {
  ------------------
  |  Branch (53:9): [True: 0, False: 411]
  ------------------
   54|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
   55|      0|    }
   56|    411|    else {
   57|    411|        result = flb_connection_setup(connection,
   58|    411|                                      socket,
   59|    411|                                      type,
   60|    411|                                      stream,
   61|    411|                                      event_loop,
   62|    411|                                      coroutine);
   63|       |
   64|    411|        if (result != 0) {
  ------------------
  |  Branch (64:13): [True: 0, False: 411]
  ------------------
   65|      0|            flb_connection_destroy(connection);
   66|       |
   67|      0|            connection = NULL;
   68|      0|        }
   69|    411|        else {
   70|    411|            connection->dynamically_allocated = FLB_TRUE;
  ------------------
  |  |   26|    411|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    411|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
   71|    411|        }
   72|    411|    }
   73|       |
   74|    411|    return connection;
   75|    411|}
flb_connection_destroy:
   78|    411|{
   79|    411|    assert(connection != NULL);
   80|       |
   81|    411|    if (connection->dynamically_allocated) {
  ------------------
  |  Branch (81:9): [True: 411, False: 0]
  ------------------
   82|    411|        flb_free(connection);
   83|    411|    }
   84|    411|}
flb_connection_get_flags:
  198|    810|{
  199|    810|    return flb_stream_get_flags(connection->stream);
  200|    810|}
flb_connection_unset_connection_timeout:
  230|    411|{
  231|    411|    assert(connection != NULL);
  232|       |
  233|    411|    connection->ts_connect_start = -1;
  234|    411|    connection->ts_connect_timeout = -1;
  235|    411|}
flb_connection_unset_io_timeout:
  253|    411|{
  254|    411|    assert(connection != NULL);
  255|       |
  256|    411|    connection->ts_io_timeout = -1;
  257|    411|}

flb_coro_get:
   46|    810|{
   47|    810|    struct flb_coro *coro;
   48|       |
   49|    810|    coro = FLB_TLS_GET(flb_coro_key);
  ------------------
  |  |   34|    810|#define FLB_TLS_GET(key)           key
  ------------------
   50|    810|    return coro;
   51|    810|}

flb_env_create:
   70|    411|{
   71|    411|    struct flb_env *env;
   72|    411|    struct flb_hash_table *ht;
   73|       |
   74|    411|    env = flb_malloc(sizeof(struct flb_env));
   75|    411|    if (!env) {
  ------------------
  |  Branch (75:9): [True: 0, False: 411]
  ------------------
   76|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
   77|      0|        return NULL;
   78|      0|    }
   79|       |
   80|       |    /* Create the hash-table */
   81|    411|    ht = flb_hash_table_create(FLB_HASH_TABLE_EVICT_NONE, FLB_ENV_SIZE, -1);
  ------------------
  |  |   32|    411|#define FLB_HASH_TABLE_EVICT_NONE       0
  ------------------
                  ht = flb_hash_table_create(FLB_HASH_TABLE_EVICT_NONE, FLB_ENV_SIZE, -1);
  ------------------
  |  |   26|    411|#define FLB_ENV_SIZE 64
  ------------------
   82|    411|    if (!ht) {
  ------------------
  |  Branch (82:9): [True: 0, False: 411]
  ------------------
   83|      0|        flb_free(env);
   84|      0|        return NULL;
   85|      0|    }
   86|       |
   87|    411|    env->warn_unused = FLB_TRUE;
  ------------------
  |  |   26|    411|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    411|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
   88|    411|    env->ht = ht;
   89|    411|    env_preset(env);
   90|       |
   91|    411|    return env;
   92|    411|}
flb_env_destroy:
   95|    411|{
   96|    411|    flb_hash_table_destroy(env->ht);
   97|    411|    flb_free(env);
   98|    411|}
flb_env.c:env_preset:
   43|    411|{
   44|    411|    int ret;
   45|    411|    char *buf;
   46|    411|    char tmp[512];
   47|       |
   48|       |    /*
   49|       |     * ${HOSTNAME} this variable is very useful to identify records,
   50|       |     * despite this variable is recognized by the Shell, that does not
   51|       |     * means that is exposed as a real environment variable, e.g:
   52|       |     *
   53|       |     *  1. $ echo $HOSTNAME
   54|       |     *     monotop
   55|       |     *  2. $ env | grep HOSTNAME
   56|       |     *     (nothing)
   57|       |     */
   58|    411|    buf = getenv("HOSTNAME");
   59|    411|    if (!buf) {
  ------------------
  |  Branch (59:9): [True: 0, False: 411]
  ------------------
   60|      0|        ret = gethostname(tmp, sizeof(tmp) - 1);
   61|      0|        if (ret == 0) {
  ------------------
  |  Branch (61:13): [True: 0, False: 0]
  ------------------
   62|      0|            flb_env_set(env, "HOSTNAME", tmp);
   63|      0|        }
   64|      0|    }
   65|       |
   66|    411|    return 0;
   67|    411|}

flb_hash_table_create:
  103|    411|{
  104|    411|    int i;
  105|    411|    struct flb_hash_table_chain *tmp;
  106|    411|    struct flb_hash_table *ht;
  107|       |
  108|    411|    if (size <= 0) {
  ------------------
  |  Branch (108:9): [True: 0, False: 411]
  ------------------
  109|      0|        return NULL;
  110|      0|    }
  111|       |
  112|    411|    ht = flb_calloc(1, sizeof(struct flb_hash_table));
  113|    411|    if (!ht) {
  ------------------
  |  Branch (113:9): [True: 0, False: 411]
  ------------------
  114|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  115|      0|        return NULL;
  116|      0|    }
  117|       |
  118|    411|    mk_list_init(&ht->entries);
  119|    411|    ht->evict_mode = evict_mode;
  120|    411|    ht->max_entries = max_entries;
  121|    411|    ht->size = size;
  122|    411|    ht->total_count = 0;
  123|    411|    ht->cache_ttl = 0;
  124|    411|    ht->case_sensitivity = FLB_TRUE;
  ------------------
  |  |   26|    411|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    411|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  125|    411|    ht->table = flb_calloc(1, sizeof(struct flb_hash_table_chain) * size);
  126|    411|    if (!ht->table) {
  ------------------
  |  Branch (126:9): [True: 0, False: 411]
  ------------------
  127|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  128|      0|        flb_free(ht);
  129|      0|        return NULL;
  130|      0|    }
  131|       |
  132|       |    /* Initialize chains list head */
  133|  26.7k|    for (i = 0; i < size; i++) {
  ------------------
  |  Branch (133:17): [True: 26.3k, False: 411]
  ------------------
  134|  26.3k|        tmp = &ht->table[i];
  135|  26.3k|        tmp->count = 0;
  136|  26.3k|        mk_list_init(&tmp->chains);
  137|  26.3k|    }
  138|       |
  139|    411|    return ht;
  140|    411|}
flb_hash_table_destroy:
  201|    411|{
  202|    411|    int i;
  203|    411|    struct mk_list *tmp;
  204|    411|    struct mk_list *head;
  205|    411|    struct flb_hash_table_entry *entry;
  206|    411|    struct flb_hash_table_chain *table;
  207|       |
  208|  26.7k|    for (i = 0; i < ht->size; i++) {
  ------------------
  |  Branch (208:17): [True: 26.3k, False: 411]
  ------------------
  209|  26.3k|        table = &ht->table[i];
  210|  26.3k|        mk_list_foreach_safe(head, tmp, &table->chains) {
  ------------------
  |  |  207|  26.3k|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 0, False: 26.3k]
  |  |  ------------------
  ------------------
  211|      0|            entry = mk_list_entry(head, struct flb_hash_table_entry, _head);
  ------------------
  |  |  214|      0|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|      0|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|      0|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|      0|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  212|      0|            flb_hash_table_entry_free(ht, entry);
  213|      0|        }
  214|  26.3k|    }
  215|       |
  216|    411|    flb_free(ht->table);
  217|    411|    flb_free(ht);
  218|    411|}

flb_http_strip_port_from_host:
   63|    399|{
   64|    399|    struct mk_list *head;
   65|    399|    struct flb_kv *kv;
   66|    399|    char *out_host;
   67|    399|    struct flb_upstream *u;
   68|       |
   69|    399|    u = c->u_conn->upstream;
   70|       |
   71|    399|    if (!c->host) {
  ------------------
  |  Branch (71:9): [True: 0, False: 399]
  ------------------
   72|      0|        if (!u->proxied_host) {
  ------------------
  |  Branch (72:13): [True: 0, False: 0]
  ------------------
   73|      0|            out_host = u->tcp_host;
   74|      0|        } else {
   75|      0|            out_host = u->proxied_host;
   76|      0|        }
   77|    399|    } else {
   78|    399|        out_host = (char *) c->host;
   79|    399|    }
   80|       |
   81|    399|    mk_list_foreach(head, &c->headers) {
  ------------------
  |  |  205|    399|#define mk_list_foreach(curr, head) for( curr = (head)->next; curr != (head); curr = curr->next )
  |  |  ------------------
  |  |  |  Branch (205:63): [True: 399, False: 0]
  |  |  ------------------
  ------------------
   82|    399|        kv = mk_list_entry(head, struct flb_kv, _head);
  ------------------
  |  |  214|    399|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|    399|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|    399|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|    399|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
   83|    399|        if (strcasecmp("Host", kv->key) == 0) {
  ------------------
  |  Branch (83:13): [True: 399, False: 0]
  ------------------
   84|    399|            flb_sds_destroy(kv->val);
   85|    399|            kv->val = NULL;
   86|    399|            kv->val = flb_sds_create(out_host);
   87|    399|            if (!kv->val) {
  ------------------
  |  Branch (87:17): [True: 0, False: 399]
  ------------------
   88|      0|                flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
   89|      0|                return -1;
   90|      0|            }
   91|    399|            return 0;
   92|    399|        }
   93|    399|    }
   94|       |
   95|      0|    return -1;
   96|    399|}
flb_http_allow_duplicated_headers:
   99|    399|{
  100|    399|    if (allow != FLB_TRUE && allow != FLB_FALSE) {
  ------------------
  |  |   26|    798|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    798|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
                  if (allow != FLB_TRUE && allow != FLB_FALSE) {
  ------------------
  |  |   25|    399|#define FLB_FALSE  0
  ------------------
  |  Branch (100:9): [True: 399, False: 0]
  |  Branch (100:30): [True: 0, False: 399]
  ------------------
  101|      0|        return -1;
  102|      0|    }
  103|       |
  104|    399|    c->allow_dup_headers = allow;
  105|    399|    return 0;
  106|    399|}
fuzz_process_data:
  491|    399|int fuzz_process_data(struct flb_http_client *c) {
  492|    399|	return process_data(c);
  493|    399|}
fuzz_check_connection:
  496|    399|int fuzz_check_connection(struct flb_http_client *c) {
  497|    399|    return check_connection(c);
  498|    399|}
create_http_client:
  645|    822|{
  646|    822|    int ret;
  647|    822|    char *p;
  648|    822|    char *buf = NULL;
  649|    822|    char *str_method = NULL;
  650|    822|    char *fmt_plain =                           \
  651|    822|        "%s %s HTTP/1.%i\r\n";
  652|    822|    char *fmt_proxy =                           \
  653|    822|        "%s http://%s:%i%s HTTP/1.%i\r\n"
  654|    822|        "Proxy-Connection: KeepAlive\r\n";
  655|       |    // TODO: IPv6 should have the format of [ip]:port
  656|    822|    char *fmt_connect =                           \
  657|    822|        "%s %s:%i HTTP/1.%i\r\n"
  658|    822|        "Proxy-Connection: KeepAlive\r\n";
  659|       |
  660|    822|    struct flb_http_client *c;
  661|       |
  662|    822|    switch (method) {
  ------------------
  |  Branch (662:13): [True: 222, False: 600]
  ------------------
  663|    102|    case FLB_HTTP_GET:
  ------------------
  |  |   47|    102|#define FLB_HTTP_GET         0
  ------------------
  |  Branch (663:5): [True: 102, False: 720]
  ------------------
  664|    102|        str_method = "GET";
  665|    102|        break;
  666|      2|    case FLB_HTTP_POST:
  ------------------
  |  |   48|      2|#define FLB_HTTP_POST        1
  ------------------
  |  Branch (666:5): [True: 2, False: 820]
  ------------------
  667|      2|        str_method = "POST";
  668|      2|        break;
  669|      1|    case FLB_HTTP_PUT:
  ------------------
  |  |   49|      1|#define FLB_HTTP_PUT         2
  ------------------
  |  Branch (669:5): [True: 1, False: 821]
  ------------------
  670|      1|        str_method = "PUT";
  671|      1|        break;
  672|      1|    case FLB_HTTP_DELETE:
  ------------------
  |  |   53|      1|#define FLB_HTTP_DELETE      6
  ------------------
  |  Branch (672:5): [True: 1, False: 821]
  ------------------
  673|      1|        str_method = "DELETE";
  674|      1|        break;
  675|      1|    case FLB_HTTP_HEAD:
  ------------------
  |  |   50|      1|#define FLB_HTTP_HEAD        3
  ------------------
  |  Branch (675:5): [True: 1, False: 821]
  ------------------
  676|      1|        str_method = "HEAD";
  677|      1|        break;
  678|    493|    case FLB_HTTP_CONNECT:
  ------------------
  |  |   51|    493|#define FLB_HTTP_CONNECT     4
  ------------------
  |  Branch (678:5): [True: 493, False: 329]
  ------------------
  679|    493|        str_method = "CONNECT";
  680|    493|        break;
  681|      0|    case FLB_HTTP_PATCH:
  ------------------
  |  |   52|      0|#define FLB_HTTP_PATCH       5
  ------------------
  |  Branch (681:5): [True: 0, False: 822]
  ------------------
  682|      0|        str_method = "PATCH";
  683|      0|        break;
  684|    822|    };
  685|       |
  686|    822|    buf = flb_calloc(1, FLB_HTTP_BUF_SIZE);
  ------------------
  |  |   42|    822|#define FLB_HTTP_BUF_SIZE        2048
  ------------------
  687|    822|    if (!buf) {
  ------------------
  |  Branch (687:9): [True: 0, False: 822]
  ------------------
  688|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  689|      0|        return NULL;
  690|      0|    }
  691|       |
  692|       |    /* FIXME: handler for HTTPS proxy */
  693|    822|    if (proxy) {
  ------------------
  |  Branch (693:9): [True: 12, False: 810]
  ------------------
  694|     12|        flb_debug("[http_client] using http_proxy %s for header", proxy);
  ------------------
  |  |  197|     12|    if (flb_log_check(FLB_LOG_DEBUG))                               \
  |  |  ------------------
  |  |  |  |   43|     12|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  |  |  |  Branch (197:9): [True: 0, False: 12]
  |  |  ------------------
  |  |  198|     12|        flb_log_print(FLB_LOG_DEBUG, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  ------------------
  695|     12|        ret = snprintf(buf, FLB_HTTP_BUF_SIZE,
  ------------------
  |  |   42|     12|#define FLB_HTTP_BUF_SIZE        2048
  ------------------
  696|     12|                       fmt_proxy,
  697|     12|                       str_method,
  698|     12|                       host,
  699|     12|                       port,
  700|     12|                       uri,
  701|     12|                       flags & FLB_HTTP_10 ? 0 : 1);
  ------------------
  |  |   56|     12|#define FLB_HTTP_10          1
  ------------------
  |  Branch (701:24): [True: 0, False: 12]
  ------------------
  702|     12|    }
  703|    810|    else if (method == FLB_HTTP_CONNECT) {
  ------------------
  |  |   51|    810|#define FLB_HTTP_CONNECT     4
  ------------------
  |  Branch (703:14): [True: 493, False: 317]
  ------------------
  704|    493|        flb_debug("[http_client] using HTTP CONNECT for proxy: proxy host %s, proxy port %i", host, port);
  ------------------
  |  |  197|    493|    if (flb_log_check(FLB_LOG_DEBUG))                               \
  |  |  ------------------
  |  |  |  |   43|    493|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  |  |  |  Branch (197:9): [True: 0, False: 493]
  |  |  ------------------
  |  |  198|    493|        flb_log_print(FLB_LOG_DEBUG, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  ------------------
  705|    493|        ret = snprintf(buf, FLB_HTTP_BUF_SIZE,
  ------------------
  |  |   42|    493|#define FLB_HTTP_BUF_SIZE        2048
  ------------------
  706|    493|                       fmt_connect,
  707|    493|                       str_method,
  708|    493|                       host,
  709|    493|                       port,
  710|    493|                       flags & FLB_HTTP_10 ? 0 : 1);
  ------------------
  |  |   56|    493|#define FLB_HTTP_10          1
  ------------------
  |  Branch (710:24): [True: 0, False: 493]
  ------------------
  711|    493|    }
  712|    317|    else {
  713|    317|        flb_debug("[http_client] not using http_proxy for header");
  ------------------
  |  |  197|    317|    if (flb_log_check(FLB_LOG_DEBUG))                               \
  |  |  ------------------
  |  |  |  |   43|    317|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  |  |  |  Branch (197:9): [True: 0, False: 317]
  |  |  ------------------
  |  |  198|    317|        flb_log_print(FLB_LOG_DEBUG, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  ------------------
  714|    317|        ret = snprintf(buf, FLB_HTTP_BUF_SIZE,
  ------------------
  |  |   42|    317|#define FLB_HTTP_BUF_SIZE        2048
  ------------------
  715|    317|                       fmt_plain,
  716|    317|                       str_method,
  717|    317|                       uri,
  718|    317|                       flags & FLB_HTTP_10 ? 0 : 1);
  ------------------
  |  |   56|    317|#define FLB_HTTP_10          1
  ------------------
  |  Branch (718:24): [True: 0, False: 317]
  ------------------
  719|    317|    }
  720|       |
  721|    822|    if (ret == -1) {
  ------------------
  |  Branch (721:9): [True: 0, False: 822]
  ------------------
  722|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  723|      0|        flb_free(buf);
  724|      0|        return NULL;
  725|      0|    }
  726|       |
  727|    822|    c = flb_calloc(1, sizeof(struct flb_http_client));
  728|    822|    if (!c) {
  ------------------
  |  Branch (728:9): [True: 0, False: 822]
  ------------------
  729|      0|        flb_free(buf);
  730|      0|        return NULL;
  731|      0|    }
  732|       |
  733|    822|    c->u_conn      = u_conn;
  734|    822|    c->method      = method;
  735|    822|    c->uri         = uri;
  736|    822|    c->host        = host;
  737|    822|    c->port        = port;
  738|    822|    c->header_buf  = buf;
  739|    822|    c->header_size = FLB_HTTP_BUF_SIZE;
  ------------------
  |  |   42|    822|#define FLB_HTTP_BUF_SIZE        2048
  ------------------
  740|    822|    c->header_len  = ret;
  741|    822|    c->flags       = flags;
  742|    822|    c->allow_dup_headers = FLB_TRUE;
  ------------------
  |  |   26|    822|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    822|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  743|    822|    mk_list_init(&c->headers);
  744|       |
  745|       |    /* Check if we have a query string */
  746|    822|    p = strchr(uri, '?');
  747|    822|    if (p) {
  ------------------
  |  Branch (747:9): [True: 75, False: 747]
  ------------------
  748|     75|        p++;
  749|     75|        c->query_string = p;
  750|     75|    }
  751|       |
  752|       |    /* Response */
  753|    822|    c->resp.content_length = -1;
  754|    822|    c->resp.connection_close = -1;
  755|       |
  756|    822|    if (body && body_len > 0) {
  ------------------
  |  Branch (756:9): [True: 0, False: 822]
  |  Branch (756:17): [True: 0, False: 0]
  ------------------
  757|      0|        c->body_buf = body;
  758|      0|        c->body_len = body_len;
  759|      0|    }
  760|       |
  761|       |    /* 'Read' buffer size */
  762|    822|    c->resp.data = flb_malloc(FLB_HTTP_DATA_SIZE_MAX);
  ------------------
  |  |   43|    822|#define FLB_HTTP_DATA_SIZE_MAX   4096
  ------------------
  763|    822|    if (!c->resp.data) {
  ------------------
  |  Branch (763:9): [True: 0, False: 822]
  ------------------
  764|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  765|      0|        flb_http_client_destroy(c);
  766|      0|        return NULL;
  767|      0|    }
  768|    822|    c->resp.data[0] = '\0';
  769|    822|    c->resp.data_len  = 0;
  770|    822|    c->resp.data_size = FLB_HTTP_DATA_SIZE_MAX;
  ------------------
  |  |   43|    822|#define FLB_HTTP_DATA_SIZE_MAX   4096
  ------------------
  771|    822|    c->resp.data_size_max = FLB_HTTP_DATA_SIZE_MAX;
  ------------------
  |  |   43|    822|#define FLB_HTTP_DATA_SIZE_MAX   4096
  ------------------
  772|       |
  773|       |    /* Tests */
  774|    822|    c->test_mode = FLB_FALSE;
  ------------------
  |  |   25|    822|#define FLB_FALSE  0
  ------------------
  775|    822|    c->test_response.callback = NULL;
  776|       |
  777|    822|    return c;
  778|    822|}
flb_http_client:
  805|    822|{
  806|    822|    int ret;
  807|    822|    struct flb_http_client *c;
  808|       |
  809|    822|    c = create_http_client(u_conn, method, uri,
  810|    822|                           body, body_len,
  811|    822|                           host, port,
  812|    822|                           proxy, flags);
  813|       |
  814|    822|    if (!c) {
  ------------------
  |  Branch (814:9): [True: 0, False: 822]
  ------------------
  815|      0|        return NULL;
  816|      0|    }
  817|       |
  818|       |    /* Is Upstream connection using keepalive mode ? */
  819|    822|    if (flb_stream_get_flag_status(&u_conn->upstream->base, FLB_IO_TCP_KA)) {
  ------------------
  |  |   37|    822|#define FLB_IO_TCP_KA     16  /* use async mode (depends on event loop) */
  ------------------
  |  Branch (819:9): [True: 0, False: 822]
  ------------------
  820|      0|        c->flags |= FLB_HTTP_KA;
  ------------------
  |  |   58|      0|#define FLB_HTTP_KA         16
  ------------------
  821|      0|    }
  822|       |
  823|    822|    if ((flags & FLB_HTTP_10) == 0) {
  ------------------
  |  |   56|    822|#define FLB_HTTP_10          1
  ------------------
  |  Branch (823:9): [True: 822, False: 0]
  ------------------
  824|    822|        c->flags |= FLB_HTTP_11;
  ------------------
  |  |   57|    822|#define FLB_HTTP_11          2
  ------------------
  825|    822|    }
  826|       |
  827|    822|    add_host_and_content_length(c);
  828|       |
  829|       |    /* Check proxy data */
  830|    822|    if (proxy) {
  ------------------
  |  Branch (830:9): [True: 12, False: 810]
  ------------------
  831|     12|        flb_debug("[http_client] Using http_proxy: %s", proxy);
  ------------------
  |  |  197|     12|    if (flb_log_check(FLB_LOG_DEBUG))                               \
  |  |  ------------------
  |  |  |  |   43|     12|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  |  |  |  Branch (197:9): [True: 0, False: 12]
  |  |  ------------------
  |  |  198|     12|        flb_log_print(FLB_LOG_DEBUG, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  ------------------
  832|     12|        ret = proxy_parse(proxy, c);
  833|     12|        if (ret != 0) {
  ------------------
  |  Branch (833:13): [True: 12, False: 0]
  ------------------
  834|     12|            flb_debug("[http_client] Something wrong with the http_proxy parsing");
  ------------------
  |  |  197|     12|    if (flb_log_check(FLB_LOG_DEBUG))                               \
  |  |  ------------------
  |  |  |  |   43|     12|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  |  |  |  Branch (197:9): [True: 0, False: 12]
  |  |  ------------------
  |  |  198|     12|        flb_log_print(FLB_LOG_DEBUG, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  ------------------
  835|     12|            flb_http_client_destroy(c);
  836|     12|            return NULL;
  837|     12|        }
  838|     12|    }
  839|       |
  840|    810|    return c;
  841|    822|}
flb_http_buffer_size:
  855|  1.20k|{
  856|  1.20k|    if (size < c->resp.data_size_max && size != 0) {
  ------------------
  |  Branch (856:9): [True: 737, False: 472]
  |  Branch (856:41): [True: 621, False: 116]
  ------------------
  857|    621|        flb_error("[http] requested buffer size %lu (bytes) needs to be greater than "
  ------------------
  |  |  170|    621|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|    621|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 621, False: 0]
  |  |  ------------------
  |  |  171|    621|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|    621|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  858|    621|                  "minimum size allowed %lu (bytes)",
  859|    621|                  size, c->resp.data_size_max);
  860|    621|        return -1;
  861|    621|    }
  862|       |
  863|    588|    c->resp.data_size_max = size;
  864|    588|    return 0;
  865|  1.20k|}
flb_http_buffer_available:
  868|    399|{
  869|    399|    return (c->resp.data_size - c->resp.data_len);
  870|    399|}
flb_http_buffer_increase:
  880|    399|{
  881|    399|    int off_payload = 0;
  882|    399|    int off_headers_end = 0;
  883|    399|    int off_chunk_processed_end = 0;
  884|    399|    char *tmp;
  885|    399|    size_t new_size;
  886|    399|    size_t allocated;
  887|       |
  888|    399|    *out_size = 0;
  889|    399|    new_size = c->resp.data_size + size;
  890|       |
  891|       |    /* Limit exceeded, adjust */
  892|    399|    if (c->resp.data_size_max != 0) {
  ------------------
  |  Branch (892:9): [True: 321, False: 78]
  ------------------
  893|    321|        if (new_size > c->resp.data_size_max) {
  ------------------
  |  Branch (893:13): [True: 285, False: 36]
  ------------------
  894|    285|            new_size = c->resp.data_size_max;
  895|    285|            if (new_size <= c->resp.data_size) {
  ------------------
  |  Branch (895:17): [True: 285, False: 0]
  ------------------
  896|       |                /* Can't expand the buffer any further. */
  897|    285|                return -1;
  898|    285|            }
  899|    285|        }
  900|    321|    }
  901|       |
  902|       |
  903|    114|    if (c->resp.headers_end) {
  ------------------
  |  Branch (903:9): [True: 0, False: 114]
  ------------------
  904|      0|        off_headers_end = c->resp.headers_end - c->resp.data;
  905|      0|    }
  906|    114|    if (c->resp.chunk_processed_end) {
  ------------------
  |  Branch (906:9): [True: 0, False: 114]
  ------------------
  907|      0|        off_chunk_processed_end = c->resp.chunk_processed_end - c->resp.data;
  908|      0|    }
  909|       |
  910|       |    /*
  911|       |     * The payload is a reference to a position of 'data' buffer,
  912|       |     * we need to adjust the pointer after a memory buffer size change.
  913|       |     */
  914|    114|    if (c->resp.payload_size > 0) {
  ------------------
  |  Branch (914:9): [True: 0, False: 114]
  ------------------
  915|      0|        off_payload = c->resp.payload - c->resp.data;
  916|      0|    }
  917|       |
  918|    114|    tmp = flb_realloc(c->resp.data, new_size);
  919|    114|    if (!tmp) {
  ------------------
  |  Branch (919:9): [True: 0, False: 114]
  ------------------
  920|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  921|      0|        return -1;
  922|      0|    }
  923|    114|    else {
  924|    114|        allocated = new_size - c->resp.data_size;
  925|    114|        c->resp.data = tmp;
  926|    114|        c->resp.data_size = new_size;
  927|       |
  928|    114|        if (off_headers_end > 0) {
  ------------------
  |  Branch (928:13): [True: 0, False: 114]
  ------------------
  929|      0|            c->resp.headers_end = c->resp.data + off_headers_end;
  930|      0|        }
  931|    114|        if (off_chunk_processed_end > 0) {
  ------------------
  |  Branch (931:13): [True: 0, False: 114]
  ------------------
  932|      0|            c->resp.chunk_processed_end = c->resp.data + off_chunk_processed_end;
  933|      0|        }
  934|    114|        if (off_payload > 0) {
  ------------------
  |  Branch (934:13): [True: 0, False: 114]
  ------------------
  935|      0|            c->resp.payload = c->resp.data + off_payload;
  936|      0|        }
  937|    114|    }
  938|       |
  939|    114|    *out_size = allocated;
  940|    114|    return 0;
  941|    114|}
flb_http_add_header:
  948|  3.65k|{
  949|  3.65k|    struct flb_kv *kv;
  950|  3.65k|    struct mk_list *tmp;
  951|  3.65k|    struct mk_list *head;
  952|       |
  953|  3.65k|    if (key_len < 1 || val_len < 1) {
  ------------------
  |  Branch (953:9): [True: 0, False: 3.65k]
  |  Branch (953:24): [True: 0, False: 3.65k]
  ------------------
  954|      0|        return -1;
  955|      0|    }
  956|       |
  957|       |    /* Check any previous header to avoid duplicates */
  958|  3.65k|    if (c->allow_dup_headers == FLB_FALSE) {
  ------------------
  |  |   25|  3.65k|#define FLB_FALSE  0
  ------------------
  |  Branch (958:9): [True: 798, False: 2.85k]
  ------------------
  959|  3.59k|        mk_list_foreach_safe(head, tmp, &c->headers) {
  ------------------
  |  |  207|  4.38k|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 3.59k, False: 798]
  |  |  ------------------
  ------------------
  960|  3.59k|            kv = mk_list_entry(head, struct flb_kv, _head);
  ------------------
  |  |  214|  3.59k|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|  3.59k|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|  3.59k|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|  3.59k|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  961|  3.59k|            if (flb_sds_casecmp(kv->key, key, key_len) == 0) {
  ------------------
  |  Branch (961:17): [True: 0, False: 3.59k]
  ------------------
  962|       |                /* the header already exists, remove it */
  963|      0|                flb_kv_item_destroy(kv);
  964|      0|                break;
  965|      0|            }
  966|  3.59k|        }
  967|    798|    }
  968|       |
  969|       |    /* register new header in the temporal kv list */
  970|  3.65k|    kv = flb_kv_item_create_len(&c->headers,
  971|  3.65k|                                (char *) key, key_len, (char *) val, val_len);
  972|  3.65k|    if (!kv) {
  ------------------
  |  Branch (972:9): [True: 0, False: 3.65k]
  ------------------
  973|      0|        return -1;
  974|      0|    }
  975|       |
  976|  3.65k|    return 0;
  977|  3.65k|}
flb_http_set_keepalive:
 1090|  1.20k|{
 1091|       |    /* check if 'keepalive' mode is enabled in the Upstream connection */
 1092|  1.20k|    if (flb_stream_is_keepalive(c->u_conn->stream) == FLB_FALSE) {
  ------------------
  |  |   25|  1.20k|#define FLB_FALSE  0
  ------------------
  |  Branch (1092:9): [True: 1.20k, False: 0]
  ------------------
 1093|  1.20k|        return -1;
 1094|  1.20k|    }
 1095|       |
 1096|       |    /* append header */
 1097|      0|    return flb_http_add_header(c,
 1098|      0|                               FLB_HTTP_HEADER_CONNECTION,
  ------------------
  |  |   77|      0|#define FLB_HTTP_HEADER_CONNECTION       "Connection"
  ------------------
 1099|      0|                               sizeof(FLB_HTTP_HEADER_CONNECTION) - 1,
  ------------------
  |  |   77|      0|#define FLB_HTTP_HEADER_CONNECTION       "Connection"
  ------------------
 1100|      0|                               FLB_HTTP_HEADER_KA,
  ------------------
  |  |   78|      0|#define FLB_HTTP_HEADER_KA               "keep-alive"
  ------------------
 1101|      0|                               sizeof(FLB_HTTP_HEADER_KA) - 1);
  ------------------
  |  |   78|      0|#define FLB_HTTP_HEADER_KA               "keep-alive"
  ------------------
 1102|  1.20k|}
flb_http_set_content_encoding_gzip:
 1106|    399|{
 1107|    399|    int ret;
 1108|       |
 1109|    399|    ret = flb_http_add_header(c,
 1110|    399|                              FLB_HTTP_HEADER_CONTENT_ENCODING,
  ------------------
  |  |   76|    399|#define FLB_HTTP_HEADER_CONTENT_ENCODING "Content-Encoding"
  ------------------
 1111|    399|                              sizeof(FLB_HTTP_HEADER_CONTENT_ENCODING) - 1,
  ------------------
  |  |   76|    399|#define FLB_HTTP_HEADER_CONTENT_ENCODING "Content-Encoding"
  ------------------
 1112|    399|                              "gzip", 4);
 1113|    399|    return ret;
 1114|    399|}
flb_http_add_auth_header:
 1209|    399|                             const char *user, const char *passwd, const char *header) {
 1210|    399|    int ret;
 1211|    399|    int len_u;
 1212|    399|    int len_p;
 1213|    399|    int len_h;
 1214|    399|    int len_out;
 1215|    399|    char tmp[1024];
 1216|    399|    char *p;
 1217|    399|    size_t b64_len;
 1218|       |
 1219|       |    /*
 1220|       |     * We allow a max of 255 bytes for user and password (255 each), meaning
 1221|       |     * we need at least:
 1222|       |     *
 1223|       |     * 'Basic base64(user : passwd)' => ~688 bytes
 1224|       |     *
 1225|       |     */
 1226|       |
 1227|    399|    len_u = strlen(user);
 1228|       |
 1229|    399|    if (passwd) {
  ------------------
  |  Branch (1229:9): [True: 399, False: 0]
  ------------------
 1230|    399|        len_p = strlen(passwd);
 1231|    399|    }
 1232|      0|    else {
 1233|      0|        len_p = 0;
 1234|      0|    }
 1235|       |
 1236|    399|    p = flb_malloc(len_u + len_p + 2);
 1237|    399|    if (!p) {
  ------------------
  |  Branch (1237:9): [True: 0, False: 399]
  ------------------
 1238|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
 1239|      0|        return -1;
 1240|      0|    }
 1241|       |
 1242|    399|    memcpy(p, user, len_u);
 1243|    399|    p[len_u] = ':';
 1244|    399|    len_out = len_u + 1;
 1245|       |
 1246|    399|    if (passwd) {
  ------------------
  |  Branch (1246:9): [True: 399, False: 0]
  ------------------
 1247|    399|        memcpy(p + len_out, passwd, len_p);
 1248|    399|        len_out += len_p;
 1249|    399|    }
 1250|    399|    p[len_out] = '\0';
 1251|       |
 1252|    399|    memcpy(tmp, "Basic ", 6);
 1253|    399|    ret = flb_base64_encode((unsigned char *) tmp + 6, sizeof(tmp) - 7, &b64_len,
 1254|    399|                                (unsigned char *) p, len_out);
 1255|    399|    if (ret != 0) {
  ------------------
  |  Branch (1255:9): [True: 0, False: 399]
  ------------------
 1256|      0|        flb_free(p);
 1257|      0|        return -1;
 1258|      0|    }
 1259|       |
 1260|    399|    flb_free(p);
 1261|    399|    b64_len += 6;
 1262|       |
 1263|    399|    len_h = strlen(header);
 1264|    399|    ret = flb_http_add_header(c,
 1265|    399|                              header,
 1266|    399|                              len_h,
 1267|    399|                              tmp, b64_len);
 1268|    399|    return ret;
 1269|    399|}
flb_http_basic_auth:
 1273|    399|{
 1274|    399|    return flb_http_add_auth_header(c, user, passwd, FLB_HTTP_HEADER_AUTH);
  ------------------
  |  |   73|    399|#define FLB_HTTP_HEADER_AUTH             "Authorization"
  ------------------
 1275|    399|}
flb_http_do_request:
 1326|    810|{
 1327|    810|    int ret;
 1328|    810|    int crlf = 2;
 1329|    810|    int new_size;
 1330|    810|    size_t bytes_header = 0;
 1331|    810|    size_t bytes_body = 0;
 1332|    810|    char *tmp;
 1333|       |
 1334|       |    /* Try to add keep alive header */
 1335|    810|    flb_http_set_keepalive(c);
 1336|       |
 1337|       |    /* Append pending headers */
 1338|    810|    ret = http_headers_compose(c);
 1339|    810|    if (ret == -1) {
  ------------------
  |  Branch (1339:9): [True: 0, False: 810]
  ------------------
 1340|      0|        return FLB_HTTP_ERROR;
  ------------------
  |  |   66|      0|#define FLB_HTTP_ERROR           -1
  ------------------
 1341|      0|    }
 1342|       |
 1343|       |    /* check enough space for the ending CRLF */
 1344|    810|    if (header_available(c, crlf) != 0) {
  ------------------
  |  Branch (1344:9): [True: 2, False: 808]
  ------------------
 1345|      2|        new_size = c->header_size + 2;
 1346|      2|        tmp = flb_realloc(c->header_buf, new_size);
 1347|      2|        if (!tmp) {
  ------------------
  |  Branch (1347:13): [True: 0, False: 2]
  ------------------
 1348|      0|            flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
 1349|      0|            return FLB_HTTP_ERROR;
  ------------------
  |  |   66|      0|#define FLB_HTTP_ERROR           -1
  ------------------
 1350|      0|        }
 1351|      2|        c->header_buf  = tmp;
 1352|      2|        c->header_size = new_size;
 1353|      2|    }
 1354|       |
 1355|       |    /* Append the ending header CRLF */
 1356|    810|    c->header_buf[c->header_len++] = '\r';
 1357|    810|    c->header_buf[c->header_len++] = '\n';
 1358|       |
 1359|       |#ifdef FLB_HAVE_HTTP_CLIENT_DEBUG
 1360|       |    /* debug: request_headers callback */
 1361|       |    flb_http_client_debug_cb(c, "_debug.http.request_headers");
 1362|       |
 1363|       |    /* debug: request_payload callback */
 1364|       |    if (c->body_len > 0) {
 1365|       |        flb_http_client_debug_cb(c, "_debug.http.request_payload");
 1366|       |    }
 1367|       |#endif
 1368|       |
 1369|       |    /* Write the header */
 1370|    810|    ret = flb_io_net_write(c->u_conn,
 1371|    810|                           c->header_buf, c->header_len,
 1372|    810|                           &bytes_header);
 1373|    810|    if (ret == -1) {
  ------------------
  |  Branch (1373:9): [True: 810, False: 0]
  ------------------
 1374|       |        /* errno might be changed from the original call */
 1375|    810|        if (errno != 0) {
  ------------------
  |  Branch (1375:13): [True: 810, False: 0]
  ------------------
 1376|    810|            flb_errno();
  ------------------
  |  |  232|    810|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
 1377|    810|        }
 1378|    810|        return FLB_HTTP_ERROR;
  ------------------
  |  |   66|    810|#define FLB_HTTP_ERROR           -1
  ------------------
 1379|    810|    }
 1380|       |
 1381|      0|    if (c->body_len > 0) {
  ------------------
  |  Branch (1381:9): [True: 0, False: 0]
  ------------------
 1382|      0|        ret = flb_io_net_write(c->u_conn,
 1383|      0|                               c->body_buf, c->body_len,
 1384|      0|                               &bytes_body);
 1385|      0|        if (ret == -1) {
  ------------------
  |  Branch (1385:13): [True: 0, False: 0]
  ------------------
 1386|      0|            flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
 1387|      0|            return FLB_HTTP_ERROR;
  ------------------
  |  |   66|      0|#define FLB_HTTP_ERROR           -1
  ------------------
 1388|      0|        }
 1389|      0|    }
 1390|       |
 1391|       |    /* number of sent bytes */
 1392|      0|    *bytes = (bytes_header + bytes_body);
 1393|       |
 1394|       |    /* prep c->resp for incoming data */
 1395|      0|    c->resp.data_len = 0;
 1396|       |
 1397|       |    /* at this point we've sent our request so we expect more data in response*/
 1398|      0|    return FLB_HTTP_MORE;
  ------------------
  |  |   67|      0|#define FLB_HTTP_MORE             0
  ------------------
 1399|      0|}
flb_http_do:
 1497|    810|{
 1498|    810|    int ret;
 1499|       |
 1500|    810|    if (c->test_mode == FLB_TRUE) {
  ------------------
  |  |   26|    810|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    810|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  |  Branch (1500:9): [True: 0, False: 810]
  ------------------
 1501|      0|        return flb_http_stub_response(c);
 1502|      0|    }
 1503|       |
 1504|    810|    ret = flb_http_do_request(c, bytes);
 1505|    810|    if (ret != 0) {
  ------------------
  |  Branch (1505:9): [True: 810, False: 0]
  ------------------
 1506|    810|        return ret;
 1507|    810|    }
 1508|       |
 1509|       |    /* Read the server response, we need at least 19 bytes */
 1510|      0|    while (ret == FLB_HTTP_MORE || ret == FLB_HTTP_CHUNK_AVAILABLE) {
  ------------------
  |  |   67|      0|#define FLB_HTTP_MORE             0
  ------------------
                  while (ret == FLB_HTTP_MORE || ret == FLB_HTTP_CHUNK_AVAILABLE) {
  ------------------
  |  |   70|      0|#define FLB_HTTP_CHUNK_AVAILABLE  3 /* means chunk is available, but there is more data. end of all chunks returns FLB_HTTP_OK */
  ------------------
  |  Branch (1510:12): [True: 0, False: 0]
  |  Branch (1510:36): [True: 0, False: 0]
  ------------------
 1511|       |        /* flb_http_do does not consume any bytes during processing
 1512|       |         * so we always pass 0 consumed_bytes because we fetch until
 1513|       |         * the end chunk before returning to the caller
 1514|       |         */
 1515|       |
 1516|      0|        ret = flb_http_get_response_data(c, 0);
 1517|      0|    }
 1518|       |
 1519|       |    /* Check 'Connection' response header */
 1520|      0|    ret = check_connection(c);
 1521|      0|    if (ret == FLB_HTTP_OK) {
  ------------------
  |  |   68|      0|#define FLB_HTTP_OK               1
  ------------------
  |  Branch (1521:9): [True: 0, False: 0]
  ------------------
 1522|       |        /*
 1523|       |         * If the server replied that the connection will be closed
 1524|       |         * and our Upstream connection is in keepalive mode, we must
 1525|       |         * inactivate the connection.
 1526|       |         */
 1527|      0|        if (c->resp.connection_close == FLB_TRUE) {
  ------------------
  |  |   26|      0|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|      0|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  |  Branch (1527:13): [True: 0, False: 0]
  ------------------
 1528|       |            /* Do not recycle the connection (no more keepalive) */
 1529|      0|            flb_upstream_conn_recycle(c->u_conn, FLB_FALSE);
  ------------------
  |  |   25|      0|#define FLB_FALSE  0
  ------------------
 1530|      0|            flb_debug("[http_client] server %s:%i will close connection #%i",
  ------------------
  |  |  197|      0|    if (flb_log_check(FLB_LOG_DEBUG))                               \
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  |  |  |  Branch (197:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|        flb_log_print(FLB_LOG_DEBUG, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  ------------------
 1531|      0|                      c->u_conn->upstream->tcp_host,
 1532|      0|                      c->u_conn->upstream->tcp_port,
 1533|      0|                      c->u_conn->fd);
 1534|      0|        }
 1535|      0|    }
 1536|       |
 1537|       |#ifdef FLB_HAVE_HTTP_CLIENT_DEBUG
 1538|       |    flb_http_client_debug_cb(c, "_debug.http.response_headers");
 1539|       |    if (c->resp.payload_size > 0) {
 1540|       |        flb_http_client_debug_cb(c, "_debug.http.response_payload");
 1541|       |    }
 1542|       |#endif
 1543|       |
 1544|      0|    return 0;
 1545|    810|}
flb_http_client_proxy_connect:
 1554|    411|{
 1555|    411|    struct flb_upstream *u = u_conn->upstream;
 1556|    411|    struct flb_http_client *c;
 1557|    411|    size_t b_sent;
 1558|    411|    int ret = -1;
 1559|       |
 1560|       |    /* Don't pass proxy when using FLB_HTTP_CONNECT */
 1561|    411|    flb_debug("[upstream] establishing http tunneling to proxy: host %s port %d", u->tcp_host, u->tcp_port);
  ------------------
  |  |  197|    411|    if (flb_log_check(FLB_LOG_DEBUG))                               \
  |  |  ------------------
  |  |  |  |   43|    411|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  |  |  |  Branch (197:9): [True: 0, False: 411]
  |  |  ------------------
  |  |  198|    411|        flb_log_print(FLB_LOG_DEBUG, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  ------------------
 1562|    411|    c = flb_http_client(u_conn, FLB_HTTP_CONNECT, "", NULL,
  ------------------
  |  |   51|    411|#define FLB_HTTP_CONNECT     4
  ------------------
 1563|    411|                        0, u->proxied_host, u->proxied_port, NULL, 0);
 1564|       |
 1565|       |    /* Setup proxy's username and password */
 1566|    411|    if (u->proxy_username && u->proxy_password) {
  ------------------
  |  Branch (1566:9): [True: 0, False: 411]
  |  Branch (1566:30): [True: 0, False: 0]
  ------------------
 1567|      0|        flb_debug("[upstream] proxy uses username %s password %s", u->proxy_username, u->proxy_password);
  ------------------
  |  |  197|      0|    if (flb_log_check(FLB_LOG_DEBUG))                               \
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  |  |  |  Branch (197:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|        flb_log_print(FLB_LOG_DEBUG, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  ------------------
 1568|      0|        flb_http_proxy_auth(c, u->proxy_username, u->proxy_password);
 1569|      0|    }
 1570|       |
 1571|    411|    flb_http_buffer_size(c, 4192);
 1572|       |
 1573|    411|    flb_http_add_header(c, "User-Agent", 10, "Fluent-Bit", 10);
 1574|       |
 1575|       |    /* Send HTTP request */
 1576|    411|    ret = flb_http_do(c, &b_sent);
 1577|       |
 1578|       |    /* Validate HTTP response */
 1579|    411|    if (ret != 0) {
  ------------------
  |  Branch (1579:9): [True: 411, False: 0]
  ------------------
 1580|    411|        flb_error("[upstream] error in flb_establish_proxy: %d", ret);
  ------------------
  |  |  170|    411|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|    411|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 411, False: 0]
  |  |  ------------------
  |  |  171|    411|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|    411|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
 1581|    411|        ret = -1;
 1582|    411|    }
 1583|      0|    else {
 1584|       |        /* The request was issued successfully, validate the 'error' field */
 1585|      0|        flb_debug("[upstream] proxy returned %d", c->resp.status);
  ------------------
  |  |  197|      0|    if (flb_log_check(FLB_LOG_DEBUG))                               \
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  |  |  |  Branch (197:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|        flb_log_print(FLB_LOG_DEBUG, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  ------------------
 1586|      0|        if (c->resp.status == 200) {
  ------------------
  |  Branch (1586:13): [True: 0, False: 0]
  ------------------
 1587|      0|            ret = 0;
 1588|      0|        }
 1589|      0|        else {
 1590|      0|            flb_error("flb_establish_proxy error: %s", c->resp.payload);
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
 1591|      0|            ret = -1;
 1592|      0|        }
 1593|      0|    }
 1594|       |
 1595|       |    /* Cleanup */
 1596|    411|    flb_http_client_destroy(c);
 1597|       |
 1598|    411|    return ret;
 1599|    411|}
flb_http_client_destroy:
 1602|    822|{
 1603|    822|    http_headers_destroy(c);
 1604|    822|    flb_free(c->resp.data);
 1605|    822|    flb_free(c->header_buf);
 1606|    822|    flb_free((void *)c->proxy.host);
 1607|    822|    flb_free(c);
 1608|    822|}
flb_http_client.c:process_data:
  396|    399|{
  397|    399|    int ret;
  398|    399|    char code[4];
  399|    399|    char *tmp;
  400|       |
  401|    399|    if (c->resp.data_len < 15) {
  ------------------
  |  Branch (401:9): [True: 0, False: 399]
  ------------------
  402|       |        /* we need more data */
  403|      0|        return FLB_HTTP_MORE;
  ------------------
  |  |   67|      0|#define FLB_HTTP_MORE             0
  ------------------
  404|      0|    }
  405|       |
  406|       |    /* HTTP response status */
  407|    399|    if (c->resp.status <= 0) {
  ------------------
  |  Branch (407:9): [True: 0, False: 399]
  ------------------
  408|      0|        memcpy(code, c->resp.data + 9, 3);
  409|      0|        code[3] = '\0';
  410|      0|        c->resp.status = atoi(code);
  411|      0|        if (c->resp.status < 100 || c->resp.status > 599) {
  ------------------
  |  Branch (411:13): [True: 0, False: 0]
  |  Branch (411:37): [True: 0, False: 0]
  ------------------
  412|      0|            return FLB_HTTP_ERROR;
  ------------------
  |  |   66|      0|#define FLB_HTTP_ERROR           -1
  ------------------
  413|      0|        }
  414|      0|    }
  415|       |
  416|       |    /* Try to lookup content length */
  417|    399|    if (c->resp.content_length == -1 && c->resp.chunked_encoding == FLB_FALSE) {
  ------------------
  |  |   25|    399|#define FLB_FALSE  0
  ------------------
  |  Branch (417:9): [True: 399, False: 0]
  |  Branch (417:41): [True: 399, False: 0]
  ------------------
  418|    399|        ret = check_content_length(c);
  419|    399|        if (ret == FLB_HTTP_ERROR) {
  ------------------
  |  |   66|    399|#define FLB_HTTP_ERROR           -1
  ------------------
  |  Branch (419:13): [True: 0, False: 399]
  ------------------
  420|      0|            return FLB_HTTP_ERROR;
  ------------------
  |  |   66|      0|#define FLB_HTTP_ERROR           -1
  ------------------
  421|      0|        }
  422|    399|    }
  423|       |
  424|       |    /* Chunked encoding for HTTP/1.1 (no content length of course) */
  425|    399|    if ((c->flags & FLB_HTTP_11) && c->resp.content_length == -1) {
  ------------------
  |  |   57|    399|#define FLB_HTTP_11          2
  ------------------
  |  Branch (425:9): [True: 399, False: 0]
  |  Branch (425:37): [True: 320, False: 79]
  ------------------
  426|    320|        if (c->resp.chunked_encoding == FLB_FALSE) {
  ------------------
  |  |   25|    320|#define FLB_FALSE  0
  ------------------
  |  Branch (426:13): [True: 320, False: 0]
  ------------------
  427|    320|            ret = check_chunked_encoding(c);
  428|    320|            if (ret == FLB_HTTP_ERROR) {
  ------------------
  |  |   66|    320|#define FLB_HTTP_ERROR           -1
  ------------------
  |  Branch (428:17): [True: 0, False: 320]
  ------------------
  429|      0|                return FLB_HTTP_ERROR;
  ------------------
  |  |   66|      0|#define FLB_HTTP_ERROR           -1
  ------------------
  430|      0|            }
  431|    320|        }
  432|    320|    }
  433|       |
  434|    399|    if (!c->resp.headers_end) {
  ------------------
  |  Branch (434:9): [True: 399, False: 0]
  ------------------
  435|    399|        tmp = strstr(c->resp.data, "\r\n\r\n");
  436|    399|        if (tmp) {
  ------------------
  |  Branch (436:13): [True: 166, False: 233]
  ------------------
  437|    166|            c->resp.headers_end = tmp + 4;
  438|    166|            if (c->resp.chunked_encoding == FLB_TRUE) {
  ------------------
  |  |   26|    166|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    166|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  |  Branch (438:17): [True: 75, False: 91]
  ------------------
  439|     75|                c->resp.chunk_processed_end = c->resp.headers_end;
  440|     75|            }
  441|       |
  442|       |            /* Mark the payload */
  443|    166|            if ((tmp - c->resp.data + 4) < c->resp.data_len) {
  ------------------
  |  Branch (443:17): [True: 107, False: 59]
  ------------------
  444|    107|                c->resp.payload = tmp += 4;
  445|    107|                c->resp.payload_size = (c->resp.data_len - (tmp - c->resp.data));
  446|    107|            }
  447|    166|        }
  448|    233|        else {
  449|    233|            return FLB_HTTP_MORE;
  ------------------
  |  |   67|    233|#define FLB_HTTP_MORE             0
  ------------------
  450|    233|        }
  451|    399|    }
  452|       |
  453|       |    /* Re-check if an ending exists, if so process payload if required */
  454|    166|    if (c->resp.headers_end) {
  ------------------
  |  Branch (454:9): [True: 166, False: 0]
  ------------------
  455|       |        /* Mark the payload */
  456|    166|        if (!c->resp.payload &&
  ------------------
  |  Branch (456:13): [True: 59, False: 107]
  ------------------
  457|    166|            c->resp.headers_end - c->resp.data < c->resp.data_len) {
  ------------------
  |  Branch (457:13): [True: 0, False: 59]
  ------------------
  458|      0|            c->resp.payload = c->resp.headers_end;
  459|      0|            c->resp.payload_size = (c->resp.data_len - (c->resp.headers_end - c->resp.data));
  460|      0|        }
  461|       |
  462|    166|        if (c->resp.content_length >= 0) {
  ------------------
  |  Branch (462:13): [True: 43, False: 123]
  ------------------
  463|     43|            c->resp.payload_size = c->resp.data_len;
  464|     43|            c->resp.payload_size -= (c->resp.headers_end - c->resp.data);
  465|     43|            if (c->resp.payload_size >= c->resp.content_length) {
  ------------------
  |  Branch (465:17): [True: 7, False: 36]
  ------------------
  466|      7|                return FLB_HTTP_OK;
  ------------------
  |  |   68|      7|#define FLB_HTTP_OK               1
  ------------------
  467|      7|            }
  468|     43|        }
  469|    123|        else if (c->resp.chunked_encoding == FLB_TRUE) {
  ------------------
  |  |   26|    123|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    123|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  |  Branch (469:18): [True: 75, False: 48]
  ------------------
  470|     75|            ret = process_chunked_data(c);
  471|     75|            if (ret == FLB_HTTP_ERROR) {
  ------------------
  |  |   66|     75|#define FLB_HTTP_ERROR           -1
  ------------------
  |  Branch (471:17): [True: 45, False: 30]
  ------------------
  472|     45|                return FLB_HTTP_ERROR;
  ------------------
  |  |   66|     45|#define FLB_HTTP_ERROR           -1
  ------------------
  473|     45|            }
  474|     30|            else if (ret == FLB_HTTP_OK || ret == FLB_HTTP_CHUNK_AVAILABLE) {
  ------------------
  |  |   68|     60|#define FLB_HTTP_OK               1
  ------------------
                          else if (ret == FLB_HTTP_OK || ret == FLB_HTTP_CHUNK_AVAILABLE) {
  ------------------
  |  |   70|     28|#define FLB_HTTP_CHUNK_AVAILABLE  3 /* means chunk is available, but there is more data. end of all chunks returns FLB_HTTP_OK */
  ------------------
  |  Branch (474:22): [True: 2, False: 28]
  |  Branch (474:44): [True: 1, False: 27]
  ------------------
  475|      3|                return ret;
  476|      3|            }
  477|     75|        }
  478|     48|        else {
  479|     48|            return FLB_HTTP_OK;
  ------------------
  |  |   68|     48|#define FLB_HTTP_OK               1
  ------------------
  480|     48|        }
  481|    166|    }
  482|      0|    else if (c->resp.headers_end && c->resp.content_length <= 0) {
  ------------------
  |  Branch (482:14): [True: 0, False: 0]
  |  Branch (482:37): [True: 0, False: 0]
  ------------------
  483|      0|        return FLB_HTTP_OK;
  ------------------
  |  |   68|      0|#define FLB_HTTP_OK               1
  ------------------
  484|      0|    }
  485|       |
  486|     63|    return FLB_HTTP_MORE;
  ------------------
  |  |   67|     63|#define FLB_HTTP_MORE             0
  ------------------
  487|    166|}
flb_http_client.c:check_content_length:
  193|    399|{
  194|    399|    int ret;
  195|    399|    int len;
  196|    399|    const char *header;
  197|    399|    char tmp[256];
  198|       |
  199|    399|    if (c->resp.status == 204) {
  ------------------
  |  Branch (199:9): [True: 0, False: 399]
  ------------------
  200|      0|        c->resp.content_length = -1;
  201|      0|        return FLB_HTTP_OK;
  ------------------
  |  |   68|      0|#define FLB_HTTP_OK               1
  ------------------
  202|      0|    }
  203|       |
  204|    399|    ret = header_lookup(c, "Content-Length: ", 16,
  205|    399|                        &header, &len);
  206|    399|    if (ret == FLB_HTTP_MORE) {
  ------------------
  |  |   67|    399|#define FLB_HTTP_MORE             0
  ------------------
  |  Branch (206:9): [True: 229, False: 170]
  ------------------
  207|    229|        return FLB_HTTP_MORE;
  ------------------
  |  |   67|    229|#define FLB_HTTP_MORE             0
  ------------------
  208|    229|    }
  209|    170|    else if (ret == FLB_HTTP_NOT_FOUND) {
  ------------------
  |  |   69|    170|#define FLB_HTTP_NOT_FOUND        2 /* header not found */
  ------------------
  |  Branch (209:14): [True: 91, False: 79]
  ------------------
  210|     91|        return FLB_HTTP_NOT_FOUND;
  ------------------
  |  |   69|     91|#define FLB_HTTP_NOT_FOUND        2 /* header not found */
  ------------------
  211|     91|    }
  212|       |
  213|     79|    if (len > sizeof(tmp) - 1) {
  ------------------
  |  Branch (213:9): [True: 0, False: 79]
  ------------------
  214|       |        /* Value too long */
  215|      0|        return FLB_HTTP_ERROR;
  ------------------
  |  |   66|      0|#define FLB_HTTP_ERROR           -1
  ------------------
  216|      0|    }
  217|       |
  218|       |    /* Copy to temporary buffer */
  219|     79|    memcpy(tmp, header, len);
  220|     79|    tmp[len] = '\0';
  221|       |
  222|     79|    c->resp.content_length = atoi(tmp);
  223|     79|    return FLB_HTTP_OK;
  ------------------
  |  |   68|     79|#define FLB_HTTP_OK               1
  ------------------
  224|     79|}
flb_http_client.c:header_lookup:
  125|  1.11k|{
  126|  1.11k|    char *p;
  127|  1.11k|    char *crlf;
  128|  1.11k|    char *end;
  129|       |
  130|  1.11k|    if (!c->resp.data) {
  ------------------
  |  Branch (130:9): [True: 0, False: 1.11k]
  ------------------
  131|      0|        return FLB_HTTP_MORE;
  ------------------
  |  |   67|      0|#define FLB_HTTP_MORE             0
  ------------------
  132|      0|    }
  133|       |
  134|       |    /* Lookup the beginning of the header */
  135|  1.11k|    p = strcasestr(c->resp.data, header);
  136|  1.11k|    end = strstr(c->resp.data, "\r\n\r\n");
  137|  1.11k|    if (!p) {
  ------------------
  |  Branch (137:9): [True: 843, False: 275]
  ------------------
  138|    843|        if (end) {
  ------------------
  |  Branch (138:13): [True: 258, False: 585]
  ------------------
  139|       |            /* The headers are complete but the header is not there */
  140|    258|            return FLB_HTTP_NOT_FOUND;
  ------------------
  |  |   69|    258|#define FLB_HTTP_NOT_FOUND        2 /* header not found */
  ------------------
  141|    258|        }
  142|       |
  143|       |        /* We need more data */
  144|    585|        return FLB_HTTP_MORE;
  ------------------
  |  |   67|    585|#define FLB_HTTP_MORE             0
  ------------------
  145|    843|    }
  146|       |
  147|       |    /* Exclude matches in the body */
  148|    275|    if (end && p > end) {
  ------------------
  |  Branch (148:9): [True: 165, False: 110]
  |  Branch (148:16): [True: 5, False: 160]
  ------------------
  149|      5|        return FLB_HTTP_NOT_FOUND;
  ------------------
  |  |   69|      5|#define FLB_HTTP_NOT_FOUND        2 /* header not found */
  ------------------
  150|      5|    }
  151|       |
  152|       |    /* Lookup CRLF (end of line \r\n) */
  153|    270|    crlf = strstr(p, "\r\n");
  154|    270|    if (!crlf) {
  ------------------
  |  Branch (154:9): [True: 5, False: 265]
  ------------------
  155|      5|        return FLB_HTTP_MORE;
  ------------------
  |  |   67|      5|#define FLB_HTTP_MORE             0
  ------------------
  156|      5|    }
  157|       |
  158|    265|    p += header_len;
  159|       |
  160|    265|    *out_val = p;
  161|    265|    *out_len = (crlf - p);
  162|       |
  163|    265|    return FLB_HTTP_OK;
  ------------------
  |  |   68|    265|#define FLB_HTTP_OK               1
  ------------------
  164|    270|}
flb_http_client.c:check_chunked_encoding:
  168|    320|{
  169|    320|    int ret;
  170|    320|    int len;
  171|    320|    const char *header = NULL;
  172|       |
  173|    320|    ret = header_lookup(c, "Transfer-Encoding: ", 19,
  174|    320|                        &header, &len);
  175|    320|    if (ret == FLB_HTTP_NOT_FOUND) {
  ------------------
  |  |   69|    320|#define FLB_HTTP_NOT_FOUND        2 /* header not found */
  ------------------
  |  Branch (175:9): [True: 12, False: 308]
  ------------------
  176|       |        /* If the header is missing, this is fine */
  177|     12|        c->resp.chunked_encoding = FLB_FALSE;
  ------------------
  |  |   25|     12|#define FLB_FALSE  0
  ------------------
  178|     12|        return FLB_HTTP_OK;
  ------------------
  |  |   68|     12|#define FLB_HTTP_OK               1
  ------------------
  179|     12|    }
  180|    308|    else if (ret == FLB_HTTP_MORE) {
  ------------------
  |  |   67|    308|#define FLB_HTTP_MORE             0
  ------------------
  |  Branch (180:14): [True: 171, False: 137]
  ------------------
  181|    171|        return FLB_HTTP_MORE;
  ------------------
  |  |   67|    171|#define FLB_HTTP_MORE             0
  ------------------
  182|    171|    }
  183|       |
  184|    137|    if (strncasecmp(header, "chunked", len) == 0) {
  ------------------
  |  Branch (184:9): [True: 75, False: 62]
  ------------------
  185|     75|        c->resp.chunked_encoding = FLB_TRUE;
  ------------------
  |  |   26|     75|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|     75|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  186|     75|    }
  187|       |
  188|    137|    return FLB_HTTP_OK;
  ------------------
  |  |   68|    137|#define FLB_HTTP_OK               1
  ------------------
  189|    320|}
flb_http_client.c:process_chunked_data:
  269|     75|{
  270|     75|    long len;
  271|     75|    long drop;
  272|     75|    long val;
  273|     75|    char *p;
  274|     75|    char tmp[32];
  275|     75|    int found_full_chunk = FLB_FALSE;
  ------------------
  |  |   25|     75|#define FLB_FALSE  0
  ------------------
  276|     75|    struct flb_http_client_response *r = &c->resp;
  277|       |
  278|       |
  279|     76| chunk_start:
  280|     76|    p = strstr(r->chunk_processed_end, "\r\n");
  281|     76|    if (!p) {
  ------------------
  |  Branch (281:9): [True: 2, False: 74]
  ------------------
  282|      2|        return FLB_HTTP_MORE;
  ------------------
  |  |   67|      2|#define FLB_HTTP_MORE             0
  ------------------
  283|      2|    }
  284|       |
  285|       |    /* Hexa string length */
  286|     74|    len = (p - r->chunk_processed_end);
  287|     74|    if ((len > sizeof(tmp) - 1) || len == 0) {
  ------------------
  |  Branch (287:9): [True: 0, False: 74]
  |  Branch (287:36): [True: 1, False: 73]
  ------------------
  288|      1|        return FLB_HTTP_ERROR;
  ------------------
  |  |   66|      1|#define FLB_HTTP_ERROR           -1
  ------------------
  289|      1|    }
  290|     73|    p += 2;
  291|       |
  292|       |    /* Copy hexa string to temporary buffer */
  293|     73|    memcpy(tmp, r->chunk_processed_end, len);
  294|     73|    tmp[len] = '\0';
  295|       |
  296|       |    /* Convert hexa string to decimal */
  297|     73|    errno = 0;
  298|     73|    val = strtol(tmp, NULL, 16);
  299|     73|    if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN))
  ------------------
  |  Branch (299:10): [True: 0, False: 73]
  |  Branch (299:30): [True: 0, False: 0]
  |  Branch (299:49): [True: 0, False: 0]
  ------------------
  300|     73|        || (errno != 0 && val == 0)) {
  ------------------
  |  Branch (300:13): [True: 0, False: 73]
  |  Branch (300:27): [True: 0, False: 0]
  ------------------
  301|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  302|      0|        return FLB_HTTP_ERROR;
  ------------------
  |  |   66|      0|#define FLB_HTTP_ERROR           -1
  ------------------
  303|      0|    }
  304|     73|    if (val < 0) {
  ------------------
  |  Branch (304:9): [True: 22, False: 51]
  ------------------
  305|     22|        return FLB_HTTP_ERROR;
  ------------------
  |  |   66|     22|#define FLB_HTTP_ERROR           -1
  ------------------
  306|     22|    }
  307|       |    /*
  308|       |     * 'val' contains the expected number of bytes, check current lengths
  309|       |     * and do buffer adjustments.
  310|       |     *
  311|       |     * we do val + 2 because the chunk always ends with \r\n
  312|       |     */
  313|     51|    val += 2;
  314|       |
  315|       |    /* Number of bytes after the Chunk header */
  316|     51|    len = r->data_len - (p - r->data);
  317|     51|    if (len < val) {
  ------------------
  |  Branch (317:9): [True: 25, False: 26]
  ------------------
  318|     25|        return FLB_HTTP_MORE;
  ------------------
  |  |   67|     25|#define FLB_HTTP_MORE             0
  ------------------
  319|     25|    }
  320|       |
  321|       |    /* From the current chunk we expect it ends with \r\n */
  322|     26|    if (p[val -2] != '\r' || p[val - 1] != '\n') {
  ------------------
  |  Branch (322:9): [True: 12, False: 14]
  |  Branch (322:30): [True: 9, False: 5]
  ------------------
  323|     21|        return FLB_HTTP_ERROR;
  ------------------
  |  |   66|     21|#define FLB_HTTP_ERROR           -1
  ------------------
  324|     21|    }
  325|       |
  326|       |    /*
  327|       |     * At this point we are just fine, the chunk is valid, next steps:
  328|       |     *
  329|       |     * 1. check possible last chunk
  330|       |     * 2. drop chunk header from the buffer
  331|       |     * 3. remove chunk ending \r\n
  332|       |     */
  333|       |
  334|      5|    found_full_chunk = FLB_TRUE;
  ------------------
  |  |   26|      5|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|      5|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  335|       |    /* 1. Validate ending chunk */
  336|      5|    if (val - 2 == 0) {
  ------------------
  |  Branch (336:9): [True: 3, False: 2]
  ------------------
  337|       |        /*
  338|       |         * For an ending chunk we expect:
  339|       |         *
  340|       |         * 0\r\n
  341|       |         * \r\n
  342|       |         *
  343|       |         * so at least we need 5 bytes in the buffer
  344|       |         */
  345|      3|        len = r->data_len - (r->chunk_processed_end - r->data);
  346|      3|        if (len < 5) {
  ------------------
  |  Branch (346:13): [True: 0, False: 3]
  ------------------
  347|      0|            return FLB_HTTP_MORE;
  ------------------
  |  |   67|      0|#define FLB_HTTP_MORE             0
  ------------------
  348|      0|        }
  349|       |
  350|      3|        if (r->chunk_processed_end[3] != '\r' ||
  ------------------
  |  Branch (350:13): [True: 1, False: 2]
  ------------------
  351|      3|            r->chunk_processed_end[4] != '\n') {
  ------------------
  |  Branch (351:13): [True: 0, False: 2]
  ------------------
  352|      1|            return FLB_HTTP_ERROR;
  ------------------
  |  |   66|      1|#define FLB_HTTP_ERROR           -1
  ------------------
  353|      1|        }
  354|      3|    }
  355|       |
  356|       |    /* 2. Drop chunk header */
  357|      4|    drop = (p - r->chunk_processed_end);
  358|      4|    len =  r->data_len - (r->chunk_processed_end - r->data);
  359|      4|    consume_bytes(r->chunk_processed_end, drop, len);
  360|      4|    r->data_len -= drop;
  361|      4|    r->data[r->data_len] = '\0';
  362|       |
  363|       |    /* 3. Remove chunk ending \r\n */
  364|      4|    drop = 2;
  365|      4|    r->chunk_processed_end += labs(val - 2);
  366|      4|    len = r->data_len - (r->chunk_processed_end - r->data);
  367|      4|    consume_bytes(r->chunk_processed_end, drop, len);
  368|      4|    r->data_len -= drop;
  369|       |
  370|       |    /* Always append a NULL byte */
  371|      4|    r->data[r->data_len] = '\0';
  372|       |
  373|       |    /* Always update payload size after full chunk */
  374|      4|    r->payload_size = r->data_len - (r->headers_end - r->data);
  375|       |
  376|       |    /* Is this the last chunk ? */
  377|      4|    if ((val - 2 == 0)) {
  ------------------
  |  Branch (377:9): [True: 2, False: 2]
  ------------------
  378|       |        /* Update payload size */
  379|      2|        return FLB_HTTP_OK;
  ------------------
  |  |   68|      2|#define FLB_HTTP_OK               1
  ------------------
  380|      2|    }
  381|       |
  382|       |    /* If we have some remaining bytes, start over */
  383|      2|    len = r->data_len - (r->chunk_processed_end - r->data);
  384|      2|    if (len > 0) {
  ------------------
  |  Branch (384:9): [True: 1, False: 1]
  ------------------
  385|      1|        goto chunk_start;
  386|      1|    }
  387|       |
  388|      1|    if (found_full_chunk == FLB_TRUE) {
  ------------------
  |  |   26|      1|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|      1|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  |  Branch (388:9): [True: 1, False: 0]
  ------------------
  389|      1|        return FLB_HTTP_CHUNK_AVAILABLE;
  ------------------
  |  |   70|      1|#define FLB_HTTP_CHUNK_AVAILABLE  3 /* means chunk is available, but there is more data. end of all chunks returns FLB_HTTP_OK */
  ------------------
  390|      1|    }
  391|       |
  392|      0|    return FLB_HTTP_MORE;
  ------------------
  |  |   67|      0|#define FLB_HTTP_MORE             0
  ------------------
  393|      1|}
flb_http_client.c:consume_bytes:
  264|      8|{
  265|      8|    memmove(buf, buf + bytes, length - bytes);
  266|      8|}
flb_http_client.c:check_connection:
  228|    399|{
  229|    399|    int ret;
  230|    399|    int len;
  231|    399|    const char *header;
  232|    399|    char *buf;
  233|       |
  234|    399|    ret = header_lookup(c, "Connection: ", 12,
  235|    399|                        &header, &len);
  236|    399|    if (ret == FLB_HTTP_NOT_FOUND) {
  ------------------
  |  |   69|    399|#define FLB_HTTP_NOT_FOUND        2 /* header not found */
  ------------------
  |  Branch (236:9): [True: 160, False: 239]
  ------------------
  237|    160|        return FLB_HTTP_NOT_FOUND;
  ------------------
  |  |   69|    160|#define FLB_HTTP_NOT_FOUND        2 /* header not found */
  ------------------
  238|    160|    }
  239|    239|    else if (ret == FLB_HTTP_MORE) {
  ------------------
  |  |   67|    239|#define FLB_HTTP_MORE             0
  ------------------
  |  Branch (239:14): [True: 190, False: 49]
  ------------------
  240|    190|        return FLB_HTTP_MORE;
  ------------------
  |  |   67|    190|#define FLB_HTTP_MORE             0
  ------------------
  241|    190|    }
  242|       |
  243|     49|    buf = flb_malloc(len + 1);
  244|     49|    if (!buf) {
  ------------------
  |  Branch (244:9): [True: 0, False: 49]
  ------------------
  245|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  246|      0|        return -1;
  247|      0|    }
  248|       |
  249|     49|    memcpy(buf, header, len);
  250|     49|    buf[len] = '\0';
  251|       |
  252|     49|    if (strncasecmp(buf, "close", 5) == 0) {
  ------------------
  |  Branch (252:9): [True: 1, False: 48]
  ------------------
  253|      1|        c->resp.connection_close = FLB_TRUE;
  ------------------
  |  |   26|      1|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|      1|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  254|      1|    }
  255|     48|    else if (strcasestr(buf, "keep-alive")) {
  ------------------
  |  Branch (255:14): [True: 4, False: 44]
  ------------------
  256|      4|        c->resp.connection_close = FLB_FALSE;
  ------------------
  |  |   25|      4|#define FLB_FALSE  0
  ------------------
  257|      4|    }
  258|     49|    flb_free(buf);
  259|     49|    return FLB_HTTP_OK;
  ------------------
  |  |   68|     49|#define FLB_HTTP_OK               1
  ------------------
  260|       |
  261|     49|}
flb_http_client.c:add_host_and_content_length:
  566|    822|{
  567|    822|    int len;
  568|    822|    flb_sds_t tmp;
  569|    822|    flb_sds_t host;
  570|    822|    char *out_host;
  571|    822|    int out_port;
  572|    822|    size_t size;
  573|    822|    struct flb_upstream *u = c->u_conn->upstream;
  574|       |
  575|    822|    if (!c->host) {
  ------------------
  |  Branch (575:9): [True: 411, False: 411]
  ------------------
  576|    411|        if (u->proxied_host) {
  ------------------
  |  Branch (576:13): [True: 0, False: 411]
  ------------------
  577|      0|            out_host = u->proxied_host;
  578|      0|        }
  579|    411|        else {
  580|    411|            out_host = u->tcp_host;
  581|    411|        }
  582|    411|    }
  583|    411|    else {
  584|    411|        out_host = (char *) c->host;
  585|    411|    }
  586|       |
  587|    822|    len = strlen(out_host);
  588|    822|    host = flb_sds_create_size(len + 32);
  589|    822|    if (!host) {
  ------------------
  |  Branch (589:9): [True: 0, False: 822]
  ------------------
  590|      0|        flb_error("[http_client] cannot create temporal buffer");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  591|      0|        return -1;
  592|      0|    }
  593|       |
  594|    822|    if (c->port == 0) {
  ------------------
  |  Branch (594:9): [True: 411, False: 411]
  ------------------
  595|    411|        if (u->proxied_port != 0 ) {
  ------------------
  |  Branch (595:13): [True: 0, False: 411]
  ------------------
  596|      0|            out_port = u->proxied_port;
  597|      0|        }
  598|    411|        else {
  599|    411|            out_port = u->tcp_port;
  600|    411|        }
  601|    411|    }
  602|    411|    else {
  603|    411|        out_port = c->port;
  604|    411|    }
  605|       |
  606|    822|    if (c->flags & FLB_IO_TLS && out_port == 443) {
  ------------------
  |  |   34|  1.64k|#define FLB_IO_TLS         2  /* use TLS/SSL layer                      */
  ------------------
  |  Branch (606:9): [True: 822, False: 0]
  |  Branch (606:34): [True: 0, False: 822]
  ------------------
  607|      0|        tmp = flb_sds_copy(host, out_host, strlen(out_host));
  608|      0|    }
  609|    822|    else {
  610|    822|        tmp = flb_sds_printf(&host, "%s:%i", out_host, out_port);
  611|    822|    }
  612|       |
  613|    822|    if (!tmp) {
  ------------------
  |  Branch (613:9): [True: 0, False: 822]
  ------------------
  614|      0|        flb_sds_destroy(host);
  615|      0|        flb_error("[http_client] cannot compose temporary host header");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  616|      0|        return -1;
  617|      0|    }
  618|    822|    host = tmp;
  619|    822|    tmp = NULL;
  620|       |
  621|    822|    flb_http_add_header(c, "Host", 4, host, flb_sds_len(host));
  622|    822|    flb_sds_destroy(host);
  623|       |
  624|       |    /* Content-Length */
  625|    822|    if (c->body_len >= 0) {
  ------------------
  |  Branch (625:9): [True: 822, False: 0]
  ------------------
  626|    822|        size = 32;
  627|    822|        tmp = flb_malloc(size);
  628|    822|        if (!tmp) {
  ------------------
  |  Branch (628:13): [True: 0, False: 822]
  ------------------
  629|      0|            flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  630|      0|            return -1;
  631|      0|        }
  632|    822|        len = snprintf(tmp, size - 1, "%i", c->body_len);
  633|    822|        flb_http_add_header(c, "Content-Length", 14, tmp, len);
  634|    822|        flb_free(tmp);
  635|    822|    }
  636|       |
  637|    822|    return 0;
  638|    822|}
flb_http_client.c:proxy_parse:
  503|     12|{
  504|     12|    int len;
  505|     12|    int port;
  506|     12|    int off = 0;
  507|     12|    const char *s;
  508|     12|    const char *e;
  509|     12|    const char *host;
  510|       |
  511|     12|    len = strlen(proxy);
  512|     12|    if (len < 7) {
  ------------------
  |  Branch (512:9): [True: 3, False: 9]
  ------------------
  513|      3|        return -1;
  514|      3|    }
  515|       |
  516|       |    /* Protocol lookup */
  517|      9|    if (strncmp(proxy, "http://", 7) == 0) {
  ------------------
  |  Branch (517:9): [True: 0, False: 9]
  ------------------
  518|      0|        port = 80;
  519|      0|        off = 7;
  520|      0|        c->proxy.type = FLB_HTTP_PROXY_HTTP;
  ------------------
  |  |   62|      0|#define FLB_HTTP_PROXY_HTTP       1
  ------------------
  521|      0|    }
  522|      9|    else if (strncmp(proxy, "https://", 8) == 0) {
  ------------------
  |  Branch (522:14): [True: 0, False: 9]
  ------------------
  523|      0|        port = 443;
  524|      0|        off = 8;
  525|      0|        c->proxy.type = FLB_HTTP_PROXY_HTTPS;
  ------------------
  |  |   63|      0|#define FLB_HTTP_PROXY_HTTPS      2
  ------------------
  526|      0|    }
  527|      9|    else {
  528|      9|        return -1;
  529|      9|    }
  530|       |
  531|       |    /* Separate host/ip from port if any */
  532|      0|    s = proxy + off;
  533|      0|    if (*s == '[') {
  ------------------
  |  Branch (533:9): [True: 0, False: 0]
  ------------------
  534|       |        /* IPv6 address (RFC 3986) */
  535|      0|        e = strchr(++s, ']');
  536|      0|        if (!e) {
  ------------------
  |  Branch (536:13): [True: 0, False: 0]
  ------------------
  537|      0|            return -1;
  538|      0|        }
  539|      0|        host = strndup(s, e - s);
  540|      0|        s = e + 1;
  541|      0|    } else {
  542|      0|        e = s;
  543|      0|        while (!(*e == '\0' || *e == ':' || *e == '/')) {
  ------------------
  |  Branch (543:18): [True: 0, False: 0]
  |  Branch (543:32): [True: 0, False: 0]
  |  Branch (543:45): [True: 0, False: 0]
  ------------------
  544|      0|            ++e;
  545|      0|        }
  546|      0|        if (e == s) {
  ------------------
  |  Branch (546:13): [True: 0, False: 0]
  ------------------
  547|      0|            return -1;
  548|      0|        }
  549|      0|        host = strndup(s, e - s);
  550|      0|        s = e;
  551|      0|    }
  552|      0|    if (*s == ':') {
  ------------------
  |  Branch (552:9): [True: 0, False: 0]
  ------------------
  553|      0|        port = atoi(++s);
  554|      0|    }
  555|       |
  556|      0|    flb_trace("[http_client] proxy type=%i host=%s port=%i",
  ------------------
  |  |  223|      0|#define flb_trace(fmt, ...)  do {} while(0)
  |  |  ------------------
  |  |  |  Branch (223:42): [Folded - Ignored]
  |  |  ------------------
  ------------------
  557|      0|              c->proxy.type, host, port);
  558|       |
  559|      0|    c->proxy.host = host;
  560|      0|    c->proxy.port = port;
  561|       |
  562|      0|    return 0;
  563|      0|}
flb_http_client.c:http_headers_compose:
 1066|    810|{
 1067|    810|    int ret;
 1068|    810|    struct mk_list *head;
 1069|    810|    struct flb_kv *header;
 1070|       |
 1071|       |    /* Push header list to one buffer */
 1072|  3.62k|    mk_list_foreach(head, &c->headers) {
  ------------------
  |  |  205|  4.43k|#define mk_list_foreach(curr, head) for( curr = (head)->next; curr != (head); curr = curr->next )
  |  |  ------------------
  |  |  |  Branch (205:63): [True: 3.62k, False: 810]
  |  |  ------------------
  ------------------
 1073|  3.62k|        header = mk_list_entry(head, struct flb_kv, _head);
  ------------------
  |  |  214|  3.62k|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|  3.62k|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|  3.62k|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|  3.62k|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
 1074|  3.62k|        ret = http_header_push(c, header);
 1075|  3.62k|        if (ret != 0) {
  ------------------
  |  Branch (1075:13): [True: 0, False: 3.62k]
  ------------------
 1076|      0|            flb_error("[http_client] cannot compose request headers");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
 1077|      0|            return -1;
 1078|      0|        }
 1079|  3.62k|    }
 1080|       |
 1081|    810|    return 0;
 1082|    810|}
flb_http_client.c:http_header_push:
 1004|  3.62k|{
 1005|  3.62k|    char *tmp;
 1006|  3.62k|    const char *key;
 1007|  3.62k|    const char *val;
 1008|  3.62k|    size_t key_len;
 1009|  3.62k|    size_t val_len;
 1010|  3.62k|    size_t required;
 1011|  3.62k|    size_t new_size;
 1012|       |
 1013|  3.62k|    key = header->key;
 1014|  3.62k|    key_len = flb_sds_len(header->key);
 1015|  3.62k|    val = header->val;
 1016|  3.62k|    val_len = flb_sds_len(header->val);
 1017|       |
 1018|       |    /*
 1019|       |     * The new header will need enough space in the buffer:
 1020|       |     *
 1021|       |     * key      : length of the key
 1022|       |     * separator: ': ' (2 bytes)
 1023|       |     * val      : length of the key value
 1024|       |     * CRLF     : '\r\n' (2 bytes)
 1025|       |     */
 1026|  3.62k|    required = key_len + 2 + val_len + 2;
 1027|       |
 1028|  3.62k|    if (header_available(c, required) != 0) {
  ------------------
  |  Branch (1028:9): [True: 97, False: 3.53k]
  ------------------
 1029|     97|        if (required < 512) {
  ------------------
  |  Branch (1029:13): [True: 0, False: 97]
  ------------------
 1030|      0|            new_size = c->header_size + 512;
 1031|      0|        }
 1032|     97|        else {
 1033|     97|            new_size = c->header_size + required;
 1034|     97|        }
 1035|     97|        tmp = flb_realloc(c->header_buf, new_size);
 1036|     97|        if (!tmp) {
  ------------------
  |  Branch (1036:13): [True: 0, False: 97]
  ------------------
 1037|      0|            flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
 1038|      0|            return -1;
 1039|      0|        }
 1040|     97|        c->header_buf  = tmp;
 1041|     97|        c->header_size = new_size;
 1042|     97|    }
 1043|       |
 1044|       |    /* append the header key */
 1045|  3.62k|    memcpy(c->header_buf + c->header_len,
 1046|  3.62k|           key, key_len);
 1047|  3.62k|    c->header_len += key_len;
 1048|       |
 1049|       |    /* append the separator */
 1050|  3.62k|    c->header_buf[c->header_len++] = ':';
 1051|  3.62k|    c->header_buf[c->header_len++] = ' ';
 1052|       |
 1053|       |    /* append the header value */
 1054|  3.62k|    memcpy(c->header_buf + c->header_len,
 1055|  3.62k|           val, val_len);
 1056|  3.62k|    c->header_len += val_len;
 1057|       |
 1058|       |    /* Append the ending header CRLF */
 1059|  3.62k|    c->header_buf[c->header_len++] = '\r';
 1060|  3.62k|    c->header_buf[c->header_len++] = '\n';
 1061|       |
 1062|  3.62k|    return 0;
 1063|  3.62k|}
flb_http_client.c:header_available:
  110|  4.43k|{
  111|  4.43k|    int available;
  112|       |
  113|  4.43k|    available = c->header_size - c->header_len;
  114|  4.43k|    if (available < bytes) {
  ------------------
  |  Branch (114:9): [True: 99, False: 4.33k]
  ------------------
  115|     99|        return -1;
  116|     99|    }
  117|       |
  118|  4.33k|    return 0;
  119|  4.43k|}
flb_http_client.c:http_headers_destroy:
 1085|    822|{
 1086|    822|    flb_kv_release(&c->headers);
 1087|    822|}

flb_io_net_write:
  677|    810|{
  678|    810|    int              flags;
  679|    810|    struct flb_coro *coro;
  680|    810|    int              ret;
  681|       |
  682|    810|    ret  = -1;
  683|    810|    coro = flb_coro_get();
  684|    810|    flags = flb_connection_get_flags(connection);
  685|       |
  686|    810|    flb_trace("[io coro=%p] [net_write] trying %zd bytes", coro, len);
  ------------------
  |  |  223|    810|#define flb_trace(fmt, ...)  do {} while(0)
  |  |  ------------------
  |  |  |  Branch (223:42): [Folded - Ignored]
  |  |  ------------------
  ------------------
  687|       |
  688|    810|    if (connection->tls_session == NULL) {
  ------------------
  |  Branch (688:9): [True: 810, False: 0]
  ------------------
  689|    810|        if (flags & FLB_IO_ASYNC) {
  ------------------
  |  |   36|    810|#define FLB_IO_ASYNC       8  /* use async mode (depends on event loop) */
  ------------------
  |  Branch (689:13): [True: 810, False: 0]
  ------------------
  690|    810|            ret = net_io_write_async(coro, connection, data, len, out_len);
  691|    810|        }
  692|      0|        else {
  693|      0|            ret = net_io_write(connection, data, len, out_len);
  694|      0|        }
  695|    810|    }
  696|      0|#ifdef FLB_HAVE_TLS
  697|      0|    else if (flags & FLB_IO_TLS) {
  ------------------
  |  |   34|      0|#define FLB_IO_TLS         2  /* use TLS/SSL layer                      */
  ------------------
  |  Branch (697:14): [True: 0, False: 0]
  ------------------
  698|      0|        if (flags & FLB_IO_ASYNC) {
  ------------------
  |  |   36|      0|#define FLB_IO_ASYNC       8  /* use async mode (depends on event loop) */
  ------------------
  |  Branch (698:13): [True: 0, False: 0]
  ------------------
  699|      0|            ret = flb_tls_net_write_async(coro, connection->tls_session, data, len, out_len);
  700|      0|        }
  701|      0|        else {
  702|      0|            ret = flb_tls_net_write(connection->tls_session, data, len, out_len);
  703|      0|        }
  704|      0|    }
  705|    810|#endif
  706|       |
  707|    810|    if (ret > 0) {
  ------------------
  |  Branch (707:9): [True: 0, False: 810]
  ------------------
  708|      0|        flb_connection_reset_io_timeout(connection);
  709|      0|    }
  710|       |
  711|    810|    flb_trace("[io coro=%p] [net_write] ret=%i total=%lu/%lu",
  ------------------
  |  |  223|    810|#define flb_trace(fmt, ...)  do {} while(0)
  |  |  ------------------
  |  |  |  Branch (223:42): [Folded - Ignored]
  |  |  ------------------
  ------------------
  712|    810|              coro, ret, *out_len, len);
  713|       |
  714|    810|    return ret;
  715|    810|}
flb_io.c:net_io_write_async:
  343|    810|{
  344|    810|    int ret = 0;
  345|    810|    int error;
  346|    810|    uint32_t mask;
  347|    810|    ssize_t bytes;
  348|    810|    size_t total = 0;
  349|    810|    size_t to_send;
  350|    810|    char so_error_buf[256];
  351|    810|    struct mk_event event_backup;
  352|    810|    int event_restore_needed;
  353|       |
  354|    810|    event_restore_needed = FLB_FALSE;
  ------------------
  |  |   25|    810|#define FLB_FALSE  0
  ------------------
  355|       |
  356|    810|    net_io_backup_event(connection, &event_backup);
  357|       |
  358|    810|retry:
  359|    810|    error = 0;
  360|       |
  361|    810|    if (len - total > 524288) {
  ------------------
  |  Branch (361:9): [True: 17, False: 793]
  ------------------
  362|     17|        to_send = 524288;
  363|     17|    }
  364|    793|    else {
  365|    793|        to_send = (len - total);
  366|    793|    }
  367|       |
  368|    810|    bytes = send(connection->fd, (char *) data + total, to_send, 0);
  369|       |
  370|       |#ifdef FLB_HAVE_TRACE
  371|       |    if (bytes > 0) {
  372|       |        flb_trace("[io coro=%p] [fd %i] write_async(2)=%zd (%lu/%lu)",
  373|       |                  co, connection->fd, bytes, total + bytes, len);
  374|       |    }
  375|       |    else {
  376|       |        flb_trace("[io coro=%p] [fd %i] write_async(2)=%zd (%lu/%lu)",
  377|       |                  co, connection->fd, bytes, total, len);
  378|       |    }
  379|       |#endif
  380|       |
  381|    810|    if (bytes == -1) {
  ------------------
  |  Branch (381:9): [True: 810, False: 0]
  ------------------
  382|    810|        if (FLB_WOULDBLOCK()) {
  ------------------
  |  |   46|    810|#define FLB_WOULDBLOCK()     (errno == EAGAIN || errno == EWOULDBLOCK)
  |  |  ------------------
  |  |  |  Branch (46:31): [True: 0, False: 810]
  |  |  |  Branch (46:50): [True: 0, False: 810]
  |  |  ------------------
  ------------------
  383|      0|            event_restore_needed = FLB_TRUE;
  ------------------
  |  |   26|      0|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|      0|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  384|       |
  385|      0|            ret = mk_event_add(connection->evl,
  386|      0|                               connection->fd,
  387|      0|                               FLB_ENGINE_EV_THREAD,
  ------------------
  |  |   30|      0|#define FLB_ENGINE_EV_THREAD        (1 << 10)                          /*  1024 */
  ------------------
  388|      0|                               MK_EVENT_WRITE,
  ------------------
  |  |   39|      0|#define MK_EVENT_WRITE           4
  ------------------
  389|      0|                               &connection->event);
  390|       |
  391|      0|            connection->event.priority = FLB_ENGINE_PRIORITY_SEND_RECV;
  ------------------
  |  |   77|      0|#define FLB_ENGINE_PRIORITY_SEND_RECV   FLB_ENGINE_PRIORITY_NETWORK
  |  |  ------------------
  |  |  |  |   68|      0|#define FLB_ENGINE_PRIORITY_NETWORK     1
  |  |  ------------------
  ------------------
  392|       |
  393|      0|            if (ret == -1) {
  ------------------
  |  Branch (393:17): [True: 0, False: 0]
  ------------------
  394|       |                /*
  395|       |                 * If we failed here there no much that we can do, just
  396|       |                 * let the caller we failed
  397|       |                 */
  398|      0|                *out_len = total;
  399|       |
  400|      0|                net_io_restore_event(connection, &event_backup);
  401|       |
  402|      0|                return -1;
  403|      0|            }
  404|       |
  405|      0|            connection->coroutine = co;
  406|       |
  407|       |            /*
  408|       |             * Return the control to the parent caller, we need to wait for
  409|       |             * the event loop to get back to us.
  410|       |             */
  411|      0|            flb_coro_yield(co, FLB_FALSE);
  ------------------
  |  |   25|      0|#define FLB_FALSE  0
  ------------------
  412|       |
  413|       |            /* We want this field to hold NULL at all times unless we are explicitly
  414|       |             * waiting to be resumed.
  415|       |             */
  416|      0|            connection->coroutine = NULL;
  417|       |
  418|       |            /* Save events mask since mk_event_del() will reset it */
  419|      0|            mask = connection->event.mask;
  420|       |
  421|       |            /* We got a notification, remove the event registered */
  422|      0|            ret = mk_event_del(connection->evl, &connection->event);
  423|       |
  424|      0|            if (ret == -1) {
  ------------------
  |  Branch (424:17): [True: 0, False: 0]
  ------------------
  425|      0|                *out_len = total;
  426|       |
  427|      0|                net_io_restore_event(connection, &event_backup);
  428|       |
  429|      0|                return -1;
  430|      0|            }
  431|       |
  432|       |            /* Check the connection status */
  433|      0|            if (mask & MK_EVENT_WRITE) {
  ------------------
  |  |   39|      0|#define MK_EVENT_WRITE           4
  ------------------
  |  Branch (433:17): [True: 0, False: 0]
  ------------------
  434|      0|                error = flb_socket_error(connection->fd);
  435|       |
  436|      0|                if (error != 0) {
  ------------------
  |  Branch (436:21): [True: 0, False: 0]
  ------------------
  437|       |                    /* Connection is broken, not much to do here */
  438|      0|                    strerror_r(error, so_error_buf, sizeof(so_error_buf) - 1);
  439|       |
  440|      0|                    flb_error("[io fd=%i] error sending data to: %s (%s)",
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  441|      0|                              connection->fd,
  442|      0|                              flb_connection_get_remote_address(connection),
  443|      0|                              so_error_buf);
  444|       |
  445|      0|                    *out_len = total;
  446|       |
  447|      0|                    net_io_restore_event(connection, &event_backup);
  448|       |
  449|      0|                    return -1;
  450|      0|                }
  451|       |
  452|      0|                MK_EVENT_NEW(&connection->event);
  453|       |
  454|      0|                goto retry;
  455|      0|            }
  456|      0|            else {
  457|      0|                *out_len = total;
  458|       |
  459|      0|                net_io_restore_event(connection, &event_backup);
  460|       |
  461|      0|                return -1;
  462|      0|            }
  463|       |
  464|      0|        }
  465|    810|        else {
  466|    810|            *out_len = total;
  467|       |
  468|    810|            net_io_restore_event(connection, &event_backup);
  469|    810|            net_io_propagate_critical_error(connection);
  470|       |
  471|    810|            return -1;
  472|    810|        }
  473|    810|    }
  474|       |
  475|       |    /* Update counters */
  476|      0|    total += bytes;
  477|      0|    if (total < len) {
  ------------------
  |  Branch (477:9): [True: 0, False: 0]
  ------------------
  478|      0|        if ((connection->event.mask & MK_EVENT_WRITE) == 0) {
  ------------------
  |  |   39|      0|#define MK_EVENT_WRITE           4
  ------------------
  |  Branch (478:13): [True: 0, False: 0]
  ------------------
  479|      0|            ret = mk_event_add(connection->evl,
  480|      0|                               connection->fd,
  481|      0|                               FLB_ENGINE_EV_THREAD,
  ------------------
  |  |   30|      0|#define FLB_ENGINE_EV_THREAD        (1 << 10)                          /*  1024 */
  ------------------
  482|      0|                               MK_EVENT_WRITE,
  ------------------
  |  |   39|      0|#define MK_EVENT_WRITE           4
  ------------------
  483|      0|                               &connection->event);
  484|       |
  485|      0|            connection->event.priority = FLB_ENGINE_PRIORITY_SEND_RECV;
  ------------------
  |  |   77|      0|#define FLB_ENGINE_PRIORITY_SEND_RECV   FLB_ENGINE_PRIORITY_NETWORK
  |  |  ------------------
  |  |  |  |   68|      0|#define FLB_ENGINE_PRIORITY_NETWORK     1
  |  |  ------------------
  ------------------
  486|       |
  487|      0|            if (ret == -1) {
  ------------------
  |  Branch (487:17): [True: 0, False: 0]
  ------------------
  488|       |                /*
  489|       |                 * If we failed here there no much that we can do, just
  490|       |                 * let the caller we failed
  491|       |                 */
  492|      0|                *out_len = total;
  493|       |
  494|      0|                net_io_restore_event(connection, &event_backup);
  495|       |
  496|      0|                return -1;
  497|      0|            }
  498|      0|        }
  499|       |
  500|      0|        connection->coroutine = co;
  501|       |
  502|      0|        flb_coro_yield(co, MK_FALSE);
  ------------------
  |  |   27|      0|#define MK_FALSE 0
  ------------------
  503|       |
  504|       |        /* We want this field to hold NULL at all times unless we are explicitly
  505|       |         * waiting to be resumed.
  506|       |         */
  507|      0|        connection->coroutine = NULL;
  508|       |
  509|      0|        goto retry;
  510|      0|    }
  511|       |
  512|      0|    if (event_restore_needed) {
  ------------------
  |  Branch (512:9): [True: 0, False: 0]
  ------------------
  513|       |        /* If we enter here it means we registered this connection
  514|       |         * in the event loop, in which case we need to unregister it
  515|       |         * and restore the original registration if there was one.
  516|       |         *
  517|       |         * We do it conditionally because in those cases in which
  518|       |         * send succeeds on the first try we don't touch the event
  519|       |         * and it wouldn't make sense to unregister and register for
  520|       |         * the same event.
  521|       |         */
  522|       |
  523|      0|        net_io_restore_event(connection, &event_backup);
  524|      0|    }
  525|       |
  526|      0|    *out_len = total;
  527|       |
  528|      0|    return bytes;
  529|      0|}
flb_io.c:net_io_backup_event:
  299|    810|{
  300|    810|    if (connection != NULL && backup != NULL) {
  ------------------
  |  Branch (300:9): [True: 810, False: 0]
  |  Branch (300:31): [True: 810, False: 0]
  ------------------
  301|    810|        memcpy(backup, &connection->event, sizeof(struct mk_event));
  302|    810|    }
  303|    810|}
flb_io.c:net_io_restore_event:
  307|    810|{
  308|    810|    int result;
  309|       |
  310|    810|    if (connection != NULL && backup != NULL) {
  ------------------
  |  Branch (310:9): [True: 810, False: 0]
  |  Branch (310:31): [True: 810, False: 0]
  ------------------
  311|    810|        if (MK_EVENT_IS_REGISTERED((&connection->event))) {
  ------------------
  |  |   71|    810|#define MK_EVENT_IS_REGISTERED(event) ((event->status & MK_EVENT_REGISTERED) != 0)
  |  |  ------------------
  |  |  |  |   53|    810|#define MK_EVENT_REGISTERED      2    /* event is registered into the ev loop */
  |  |  ------------------
  |  |  |  Branch (71:39): [True: 0, False: 810]
  |  |  ------------------
  ------------------
  312|      0|            result = mk_event_del(connection->evl, &connection->event);
  313|       |
  314|      0|            assert(result == 0);
  315|      0|        }
  316|       |
  317|    810|        if (MK_EVENT_IS_REGISTERED(backup)) {
  ------------------
  |  |   71|    810|#define MK_EVENT_IS_REGISTERED(event) ((event->status & MK_EVENT_REGISTERED) != 0)
  |  |  ------------------
  |  |  |  |   53|    810|#define MK_EVENT_REGISTERED      2    /* event is registered into the ev loop */
  |  |  ------------------
  |  |  |  Branch (71:39): [True: 0, False: 810]
  |  |  ------------------
  ------------------
  318|      0|            connection->event.priority = backup->priority;
  319|      0|            connection->event.handler = backup->handler;
  320|       |
  321|      0|            result = mk_event_add(connection->evl,
  322|      0|                                  connection->fd,
  323|      0|                                  backup->type,
  324|      0|                                  backup->mask,
  325|      0|                                  &connection->event);
  326|       |
  327|      0|            assert(result == 0);
  328|      0|        }
  329|    810|    }
  330|    810|}
flb_io.c:net_io_propagate_critical_error:
  192|    810|{
  193|    810|    switch (errno) {
  194|    810|    case EBADF:
  ------------------
  |  Branch (194:5): [True: 810, False: 0]
  ------------------
  195|    810|    case ECONNRESET:
  ------------------
  |  Branch (195:5): [True: 0, False: 810]
  ------------------
  196|    810|    case EDESTADDRREQ:
  ------------------
  |  Branch (196:5): [True: 0, False: 810]
  ------------------
  197|    810|    case ENOTCONN:
  ------------------
  |  Branch (197:5): [True: 0, False: 810]
  ------------------
  198|    810|    case EPIPE:
  ------------------
  |  Branch (198:5): [True: 0, False: 810]
  ------------------
  199|    810|    case EACCES:
  ------------------
  |  Branch (199:5): [True: 0, False: 810]
  ------------------
  200|    810|    case ENOTTY:
  ------------------
  |  Branch (200:5): [True: 0, False: 810]
  ------------------
  201|    810|    case ENETDOWN:
  ------------------
  |  Branch (201:5): [True: 0, False: 810]
  ------------------
  202|    810|    case ENETUNREACH:
  ------------------
  |  Branch (202:5): [True: 0, False: 810]
  ------------------
  203|    810|        connection->net_error = errno;
  204|    810|    }
  205|    810|}

flb_kernel_info:
   70|    411|{
   71|       |
   72|    411|    int a, b, c;
   73|    411|    int len;
   74|    411|    int pos;
   75|    411|    char *p, *t;
   76|    411|    char *tmp;
   77|    411|    struct utsname uts;
   78|    411|    struct flb_kernel *kernel;
   79|       |
   80|    411|    if (uname(&uts) == -1) {
  ------------------
  |  Branch (80:9): [True: 0, False: 411]
  ------------------
   81|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
   82|      0|        return NULL;
   83|      0|    }
   84|    411|    len = strlen(uts.release);
   85|       |
   86|       |    /* Fixme: this don't support Linux Kernel 10.x.x :P */
   87|    411|    a = (*uts.release - '0');
   88|       |
   89|       |    /* Second number */
   90|    411|    p = (uts.release) + 2;
   91|    411|    pos = mk_string_char_search(p, '.', len - 2);
   92|    411|    if (pos <= 0) {
  ------------------
  |  Branch (92:9): [True: 0, False: 411]
  ------------------
   93|       |        /* Some Debian systems uses a different notation, e.g: 3.14-2-amd64 */
   94|      0|        pos = mk_string_char_search(p, '-', len - 2);
   95|      0|        if (pos <= 0) {
  ------------------
  |  Branch (95:13): [True: 0, False: 0]
  ------------------
   96|      0|            return NULL;
   97|      0|        }
   98|      0|    }
   99|       |
  100|    411|    tmp = mk_string_copy_substr(p, 0, pos);
  101|    411|    if (!tmp) {
  ------------------
  |  Branch (101:9): [True: 0, False: 411]
  ------------------
  102|      0|        return NULL;
  103|      0|    }
  104|    411|    b = atoi(tmp);
  105|    411|    mk_mem_free(tmp);
  106|       |
  107|       |    /* Last number (it needs filtering) */
  108|    411|    t = p = p + pos + 1;
  109|    411|    do {
  110|    411|        t++;
  111|    411|    } while (isdigit(*t));
  112|       |
  113|    411|    tmp = mk_string_copy_substr(p, 0, t - p);
  114|    411|    if (!tmp) {
  ------------------
  |  Branch (114:9): [True: 0, False: 411]
  ------------------
  115|      0|        return NULL;
  116|      0|    }
  117|    411|    c = atoi(tmp);
  118|    411|    mk_mem_free(tmp);
  119|       |
  120|    411|    kernel = flb_malloc(sizeof(struct flb_kernel));
  121|    411|    if (!kernel) {
  ------------------
  |  Branch (121:9): [True: 0, False: 411]
  ------------------
  122|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  123|      0|        return NULL;
  124|      0|    }
  125|    411|    kernel->major = a;
  126|    411|    kernel->minor = b;
  127|    411|    kernel->patch = c;
  128|    411|    kernel->s_version.data = flb_malloc(16);
  129|       |
  130|    411|    if (!kernel->s_version.data) {
  ------------------
  |  Branch (130:9): [True: 0, False: 411]
  ------------------
  131|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  132|      0|        flb_free(kernel);
  133|      0|        return NULL;
  134|      0|    }
  135|       |
  136|    411|    len = snprintf(kernel->s_version.data, 16, "%i.%i.%i", a, b, c);
  137|    411|    if (len == -1) {
  ------------------
  |  Branch (137:9): [True: 0, False: 411]
  ------------------
  138|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  139|      0|        flb_free(kernel->s_version.data);
  140|      0|        flb_free(kernel);
  141|      0|        return NULL;
  142|      0|    }
  143|    411|    kernel->s_version.len = len;
  144|    411|    kernel->n_version = FLB_KERNEL_VERSION(a, b, c);
  ------------------
  |  |   27|    411|#define FLB_KERNEL_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + (c))
  ------------------
  145|       |
  146|    411|    return kernel;
  147|    411|}
flb_kernel_destroy:
  152|    411|{
  153|    411|    if (kernel == NULL) {
  ------------------
  |  Branch (153:9): [True: 0, False: 411]
  ------------------
  154|      0|        return;
  155|      0|    }
  156|       |
  157|    411|    if (kernel->s_version.data) {
  ------------------
  |  Branch (157:9): [True: 411, False: 0]
  ------------------
  158|    411|        flb_free(kernel->s_version.data);
  159|    411|    }
  160|    411|    flb_free(kernel);
  161|    411|}

flb_kv_item_create_len:
   33|  3.65k|{
   34|  3.65k|    struct flb_kv *kv;
   35|       |
   36|  3.65k|    kv = flb_calloc(1, sizeof(struct flb_kv));
   37|  3.65k|    if (!kv) {
  ------------------
  |  Branch (37:9): [True: 0, False: 3.65k]
  ------------------
   38|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
   39|      0|        return NULL;
   40|      0|    }
   41|       |
   42|  3.65k|    kv->key = flb_sds_create_len(k_buf, k_len);
   43|  3.65k|    if (!kv->key) {
  ------------------
  |  Branch (43:9): [True: 0, False: 3.65k]
  ------------------
   44|      0|        flb_free(kv);
   45|      0|        return NULL;
   46|      0|    }
   47|       |
   48|  3.65k|    if (v_len > 0) {
  ------------------
  |  Branch (48:9): [True: 3.65k, False: 0]
  ------------------
   49|  3.65k|        kv->val = flb_sds_create_len(v_buf, v_len);
   50|  3.65k|        if (!kv->val) {
  ------------------
  |  Branch (50:13): [True: 0, False: 3.65k]
  ------------------
   51|      0|            flb_sds_destroy(kv->key);
   52|      0|            flb_free(kv);
   53|      0|            return NULL;
   54|      0|        }
   55|  3.65k|    }
   56|       |
   57|  3.65k|    mk_list_add(&kv->_head, list);
   58|  3.65k|    return kv;
   59|  3.65k|}
flb_kv_item_destroy:
   80|  3.65k|{
   81|  3.65k|    if (kv->key) {
  ------------------
  |  Branch (81:9): [True: 3.65k, False: 0]
  ------------------
   82|  3.65k|        flb_sds_destroy(kv->key);
   83|  3.65k|    }
   84|       |
   85|  3.65k|    if (kv->val) {
  ------------------
  |  Branch (85:9): [True: 3.65k, False: 0]
  ------------------
   86|  3.65k|        flb_sds_destroy(kv->val);
   87|  3.65k|    }
   88|       |
   89|  3.65k|    mk_list_del(&kv->_head);
   90|  3.65k|    flb_free(kv);
   91|  3.65k|}
flb_kv_release:
   94|  1.64k|{
   95|  1.64k|    struct mk_list *tmp;
   96|  1.64k|    struct mk_list *head;
   97|  1.64k|    struct flb_kv *kv;
   98|       |
   99|  3.65k|    mk_list_foreach_safe(head, tmp, list) {
  ------------------
  |  |  207|  5.29k|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 3.65k, False: 1.64k]
  |  |  ------------------
  ------------------
  100|  3.65k|        kv = mk_list_entry(head, struct flb_kv, _head);
  ------------------
  |  |  214|  3.65k|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|  3.65k|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|  3.65k|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|  3.65k|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  101|  3.65k|        flb_kv_item_destroy(kv);
  102|  3.65k|    }
  103|  1.64k|}

flb_log_construct:
  501|  1.84k|{
  502|  1.84k|    int body_size;
  503|  1.84k|    int ret;
  504|  1.84k|    int len;
  505|  1.84k|    int total;
  506|  1.84k|    time_t now;
  507|  1.84k|    const char *header_color = NULL;
  508|  1.84k|    const char *header_title = NULL;
  509|  1.84k|    const char *bold_color = ANSI_BOLD;
  ------------------
  |  |   47|  1.84k|#define ANSI_BOLD     "\033[1m"
  ------------------
  510|  1.84k|    const char *reset_color = ANSI_RESET;
  ------------------
  |  |   46|  1.84k|#define ANSI_RESET    "\033[0m"
  ------------------
  511|  1.84k|    struct tm result;
  512|  1.84k|    struct tm *current;
  513|       |
  514|  1.84k|    switch (type) {
  ------------------
  |  Branch (514:13): [True: 0, False: 1.84k]
  ------------------
  515|      0|    case FLB_LOG_HELP:
  ------------------
  |  |   45|      0|#define FLB_LOG_HELP    6  /* unused by log level */
  ------------------
  |  Branch (515:5): [True: 0, False: 1.84k]
  ------------------
  516|      0|        header_title = "help";
  517|      0|        header_color = ANSI_CYAN;
  ------------------
  |  |   48|      0|#define ANSI_CYAN     "\033[96m"
  ------------------
  518|      0|        break;
  519|      0|    case FLB_LOG_INFO:
  ------------------
  |  |   42|      0|#define FLB_LOG_INFO    3  /* default */
  ------------------
  |  Branch (519:5): [True: 0, False: 1.84k]
  ------------------
  520|      0|        header_title = "info";
  521|      0|        header_color = ANSI_GREEN;
  ------------------
  |  |   53|      0|#define ANSI_GREEN    "\033[92m"
  ------------------
  522|      0|        break;
  523|      0|    case FLB_LOG_WARN:
  ------------------
  |  |   41|      0|#define FLB_LOG_WARN    2
  ------------------
  |  Branch (523:5): [True: 0, False: 1.84k]
  ------------------
  524|      0|        header_title = "warn";
  525|      0|        header_color = ANSI_YELLOW;
  ------------------
  |  |   51|      0|#define ANSI_YELLOW   "\033[93m"
  ------------------
  526|      0|        break;
  527|  1.84k|    case FLB_LOG_ERROR:
  ------------------
  |  |   40|  1.84k|#define FLB_LOG_ERROR   1
  ------------------
  |  Branch (527:5): [True: 1.84k, False: 0]
  ------------------
  528|  1.84k|        header_title = "error";
  529|  1.84k|        header_color = ANSI_RED;
  ------------------
  |  |   50|  1.84k|#define ANSI_RED      "\033[91m"
  ------------------
  530|  1.84k|        break;
  531|      0|    case FLB_LOG_DEBUG:
  ------------------
  |  |   43|      0|#define FLB_LOG_DEBUG   4
  ------------------
  |  Branch (531:5): [True: 0, False: 1.84k]
  ------------------
  532|      0|        header_title = "debug";
  533|      0|        header_color = ANSI_YELLOW;
  ------------------
  |  |   51|      0|#define ANSI_YELLOW   "\033[93m"
  ------------------
  534|      0|        break;
  535|      0|    case FLB_LOG_IDEBUG:
  ------------------
  |  |   47|      0|#define FLB_LOG_IDEBUG  10
  ------------------
  |  Branch (535:5): [True: 0, False: 1.84k]
  ------------------
  536|      0|        header_title = "debug";
  537|      0|        header_color = ANSI_CYAN;
  ------------------
  |  |   48|      0|#define ANSI_CYAN     "\033[96m"
  ------------------
  538|      0|        break;
  539|      0|    case FLB_LOG_TRACE:
  ------------------
  |  |   44|      0|#define FLB_LOG_TRACE   5
  ------------------
  |  Branch (539:5): [True: 0, False: 1.84k]
  ------------------
  540|      0|        header_title = "trace";
  541|      0|        header_color = ANSI_BLUE;
  ------------------
  |  |   52|      0|#define ANSI_BLUE     "\033[94m"
  ------------------
  542|      0|        break;
  543|  1.84k|    }
  544|       |
  545|       |    #ifdef FLB_LOG_NO_CONTROL_CHARS
  546|       |    header_color = "";
  547|       |    bold_color = "";
  548|       |    reset_color = "";
  549|       |    #else
  550|       |    /* Only print colors to a terminal */
  551|  1.84k|    if (!isatty(STDOUT_FILENO)) {
  ------------------
  |  Branch (551:9): [True: 1.84k, False: 0]
  ------------------
  552|  1.84k|        header_color = "";
  553|  1.84k|        bold_color = "";
  554|  1.84k|        reset_color = "";
  555|  1.84k|    }
  556|  1.84k|    #endif // FLB_LOG_NO_CONTROL_CHARS
  557|       |
  558|  1.84k|    now = time(NULL);
  559|  1.84k|    current = localtime_r(&now, &result);
  560|       |
  561|  1.84k|    if (current == NULL) {
  ------------------
  |  Branch (561:9): [True: 0, False: 1.84k]
  ------------------
  562|      0|        return -1;
  563|      0|    }
  564|       |
  565|  1.84k|    len = snprintf(msg->msg, sizeof(msg->msg) - 1,
  566|  1.84k|                   "%s[%s%i/%02i/%02i %02i:%02i:%02i%s]%s [%s%5s%s] ",
  567|       |                   /*      time     */                    /* type */
  568|       |
  569|       |                   /* time variables */
  570|  1.84k|                   bold_color, reset_color,
  571|  1.84k|                   current->tm_year + 1900,
  572|  1.84k|                   current->tm_mon + 1,
  573|  1.84k|                   current->tm_mday,
  574|  1.84k|                   current->tm_hour,
  575|  1.84k|                   current->tm_min,
  576|  1.84k|                   current->tm_sec,
  577|  1.84k|                   bold_color, reset_color,
  578|       |
  579|       |                   /* type format */
  580|  1.84k|                   header_color, header_title, reset_color);
  581|       |
  582|  1.84k|    body_size = (sizeof(msg->msg) - 2) - len;
  583|  1.84k|    total = vsnprintf(msg->msg + len,
  584|  1.84k|                      body_size,
  585|  1.84k|                      fmt, *args);
  586|  1.84k|    if (total < 0) {
  ------------------
  |  Branch (586:9): [True: 0, False: 1.84k]
  ------------------
  587|      0|        return -1;
  588|      0|    }
  589|  1.84k|    ret = total; /* ret means a buffer size need to save log body */
  590|       |
  591|  1.84k|    total = strlen(msg->msg + len) + len;
  592|  1.84k|    msg->msg[total++] = '\n';
  593|  1.84k|    msg->msg[total]   = '\0';
  594|  1.84k|    msg->size = total;
  595|       |
  596|  1.84k|    *ret_len = len;
  597|       |
  598|  1.84k|    if (ret >= body_size) {
  ------------------
  |  Branch (598:9): [True: 0, False: 1.84k]
  ------------------
  599|       |        /* log is truncated */
  600|      0|        return ret - body_size;
  601|      0|    }
  602|       |
  603|  1.84k|    return 0;
  604|  1.84k|}
flb_log_print:
  633|  1.84k|{
  634|  1.84k|    int n;
  635|  1.84k|    int len;
  636|  1.84k|    int ret;
  637|  1.84k|    struct log_message msg = {0};
  638|  1.84k|    va_list args;
  639|       |
  640|  1.84k|    struct flb_worker *w;
  641|       |
  642|  1.84k|    va_start(args, fmt);
  643|  1.84k|    ret = flb_log_construct(&msg, &len, type, file, line, fmt, &args);
  644|  1.84k|    va_end(args);
  645|       |
  646|  1.84k|    if (ret < 0) {
  ------------------
  |  Branch (646:9): [True: 0, False: 1.84k]
  ------------------
  647|      0|        return;
  648|      0|    }
  649|       |
  650|  1.84k|    w = flb_worker_get();
  651|  1.84k|    if (w) {
  ------------------
  |  Branch (651:9): [True: 0, False: 1.84k]
  ------------------
  652|      0|        n = flb_pipe_write_all(w->log[1], &msg, sizeof(msg));
  653|      0|        if (n == -1) {
  ------------------
  |  Branch (653:13): [True: 0, False: 0]
  ------------------
  654|      0|            fprintf(stderr, "%s", (char *) msg.msg);
  655|      0|            perror("write");
  656|      0|        }
  657|      0|    }
  658|  1.84k|    else {
  659|  1.84k|        fprintf(stderr, "%s", (char *) msg.msg);
  660|  1.84k|    }
  661|       |
  662|       |    #ifdef FLB_HAVE_AWS_ERROR_REPORTER
  663|       |    if (is_error_reporting_enabled()) {
  664|       |        if (type == FLB_LOG_ERROR) {
  665|       |            flb_aws_error_reporter_write(error_reporter, msg.msg + len);
  666|       |        }
  667|       |
  668|       |        flb_aws_error_reporter_clean(error_reporter);
  669|       |    }
  670|       |    #endif
  671|  1.84k|}
flb_errno_print:
  674|    810|{
  675|    810|    char buf[256];
  676|       |
  677|    810|    strerror_r(errnum, buf, sizeof(buf) - 1);
  678|    810|    flb_error("[%s:%i errno=%i] %s", file, line, errnum, buf);
  ------------------
  |  |  170|    810|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|    810|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 810, False: 0]
  |  |  ------------------
  |  |  171|    810|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|    810|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  679|    810|    return 0;
  680|    810|}

flb_net_setup_init:
  111|    411|{
  112|    411|    net->dns_mode = NULL;
  113|    411|    net->dns_resolver = NULL;
  114|    411|    net->dns_prefer_ipv4 = FLB_FALSE;
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
  115|    411|    net->dns_prefer_ipv6 = FLB_FALSE;
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
  116|    411|    net->keepalive = FLB_TRUE;
  ------------------
  |  |   26|    411|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    411|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  117|    411|    net->keepalive_idle_timeout = 30;
  118|    411|    net->keepalive_max_recycle = 0;
  119|    411|    net->tcp_keepalive = FLB_FALSE;
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
  120|    411|    net->tcp_keepalive_time = -1;
  121|    411|    net->tcp_keepalive_interval = -1;
  122|    411|    net->tcp_keepalive_probes = -1;
  123|    411|    net->accept_timeout = 10;
  124|    411|    net->connect_timeout = 10;
  125|    411|    net->io_timeout = 0; /* Infinite time */
  126|    411|    net->source_address = NULL;
  127|    411|}

flb_parser_create:
  161|    822|{
  162|    822|    int ret;
  163|    822|    int len;
  164|    822|    int diff = 0;
  165|    822|    int size;
  166|    822|    int is_epoch = FLB_FALSE;
  ------------------
  |  |   25|    822|#define FLB_FALSE  0
  ------------------
  167|    822|    char *tmp;
  168|    822|    char *timeptr;
  169|    822|    struct mk_list *head;
  170|    822|    struct flb_parser *p;
  171|    822|    struct flb_regex *regex;
  172|       |
  173|       |    /* Iterate current parsers and make sure the new one don't exists */
  174|    822|    mk_list_foreach(head, &config->parsers) {
  ------------------
  |  |  205|  1.23k|#define mk_list_foreach(curr, head) for( curr = (head)->next; curr != (head); curr = curr->next )
  |  |  ------------------
  |  |  |  Branch (205:63): [True: 411, False: 822]
  |  |  ------------------
  ------------------
  175|    411|        p = mk_list_entry(head, struct flb_parser, _head);
  ------------------
  |  |  214|    411|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|    411|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|    411|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|    411|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  176|    411|        if (p->name && strcmp(p->name, name) == 0) {
  ------------------
  |  Branch (176:13): [True: 411, False: 0]
  |  Branch (176:24): [True: 0, False: 411]
  ------------------
  177|      0|            flb_error("[parser] parser named '%s' already exists, skip.",
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  178|      0|                      name);
  179|      0|            return NULL;
  180|      0|        }
  181|    411|    }
  182|       |
  183|       |    /* Allocate context */
  184|    822|    p = flb_calloc(1, sizeof(struct flb_parser));
  185|    822|    if (!p) {
  ------------------
  |  Branch (185:9): [True: 0, False: 822]
  ------------------
  186|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  187|      0|        return NULL;
  188|      0|    }
  189|    822|    p->decoders = decoders;
  190|    822|    mk_list_add(&p->_head, &config->parsers);
  191|       |
  192|       |    /* Format lookup */
  193|    822|    if (strcasecmp(format, "regex") == 0) {
  ------------------
  |  Branch (193:9): [True: 411, False: 411]
  ------------------
  194|    411|        p->type = FLB_PARSER_REGEX;
  ------------------
  |  |   30|    411|#define FLB_PARSER_REGEX 1
  ------------------
  195|    411|    }
  196|    411|    else if (strcasecmp(format, "json") == 0) {
  ------------------
  |  Branch (196:14): [True: 411, False: 0]
  ------------------
  197|    411|        p->type = FLB_PARSER_JSON;
  ------------------
  |  |   31|    411|#define FLB_PARSER_JSON  2
  ------------------
  198|    411|    }
  199|      0|    else if (strcasecmp(format, "ltsv") == 0) {
  ------------------
  |  Branch (199:14): [True: 0, False: 0]
  ------------------
  200|      0|        p->type = FLB_PARSER_LTSV;
  ------------------
  |  |   32|      0|#define FLB_PARSER_LTSV  3
  ------------------
  201|      0|    }
  202|      0|    else if (strcasecmp(format, "logfmt") == 0) {
  ------------------
  |  Branch (202:14): [True: 0, False: 0]
  ------------------
  203|      0|        p->type = FLB_PARSER_LOGFMT;
  ------------------
  |  |   33|      0|#define FLB_PARSER_LOGFMT 4
  ------------------
  204|      0|    }
  205|      0|    else {
  206|      0|        flb_error("[parser:%s] Invalid format %s", name, format);
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  207|      0|        mk_list_del(&p->_head);
  208|      0|        flb_free(p);
  209|      0|        return NULL;
  210|      0|    }
  211|       |
  212|    822|    if (p->type == FLB_PARSER_REGEX) {
  ------------------
  |  |   30|    822|#define FLB_PARSER_REGEX 1
  ------------------
  |  Branch (212:9): [True: 411, False: 411]
  ------------------
  213|    411|        if (!p_regex) {
  ------------------
  |  Branch (213:13): [True: 0, False: 411]
  ------------------
  214|      0|            flb_error("[parser:%s] Invalid regex pattern", name);
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  215|      0|            mk_list_del(&p->_head);
  216|      0|            flb_free(p);
  217|      0|            return NULL;
  218|      0|        }
  219|       |
  220|    411|        regex = flb_regex_create(p_regex);
  221|    411|        if (!regex) {
  ------------------
  |  Branch (221:13): [True: 0, False: 411]
  ------------------
  222|      0|            flb_error("[parser:%s] Invalid regex pattern %s", name, p_regex);
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  223|      0|            mk_list_del(&p->_head);
  224|      0|            flb_free(p);
  225|      0|            return NULL;
  226|      0|        }
  227|    411|        p->regex = regex;
  228|    411|        p->skip_empty = skip_empty;
  229|    411|        p->p_regex = flb_strdup(p_regex);
  230|    411|    }
  231|       |
  232|    822|    p->name = flb_strdup(name);
  233|       |
  234|    822|    if (time_fmt) {
  ------------------
  |  Branch (234:9): [True: 822, False: 0]
  ------------------
  235|    822|        p->time_fmt_full = flb_strdup(time_fmt);
  236|    822|        if (!p->time_fmt_full) {
  ------------------
  |  Branch (236:13): [True: 0, False: 822]
  ------------------
  237|      0|            flb_error("[parser:%s] could not duplicate time fmt full", name);
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  238|      0|            flb_interim_parser_destroy(p);
  239|      0|            return NULL;
  240|      0|        }
  241|    822|        p->time_fmt = flb_strdup(time_fmt);
  242|    822|        if (!p->time_fmt) {
  ------------------
  |  Branch (242:13): [True: 0, False: 822]
  ------------------
  243|      0|            flb_error("[parser:%s] could not duplicate time fmt", name);
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  244|      0|            flb_interim_parser_destroy(p);
  245|      0|            return NULL;
  246|      0|        }
  247|       |
  248|       |        /* Check if the format is considering the year */
  249|    822|        if (strstr(p->time_fmt, "%Y") || strstr(p->time_fmt, "%y")) {
  ------------------
  |  Branch (249:13): [True: 822, False: 0]
  |  Branch (249:42): [True: 0, False: 0]
  ------------------
  250|    822|            p->time_with_year = FLB_TRUE;
  ------------------
  |  |   26|    822|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    822|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  251|    822|        }
  252|      0|        else if (strstr(p->time_fmt, "%s")) {
  ------------------
  |  Branch (252:18): [True: 0, False: 0]
  ------------------
  253|      0|            is_epoch = FLB_TRUE;
  ------------------
  |  |   26|      0|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|      0|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  254|      0|            p->time_with_year = FLB_TRUE;
  ------------------
  |  |   26|      0|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|      0|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  255|      0|        }
  256|      0|        else {
  257|      0|            size = strlen(p->time_fmt);
  258|      0|            p->time_with_year = FLB_FALSE;
  ------------------
  |  |   25|      0|#define FLB_FALSE  0
  ------------------
  259|      0|            p->time_fmt_year = flb_malloc(size + 4);
  260|      0|            if (!p->time_fmt_year) {
  ------------------
  |  Branch (260:17): [True: 0, False: 0]
  ------------------
  261|      0|                flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  262|      0|                flb_interim_parser_destroy(p);
  263|      0|                return NULL;
  264|      0|            }
  265|       |
  266|       |            /* Append the year at the beginning */
  267|      0|            tmp = p->time_fmt_year;
  268|      0|            *tmp++ = '%';
  269|      0|            *tmp++ = 'Y';
  270|      0|            *tmp++ = ' ';
  271|       |
  272|      0|            memcpy(tmp, p->time_fmt, size);
  273|      0|            tmp += size;
  274|      0|            *tmp++ = '\0';
  275|      0|        }
  276|       |
  277|       |        /* Check if the format contains a timezone (%z) */
  278|    822|        if (strstr(p->time_fmt, "%z") || strstr(p->time_fmt, "%Z") ||
  ------------------
  |  Branch (278:13): [True: 411, False: 411]
  |  Branch (278:42): [True: 0, False: 411]
  ------------------
  279|    822|            strstr(p->time_fmt, "%SZ") || strstr(p->time_fmt, "%S.%LZ")) {
  ------------------
  |  Branch (279:13): [True: 0, False: 411]
  |  Branch (279:43): [True: 0, False: 411]
  ------------------
  280|    411|#if defined(FLB_HAVE_GMTOFF) || !defined(FLB_HAVE_SYSTEM_STRPTIME)
  281|    411|            p->time_with_tz = FLB_TRUE;
  ------------------
  |  |   26|    411|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    411|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  282|       |#else
  283|       |            flb_error("[parser] timezone offset not supported");
  284|       |            flb_error("[parser] you cannot use %%z/%%Z on this platform");
  285|       |            flb_interim_parser_destroy(p);
  286|       |            return NULL;
  287|       |#endif
  288|    411|        }
  289|       |
  290|       |        /*
  291|       |         * Check if the format expect fractional seconds
  292|       |         *
  293|       |         * Since strptime(3) does not support fractional seconds, this
  294|       |         * requires a workaround/hack in our parser. This is a known
  295|       |         * issue and addressed in different ways in other languages.
  296|       |         *
  297|       |         * The following links are a good reference:
  298|       |         *
  299|       |         * - http://stackoverflow.com/questions/7114690/how-to-parse-syslog-timestamp
  300|       |         * - http://code.activestate.com/lists/python-list/521885
  301|       |         */
  302|    822|        if (is_epoch == FLB_TRUE || p->time_with_year == FLB_TRUE) {
  ------------------
  |  |   26|  1.64k|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|  1.64k|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
                      if (is_epoch == FLB_TRUE || p->time_with_year == FLB_TRUE) {
  ------------------
  |  |   26|    822|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    822|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  |  Branch (302:13): [True: 0, False: 822]
  |  Branch (302:37): [True: 822, False: 0]
  ------------------
  303|    822|            timeptr = p->time_fmt;
  304|    822|        }
  305|      0|        else {
  306|      0|            timeptr = p->time_fmt_year;
  307|      0|        }
  308|       |
  309|    822|        tmp = strstr(timeptr, "%L");
  310|    822|        if (tmp) {
  ------------------
  |  Branch (310:13): [True: 822, False: 0]
  ------------------
  311|    822|            tmp[0] = '\0';
  312|    822|            tmp[1] = '\0';
  313|    822|            p->time_frac_secs = (tmp + 2);
  314|    822|        }
  315|       |
  316|       |        /*
  317|       |         * Fall back to the system timezone
  318|       |         * if there is no zone parsed from the log.
  319|       |         */
  320|    822|        p->time_system_timezone = time_system_timezone;
  321|       |
  322|       |        /*
  323|       |         * Optional fixed timezone offset, only applied if
  324|       |         * not falling back to system timezone.
  325|       |         */
  326|    822|        if (!p->time_system_timezone && time_offset) {
  ------------------
  |  Branch (326:13): [True: 822, False: 0]
  |  Branch (326:41): [True: 0, False: 822]
  ------------------
  327|      0|            diff = 0;
  328|      0|            len = strlen(time_offset);
  329|      0|            ret = flb_parser_tzone_offset(time_offset, len, &diff);
  330|      0|            if (ret == -1) {
  ------------------
  |  Branch (330:17): [True: 0, False: 0]
  ------------------
  331|      0|                flb_interim_parser_destroy(p);
  332|      0|                return NULL;
  333|      0|            }
  334|      0|            p->time_offset = diff;
  335|      0|        }
  336|    822|    }
  337|       |
  338|    822|    if (time_key) {
  ------------------
  |  Branch (338:9): [True: 822, False: 0]
  ------------------
  339|    822|        p->time_key = flb_strdup(time_key);
  340|    822|    }
  341|       |
  342|    822|    p->time_keep = time_keep;
  343|    822|    p->time_strict = time_strict;
  344|    822|    p->logfmt_no_bare_keys = logfmt_no_bare_keys;
  345|    822|    p->types = types;
  346|    822|    p->types_len = types_len;
  347|    822|    return p;
  348|    822|}
flb_parser_destroy:
  351|    822|{
  352|    822|    int i = 0;
  353|       |
  354|    822|    if (parser->type == FLB_PARSER_REGEX) {
  ------------------
  |  |   30|    822|#define FLB_PARSER_REGEX 1
  ------------------
  |  Branch (354:9): [True: 411, False: 411]
  ------------------
  355|    411|        flb_regex_destroy(parser->regex);
  356|    411|        flb_free(parser->p_regex);
  357|    411|    }
  358|       |
  359|    822|    flb_free(parser->name);
  360|    822|    if (parser->time_fmt) {
  ------------------
  |  Branch (360:9): [True: 822, False: 0]
  ------------------
  361|    822|        flb_free(parser->time_fmt);
  362|    822|        flb_free(parser->time_fmt_full);
  363|    822|    }
  364|    822|    if (parser->time_fmt_year) {
  ------------------
  |  Branch (364:9): [True: 0, False: 822]
  ------------------
  365|      0|        flb_free(parser->time_fmt_year);
  366|      0|    }
  367|    822|    if (parser->time_key) {
  ------------------
  |  Branch (367:9): [True: 822, False: 0]
  ------------------
  368|    822|        flb_free(parser->time_key);
  369|    822|    }
  370|    822|    if (parser->types_len != 0) {
  ------------------
  |  Branch (370:9): [True: 0, False: 822]
  ------------------
  371|      0|        for (i=0; i<parser->types_len; i++){
  ------------------
  |  Branch (371:19): [True: 0, False: 0]
  ------------------
  372|      0|            flb_free(parser->types[i].key);
  373|      0|        }
  374|      0|        flb_free(parser->types);
  375|      0|    }
  376|       |
  377|    822|    if (parser->decoders) {
  ------------------
  |  Branch (377:9): [True: 0, False: 822]
  ------------------
  378|      0|        flb_parser_decoder_list_destroy(parser->decoders);
  379|      0|    }
  380|       |
  381|    822|    mk_list_del(&parser->_head);
  382|    822|    flb_free(parser);
  383|    822|}
flb_parser_exit:
  386|    411|{
  387|    411|    struct mk_list *tmp;
  388|    411|    struct mk_list *head;
  389|    411|    struct flb_parser *parser;
  390|       |
  391|       |    /* release 'parsers' */
  392|    822|    mk_list_foreach_safe(head, tmp, &config->parsers) {
  ------------------
  |  |  207|  1.23k|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 822, False: 411]
  |  |  ------------------
  ------------------
  393|    822|        parser = mk_list_entry(head, struct flb_parser, _head);
  ------------------
  |  |  214|    822|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|    822|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|    822|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|    822|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  394|    822|        flb_parser_destroy(parser);
  395|    822|    }
  396|       |
  397|       |    /* release 'multiline parsers' */
  398|    411|    flb_ml_exit(config);
  399|    411|}

flb_plugin_create:
  183|    411|{
  184|    411|    struct flb_plugins *ctx;
  185|       |
  186|    411|    ctx = flb_malloc(sizeof(struct flb_plugins));
  187|    411|    if (!ctx) {
  ------------------
  |  Branch (187:9): [True: 0, False: 411]
  ------------------
  188|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  189|      0|        return NULL;
  190|      0|    }
  191|       |
  192|    411|    mk_list_init(&ctx->input);
  193|    411|    mk_list_init(&ctx->processor);
  194|    411|    mk_list_init(&ctx->filter);
  195|    411|    mk_list_init(&ctx->output);
  196|       |
  197|    411|    return ctx;
  198|    411|}
flb_plugin_destroy:
  467|    411|{
  468|    411|    struct mk_list *tmp;
  469|    411|    struct mk_list *head;
  470|    411|    struct flb_plugin *plugin;
  471|       |
  472|    411|    mk_list_foreach_safe(head, tmp, &ctx->input) {
  ------------------
  |  |  207|    411|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  473|      0|        plugin = mk_list_entry(head, struct flb_plugin, _head);
  ------------------
  |  |  214|      0|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|      0|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|      0|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|      0|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  474|      0|        destroy_plugin(plugin);
  475|      0|    }
  476|       |
  477|    411|    mk_list_foreach_safe(head, tmp, &ctx->processor) {
  ------------------
  |  |  207|    411|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  478|      0|        plugin = mk_list_entry(head, struct flb_plugin, _head);
  ------------------
  |  |  214|      0|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|      0|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|      0|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|      0|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  479|      0|        destroy_plugin(plugin);
  480|      0|    }
  481|       |
  482|    411|    mk_list_foreach_safe(head, tmp, &ctx->filter) {
  ------------------
  |  |  207|    411|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  483|      0|        plugin = mk_list_entry(head, struct flb_plugin, _head);
  ------------------
  |  |  214|      0|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|      0|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|      0|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|      0|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  484|      0|        destroy_plugin(plugin);
  485|      0|    }
  486|       |
  487|    411|    mk_list_foreach_safe(head, tmp, &ctx->output) {
  ------------------
  |  |  207|    411|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  488|      0|        plugin = mk_list_entry(head, struct flb_plugin, _head);
  ------------------
  |  |  214|      0|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|      0|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|      0|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|      0|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  489|      0|        destroy_plugin(plugin);
  490|      0|    }
  491|       |
  492|    411|    flb_free(ctx);
  493|    411|}

flb_regex_init:
  156|    411|{
  157|    411|    return onig_init();
  158|    411|}
flb_regex_create:
  161|  9.45k|{
  162|  9.45k|    int ret;
  163|  9.45k|    struct flb_regex *r;
  164|       |
  165|       |    /* Create context */
  166|  9.45k|    r = flb_malloc(sizeof(struct flb_regex));
  167|  9.45k|    if (!r) {
  ------------------
  |  Branch (167:9): [True: 0, False: 9.45k]
  ------------------
  168|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  169|      0|        return NULL;
  170|      0|    }
  171|       |
  172|       |    /* Compile pattern */
  173|  9.45k|    ret = str_to_regex(pattern, (OnigRegex*)&r->regex);
  174|  9.45k|    if (ret == -1) {
  ------------------
  |  Branch (174:9): [True: 0, False: 9.45k]
  ------------------
  175|      0|        flb_free(r);
  176|      0|        return NULL;
  177|      0|    }
  178|       |
  179|  9.45k|    return r;
  180|  9.45k|}
flb_regex_destroy:
  316|  9.45k|{
  317|  9.45k|    onig_free(r->regex);
  318|  9.45k|    flb_free(r);
  319|  9.45k|    return 0;
  320|  9.45k|}
flb_regex.c:str_to_regex:
  117|  9.45k|{
  118|  9.45k|    int ret;
  119|  9.45k|    size_t len;
  120|  9.45k|    const char *start;
  121|  9.45k|    const char *end;
  122|  9.45k|    char *new_end = NULL;
  123|  9.45k|    OnigErrorInfo einfo;
  124|  9.45k|    OnigOptionType option;
  125|       |
  126|  9.45k|    len = strlen(pattern);
  127|  9.45k|    start = pattern;
  128|  9.45k|    end = pattern + len;
  129|       |
  130|  9.45k|    option = check_option(start, end, &new_end);
  131|       |
  132|  9.45k|    if (pattern[0] == '/' && pattern[len - 1] == '/') {
  ------------------
  |  Branch (132:9): [True: 9.04k, False: 411]
  |  Branch (132:30): [True: 9.04k, False: 0]
  ------------------
  133|  9.04k|        start++;
  134|  9.04k|        end--;
  135|  9.04k|    }
  136|       |
  137|  9.45k|    if (new_end != NULL) {
  ------------------
  |  Branch (137:9): [True: 0, False: 9.45k]
  ------------------
  138|       |        /* pattern is /pat/option. new_end indicates a last '/'. */
  139|      0|        start++;
  140|      0|        end = new_end;
  141|      0|    }
  142|       |
  143|  9.45k|    ret = onig_new(reg,
  144|  9.45k|                   (const unsigned char *)start, (const unsigned char *)end,
  145|  9.45k|                   option,
  146|  9.45k|                   ONIG_ENCODING_UTF8, ONIG_SYNTAX_RUBY, &einfo);
  ------------------
  |  |  274|  9.45k|# define ONIG_ENCODING_UTF8         ONIG_ENCODING_UTF_8
  |  |  ------------------
  |  |  |  |  242|  9.45k|# define ONIG_ENCODING_UTF_8        (&OnigEncodingUTF_8)
  |  |  ------------------
  ------------------
                                 ONIG_ENCODING_UTF8, ONIG_SYNTAX_RUBY, &einfo);
  ------------------
  |  |  514|  9.45k|#define ONIG_SYNTAX_RUBY               (&OnigSyntaxRuby)
  ------------------
  147|       |
  148|  9.45k|    if (ret != ONIG_NORMAL) {
  ------------------
  |  |  627|  9.45k|#define ONIG_NORMAL                                            0
  ------------------
  |  Branch (148:9): [True: 0, False: 9.45k]
  ------------------
  149|      0|        return -1;
  150|      0|    }
  151|  9.45k|    return 0;
  152|  9.45k|}
flb_regex.c:check_option:
   61|  9.45k|{
   62|  9.45k|    char *chr = NULL;
   63|  9.45k|    OnigOptionType option = ONIG_OPTION_NONE;
  ------------------
  |  |  453|  9.45k|#define ONIG_OPTION_NONE                 0U
  ------------------
   64|       |
   65|  9.45k|    if (start == NULL || end == NULL || new_end == NULL) {
  ------------------
  |  Branch (65:9): [True: 0, False: 9.45k]
  |  Branch (65:26): [True: 0, False: 9.45k]
  |  Branch (65:41): [True: 0, False: 9.45k]
  ------------------
   66|      0|        return ONIG_OPTION_DEFAULT;
  ------------------
  |  |  450|      0|#define ONIG_OPTION_DEFAULT            ONIG_OPTION_NONE
  |  |  ------------------
  |  |  |  |  453|      0|#define ONIG_OPTION_NONE                 0U
  |  |  ------------------
  ------------------
   67|      0|    }
   68|  9.45k|    else if (start[0] != '/') {
  ------------------
  |  Branch (68:14): [True: 411, False: 9.04k]
  ------------------
   69|    411|        *new_end = NULL;
   70|    411|        return ONIG_OPTION_DEFAULT;
  ------------------
  |  |  450|    411|#define ONIG_OPTION_DEFAULT            ONIG_OPTION_NONE
  |  |  ------------------
  |  |  |  |  453|    411|#define ONIG_OPTION_NONE                 0U
  |  |  ------------------
  ------------------
   71|    411|    }
   72|       |
   73|  9.04k|    chr = strrchr(start, '/');
   74|  9.04k|    if (!chr) {
  ------------------
  |  Branch (74:9): [True: 0, False: 9.04k]
  ------------------
   75|      0|        *new_end = NULL;
   76|      0|        return ONIG_OPTION_DEFAULT;
  ------------------
  |  |  450|      0|#define ONIG_OPTION_DEFAULT            ONIG_OPTION_NONE
  |  |  ------------------
  |  |  |  |  453|      0|#define ONIG_OPTION_NONE                 0U
  |  |  ------------------
  ------------------
   77|      0|    }
   78|       |
   79|  9.04k|    if (chr == start || chr == end) {
  ------------------
  |  Branch (79:9): [True: 0, False: 9.04k]
  |  Branch (79:25): [True: 0, False: 9.04k]
  ------------------
   80|      0|        *new_end = NULL;
   81|      0|        return ONIG_OPTION_DEFAULT;
  ------------------
  |  |  450|      0|#define ONIG_OPTION_DEFAULT            ONIG_OPTION_NONE
  |  |  ------------------
  |  |  |  |  453|      0|#define ONIG_OPTION_NONE                 0U
  |  |  ------------------
  ------------------
   82|      0|    }
   83|  9.04k|    *new_end = chr;
   84|       |
   85|  9.04k|    chr++;
   86|  9.04k|    while(chr != end && *chr != '\0') {
  ------------------
  |  Branch (86:11): [True: 0, False: 9.04k]
  |  Branch (86:25): [True: 0, False: 0]
  ------------------
   87|      0|        switch (*chr) {
   88|      0|        case 'm':
  ------------------
  |  Branch (88:9): [True: 0, False: 0]
  ------------------
   89|      0|            option |= ONIG_OPTION_MULTILINE;
  ------------------
  |  |  456|      0|#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
  |  |  ------------------
  |  |  |  |  455|      0|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  454|      0|#define ONIG_OPTION_IGNORECASE           1U
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   90|      0|            break;
   91|      0|        case 'i':
  ------------------
  |  Branch (91:9): [True: 0, False: 0]
  ------------------
   92|      0|            option |= ONIG_OPTION_IGNORECASE;
  ------------------
  |  |  454|      0|#define ONIG_OPTION_IGNORECASE           1U
  ------------------
   93|      0|            break;
   94|      0|        case 'o':
  ------------------
  |  Branch (94:9): [True: 0, False: 0]
  ------------------
   95|      0|            flb_debug("[regex:%s]: 'o' option is not supported.", __FUNCTION__);
  ------------------
  |  |  197|      0|    if (flb_log_check(FLB_LOG_DEBUG))                               \
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  |  |  |  Branch (197:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|        flb_log_print(FLB_LOG_DEBUG, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  ------------------
   96|      0|            break;
   97|      0|        case 'x':
  ------------------
  |  Branch (97:9): [True: 0, False: 0]
  ------------------
   98|      0|            option |= ONIG_OPTION_EXTEND;
  ------------------
  |  |  455|      0|#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
  |  |  ------------------
  |  |  |  |  454|      0|#define ONIG_OPTION_IGNORECASE           1U
  |  |  ------------------
  ------------------
   99|      0|            break;
  100|      0|        default:
  ------------------
  |  Branch (100:9): [True: 0, False: 0]
  ------------------
  101|      0|            flb_debug("[regex:%s]: unknown option. use default.", __FUNCTION__);
  ------------------
  |  |  197|      0|    if (flb_log_check(FLB_LOG_DEBUG))                               \
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  |  |  |  Branch (197:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|        flb_log_print(FLB_LOG_DEBUG, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  ------------------
  102|      0|            *new_end = NULL;
  103|      0|            return ONIG_OPTION_DEFAULT;
  ------------------
  |  |  450|      0|#define ONIG_OPTION_DEFAULT            ONIG_OPTION_NONE
  |  |  ------------------
  |  |  |  |  453|      0|#define ONIG_OPTION_NONE                 0U
  |  |  ------------------
  ------------------
  104|      0|        }
  105|      0|        chr++;
  106|      0|    }
  107|       |
  108|  9.04k|    if (option == ONIG_OPTION_NONE) {
  ------------------
  |  |  453|  9.04k|#define ONIG_OPTION_NONE                 0U
  ------------------
  |  Branch (108:9): [True: 9.04k, False: 0]
  ------------------
  109|  9.04k|        *new_end = NULL;
  110|  9.04k|        option = ONIG_OPTION_DEFAULT;
  ------------------
  |  |  450|  9.04k|#define ONIG_OPTION_DEFAULT            ONIG_OPTION_NONE
  |  |  ------------------
  |  |  |  |  453|  9.04k|#define ONIG_OPTION_NONE                 0U
  |  |  ------------------
  ------------------
  111|  9.04k|    }
  112|       |
  113|  9.04k|    return option;
  114|  9.04k|}

flb_sds_create_len:
   59|  35.6k|{
   60|  35.6k|    flb_sds_t s;
   61|  35.6k|    struct flb_sds *head;
   62|       |
   63|  35.6k|    s = sds_alloc(len);
   64|  35.6k|    if (!s) {
  ------------------
  |  Branch (64:9): [True: 0, False: 35.6k]
  ------------------
   65|      0|        return NULL;
   66|      0|    }
   67|       |
   68|  35.6k|    if (str) {
  ------------------
  |  Branch (68:9): [True: 35.6k, False: 0]
  ------------------
   69|  35.6k|        memcpy(s, str, len);
   70|  35.6k|        s[len] = '\0';
   71|       |
   72|  35.6k|        head = FLB_SDS_HEADER(s);
  ------------------
  |  |   46|  35.6k|#define FLB_SDS_HEADER(s)  ((struct flb_sds *) (s - FLB_SDS_HEADER_SIZE))
  |  |  ------------------
  |  |  |  |   34|  35.6k|#define FLB_SDS_HEADER_SIZE (sizeof(uint64_t) + sizeof(uint64_t))
  |  |  ------------------
  ------------------
   73|  35.6k|        head->len = len;
   74|  35.6k|    }
   75|  35.6k|    return s;
   76|  35.6k|}
flb_sds_create:
   79|  14.7k|{
   80|  14.7k|    size_t len;
   81|       |
   82|  14.7k|    if (!str) {
  ------------------
  |  Branch (82:9): [True: 0, False: 14.7k]
  ------------------
   83|      0|        len = 0;
   84|      0|    }
   85|  14.7k|    else {
   86|  14.7k|        len = strlen(str);
   87|  14.7k|    }
   88|       |
   89|  14.7k|    return flb_sds_create_len(str, len);
   90|  14.7k|}
flb_sds_create_size:
   93|    822|{
   94|    822|    return sds_alloc(size);
   95|    822|}
flb_sds_increase:
   99|    822|{
  100|    822|    size_t new_size;
  101|    822|    struct flb_sds *head;
  102|    822|    flb_sds_t out;
  103|    822|    void *tmp;
  104|       |
  105|    822|    out = s;
  106|    822|    new_size = (FLB_SDS_HEADER_SIZE + flb_sds_alloc(s) + len + 1);
  ------------------
  |  |   34|    822|#define FLB_SDS_HEADER_SIZE (sizeof(uint64_t) + sizeof(uint64_t))
  ------------------
  107|    822|    head = FLB_SDS_HEADER(s);
  ------------------
  |  |   46|    822|#define FLB_SDS_HEADER(s)  ((struct flb_sds *) (s - FLB_SDS_HEADER_SIZE))
  |  |  ------------------
  |  |  |  |   34|    822|#define FLB_SDS_HEADER_SIZE (sizeof(uint64_t) + sizeof(uint64_t))
  |  |  ------------------
  ------------------
  108|    822|    tmp = flb_realloc(head, new_size);
  109|    822|    if (!tmp) {
  ------------------
  |  Branch (109:9): [True: 0, False: 822]
  ------------------
  110|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  111|      0|        return NULL;
  112|      0|    }
  113|    822|    head = (struct flb_sds *) tmp;
  114|    822|    head->alloc += len;
  115|    822|    out = head->buf;
  116|       |
  117|    822|    return out;
  118|    822|}
flb_sds_printf:
  337|    822|{
  338|    822|    va_list ap;
  339|    822|    int len = strlen(fmt)*2;
  340|    822|    int size;
  341|    822|    flb_sds_t tmp = NULL;
  342|    822|    flb_sds_t s;
  343|    822|    struct flb_sds *head;
  344|       |
  345|    822|    if (len < 64) len = 64;
  ------------------
  |  Branch (345:9): [True: 822, False: 0]
  ------------------
  346|       |
  347|    822|    s = *sds;
  348|    822|    if (flb_sds_avail(s) < len) {
  ------------------
  |  Branch (348:9): [True: 822, False: 0]
  ------------------
  349|    822|        tmp = flb_sds_increase(s, len - flb_sds_avail(s));
  350|    822|        if (!tmp) {
  ------------------
  |  Branch (350:13): [True: 0, False: 822]
  ------------------
  351|      0|            return NULL;
  352|      0|        }
  353|    822|        *sds = s = tmp;
  354|    822|    }
  355|       |
  356|    822|    va_start(ap, fmt);
  357|    822|    size = vsnprintf((char *) (s + flb_sds_len(s)), flb_sds_avail(s), fmt, ap);
  358|    822|    if (size < 0) {
  ------------------
  |  Branch (358:9): [True: 0, False: 822]
  ------------------
  359|      0|        flb_warn("[%s] buggy vsnprintf return %d", __FUNCTION__, size);
  ------------------
  |  |  179|      0|    if (flb_log_check(FLB_LOG_WARN))                                 \
  |  |  ------------------
  |  |  |  |   41|      0|#define FLB_LOG_WARN    2
  |  |  ------------------
  |  |  |  Branch (179:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  180|      0|        flb_log_print(FLB_LOG_WARN, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   41|      0|#define FLB_LOG_WARN    2
  |  |  ------------------
  ------------------
  360|      0|        va_end(ap);
  361|      0|        return NULL;
  362|      0|    }
  363|    822|    va_end(ap);
  364|       |
  365|    822|    if (size >= flb_sds_avail(s)) {
  ------------------
  |  Branch (365:9): [True: 0, False: 822]
  ------------------
  366|      0|        tmp = flb_sds_increase(s, size - flb_sds_avail(s) + 1);
  367|      0|        if (!tmp) {
  ------------------
  |  Branch (367:13): [True: 0, False: 0]
  ------------------
  368|      0|            return NULL;
  369|      0|        }
  370|      0|        *sds = s = tmp;
  371|       |
  372|      0|        va_start(ap, fmt);
  373|      0|        size = vsnprintf((char *) (s + flb_sds_len(s)), flb_sds_avail(s), fmt, ap);
  374|      0|        if (size > flb_sds_avail(s)) {
  ------------------
  |  Branch (374:13): [True: 0, False: 0]
  ------------------
  375|      0|            flb_warn("[%s] vsnprintf is insatiable ", __FUNCTION__);
  ------------------
  |  |  179|      0|    if (flb_log_check(FLB_LOG_WARN))                                 \
  |  |  ------------------
  |  |  |  |   41|      0|#define FLB_LOG_WARN    2
  |  |  ------------------
  |  |  |  Branch (179:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  180|      0|        flb_log_print(FLB_LOG_WARN, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   41|      0|#define FLB_LOG_WARN    2
  |  |  ------------------
  ------------------
  376|      0|            va_end(ap);
  377|      0|            return NULL;
  378|      0|        }
  379|      0|        va_end(ap);
  380|      0|    }
  381|       |
  382|    822|    head = FLB_SDS_HEADER(s);
  ------------------
  |  |   46|    822|#define FLB_SDS_HEADER(s)  ((struct flb_sds *) (s - FLB_SDS_HEADER_SIZE))
  |  |  ------------------
  |  |  |  |   34|    822|#define FLB_SDS_HEADER_SIZE (sizeof(uint64_t) + sizeof(uint64_t))
  |  |  ------------------
  ------------------
  383|    822|    head->len += size;
  384|    822|    s[head->len] = '\0';
  385|       |
  386|    822|    return s;
  387|    822|}
flb_sds_destroy:
  390|  36.4k|{
  391|  36.4k|    struct flb_sds *head;
  392|       |
  393|  36.4k|    if (!s) {
  ------------------
  |  Branch (393:9): [True: 0, False: 36.4k]
  ------------------
  394|      0|        return;
  395|      0|    }
  396|       |
  397|  36.4k|    head = FLB_SDS_HEADER(s);
  ------------------
  |  |   46|  36.4k|#define FLB_SDS_HEADER(s)  ((struct flb_sds *) (s - FLB_SDS_HEADER_SIZE))
  |  |  ------------------
  |  |  |  |   34|  36.4k|#define FLB_SDS_HEADER_SIZE (sizeof(uint64_t) + sizeof(uint64_t))
  |  |  ------------------
  ------------------
  398|  36.4k|    flb_free(head);
  399|  36.4k|}
flb_sds.c:sds_alloc:
   37|  36.4k|{
   38|  36.4k|    void *buf;
   39|  36.4k|    flb_sds_t s;
   40|  36.4k|    struct flb_sds *head;
   41|       |
   42|  36.4k|    buf = flb_malloc(FLB_SDS_HEADER_SIZE + size + 1);
  ------------------
  |  |   34|  36.4k|#define FLB_SDS_HEADER_SIZE (sizeof(uint64_t) + sizeof(uint64_t))
  ------------------
   43|  36.4k|    if (!buf) {
  ------------------
  |  Branch (43:9): [True: 0, False: 36.4k]
  ------------------
   44|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
   45|      0|        return NULL;
   46|      0|    }
   47|       |
   48|  36.4k|    head = buf;
   49|  36.4k|    head->len = 0;
   50|  36.4k|    head->alloc = size;
   51|       |
   52|  36.4k|    s = head->buf;
   53|  36.4k|    *s = '\0';
   54|       |
   55|  36.4k|    return s;
   56|  36.4k|}

flb_slist_create:
   28|  9.45k|{
   29|  9.45k|    mk_list_init(list);
   30|  9.45k|    return 0;
   31|  9.45k|}
flb_slist_add_n:
   35|  13.1k|{
   36|  13.1k|    struct flb_slist_entry *e;
   37|       |
   38|  13.1k|    e = flb_malloc(sizeof(struct flb_slist_entry));
   39|  13.1k|    if (!e) {
  ------------------
  |  Branch (39:9): [True: 0, False: 13.1k]
  ------------------
   40|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
   41|      0|        return -1;
   42|      0|    }
   43|       |
   44|  13.1k|    e->str = flb_sds_create_len(str, len);
   45|  13.1k|    if (!e->str) {
  ------------------
  |  Branch (45:9): [True: 0, False: 13.1k]
  ------------------
   46|      0|        flb_free(e);
   47|      0|        return -1;
   48|      0|    }
   49|       |
   50|  13.1k|    mk_list_add(&e->_head, head);
   51|  13.1k|    return 0;
   52|  13.1k|}
flb_slist_split_string:
  220|  9.04k|{
  221|  9.04k|    int i = 0;
  222|  9.04k|    int ret;
  223|  9.04k|    int count = 0;
  224|  9.04k|    int val_len;
  225|  9.04k|    int len;
  226|  9.04k|    int end;
  227|  9.04k|    char *p_init;
  228|  9.04k|    char *p_end;
  229|       |
  230|  9.04k|    if (!str) {
  ------------------
  |  Branch (230:9): [True: 0, False: 9.04k]
  ------------------
  231|      0|        return -1;
  232|      0|    }
  233|       |
  234|  9.04k|    len = strlen(str);
  235|  22.1k|    while (i < len) {
  ------------------
  |  Branch (235:12): [True: 13.1k, False: 9.04k]
  ------------------
  236|  13.1k|        end = mk_string_char_search(str + i, separator, len - i);
  237|  13.1k|        if (end < 0) {
  ------------------
  |  Branch (237:13): [True: 9.04k, False: 4.11k]
  ------------------
  238|  9.04k|            end = len - i;
  239|  9.04k|        }
  240|  4.11k|        else if ((end + i) == i) {
  ------------------
  |  Branch (240:18): [True: 0, False: 4.11k]
  ------------------
  241|      0|            i++;
  242|      0|            continue;
  243|      0|        }
  244|       |
  245|  13.1k|        p_init = (char *) str + i;
  246|  13.1k|        p_end = p_init + end - 1;
  247|       |
  248|       |        /* Skip empty spaces */
  249|  17.2k|        while (*p_init == ' ') {
  ------------------
  |  Branch (249:16): [True: 4.11k, False: 13.1k]
  ------------------
  250|  4.11k|            p_init++;
  251|  4.11k|        }
  252|       |
  253|  13.1k|        while (*p_end == ' ' && p_end >= p_init) {
  ------------------
  |  Branch (253:16): [True: 0, False: 13.1k]
  |  Branch (253:33): [True: 0, False: 0]
  ------------------
  254|      0|            p_end--;
  255|      0|        }
  256|       |
  257|  13.1k|        if (p_init > p_end) {
  ------------------
  |  Branch (257:13): [True: 0, False: 13.1k]
  ------------------
  258|      0|            goto next;
  259|      0|        }
  260|       |
  261|  13.1k|        if (p_init == p_end) {
  ------------------
  |  Branch (261:13): [True: 0, False: 13.1k]
  ------------------
  262|      0|            if (*p_init == ' ') {
  ------------------
  |  Branch (262:17): [True: 0, False: 0]
  ------------------
  263|      0|                goto next;
  264|      0|            }
  265|      0|            val_len = 1;
  266|      0|        }
  267|  13.1k|        else {
  268|  13.1k|            val_len = (p_end - p_init) + 1;
  269|  13.1k|        }
  270|       |
  271|  13.1k|        if (val_len == 0) {
  ------------------
  |  Branch (271:13): [True: 0, False: 13.1k]
  ------------------
  272|      0|            goto next;
  273|      0|        }
  274|       |
  275|  13.1k|        ret = flb_slist_add_n(list, p_init, val_len);
  276|  13.1k|        if (ret == -1) {
  ------------------
  |  Branch (276:13): [True: 0, False: 13.1k]
  ------------------
  277|      0|            return -1;
  278|      0|        }
  279|  13.1k|        count++;
  280|       |
  281|       |        /* Append remaining string as a new node ? */
  282|  13.1k|        if (count >= max_split && max_split > 0) {
  ------------------
  |  Branch (282:13): [True: 13.1k, False: 0]
  |  Branch (282:35): [True: 0, False: 13.1k]
  ------------------
  283|      0|            p_end = p_init + end;
  284|      0|            if (*p_end == separator) {
  ------------------
  |  Branch (284:17): [True: 0, False: 0]
  ------------------
  285|      0|                p_end++;
  286|      0|            }
  287|      0|            while (*p_end == ' ') {
  ------------------
  |  Branch (287:20): [True: 0, False: 0]
  ------------------
  288|      0|                p_end++;
  289|      0|            }
  290|       |
  291|      0|            if ((p_end - str) >= len) {
  ------------------
  |  Branch (291:17): [True: 0, False: 0]
  ------------------
  292|      0|                break;
  293|      0|            }
  294|       |
  295|      0|            ret = flb_slist_add(list, p_end);
  296|      0|            if (ret == -1) {
  ------------------
  |  Branch (296:17): [True: 0, False: 0]
  ------------------
  297|      0|                return -1;
  298|      0|            }
  299|      0|            count++;
  300|      0|            break;
  301|      0|        }
  302|       |
  303|  13.1k|    next:
  304|  13.1k|        i += end + 1;
  305|  13.1k|    }
  306|       |
  307|  9.04k|    return count;
  308|  9.04k|}
flb_slist_destroy:
  323|  9.45k|{
  324|  9.45k|    struct mk_list *tmp;
  325|  9.45k|    struct mk_list *head;
  326|  9.45k|    struct flb_slist_entry *e;
  327|       |
  328|  13.1k|    mk_list_foreach_safe(head, tmp, list) {
  ------------------
  |  |  207|  22.6k|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 13.1k, False: 9.45k]
  |  |  ------------------
  ------------------
  329|  13.1k|        e = mk_list_entry(head, struct flb_slist_entry, _head);
  ------------------
  |  |  214|  13.1k|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|  13.1k|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|  13.1k|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|  13.1k|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  330|  13.1k|        flb_sds_destroy(e->str);
  331|  13.1k|        mk_list_del(&e->_head);
  332|  13.1k|        flb_free(e);
  333|  13.1k|    }
  334|  9.45k|}

flb_upstream_queue_init:
  214|    411|{
  215|    411|    mk_list_init(&uq->av_queue);
  216|    411|    mk_list_init(&uq->busy_queue);
  217|    411|    mk_list_init(&uq->destroy_queue);
  218|    411|}
flb_upstream_queue_get:
  221|    411|{
  222|    411|    struct mk_list *head;
  223|    411|    struct mk_list *list;
  224|    411|    struct flb_upstream *th_u;
  225|    411|    struct flb_upstream_queue *uq;
  226|       |
  227|       |    /*
  228|       |     * Get the upstream queue, this might be different if the upstream is running
  229|       |     * in single-thread or multi-thread mode.
  230|       |     */
  231|    411|    if (flb_stream_is_thread_safe(&u->base) == FLB_TRUE) {
  ------------------
  |  |   26|    411|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    411|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  |  Branch (231:9): [True: 0, False: 411]
  ------------------
  232|      0|        list = flb_upstream_list_get();
  233|      0|        if (!list) {
  ------------------
  |  Branch (233:13): [True: 0, False: 0]
  ------------------
  234|       |            /*
  235|       |             * Here is the issue: a plugin enabled in multiworker mode in the
  236|       |             * initialization callback might wanted to use an upstream
  237|       |             * connection, but the init callback does not run in threaded mode
  238|       |             * so we hit this problem.
  239|       |             *
  240|       |             * As a fallback mechanism: just cross our fingers and return the
  241|       |             * principal upstream queue.
  242|       |             */
  243|      0|            return (struct flb_upstream_queue *) &u->queue;
  244|      0|        }
  245|       |
  246|      0|        mk_list_foreach(head, list) {
  ------------------
  |  |  205|      0|#define mk_list_foreach(curr, head) for( curr = (head)->next; curr != (head); curr = curr->next )
  |  |  ------------------
  |  |  |  Branch (205:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  247|      0|            th_u = mk_list_entry(head, struct flb_upstream, base._head);
  ------------------
  |  |  214|      0|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|      0|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|      0|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|      0|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  248|      0|            if (th_u->parent_upstream == u) {
  ------------------
  |  Branch (248:17): [True: 0, False: 0]
  ------------------
  249|      0|                break;
  250|      0|            }
  251|      0|            th_u = NULL;
  252|      0|        }
  253|       |
  254|      0|        if (!th_u) {
  ------------------
  |  Branch (254:13): [True: 0, False: 0]
  ------------------
  255|      0|            return NULL;
  256|      0|        }
  257|      0|        uq = &th_u->queue;
  258|      0|    }
  259|    411|    else {
  260|    411|        uq = &u->queue;
  261|    411|    }
  262|       |
  263|    411|    return uq;
  264|    411|}
flb_upstream_create:
  287|    411|{
  288|    411|    int ret;
  289|    411|    char *proxy_protocol = NULL;
  290|    411|    char *proxy_host = NULL;
  291|    411|    char *proxy_port = NULL;
  292|    411|    char *proxy_username = NULL;
  293|    411|    char *proxy_password = NULL;
  294|    411|    struct flb_upstream *u;
  295|       |
  296|    411|    u = flb_calloc(1, sizeof(struct flb_upstream));
  297|    411|    if (!u) {
  ------------------
  |  Branch (297:9): [True: 0, False: 411]
  ------------------
  298|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  299|      0|        return NULL;
  300|      0|    }
  301|       |
  302|    411|    u->base.dynamically_allocated = FLB_TRUE;
  ------------------
  |  |   26|    411|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    411|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  303|       |
  304|    411|    flb_stream_setup(&u->base,
  305|    411|                     FLB_UPSTREAM,
  ------------------
  |  |   29|    411|#define FLB_UPSTREAM              2
  ------------------
  306|    411|                     FLB_TRANSPORT_TCP,
  ------------------
  |  |   32|    411|#define FLB_TRANSPORT_TCP         1
  ------------------
  307|    411|                     flags,
  308|    411|                     tls,
  309|    411|                     config,
  310|    411|                     NULL);
  311|       |
  312|       |    /* Set upstream to the http_proxy if it is specified. */
  313|    411|    if (flb_upstream_needs_proxy(host, config->http_proxy, config->no_proxy) == FLB_TRUE) {
  ------------------
  |  |   26|    411|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    411|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  |  Branch (313:9): [True: 0, False: 411]
  ------------------
  314|      0|        flb_debug("[upstream] config->http_proxy: %s", config->http_proxy);
  ------------------
  |  |  197|      0|    if (flb_log_check(FLB_LOG_DEBUG))                               \
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  |  |  |  Branch (197:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|        flb_log_print(FLB_LOG_DEBUG, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   43|      0|#define FLB_LOG_DEBUG   4
  |  |  ------------------
  ------------------
  315|      0|        ret = flb_utils_proxy_url_split(config->http_proxy, &proxy_protocol,
  316|      0|                                        &proxy_username, &proxy_password,
  317|      0|                                        &proxy_host, &proxy_port);
  318|      0|        if (ret == -1) {
  ------------------
  |  Branch (318:13): [True: 0, False: 0]
  ------------------
  319|      0|            flb_free(u);
  320|      0|            return NULL;
  321|      0|        }
  322|       |
  323|      0|        u->tcp_host = flb_strdup(proxy_host);
  324|      0|        u->tcp_port = atoi(proxy_port);
  325|      0|        u->proxied_host = flb_strdup(host);
  326|      0|        u->proxied_port = port;
  327|       |
  328|      0|        if (proxy_username && proxy_password) {
  ------------------
  |  Branch (328:13): [True: 0, False: 0]
  |  Branch (328:31): [True: 0, False: 0]
  ------------------
  329|      0|            u->proxy_username = flb_strdup(proxy_username);
  330|      0|            u->proxy_password = flb_strdup(proxy_password);
  331|      0|        }
  332|       |
  333|      0|        flb_free(proxy_protocol);
  334|      0|        flb_free(proxy_host);
  335|      0|        flb_free(proxy_port);
  336|      0|        flb_free(proxy_username);
  337|      0|        flb_free(proxy_password);
  338|      0|    }
  339|    411|    else {
  340|    411|        u->tcp_host = flb_strdup(host);
  341|    411|        u->tcp_port = port;
  342|    411|    }
  343|       |
  344|    411|    if (!u->tcp_host) {
  ------------------
  |  Branch (344:9): [True: 0, False: 411]
  ------------------
  345|      0|        flb_free(u);
  346|      0|        return NULL;
  347|      0|    }
  348|       |
  349|    411|    flb_stream_enable_flags(&u->base, FLB_IO_ASYNC);
  ------------------
  |  |   36|    411|#define FLB_IO_ASYNC       8  /* use async mode (depends on event loop) */
  ------------------
  350|       |
  351|       |    /* Initialize queues */
  352|    411|    flb_upstream_queue_init(&u->queue);
  353|       |
  354|    411|    mk_list_add(&u->base._head, &config->upstreams);
  355|       |
  356|    411|    return u;
  357|    411|}
flb_upstream_needs_proxy:
  364|    411|{
  365|    411|    int ret;
  366|    411|    struct mk_list no_proxy_list;
  367|    411|    struct mk_list *head;
  368|    411|    struct flb_slist_entry *e = NULL;
  369|       |
  370|       |    /* No HTTP_PROXY, should not set up proxy for the upstream `host`. */
  371|    411|    if (proxy == NULL) {
  ------------------
  |  Branch (371:9): [True: 411, False: 0]
  ------------------
  372|    411|        return FLB_FALSE;
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
  373|    411|    }
  374|       |
  375|       |    /* No NO_PROXY with HTTP_PROXY set, should set up proxy for the upstream `host`. */
  376|      0|    if (no_proxy == NULL) {
  ------------------
  |  Branch (376:9): [True: 0, False: 0]
  ------------------
  377|      0|        return FLB_TRUE;
  ------------------
  |  |   26|      0|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|      0|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  378|      0|    }
  379|       |
  380|       |    /* NO_PROXY=`*`, it matches all hosts. */
  381|      0|    if (strcmp(no_proxy, "*") == 0) {
  ------------------
  |  Branch (381:9): [True: 0, False: 0]
  ------------------
  382|      0|        return FLB_FALSE;
  ------------------
  |  |   25|      0|#define FLB_FALSE  0
  ------------------
  383|      0|    }
  384|       |
  385|       |    /* check the URL list in the NO_PROXY  */
  386|      0|    ret = flb_slist_create(&no_proxy_list);
  387|      0|    if (ret != 0) {
  ------------------
  |  Branch (387:9): [True: 0, False: 0]
  ------------------
  388|      0|        return FLB_TRUE;
  ------------------
  |  |   26|      0|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|      0|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  389|      0|    }
  390|      0|    ret = flb_slist_split_string(&no_proxy_list, no_proxy, ',', -1);
  391|      0|    if (ret <= 0) {
  ------------------
  |  Branch (391:9): [True: 0, False: 0]
  ------------------
  392|      0|        return FLB_TRUE;
  ------------------
  |  |   26|      0|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|      0|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  393|      0|    }
  394|      0|    ret = FLB_TRUE;
  ------------------
  |  |   26|      0|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|      0|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  395|      0|    mk_list_foreach(head, &no_proxy_list) {
  ------------------
  |  |  205|      0|#define mk_list_foreach(curr, head) for( curr = (head)->next; curr != (head); curr = curr->next )
  |  |  ------------------
  |  |  |  Branch (205:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  396|      0|        e = mk_list_entry(head, struct flb_slist_entry, _head);
  ------------------
  |  |  214|      0|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|      0|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|      0|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|      0|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  397|      0|         if (strcmp(host, e->str) == 0) {
  ------------------
  |  Branch (397:14): [True: 0, False: 0]
  ------------------
  398|      0|            ret = FLB_FALSE;
  ------------------
  |  |   25|      0|#define FLB_FALSE  0
  ------------------
  399|      0|            break;
  400|      0|        }
  401|      0|    }
  402|       |
  403|       |    /* clean up the resources. */
  404|      0|    flb_slist_destroy(&no_proxy_list);
  405|       |
  406|      0|    return ret;
  407|      0|}
flb_upstream_destroy:
  637|    411|{
  638|    411|    struct mk_list *tmp;
  639|    411|    struct mk_list *head;
  640|    411|    struct flb_connection *u_conn;
  641|    411|    struct flb_upstream_queue *uq;
  642|       |
  643|    411|    uq = flb_upstream_queue_get(u);
  644|    411|    if (!uq) {
  ------------------
  |  Branch (644:9): [True: 0, False: 411]
  ------------------
  645|      0|        uq = &u->queue;
  646|      0|    }
  647|       |
  648|    411|    mk_list_foreach_safe(head, tmp, &uq->av_queue) {
  ------------------
  |  |  207|    411|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  649|      0|        u_conn = mk_list_entry(head, struct flb_connection, _head);
  ------------------
  |  |  214|      0|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|      0|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|      0|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|      0|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  650|      0|        prepare_destroy_conn(u_conn);
  651|      0|    }
  652|       |
  653|    411|    mk_list_foreach_safe(head, tmp, &uq->busy_queue) {
  ------------------
  |  |  207|    411|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  654|      0|        u_conn = mk_list_entry(head, struct flb_connection, _head);
  ------------------
  |  |  214|      0|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|      0|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|      0|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|      0|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  655|      0|        prepare_destroy_conn(u_conn);
  656|      0|    }
  657|       |
  658|    411|    mk_list_foreach_safe(head, tmp, &uq->destroy_queue) {
  ------------------
  |  |  207|    411|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  659|      0|        u_conn = mk_list_entry(head, struct flb_connection, _head);
  ------------------
  |  |  214|      0|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|      0|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|      0|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|      0|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  660|      0|        destroy_conn(u_conn);
  661|      0|    }
  662|       |
  663|    411|    flb_free(u->tcp_host);
  664|    411|    flb_free(u->proxied_host);
  665|    411|    flb_free(u->proxy_username);
  666|    411|    flb_free(u->proxy_password);
  667|    411|    mk_list_del(&u->base._head);
  668|    411|    flb_free(u);
  669|       |
  670|    411|    return 0;
  671|    411|}

flb_worker_init:
  112|    411|{
  113|    411|    FLB_TLS_INIT(flb_worker_ctx);
  ------------------
  |  |   35|    411|#define FLB_TLS_INIT(key)          do {} while (0)
  |  |  ------------------
  |  |  |  Branch (35:49): [Folded - Ignored]
  |  |  ------------------
  ------------------
  114|       |
  115|    411|    return 0;
  116|    411|}
flb_worker_get:
  135|  1.84k|{
  136|  1.84k|    return FLB_TLS_GET(flb_worker_ctx);
  ------------------
  |  |   34|  1.84k|#define FLB_TLS_GET(key)           key
  ------------------
  137|  1.84k|}
flb_worker_exit:
  156|    411|{
  157|    411|    int c = 0;
  158|    411|    struct mk_list *tmp;
  159|    411|    struct mk_list *head;
  160|    411|    struct flb_worker *worker;
  161|       |
  162|    411|    mk_list_foreach_safe(head, tmp, &config->workers) {
  ------------------
  |  |  207|    411|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  163|      0|        worker = mk_list_entry(head, struct flb_worker, _head);
  ------------------
  |  |  214|      0|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|      0|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|      0|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|      0|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  164|      0|        flb_worker_destroy(worker);
  165|      0|        c++;
  166|      0|    }
  167|       |
  168|    411|    return c;
  169|    411|}

flb_ml_init:
 1548|    411|{
 1549|    411|    int ret;
 1550|       |
 1551|    411|    ret = flb_ml_parser_builtin_create(config);
 1552|    411|    if (ret == -1) {
  ------------------
  |  Branch (1552:9): [True: 0, False: 411]
  ------------------
 1553|      0|        return -1;
 1554|      0|    }
 1555|       |
 1556|    411|    return 0;
 1557|    411|}
flb_ml_exit:
 1560|    411|{
 1561|    411|    flb_ml_parser_destroy_all(&config->multiline_parsers);
 1562|    411|    return 0;
 1563|    411|}

flb_ml_parser_init:
   28|  1.64k|{
   29|  1.64k|    int ret;
   30|       |
   31|  1.64k|    ret = flb_ml_rule_init(ml_parser);
   32|  1.64k|    if (ret == -1) {
  ------------------
  |  Branch (32:9): [True: 0, False: 1.64k]
  ------------------
   33|      0|        return -1;
   34|      0|    }
   35|       |
   36|  1.64k|    return 0;
   37|  1.64k|}
flb_ml_parser_builtin_create:
   41|    411|{
   42|    411|    struct flb_ml_parser *mlp;
   43|       |
   44|       |    /* Docker */
   45|    411|    mlp = flb_ml_parser_docker(config);
   46|    411|    if (!mlp) {
  ------------------
  |  Branch (46:9): [True: 0, False: 411]
  ------------------
   47|      0|        flb_error("[multiline] could not init 'docker' built-in parser");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
   48|      0|        return -1;
   49|      0|    }
   50|       |
   51|       |    /* CRI */
   52|    411|    mlp = flb_ml_parser_cri(config);
   53|    411|    if (!mlp) {
  ------------------
  |  Branch (53:9): [True: 0, False: 411]
  ------------------
   54|      0|        flb_error("[multiline] could not init 'cri' built-in parser");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
   55|      0|        return -1;
   56|      0|    }
   57|       |
   58|       |    /* Java */
   59|    411|    mlp = flb_ml_parser_java(config, NULL);
   60|    411|    if (!mlp) {
  ------------------
  |  Branch (60:9): [True: 0, False: 411]
  ------------------
   61|      0|        flb_error("[multiline] could not init 'java' built-in parser");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
   62|      0|        return -1;
   63|      0|    }
   64|       |
   65|       |    /* Go */
   66|    411|    mlp = flb_ml_parser_go(config, NULL);
   67|    411|    if (!mlp) {
  ------------------
  |  Branch (67:9): [True: 0, False: 411]
  ------------------
   68|      0|        flb_error("[multiline] could not init 'go' built-in parser");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
   69|      0|        return -1;
   70|      0|    }
   71|       |
   72|       |    /* Ruby */
   73|    411|    mlp = flb_ml_parser_ruby(config, NULL);
   74|    411|    if (!mlp) {
  ------------------
  |  Branch (74:9): [True: 0, False: 411]
  ------------------
   75|      0|        flb_error("[multiline] could not init 'ruby' built-in parser");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
   76|      0|        return -1;
   77|      0|    }
   78|       |
   79|       |    /* Python */
   80|    411|    mlp = flb_ml_parser_python(config, NULL);
   81|    411|    if (!mlp) {
  ------------------
  |  Branch (81:9): [True: 0, False: 411]
  ------------------
   82|      0|        flb_error("[multiline] could not init 'python' built-in parser");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
   83|      0|        return -1;
   84|      0|    }
   85|       |
   86|    411|    return 0;
   87|    411|}
flb_ml_parser_create:
   98|  2.46k|{
   99|  2.46k|    struct flb_ml_parser *ml_parser;
  100|       |
  101|  2.46k|    ml_parser = flb_calloc(1, sizeof(struct flb_ml_parser));
  102|  2.46k|    if (!ml_parser) {
  ------------------
  |  Branch (102:9): [True: 0, False: 2.46k]
  ------------------
  103|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  104|      0|        return NULL;
  105|      0|    }
  106|  2.46k|    ml_parser->name = flb_sds_create(name);
  107|  2.46k|    ml_parser->type = type;
  108|       |
  109|  2.46k|    if (match_str) {
  ------------------
  |  Branch (109:9): [True: 822, False: 1.64k]
  ------------------
  110|    822|        ml_parser->match_str = flb_sds_create(match_str);
  111|    822|        if (!ml_parser->match_str) {
  ------------------
  |  Branch (111:13): [True: 0, False: 822]
  ------------------
  112|      0|            if (ml_parser->name) {
  ------------------
  |  Branch (112:17): [True: 0, False: 0]
  ------------------
  113|      0|                flb_sds_destroy(ml_parser->name);
  114|      0|            }
  115|      0|            flb_free(ml_parser);
  116|      0|            return NULL;
  117|      0|        }
  118|    822|    }
  119|       |
  120|  2.46k|    ml_parser->parser = parser_ctx;
  121|       |
  122|  2.46k|    if (parser_name) {
  ------------------
  |  Branch (122:9): [True: 0, False: 2.46k]
  ------------------
  123|      0|        ml_parser->parser_name = flb_sds_create(parser_name);
  124|      0|    }
  125|  2.46k|    ml_parser->negate = negate;
  126|  2.46k|    ml_parser->flush_ms = flush_ms;
  127|  2.46k|    mk_list_init(&ml_parser->regex_rules);
  128|  2.46k|    mk_list_add(&ml_parser->_head, &ctx->multiline_parsers);
  129|       |
  130|  2.46k|    if (key_content) {
  ------------------
  |  Branch (130:9): [True: 822, False: 1.64k]
  ------------------
  131|    822|        ml_parser->key_content = flb_sds_create(key_content);
  132|    822|        if (!ml_parser->key_content) {
  ------------------
  |  Branch (132:13): [True: 0, False: 822]
  ------------------
  133|      0|            flb_ml_parser_destroy(ml_parser);
  134|      0|            return NULL;
  135|      0|        }
  136|    822|    }
  137|       |
  138|  2.46k|    if (key_group) {
  ------------------
  |  Branch (138:9): [True: 822, False: 1.64k]
  ------------------
  139|    822|        ml_parser->key_group = flb_sds_create(key_group);
  140|    822|        if (!ml_parser->key_group) {
  ------------------
  |  Branch (140:13): [True: 0, False: 822]
  ------------------
  141|      0|            flb_ml_parser_destroy(ml_parser);
  142|      0|            return NULL;
  143|      0|        }
  144|    822|    }
  145|       |
  146|  2.46k|    if (key_pattern) {
  ------------------
  |  Branch (146:9): [True: 411, False: 2.05k]
  ------------------
  147|    411|        ml_parser->key_pattern = flb_sds_create(key_pattern);
  148|    411|        if (!ml_parser->key_pattern) {
  ------------------
  |  Branch (148:13): [True: 0, False: 411]
  ------------------
  149|      0|            flb_ml_parser_destroy(ml_parser);
  150|      0|            return NULL;
  151|      0|        }
  152|    411|    }
  153|       |
  154|  2.46k|    return ml_parser;
  155|  2.46k|}
flb_ml_parser_destroy:
  274|  2.46k|{
  275|  2.46k|    if (!ml_parser) {
  ------------------
  |  Branch (275:9): [True: 0, False: 2.46k]
  ------------------
  276|      0|        return 0;
  277|      0|    }
  278|       |
  279|  2.46k|    if (ml_parser->name) {
  ------------------
  |  Branch (279:9): [True: 2.46k, False: 0]
  ------------------
  280|  2.46k|        flb_sds_destroy(ml_parser->name);
  281|  2.46k|    }
  282|       |
  283|  2.46k|    if (ml_parser->parser_name) {
  ------------------
  |  Branch (283:9): [True: 0, False: 2.46k]
  ------------------
  284|      0|        flb_sds_destroy(ml_parser->parser_name);
  285|      0|    }
  286|       |
  287|  2.46k|    if (ml_parser->match_str) {
  ------------------
  |  Branch (287:9): [True: 822, False: 1.64k]
  ------------------
  288|    822|        flb_sds_destroy(ml_parser->match_str);
  289|    822|    }
  290|  2.46k|    if (ml_parser->key_content) {
  ------------------
  |  Branch (290:9): [True: 822, False: 1.64k]
  ------------------
  291|    822|        flb_sds_destroy(ml_parser->key_content);
  292|    822|    }
  293|  2.46k|    if (ml_parser->key_group) {
  ------------------
  |  Branch (293:9): [True: 822, False: 1.64k]
  ------------------
  294|    822|        flb_sds_destroy(ml_parser->key_group);
  295|    822|    }
  296|  2.46k|    if (ml_parser->key_pattern) {
  ------------------
  |  Branch (296:9): [True: 411, False: 2.05k]
  ------------------
  297|    411|        flb_sds_destroy(ml_parser->key_pattern);
  298|    411|    }
  299|       |
  300|       |    /* Regex rules */
  301|  2.46k|    flb_ml_rule_destroy_all(ml_parser);
  302|       |
  303|       |    /* Unlink from struct flb_config->multiline_parsers */
  304|  2.46k|    mk_list_del(&ml_parser->_head);
  305|       |
  306|  2.46k|    flb_free(ml_parser);
  307|  2.46k|    return 0;
  308|  2.46k|}
flb_ml_parser_destroy_all:
  338|    411|{
  339|    411|    struct mk_list *tmp;
  340|    411|    struct mk_list *head;
  341|    411|    struct flb_ml_parser *parser;
  342|       |
  343|  2.46k|    mk_list_foreach_safe(head, tmp, list) {
  ------------------
  |  |  207|  2.87k|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 2.46k, False: 411]
  |  |  ------------------
  ------------------
  344|  2.46k|        parser = mk_list_entry(head, struct flb_ml_parser, _head);
  ------------------
  |  |  214|  2.46k|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|  2.46k|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|  2.46k|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|  2.46k|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  345|  2.46k|        flb_ml_parser_destroy(parser);
  346|  2.46k|    }
  347|    411|}

flb_ml_parser_cri:
   54|    411|{
   55|    411|    struct flb_parser *parser;
   56|    411|    struct flb_ml_parser *mlp;
   57|       |
   58|       |    /* Create a Docker parser */
   59|    411|    parser = cri_parser_create(config);
   60|    411|    if (!parser) {
  ------------------
  |  Branch (60:9): [True: 0, False: 411]
  ------------------
   61|      0|        return NULL;
   62|      0|    }
   63|       |
   64|    411|    mlp = flb_ml_parser_create(config,
   65|    411|                               "cri",                /* name      */
   66|    411|                               FLB_ML_EQ,            /* type      */
  ------------------
  |  |   37|    411|#define FLB_ML_EQ        3    /* record key/content equaks 'abc'    */
  ------------------
   67|    411|                               "F",                  /* match_str */
   68|    411|                               FLB_FALSE,            /* negate    */
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
   69|    411|                               FLB_ML_FLUSH_TIMEOUT, /* flush_ms  */
  ------------------
  |  |   50|    411|#define FLB_ML_FLUSH_TIMEOUT    4000 /* Flush timeout default (milliseconds) */
  ------------------
   70|    411|                               "log",                /* key_content */
   71|    411|                               "stream",             /* key_group   */
   72|    411|                               "_p",                 /* key_pattern */
   73|    411|                               parser,               /* parser ctx  */
   74|    411|                               NULL);                /* parser name */
   75|       |
   76|    411|    if (!mlp) {
  ------------------
  |  Branch (76:9): [True: 0, False: 411]
  ------------------
   77|      0|        flb_error("[multiline] could not create 'cri mode'");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
   78|      0|        return NULL;
   79|      0|    }
   80|       |
   81|    411|    return mlp;
   82|    411|}
flb_ml_parser_cri.c:cri_parser_create:
   31|    411|{
   32|    411|    struct flb_parser *p;
   33|       |
   34|    411|    p = flb_parser_create("_ml_cri",               /* parser name */
   35|    411|                          "regex",                 /* backend type */
   36|    411|                          FLB_ML_CRI_REGEX,        /* regex */
  ------------------
  |  |   25|    411|  "^(?<time>.+?) (?<stream>stdout|stderr) (?<_p>F|P) (?<log>.*)$"
  ------------------
   37|    411|                          FLB_FALSE,               /* skip_empty */
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
   38|    411|                          FLB_ML_CRI_TIME,         /* time format */
  ------------------
  |  |   27|    411|  "%Y-%m-%dT%H:%M:%S.%L%z"
  ------------------
   39|    411|                          "time",                  /* time key */
   40|    411|                          NULL,                    /* time offset */
   41|    411|                          FLB_TRUE,                /* time keep */
  ------------------
  |  |   26|    411|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    411|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
   42|    411|                          FLB_FALSE,               /* time strict */
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
   43|    411|                          FLB_FALSE,               /* time system timezone */
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
   44|    411|                          FLB_FALSE,               /* no bare keys */
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
   45|    411|                          NULL,                    /* parser types */
   46|    411|                          0,                       /* types len */
   47|    411|                          NULL,                    /* decoders */
   48|    411|                          config);                 /* Fluent Bit context */
   49|    411|    return p;
   50|    411|}

flb_ml_parser_docker:
   49|    411|{
   50|    411|    struct flb_parser *parser;
   51|    411|    struct flb_ml_parser *mlp;
   52|       |
   53|       |    /* Create a Docker parser */
   54|    411|    parser = docker_parser_create(config);
   55|    411|    if (!parser) {
  ------------------
  |  Branch (55:9): [True: 0, False: 411]
  ------------------
   56|      0|        return NULL;
   57|      0|    }
   58|       |
   59|       |    /*
   60|       |     * Let's explain this multiline mode, then you (the reader) might want
   61|       |     * to submit a PR with new built-in modes :)
   62|       |     *
   63|       |     * Containerized apps under Docker writes logs to stdout/stderr. These streams
   64|       |     * (stdout/stderr) are handled by Docker, in most of cases the content is
   65|       |     * stored in a .json file in your file system. A message like "hey!" gets into
   66|       |     * a JSON map like this:
   67|       |     *
   68|       |     * {"log": "hey!\n", "stream": "stdout", "time": "2021-02-01T01:40:03.53412Z"}
   69|       |     *
   70|       |     * By Docker log spec, any 'log' key that "ends with a \n" it's a complete
   71|       |     * log record, but Docker also limits the log record size to 16KB, so a long
   72|       |     * message that does not fit into 16KB can be split in multiple JSON lines,
   73|       |     * the following example use short words to describe the context:
   74|       |     *
   75|       |     * - original message: 'one, two, three\n'
   76|       |     *
   77|       |     * Docker log interpretation:
   78|       |     *
   79|       |     * - {"log": "one, ", "stream": "stdout", "time": "2021-02-01T01:40:03.53413Z"}
   80|       |     * - {"log": "two, ", "stream": "stdout", "time": "2021-02-01T01:40:03.53414Z"}
   81|       |     * - {"log": "three\n", "stream": "stdout", "time": "2021-02-01T01:40:03.53415Z"}
   82|       |     *
   83|       |     * So every 'log' key that does not ends with '\n', it's a partial log record
   84|       |     * and for logging purposes it needs to be concatenated with further messages
   85|       |     * until a final '\n' is found.
   86|       |     *
   87|       |     * We setup the Multiline mode as follows:
   88|       |     *
   89|       |     * - Use the type 'FLB_ML_ENDSWITH' to specify that we expect the 'log'
   90|       |     *   key must ends with a '\n' for complete messages, otherwise it means is
   91|       |     *   a continuation message. In case a message is not complete just wait until
   92|       |     *   500 milliseconds (0.5 second) and flush the buffer.
   93|       |     */
   94|    411|    mlp = flb_ml_parser_create(config,                  /* Fluent Bit context */
   95|    411|                               "docker",                /* name           */
   96|    411|                               FLB_ML_ENDSWITH,         /* type           */
  ------------------
  |  |   36|    411|#define FLB_ML_ENDSWITH  2    /* record key/content ends with 'abc' */
  ------------------
   97|    411|                               "\n",                    /* match_str      */
   98|    411|                               FLB_FALSE,               /* negate         */
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
   99|    411|                               FLB_ML_FLUSH_TIMEOUT,    /* flush_ms  */
  ------------------
  |  |   50|    411|#define FLB_ML_FLUSH_TIMEOUT    4000 /* Flush timeout default (milliseconds) */
  ------------------
  100|    411|                               "log",                   /* key_content    */
  101|    411|                               "stream",                /* key_group      */
  102|    411|                               NULL,                    /* key_pattern    */
  103|    411|                               parser,                  /* parser ctx     */
  104|    411|                               NULL);                   /* parser name    */
  105|    411|    if (!mlp) {
  ------------------
  |  Branch (105:9): [True: 0, False: 411]
  ------------------
  106|      0|        flb_error("[multiline] could not create 'docker mode'");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  107|      0|        return NULL;
  108|      0|    }
  109|       |
  110|    411|    return mlp;
  111|    411|}
flb_ml_parser_docker.c:docker_parser_create:
   26|    411|{
   27|    411|    struct flb_parser *p;
   28|       |
   29|    411|    p = flb_parser_create("_ml_json_docker",      /* parser name */
   30|    411|                          "json",                 /* backend type */
   31|    411|                          NULL,                   /* regex */
   32|    411|                          FLB_TRUE,               /* skip_empty */
  ------------------
  |  |   26|    411|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    411|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
   33|    411|                          "%Y-%m-%dT%H:%M:%S.%L", /* time format */
   34|    411|                          "time",                 /* time key */
   35|    411|                          NULL,                   /* time offset */
   36|    411|                          FLB_TRUE,               /* time keep */
  ------------------
  |  |   26|    411|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|    411|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
   37|    411|                          FLB_FALSE,              /* time strict */
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
   38|    411|                          FLB_FALSE,              /* time system timezone */
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
   39|    411|                          FLB_FALSE,              /* no bare keys */
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
   40|    411|                          NULL,                   /* parser types */
   41|    411|                          0,                      /* types len */
   42|    411|                          NULL,                   /* decoders */
   43|    411|                          config);                /* Fluent Bit context */
   44|    411|    return p;
   45|    411|}

flb_ml_parser_go:
   38|    411|{
   39|    411|    int ret;
   40|    411|    struct flb_ml_parser *mlp;
   41|       |
   42|    411|    mlp = flb_ml_parser_create(config,               /* Fluent Bit context */
   43|    411|                               "go",                 /* name      */
   44|    411|                               FLB_ML_REGEX,         /* type      */
  ------------------
  |  |   35|    411|#define FLB_ML_REGEX     1    /* pattern is a regular expression    */
  ------------------
   45|    411|                               NULL,                 /* match_str */
   46|    411|                               FLB_FALSE,            /* negate    */
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
   47|    411|                               FLB_ML_FLUSH_TIMEOUT, /* flush_ms  */
  ------------------
  |  |   50|    411|#define FLB_ML_FLUSH_TIMEOUT    4000 /* Flush timeout default (milliseconds) */
  ------------------
   48|    411|                               key,                  /* key_content */
   49|    411|                               NULL,                 /* key_group   */
   50|    411|                               NULL,                 /* key_pattern */
   51|    411|                               NULL,                 /* parser ctx  */
   52|    411|                               NULL);                /* parser name */
   53|       |
   54|    411|    if (!mlp) {
  ------------------
  |  Branch (54:9): [True: 0, False: 411]
  ------------------
   55|      0|        flb_error("[multiline] could not create 'go mode'");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
   56|      0|        return NULL;
   57|      0|    }
   58|       |
   59|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
   60|    411|               "start_state",
   61|    411|               "/\\bpanic: /",
   62|    411|               "go_after_panic", NULL);
   63|    411|    if (ret != 0) {
  ------------------
  |  Branch (63:9): [True: 0, False: 411]
  ------------------
   64|      0|        rule_error(mlp);
   65|      0|        return NULL;
   66|      0|    }
   67|       |
   68|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
   69|    411|               "start_state",
   70|    411|               "/http: panic serving/",
   71|    411|               "go_goroutine", NULL);
   72|    411|    if (ret != 0) {
  ------------------
  |  Branch (72:9): [True: 0, False: 411]
  ------------------
   73|      0|        rule_error(mlp);
   74|      0|        return NULL;
   75|      0|    }
   76|       |
   77|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
   78|    411|               "go_after_panic",
   79|    411|               "/^$/",
   80|    411|               "go_goroutine", NULL);
   81|    411|    if (ret != 0) {
  ------------------
  |  Branch (81:9): [True: 0, False: 411]
  ------------------
   82|      0|        rule_error(mlp);
   83|      0|        return NULL;
   84|      0|    }
   85|       |
   86|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
   87|    411|               "go_after_panic, go_after_signal, go_frame_1",
   88|    411|               "/^$/",
   89|    411|               "go_goroutine", NULL);
   90|    411|    if (ret != 0) {
  ------------------
  |  Branch (90:9): [True: 0, False: 411]
  ------------------
   91|      0|        rule_error(mlp);
   92|      0|        return NULL;
   93|      0|    }
   94|       |
   95|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
   96|    411|               "go_after_panic",
   97|    411|               "/^\\[signal /",
   98|    411|               "go_after_signal", NULL);
   99|    411|    if (ret != 0) {
  ------------------
  |  Branch (99:9): [True: 0, False: 411]
  ------------------
  100|      0|        rule_error(mlp);
  101|      0|        return NULL;
  102|      0|    }
  103|       |
  104|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
  105|    411|               "go_goroutine",
  106|    411|               "/^goroutine \\d+ \\[[^\\]]+\\]:$/",
  107|    411|               "go_frame_1", NULL);
  108|    411|    if (ret != 0) {
  ------------------
  |  Branch (108:9): [True: 0, False: 411]
  ------------------
  109|      0|        rule_error(mlp);
  110|      0|        return NULL;
  111|      0|    }
  112|       |
  113|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
  114|    411|               "go_frame_1",
  115|    411|               "/^(?:[^\\s.:]+\\.)*[^\\s.():]+\\(|^created by /",
  116|    411|               "go_frame_2", NULL);
  117|    411|    if (ret != 0) {
  ------------------
  |  Branch (117:9): [True: 0, False: 411]
  ------------------
  118|      0|        rule_error(mlp);
  119|      0|        return NULL;
  120|      0|    }
  121|       |
  122|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
  123|    411|               "go_frame_2",
  124|    411|               "/^\\s/",
  125|    411|               "go_frame_1", NULL);
  126|    411|    if (ret != 0) {
  ------------------
  |  Branch (126:9): [True: 0, False: 411]
  ------------------
  127|      0|        rule_error(mlp);
  128|      0|        return NULL;
  129|      0|    }
  130|       |
  131|       |    /* Map the rules (mandatory for regex rules) */
  132|    411|    ret = flb_ml_parser_init(mlp);
  133|    411|    if (ret != 0) {
  ------------------
  |  Branch (133:9): [True: 0, False: 411]
  ------------------
  134|      0|        flb_error("[multiline: go] error on mapping rules");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  135|      0|        flb_ml_parser_destroy(mlp);
  136|      0|        return NULL;
  137|      0|    }
  138|       |
  139|    411|    return mlp;
  140|    411|}

flb_ml_parser_java:
   38|    411|{
   39|    411|    int ret;
   40|    411|    struct flb_ml_parser *mlp;
   41|       |
   42|    411|    mlp = flb_ml_parser_create(config,               /* Fluent Bit context */
   43|    411|                               "java",               /* name      */
   44|    411|                               FLB_ML_REGEX,         /* type      */
  ------------------
  |  |   35|    411|#define FLB_ML_REGEX     1    /* pattern is a regular expression    */
  ------------------
   45|    411|                               NULL,                 /* match_str */
   46|    411|                               FLB_FALSE,            /* negate    */
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
   47|    411|                               FLB_ML_FLUSH_TIMEOUT, /* flush_ms  */
  ------------------
  |  |   50|    411|#define FLB_ML_FLUSH_TIMEOUT    4000 /* Flush timeout default (milliseconds) */
  ------------------
   48|    411|                               key,                  /* key_content */
   49|    411|                               NULL,                 /* key_group   */
   50|    411|                               NULL,                 /* key_pattern */
   51|    411|                               NULL,                 /* parser ctx  */
   52|    411|                               NULL);                /* parser name */
   53|       |
   54|    411|    if (!mlp) {
  ------------------
  |  Branch (54:9): [True: 0, False: 411]
  ------------------
   55|      0|        flb_error("[multiline] could not create 'java mode'");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
   56|      0|        return NULL;
   57|      0|    }
   58|       |
   59|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
   60|    411|               "start_state, java_start_exception",
   61|    411|               "/(.)(?:Exception|Error|Throwable|V8 errors stack trace)[:\\r\\n]/",
   62|    411|               "java_after_exception", NULL);
   63|    411|    if (ret != 0) {
  ------------------
  |  Branch (63:9): [True: 0, False: 411]
  ------------------
   64|      0|        rule_error(mlp);
   65|      0|        return NULL;
   66|      0|    }
   67|       |
   68|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
   69|    411|               "java_after_exception",
   70|    411|               "/^[\\t ]*nested exception is:[\\t ]*/",
   71|    411|               "java_start_exception", NULL);
   72|    411|    if (ret != 0) {
  ------------------
  |  Branch (72:9): [True: 0, False: 411]
  ------------------
   73|      0|        rule_error(mlp);
   74|      0|        return NULL;
   75|      0|    }
   76|       |
   77|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
   78|    411|               "java_after_exception",
   79|    411|               "/^[\\r\\n]*$/",
   80|    411|               "java_after_exception", NULL);
   81|    411|    if (ret != 0) {
  ------------------
  |  Branch (81:9): [True: 0, False: 411]
  ------------------
   82|      0|        rule_error(mlp);
   83|      0|        return NULL;
   84|      0|    }
   85|       |
   86|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
   87|    411|               "java_after_exception, java",
   88|    411|               "/^[\\t ]+(?:eval )?at /",
   89|    411|               "java", NULL);
   90|    411|    if (ret != 0) {
  ------------------
  |  Branch (90:9): [True: 0, False: 411]
  ------------------
   91|      0|        rule_error(mlp);
   92|      0|        return NULL;
   93|      0|    }
   94|       |
   95|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
   96|    411|               "java_after_exception, java",
   97|       |               /* C# nested exception */
   98|    411|               "/^[\\t ]+--- End of inner exception stack trace ---$/",
   99|    411|               "java", NULL);
  100|    411|    if (ret != 0) {
  ------------------
  |  Branch (100:9): [True: 0, False: 411]
  ------------------
  101|      0|        rule_error(mlp);
  102|      0|        return NULL;
  103|      0|    }
  104|       |
  105|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
  106|    411|               "java_after_exception, java",
  107|       |               /* C# exception from async code */
  108|    411|               "/^--- End of stack trace from previous (?x:"
  109|    411|               ")location where exception was thrown ---$/",
  110|    411|               "java", NULL);
  111|    411|    if (ret != 0) {
  ------------------
  |  Branch (111:9): [True: 0, False: 411]
  ------------------
  112|      0|        rule_error(mlp);
  113|      0|        return NULL;
  114|      0|    }
  115|       |
  116|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
  117|    411|               "java_after_exception, java",
  118|    411|               "/^[\\t ]*(?:Caused by|Suppressed):/",
  119|    411|               "java_after_exception", NULL);
  120|    411|    if (ret != 0) {
  ------------------
  |  Branch (120:9): [True: 0, False: 411]
  ------------------
  121|      0|        rule_error(mlp);
  122|      0|        return NULL;
  123|      0|    }
  124|       |
  125|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
  126|    411|               "java_after_exception, java",
  127|    411|               "/^[\\t ]*... \\d+ (?:more|common frames omitted)/",
  128|    411|               "java", NULL);
  129|    411|    if (ret != 0) {
  ------------------
  |  Branch (129:9): [True: 0, False: 411]
  ------------------
  130|      0|        rule_error(mlp);
  131|      0|        return NULL;
  132|      0|    }
  133|       |
  134|       |    /* Map the rules (mandatory for regex rules) */
  135|    411|    ret = flb_ml_parser_init(mlp);
  136|    411|    if (ret != 0) {
  ------------------
  |  Branch (136:9): [True: 0, False: 411]
  ------------------
  137|      0|        flb_error("[multiline: java] error on mapping rules");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  138|      0|        flb_ml_parser_destroy(mlp);
  139|      0|        return NULL;
  140|      0|    }
  141|       |
  142|    411|    return mlp;
  143|    411|}

flb_ml_parser_python:
   38|    411|{
   39|    411|    int ret;
   40|    411|    struct flb_ml_parser *mlp;
   41|       |
   42|    411|    mlp = flb_ml_parser_create(config,               /* Fluent Bit context */
   43|    411|                               "python",             /* name      */
   44|    411|                               FLB_ML_REGEX,         /* type      */
  ------------------
  |  |   35|    411|#define FLB_ML_REGEX     1    /* pattern is a regular expression    */
  ------------------
   45|    411|                               NULL,                 /* match_str */
   46|    411|                               FLB_FALSE,            /* negate    */
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
   47|    411|                               FLB_ML_FLUSH_TIMEOUT, /* flush_ms  */
  ------------------
  |  |   50|    411|#define FLB_ML_FLUSH_TIMEOUT    4000 /* Flush timeout default (milliseconds) */
  ------------------
   48|    411|                               key,                  /* key_content */
   49|    411|                               NULL,                 /* key_group   */
   50|    411|                               NULL,                 /* key_pattern */
   51|    411|                               NULL,                 /* parser ctx  */
   52|    411|                               NULL);                /* parser name */
   53|       |
   54|    411|    if (!mlp) {
  ------------------
  |  Branch (54:9): [True: 0, False: 411]
  ------------------
   55|      0|        flb_error("[multiline] could not create 'python mode'");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
   56|      0|        return NULL;
   57|      0|    }
   58|       |
   59|       |    /* rule(:start_state, /^Traceback \(most recent call last\):$/, :python) */
   60|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
   61|    411|               "start_state", "/^Traceback \\(most recent call last\\):$/",
   62|    411|               "python", NULL);
   63|    411|    if (ret != 0) {
  ------------------
  |  Branch (63:9): [True: 0, False: 411]
  ------------------
   64|      0|        rule_error(mlp);
   65|      0|        return NULL;
   66|      0|    }
   67|       |
   68|       |    /* rule(:python, /^[\t ]+File /, :python_code) */
   69|    411|    ret = rule(mlp, "python", "/^[\\t ]+File /", "python_code", NULL);
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
   70|    411|    if (ret != 0) {
  ------------------
  |  Branch (70:9): [True: 0, False: 411]
  ------------------
   71|      0|        rule_error(mlp);
   72|      0|        return NULL;
   73|      0|    }
   74|       |
   75|       |    /* rule(:python_code, /[^\t ]/, :python) */
   76|    411|    ret = rule(mlp, "python_code", "/[^\\t ]/", "python", NULL);
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
   77|    411|    if (ret != 0) {
  ------------------
  |  Branch (77:9): [True: 0, False: 411]
  ------------------
   78|      0|        rule_error(mlp);
   79|      0|        return NULL;
   80|      0|    }
   81|       |
   82|       |    /* rule(:python, /^(?:[^\s.():]+\.)*[^\s.():]+:/, :start_state) */
   83|    411|    ret = rule(mlp, "python", "/^(?:[^\\s.():]+\\.)*[^\\s.():]+:/", "start_state", NULL);
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
   84|    411|    if (ret != 0) {
  ------------------
  |  Branch (84:9): [True: 0, False: 411]
  ------------------
   85|      0|        rule_error(mlp);
   86|      0|        return NULL;
   87|      0|    }
   88|       |
   89|       |    /* Map the rules (mandatory for regex rules) */
   90|    411|    ret = flb_ml_parser_init(mlp);
   91|    411|    if (ret != 0) {
  ------------------
  |  Branch (91:9): [True: 0, False: 411]
  ------------------
   92|      0|        flb_error("[multiline: python] error on mapping rules");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
   93|      0|        flb_ml_parser_destroy(mlp);
   94|      0|        return NULL;
   95|      0|    }
   96|       |
   97|    411|    return mlp;
   98|    411|}

flb_ml_parser_ruby:
   38|    411|{
   39|    411|    int ret;
   40|    411|    struct flb_ml_parser *mlp;
   41|       |
   42|    411|    mlp = flb_ml_parser_create(config,               /* Fluent Bit context */
   43|    411|                               "ruby",                 /* name      */
   44|    411|                               FLB_ML_REGEX,         /* type      */
  ------------------
  |  |   35|    411|#define FLB_ML_REGEX     1    /* pattern is a regular expression    */
  ------------------
   45|    411|                               NULL,                 /* match_str */
   46|    411|                               FLB_FALSE,            /* negate    */
  ------------------
  |  |   25|    411|#define FLB_FALSE  0
  ------------------
   47|    411|                               FLB_ML_FLUSH_TIMEOUT, /* flush_ms  */
  ------------------
  |  |   50|    411|#define FLB_ML_FLUSH_TIMEOUT    4000 /* Flush timeout default (milliseconds) */
  ------------------
   48|    411|                               key,                  /* key_content */
   49|    411|                               NULL,                 /* key_group   */
   50|    411|                               NULL,                 /* key_pattern */
   51|    411|                               NULL,                 /* parser ctx  */
   52|    411|                               NULL);                /* parser name */
   53|       |
   54|    411|    if (!mlp) {
  ------------------
  |  Branch (54:9): [True: 0, False: 411]
  ------------------
   55|      0|        flb_error("[multiline] could not create 'ruby mode'");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
   56|      0|        return NULL;
   57|      0|    }
   58|       |
   59|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
   60|    411|               "start_state, ruby_start_exception",
   61|    411|               "/^.+:\\d+:in\\s+.*/",
   62|    411|               "ruby_after_exception", NULL);
   63|    411|    if (ret != 0) {
  ------------------
  |  Branch (63:9): [True: 0, False: 411]
  ------------------
   64|      0|        rule_error(mlp);
   65|      0|        return NULL;
   66|      0|    }
   67|       |
   68|    411|    ret = rule(mlp,
  ------------------
  |  |   25|    411|#define rule flb_ml_rule_create
  ------------------
   69|    411|               "ruby_after_exception, ruby",
   70|    411|               "/^\\s+from\\s+.*:\\d+:in\\s+.*/",
   71|    411|               "ruby", NULL);
   72|    411|    if (ret != 0) {
  ------------------
  |  Branch (72:9): [True: 0, False: 411]
  ------------------
   73|      0|        rule_error(mlp);
   74|      0|        return NULL;
   75|      0|    }
   76|       |
   77|       |
   78|       |    /* Map the rules (mandatory for regex rules) */
   79|    411|    ret = flb_ml_parser_init(mlp);
   80|    411|    if (ret != 0) {
  ------------------
  |  Branch (80:9): [True: 0, False: 411]
  ------------------
   81|      0|        flb_error("[multiline: ruby] error on mapping rules");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
   82|      0|        flb_ml_parser_destroy(mlp);
   83|      0|        return NULL;
   84|      0|    }
   85|       |
   86|    411|    return mlp;
   87|    411|}

get_start_state:
   33|  9.04k|{
   34|  9.04k|    struct mk_list *head;
   35|  9.04k|    struct flb_slist_entry *e;
   36|       |
   37|  12.3k|    mk_list_foreach(head, list) {
  ------------------
  |  |  205|  19.3k|#define mk_list_foreach(curr, head) for( curr = (head)->next; curr != (head); curr = curr->next )
  |  |  ------------------
  |  |  |  Branch (205:63): [True: 12.3k, False: 6.98k]
  |  |  ------------------
  ------------------
   38|  12.3k|        e = mk_list_entry(head, struct flb_slist_entry, _head);
  ------------------
  |  |  214|  12.3k|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|  12.3k|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|  12.3k|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|  12.3k|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
   39|  12.3k|        if (strcmp(e->str, "start_state") == 0) {
  ------------------
  |  Branch (39:13): [True: 2.05k, False: 10.2k]
  ------------------
   40|  2.05k|            return e;
   41|  2.05k|        }
   42|  12.3k|    }
   43|       |
   44|  6.98k|    return NULL;
   45|  9.04k|}
flb_ml_rule_create:
   52|  9.04k|{
   53|  9.04k|    int ret;
   54|  9.04k|    int first_rule = FLB_FALSE;
  ------------------
  |  |   25|  9.04k|#define FLB_FALSE  0
  ------------------
   55|  9.04k|    struct flb_ml_rule *rule;
   56|       |
   57|  9.04k|    rule = flb_calloc(1, sizeof(struct flb_ml_rule));
   58|  9.04k|    if (!rule) {
  ------------------
  |  Branch (58:9): [True: 0, False: 9.04k]
  ------------------
   59|      0|        flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
   60|      0|        return -1;
   61|      0|    }
   62|  9.04k|    flb_slist_create(&rule->from_states);
   63|  9.04k|    mk_list_init(&rule->to_state_map);
   64|       |
   65|  9.04k|    if (mk_list_size(&ml_parser->regex_rules) == 0) {
  ------------------
  |  Branch (65:9): [True: 1.64k, False: 7.39k]
  ------------------
   66|  1.64k|        first_rule = FLB_TRUE;
  ------------------
  |  |   26|  1.64k|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|  1.64k|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
   67|  1.64k|    }
   68|  9.04k|    mk_list_add(&rule->_head, &ml_parser->regex_rules);
   69|       |
   70|       |    /* from_states */
   71|  9.04k|    ret = flb_slist_split_string(&rule->from_states, from_states, ',', -1);
   72|  9.04k|    if (ret <= 0) {
  ------------------
  |  Branch (72:9): [True: 0, False: 9.04k]
  ------------------
   73|      0|        flb_error("[multiline] rule is empty or has invalid 'from_states' tokens");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
   74|      0|        flb_ml_rule_destroy(rule);
   75|      0|        return -1;
   76|      0|    }
   77|       |
   78|       |    /* Check if the rule contains a 'start_state' */
   79|  9.04k|    if (get_start_state(&rule->from_states)) {
  ------------------
  |  Branch (79:9): [True: 2.05k, False: 6.98k]
  ------------------
   80|  2.05k|        rule->start_state = FLB_TRUE;
  ------------------
  |  |   26|  2.05k|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|  2.05k|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
   81|  2.05k|    }
   82|  6.98k|    else if (first_rule) {
  ------------------
  |  Branch (82:14): [True: 0, False: 6.98k]
  ------------------
   83|      0|        flb_error("[multiline] rule don't contain a 'start_state'");
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
   84|      0|        flb_ml_rule_destroy(rule);
   85|      0|        return -1;
   86|      0|    }
   87|       |
   88|       |    /* regex content pattern */
   89|  9.04k|    rule->regex = flb_regex_create(regex_pattern);
   90|  9.04k|    if (!rule->regex) {
  ------------------
  |  Branch (90:9): [True: 0, False: 9.04k]
  ------------------
   91|      0|        flb_ml_rule_destroy(rule);
   92|      0|        return -1;
   93|      0|    }
   94|       |
   95|       |    /* to_state */
   96|  9.04k|    if (to_state) {
  ------------------
  |  Branch (96:9): [True: 9.04k, False: 0]
  ------------------
   97|  9.04k|        rule->to_state = flb_sds_create(to_state);
   98|  9.04k|        if (!rule->to_state) {
  ------------------
  |  Branch (98:13): [True: 0, False: 9.04k]
  ------------------
   99|      0|            flb_ml_rule_destroy(rule);
  100|      0|            return -1;
  101|      0|        }
  102|  9.04k|    }
  103|       |
  104|       |    /* regex end pattern */
  105|  9.04k|    if (end_pattern) {
  ------------------
  |  Branch (105:9): [True: 0, False: 9.04k]
  ------------------
  106|      0|        rule->regex_end = flb_regex_create(end_pattern);
  107|      0|        if (!rule->regex_end) {
  ------------------
  |  Branch (107:13): [True: 0, False: 0]
  ------------------
  108|      0|            flb_ml_rule_destroy(rule);
  109|      0|            return -1;
  110|      0|        }
  111|      0|    }
  112|       |
  113|  9.04k|    return 0;
  114|  9.04k|}
flb_ml_rule_destroy:
  117|  9.04k|{
  118|  9.04k|    struct mk_list *tmp;
  119|  9.04k|    struct mk_list *head;
  120|  9.04k|    struct to_state *st;
  121|       |
  122|  9.04k|    flb_slist_destroy(&rule->from_states);
  123|       |
  124|  9.04k|    if (rule->regex) {
  ------------------
  |  Branch (124:9): [True: 9.04k, False: 0]
  ------------------
  125|  9.04k|        flb_regex_destroy(rule->regex);
  126|  9.04k|    }
  127|       |
  128|       |
  129|  9.04k|    if (rule->to_state) {
  ------------------
  |  Branch (129:9): [True: 9.04k, False: 0]
  ------------------
  130|  9.04k|        flb_sds_destroy(rule->to_state);
  131|  9.04k|    }
  132|       |
  133|  25.4k|    mk_list_foreach_safe(head, tmp, &rule->to_state_map) {
  ------------------
  |  |  207|  34.5k|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 25.4k, False: 9.04k]
  |  |  ------------------
  ------------------
  134|  25.4k|        st = mk_list_entry(head, struct to_state, _head);
  ------------------
  |  |  214|  25.4k|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|  25.4k|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|  25.4k|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|  25.4k|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  135|  25.4k|        mk_list_del(&st->_head);
  136|  25.4k|        flb_free(st);
  137|  25.4k|    }
  138|       |
  139|  9.04k|    if (rule->regex_end) {
  ------------------
  |  Branch (139:9): [True: 0, False: 9.04k]
  ------------------
  140|      0|        flb_regex_destroy(rule->regex_end);
  141|      0|    }
  142|       |
  143|  9.04k|    mk_list_del(&rule->_head);
  144|  9.04k|    flb_free(rule);
  145|  9.04k|}
flb_ml_rule_destroy_all:
  148|  2.46k|{
  149|  2.46k|    struct mk_list *tmp;
  150|  2.46k|    struct mk_list *head;
  151|  2.46k|    struct flb_ml_rule *rule;
  152|       |
  153|  9.04k|    mk_list_foreach_safe(head, tmp, &ml_parser->regex_rules) {
  ------------------
  |  |  207|  11.5k|    for (curr = (head)->next, n = curr->next; curr != (head); curr = n, n = curr->next)
  |  |  ------------------
  |  |  |  Branch (207:47): [True: 9.04k, False: 2.46k]
  |  |  ------------------
  ------------------
  154|  9.04k|        rule = mk_list_entry(head, struct flb_ml_rule, _head);
  ------------------
  |  |  214|  9.04k|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|  9.04k|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|  9.04k|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|  9.04k|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  155|  9.04k|        flb_ml_rule_destroy(rule);
  156|  9.04k|    }
  157|  2.46k|}
flb_ml_rule_init:
  281|  1.64k|{
  282|  1.64k|    int ret;
  283|  1.64k|    struct mk_list *head;
  284|  1.64k|    struct flb_ml_rule *rule;
  285|       |
  286|       |    /* FIXME: sort rules by start_state first (let's trust in the caller) */
  287|       |
  288|       |    /* For each rule, compose it to_state_map list */
  289|  9.04k|    mk_list_foreach(head, &ml_parser->regex_rules) {
  ------------------
  |  |  205|  10.6k|#define mk_list_foreach(curr, head) for( curr = (head)->next; curr != (head); curr = curr->next )
  |  |  ------------------
  |  |  |  Branch (205:63): [True: 9.04k, False: 1.64k]
  |  |  ------------------
  ------------------
  290|  9.04k|        rule = mk_list_entry(head, struct flb_ml_rule, _head);
  ------------------
  |  |  214|  9.04k|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|  9.04k|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|  9.04k|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|  9.04k|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  291|       |        /* Populate 'rule->to_state_map' list */
  292|  9.04k|        ret = set_to_state_map(ml_parser, rule);
  293|  9.04k|        if (ret == -1) {
  ------------------
  |  Branch (293:13): [True: 0, False: 9.04k]
  ------------------
  294|      0|            return -1;
  295|      0|        }
  296|  9.04k|    }
  297|       |
  298|  1.64k|    return 0;
  299|  1.64k|}
flb_ml_rule.c:set_to_state_map:
  199|  9.04k|{
  200|  9.04k|    int ret;
  201|  9.04k|    struct to_state *s;
  202|  9.04k|    struct mk_list *head;
  203|  9.04k|    struct flb_ml_rule *r;
  204|       |
  205|  9.04k|    if (!rule->to_state) {
  ------------------
  |  Branch (205:9): [True: 0, False: 9.04k]
  ------------------
  206|       |        /* no to_state */
  207|      0|        return 0;
  208|      0|    }
  209|       |
  210|       |    /* Iterate all rules that matches the to_state */
  211|  60.8k|    mk_list_foreach(head, &ml_parser->regex_rules) {
  ------------------
  |  |  205|  69.8k|#define mk_list_foreach(curr, head) for( curr = (head)->next; curr != (head); curr = curr->next )
  |  |  ------------------
  |  |  |  Branch (205:63): [True: 60.8k, False: 9.04k]
  |  |  ------------------
  ------------------
  212|  60.8k|        r = mk_list_entry(head, struct flb_ml_rule, _head);
  ------------------
  |  |  214|  60.8k|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|  60.8k|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|  60.8k|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|  60.8k|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  213|       |
  214|       |        /* Check if rule->to_state, matches an existing (registered) from_state */
  215|  60.8k|        ret = to_states_exists(ml_parser, rule->to_state);
  216|  60.8k|        if (!ret) {
  ------------------
  |  Branch (216:13): [True: 0, False: 60.8k]
  ------------------
  217|      0|            flb_error("[multiline parser: %s] to_state='%s' is not registered",
  ------------------
  |  |  170|      0|    if (flb_log_check(FLB_LOG_ERROR))                                \
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  |  |  |  Branch (170:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|        flb_log_print(FLB_LOG_ERROR, NULL, 0, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   40|      0|#define FLB_LOG_ERROR   1
  |  |  ------------------
  ------------------
  218|      0|                      ml_parser->name, rule->to_state);
  219|      0|            return -1;
  220|      0|        }
  221|       |
  222|       |        /*
  223|       |         * A rule can have many 'from_states', check if the current 'rule->to_state'
  224|       |         * matches any 'r->from_states'
  225|       |         */
  226|  60.8k|        ret = to_states_matches_rule(r, rule->to_state);
  227|  60.8k|        if (!ret) {
  ------------------
  |  Branch (227:13): [True: 35.3k, False: 25.4k]
  ------------------
  228|  35.3k|            continue;
  229|  35.3k|        }
  230|       |
  231|       |        /* We have a match. Create a 'to_state' entry into the 'to_state_map' list */
  232|  25.4k|        s = flb_malloc(sizeof(struct to_state));
  233|  25.4k|        if (!s) {
  ------------------
  |  Branch (233:13): [True: 0, False: 25.4k]
  ------------------
  234|      0|            flb_errno();
  ------------------
  |  |  232|      0|#define flb_errno() flb_errno_print(errno, __FLB_FILENAME__, __LINE__)
  ------------------
  235|      0|            return -1;
  236|      0|        }
  237|  25.4k|        s->rule = r;
  238|  25.4k|        mk_list_add(&s->_head, &rule->to_state_map);
  239|  25.4k|    }
  240|       |
  241|  9.04k|    return 0;
  242|  9.04k|}
flb_ml_rule.c:to_states_exists:
  161|  60.8k|{
  162|  60.8k|    struct mk_list *head;
  163|  60.8k|    struct mk_list *r_head;
  164|  60.8k|    struct flb_ml_rule *rule;
  165|  60.8k|    struct flb_slist_entry *e;
  166|       |
  167|   226k|    mk_list_foreach(head, &ml_parser->regex_rules) {
  ------------------
  |  |  205|   226k|#define mk_list_foreach(curr, head) for( curr = (head)->next; curr != (head); curr = curr->next )
  |  |  ------------------
  |  |  |  Branch (205:63): [True: 226k, False: 0]
  |  |  ------------------
  ------------------
  168|   226k|        rule = mk_list_entry(head, struct flb_ml_rule, _head);
  ------------------
  |  |  214|   226k|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|   226k|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|   226k|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|   226k|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  169|       |
  170|   311k|        mk_list_foreach(r_head, &rule->from_states) {
  ------------------
  |  |  205|   477k|#define mk_list_foreach(curr, head) for( curr = (head)->next; curr != (head); curr = curr->next )
  |  |  ------------------
  |  |  |  Branch (205:63): [True: 311k, False: 166k]
  |  |  ------------------
  ------------------
  171|   311k|            e = mk_list_entry(r_head, struct flb_slist_entry, _head);
  ------------------
  |  |  214|   311k|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|   311k|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|   311k|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|   311k|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  172|   311k|            if (strcmp(e->str, state) == 0) {
  ------------------
  |  Branch (172:17): [True: 60.8k, False: 250k]
  ------------------
  173|  60.8k|                return FLB_TRUE;
  ------------------
  |  |   26|  60.8k|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|  60.8k|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  174|  60.8k|            }
  175|   311k|        }
  176|   226k|    }
  177|       |
  178|      0|    return FLB_FALSE;
  ------------------
  |  |   25|      0|#define FLB_FALSE  0
  ------------------
  179|  60.8k|}
flb_ml_rule.c:to_states_matches_rule:
  183|  60.8k|{
  184|  60.8k|    struct mk_list *head;
  185|  60.8k|    struct flb_slist_entry *e;
  186|       |
  187|  80.9k|    mk_list_foreach(head, &rule->from_states) {
  ------------------
  |  |  205|   116k|#define mk_list_foreach(curr, head) for( curr = (head)->next; curr != (head); curr = curr->next )
  |  |  ------------------
  |  |  |  Branch (205:63): [True: 80.9k, False: 35.3k]
  |  |  ------------------
  ------------------
  188|  80.9k|        e = mk_list_entry(head, struct flb_slist_entry, _head);
  ------------------
  |  |  214|  80.9k|#define mk_list_entry( ptr, type, member ) container_of( ptr, type, member )
  |  |  ------------------
  |  |  |  |   38|  80.9k|#define container_of(ptr, type, member) ({                      \
  |  |  |  |   39|  80.9k|      const typeof( ((type *)0)->member ) *__mptr = (ptr);      \
  |  |  |  |   40|  80.9k|      (type *)( (char *)__mptr - offsetof(type,member) );})
  |  |  ------------------
  ------------------
  189|  80.9k|        if (strcmp(e->str, state) == 0) {
  ------------------
  |  Branch (189:13): [True: 25.4k, False: 55.4k]
  ------------------
  190|  25.4k|            return FLB_TRUE;
  ------------------
  |  |   26|  25.4k|#define FLB_TRUE   !FLB_FALSE
  |  |  ------------------
  |  |  |  |   25|  25.4k|#define FLB_FALSE  0
  |  |  ------------------
  ------------------
  191|  25.4k|        }
  192|  80.9k|    }
  193|       |
  194|  35.3k|    return FLB_FALSE;
  ------------------
  |  |   25|  35.3k|#define FLB_FALSE  0
  ------------------
  195|  60.8k|}

get_null_terminated:
   29|  1.22k|{
   30|  1.22k|  char *tmp = flb_malloc(size+1);
   31|  1.22k|  if (tmp == NULL) {
  ------------------
  |  Branch (31:7): [True: 0, False: 1.22k]
  ------------------
   32|      0|    tmp = malloc(size+1);
   33|      0|  }
   34|  1.22k|  memcpy(tmp, *data, size);
   35|  1.22k|  tmp[size] = '\0';
   36|       |
   37|       |  /* Modify the fuzz variables */
   38|  1.22k|  *total_data_size -= size;
   39|  1.22k|  *data += size;
   40|       |
   41|  1.22k|  return tmp;
   42|  1.22k|}

LLVMFuzzerTestOneInput:
   18|    428|{
   19|       |    /* Set fuzzer-malloc chance of failure */
   20|    428|    flb_malloc_p = 0;
   21|    428|    flb_malloc_mod = 25000;
   22|       |
   23|    428|    struct flb_upstream *u;
   24|    428|    struct flb_connection *u_conn = NULL;
   25|    428|    struct flb_http_client *c;
   26|    428|    struct flb_config *config;
   27|    428|    char *uri = NULL;
   28|       |
   29|    428|    if (size < 160) {
  ------------------
  |  Branch (29:9): [True: 17, False: 411]
  ------------------
   30|     17|        return 0;
   31|     17|    }
   32|       |
   33|    411|    config = flb_config_init();
   34|    411|    if (config == NULL) {
  ------------------
  |  Branch (34:9): [True: 0, False: 411]
  ------------------
   35|      0|        return 0;
   36|      0|    }
   37|       |
   38|    411|    u = flb_upstream_create(config, "127.0.0.1", 8001, 0, NULL);
   39|       |
   40|    411|    u_conn = flb_connection_create(-1,
   41|    411|                                   FLB_TRANSPORT_TCP,
  ------------------
  |  |   32|    411|#define FLB_TRANSPORT_TCP         1
  ------------------
   42|    411|                                   (void *) u,
   43|    411|                                   NULL,
   44|    411|                                   NULL);
   45|       |
   46|    411|    if (u_conn == NULL) {
  ------------------
  |  Branch (46:9): [True: 0, False: 411]
  ------------------
   47|      0|        return 0;
   48|      0|    }
   49|       |
   50|    411|    char *proxy = NULL;
   51|    411|    if (GET_MOD_EQ(2,1)) {
  ------------------
  |  |   22|    411|#define GET_MOD_EQ(max, idx) (data[0] % max) == idx
  |  |  ------------------
  |  |  |  Branch (22:30): [True: 12, False: 399]
  |  |  ------------------
  ------------------
   52|     12|        proxy = get_null_terminated(50, &data, &size);
   53|     12|    }
   54|       |
   55|    411|    uri = get_null_terminated(20, &data, &size);
   56|       |
   57|    411|    int method = (int)data[0];
   58|    411|    c = flb_http_client(u_conn, method, uri, NULL, 0,
   59|    411|                    "127.0.0.1", 8001, proxy, 0);
   60|    411|    if (c != NULL) {
  ------------------
  |  Branch (60:9): [True: 399, False: 12]
  ------------------
   61|    399|        char *null_terminated = get_null_terminated(30, &data, &size);
   62|       |
   63|       |        /* Perform a set of operations on the http_client */
   64|    399|        flb_http_basic_auth(c, null_terminated, null_terminated);
   65|    399|        flb_http_set_content_encoding_gzip(c);
   66|    399|        flb_http_set_keepalive(c);
   67|    399|        flb_http_strip_port_from_host(c);
   68|    399|        flb_http_allow_duplicated_headers(c, 0);
   69|       |
   70|    399|        flb_http_buffer_size(c, (*(size_t *)data) & 0xfff);
   71|    399|        MOVE_INPUT(4)
  ------------------
  |  |   23|    399|#define MOVE_INPUT(offset) data += offset; size -= offset;
  ------------------
   72|    399|        flb_http_add_header(c, "User-Agent", 10, "Fluent-Bit", 10);
   73|    399|        flb_http_add_header(c, (char*)data, size, "Fluent-Bit", 10);
   74|    399|        flb_http_buffer_size(c, (int)data[0]);
   75|    399|        MOVE_INPUT(1)
  ------------------
  |  |   23|    399|#define MOVE_INPUT(offset) data += offset; size -= offset;
  ------------------
   76|    399|        flb_http_buffer_available(c);
   77|       |
   78|    399|        size_t b_sent;
   79|    399|        flb_http_do(c, &b_sent);
   80|       |
   81|    399|        size_t out_size = 0;
   82|    399|        flb_http_buffer_increase(c, (*(size_t *)data) & 0xfff, &out_size);
   83|    399|        MOVE_INPUT(4)
  ------------------
  |  |   23|    399|#define MOVE_INPUT(offset) data += offset; size -= offset;
  ------------------
   84|       |
   85|       |        /* Now we need to simulate the reading of data */
   86|    399|        c->resp.status = 200;
   87|       |
   88|    399|        if (c->resp.data != NULL) {
  ------------------
  |  Branch (88:13): [True: 399, False: 0]
  ------------------
   89|    399|           flb_free(c->resp.data);
   90|    399|        }
   91|       |
   92|    399|        char *new_nulltm = get_null_terminated(30, &data, &size);
   93|    399|        c->resp.data_len = 30;
   94|    399|        c->resp.data = new_nulltm;
   95|    399|        fuzz_process_data(c);
   96|    399|        fuzz_check_connection(c);
   97|       |
   98|    399|        flb_http_client_destroy(c);
   99|    399|        flb_free(null_terminated);
  100|    399|    }
  101|       |
  102|       |    /* Now try the http_client_proxy_connect function. */
  103|    411|    flb_http_client_proxy_connect(u_conn);
  104|       |
  105|    411|    flb_connection_destroy(u_conn);
  106|    411|    flb_upstream_destroy(u);
  107|    411|    flb_config_exit(config);
  108|    411|    if (uri != NULL) {
  ------------------
  |  Branch (108:9): [True: 411, False: 0]
  ------------------
  109|    411|        flb_free(uri);
  110|    411|    }
  111|    411|    if (proxy != NULL) {
  ------------------
  |  Branch (111:9): [True: 12, False: 399]
  ------------------
  112|     12|        flb_free(proxy);
  113|     12|    }
  114|       |
  115|    411|    return 0;
  116|    411|}

