_ZN6icu_7818CharStringByteSinkC2EPNS_10CharStringE:
  124|  12.4k|CharStringByteSink::CharStringByteSink(CharString* dest) : dest_(*dest) {
  125|  12.4k|}
_ZN6icu_7818CharStringByteSinkD2Ev:
  127|  12.4k|CharStringByteSink::~CharStringByteSink() = default;
_ZN6icu_7818CharStringByteSink6AppendEPKci:
  130|  6.80k|CharStringByteSink::Append(const char* bytes, int32_t n) {
  131|  6.80k|    UErrorCode status = U_ZERO_ERROR;
  132|  6.80k|    dest_.append(bytes, n, status);
  133|       |    // Any errors are silently ignored.
  134|  6.80k|}
_ZN6icu_7818CharStringByteSink15GetAppendBufferEiiPciPi:
  141|  5.25k|                                    int32_t* result_capacity) {
  142|  5.25k|    if (min_capacity < 1 || scratch_capacity < min_capacity) {
  ------------------
  |  Branch (142:9): [True: 0, False: 5.25k]
  |  Branch (142:29): [True: 0, False: 5.25k]
  ------------------
  143|      0|        *result_capacity = 0;
  144|      0|        return nullptr;
  145|      0|    }
  146|       |
  147|  5.25k|    UErrorCode status = U_ZERO_ERROR;
  148|  5.25k|    char* result = dest_.getAppendBuffer(
  149|  5.25k|            min_capacity,
  150|  5.25k|            desired_capacity_hint,
  151|  5.25k|            *result_capacity,
  152|  5.25k|            status);
  153|  5.25k|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (153:9): [True: 5.25k, False: 0]
  ------------------
  154|  5.25k|        return result;
  155|  5.25k|    }
  156|       |
  157|      0|    *result_capacity = scratch_capacity;
  158|      0|    return scratch;
  159|  5.25k|}

locid.cpp:_ZN6icu_7812ByteSinkUtil28viaByteSinkToTerminatedCharsIZZNS_6Locale4initENS_11StringPieceEaENK3$_0clENSt3__117basic_string_viewIcNS5_11char_traitsIcEEEEPciR10UErrorCodeEUlRNS_8ByteSinkESC_E_vEEiSA_iOT_SC_:
  112|    886|                                                UErrorCode& status) {
  113|    886|        if (U_FAILURE(status)) { return 0; }
  ------------------
  |  Branch (113:13): [True: 0, False: 886]
  ------------------
  114|    886|        CheckedArrayByteSink sink(buffer, capacity);
  115|    886|        lambda(sink, status);
  116|    886|        if (U_FAILURE(status)) { return 0; }
  ------------------
  |  Branch (116:13): [True: 0, False: 886]
  ------------------
  117|       |
  118|    886|        int32_t reslen = sink.NumberOfBytesAppended();
  119|       |
  120|    886|        if (sink.Overflowed()) {
  ------------------
  |  Branch (120:13): [True: 0, False: 886]
  ------------------
  121|      0|            status = U_BUFFER_OVERFLOW_ERROR;
  122|      0|            return reslen;
  123|      0|        }
  124|       |
  125|    886|        return u_terminateChars(buffer, capacity, reslen, &status);
  ------------------
  |  |  406|    886|#define u_terminateChars U_ICU_ENTRY_POINT_RENAME(u_terminateChars)
  |  |  ------------------
  |  |  |  |  123|    886|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    886|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    886|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  126|    886|    }
uloc.cpp:_ZN6icu_7812ByteSinkUtil28viaByteSinkToTerminatedCharsIZ23uloc_getKeywordValue_78E3$_0vEEiPciOT_R10UErrorCode:
  112|    420|                                                UErrorCode& status) {
  113|    420|        if (U_FAILURE(status)) { return 0; }
  ------------------
  |  Branch (113:13): [True: 0, False: 420]
  ------------------
  114|    420|        CheckedArrayByteSink sink(buffer, capacity);
  115|    420|        lambda(sink, status);
  116|    420|        if (U_FAILURE(status)) { return 0; }
  ------------------
  |  Branch (116:13): [True: 0, False: 420]
  ------------------
  117|       |
  118|    420|        int32_t reslen = sink.NumberOfBytesAppended();
  119|       |
  120|    420|        if (sink.Overflowed()) {
  ------------------
  |  Branch (120:13): [True: 0, False: 420]
  ------------------
  121|      0|            status = U_BUFFER_OVERFLOW_ERROR;
  122|      0|            return reslen;
  123|      0|        }
  124|       |
  125|    420|        return u_terminateChars(buffer, capacity, reslen, &status);
  ------------------
  |  |  406|    420|#define u_terminateChars U_ICU_ENTRY_POINT_RENAME(u_terminateChars)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  126|    420|    }
uloc.cpp:_ZN6icu_7812ByteSinkUtil23viaByteSinkToCharStringIZ22ulocimp_getBaseName_78NSt3__117basic_string_viewIcNS2_11char_traitsIcEEEER10UErrorCodeE3$_0vEENS_10CharStringEOT_S8_:
  141|  1.54k|    static CharString viaByteSinkToCharString(F&& lambda, UErrorCode& status) {
  142|  1.54k|        if (U_FAILURE(status)) { return {}; }
  ------------------
  |  Branch (142:13): [True: 0, False: 1.54k]
  ------------------
  143|  1.54k|        CharString result;
  144|  1.54k|        CharStringByteSink sink(&result);
  145|  1.54k|        lambda(sink, status);
  146|  1.54k|        return result;
  147|  1.54k|    }
uloc.cpp:_ZN6icu_7812ByteSinkUtil23viaByteSinkToCharStringIZ23ulocimp_canonicalize_78NSt3__117basic_string_viewIcNS2_11char_traitsIcEEEER10UErrorCodeE3$_0vEENS_10CharStringEOT_S8_:
  141|      1|    static CharString viaByteSinkToCharString(F&& lambda, UErrorCode& status) {
  142|      1|        if (U_FAILURE(status)) { return {}; }
  ------------------
  |  Branch (142:13): [True: 0, False: 1]
  ------------------
  143|      1|        CharString result;
  144|      1|        CharStringByteSink sink(&result);
  145|      1|        lambda(sink, status);
  146|      1|        return result;
  147|      1|    }

_ZN6icu_788ByteSinkD2Ev:
   15|  14.0k|ByteSink::~ByteSink() {}
_ZN6icu_7820CheckedArrayByteSinkC2EPci:
   32|  1.61k|    : outbuf_(outbuf), capacity_(capacity < 0 ? 0 : capacity),
  ------------------
  |  Branch (32:34): [True: 0, False: 1.61k]
  ------------------
   33|  1.61k|      size_(0), appended_(0), overflowed_(false) {
   34|  1.61k|}
_ZN6icu_7820CheckedArrayByteSink6AppendEPKci:
   44|    887|void CheckedArrayByteSink::Append(const char* bytes, int32_t n) {
   45|    887|  if (n <= 0) {
  ------------------
  |  Branch (45:7): [True: 0, False: 887]
  ------------------
   46|      0|    return;
   47|      0|  }
   48|    887|  if (n > (INT32_MAX - appended_)) {
  ------------------
  |  Branch (48:7): [True: 0, False: 887]
  ------------------
   49|       |    // TODO: Report as integer overflow, not merely buffer overflow.
   50|      0|    appended_ = INT32_MAX;
   51|      0|    overflowed_ = true;
   52|      0|    return;
   53|      0|  }
   54|    887|  appended_ += n;
   55|    887|  int32_t available = capacity_ - size_;
   56|    887|  if (n > available) {
  ------------------
  |  Branch (56:7): [True: 1, False: 886]
  ------------------
   57|      1|    n = available;
   58|      1|    overflowed_ = true;
   59|      1|  }
   60|    887|  if (n > 0 && bytes != (outbuf_ + size_)) {
  ------------------
  |  Branch (60:7): [True: 886, False: 1]
  |  Branch (60:16): [True: 886, False: 0]
  ------------------
   61|    886|    uprv_memcpy(outbuf_ + size_, bytes, n);
  ------------------
  |  |   42|    886|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|    886|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|    886|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|    886|    _Pragma("clang diagnostic push") \
  |  |   45|    886|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|    886|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|    886|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|    886|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|    886|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|    886|    _Pragma("clang diagnostic pop") \
  |  |   49|    886|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|    886|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|    886|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|    886|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   62|    886|  }
   63|    887|  size_ += n;
   64|    887|}
_ZN6icu_7820CheckedArrayByteSink15GetAppendBufferEiiPciPi:
   70|      1|                                            int32_t* result_capacity) {
   71|      1|  if (min_capacity < 1 || scratch_capacity < min_capacity) {
  ------------------
  |  Branch (71:7): [True: 0, False: 1]
  |  Branch (71:27): [True: 0, False: 1]
  ------------------
   72|      0|    *result_capacity = 0;
   73|      0|    return nullptr;
   74|      0|  }
   75|      1|  int32_t available = capacity_ - size_;
   76|      1|  if (available >= min_capacity) {
  ------------------
  |  Branch (76:7): [True: 0, False: 1]
  ------------------
   77|      0|    *result_capacity = available;
   78|      0|    return outbuf_ + size_;
   79|      1|  } else {
   80|      1|    *result_capacity = scratch_capacity;
   81|      1|    return scratch;
   82|      1|  }
   83|      1|}

_ZN6icu_7810CharStringC2EOS0_:
   30|    420|        : buffer(std::move(src.buffer)), len(src.len) {
   31|    420|    src.len = 0;  // not strictly necessary because we make no guarantees on the source string
   32|    420|}
_ZN6icu_7810CharString6appendEcR10UErrorCode:
  113|  40.7k|CharString &CharString::append(char c, UErrorCode &errorCode) {
  114|  40.7k|    if(ensureCapacity(len+2, 0, errorCode)) {
  ------------------
  |  Branch (114:8): [True: 34.4k, False: 6.30k]
  ------------------
  115|  34.4k|        buffer[len++]=c;
  116|  34.4k|        buffer[len]=0;
  117|  34.4k|    }
  118|  40.7k|    return *this;
  119|  40.7k|}
_ZN6icu_7810CharString6appendEPKciR10UErrorCode:
  121|   818k|CharString &CharString::append(const char *s, int32_t sLength, UErrorCode &errorCode) {
  122|   818k|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (122:8): [True: 9.24k, False: 808k]
  ------------------
  123|  9.24k|        return *this;
  124|  9.24k|    }
  125|   808k|    if(sLength<-1 || (s==nullptr && sLength!=0)) {
  ------------------
  |  Branch (125:8): [True: 0, False: 808k]
  |  Branch (125:23): [True: 0, False: 808k]
  |  Branch (125:37): [True: 0, False: 0]
  ------------------
  126|      0|        errorCode=U_ILLEGAL_ARGUMENT_ERROR;
  127|      0|        return *this;
  128|      0|    }
  129|   808k|    if(sLength<0) {
  ------------------
  |  Branch (129:8): [True: 40.2k, False: 768k]
  ------------------
  130|  40.2k|        sLength= static_cast<int32_t>(uprv_strlen(s));
  ------------------
  |  |   37|  40.2k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  40.2k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  131|  40.2k|    }
  132|   808k|    if(sLength>0) {
  ------------------
  |  Branch (132:8): [True: 808k, False: 717]
  ------------------
  133|   808k|        if(s==(buffer.getAlias()+len)) {
  ------------------
  |  Branch (133:12): [True: 4.55k, False: 803k]
  ------------------
  134|       |            // The caller wrote into the getAppendBuffer().
  135|  4.55k|            if(sLength>=(buffer.getCapacity()-len)) {
  ------------------
  |  Branch (135:16): [True: 0, False: 4.55k]
  ------------------
  136|       |                // The caller wrote too much.
  137|      0|                errorCode=U_INTERNAL_PROGRAM_ERROR;
  138|  4.55k|            } else {
  139|  4.55k|                buffer[len+=sLength]=0;
  140|  4.55k|            }
  141|   803k|        } else if(buffer.getAlias()<=s && s<(buffer.getAlias()+len) &&
  ------------------
  |  Branch (141:19): [True: 444k, False: 358k]
  |  Branch (141:43): [True: 0, False: 444k]
  ------------------
  142|   803k|                  sLength>=(buffer.getCapacity()-len)
  ------------------
  |  Branch (142:19): [True: 0, False: 0]
  ------------------
  143|   803k|        ) {
  144|       |            // (Part of) this string is appended to itself which requires reallocation,
  145|       |            // so we have to make a copy of the substring and append that.
  146|      0|            return append(CharString(s, sLength, errorCode), errorCode);
  147|   803k|        } else if(ensureCapacity(len+sLength+1, 0, errorCode)) {
  ------------------
  |  Branch (147:19): [True: 803k, False: 0]
  ------------------
  148|   803k|            uprv_memcpy(buffer.getAlias()+len, s, sLength);
  ------------------
  |  |   42|   803k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|   803k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|   803k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|   803k|    _Pragma("clang diagnostic push") \
  |  |   45|   803k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|   803k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|   803k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|   803k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|   803k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|   803k|    _Pragma("clang diagnostic pop") \
  |  |   49|   803k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|   803k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|   803k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|   803k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|   803k|            buffer[len+=sLength]=0;
  150|   803k|        }
  151|   808k|    }
  152|   808k|    return *this;
  153|   808k|}
_ZN6icu_7810CharString15getAppendBufferEiiRiR10UErrorCode:
  190|  5.25k|                                  UErrorCode &errorCode) {
  191|  5.25k|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (191:8): [True: 0, False: 5.25k]
  ------------------
  192|      0|        resultCapacity=0;
  193|      0|        return nullptr;
  194|      0|    }
  195|  5.25k|    int32_t appendCapacity=buffer.getCapacity()-len-1;  // -1 for NUL
  196|  5.25k|    if(appendCapacity>=minCapacity) {
  ------------------
  |  Branch (196:8): [True: 5.25k, False: 0]
  ------------------
  197|  5.25k|        resultCapacity=appendCapacity;
  198|  5.25k|        return buffer.getAlias()+len;
  199|  5.25k|    }
  200|      0|    if(ensureCapacity(len+minCapacity+1, len+desiredCapacityHint+1, errorCode)) {
  ------------------
  |  Branch (200:8): [True: 0, False: 0]
  ------------------
  201|      0|        resultCapacity=buffer.getCapacity()-len-1;
  202|      0|        return buffer.getAlias()+len;
  203|      0|    }
  204|      0|    resultCapacity=0;
  205|      0|    return nullptr;
  206|      0|}
_ZN6icu_7810CharString20appendInvariantCharsERKNS_13UnicodeStringER10UErrorCode:
  208|    420|CharString &CharString::appendInvariantChars(const UnicodeString &s, UErrorCode &errorCode) {
  209|    420|    return appendInvariantChars(s.getBuffer(), s.length(), errorCode);
  210|    420|}
_ZN6icu_7810CharString20appendInvariantCharsEPKDsiR10UErrorCode:
  212|  2.06k|CharString &CharString::appendInvariantChars(const char16_t* uchars, int32_t ucharsLen, UErrorCode &errorCode) {
  213|  2.06k|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (213:8): [True: 0, False: 2.06k]
  ------------------
  214|      0|        return *this;
  215|      0|    }
  216|  2.06k|    if (!uprv_isInvariantUString(uchars, ucharsLen)) {
  ------------------
  |  | 1518|  2.06k|#define uprv_isInvariantUString U_ICU_ENTRY_POINT_RENAME(uprv_isInvariantUString)
  |  |  ------------------
  |  |  |  |  123|  2.06k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.06k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.06k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (216:9): [True: 0, False: 2.06k]
  ------------------
  217|      0|        errorCode = U_INVARIANT_CONVERSION_ERROR;
  218|      0|        return *this;
  219|      0|    }
  220|  2.06k|    if(ensureCapacity(len+ucharsLen+1, 0, errorCode)) {
  ------------------
  |  Branch (220:8): [True: 2.06k, False: 0]
  ------------------
  221|  2.06k|        u_UCharsToChars(uchars, buffer.getAlias()+len, ucharsLen);
  ------------------
  |  |  211|  2.06k|#define u_UCharsToChars U_ICU_ENTRY_POINT_RENAME(u_UCharsToChars)
  |  |  ------------------
  |  |  |  |  123|  2.06k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.06k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.06k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|  2.06k|        len += ucharsLen;
  223|  2.06k|        buffer[len] = 0;
  224|  2.06k|    }
  225|  2.06k|    return *this;
  226|  2.06k|}
_ZN6icu_7810CharString14ensureCapacityEiiR10UErrorCode:
  230|   846k|                                 UErrorCode &errorCode) {
  231|   846k|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (231:8): [True: 6.30k, False: 840k]
  ------------------
  232|  6.30k|        return false;
  233|  6.30k|    }
  234|   840k|    if(capacity>buffer.getCapacity()) {
  ------------------
  |  Branch (234:8): [True: 1.13k, False: 839k]
  ------------------
  235|  1.13k|        if(desiredCapacityHint==0) {
  ------------------
  |  Branch (235:12): [True: 1.13k, False: 0]
  ------------------
  236|  1.13k|            desiredCapacityHint=capacity+buffer.getCapacity();
  237|  1.13k|        }
  238|  1.13k|        if( (desiredCapacityHint<=capacity || buffer.resize(desiredCapacityHint, len+1)==nullptr) &&
  ------------------
  |  Branch (238:14): [True: 0, False: 1.13k]
  |  Branch (238:47): [True: 0, False: 1.13k]
  ------------------
  239|  1.13k|            buffer.resize(capacity, len+1)==nullptr
  ------------------
  |  Branch (239:13): [True: 0, False: 0]
  ------------------
  240|  1.13k|        ) {
  241|      0|            errorCode=U_MEMORY_ALLOCATION_ERROR;
  242|      0|            return false;
  243|      0|        }
  244|  1.13k|    }
  245|   840k|    return true;
  246|   840k|}

_ZN6icu_7810CharStringD2Ev:
   56|   318k|    ~CharString() {}
_ZN6icu_7810CharStringC2Ev:
   43|   314k|    CharString() : len(0) { buffer[0]=0; }
_ZN6icu_7810CharString4dataEv:
   85|   472k|    char *data() { return buffer.getAlias(); }
_ZN6icu_7810CharString5clearEv:
  127|   318k|    CharString &clear() { len=0; buffer[0]=0; return *this; }
_ZN6icu_7810CharStringC2ENS_11StringPieceER10UErrorCode:
   44|  1.97k|    CharString(StringPiece s, UErrorCode &errorCode) : len(0) {
   45|  1.97k|        buffer[0]=0;
   46|  1.97k|        append(s, errorCode);
   47|  1.97k|    }
_ZN6icu_7810CharStringC2EPKciR10UErrorCode:
   52|    717|    CharString(const char *s, int32_t sLength, UErrorCode &errorCode) : len(0) {
   53|    717|        buffer[0]=0;
   54|    717|        append(s, sLength, errorCode);
   55|    717|    }
_ZNK6icu_7810CharString7isEmptyEv:
   79|  11.0k|    UBool isEmpty() const { return len==0; }
_ZNK6icu_7810CharString6lengthEv:
   80|  13.6k|    int32_t length() const { return len; }
_ZNK6icu_7810CharStringixEi:
   81|    835|    char operator[](int32_t index) const { return buffer[index]; }
_ZNK6icu_7810CharString4dataEv:
   84|  6.85k|    const char *data() const { return buffer.getAlias(); }
_ZNK6icu_7810CharStringeqERKS0_:
  108|    160|    bool operator==(const CharString& other) const {
  109|    160|        return len == other.length() && (len == 0 || uprv_memcmp(data(), other.data(), len) == 0);
  ------------------
  |  |  101|    160|#define uprv_memcmp(buffer1, buffer2, size) U_STANDARD_CPP_NAMESPACE memcmp(buffer1, buffer2,size)
  |  |  ------------------
  |  |  |  |  393|    160|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (109:16): [True: 160, False: 0]
  |  Branch (109:42): [True: 0, False: 160]
  |  Branch (109:54): [True: 147, False: 13]
  ------------------
  110|    160|    }
_ZNK6icu_7810CharStringeqENS_11StringPieceE:
  115|  8.86k|    bool operator==(StringPiece other) const {
  116|  8.86k|        return len == other.length() && (len == 0 || uprv_memcmp(data(), other.data(), len) == 0);
  ------------------
  |  |  101|    441|#define uprv_memcmp(buffer1, buffer2, size) U_STANDARD_CPP_NAMESPACE memcmp(buffer1, buffer2,size)
  |  |  ------------------
  |  |  |  |  393|    441|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (116:16): [True: 441, False: 8.41k]
  |  Branch (116:42): [True: 0, False: 441]
  |  Branch (116:54): [True: 0, False: 441]
  ------------------
  117|  8.86k|    }
_ZN6icu_7810CharString6appendENS_11StringPieceER10UErrorCode:
  131|   457k|    CharString &append(StringPiece s, UErrorCode &errorCode) {
  132|   457k|        return append(s.data(), s.length(), errorCode);
  133|   457k|    }
_ZN6icu_7810CharString6appendERKS0_R10UErrorCode:
  134|  5.79k|    CharString &append(const CharString &s, UErrorCode &errorCode) {
  135|  5.79k|        return append(s.data(), s.length(), errorCode);
  136|  5.79k|    }

_ZN6icu_7813CharStringMapD2Ev:
   33|     10|    ~CharStringMap() {
   34|     10|        uhash_close(map);
  ------------------
  |  |  991|     10|#define uhash_close U_ICU_ENTRY_POINT_RENAME(uhash_close)
  |  |  ------------------
  |  |  |  |  123|     10|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     10|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     10|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   35|     10|    }
_ZN6icu_7813CharStringMapC2EiR10UErrorCode:
   25|      5|    CharStringMap(int32_t size, UErrorCode &errorCode) {
   26|      5|        map = uhash_openSize(uhash_hashChars, uhash_compareChars, uhash_compareChars,
  ------------------
  |  | 1031|      5|#define uhash_openSize U_ICU_ENTRY_POINT_RENAME(uhash_openSize)
  |  |  ------------------
  |  |  |  |  123|      5|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      5|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      5|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      map = uhash_openSize(uhash_hashChars, uhash_compareChars, uhash_compareChars,
  ------------------
  |  | 1011|      5|#define uhash_hashChars U_ICU_ENTRY_POINT_RENAME(uhash_hashChars)
  |  |  ------------------
  |  |  |  |  123|      5|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      5|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      5|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      map = uhash_openSize(uhash_hashChars, uhash_compareChars, uhash_compareChars,
  ------------------
  |  |  993|      5|#define uhash_compareChars U_ICU_ENTRY_POINT_RENAME(uhash_compareChars)
  |  |  ------------------
  |  |  |  |  123|      5|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      5|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      5|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      map = uhash_openSize(uhash_hashChars, uhash_compareChars, uhash_compareChars,
  ------------------
  |  |  993|      5|#define uhash_compareChars U_ICU_ENTRY_POINT_RENAME(uhash_compareChars)
  |  |  ------------------
  |  |  |  |  123|      5|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      5|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      5|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   27|      5|                             size, &errorCode);
   28|      5|    }
_ZN6icu_7813CharStringMap3putEPKcS2_R10UErrorCode:
   45|  1.29k|    void put(const char *key, const char *value, UErrorCode &errorCode) {
   46|  1.29k|        uhash_put(map, const_cast<char *>(key), const_cast<char *>(value), &errorCode);
  ------------------
  |  | 1032|  1.29k|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|  1.29k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.29k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.29k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   47|  1.29k|    }
_ZN6icu_7813CharStringMapC2EOS0_:
   29|     10|    CharStringMap(CharStringMap &&other) noexcept : map(other.map) {
   30|     10|        other.map = nullptr;
   31|     10|    }
_ZNK6icu_7813CharStringMap3getEPKc:
   44|  1.88k|    const char *get(const char *key) const { return static_cast<const char *>(uhash_get(map, key)); }
  ------------------
  |  | 1007|  1.88k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|  1.88k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.88k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.88k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------

uprv_malloc_78:
   45|  1.86M|uprv_malloc(size_t s) {
   46|       |#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
   47|       |#if 1
   48|       |  putchar('>');
   49|       |  fflush(stdout);
   50|       |#else
   51|       |  fprintf(stderr,"MALLOC\t#%d\t%ul bytes\t%ul total\n", ++n,s,(b+=s)); fflush(stderr);
   52|       |#endif
   53|       |#endif
   54|  1.86M|    if (s > 0) {
  ------------------
  |  Branch (54:9): [True: 1.86M, False: 0]
  ------------------
   55|  1.86M|        if (pAlloc) {
  ------------------
  |  Branch (55:13): [True: 0, False: 1.86M]
  ------------------
   56|      0|            return (*pAlloc)(pContext, s);
   57|  1.86M|        } else {
   58|  1.86M|            return uprv_default_malloc(s);
  ------------------
  |  |  615|  1.86M|# define uprv_default_malloc(x) malloc(x)
  ------------------
   59|  1.86M|        }
   60|  1.86M|    } else {
   61|      0|        return (void *)zeroMem;
   62|      0|    }
   63|  1.86M|}
uprv_realloc_78:
   66|    777|uprv_realloc(void * buffer, size_t size) {
   67|       |#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
   68|       |  putchar('~');
   69|       |  fflush(stdout);
   70|       |#endif
   71|    777|    if (buffer == zeroMem) {
  ------------------
  |  Branch (71:9): [True: 0, False: 777]
  ------------------
   72|      0|        return uprv_malloc(size);
  ------------------
  |  | 1524|      0|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   73|    777|    } else if (size == 0) {
  ------------------
  |  Branch (73:16): [True: 0, False: 777]
  ------------------
   74|      0|        if (pFree) {
  ------------------
  |  Branch (74:13): [True: 0, False: 0]
  ------------------
   75|      0|            (*pFree)(pContext, buffer);
   76|      0|        } else {
   77|      0|            uprv_default_free(buffer);
  ------------------
  |  |  617|      0|# define uprv_default_free(x) free(x)
  ------------------
   78|      0|        }
   79|      0|        return (void *)zeroMem;
   80|    777|    } else {
   81|    777|        if (pRealloc) {
  ------------------
  |  Branch (81:13): [True: 0, False: 777]
  ------------------
   82|      0|            return (*pRealloc)(pContext, buffer, size);
   83|    777|        } else {
   84|    777|            return uprv_default_realloc(buffer, size);
  ------------------
  |  |  616|    777|# define uprv_default_realloc(x,y) realloc(x,y)
  ------------------
   85|    777|        }
   86|    777|    }
   87|    777|}
uprv_free_78:
   90|  1.55M|uprv_free(void *buffer) {
   91|       |#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
   92|       |  putchar('<');
   93|       |  fflush(stdout);
   94|       |#endif
   95|  1.55M|    if (buffer != zeroMem) {
  ------------------
  |  Branch (95:9): [True: 1.55M, False: 0]
  ------------------
   96|  1.55M|        if (pFree) {
  ------------------
  |  Branch (96:13): [True: 0, False: 1.55M]
  ------------------
   97|      0|            (*pFree)(pContext, buffer);
   98|  1.55M|        } else {
   99|  1.55M|            uprv_default_free(buffer);
  ------------------
  |  |  617|  1.55M|# define uprv_default_free(x) free(x)
  ------------------
  100|  1.55M|        }
  101|  1.55M|    }
  102|  1.55M|}

_ZN6icu_7815MaybeStackArrayIcLi40EEC2Ev:
  344|   317k|    MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(false) {}
_ZN6icu_7815MaybeStackArrayIcLi40EED2Ev:
  363|   318k|    ~MaybeStackArray() { releaseArray(); }
_ZN6icu_7815MaybeStackArrayIcLi40EEC2EOS1_:
  479|    420|        : ptr(src.ptr), capacity(src.capacity), needToRelease(src.needToRelease) {
  480|    420|    if (src.ptr == src.stackArray) {
  ------------------
  |  Branch (480:9): [True: 420, False: 0]
  ------------------
  481|    420|        ptr = stackArray;
  482|    420|        uprv_memcpy(stackArray, src.stackArray, sizeof(T) * src.capacity);
  ------------------
  |  |   42|    420|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|    420|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|    420|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|    420|    _Pragma("clang diagnostic push") \
  |  |   45|    420|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|    420|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|    420|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|    420|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|    420|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|    420|    _Pragma("clang diagnostic pop") \
  |  |   49|    420|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|    420|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|    420|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|    420|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  483|    420|    } else {
  484|      0|        src.resetToStackArray();  // take ownership away from src
  485|      0|    }
  486|    420|}
_ZNK6icu_7815MaybeStackArrayIcLi40EE11getCapacityEv:
  376|   851k|    int32_t getCapacity() const { return capacity; }
_ZNK6icu_7815MaybeStackArrayIcLi40EE8getAliasEv:
  381|  3.34M|    T *getAlias() const { return ptr; }
_ZNK6icu_7815MaybeStackArrayIcLi40EEixEl:
  395|    835|    const T &operator[](ptrdiff_t i) const { return ptr[i]; }
_ZN6icu_7815MaybeStackArrayIcLi40EEixEl:
  402|  1.51M|    T &operator[](ptrdiff_t i) { return ptr[i]; }
_ZN6icu_7815MaybeStackArrayIcLi40EE6resizeEii:
  505|  1.13k|inline T *MaybeStackArray<T, stackCapacity>::resize(int32_t newCapacity, int32_t length) {
  506|  1.13k|    if(newCapacity>0) {
  ------------------
  |  Branch (506:8): [True: 1.13k, False: 0]
  ------------------
  507|       |#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
  508|       |        ::fprintf(::stderr, "MaybeStackArray (resize) alloc %d * %lu\n", newCapacity, sizeof(T));
  509|       |#endif
  510|  1.13k|        T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
  ------------------
  |  | 1524|  1.13k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  1.13k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.13k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.13k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|  1.13k|        if(p!=nullptr) {
  ------------------
  |  Branch (511:12): [True: 1.13k, False: 0]
  ------------------
  512|  1.13k|            if(length>0) {
  ------------------
  |  Branch (512:16): [True: 1.13k, False: 0]
  ------------------
  513|  1.13k|                if(length>capacity) {
  ------------------
  |  Branch (513:20): [True: 0, False: 1.13k]
  ------------------
  514|      0|                    length=capacity;
  515|      0|                }
  516|  1.13k|                if(length>newCapacity) {
  ------------------
  |  Branch (516:20): [True: 0, False: 1.13k]
  ------------------
  517|      0|                    length=newCapacity;
  518|      0|                }
  519|  1.13k|                uprv_memcpy(p, ptr, (size_t)length*sizeof(T));
  ------------------
  |  |   42|  1.13k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  1.13k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  1.13k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  1.13k|    _Pragma("clang diagnostic push") \
  |  |   45|  1.13k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  1.13k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.13k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  1.13k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.13k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  1.13k|    _Pragma("clang diagnostic pop") \
  |  |   49|  1.13k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  1.13k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  1.13k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  1.13k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|  1.13k|            }
  521|  1.13k|            releaseArray();
  522|  1.13k|            ptr=p;
  523|  1.13k|            capacity=newCapacity;
  524|  1.13k|            needToRelease=true;
  525|  1.13k|        }
  526|  1.13k|        return p;
  527|  1.13k|    } else {
  528|      0|        return nullptr;
  529|      0|    }
  530|  1.13k|}
_ZN6icu_7815MaybeStackArrayIcLi40EE12releaseArrayEv:
  458|   319k|    void releaseArray() {
  459|   319k|        if(needToRelease) {
  ------------------
  |  Branch (459:12): [True: 1.13k, False: 318k]
  ------------------
  460|  1.13k|            uprv_free(ptr);
  ------------------
  |  | 1503|  1.13k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  1.13k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.13k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.13k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  461|  1.13k|        }
  462|   319k|    }
_ZN6icu_7810MemoryPoolINS_9HashtableELi8EEC2Ev:
  760|    420|    MemoryPool() : fCount(0), fPool() {}
_ZN6icu_7815MaybeStackArrayIPNS_9HashtableELi8EEC2Ev:
  344|    420|    MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(false) {}
_ZN6icu_7810MemoryPoolINS_9HashtableELi8EED2Ev:
  762|    420|    ~MemoryPool() {
  763|  1.48k|        for (int32_t i = 0; i < fCount; ++i) {
  ------------------
  |  Branch (763:29): [True: 1.06k, False: 420]
  ------------------
  764|  1.06k|            delete fPool[i];
  765|  1.06k|        }
  766|    420|    }
_ZN6icu_7815MaybeStackArrayIPNS_9HashtableELi8EEixEl:
  402|  2.13k|    T &operator[](ptrdiff_t i) { return ptr[i]; }
_ZN6icu_7815MaybeStackArrayIPNS_9HashtableELi8EED2Ev:
  363|    420|    ~MaybeStackArray() { releaseArray(); }
_ZN6icu_7815MaybeStackArrayIPNS_9HashtableELi8EE12releaseArrayEv:
  458|    420|    void releaseArray() {
  459|    420|        if(needToRelease) {
  ------------------
  |  Branch (459:12): [True: 0, False: 420]
  ------------------
  460|      0|            uprv_free(ptr);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  461|      0|        }
  462|    420|    }
_ZN6icu_7810MemoryPoolINS_9HashtableELi8EE6createIJbR10UErrorCodeEEEPS1_DpOT_:
  796|  1.06k|    T* create(Args&&... args) {
  797|  1.06k|        int32_t capacity = fPool.getCapacity();
  798|  1.06k|        if (fCount == capacity &&
  ------------------
  |  Branch (798:13): [True: 0, False: 1.06k]
  ------------------
  799|  1.06k|            fPool.resize(capacity == stackCapacity ? 4 * capacity : 2 * capacity,
  ------------------
  |  Branch (799:13): [True: 0, False: 0]
  |  Branch (799:26): [True: 0, False: 0]
  ------------------
  800|      0|                         capacity) == nullptr) {
  801|      0|            return nullptr;
  802|      0|        }
  803|  1.06k|        return fPool[fCount++] = new T(std::forward<Args>(args)...);
  804|  1.06k|    }
_ZNK6icu_7815MaybeStackArrayIPNS_9HashtableELi8EE11getCapacityEv:
  376|  1.06k|    int32_t getCapacity() const { return capacity; }
_ZN6icu_7811LocalMemoryIDsEC2EPDs:
  195|    190|    explicit LocalMemory(T *p=nullptr) : LocalPointerBase<T>(p) {}
_ZNK6icu_7811LocalMemoryIDsEixEl:
  274|    190|    T &operator[](ptrdiff_t i) const { return LocalPointerBase<T>::ptr[i]; }
_ZN6icu_7811LocalMemoryIDsED2Ev:
  206|    190|    ~LocalMemory() {
  207|    190|        uprv_free(LocalPointerBase<T>::ptr);
  ------------------
  |  | 1503|    190|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|    190|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    190|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    190|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  208|    190|    }
_ZN6icu_7811LocalMemoryIiEC2EPi:
  195|      5|    explicit LocalMemory(T *p=nullptr) : LocalPointerBase<T>(p) {}
_ZN6icu_7811LocalMemoryIiED2Ev:
  206|      5|    ~LocalMemory() {
  207|      5|        uprv_free(LocalPointerBase<T>::ptr);
  ------------------
  |  | 1503|      5|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      5|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      5|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      5|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  208|      5|    }
_ZNK6icu_7811LocalMemoryIiEixEl:
  274|  1.29k|    T &operator[](ptrdiff_t i) const { return LocalPointerBase<T>::ptr[i]; }
_ZN6icu_7810MemoryPoolINS_13UnicodeStringELi8EEC2Ev:
  760|      1|    MemoryPool() : fCount(0), fPool() {}
_ZN6icu_7815MaybeStackArrayIPNS_13UnicodeStringELi8EEC2Ev:
  344|      1|    MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(false) {}
_ZN6icu_7810MemoryPoolINS_13UnicodeStringELi8EED2Ev:
  762|      1|    ~MemoryPool() {
  763|      1|        for (int32_t i = 0; i < fCount; ++i) {
  ------------------
  |  Branch (763:29): [True: 0, False: 1]
  ------------------
  764|      0|            delete fPool[i];
  765|      0|        }
  766|      1|    }
_ZN6icu_7815MaybeStackArrayIPNS_13UnicodeStringELi8EED2Ev:
  363|      1|    ~MaybeStackArray() { releaseArray(); }
_ZN6icu_7815MaybeStackArrayIPNS_13UnicodeStringELi8EE12releaseArrayEv:
  458|      1|    void releaseArray() {
  459|      1|        if(needToRelease) {
  ------------------
  |  Branch (459:12): [True: 0, False: 1]
  ------------------
  460|      0|            uprv_free(ptr);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  461|      0|        }
  462|      1|    }
_ZN6icu_7811LocalMemoryIPKcEC2EPS2_:
  195|      5|    explicit LocalMemory(T *p=nullptr) : LocalPointerBase<T>(p) {}
_ZN6icu_7811LocalMemoryIPKcE22allocateInsteadAndCopyEii:
  294|      5|inline T *LocalMemory<T>::allocateInsteadAndCopy(int32_t newCapacity, int32_t length) {
  295|      5|    if(newCapacity>0) {
  ------------------
  |  Branch (295:8): [True: 5, False: 0]
  ------------------
  296|      5|        T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
  ------------------
  |  | 1524|      5|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|      5|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      5|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      5|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|      5|        if(p!=nullptr) {
  ------------------
  |  Branch (297:12): [True: 5, False: 0]
  ------------------
  298|      5|            if(length>0) {
  ------------------
  |  Branch (298:16): [True: 0, False: 5]
  ------------------
  299|      0|                if(length>newCapacity) {
  ------------------
  |  Branch (299:20): [True: 0, False: 0]
  ------------------
  300|      0|                    length=newCapacity;
  301|      0|                }
  302|      0|                uprv_memcpy(p, LocalPointerBase<T>::ptr, (size_t)length*sizeof(T));
  ------------------
  |  |   42|      0|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|      0|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|      0|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|      0|    _Pragma("clang diagnostic push") \
  |  |   45|      0|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|      0|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|      0|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|      0|    _Pragma("clang diagnostic pop") \
  |  |   49|      0|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|      0|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|      0|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  303|      0|            }
  304|      5|            uprv_free(LocalPointerBase<T>::ptr);
  ------------------
  |  | 1503|      5|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      5|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      5|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      5|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  305|      5|            LocalPointerBase<T>::ptr=p;
  306|      5|        }
  307|      5|        return p;
  308|      5|    } else {
  309|      0|        return nullptr;
  310|      0|    }
  311|      5|}
_ZN6icu_7811LocalMemoryIiE22allocateInsteadAndCopyEii:
  294|      5|inline T *LocalMemory<T>::allocateInsteadAndCopy(int32_t newCapacity, int32_t length) {
  295|      5|    if(newCapacity>0) {
  ------------------
  |  Branch (295:8): [True: 5, False: 0]
  ------------------
  296|      5|        T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
  ------------------
  |  | 1524|      5|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|      5|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      5|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      5|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|      5|        if(p!=nullptr) {
  ------------------
  |  Branch (297:12): [True: 5, False: 0]
  ------------------
  298|      5|            if(length>0) {
  ------------------
  |  Branch (298:16): [True: 0, False: 5]
  ------------------
  299|      0|                if(length>newCapacity) {
  ------------------
  |  Branch (299:20): [True: 0, False: 0]
  ------------------
  300|      0|                    length=newCapacity;
  301|      0|                }
  302|      0|                uprv_memcpy(p, LocalPointerBase<T>::ptr, (size_t)length*sizeof(T));
  ------------------
  |  |   42|      0|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|      0|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|      0|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|      0|    _Pragma("clang diagnostic push") \
  |  |   45|      0|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|      0|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|      0|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|      0|    _Pragma("clang diagnostic pop") \
  |  |   49|      0|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|      0|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|      0|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  303|      0|            }
  304|      5|            uprv_free(LocalPointerBase<T>::ptr);
  ------------------
  |  | 1503|      5|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      5|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      5|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      5|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  305|      5|            LocalPointerBase<T>::ptr=p;
  306|      5|        }
  307|      5|        return p;
  308|      5|    } else {
  309|      0|        return nullptr;
  310|      0|    }
  311|      5|}
_ZNK6icu_7811LocalMemoryIPKcEixEl:
  274|  1.29k|    T &operator[](ptrdiff_t i) const { return LocalPointerBase<T>::ptr[i]; }
_ZN6icu_7811LocalMemoryIPKcED2Ev:
  206|      5|    ~LocalMemory() {
  207|      5|        uprv_free(LocalPointerBase<T>::ptr);
  ------------------
  |  | 1503|      5|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      5|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      5|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      5|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  208|      5|    }
umutex.cpp:_ZZN6icu_78L9umtx_initEvENK3$_0clEv:
  144|      1|#define STATIC_NEW(type) [] () { \
  145|      1|    alignas(type) static char storage[sizeof(type)]; \
  146|      1|    return new(storage) type();} ()
umutex.cpp:_ZZN6icu_78L9umtx_initEvENK3$_1clEv:
  144|      1|#define STATIC_NEW(type) [] () { \
  145|      1|    alignas(type) static char storage[sizeof(type)]; \
  146|      1|    return new(storage) type();} ()

dtfmtsym.cpp:_ZL14uprv_arrayCopyPKN6icu_7813UnicodeStringEPS0_i:
   75|  61.5k|{ while(count-- > 0) *dst++ = *src++; }
  ------------------
  |  Branch (75:9): [True: 53.7k, False: 7.81k]
  ------------------
dtfmtsym.cpp:_ZL14uprv_arrayCopyPKN6icu_7813UnicodeStringEiPS0_ii:
   84|  3.36k|{ uprv_arrayCopy(src+srcStart, dst+dstStart, count); }

uprv_isASCIILetter_78:
   52|  9.77k|uprv_isASCIILetter(char c) {
   53|       |#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
   54|       |    return
   55|       |        ('a'<=c && c<='i') || ('j'<=c && c<='r') || ('s'<=c && c<='z') ||
   56|       |        ('A'<=c && c<='I') || ('J'<=c && c<='R') || ('S'<=c && c<='Z');
   57|       |#else
   58|  9.77k|    return ('a'<=c && c<='z') || ('A'<=c && c<='Z');
  ------------------
  |  Branch (58:13): [True: 5.22k, False: 4.55k]
  |  Branch (58:23): [True: 5.22k, False: 0]
  |  Branch (58:35): [True: 4.52k, False: 31]
  |  Branch (58:45): [True: 4.52k, False: 0]
  ------------------
   59|  9.77k|#endif
   60|  9.77k|}
uprv_toupper_78:
   63|  4.31k|uprv_toupper(char c) {
   64|       |#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
   65|       |    if(('a'<=c && c<='i') || ('j'<=c && c<='r') || ('s'<=c && c<='z')) {
   66|       |        c=(char)(c+('A'-'a'));
   67|       |    }
   68|       |#else
   69|  4.31k|    if('a'<=c && c<='z') {
  ------------------
  |  Branch (69:8): [True: 0, False: 4.31k]
  |  Branch (69:18): [True: 0, False: 0]
  ------------------
   70|      0|        c=(char)(c+('A'-'a'));
   71|      0|    }
   72|  4.31k|#endif
   73|  4.31k|    return c;
   74|  4.31k|}
uprv_asciitolower_78:
  103|  16.5k|uprv_asciitolower(char c) {
  104|  16.5k|    if(0x41<=c && c<=0x5a) {
  ------------------
  |  Branch (104:8): [True: 16.5k, False: 1]
  |  Branch (104:19): [True: 5, False: 16.5k]
  ------------------
  105|      5|        c=(char)(c+0x20);
  106|      5|    }
  107|  16.5k|    return c;
  108|  16.5k|}
T_CString_toLowerCase_78:
  124|      1|{
  125|      1|    char* origPtr = str;
  126|       |
  127|      1|    if (str) {
  ------------------
  |  Branch (127:9): [True: 1, False: 0]
  ------------------
  128|      1|        do
  129|      6|            *str = uprv_tolower(*str);
  ------------------
  |  |   68|      6|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|      6|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|      6|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|      6|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|      6|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  130|      6|        while (*(str++));
  ------------------
  |  Branch (130:16): [True: 5, False: 1]
  ------------------
  131|      1|    }
  132|       |
  133|      1|    return origPtr;
  134|      1|}
T_CString_integerToString_78:
  158|    951|{
  159|    951|    char      tbuf[30];
  160|    951|    int32_t   tbx    = sizeof(tbuf);
  161|    951|    uint8_t   digit;
  162|    951|    int32_t   length = 0;
  163|    951|    uint32_t  uval;
  164|       |    
  165|    951|    U_ASSERT(radix>=2 && radix<=16);
  ------------------
  |  |   35|    951|#   define U_ASSERT(exp) (void)0
  ------------------
  166|    951|    uval = (uint32_t) v;
  167|    951|    if(v<0 && radix == 10) {
  ------------------
  |  Branch (167:8): [True: 0, False: 951]
  |  Branch (167:15): [True: 0, False: 0]
  ------------------
  168|       |        /* Only in base 10 do we conside numbers to be signed. */
  169|      0|        uval = (uint32_t)(-v); 
  170|      0|        buffer[length++] = '-';
  171|      0|    }
  172|       |    
  173|    951|    tbx = sizeof(tbuf)-1;
  174|    951|    tbuf[tbx] = 0;   /* We are generating the digits backwards.  Null term the end. */
  175|  1.02k|    do {
  176|  1.02k|        digit = (uint8_t)(uval % radix);
  177|  1.02k|        tbuf[--tbx] = (char)(T_CString_itosOffset(digit));
  ------------------
  |  |   81|  1.02k|#define T_CString_itosOffset(a) ((a)<=9?('0'+(a)):('A'+(a)-10))
  |  |  ------------------
  |  |  |  Branch (81:34): [True: 1.02k, False: 0]
  |  |  ------------------
  ------------------
  178|  1.02k|        uval  = uval / radix;
  179|  1.02k|    } while (uval != 0);
  ------------------
  |  Branch (179:14): [True: 75, False: 951]
  ------------------
  180|       |    
  181|       |    /* copy converted number into user buffer  */
  182|    951|    uprv_strcpy(buffer+length, tbuf+tbx);
  ------------------
  |  |   36|    951|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|    951|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  183|    951|    length += sizeof(tbuf) - tbx -1;
  184|    951|    return length;
  185|    951|}
uprv_strnicmp_78:
  274|  2.77k|uprv_strnicmp(const char *str1, const char *str2, uint32_t n) {
  275|  2.77k|    if(str1==nullptr) {
  ------------------
  |  Branch (275:8): [True: 0, False: 2.77k]
  ------------------
  276|      0|        if(str2==nullptr) {
  ------------------
  |  Branch (276:12): [True: 0, False: 0]
  ------------------
  277|      0|            return 0;
  278|      0|        } else {
  279|      0|            return -1;
  280|      0|        }
  281|  2.77k|    } else if(str2==nullptr) {
  ------------------
  |  Branch (281:15): [True: 0, False: 2.77k]
  ------------------
  282|      0|        return 1;
  283|  2.77k|    } else {
  284|       |        /* compare non-nullptr strings lexically with lowercase */
  285|  2.77k|        int rc;
  286|  2.77k|        unsigned char c1, c2;
  287|       |
  288|  2.84k|        for(; n--;) {
  ------------------
  |  Branch (288:15): [True: 2.84k, False: 0]
  ------------------
  289|  2.84k|            c1=(unsigned char)*str1;
  290|  2.84k|            c2=(unsigned char)*str2;
  291|  2.84k|            if(c1==0) {
  ------------------
  |  Branch (291:16): [True: 0, False: 2.84k]
  ------------------
  292|      0|                if(c2==0) {
  ------------------
  |  Branch (292:20): [True: 0, False: 0]
  ------------------
  293|      0|                    return 0;
  294|      0|                } else {
  295|      0|                    return -1;
  296|      0|                }
  297|  2.84k|            } else if(c2==0) {
  ------------------
  |  Branch (297:23): [True: 0, False: 2.84k]
  ------------------
  298|      0|                return 1;
  299|  2.84k|            } else {
  300|       |                /* compare non-zero characters with lowercase */
  301|  2.84k|                rc=(int)(unsigned char)uprv_tolower(c1)-(int)(unsigned char)uprv_tolower(c2);
  ------------------
  |  |   68|  2.84k|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|  2.84k|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  2.84k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|  2.84k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|  2.84k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                              rc=(int)(unsigned char)uprv_tolower(c1)-(int)(unsigned char)uprv_tolower(c2);
  ------------------
  |  |   68|  2.84k|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|  2.84k|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  2.84k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|  2.84k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|  2.84k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  302|  2.84k|                if(rc!=0) {
  ------------------
  |  Branch (302:20): [True: 2.77k, False: 63]
  ------------------
  303|  2.77k|                    return rc;
  304|  2.77k|                }
  305|  2.84k|            }
  306|     63|            ++str1;
  307|     63|            ++str2;
  308|     63|        }
  309|  2.77k|    }
  310|       |
  311|      0|    return 0;
  312|  2.77k|}
uprv_strdup_78:
  315|    530|uprv_strdup(const char *src) {
  316|    530|    size_t len = uprv_strlen(src) + 1;
  ------------------
  |  |   37|    530|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|    530|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  317|    530|    char *dup = (char *) uprv_malloc(len);
  ------------------
  |  | 1524|    530|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|    530|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    530|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    530|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  318|       |
  319|    530|    if (dup) {
  ------------------
  |  Branch (319:9): [True: 530, False: 0]
  ------------------
  320|    530|        uprv_memcpy(dup, src, len);
  ------------------
  |  |   42|    530|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|    530|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|    530|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|    530|    _Pragma("clang diagnostic push") \
  |  |   45|    530|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|    530|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|    530|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|    530|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|    530|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|    530|    _Pragma("clang diagnostic pop") \
  |  |   49|    530|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|    530|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|    530|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|    530|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  321|    530|    }
  322|       |
  323|    530|    return dup;
  324|    530|}

_ZN6icu_789ErrorCodeD2Ev:
   24|    886|ErrorCode::~ErrorCode() {}

_ZN6icu_789HashtableC2EaR10UErrorCode:
  156|  2.32k| : hash(nullptr)
  157|  2.32k|{
  158|  2.32k|    init(ignoreKeyCase ? uhash_hashCaselessUnicodeString
  ------------------
  |  | 1010|  2.32k|#define uhash_hashCaselessUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_hashCaselessUnicodeString)
  |  |  ------------------
  |  |  |  |  123|  2.32k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.32k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.32k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (158:10): [True: 0, False: 2.32k]
  ------------------
  159|  2.32k|                        : uhash_hashUnicodeString,
  ------------------
  |  | 1017|  2.32k|#define uhash_hashUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_hashUnicodeString)
  |  |  ------------------
  |  |  |  |  123|  2.32k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.32k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.32k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  160|  2.32k|            ignoreKeyCase ? uhash_compareCaselessUnicodeString
  ------------------
  |  |  992|  2.32k|#define uhash_compareCaselessUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_compareCaselessUnicodeString)
  |  |  ------------------
  |  |  |  |  123|  2.32k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.32k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.32k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (160:13): [True: 0, False: 2.32k]
  ------------------
  161|  2.32k|                        : uhash_compareUnicodeString,
  ------------------
  |  |  999|  2.32k|#define uhash_compareUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_compareUnicodeString)
  |  |  ------------------
  |  |  |  |  123|  2.32k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.32k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.32k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  162|  2.32k|            nullptr,
  163|  2.32k|            status);
  164|  2.32k|}
_ZN6icu_789Hashtable4initEPFi8UElementEPFaS1_S1_ES5_R10UErrorCode:
  127|  2.32k|                            UValueComparator *valueComp, UErrorCode& status) {
  128|  2.32k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (128:9): [True: 0, False: 2.32k]
  ------------------
  129|      0|        return;
  130|      0|    }
  131|  2.32k|    uhash_init(&hashObj, keyHash, keyComp, valueComp, &status);
  ------------------
  |  | 1022|  2.32k|#define uhash_init U_ICU_ENTRY_POINT_RENAME(uhash_init)
  |  |  ------------------
  |  |  |  |  123|  2.32k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.32k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.32k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|  2.32k|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (132:9): [True: 2.32k, False: 0]
  ------------------
  133|  2.32k|        hash = &hashObj;
  134|  2.32k|        uhash_setKeyDeleter(hash, uprv_deleteUObject);
  ------------------
  |  | 1040|  2.32k|#define uhash_setKeyDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setKeyDeleter)
  |  |  ------------------
  |  |  |  |  123|  2.32k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.32k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.32k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      uhash_setKeyDeleter(hash, uprv_deleteUObject);
  ------------------
  |  | 1489|  2.32k|#define uprv_deleteUObject U_ICU_ENTRY_POINT_RENAME(uprv_deleteUObject)
  |  |  ------------------
  |  |  |  |  123|  2.32k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.32k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.32k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  135|  2.32k|    }
  136|  2.32k|}
_ZN6icu_789HashtableD2Ev:
  190|  2.32k|inline Hashtable::~Hashtable() {
  191|  2.32k|    if (hash != nullptr) {
  ------------------
  |  Branch (191:9): [True: 2.32k, False: 0]
  ------------------
  192|  2.32k|        uhash_close(hash);
  ------------------
  |  |  991|  2.32k|#define uhash_close U_ICU_ENTRY_POINT_RENAME(uhash_close)
  |  |  ------------------
  |  |  |  |  123|  2.32k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.32k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.32k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  193|  2.32k|    }
  194|  2.32k|}
_ZNK6icu_789Hashtable3getERKNS_13UnicodeStringE:
  217|  73.5k|inline void* Hashtable::get(const UnicodeString& key) const {
  218|  73.5k|    return uhash_get(hash, &key);
  ------------------
  |  | 1007|  73.5k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|  73.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  73.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  73.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  219|  73.5k|}
_ZN6icu_789Hashtable3putERKNS_13UnicodeStringEPvR10UErrorCode:
  204|  17.1k|inline void* Hashtable::put(const UnicodeString& key, void* value, UErrorCode& status) {
  205|  17.1k|    return uhash_put(hash, new UnicodeString(key), value, &status);
  ------------------
  |  | 1032|  17.1k|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|  17.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  17.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  17.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  206|  17.1k|}
_ZN6icu_789Hashtable4putiERKNS_13UnicodeStringEiR10UErrorCode:
  208|  10.4k|inline int32_t Hashtable::puti(const UnicodeString& key, int32_t value, UErrorCode& status) {
  209|  10.4k|    return uhash_puti(hash, new UnicodeString(key), value, &status);
  ------------------
  |  | 1033|  10.4k|#define uhash_puti U_ICU_ENTRY_POINT_RENAME(uhash_puti)
  |  |  ------------------
  |  |  |  |  123|  10.4k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  10.4k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  10.4k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|  10.4k|}
_ZN6icu_789Hashtable15setValueDeleterEPFvPvE:
  196|  1.48k|inline UObjectDeleter *Hashtable::setValueDeleter(UObjectDeleter *fn) {
  197|  1.48k|    return uhash_setValueDeleter(hash, fn);
  ------------------
  |  | 1044|  1.48k|#define uhash_setValueDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setValueDeleter)
  |  |  ------------------
  |  |  |  |  123|  1.48k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.48k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.48k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|  1.48k|}
_ZNK6icu_789Hashtable4getiERKNS_13UnicodeStringE:
  221|  14.8k|inline int32_t Hashtable::geti(const UnicodeString& key) const {
  222|  14.8k|    return uhash_geti(hash, &key);
  ------------------
  |  | 1008|  14.8k|#define uhash_geti U_ICU_ENTRY_POINT_RENAME(uhash_geti)
  |  |  ------------------
  |  |  |  |  123|  14.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  14.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  14.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|  14.8k|}
_ZN6icu_789Hashtable6removeERKNS_13UnicodeStringE:
  229|  7.03k|inline void* Hashtable::remove(const UnicodeString& key) {
  230|  7.03k|    return uhash_remove(hash, &key);
  ------------------
  |  | 1035|  7.03k|#define uhash_remove U_ICU_ENTRY_POINT_RENAME(uhash_remove)
  |  |  ------------------
  |  |  |  |  123|  7.03k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.03k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.03k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|  7.03k|}

_ZN6icu_7821locale_available_initEv:
   58|      1|void U_CALLCONV locale_available_init() {
   59|       |    // This function is a friend of class Locale.
   60|       |    // This function is only invoked via umtx_initOnce().
   61|       |    
   62|       |    // for now, there is a hardcoded list, so just walk through that list and set it up.
   63|       |    //  Note: this function is a friend of class Locale.
   64|      1|    availableLocaleListCount = uloc_countAvailable();
  ------------------
  |  | 1110|      1|#define uloc_countAvailable U_ICU_ENTRY_POINT_RENAME(uloc_countAvailable)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   65|      1|    if(availableLocaleListCount) {
  ------------------
  |  Branch (65:8): [True: 1, False: 0]
  ------------------
   66|      1|       availableLocaleList = new Locale[availableLocaleListCount];
   67|      1|    }
   68|      1|    if (availableLocaleList == nullptr) {
  ------------------
  |  Branch (68:9): [True: 0, False: 1]
  ------------------
   69|      0|        availableLocaleListCount= 0;
   70|      0|    }
   71|    886|    for (int32_t locCount=availableLocaleListCount-1; locCount>=0; --locCount) {
  ------------------
  |  Branch (71:55): [True: 885, False: 1]
  ------------------
   72|    885|        availableLocaleList[locCount].setFromPOSIXID(uloc_getAvailable(locCount));
  ------------------
  |  | 1112|    885|#define uloc_getAvailable U_ICU_ENTRY_POINT_RENAME(uloc_getAvailable)
  |  |  ------------------
  |  |  |  |  123|    885|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    885|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    885|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   73|    885|    }
   74|      1|    ucln_common_registerCleanup(UCLN_COMMON_LOCALE_AVAILABLE, locale_available_cleanup);
  ------------------
  |  |  617|      1|#define ucln_common_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_common_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   75|      1|}
_ZN6icu_786Locale19getAvailableLocalesERi:
   79|    420|{
   80|    420|    umtx_initOnce(gInitOnceLocale, &locale_available_init);
   81|    420|    count = availableLocaleListCount;
   82|    420|    return availableLocaleList;
   83|    420|}
uloc_getAvailable_78:
  223|    885|uloc_getAvailable(int32_t offset) {
  224|    885|    icu::ErrorCode status;
  225|    885|    _load_installedLocales(status);
  226|    885|    if (status.isFailure()) {
  ------------------
  |  Branch (226:9): [True: 0, False: 885]
  ------------------
  227|      0|        return nullptr;
  228|      0|    }
  229|    885|    if (offset > gAvailableLocaleCounts[0]) {
  ------------------
  |  Branch (229:9): [True: 0, False: 885]
  ------------------
  230|       |        // *status = U_ILLEGAL_ARGUMENT_ERROR;
  231|      0|        return nullptr;
  232|      0|    }
  233|    885|    return gAvailableLocaleNames[0][offset];
  234|    885|}
uloc_countAvailable_78:
  237|      1|uloc_countAvailable() {
  238|      1|    icu::ErrorCode status;
  239|      1|    _load_installedLocales(status);
  240|      1|    if (status.isFailure()) {
  ------------------
  |  Branch (240:9): [True: 0, False: 1]
  ------------------
  241|      0|        return 0;
  242|      0|    }
  243|      1|    return gAvailableLocaleCounts[0];
  244|      1|}
locavailable.cpp:_ZN12_GLOBAL__N_122_load_installedLocalesER10UErrorCode:
  216|    886|void _load_installedLocales(UErrorCode& status) {
  217|    886|    umtx_initOnce(ginstalledLocalesInitOnce, &loadInstalledLocales, status);
  218|    886|}
locavailable.cpp:_ZN12_GLOBAL__N_120loadInstalledLocalesER10UErrorCode:
  208|      1|void U_CALLCONV loadInstalledLocales(UErrorCode& status) {
  209|      1|    ucln_common_registerCleanup(UCLN_COMMON_ULOC, uloc_cleanup);
  ------------------
  |  |  617|      1|#define ucln_common_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_common_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|       |
  211|      1|    icu::LocalUResourceBundlePointer rb(ures_openDirect(nullptr, "res_index", &status));
  ------------------
  |  | 1693|      1|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  212|      1|    AvailableLocalesSink sink;
  213|      1|    ures_getAllItemsWithFallback(rb.getAlias(), "", sink, status);
  ------------------
  |  | 1658|      1|#define ures_getAllItemsWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllItemsWithFallback)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  214|      1|}
locavailable.cpp:_ZN12_GLOBAL__N_120AvailableLocalesSink3putEPKcRN6icu_7813ResourceValueEaR10UErrorCode:
  103|      1|    void put(const char *key, ResourceValue &value, UBool /*noFallback*/, UErrorCode &status) override {
  104|      1|        if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (104:13): [True: 0, False: 1]
  ------------------
  105|      1|        ResourceTable resIndexTable = value.getTable(status);
  106|      1|        if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (106:13): [True: 0, False: 1]
  ------------------
  107|      4|        for (int32_t i = 0; resIndexTable.getKeyAndValue(i, key, value); ++i) {
  ------------------
  |  Branch (107:29): [True: 3, False: 1]
  ------------------
  108|      3|            ULocAvailableType type;
  109|      3|            if (uprv_strcmp(key, "InstalledLocales") == 0) {
  ------------------
  |  |   38|      3|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      3|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (109:17): [True: 1, False: 2]
  ------------------
  110|      1|                type = ULOC_AVAILABLE_DEFAULT;
  111|      2|            } else if (uprv_strcmp(key, "AliasLocales") == 0) {
  ------------------
  |  |   38|      2|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      2|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (111:24): [True: 1, False: 1]
  ------------------
  112|      1|                type = ULOC_AVAILABLE_ONLY_LEGACY_ALIASES;
  113|      1|            } else {
  114|       |                // CLDRVersion, etc.
  115|      1|                continue;
  116|      1|            }
  117|      2|            ResourceTable availableLocalesTable = value.getTable(status);
  118|      2|            if (U_FAILURE(status)) {
  ------------------
  |  Branch (118:17): [True: 0, False: 2]
  ------------------
  119|      0|                return;
  120|      0|            }
  121|      2|            gAvailableLocaleCounts[type] = availableLocalesTable.getSize();
  122|      2|            gAvailableLocaleNames[type] = static_cast<const char**>(
  123|      2|                uprv_malloc(gAvailableLocaleCounts[type] * sizeof(const char*)));
  ------------------
  |  | 1524|      2|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|      2|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      2|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      2|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  124|      2|            if (gAvailableLocaleNames[type] == nullptr) {
  ------------------
  |  Branch (124:17): [True: 0, False: 2]
  ------------------
  125|      0|                status = U_MEMORY_ALLOCATION_ERROR;
  126|      0|                return;
  127|      0|            }
  128|    940|            for (int32_t j = 0; availableLocalesTable.getKeyAndValue(j, key, value); ++j) {
  ------------------
  |  Branch (128:33): [True: 938, False: 2]
  ------------------
  129|    938|                gAvailableLocaleNames[type][j] = key;
  130|    938|            }
  131|      2|        }
  132|      1|    }

_ZN6icu_7811LocaleBased12setLocaleIDsEPKcS2_R10UErrorCode:
   46|    420|void LocaleBased::setLocaleIDs(const char* validID, const char* actualID, UErrorCode& status) {
   47|    420|    setValidLocaleID(validID, status);
   48|    420|    setActualLocaleID(actualID,status);
   49|    420|}
_ZN6icu_7811LocaleBased11setLocaleIDEPKcRPNS_10CharStringER10UErrorCode:
   51|    840|void LocaleBased::setLocaleID(const char* id, CharString*& dest, UErrorCode& status) {
   52|    840|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (52:9): [True: 0, False: 840]
  ------------------
   53|    840|    if (id == nullptr || *id == 0) {
  ------------------
  |  Branch (53:9): [True: 0, False: 840]
  |  Branch (53:26): [True: 0, False: 840]
  ------------------
   54|      0|        delete dest;
   55|      0|        dest = nullptr;
   56|    840|    } else {
   57|    840|        if (dest == nullptr) {
  ------------------
  |  Branch (57:13): [True: 840, False: 0]
  ------------------
   58|    840|            dest = new CharString(id, status);
   59|    840|            if (dest == nullptr) {
  ------------------
  |  Branch (59:17): [True: 0, False: 840]
  ------------------
   60|      0|                status = U_MEMORY_ALLOCATION_ERROR;
   61|      0|                return;
   62|      0|            }
   63|    840|        } else {
   64|      0|            dest->copyFrom(id, status);
   65|      0|        }
   66|    840|    }
   67|    840|}

_ZN6icu_7811LocaleBasedC2ERPNS_10CharStringES3_:
  101|    420|    valid(validAlias), actual(actualAlias) {
  102|    420|}
_ZN6icu_7811LocaleBased16setValidLocaleIDEPKcR10UErrorCode:
  110|    420|inline void LocaleBased::setValidLocaleID(const char* id, UErrorCode& status) {
  111|    420|    setLocaleID(id, valid, status);
  112|    420|}
_ZN6icu_7811LocaleBased17setActualLocaleIDEPKcR10UErrorCode:
  113|    420|inline void LocaleBased::setActualLocaleID(const char* id, UErrorCode& status) {
  114|    420|    setLocaleID(id, actual, status);
  115|    420|}

_ZN6icu_7827locale_set_default_internalEPKcR10UErrorCode:
  168|      1|Locale *locale_set_default_internal(const char *id, UErrorCode& status) {
  169|       |    // Synchronize this entire function.
  170|      1|    Mutex lock(&gDefaultLocaleMutex);
  171|       |
  172|      1|    UBool canonicalize = false;
  173|       |
  174|       |    // If given a nullptr string for the locale id, grab the default
  175|       |    //   name from the system.
  176|       |    //   (Different from most other locale APIs, where a null name means use
  177|       |    //    the current ICU default locale.)
  178|      1|    if (id == nullptr) {
  ------------------
  |  Branch (178:9): [True: 1, False: 0]
  ------------------
  179|      1|        id = uprv_getDefaultLocaleID();   // This function not thread safe? TODO: verify.
  ------------------
  |  | 1505|      1|#define uprv_getDefaultLocaleID U_ICU_ENTRY_POINT_RENAME(uprv_getDefaultLocaleID)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|      1|        canonicalize = true; // always canonicalize host ID
  181|      1|    }
  182|       |
  183|      1|    CharString localeNameBuf =
  184|      1|        canonicalize ? ulocimp_canonicalize(id, status) : ulocimp_getName(id, status);
  ------------------
  |  | 1197|      1|#define ulocimp_canonicalize U_ICU_ENTRY_POINT_RENAME(ulocimp_canonicalize)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      canonicalize ? ulocimp_canonicalize(id, status) : ulocimp_getName(id, status);
  ------------------
  |  | 1204|      0|#define ulocimp_getName U_ICU_ENTRY_POINT_RENAME(ulocimp_getName)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (184:9): [True: 1, False: 0]
  ------------------
  185|       |
  186|      1|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (186:9): [True: 0, False: 1]
  ------------------
  187|      0|        return gDefaultLocale;
  188|      0|    }
  189|       |
  190|      1|    if (gDefaultLocalesHashT == nullptr) {
  ------------------
  |  Branch (190:9): [True: 1, False: 0]
  ------------------
  191|      1|        gDefaultLocalesHashT = uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &status);
  ------------------
  |  | 1030|      1|#define uhash_open U_ICU_ENTRY_POINT_RENAME(uhash_open)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      gDefaultLocalesHashT = uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &status);
  ------------------
  |  | 1011|      1|#define uhash_hashChars U_ICU_ENTRY_POINT_RENAME(uhash_hashChars)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      gDefaultLocalesHashT = uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &status);
  ------------------
  |  |  993|      1|#define uhash_compareChars U_ICU_ENTRY_POINT_RENAME(uhash_compareChars)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|      1|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (192:13): [True: 0, False: 1]
  ------------------
  193|      0|            return gDefaultLocale;
  194|      0|        }
  195|      1|        uhash_setValueDeleter(gDefaultLocalesHashT, deleteLocale);
  ------------------
  |  | 1044|      1|#define uhash_setValueDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setValueDeleter)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  196|      1|        ucln_common_registerCleanup(UCLN_COMMON_LOCALE, locale_cleanup);
  ------------------
  |  |  617|      1|#define ucln_common_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_common_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|      1|    }
  198|       |
  199|      1|    Locale* newDefault = static_cast<Locale*>(uhash_get(gDefaultLocalesHashT, localeNameBuf.data()));
  ------------------
  |  | 1007|      1|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  200|      1|    if (newDefault == nullptr) {
  ------------------
  |  Branch (200:9): [True: 1, False: 0]
  ------------------
  201|      1|        newDefault = new Locale(Locale::eBOGUS);
  202|      1|        if (newDefault == nullptr) {
  ------------------
  |  Branch (202:13): [True: 0, False: 1]
  ------------------
  203|      0|            status = U_MEMORY_ALLOCATION_ERROR;
  204|      0|            return gDefaultLocale;
  205|      0|        }
  206|      1|        newDefault->init(localeNameBuf.data(), false);
  207|      1|        uhash_put(gDefaultLocalesHashT, const_cast<char*>(newDefault->getName()), newDefault, &status);
  ------------------
  |  | 1032|      1|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  208|      1|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (208:13): [True: 0, False: 1]
  ------------------
  209|      0|            return gDefaultLocale;
  210|      0|        }
  211|      1|    }
  212|      1|    gDefaultLocale = newDefault;
  213|      1|    return gDefaultLocale;
  214|      1|}
locale_get_default_78:
  230|  3.05k|{
  231|  3.05k|    U_NAMESPACE_USE
  ------------------
  |  |  112|  3.05k|#   define U_NAMESPACE_USE using namespace U_ICU_NAMESPACE;
  ------------------
  232|  3.05k|    return Locale::getDefault().getName();
  233|  3.05k|}
_ZN6icu_786LocaleD2Ev:
  247|    840|{
  248|    840|    if ((baseName != fullName) && (baseName != fullNameBuffer)) {
  ------------------
  |  Branch (248:9): [True: 0, False: 840]
  |  Branch (248:35): [True: 0, False: 0]
  ------------------
  249|      0|        uprv_free(baseName);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|      0|    }
  251|    840|    baseName = nullptr;
  252|       |    /*if fullName is on the heap, we free it*/
  253|    840|    if (fullName != fullNameBuffer)
  ------------------
  |  Branch (253:9): [True: 0, False: 840]
  ------------------
  254|      0|    {
  255|      0|        uprv_free(fullName);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|      0|        fullName = nullptr;
  257|      0|    }
  258|    840|}
_ZN6icu_786LocaleC2Ev:
  261|  1.30k|    : UObject(), fullName(fullNameBuffer), baseName(nullptr)
  262|  1.30k|{
  263|  1.30k|    init(nullptr, false);
  264|  1.30k|}
_ZN6icu_786LocaleC2ENS0_11ELocaleTypeE:
  272|      1|    : UObject(), fullName(fullNameBuffer), baseName(nullptr)
  273|      1|{
  274|      1|    setToBogus();
  275|      1|}
_ZN6icu_786LocaleC2ERKS0_:
  396|    707|    : UObject(other), fullName(fullNameBuffer), baseName(nullptr)
  397|    707|{
  398|    707|    *this = other;
  399|    707|}
_ZN6icu_786LocaleaSERKS0_:
  406|  2.43k|Locale& Locale::operator=(const Locale& other) {
  407|  2.43k|    if (this == &other) {
  ------------------
  |  Branch (407:9): [True: 0, False: 2.43k]
  ------------------
  408|      0|        return *this;
  409|      0|    }
  410|       |
  411|  2.43k|    setToBogus();
  412|       |
  413|  2.43k|    if (other.fullName == other.fullNameBuffer) {
  ------------------
  |  Branch (413:9): [True: 2.43k, False: 0]
  ------------------
  414|  2.43k|        uprv_strcpy(fullNameBuffer, other.fullNameBuffer);
  ------------------
  |  |   36|  2.43k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  2.43k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  415|  2.43k|    } else if (other.fullName == nullptr) {
  ------------------
  |  Branch (415:16): [True: 0, False: 0]
  ------------------
  416|      0|        fullName = nullptr;
  417|      0|    } else {
  418|      0|        fullName = uprv_strdup(other.fullName);
  ------------------
  |  | 1541|      0|#define uprv_strdup U_ICU_ENTRY_POINT_RENAME(uprv_strdup)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  419|      0|        if (fullName == nullptr) return *this;
  ------------------
  |  Branch (419:13): [True: 0, False: 0]
  ------------------
  420|      0|    }
  421|       |
  422|  2.43k|    if (other.baseName == other.fullName) {
  ------------------
  |  Branch (422:9): [True: 2.43k, False: 0]
  ------------------
  423|  2.43k|        baseName = fullName;
  424|  2.43k|    } else if (other.baseName != nullptr) {
  ------------------
  |  Branch (424:16): [True: 0, False: 0]
  ------------------
  425|      0|        baseName = uprv_strdup(other.baseName);
  ------------------
  |  | 1541|      0|#define uprv_strdup U_ICU_ENTRY_POINT_RENAME(uprv_strdup)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  426|      0|        if (baseName == nullptr) return *this;
  ------------------
  |  Branch (426:13): [True: 0, False: 0]
  ------------------
  427|      0|    }
  428|       |
  429|  2.43k|    uprv_strcpy(language, other.language);
  ------------------
  |  |   36|  2.43k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  2.43k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  430|  2.43k|    uprv_strcpy(script, other.script);
  ------------------
  |  |   36|  2.43k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  2.43k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  431|  2.43k|    uprv_strcpy(country, other.country);
  ------------------
  |  |   36|  2.43k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  2.43k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  432|       |
  433|  2.43k|    variantBegin = other.variantBegin;
  434|  2.43k|    fIsBogus = other.fIsBogus;
  435|       |
  436|  2.43k|    return *this;
  437|  2.43k|}
_ZN6icu_786Locale4initEPKca:
 1832|  2.19k|{
 1833|  2.19k|    return localeID == nullptr ? *this = getDefault() : init(StringPiece{localeID}, canonicalize);
  ------------------
  |  Branch (1833:12): [True: 1.30k, False: 886]
  ------------------
 1834|  2.19k|}
_ZN6icu_786Locale4initENS_11StringPieceEa:
 1838|    886|{
 1839|    886|    fIsBogus = false;
 1840|       |    /* Free our current storage */
 1841|    886|    if ((baseName != fullName) && (baseName != fullNameBuffer)) {
  ------------------
  |  Branch (1841:9): [True: 1, False: 885]
  |  Branch (1841:35): [True: 1, False: 0]
  ------------------
 1842|      1|        uprv_free(baseName);
  ------------------
  |  | 1503|      1|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1843|      1|    }
 1844|    886|    baseName = nullptr;
 1845|    886|    if(fullName != fullNameBuffer) {
  ------------------
  |  Branch (1845:8): [True: 0, False: 886]
  ------------------
 1846|      0|        uprv_free(fullName);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1847|      0|        fullName = fullNameBuffer;
 1848|      0|    }
 1849|       |
 1850|       |    // not a loop:
 1851|       |    // just an easy way to have a common error-exit
 1852|       |    // without goto and without another function
 1853|    886|    do {
 1854|    886|        char *separator;
 1855|    886|        char *field[5] = {nullptr};
 1856|    886|        int32_t fieldLen[5] = {0};
 1857|    886|        int32_t fieldIdx;
 1858|    886|        int32_t variantField;
 1859|    886|        int32_t length;
 1860|    886|        UErrorCode err;
 1861|       |
 1862|       |        /* preset all fields to empty */
 1863|    886|        language[0] = script[0] = country[0] = 0;
 1864|       |
 1865|    886|        const auto parse = [canonicalize](std::string_view localeID,
 1866|    886|                                          char* name,
 1867|    886|                                          int32_t nameCapacity,
 1868|    886|                                          UErrorCode& status) {
 1869|    886|            return ByteSinkUtil::viaByteSinkToTerminatedChars(
 1870|    886|                name, nameCapacity,
 1871|    886|                [&](ByteSink& sink, UErrorCode& status) {
 1872|    886|                    if (canonicalize) {
 1873|    886|                        ulocimp_canonicalize(localeID, sink, status);
 1874|    886|                    } else {
 1875|    886|                        ulocimp_getName(localeID, sink, status);
 1876|    886|                    }
 1877|    886|                },
 1878|    886|                status);
 1879|    886|        };
 1880|       |
 1881|       |        // "canonicalize" the locale ID to ICU/Java format
 1882|    886|        err = U_ZERO_ERROR;
 1883|    886|        length = parse(localeID, fullName, sizeof fullNameBuffer, err);
 1884|       |
 1885|    886|        if (err == U_BUFFER_OVERFLOW_ERROR || length >= static_cast<int32_t>(sizeof(fullNameBuffer))) {
  ------------------
  |  Branch (1885:13): [True: 0, False: 886]
  |  Branch (1885:47): [True: 0, False: 886]
  ------------------
 1886|      0|            U_ASSERT(baseName == nullptr);
  ------------------
  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  ------------------
 1887|       |            /*Go to heap for the fullName if necessary*/
 1888|      0|            char* newFullName = static_cast<char*>(uprv_malloc(sizeof(char) * (length + 1)));
  ------------------
  |  | 1524|      0|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1889|      0|            if (newFullName == nullptr) {
  ------------------
  |  Branch (1889:17): [True: 0, False: 0]
  ------------------
 1890|      0|                break; // error: out of memory
 1891|      0|            }
 1892|      0|            fullName = newFullName;
 1893|      0|            err = U_ZERO_ERROR;
 1894|      0|            length = parse(localeID, fullName, length + 1, err);
 1895|      0|        }
 1896|    886|        if(U_FAILURE(err) || err == U_STRING_NOT_TERMINATED_WARNING) {
  ------------------
  |  Branch (1896:12): [True: 0, False: 886]
  |  Branch (1896:30): [True: 0, False: 886]
  ------------------
 1897|       |            /* should never occur */
 1898|      0|            break;
 1899|      0|        }
 1900|       |
 1901|    886|        variantBegin = length;
 1902|       |
 1903|       |        /* after uloc_getName/canonicalize() we know that only '_' are separators */
 1904|       |        /* But _ could also appeared in timezone such as "en@timezone=America/Los_Angeles" */
 1905|    886|        separator = field[0] = fullName;
 1906|    886|        fieldIdx = 1;
 1907|    886|        char* at = uprv_strchr(fullName, '@');
  ------------------
  |  |   40|    886|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|    886|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1908|  1.61k|        while ((separator = uprv_strchr(field[fieldIdx-1], SEP_CHAR)) != nullptr &&
  ------------------
  |  |   40|  1.61k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  1.61k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1908:16): [True: 725, False: 886]
  ------------------
 1909|  1.61k|               fieldIdx < UPRV_LENGTHOF(field)-1 &&
  ------------------
  |  |   99|    725|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (1909:16): [True: 725, False: 0]
  ------------------
 1910|  1.61k|               (at == nullptr || separator < at)) {
  ------------------
  |  Branch (1910:17): [True: 725, False: 0]
  |  Branch (1910:34): [True: 0, False: 0]
  ------------------
 1911|    725|            field[fieldIdx] = separator + 1;
 1912|    725|            fieldLen[fieldIdx - 1] = static_cast<int32_t>(separator - field[fieldIdx - 1]);
 1913|    725|            fieldIdx++;
 1914|    725|        }
 1915|       |        // variant may contain @foo or .foo POSIX cruft; remove it
 1916|    886|        separator = uprv_strchr(field[fieldIdx-1], '@');
  ------------------
  |  |   40|    886|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|    886|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1917|    886|        char* sep2 = uprv_strchr(field[fieldIdx-1], '.');
  ------------------
  |  |   40|    886|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|    886|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1918|    886|        if (separator!=nullptr || sep2!=nullptr) {
  ------------------
  |  Branch (1918:13): [True: 0, False: 886]
  |  Branch (1918:35): [True: 0, False: 886]
  ------------------
 1919|      0|            if (separator==nullptr || (sep2!=nullptr && separator > sep2)) {
  ------------------
  |  Branch (1919:17): [True: 0, False: 0]
  |  Branch (1919:40): [True: 0, False: 0]
  |  Branch (1919:57): [True: 0, False: 0]
  ------------------
 1920|      0|                separator = sep2;
 1921|      0|            }
 1922|      0|            fieldLen[fieldIdx - 1] = static_cast<int32_t>(separator - field[fieldIdx - 1]);
 1923|    886|        } else {
 1924|    886|            fieldLen[fieldIdx - 1] = length - static_cast<int32_t>(field[fieldIdx - 1] - fullName);
 1925|    886|        }
 1926|       |
 1927|    886|        if (fieldLen[0] >= static_cast<int32_t>(sizeof(language)))
  ------------------
  |  Branch (1927:13): [True: 0, False: 886]
  ------------------
 1928|      0|        {
 1929|      0|            break; // error: the language field is too long
 1930|      0|        }
 1931|       |
 1932|    886|        variantField = 1; /* Usually the 2nd one, except when a script or country is also used. */
 1933|    886|        if (fieldLen[0] > 0) {
  ------------------
  |  Branch (1933:13): [True: 886, False: 0]
  ------------------
 1934|       |            /* We have a language */
 1935|    886|            uprv_memcpy(language, fullName, fieldLen[0]);
  ------------------
  |  |   42|    886|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|    886|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|    886|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|    886|    _Pragma("clang diagnostic push") \
  |  |   45|    886|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|    886|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|    886|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|    886|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|    886|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|    886|    _Pragma("clang diagnostic pop") \
  |  |   49|    886|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|    886|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|    886|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|    886|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1936|    886|            language[fieldLen[0]] = 0;
 1937|    886|        }
 1938|    886|        if (fieldLen[1] == 4 && uprv_isASCIILetter(field[1][0]) &&
  ------------------
  |  | 1514|    113|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  123|    113|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    113|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    113|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1938:13): [True: 113, False: 773]
  |  Branch (1938:33): [True: 113, False: 0]
  ------------------
 1939|    886|                uprv_isASCIILetter(field[1][1]) && uprv_isASCIILetter(field[1][2]) &&
  ------------------
  |  | 1514|    113|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  123|    113|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    113|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    113|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                              uprv_isASCIILetter(field[1][1]) && uprv_isASCIILetter(field[1][2]) &&
  ------------------
  |  | 1514|    113|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  123|    113|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    113|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    113|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1939:17): [True: 113, False: 0]
  |  Branch (1939:52): [True: 113, False: 0]
  ------------------
 1940|    886|                uprv_isASCIILetter(field[1][3])) {
  ------------------
  |  | 1514|    113|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  123|    113|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    113|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    113|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1940:17): [True: 113, False: 0]
  ------------------
 1941|       |            /* We have at least a script */
 1942|    113|            uprv_memcpy(script, field[1], fieldLen[1]);
  ------------------
  |  |   42|    113|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|    113|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|    113|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|    113|    _Pragma("clang diagnostic push") \
  |  |   45|    113|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|    113|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|    113|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|    113|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|    113|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|    113|    _Pragma("clang diagnostic pop") \
  |  |   49|    113|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|    113|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|    113|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|    113|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1943|    113|            script[fieldLen[1]] = 0;
 1944|    113|            variantField++;
 1945|    113|        }
 1946|       |
 1947|    886|        if (fieldLen[variantField] == 2 || fieldLen[variantField] == 3) {
  ------------------
  |  Branch (1947:13): [True: 603, False: 283]
  |  Branch (1947:44): [True: 7, False: 276]
  ------------------
 1948|       |            /* We have a country */
 1949|    610|            uprv_memcpy(country, field[variantField], fieldLen[variantField]);
  ------------------
  |  |   42|    610|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|    610|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|    610|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|    610|    _Pragma("clang diagnostic push") \
  |  |   45|    610|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|    610|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|    610|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|    610|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|    610|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|    610|    _Pragma("clang diagnostic pop") \
  |  |   49|    610|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|    610|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|    610|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|    610|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1950|    610|            country[fieldLen[variantField]] = 0;
 1951|    610|            variantField++;
 1952|    610|        } else if (fieldLen[variantField] == 0) {
  ------------------
  |  Branch (1952:20): [True: 276, False: 0]
  ------------------
 1953|    276|            variantField++; /* script or country empty but variant in next field (i.e. en__POSIX) */
 1954|    276|        }
 1955|       |
 1956|    886|        if (fieldLen[variantField] > 0) {
  ------------------
  |  Branch (1956:13): [True: 2, False: 884]
  ------------------
 1957|       |            /* We have a variant */
 1958|      2|            variantBegin = static_cast<int32_t>(field[variantField] - fullName);
 1959|      2|        }
 1960|       |
 1961|    886|        err = U_ZERO_ERROR;
 1962|    886|        initBaseName(err);
 1963|    886|        if (U_FAILURE(err)) {
  ------------------
  |  Branch (1963:13): [True: 0, False: 886]
  ------------------
 1964|      0|            break;
 1965|      0|        }
 1966|       |
 1967|    886|        if (canonicalize) {
  ------------------
  |  Branch (1967:13): [True: 885, False: 1]
  ------------------
 1968|    885|            if (!isKnownCanonicalizedLocale(fullName, err)) {
  ------------------
  |  Branch (1968:17): [True: 717, False: 168]
  ------------------
 1969|    717|                CharString replaced;
 1970|       |                // Not sure it is already canonicalized
 1971|    717|                if (canonicalizeLocale(*this, replaced, err)) {
  ------------------
  |  Branch (1971:21): [True: 0, False: 717]
  ------------------
 1972|      0|                    U_ASSERT(U_SUCCESS(err));
  ------------------
  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  ------------------
 1973|       |                    // If need replacement, call init again.
 1974|      0|                    init(replaced.data(), false);
 1975|      0|                }
 1976|    717|                if (U_FAILURE(err)) {
  ------------------
  |  Branch (1976:21): [True: 0, False: 717]
  ------------------
 1977|      0|                    break;
 1978|      0|                }
 1979|    717|            }
 1980|    885|        }   // if (canonicalize) {
 1981|       |
 1982|       |        // successful end of init()
 1983|    886|        return *this;
 1984|    886|    } while(0); /*loop doesn't iterate*/
  ------------------
  |  Branch (1984:13): [Folded - Ignored]
  ------------------
 1985|       |
 1986|       |    // when an error occurs, then set this object to "bogus" (there is no UErrorCode here)
 1987|      0|    setToBogus();
 1988|       |
 1989|      0|    return *this;
 1990|    886|}
_ZN6icu_786Locale12initBaseNameER10UErrorCode:
 1999|    886|Locale::initBaseName(UErrorCode &status) {
 2000|    886|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (2000:9): [True: 0, False: 886]
  ------------------
 2001|      0|        return;
 2002|      0|    }
 2003|    886|    U_ASSERT(baseName==nullptr || baseName==fullName);
  ------------------
  |  |   35|    886|#   define U_ASSERT(exp) (void)0
  ------------------
 2004|    886|    const char *atPtr = uprv_strchr(fullName, '@');
  ------------------
  |  |   40|    886|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|    886|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2005|    886|    const char *eqPtr = uprv_strchr(fullName, '=');
  ------------------
  |  |   40|    886|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|    886|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2006|    886|    if (atPtr && eqPtr && atPtr < eqPtr) {
  ------------------
  |  Branch (2006:9): [True: 0, False: 886]
  |  Branch (2006:18): [True: 0, False: 0]
  |  Branch (2006:27): [True: 0, False: 0]
  ------------------
 2007|       |        // Key words exist.
 2008|      0|        int32_t baseNameLength = static_cast<int32_t>(atPtr - fullName);
 2009|      0|        char* newBaseName = static_cast<char*>(uprv_malloc(baseNameLength + 1));
  ------------------
  |  | 1524|      0|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2010|      0|        if (newBaseName == nullptr) {
  ------------------
  |  Branch (2010:13): [True: 0, False: 0]
  ------------------
 2011|      0|            status = U_MEMORY_ALLOCATION_ERROR;
 2012|      0|            return;
 2013|      0|        }
 2014|      0|        baseName = newBaseName;
 2015|      0|        uprv_strncpy(baseName, fullName, baseNameLength);
  ------------------
  |  |   43|      0|#define uprv_strncpy(dst, src, size) U_STANDARD_CPP_NAMESPACE strncpy(dst, src, size)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2016|      0|        baseName[baseNameLength] = 0;
 2017|       |
 2018|       |        // The original computation of variantBegin leaves it equal to the length
 2019|       |        // of fullName if there is no variant.  It should instead be
 2020|       |        // the length of the baseName.
 2021|      0|        if (variantBegin > baseNameLength) {
  ------------------
  |  Branch (2021:13): [True: 0, False: 0]
  ------------------
 2022|      0|            variantBegin = baseNameLength;
 2023|      0|        }
 2024|    886|    } else {
 2025|    886|        baseName = fullName;
 2026|    886|    }
 2027|    886|}
_ZN6icu_786Locale10setToBogusEv:
 2037|  2.43k|Locale::setToBogus() {
 2038|       |    /* Free our current storage */
 2039|  2.43k|    if((baseName != fullName) && (baseName != fullNameBuffer)) {
  ------------------
  |  Branch (2039:8): [True: 2.01k, False: 420]
  |  Branch (2039:34): [True: 2.01k, False: 0]
  ------------------
 2040|  2.01k|        uprv_free(baseName);
  ------------------
  |  | 1503|  2.01k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  2.01k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.01k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.01k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2041|  2.01k|    }
 2042|  2.43k|    baseName = nullptr;
 2043|  2.43k|    if(fullName != fullNameBuffer) {
  ------------------
  |  Branch (2043:8): [True: 0, False: 2.43k]
  ------------------
 2044|      0|        uprv_free(fullName);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2045|      0|        fullName = fullNameBuffer;
 2046|      0|    }
 2047|  2.43k|    *fullNameBuffer = 0;
 2048|  2.43k|    *language = 0;
 2049|  2.43k|    *script = 0;
 2050|  2.43k|    *country = 0;
 2051|  2.43k|    fIsBogus = true;
 2052|  2.43k|    variantBegin = 0;
 2053|  2.43k|}
_ZN6icu_786Locale10getDefaultEv:
 2057|  4.35k|{
 2058|  4.35k|    {
 2059|  4.35k|        Mutex lock(&gDefaultLocaleMutex);
 2060|  4.35k|        if (gDefaultLocale != nullptr) {
  ------------------
  |  Branch (2060:13): [True: 4.35k, False: 1]
  ------------------
 2061|  4.35k|            return *gDefaultLocale;
 2062|  4.35k|        }
 2063|  4.35k|    }
 2064|      1|    UErrorCode status = U_ZERO_ERROR;
 2065|      1|    return *locale_set_default_internal(nullptr, status);
 2066|  4.35k|}
_ZN6icu_786Locale14setFromPOSIXIDEPKc:
 2267|    885|{
 2268|    885|    init(posixID, true);
 2269|    885|}
_ZNK6icu_786Locale15getKeywordValueEPKcPciR10UErrorCode:
 2606|    420|{
 2607|    420|    return uloc_getKeywordValue(fullName, keywordName, buffer, bufLen, &status);
  ------------------
  |  | 1130|    420|#define uloc_getKeywordValue U_ICU_ENTRY_POINT_RENAME(uloc_getKeywordValue)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2608|    420|}
_ZNK6icu_786Locale11getBaseNameEv:
 2748|    420|Locale::getBaseName() const {
 2749|    420|    return baseName;
 2750|    420|}
locid.cpp:_ZN6icu_7812_GLOBAL__N_118canonicalizeLocaleERKNS_6LocaleERNS_10CharStringER10UErrorCode:
 1776|    717|{
 1777|    717|    if (U_FAILURE(status)) { return false; }
  ------------------
  |  Branch (1777:9): [True: 0, False: 717]
  ------------------
 1778|    717|    AliasReplacer replacer(status);
 1779|    717|    return replacer.replace(locale, out, status);
 1780|    717|}
locid.cpp:_ZN6icu_7812_GLOBAL__N_113AliasReplacerC2ER10UErrorCode:
 1062|    717|            language(nullptr), script(nullptr), region(nullptr),
 1063|    717|            extensions(nullptr),
 1064|       |            // store value in variants only once
 1065|    717|            variants(nullptr,
 1066|    717|                     ([](UElement e1, UElement e2) -> UBool {
 1067|    717|                       return 0==uprv_strcmp((const char*)e1.pointer,
 1068|    717|                                             (const char*)e2.pointer);}),
 1069|    717|                     status),
 1070|    717|            data(nullptr) {
 1071|    717|    }
locid.cpp:_ZN6icu_7812_GLOBAL__N_113AliasReplacer7replaceERKNS_6LocaleERNS_10CharStringER10UErrorCode:
 1627|    717|{
 1628|    717|    data = AliasData::singleton(status);
 1629|    717|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1629:9): [True: 0, False: 717]
  ------------------
 1630|      0|        return false;
 1631|      0|    }
 1632|    717|    U_ASSERT(data != nullptr);
  ------------------
  |  |   35|    717|#   define U_ASSERT(exp) (void)0
  ------------------
 1633|    717|    out.clear();
 1634|    717|    language = locale.getLanguage();
 1635|    717|    if (!notEmpty(language)) {
  ------------------
  |  Branch (1635:9): [True: 0, False: 717]
  ------------------
 1636|      0|        language = nullptr;
 1637|      0|    }
 1638|    717|    script = locale.getScript();
 1639|    717|    if (!notEmpty(script)) {
  ------------------
  |  Branch (1639:9): [True: 612, False: 105]
  ------------------
 1640|    612|        script = nullptr;
 1641|    612|    }
 1642|    717|    region = locale.getCountry();
 1643|    717|    if (!notEmpty(region)) {
  ------------------
  |  Branch (1643:9): [True: 189, False: 528]
  ------------------
 1644|    189|        region = nullptr;
 1645|    189|    }
 1646|    717|    const char* variantsStr = locale.getVariant();
 1647|    717|    CharString variantsBuff(variantsStr, -1, status);
 1648|    717|    if (!variantsBuff.isEmpty()) {
  ------------------
  |  Branch (1648:9): [True: 1, False: 716]
  ------------------
 1649|      1|        if (U_FAILURE(status)) { return false; }
  ------------------
  |  Branch (1649:13): [True: 0, False: 1]
  ------------------
 1650|      1|        char* start = variantsBuff.data();
 1651|      1|        T_CString_toLowerCase(start);
  ------------------
  |  |   69|      1|#define T_CString_toLowerCase U_ICU_ENTRY_POINT_RENAME(T_CString_toLowerCase)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1652|      1|        char* end;
 1653|      1|        while ((end = uprv_strchr(start, SEP_CHAR)) != nullptr &&
  ------------------
  |  |   40|      1|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1653:16): [True: 0, False: 1]
  ------------------
 1654|      1|               U_SUCCESS(status)) {
  ------------------
  |  Branch (1654:16): [True: 0, False: 0]
  ------------------
 1655|      0|            *end = NULL_CHAR;  // null terminate inside variantsBuff
  ------------------
  |  |  244|      0|#define NULL_CHAR '\0'
  ------------------
 1656|       |            // do not add "" or duplicate data to variants
 1657|      0|            if (*start && !variants.contains(start)) {
  ------------------
  |  Branch (1657:17): [True: 0, False: 0]
  |  Branch (1657:27): [True: 0, False: 0]
  ------------------
 1658|      0|                variants.addElement(start, status);
 1659|      0|            }
 1660|      0|            start = end + 1;
 1661|      0|        }
 1662|       |        // do not add "" or duplicate data to variants
 1663|      1|        if (*start && !variants.contains(start)) {
  ------------------
  |  Branch (1663:13): [True: 1, False: 0]
  |  Branch (1663:23): [True: 1, False: 0]
  ------------------
 1664|      1|            variants.addElement(start, status);
 1665|      1|        }
 1666|      1|    }
 1667|    717|    if (U_FAILURE(status)) { return false; }
  ------------------
  |  Branch (1667:9): [True: 0, False: 717]
  ------------------
 1668|       |
 1669|       |    // Sort the variants
 1670|    717|    variants.sort([](UElement e1, UElement e2) -> int32_t {
 1671|    717|        return uprv_strcmp((const char*)e1.pointer, (const char*)e2.pointer);
 1672|    717|    }, status);
 1673|       |
 1674|       |    // A changed count to assert when loop too many times.
 1675|    717|    int changed = 0;
 1676|       |    // A UVector to to hold CharString allocated by the replace* method
 1677|       |    // and freed when out of scope from his function.
 1678|    717|    UVector stringsToBeFreed([](void *obj) { delete static_cast<CharString*>(obj); },
 1679|    717|                             nullptr, 10, status);
 1680|    717|    while (U_SUCCESS(status)) {
  ------------------
  |  Branch (1680:12): [True: 717, False: 0]
  ------------------
 1681|       |        // Something wrong with the data cause looping here more than 10 times
 1682|       |        // already.
 1683|    717|        U_ASSERT(changed < 5);
  ------------------
  |  |   35|    717|#   define U_ASSERT(exp) (void)0
  ------------------
 1684|       |        // From observation of key in data/misc/metadata.txt
 1685|       |        // we know currently we only need to search in the following combination
 1686|       |        // of fields for type in languageAlias:
 1687|       |        // * lang_region_variant
 1688|       |        // * lang_region
 1689|       |        // * lang_variant
 1690|       |        // * lang
 1691|       |        // * und_variant
 1692|       |        // This assumption is ensured by the U_ASSERT in readLanguageAlias
 1693|       |        //
 1694|       |        //                      lang  REGION variant
 1695|    717|        if (    replaceLanguage(true, true,  true,  stringsToBeFreed, status) ||
  ------------------
  |  Branch (1695:17): [True: 0, False: 717]
  ------------------
 1696|    717|                replaceLanguage(true, true,  false, stringsToBeFreed, status) ||
  ------------------
  |  Branch (1696:17): [True: 0, False: 717]
  ------------------
 1697|    717|                replaceLanguage(true, false, true,  stringsToBeFreed, status) ||
  ------------------
  |  Branch (1697:17): [True: 0, False: 717]
  ------------------
 1698|    717|                replaceLanguage(true, false, false, stringsToBeFreed, status) ||
  ------------------
  |  Branch (1698:17): [True: 0, False: 717]
  ------------------
 1699|    717|                replaceLanguage(false,false, true,  stringsToBeFreed, status) ||
  ------------------
  |  Branch (1699:17): [True: 0, False: 717]
  ------------------
 1700|    717|                replaceTerritory(stringsToBeFreed, status) ||
  ------------------
  |  Branch (1700:17): [True: 0, False: 717]
  ------------------
 1701|    717|                replaceScript(status) ||
  ------------------
  |  Branch (1701:17): [True: 0, False: 717]
  ------------------
 1702|    717|                replaceVariant(status)) {
  ------------------
  |  Branch (1702:17): [True: 0, False: 717]
  ------------------
 1703|       |            // Some values in data is changed, try to match from the beginning
 1704|       |            // again.
 1705|      0|            changed++;
 1706|      0|            continue;
 1707|      0|        }
 1708|       |        // Nothing changed. Break out.
 1709|    717|        break;
 1710|    717|    }  // while(1)
 1711|       |
 1712|    717|    if (U_FAILURE(status)) { return false; }
  ------------------
  |  Branch (1712:9): [True: 0, False: 717]
  ------------------
 1713|       |    // Nothing changed and we know the order of the variants are not change
 1714|       |    // because we have no variant or only one.
 1715|    717|    const char* extensionsStr = locale_getKeywordsStart(locale.getName());
  ------------------
  |  |  138|    717|#define locale_getKeywordsStart U_ICU_ENTRY_POINT_RENAME(locale_getKeywordsStart)
  |  |  ------------------
  |  |  |  |  123|    717|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    717|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    717|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1716|    717|    if (changed == 0 && variants.size() <= 1 && extensionsStr == nullptr) {
  ------------------
  |  Branch (1716:9): [True: 717, False: 0]
  |  Branch (1716:25): [True: 717, False: 0]
  |  Branch (1716:49): [True: 717, False: 0]
  ------------------
 1717|    717|        return false;
 1718|    717|    }
 1719|      0|    outputToString(out, status);
 1720|      0|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1720:9): [True: 0, False: 0]
  ------------------
 1721|      0|        return false;
 1722|      0|    }
 1723|      0|    if (extensionsStr != nullptr) {
  ------------------
  |  Branch (1723:9): [True: 0, False: 0]
  ------------------
 1724|      0|        changed = 0;
 1725|      0|        Locale temp(locale);
 1726|      0|        LocalPointer<icu::StringEnumeration> iter(locale.createKeywords(status));
 1727|      0|        if (U_SUCCESS(status) && !iter.isNull()) {
  ------------------
  |  Branch (1727:13): [True: 0, False: 0]
  |  Branch (1727:34): [True: 0, False: 0]
  ------------------
 1728|      0|            const char* key;
 1729|      0|            while ((key = iter->next(nullptr, status)) != nullptr) {
  ------------------
  |  Branch (1729:20): [True: 0, False: 0]
  ------------------
 1730|      0|                if (uprv_strcmp("sd", key) == 0 || uprv_strcmp("rg", key) == 0 ||
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
                              if (uprv_strcmp("sd", key) == 0 || uprv_strcmp("rg", key) == 0 ||
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1730:21): [True: 0, False: 0]
  |  Branch (1730:52): [True: 0, False: 0]
  ------------------
 1731|      0|                        uprv_strcmp("t", key) == 0) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1731:25): [True: 0, False: 0]
  ------------------
 1732|      0|                    auto value = locale.getKeywordValue<CharString>(key, status);
 1733|      0|                    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1733:25): [True: 0, False: 0]
  ------------------
 1734|      0|                        status = U_ZERO_ERROR;
 1735|      0|                        continue;
 1736|      0|                    }
 1737|      0|                    CharString replacement;
 1738|      0|                    if (uprv_strlen(key) == 2) {
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1738:25): [True: 0, False: 0]
  ------------------
 1739|      0|                        if (replaceSubdivision(value.toStringPiece(), replacement, status)) {
  ------------------
  |  Branch (1739:29): [True: 0, False: 0]
  ------------------
 1740|      0|                            changed++;
 1741|      0|                            temp.setKeywordValue(key, replacement.data(), status);
 1742|      0|                        }
 1743|      0|                    } else {
 1744|      0|                        U_ASSERT(uprv_strcmp(key, "t") == 0);
  ------------------
  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  ------------------
 1745|      0|                        if (replaceTransformedExtensions(value, replacement, status)) {
  ------------------
  |  Branch (1745:29): [True: 0, False: 0]
  ------------------
 1746|      0|                            changed++;
 1747|      0|                            temp.setKeywordValue(key, replacement.data(), status);
 1748|      0|                        }
 1749|      0|                    }
 1750|      0|                    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1750:25): [True: 0, False: 0]
  ------------------
 1751|      0|                        return false;
 1752|      0|                    }
 1753|      0|                }
 1754|      0|            }
 1755|      0|        }
 1756|      0|        if (changed != 0) {
  ------------------
  |  Branch (1756:13): [True: 0, False: 0]
  ------------------
 1757|      0|            extensionsStr = locale_getKeywordsStart(temp.getName());
  ------------------
  |  |  138|      0|#define locale_getKeywordsStart U_ICU_ENTRY_POINT_RENAME(locale_getKeywordsStart)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1758|      0|        }
 1759|      0|        out.append(extensionsStr, status);
 1760|      0|    }
 1761|      0|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1761:9): [True: 0, False: 0]
  ------------------
 1762|      0|        return false;
 1763|      0|    }
 1764|       |    // If the tag is not changed, return.
 1765|      0|    if (uprv_strcmp(out.data(), locale.getName()) == 0) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1765:9): [True: 0, False: 0]
  ------------------
 1766|      0|        out.clear();
 1767|      0|        return false;
 1768|      0|    }
 1769|      0|    return true;
 1770|      0|}
locid.cpp:_ZN6icu_7812_GLOBAL__N_19AliasData9singletonER10UErrorCode:
  623|    717|    static const AliasData* singleton(UErrorCode& status) {
  624|    717|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (624:13): [True: 0, False: 717]
  ------------------
  625|       |            // Do not get into loadData if the status already has error.
  626|      0|            return nullptr;
  627|      0|        }
  628|    717|        umtx_initOnce(AliasData::gInitOnce, &AliasData::loadData, status);
  629|    717|        return gSingleton;
  630|    717|    }
locid.cpp:_ZN6icu_7812_GLOBAL__N_19AliasData8loadDataER10UErrorCode:
  896|      1|{
  897|       |#ifdef LOCALE_CANONICALIZATION_DEBUG
  898|       |    UDate start = uprv_getRawUTCtime();
  899|       |#endif  // LOCALE_CANONICALIZATION_DEBUG
  900|      1|    ucln_common_registerCleanup(UCLN_COMMON_LOCALE_ALIAS, cleanup);
  ------------------
  |  |  617|      1|#define ucln_common_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_common_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  901|      1|    AliasDataBuilder builder;
  902|      1|    gSingleton = builder.build(status);
  903|       |#ifdef LOCALE_CANONICALIZATION_DEBUG
  904|       |    UDate end = uprv_getRawUTCtime();
  905|       |    printf("AliasData::loadData took total %f ms\n", end - start);
  906|       |#endif  // LOCALE_CANONICALIZATION_DEBUG
  907|      1|}
locid.cpp:_ZN6icu_7812_GLOBAL__N_116AliasDataBuilderC2Ev:
  544|      1|    AliasDataBuilder() {
  545|      1|    }
locid.cpp:_ZN6icu_7812_GLOBAL__N_116AliasDataBuilder5buildER10UErrorCode:
  913|      1|AliasDataBuilder::build(UErrorCode &status) {
  914|      1|    if (U_FAILURE(status)) { return nullptr; }
  ------------------
  |  Branch (914:9): [True: 0, False: 1]
  ------------------
  915|       |
  916|      1|    LocalUResourceBundlePointer metadata(
  917|      1|        ures_openDirect(nullptr, "metadata", &status));
  ------------------
  |  | 1693|      1|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  918|      1|    LocalUResourceBundlePointer metadataAlias(
  919|      1|        ures_getByKey(metadata.getAlias(), "alias", nullptr, &status));
  ------------------
  |  | 1661|      1|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  920|      1|    LocalUResourceBundlePointer languageAlias(
  921|      1|        ures_getByKey(metadataAlias.getAlias(), "language", nullptr, &status));
  ------------------
  |  | 1661|      1|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  922|      1|    LocalUResourceBundlePointer scriptAlias(
  923|      1|        ures_getByKey(metadataAlias.getAlias(), "script", nullptr, &status));
  ------------------
  |  | 1661|      1|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  924|      1|    LocalUResourceBundlePointer territoryAlias(
  925|      1|        ures_getByKey(metadataAlias.getAlias(), "territory", nullptr, &status));
  ------------------
  |  | 1661|      1|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  926|      1|    LocalUResourceBundlePointer variantAlias(
  927|      1|        ures_getByKey(metadataAlias.getAlias(), "variant", nullptr, &status));
  ------------------
  |  | 1661|      1|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  928|      1|    LocalUResourceBundlePointer subdivisionAlias(
  929|      1|        ures_getByKey(metadataAlias.getAlias(), "subdivision", nullptr, &status));
  ------------------
  |  | 1661|      1|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  930|       |
  931|      1|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (931:9): [True: 0, False: 1]
  ------------------
  932|      0|        return nullptr;
  933|      0|    }
  934|      1|    int32_t languagesLength = 0, scriptLength = 0, territoryLength = 0,
  935|      1|            variantLength = 0, subdivisionLength = 0;
  936|       |
  937|       |    // Read the languageAlias into languageTypes, languageReplacementIndexes
  938|       |    // and strings
  939|      1|    UniqueCharStrings strings(status);
  940|      1|    LocalMemory<const char*> languageTypes;
  941|      1|    LocalMemory<int32_t> languageReplacementIndexes;
  942|      1|    readLanguageAlias(languageAlias.getAlias(),
  943|      1|                      &strings,
  944|      1|                      languageTypes,
  945|      1|                      languageReplacementIndexes,
  946|      1|                      languagesLength,
  947|      1|                      status);
  948|       |
  949|       |    // Read the scriptAlias into scriptTypes, scriptReplacementIndexes
  950|       |    // and strings
  951|      1|    LocalMemory<const char*> scriptTypes;
  952|      1|    LocalMemory<int32_t> scriptReplacementIndexes;
  953|      1|    readScriptAlias(scriptAlias.getAlias(),
  954|      1|                    &strings,
  955|      1|                    scriptTypes,
  956|      1|                    scriptReplacementIndexes,
  957|      1|                    scriptLength,
  958|      1|                    status);
  959|       |
  960|       |    // Read the territoryAlias into territoryTypes, territoryReplacementIndexes
  961|       |    // and strings
  962|      1|    LocalMemory<const char*> territoryTypes;
  963|      1|    LocalMemory<int32_t> territoryReplacementIndexes;
  964|      1|    readTerritoryAlias(territoryAlias.getAlias(),
  965|      1|                       &strings,
  966|      1|                       territoryTypes,
  967|      1|                       territoryReplacementIndexes,
  968|      1|                       territoryLength, status);
  969|       |
  970|       |    // Read the variantAlias into variantTypes, variantReplacementIndexes
  971|       |    // and strings
  972|      1|    LocalMemory<const char*> variantTypes;
  973|      1|    LocalMemory<int32_t> variantReplacementIndexes;
  974|      1|    readVariantAlias(variantAlias.getAlias(),
  975|      1|                     &strings,
  976|      1|                     variantTypes,
  977|      1|                     variantReplacementIndexes,
  978|      1|                     variantLength, status);
  979|       |
  980|       |    // Read the subdivisionAlias into subdivisionTypes, subdivisionReplacementIndexes
  981|       |    // and strings
  982|      1|    LocalMemory<const char*> subdivisionTypes;
  983|      1|    LocalMemory<int32_t> subdivisionReplacementIndexes;
  984|      1|    readSubdivisionAlias(subdivisionAlias.getAlias(),
  985|      1|                         &strings,
  986|      1|                         subdivisionTypes,
  987|      1|                         subdivisionReplacementIndexes,
  988|      1|                         subdivisionLength, status);
  989|       |
  990|      1|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (990:9): [True: 0, False: 1]
  ------------------
  991|      0|        return nullptr;
  992|      0|    }
  993|       |
  994|       |    // We can only use strings after freeze it.
  995|      1|    strings.freeze();
  996|       |
  997|       |    // Build the languageMap from languageTypes & languageReplacementIndexes
  998|      1|    CharStringMap languageMap(490, status);
  999|    501|    for (int32_t i = 0; U_SUCCESS(status) && i < languagesLength; i++) {
  ------------------
  |  Branch (999:25): [True: 501, False: 0]
  |  Branch (999:46): [True: 500, False: 1]
  ------------------
 1000|    500|        languageMap.put(languageTypes[i],
 1001|    500|                        strings.get(languageReplacementIndexes[i]),
 1002|    500|                        status);
 1003|    500|    }
 1004|       |
 1005|       |    // Build the scriptMap from scriptTypes & scriptReplacementIndexes
 1006|      1|    CharStringMap scriptMap(1, status);
 1007|      2|    for (int32_t i = 0; U_SUCCESS(status) && i < scriptLength; i++) {
  ------------------
  |  Branch (1007:25): [True: 2, False: 0]
  |  Branch (1007:46): [True: 1, False: 1]
  ------------------
 1008|      1|        scriptMap.put(scriptTypes[i],
 1009|      1|                      strings.get(scriptReplacementIndexes[i]),
 1010|      1|                      status);
 1011|      1|    }
 1012|       |
 1013|       |    // Build the territoryMap from territoryTypes & territoryReplacementIndexes
 1014|      1|    CharStringMap territoryMap(650, status);
 1015|    641|    for (int32_t i = 0; U_SUCCESS(status) && i < territoryLength; i++) {
  ------------------
  |  Branch (1015:25): [True: 641, False: 0]
  |  Branch (1015:46): [True: 640, False: 1]
  ------------------
 1016|    640|        territoryMap.put(territoryTypes[i],
 1017|    640|                         strings.get(territoryReplacementIndexes[i]),
 1018|    640|                         status);
 1019|    640|    }
 1020|       |
 1021|       |    // Build the variantMap from variantTypes & variantReplacementIndexes.
 1022|      1|    CharStringMap variantMap(2, status);
 1023|      3|    for (int32_t i = 0; U_SUCCESS(status) && i < variantLength; i++) {
  ------------------
  |  Branch (1023:25): [True: 3, False: 0]
  |  Branch (1023:46): [True: 2, False: 1]
  ------------------
 1024|      2|        variantMap.put(variantTypes[i],
 1025|      2|                       strings.get(variantReplacementIndexes[i]),
 1026|      2|                       status);
 1027|      2|    }
 1028|       |
 1029|       |    // Build the subdivisionMap from subdivisionTypes & subdivisionReplacementIndexes.
 1030|      1|    CharStringMap subdivisionMap(2, status);
 1031|    148|    for (int32_t i = 0; U_SUCCESS(status) && i < subdivisionLength; i++) {
  ------------------
  |  Branch (1031:25): [True: 148, False: 0]
  |  Branch (1031:46): [True: 147, False: 1]
  ------------------
 1032|    147|        subdivisionMap.put(subdivisionTypes[i],
 1033|    147|                       strings.get(subdivisionReplacementIndexes[i]),
 1034|    147|                       status);
 1035|    147|    }
 1036|       |
 1037|      1|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1037:9): [True: 0, False: 1]
  ------------------
 1038|      0|        return nullptr;
 1039|      0|    }
 1040|       |
 1041|       |    // copy hashtables
 1042|      1|    auto *data = new AliasData(
 1043|      1|        std::move(languageMap),
 1044|      1|        std::move(scriptMap),
 1045|      1|        std::move(territoryMap),
 1046|      1|        std::move(variantMap),
 1047|      1|        std::move(subdivisionMap),
 1048|      1|        strings.orphanCharStrings());
 1049|       |
 1050|      1|    if (data == nullptr) {
  ------------------
  |  Branch (1050:9): [True: 0, False: 1]
  ------------------
 1051|      0|        status = U_MEMORY_ALLOCATION_ERROR;
 1052|      0|    }
 1053|      1|    return data;
 1054|      1|}
locid.cpp:_ZN6icu_7812_GLOBAL__N_116AliasDataBuilder17readLanguageAliasEP15UResourceBundlePNS_17UniqueCharStringsERNS_11LocalMemoryIPKcEERNS6_IiEERiR10UErrorCode:
  740|      1|{
  741|      1|    return readAlias(
  742|      1|        alias, strings, types, replacementIndexes, length,
  743|       |#if U_DEBUG
  744|       |        [](const char* type) {
  745|       |            // Assert the aliasFrom only contains the following possibilities
  746|       |            // language_REGION_variant
  747|       |            // language_REGION
  748|       |            // language_variant
  749|       |            // language
  750|       |            // und_variant
  751|       |            Locale test(type);
  752|       |            // Assert no script in aliasFrom
  753|       |            U_ASSERT(test.getScript()[0] == '\0');
  754|       |            // Assert when language is und, no REGION in aliasFrom.
  755|       |            U_ASSERT(test.getLanguage()[0] != '\0' || test.getCountry()[0] == '\0');
  756|       |        },
  757|       |#else
  758|      1|        [](const char*) {},
  759|      1|#endif
  760|      1|        [](const UChar*) {}, status);
  761|      1|}
locid.cpp:_ZN6icu_7812_GLOBAL__N_116AliasDataBuilder9readAliasEP15UResourceBundlePNS_17UniqueCharStringsERNS_11LocalMemoryIPKcEERNS6_IiEERiPFvS8_EPFvPKDsER10UErrorCode:
  695|      5|        UErrorCode &status) {
  696|      5|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (696:9): [True: 0, False: 5]
  ------------------
  697|      0|        return;
  698|      0|    }
  699|      5|    length = ures_getSize(alias);
  ------------------
  |  | 1674|      5|#define ures_getSize U_ICU_ENTRY_POINT_RENAME(ures_getSize)
  |  |  ------------------
  |  |  |  |  123|      5|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      5|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      5|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  700|      5|    const char** rawTypes = types.allocateInsteadAndCopy(length);
  701|      5|    if (rawTypes == nullptr) {
  ------------------
  |  Branch (701:9): [True: 0, False: 5]
  ------------------
  702|      0|        status = U_MEMORY_ALLOCATION_ERROR;
  703|      0|        return;
  704|      0|    }
  705|      5|    int32_t* rawIndexes = replacementIndexes.allocateInsteadAndCopy(length);
  706|      5|    if (rawIndexes == nullptr) {
  ------------------
  |  Branch (706:9): [True: 0, False: 5]
  ------------------
  707|      0|        status = U_MEMORY_ALLOCATION_ERROR;
  708|      0|        return;
  709|      0|    }
  710|  1.29k|    for (int i = 0; U_SUCCESS(status) && ures_hasNext(alias); i++) {
  ------------------
  |  | 1689|  1.29k|#define ures_hasNext U_ICU_ENTRY_POINT_RENAME(ures_hasNext)
  |  |  ------------------
  |  |  |  |  123|  1.29k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.29k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.29k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (710:21): [True: 1.29k, False: 0]
  |  Branch (710:42): [True: 1.29k, False: 5]
  ------------------
  711|  1.29k|        LocalUResourceBundlePointer res(
  712|  1.29k|            ures_getNextResource(alias, nullptr, &status));
  ------------------
  |  | 1672|  1.29k|#define ures_getNextResource U_ICU_ENTRY_POINT_RENAME(ures_getNextResource)
  |  |  ------------------
  |  |  |  |  123|  1.29k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.29k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.29k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  713|  1.29k|        const char* aliasFrom = ures_getKey(res.getAlias());
  ------------------
  |  | 1666|  1.29k|#define ures_getKey U_ICU_ENTRY_POINT_RENAME(ures_getKey)
  |  |  ------------------
  |  |  |  |  123|  1.29k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.29k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.29k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  714|  1.29k|        const UChar* aliasTo =
  715|  1.29k|            ures_getStringByKey(res.getAlias(), "replacement", nullptr, &status);
  ------------------
  |  | 1677|  1.29k|#define ures_getStringByKey U_ICU_ENTRY_POINT_RENAME(ures_getStringByKey)
  |  |  ------------------
  |  |  |  |  123|  1.29k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.29k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.29k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  716|  1.29k|        if (U_FAILURE(status)) return;
  ------------------
  |  Branch (716:13): [True: 0, False: 1.29k]
  ------------------
  717|       |
  718|  1.29k|        checkType(aliasFrom);
  719|  1.29k|        checkReplacement(aliasTo);
  720|       |
  721|  1.29k|        rawTypes[i] = aliasFrom;
  722|  1.29k|        rawIndexes[i] = strings->add(aliasTo, status);
  723|  1.29k|    }
  724|      5|}
locid.cpp:_ZZN6icu_7812_GLOBAL__N_116AliasDataBuilder17readLanguageAliasEP15UResourceBundlePNS_17UniqueCharStringsERNS_11LocalMemoryIPKcEERNS6_IiEERiR10UErrorCodeENK3$_0clES8_:
  758|    500|        [](const char*) {},
locid.cpp:_ZZN6icu_7812_GLOBAL__N_116AliasDataBuilder17readLanguageAliasEP15UResourceBundlePNS_17UniqueCharStringsERNS_11LocalMemoryIPKcEERNS6_IiEERiR10UErrorCodeENK3$_1clEPKDs:
  760|    500|        [](const UChar*) {}, status);
locid.cpp:_ZN6icu_7812_GLOBAL__N_116AliasDataBuilder15readScriptAliasEP15UResourceBundlePNS_17UniqueCharStringsERNS_11LocalMemoryIPKcEERNS6_IiEERiR10UErrorCode:
  777|      1|{
  778|      1|    return readAlias(
  779|      1|        alias, strings, types, replacementIndexes, length,
  780|       |#if U_DEBUG
  781|       |        [](const char* type) {
  782|       |            U_ASSERT(uprv_strlen(type) == 4);
  783|       |        },
  784|       |        [](const UChar* replacement) {
  785|       |            U_ASSERT(u_strlen(replacement) == 4);
  786|       |        },
  787|       |#else
  788|      1|        [](const char*) {},
  789|      1|        [](const UChar*) { },
  790|      1|#endif
  791|      1|        status);
  792|      1|}
locid.cpp:_ZZN6icu_7812_GLOBAL__N_116AliasDataBuilder15readScriptAliasEP15UResourceBundlePNS_17UniqueCharStringsERNS_11LocalMemoryIPKcEERNS6_IiEERiR10UErrorCodeENK3$_0clES8_:
  788|      1|        [](const char*) {},
locid.cpp:_ZZN6icu_7812_GLOBAL__N_116AliasDataBuilder15readScriptAliasEP15UResourceBundlePNS_17UniqueCharStringsERNS_11LocalMemoryIPKcEERNS6_IiEERiR10UErrorCodeENK3$_1clEPKDs:
  789|      1|        [](const UChar*) { },
locid.cpp:_ZN6icu_7812_GLOBAL__N_116AliasDataBuilder18readTerritoryAliasEP15UResourceBundlePNS_17UniqueCharStringsERNS_11LocalMemoryIPKcEERNS6_IiEERiR10UErrorCode:
  808|      1|{
  809|      1|    return readAlias(
  810|      1|        alias, strings, types, replacementIndexes, length,
  811|       |#if U_DEBUG
  812|       |        [](const char* type) {
  813|       |            U_ASSERT(uprv_strlen(type) == 2 || uprv_strlen(type) == 3);
  814|       |        },
  815|       |#else
  816|      1|        [](const char*) {},
  817|      1|#endif
  818|      1|        [](const UChar*) { },
  819|      1|        status);
  820|      1|}
locid.cpp:_ZZN6icu_7812_GLOBAL__N_116AliasDataBuilder18readTerritoryAliasEP15UResourceBundlePNS_17UniqueCharStringsERNS_11LocalMemoryIPKcEERNS6_IiEERiR10UErrorCodeENK3$_0clES8_:
  816|    640|        [](const char*) {},
locid.cpp:_ZZN6icu_7812_GLOBAL__N_116AliasDataBuilder18readTerritoryAliasEP15UResourceBundlePNS_17UniqueCharStringsERNS_11LocalMemoryIPKcEERNS6_IiEERiR10UErrorCodeENK3$_1clEPKDs:
  818|    640|        [](const UChar*) { },
locid.cpp:_ZN6icu_7812_GLOBAL__N_116AliasDataBuilder16readVariantAliasEP15UResourceBundlePNS_17UniqueCharStringsERNS_11LocalMemoryIPKcEERNS6_IiEERiR10UErrorCode:
  836|      1|{
  837|      1|    return readAlias(
  838|      1|        alias, strings, types, replacementIndexes, length,
  839|       |#if U_DEBUG
  840|       |        [](const char* type) {
  841|       |            U_ASSERT(uprv_strlen(type) >= 4 && uprv_strlen(type) <= 8);
  842|       |            U_ASSERT(uprv_strlen(type) != 4 ||
  843|       |                     (type[0] >= '0' && type[0] <= '9'));
  844|       |        },
  845|       |        [](const UChar* replacement) {
  846|       |            int32_t len = u_strlen(replacement);
  847|       |            U_ASSERT(len >= 4 && len <= 8);
  848|       |            U_ASSERT(len != 4 ||
  849|       |                     (*replacement >= u'0' &&
  850|       |                      *replacement <= u'9'));
  851|       |        },
  852|       |#else
  853|      1|        [](const char*) {},
  854|      1|        [](const UChar*) { },
  855|      1|#endif
  856|      1|        status);
  857|      1|}
locid.cpp:_ZZN6icu_7812_GLOBAL__N_116AliasDataBuilder16readVariantAliasEP15UResourceBundlePNS_17UniqueCharStringsERNS_11LocalMemoryIPKcEERNS6_IiEERiR10UErrorCodeENK3$_0clES8_:
  853|      2|        [](const char*) {},
locid.cpp:_ZZN6icu_7812_GLOBAL__N_116AliasDataBuilder16readVariantAliasEP15UResourceBundlePNS_17UniqueCharStringsERNS_11LocalMemoryIPKcEERNS6_IiEERiR10UErrorCodeENK3$_1clEPKDs:
  854|      2|        [](const UChar*) { },
locid.cpp:_ZN6icu_7812_GLOBAL__N_116AliasDataBuilder20readSubdivisionAliasEP15UResourceBundlePNS_17UniqueCharStringsERNS_11LocalMemoryIPKcEERNS6_IiEERiR10UErrorCode:
  873|      1|{
  874|      1|    return readAlias(
  875|      1|        alias, strings, types, replacementIndexes, length,
  876|       |#if U_DEBUG
  877|       |        [](const char* type) {
  878|       |            U_ASSERT(uprv_strlen(type) >= 3 && uprv_strlen(type) <= 8);
  879|       |        },
  880|       |#else
  881|      1|        [](const char*) {},
  882|      1|#endif
  883|      1|        [](const UChar*) { },
  884|      1|        status);
  885|      1|}
locid.cpp:_ZZN6icu_7812_GLOBAL__N_116AliasDataBuilder20readSubdivisionAliasEP15UResourceBundlePNS_17UniqueCharStringsERNS_11LocalMemoryIPKcEERNS6_IiEERiR10UErrorCodeENK3$_0clES8_:
  881|    147|        [](const char*) {},
locid.cpp:_ZZN6icu_7812_GLOBAL__N_116AliasDataBuilder20readSubdivisionAliasEP15UResourceBundlePNS_17UniqueCharStringsERNS_11LocalMemoryIPKcEERNS6_IiEERiR10UErrorCodeENK3$_1clEPKDs:
  883|    147|        [](const UChar*) { },
locid.cpp:_ZN6icu_7812_GLOBAL__N_19AliasDataC2ENS_13CharStringMapES2_S2_S2_S2_PNS_10CharStringE:
  650|      1|        : language(std::move(languageMap)),
  651|      1|          script(std::move(scriptMap)),
  652|      1|          territory(std::move(territoryMap)),
  653|      1|          variant(std::move(variantMap)),
  654|      1|          subdivision(std::move(subdivisionMap)),
  655|      1|          strings(strings) {
  656|      1|    }
locid.cpp:_ZN6icu_7812_GLOBAL__N_113AliasReplacer8notEmptyEPKc:
 1090|  4.64k|    inline bool notEmpty(const char* str) {
 1091|  4.64k|        return str && str[0] != NULL_CHAR;
  ------------------
  |  |  244|  2.68k|#define NULL_CHAR '\0'
  ------------------
  |  Branch (1091:16): [True: 2.68k, False: 1.96k]
  |  Branch (1091:23): [True: 1.88k, False: 801]
  ------------------
 1092|  4.64k|    }
locid.cpp:_ZN6icu_7812_GLOBAL__N_113AliasReplacer15replaceLanguageEbbbRNS_7UVectorER10UErrorCode:
 1271|  3.58k|{
 1272|  3.58k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1272:9): [True: 0, False: 3.58k]
  ------------------
 1273|      0|        return false;
 1274|      0|    }
 1275|  3.58k|    if (    (checkRegion && region == nullptr) ||
  ------------------
  |  Branch (1275:14): [True: 1.43k, False: 2.15k]
  |  Branch (1275:29): [True: 378, False: 1.05k]
  ------------------
 1276|  3.58k|            (checkVariants && variants.size() == 0)) {
  ------------------
  |  Branch (1276:14): [True: 1.96k, False: 1.24k]
  |  Branch (1276:31): [True: 1.95k, False: 3]
  ------------------
 1277|       |        // Nothing to search.
 1278|  2.33k|        return false;
 1279|  2.33k|    }
 1280|  1.24k|    int32_t variant_size = checkVariants ? variants.size() : 1;
  ------------------
  |  Branch (1280:28): [True: 3, False: 1.24k]
  ------------------
 1281|       |    // Since we may have more than one variant, we need to loop through them.
 1282|  1.24k|    const char* searchLanguage = checkLanguage ? language : "und";
  ------------------
  |  Branch (1282:34): [True: 1.24k, False: 1]
  ------------------
 1283|  1.24k|    const char* searchRegion = checkRegion ? region : nullptr;
  ------------------
  |  Branch (1283:32): [True: 529, False: 719]
  ------------------
 1284|  1.24k|    const char* searchVariant = nullptr;
 1285|  1.24k|    for (int32_t variant_index = 0;
 1286|  2.49k|            variant_index < variant_size;
  ------------------
  |  Branch (1286:13): [True: 1.24k, False: 1.24k]
  ------------------
 1287|  1.24k|            variant_index++) {
 1288|  1.24k|        if (checkVariants) {
  ------------------
  |  Branch (1288:13): [True: 3, False: 1.24k]
  ------------------
 1289|      3|            U_ASSERT(variant_index < variant_size);
  ------------------
  |  |   35|      3|#   define U_ASSERT(exp) (void)0
  ------------------
 1290|      3|            searchVariant = static_cast<const char*>(variants.elementAt(variant_index));
 1291|      3|        }
 1292|       |
 1293|  1.24k|        if (searchVariant != nullptr && uprv_strlen(searchVariant) < 4) {
  ------------------
  |  |   37|      3|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      3|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1293:13): [True: 3, False: 1.24k]
  |  Branch (1293:41): [True: 0, False: 3]
  ------------------
 1294|       |            // Do not consider  ill-formed variant subtag.
 1295|      0|            searchVariant = nullptr;
 1296|      0|        }
 1297|  1.24k|        CharString typeKey;
 1298|  1.24k|        generateKey(searchLanguage, searchRegion, searchVariant, typeKey,
 1299|  1.24k|                    status);
 1300|  1.24k|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (1300:13): [True: 0, False: 1.24k]
  ------------------
 1301|      0|            return false;
 1302|      0|        }
 1303|  1.24k|        const char *replacement = data->languageMap().get(typeKey.data());
 1304|  1.24k|        if (replacement == nullptr) {
  ------------------
  |  Branch (1304:13): [True: 1.24k, False: 0]
  ------------------
 1305|       |            // Found no replacement data.
 1306|  1.24k|            continue;
 1307|  1.24k|        }
 1308|       |
 1309|      0|        const char* replacedLanguage = nullptr;
 1310|      0|        const char* replacedScript = nullptr;
 1311|      0|        const char* replacedRegion = nullptr;
 1312|      0|        const char* replacedVariant = nullptr;
 1313|      0|        const char* replacedExtensions = nullptr;
 1314|      0|        parseLanguageReplacement(replacement,
 1315|      0|                                 replacedLanguage,
 1316|      0|                                 replacedScript,
 1317|      0|                                 replacedRegion,
 1318|      0|                                 replacedVariant,
 1319|      0|                                 replacedExtensions,
 1320|      0|                                 toBeFreed,
 1321|      0|                                 status);
 1322|      0|        replacedLanguage =
 1323|      0|            (replacedLanguage != nullptr && uprv_strcmp(replacedLanguage, "und") == 0) ?
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1323:14): [True: 0, False: 0]
  |  Branch (1323:45): [True: 0, False: 0]
  ------------------
 1324|      0|            language : replacedLanguage;
 1325|      0|        replacedScript = deleteOrReplace(script, nullptr, replacedScript);
 1326|      0|        replacedRegion = deleteOrReplace(region, searchRegion, replacedRegion);
 1327|      0|        replacedVariant = deleteOrReplace(
 1328|      0|            searchVariant, searchVariant, replacedVariant);
 1329|       |
 1330|      0|        if (    same(language, replacedLanguage) &&
  ------------------
  |  Branch (1330:17): [True: 0, False: 0]
  ------------------
 1331|      0|                same(script, replacedScript) &&
  ------------------
  |  Branch (1331:17): [True: 0, False: 0]
  ------------------
 1332|      0|                same(region, replacedRegion) &&
  ------------------
  |  Branch (1332:17): [True: 0, False: 0]
  ------------------
 1333|      0|                same(searchVariant, replacedVariant) &&
  ------------------
  |  Branch (1333:17): [True: 0, False: 0]
  ------------------
 1334|      0|                replacedExtensions == nullptr) {
  ------------------
  |  Branch (1334:17): [True: 0, False: 0]
  ------------------
 1335|       |            // Replacement produce no changes.
 1336|      0|            continue;
 1337|      0|        }
 1338|       |
 1339|      0|        language = replacedLanguage;
 1340|      0|        region = replacedRegion;
 1341|      0|        script = replacedScript;
 1342|      0|        if (searchVariant != nullptr) {
  ------------------
  |  Branch (1342:13): [True: 0, False: 0]
  ------------------
 1343|      0|            if (notEmpty(replacedVariant)) {
  ------------------
  |  Branch (1343:17): [True: 0, False: 0]
  ------------------
 1344|      0|                variants.setElementAt((void*)replacedVariant, variant_index);
 1345|      0|            } else {
 1346|      0|                variants.removeElementAt(variant_index);
 1347|      0|            }
 1348|      0|        }
 1349|      0|        if (replacedExtensions != nullptr) {
  ------------------
  |  Branch (1349:13): [True: 0, False: 0]
  ------------------
 1350|       |            // DO NOTHING
 1351|       |            // UTS35 does not specify what should we do if we have extensions in the
 1352|       |            // replacement. Currently we know only the following 4 "BCP47 LegacyRules" have
 1353|       |            // extensions in them languageAlias:
 1354|       |            //  i_default => en_x_i_default
 1355|       |            //  i_enochian => und_x_i_enochian
 1356|       |            //  i_mingo => see_x_i_mingo
 1357|       |            //  zh_min => nan_x_zh_min
 1358|       |            // But all of them are already changed by code inside ultag_parse() before
 1359|       |            // hitting this code.
 1360|      0|        }
 1361|       |
 1362|       |        // Something changed by language alias data.
 1363|      0|        return true;
 1364|      0|    }
 1365|       |    // Nothing changed by language alias data.
 1366|  1.24k|    return false;
 1367|  1.24k|}
locid.cpp:_ZN6icu_7812_GLOBAL__N_113AliasReplacer11generateKeyEPKcS3_S3_RNS_10CharStringER10UErrorCode:
 1169|  1.24k|{
 1170|  1.24k|    if (U_FAILURE(status)) { return out; }
  ------------------
  |  Branch (1170:9): [True: 0, False: 1.24k]
  ------------------
 1171|  1.24k|    out.append(language, status);
 1172|  1.24k|    if (notEmpty(region)) {
  ------------------
  |  Branch (1172:9): [True: 529, False: 719]
  ------------------
 1173|    529|        out.append(SEP_CHAR, status)
  ------------------
  |  |  243|    529|#define SEP_CHAR '_'
  ------------------
 1174|    529|            .append(region, status);
 1175|    529|    }
 1176|  1.24k|    if (notEmpty(variant)) {
  ------------------
  |  Branch (1176:9): [True: 3, False: 1.24k]
  ------------------
 1177|      3|       out.append(SEP_CHAR, status)
  ------------------
  |  |  243|      3|#define SEP_CHAR '_'
  ------------------
 1178|      3|           .append(variant, status);
 1179|      3|    }
 1180|  1.24k|    return out;
 1181|  1.24k|}
locid.cpp:_ZNK6icu_7812_GLOBAL__N_19AliasData11languageMapEv:
  632|  1.24k|    const CharStringMap& languageMap() const { return language; }
locid.cpp:_ZN6icu_7812_GLOBAL__N_113AliasReplacer16replaceTerritoryERNS_7UVectorER10UErrorCode:
 1371|    717|{
 1372|    717|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1372:9): [True: 0, False: 717]
  ------------------
 1373|      0|        return false;
 1374|      0|    }
 1375|    717|    if (region == nullptr) {
  ------------------
  |  Branch (1375:9): [True: 189, False: 528]
  ------------------
 1376|       |        // No region to search.
 1377|    189|        return false;
 1378|    189|    }
 1379|    528|    const char *replacement = data->territoryMap().get(region);
 1380|    528|    if (replacement == nullptr) {
  ------------------
  |  Branch (1380:9): [True: 528, False: 0]
  ------------------
 1381|       |        // Found no replacement data for this region.
 1382|    528|        return false;
 1383|    528|    }
 1384|      0|    const char* replacedRegion = replacement;
 1385|      0|    const char* firstSpace = uprv_strchr(replacement, ' ');
  ------------------
  |  |   40|      0|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1386|      0|    if (firstSpace != nullptr) {
  ------------------
  |  Branch (1386:9): [True: 0, False: 0]
  ------------------
 1387|       |        // If there are are more than one region in the replacement.
 1388|       |        // We need to check which one match based on the language.
 1389|       |        // Cannot use nullptr for language because that will construct
 1390|       |        // the default locale, in that case, use "und" to get the correct
 1391|       |        // locale.
 1392|      0|        Locale l = LocaleBuilder()
 1393|      0|            .setLanguage(language == nullptr ? "und" : language)
  ------------------
  |  Branch (1393:26): [True: 0, False: 0]
  ------------------
 1394|      0|            .setScript(script)
 1395|      0|            .build(status);
 1396|      0|        l.addLikelySubtags(status);
 1397|      0|        const char* likelyRegion = l.getCountry();
 1398|      0|        LocalPointer<CharString> item;
 1399|      0|        if (likelyRegion != nullptr && uprv_strlen(likelyRegion) > 0) {
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1399:13): [True: 0, False: 0]
  |  Branch (1399:40): [True: 0, False: 0]
  ------------------
 1400|      0|            size_t len = uprv_strlen(likelyRegion);
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1401|      0|            const char* foundInReplacement = uprv_strstr(replacement,
  ------------------
  |  |   41|      0|#define uprv_strstr(s, c) U_STANDARD_CPP_NAMESPACE strstr(s, c)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1402|      0|                                                         likelyRegion);
 1403|      0|            if (foundInReplacement != nullptr) {
  ------------------
  |  Branch (1403:17): [True: 0, False: 0]
  ------------------
 1404|       |                // Assuming the case there are no three letter region code in
 1405|       |                // the replacement of territoryAlias
 1406|      0|                U_ASSERT(foundInReplacement == replacement ||
  ------------------
  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  ------------------
 1407|      0|                         *(foundInReplacement-1) == ' ');
 1408|      0|                U_ASSERT(foundInReplacement[len] == ' ' ||
  ------------------
  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  ------------------
 1409|      0|                         foundInReplacement[len] == '\0');
 1410|      0|                item.adoptInsteadAndCheckErrorCode(
 1411|      0|                    new CharString(foundInReplacement, static_cast<int32_t>(len), status), status);
 1412|      0|            }
 1413|      0|        }
 1414|      0|        if (item.isNull() && U_SUCCESS(status)) {
  ------------------
  |  Branch (1414:13): [True: 0, False: 0]
  |  Branch (1414:30): [True: 0, False: 0]
  ------------------
 1415|      0|            item.adoptInsteadAndCheckErrorCode(
 1416|      0|                new CharString(replacement,
 1417|      0|                               static_cast<int32_t>(firstSpace - replacement), status), status);
 1418|      0|        }
 1419|      0|        if (U_FAILURE(status)) { return false; }
  ------------------
  |  Branch (1419:13): [True: 0, False: 0]
  ------------------
 1420|      0|        replacedRegion = item->data();
 1421|      0|        toBeFreed.adoptElement(item.orphan(), status);
 1422|      0|        if (U_FAILURE(status)) { return false; }
  ------------------
  |  Branch (1422:13): [True: 0, False: 0]
  ------------------
 1423|      0|    }
 1424|      0|    U_ASSERT(!same(region, replacedRegion));
  ------------------
  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  ------------------
 1425|      0|    region = replacedRegion;
 1426|       |    // The region is changed by data in territory alias.
 1427|      0|    return true;
 1428|      0|}
locid.cpp:_ZNK6icu_7812_GLOBAL__N_19AliasData12territoryMapEv:
  634|    528|    const CharStringMap& territoryMap() const { return territory; }
locid.cpp:_ZN6icu_7812_GLOBAL__N_113AliasReplacer13replaceScriptER10UErrorCode:
 1432|    717|{
 1433|    717|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1433:9): [True: 0, False: 717]
  ------------------
 1434|      0|        return false;
 1435|      0|    }
 1436|    717|    if (script == nullptr) {
  ------------------
  |  Branch (1436:9): [True: 612, False: 105]
  ------------------
 1437|       |        // No script to search.
 1438|    612|        return false;
 1439|    612|    }
 1440|    105|    const char *replacement = data->scriptMap().get(script);
 1441|    105|    if (replacement == nullptr) {
  ------------------
  |  Branch (1441:9): [True: 105, False: 0]
  ------------------
 1442|       |        // Found no replacement data for this script.
 1443|    105|        return false;
 1444|    105|    }
 1445|      0|    U_ASSERT(!same(script, replacement));
  ------------------
  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  ------------------
 1446|      0|    script = replacement;
 1447|       |    // The script is changed by data in script alias.
 1448|      0|    return true;
 1449|    105|}
locid.cpp:_ZNK6icu_7812_GLOBAL__N_19AliasData9scriptMapEv:
  633|    105|    const CharStringMap& scriptMap() const { return script; }
locid.cpp:_ZN6icu_7812_GLOBAL__N_113AliasReplacer14replaceVariantER10UErrorCode:
 1453|    717|{
 1454|    717|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1454:9): [True: 0, False: 717]
  ------------------
 1455|      0|        return false;
 1456|      0|    }
 1457|       |    // Since we may have more than one variant, we need to loop through them.
 1458|    718|    for (int32_t i = 0; i < variants.size(); i++) {
  ------------------
  |  Branch (1458:25): [True: 1, False: 717]
  ------------------
 1459|      1|        const char* variant = static_cast<const char*>(variants.elementAt(i));
 1460|      1|        const char *replacement = data->variantMap().get(variant);
 1461|      1|        if (replacement == nullptr) {
  ------------------
  |  Branch (1461:13): [True: 1, False: 0]
  ------------------
 1462|       |            // Found no replacement data for this variant.
 1463|      1|            continue;
 1464|      1|        }
 1465|      0|        U_ASSERT((uprv_strlen(replacement) >= 5  &&
  ------------------
  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  ------------------
 1466|      0|                  uprv_strlen(replacement) <= 8) ||
 1467|      0|                 (uprv_strlen(replacement) == 4 &&
 1468|      0|                  replacement[0] >= '0' &&
 1469|      0|                  replacement[0] <= '9'));
 1470|      0|        if (!same(variant, replacement)) {
  ------------------
  |  Branch (1470:13): [True: 0, False: 0]
  ------------------
 1471|      0|            variants.setElementAt((void*)replacement, i);
 1472|       |            // Special hack to handle hepburn-heploc => alalc97
 1473|      0|            if (uprv_strcmp(variant, "heploc") == 0) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1473:17): [True: 0, False: 0]
  ------------------
 1474|      0|                for (int32_t j = 0; j < variants.size(); j++) {
  ------------------
  |  Branch (1474:37): [True: 0, False: 0]
  ------------------
 1475|      0|                     if (uprv_strcmp((const char*)(variants.elementAt(j)),
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1475:26): [True: 0, False: 0]
  ------------------
 1476|      0|                                     "hepburn") == 0) {
 1477|      0|                         variants.removeElementAt(j);
 1478|      0|                     }
 1479|      0|                }
 1480|      0|            }
 1481|      0|            return true;
 1482|      0|        }
 1483|      0|    }
 1484|    717|    return false;
 1485|    717|}
locid.cpp:_ZNK6icu_7812_GLOBAL__N_19AliasData10variantMapEv:
  635|      1|    const CharStringMap& variantMap() const { return variant; }
locid.cpp:_ZN6icu_7812_GLOBAL__N_113AliasReplacerD2Ev:
 1072|    717|    ~AliasReplacer() {
 1073|    717|    }
locid.cpp:_ZZN6icu_786Locale4initENS_11StringPieceEaENK3$_0clENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEPciR10UErrorCode:
 1868|    886|                                          UErrorCode& status) {
 1869|    886|            return ByteSinkUtil::viaByteSinkToTerminatedChars(
 1870|    886|                name, nameCapacity,
 1871|    886|                [&](ByteSink& sink, UErrorCode& status) {
 1872|    886|                    if (canonicalize) {
 1873|    886|                        ulocimp_canonicalize(localeID, sink, status);
 1874|    886|                    } else {
 1875|    886|                        ulocimp_getName(localeID, sink, status);
 1876|    886|                    }
 1877|    886|                },
 1878|    886|                status);
 1879|    886|        };
locid.cpp:_ZZZN6icu_786Locale4initENS_11StringPieceEaENK3$_0clENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEPciR10UErrorCodeENKUlRNS_8ByteSinkESA_E_clESC_SA_:
 1871|    886|                [&](ByteSink& sink, UErrorCode& status) {
 1872|    886|                    if (canonicalize) {
  ------------------
  |  Branch (1872:25): [True: 885, False: 1]
  ------------------
 1873|    885|                        ulocimp_canonicalize(localeID, sink, status);
  ------------------
  |  | 1197|    885|#define ulocimp_canonicalize U_ICU_ENTRY_POINT_RENAME(ulocimp_canonicalize)
  |  |  ------------------
  |  |  |  |  123|    885|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    885|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    885|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1874|    885|                    } else {
 1875|      1|                        ulocimp_getName(localeID, sink, status);
  ------------------
  |  | 1204|      1|#define ulocimp_getName U_ICU_ENTRY_POINT_RENAME(ulocimp_getName)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1876|      1|                    }
 1877|    886|                },
locid.cpp:_ZN6icu_7812_GLOBAL__N_126isKnownCanonicalizedLocaleEPKcR10UErrorCode:
 1786|    885|{
 1787|    885|    if (U_FAILURE(status)) { return false; }
  ------------------
  |  Branch (1787:9): [True: 0, False: 885]
  ------------------
 1788|       |
 1789|    885|    if (    uprv_strcmp(locale, "c") == 0 ||
  ------------------
  |  |   38|    885|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    885|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1789:13): [True: 0, False: 885]
  ------------------
 1790|    885|            uprv_strcmp(locale, "en") == 0 ||
  ------------------
  |  |   38|    885|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    885|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1790:13): [True: 1, False: 884]
  ------------------
 1791|    885|            uprv_strcmp(locale, "en_US") == 0) {
  ------------------
  |  |   38|    884|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    884|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1791:13): [True: 1, False: 883]
  ------------------
 1792|      2|        return true;
 1793|      2|    }
 1794|       |
 1795|       |    // common well-known Canonicalized.
 1796|    883|    umtx_initOnce(gKnownCanonicalizedInitOnce,
 1797|    883|                  &loadKnownCanonicalized, status);
 1798|    883|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1798:9): [True: 0, False: 883]
  ------------------
 1799|      0|        return false;
 1800|      0|    }
 1801|    883|    U_ASSERT(gKnownCanonicalized != nullptr);
  ------------------
  |  |   35|    883|#   define U_ASSERT(exp) (void)0
  ------------------
 1802|    883|    return uhash_geti(gKnownCanonicalized, locale) != 0;
  ------------------
  |  | 1008|    883|#define uhash_geti U_ICU_ENTRY_POINT_RENAME(uhash_geti)
  |  |  ------------------
  |  |  |  |  123|    883|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    883|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    883|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1803|    883|}
locid.cpp:_ZN6icu_7812_GLOBAL__N_122loadKnownCanonicalizedER10UErrorCode:
  518|      1|void U_CALLCONV loadKnownCanonicalized(UErrorCode &status) {
  519|      1|    ucln_common_registerCleanup(UCLN_COMMON_LOCALE_KNOWN_CANONICALIZED,
  ------------------
  |  |  617|      1|#define ucln_common_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_common_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|      1|                                cleanupKnownCanonicalized);
  521|      1|    LocalUHashtablePointer newKnownCanonicalizedMap(
  522|      1|        uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &status));
  ------------------
  |  | 1030|      1|#define uhash_open U_ICU_ENTRY_POINT_RENAME(uhash_open)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &status));
  ------------------
  |  | 1011|      1|#define uhash_hashChars U_ICU_ENTRY_POINT_RENAME(uhash_hashChars)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &status));
  ------------------
  |  |  993|      1|#define uhash_compareChars U_ICU_ENTRY_POINT_RENAME(uhash_compareChars)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  523|      1|    for (int32_t i = 0;
  524|    179|            U_SUCCESS(status) && i < UPRV_LENGTHOF(KNOWN_CANONICALIZED);
  ------------------
  |  |   99|    179|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (524:13): [True: 179, False: 0]
  |  Branch (524:34): [True: 178, False: 1]
  ------------------
  525|    178|            i++) {
  526|    178|        uhash_puti(newKnownCanonicalizedMap.getAlias(),
  ------------------
  |  | 1033|    178|#define uhash_puti U_ICU_ENTRY_POINT_RENAME(uhash_puti)
  |  |  ------------------
  |  |  |  |  123|    178|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    178|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    178|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  527|    178|                   (void*)KNOWN_CANONICALIZED[i],
  528|    178|                   1, &status);
  529|    178|    }
  530|      1|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (530:9): [True: 0, False: 1]
  ------------------
  531|      0|        return;
  532|      0|    }
  533|       |
  534|      1|    gKnownCanonicalized = newKnownCanonicalizedMap.orphan();
  535|      1|}

_ZN6icu_785MutexC2EPNS_6UMutexE:
   58|  3.02M|    Mutex(UMutex *mutex = nullptr) : fMutex(mutex) {
   59|  3.02M|        umtx_lock(fMutex);
  ------------------
  |  | 1250|  3.02M|#define umtx_lock U_ICU_ENTRY_POINT_RENAME(umtx_lock)
  |  |  ------------------
  |  |  |  |  123|  3.02M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  3.02M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  3.02M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   60|  3.02M|    }
_ZN6icu_785MutexD2Ev:
   61|  3.02M|    ~Mutex() {
   62|  3.02M|        umtx_unlock(fMutex);
  ------------------
  |  | 1251|  3.02M|#define umtx_unlock U_ICU_ENTRY_POINT_RENAME(umtx_unlock)
  |  |  ------------------
  |  |  |  |  123|  3.02M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  3.02M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  3.02M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   63|  3.02M|    }

uprv_getUTCtime_78:
  296|    845|{
  297|       |#if defined(U_DEBUG_FAKETIME)
  298|       |    return getUTCtime_fake(); /* Hook for overriding the clock */
  299|       |#else
  300|    845|    return uprv_getRawUTCtime();
  ------------------
  |  | 1510|    845|#define uprv_getRawUTCtime U_ICU_ENTRY_POINT_RENAME(uprv_getRawUTCtime)
  |  |  ------------------
  |  |  |  |  123|    845|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    845|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    845|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  301|    845|#endif
  302|    845|}
uprv_getRawUTCtime_78:
  307|    845|{
  308|       |#if U_PLATFORM_USES_ONLY_WIN32_API
  309|       |
  310|       |    FileTimeConversion winTime;
  311|       |    GetSystemTimeAsFileTime(&winTime.fileTime);
  312|       |    return (UDate)((winTime.int64 - EPOCH_BIAS) / HECTONANOSECOND_PER_MILLISECOND);
  313|       |#else
  314|       |
  315|    845|#if HAVE_GETTIMEOFDAY
  316|    845|    struct timeval posixTime;
  317|    845|    gettimeofday(&posixTime, nullptr);
  318|    845|    return (UDate)(((int64_t)posixTime.tv_sec * U_MILLIS_PER_SECOND) + (posixTime.tv_usec/1000));
  ------------------
  |  |  221|    845|#define U_MILLIS_PER_SECOND        (1000)
  ------------------
  319|       |#else
  320|       |    time_t epochtime;
  321|       |    time(&epochtime);
  322|       |    return (UDate)epochtime * U_MILLIS_PER_SECOND;
  323|       |#endif
  324|       |
  325|    845|#endif
  326|    845|}
uprv_add32_overflow_78:
  524|  8.80k|uprv_add32_overflow(int32_t a, int32_t b, int32_t* res) {
  525|       |    // NOTE: Some compilers (GCC, Clang) have primitives available, like __builtin_add_overflow.
  526|       |    // This function could be optimized by calling one of those primitives.
  527|  8.80k|    auto a64 = static_cast<int64_t>(a);
  528|  8.80k|    auto b64 = static_cast<int64_t>(b);
  529|  8.80k|    int64_t res64 = a64 + b64;
  530|  8.80k|    *res = static_cast<int32_t>(res64);
  531|  8.80k|    return res64 != *res;
  532|  8.80k|}
uprv_tzset_78:
  633|      1|{
  634|      1|#if defined(U_TZSET)
  635|      1|    U_TZSET();
  ------------------
  |  |  111|      1|#   define U_TZSET tzset
  ------------------
  636|       |#else
  637|       |    /* no initialization*/
  638|       |#endif
  639|      1|}
uprv_timezone_78:
  643|      1|{
  644|      1|#ifdef U_TIMEZONE
  645|      1|    return U_TIMEZONE;
  ------------------
  |  |  124|      1|#   define U_TIMEZONE __timezone
  ------------------
  646|       |#else
  647|       |    time_t t, t1, t2;
  648|       |    struct tm tmrec;
  649|       |    int32_t tdiff = 0;
  650|       |
  651|       |    time(&t);
  652|       |    uprv_memcpy( &tmrec, localtime(&t), sizeof(tmrec) );
  653|       |#if U_PLATFORM != U_PF_IPHONE
  654|       |    UBool dst_checked = (tmrec.tm_isdst != 0); /* daylight savings time is checked*/
  655|       |#endif
  656|       |    t1 = mktime(&tmrec);                 /* local time in seconds*/
  657|       |    uprv_memcpy( &tmrec, gmtime(&t), sizeof(tmrec) );
  658|       |    t2 = mktime(&tmrec);                 /* GMT (or UTC) in seconds*/
  659|       |    tdiff = t2 - t1;
  660|       |
  661|       |#if U_PLATFORM != U_PF_IPHONE
  662|       |    /* imitate NT behaviour, which returns same timezone offset to GMT for
  663|       |       winter and summer.
  664|       |       This does not work on all platforms. For instance, on glibc on Linux
  665|       |       and on Mac OS 10.5, tdiff calculated above remains the same
  666|       |       regardless of whether DST is in effect or not. iOS is another
  667|       |       platform where this does not work. Linux + glibc and Mac OS 10.5
  668|       |       have U_TIMEZONE defined so that this code is not reached.
  669|       |    */
  670|       |    if (dst_checked)
  671|       |        tdiff += 3600;
  672|       |#endif
  673|       |    return tdiff;
  674|       |#endif
  675|      1|}
uprv_tzname_clear_cache_78:
 1073|      1|{
 1074|       |#if U_PLATFORM == U_PF_ANDROID
 1075|       |    /* Android's timezone is stored in system property. */
 1076|       |    gAndroidTimeZone[0] = '\0';
 1077|       |    void* libc = dlopen("libc.so", RTLD_NOLOAD);
 1078|       |    if (libc) {
 1079|       |        /* Android API 26+ has new API to get system property and old API
 1080|       |         * (__system_property_get) is deprecated */
 1081|       |        system_property_read_callback* property_read_callback =
 1082|       |            (system_property_read_callback*)dlsym(
 1083|       |                libc, "__system_property_read_callback");
 1084|       |        if (property_read_callback) {
 1085|       |            const prop_info* info =
 1086|       |                __system_property_find("persist.sys.timezone");
 1087|       |            if (info) {
 1088|       |                property_read_callback(info, &u_property_read, gAndroidTimeZone);
 1089|       |            }
 1090|       |        } else {
 1091|       |            system_property_get* property_get =
 1092|       |                (system_property_get*)dlsym(libc, "__system_property_get");
 1093|       |            if (property_get) {
 1094|       |                property_get("persist.sys.timezone", gAndroidTimeZone);
 1095|       |            }
 1096|       |        }
 1097|       |        dlclose(libc);
 1098|       |    }
 1099|       |#endif
 1100|       |
 1101|      1|#if defined(CHECK_LOCALTIME_LINK) && !defined(DEBUG_SKIP_LOCALTIME_LINK)
 1102|      1|    gTimeZoneBufferPtr = nullptr;
 1103|      1|#endif
 1104|      1|}
uprv_tzname_78:
 1108|      1|{
 1109|      1|    (void)n; // Avoid unreferenced parameter warning.
 1110|      1|    const char *tzid = nullptr;
 1111|       |#if U_PLATFORM_USES_ONLY_WIN32_API
 1112|       |    tzid = uprv_detectWindowsTimeZone();
 1113|       |
 1114|       |    if (tzid != nullptr) {
 1115|       |        return tzid;
 1116|       |    }
 1117|       |
 1118|       |#ifndef U_TZNAME
 1119|       |    // The return value is free'd in timezone.cpp on Windows because
 1120|       |    // the other code path returns a pointer to a heap location.
 1121|       |    // If we don't have a name already, then tzname wouldn't be any
 1122|       |    // better, so just fall back.
 1123|       |    return uprv_strdup("");
 1124|       |#endif // !U_TZNAME
 1125|       |
 1126|       |#else
 1127|       |
 1128|       |/*#if U_PLATFORM_IS_DARWIN_BASED
 1129|       |    int ret;
 1130|       |
 1131|       |    tzid = getenv("TZFILE");
 1132|       |    if (tzid != nullptr) {
 1133|       |        return tzid;
 1134|       |    }
 1135|       |#endif*/
 1136|       |
 1137|       |/* This code can be temporarily disabled to test tzname resolution later on. */
 1138|      1|#ifndef DEBUG_TZNAME
 1139|       |#if U_PLATFORM == U_PF_ANDROID
 1140|       |    tzid = gAndroidTimeZone;
 1141|       |#else
 1142|      1|    tzid = getenv("TZ");
 1143|      1|#endif
 1144|      1|    if (tzid != nullptr && isValidOlsonID(tzid)
  ------------------
  |  Branch (1144:9): [True: 0, False: 1]
  |  Branch (1144:28): [True: 0, False: 0]
  ------------------
 1145|       |#if U_PLATFORM == U_PF_SOLARIS
 1146|       |    /* Don't misinterpret TZ "localtime" on Solaris as a time zone name. */
 1147|       |        && uprv_strcmp(tzid, TZ_ENV_CHECK) != 0
 1148|       |#endif
 1149|      1|    ) {
 1150|       |        /* The colon forces tzset() to treat the remainder as zoneinfo path */
 1151|      0|        if (tzid[0] == ':') {
  ------------------
  |  Branch (1151:13): [True: 0, False: 0]
  ------------------
 1152|      0|            tzid++;
 1153|      0|        }
 1154|       |        /* This might be a good Olson ID. */
 1155|      0|        skipZoneIDPrefix(&tzid);
 1156|      0|        return tzid;
 1157|      0|    }
 1158|       |    /* else U_TZNAME will give a better result. */
 1159|      1|#endif
 1160|       |
 1161|      1|#if defined(CHECK_LOCALTIME_LINK) && !defined(DEBUG_SKIP_LOCALTIME_LINK)
 1162|       |    /* Caller must handle threading issues */
 1163|      1|    if (gTimeZoneBufferPtr == nullptr) {
  ------------------
  |  Branch (1163:9): [True: 1, False: 0]
  ------------------
 1164|       |        /*
 1165|       |        This is a trick to look at the name of the link to get the Olson ID
 1166|       |        because the tzfile contents is underspecified.
 1167|       |        This isn't guaranteed to work because it may not be a symlink.
 1168|       |        */
 1169|      1|        char *ret = realpath(TZDEFAULT, gTimeZoneBuffer);
  ------------------
  |  |  706|      1|#define TZDEFAULT       "/etc/localtime"
  ------------------
 1170|      1|        if (ret != nullptr && uprv_strcmp(TZDEFAULT, gTimeZoneBuffer) != 0) {
  ------------------
  |  |   38|      1|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1170:13): [True: 1, False: 0]
  |  Branch (1170:31): [True: 1, False: 0]
  ------------------
 1171|      1|            int32_t tzZoneInfoTailLen = uprv_strlen(TZZONEINFOTAIL);
  ------------------
  |  |   37|      1|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1172|      1|            const char *tzZoneInfoTailPtr = uprv_strstr(gTimeZoneBuffer, TZZONEINFOTAIL);
  ------------------
  |  |   41|      1|#define uprv_strstr(s, c) U_STANDARD_CPP_NAMESPACE strstr(s, c)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1173|       |            // MacOS14 has the realpath as something like
 1174|       |            // /usr/share/zoneinfo.default/Australia/Melbourne
 1175|       |            // which will not have "/zoneinfo/" in the path.
 1176|       |            // Therefore if we fail, we fall back to read the link which is
 1177|       |            // /var/db/timezone/zoneinfo/Australia/Melbourne
 1178|       |            // We also fall back to reading the link if the realpath leads to something like
 1179|       |            // /usr/share/zoneinfo/posixrules
 1180|      1|            if (tzZoneInfoTailPtr == nullptr ||
  ------------------
  |  Branch (1180:17): [True: 0, False: 1]
  ------------------
 1181|      1|                    uprv_strcmp(tzZoneInfoTailPtr + tzZoneInfoTailLen, "posixrules") == 0) {
  ------------------
  |  |   38|      1|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1181:21): [True: 0, False: 1]
  ------------------
 1182|      0|                ssize_t size = readlink(TZDEFAULT, gTimeZoneBuffer, sizeof(gTimeZoneBuffer)-1);
  ------------------
  |  |  706|      0|#define TZDEFAULT       "/etc/localtime"
  ------------------
 1183|      0|                if (size > 0) {
  ------------------
  |  Branch (1183:21): [True: 0, False: 0]
  ------------------
 1184|      0|                    gTimeZoneBuffer[size] = 0;
 1185|      0|                    tzZoneInfoTailPtr = uprv_strstr(gTimeZoneBuffer, TZZONEINFOTAIL);
  ------------------
  |  |   41|      0|#define uprv_strstr(s, c) U_STANDARD_CPP_NAMESPACE strstr(s, c)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1186|      0|                }
 1187|      0|            }
 1188|      1|            if (tzZoneInfoTailPtr != nullptr) {
  ------------------
  |  Branch (1188:17): [True: 1, False: 0]
  ------------------
 1189|      1|                tzZoneInfoTailPtr += tzZoneInfoTailLen;
 1190|      1|                skipZoneIDPrefix(&tzZoneInfoTailPtr);
 1191|      1|                if (isValidOlsonID(tzZoneInfoTailPtr)) {
  ------------------
  |  Branch (1191:21): [True: 1, False: 0]
  ------------------
 1192|      1|                    return (gTimeZoneBufferPtr = tzZoneInfoTailPtr);
 1193|      1|                }
 1194|      1|            }
 1195|      1|        } else {
 1196|      0|#if defined(SEARCH_TZFILE)
 1197|      0|            DefaultTZInfo* tzInfo = (DefaultTZInfo*)uprv_malloc(sizeof(DefaultTZInfo));
  ------------------
  |  | 1524|      0|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1198|      0|            if (tzInfo != nullptr) {
  ------------------
  |  Branch (1198:17): [True: 0, False: 0]
  ------------------
 1199|      0|                tzInfo->defaultTZBuffer = nullptr;
 1200|      0|                tzInfo->defaultTZFileSize = 0;
 1201|      0|                tzInfo->defaultTZFilePtr = nullptr;
 1202|      0|                tzInfo->defaultTZstatus = false;
 1203|      0|                tzInfo->defaultTZPosition = 0;
 1204|       |
 1205|      0|                gTimeZoneBufferPtr = searchForTZFile(TZZONEINFO, tzInfo);
  ------------------
  |  |  707|      0|#define TZZONEINFO      "/usr/share/zoneinfo/"
  ------------------
 1206|       |
 1207|       |                /* Free previously allocated memory */
 1208|      0|                if (tzInfo->defaultTZBuffer != nullptr) {
  ------------------
  |  Branch (1208:21): [True: 0, False: 0]
  ------------------
 1209|      0|                    uprv_free(tzInfo->defaultTZBuffer);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1210|      0|                }
 1211|      0|                if (tzInfo->defaultTZFilePtr != nullptr) {
  ------------------
  |  Branch (1211:21): [True: 0, False: 0]
  ------------------
 1212|      0|                    fclose(tzInfo->defaultTZFilePtr);
 1213|      0|                }
 1214|      0|                uprv_free(tzInfo);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1215|      0|            }
 1216|       |
 1217|      0|            if (gTimeZoneBufferPtr != nullptr && isValidOlsonID(gTimeZoneBufferPtr)) {
  ------------------
  |  Branch (1217:17): [True: 0, False: 0]
  |  Branch (1217:50): [True: 0, False: 0]
  ------------------
 1218|      0|                return gTimeZoneBufferPtr;
 1219|      0|            }
 1220|      0|#endif
 1221|      0|        }
 1222|      1|    }
 1223|      0|    else {
 1224|      0|        return gTimeZoneBufferPtr;
 1225|      0|    }
 1226|      0|#endif
 1227|      0|#endif
 1228|       |
 1229|      0|#ifdef U_TZNAME
 1230|       |#if U_PLATFORM_USES_ONLY_WIN32_API
 1231|       |    /* The return value is free'd in timezone.cpp on Windows because
 1232|       |     * the other code path returns a pointer to a heap location. */
 1233|       |    return uprv_strdup(U_TZNAME[n]);
 1234|       |#else
 1235|       |    /*
 1236|       |    U_TZNAME is usually a non-unique abbreviation, which isn't normally usable.
 1237|       |    So we remap the abbreviation to an olson ID.
 1238|       |
 1239|       |    Since Windows exposes a little more timezone information,
 1240|       |    we normally don't use this code on Windows because
 1241|       |    uprv_detectWindowsTimeZone should have already given the correct answer.
 1242|       |    */
 1243|      0|    {
 1244|      0|        struct tm juneSol, decemberSol;
 1245|      0|        int daylightType;
 1246|      0|        static const time_t juneSolstice=1182478260; /*2007-06-21 18:11 UT*/
 1247|      0|        static const time_t decemberSolstice=1198332540; /*2007-12-22 06:09 UT*/
 1248|       |
 1249|       |        /* This probing will tell us when daylight savings occurs.  */
 1250|      0|        localtime_r(&juneSolstice, &juneSol);
 1251|      0|        localtime_r(&decemberSolstice, &decemberSol);
 1252|      0|        if(decemberSol.tm_isdst > 0) {
  ------------------
  |  Branch (1252:12): [True: 0, False: 0]
  ------------------
 1253|      0|          daylightType = U_DAYLIGHT_DECEMBER;
 1254|      0|        } else if(juneSol.tm_isdst > 0) {
  ------------------
  |  Branch (1254:19): [True: 0, False: 0]
  ------------------
 1255|      0|          daylightType = U_DAYLIGHT_JUNE;
 1256|      0|        } else {
 1257|      0|          daylightType = U_DAYLIGHT_NONE;
 1258|      0|        }
 1259|      0|        tzid = remapShortTimeZone(U_TZNAME[0], U_TZNAME[1], daylightType, uprv_timezone());
  ------------------
  |  |  151|      0|#   define U_TZNAME tzname
  ------------------
                      tzid = remapShortTimeZone(U_TZNAME[0], U_TZNAME[1], daylightType, uprv_timezone());
  ------------------
  |  |  151|      0|#   define U_TZNAME tzname
  ------------------
                      tzid = remapShortTimeZone(U_TZNAME[0], U_TZNAME[1], daylightType, uprv_timezone());
  ------------------
  |  | 1546|      0|#define uprv_timezone U_ICU_ENTRY_POINT_RENAME(uprv_timezone)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1260|      0|        if (tzid != nullptr) {
  ------------------
  |  Branch (1260:13): [True: 0, False: 0]
  ------------------
 1261|      0|            return tzid;
 1262|      0|        }
 1263|      0|    }
 1264|      0|    return U_TZNAME[n];
  ------------------
  |  |  151|      0|#   define U_TZNAME tzname
  ------------------
 1265|      0|#endif
 1266|       |#else
 1267|       |    return "";
 1268|       |#endif
 1269|      0|}
u_setDataDirectory_78:
 1316|      1|u_setDataDirectory(const char *directory) {
 1317|      1|    char *newDataDir;
 1318|      1|    int32_t length;
 1319|       |
 1320|      1|    if(directory==nullptr || *directory==0) {
  ------------------
  |  Branch (1320:8): [True: 0, False: 1]
  |  Branch (1320:30): [True: 1, False: 0]
  ------------------
 1321|       |        /* A small optimization to prevent the malloc and copy when the
 1322|       |        shared library is used, and this is a way to make sure that nullptr
 1323|       |        is never returned.
 1324|       |        */
 1325|      1|        newDataDir = (char *)"";
 1326|      1|    }
 1327|      0|    else {
 1328|      0|        length=(int32_t)uprv_strlen(directory);
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1329|      0|        newDataDir = (char *)uprv_malloc(length + 2);
  ------------------
  |  | 1524|      0|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1330|       |        /* Exit out if newDataDir could not be created. */
 1331|      0|        if (newDataDir == nullptr) {
  ------------------
  |  Branch (1331:13): [True: 0, False: 0]
  ------------------
 1332|      0|            return;
 1333|      0|        }
 1334|      0|        uprv_strcpy(newDataDir, directory);
  ------------------
  |  |   36|      0|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1335|       |
 1336|       |#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR)
 1337|       |        {
 1338|       |            char *p;
 1339|       |            while((p = uprv_strchr(newDataDir, U_FILE_ALT_SEP_CHAR)) != nullptr) {
 1340|       |                *p = U_FILE_SEP_CHAR;
 1341|       |            }
 1342|       |        }
 1343|       |#endif
 1344|      0|    }
 1345|       |
 1346|      1|    if (gDataDirectory && *gDataDirectory) {
  ------------------
  |  Branch (1346:9): [True: 0, False: 1]
  |  Branch (1346:27): [True: 0, False: 0]
  ------------------
 1347|      0|        uprv_free(gDataDirectory);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1348|      0|    }
 1349|      1|    gDataDirectory = newDataDir;
 1350|      1|    ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
  ------------------
  |  |  617|      1|#define ucln_common_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_common_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1351|      1|}
uprv_pathIsAbsolute_78:
 1355|    530|{
 1356|    530|  if(!path || !*path) {
  ------------------
  |  Branch (1356:6): [True: 0, False: 530]
  |  Branch (1356:15): [True: 0, False: 530]
  ------------------
 1357|      0|    return false;
 1358|      0|  }
 1359|       |
 1360|    530|  if(*path == U_FILE_SEP_CHAR) {
  ------------------
  |  |  130|    530|#   define U_FILE_SEP_CHAR '/'
  ------------------
  |  Branch (1360:6): [True: 0, False: 530]
  ------------------
 1361|      0|    return true;
 1362|      0|  }
 1363|       |
 1364|       |#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR)
 1365|       |  if(*path == U_FILE_ALT_SEP_CHAR) {
 1366|       |    return true;
 1367|       |  }
 1368|       |#endif
 1369|       |
 1370|       |#if U_PLATFORM_USES_ONLY_WIN32_API
 1371|       |  if( (((path[0] >= 'A') && (path[0] <= 'Z')) ||
 1372|       |       ((path[0] >= 'a') && (path[0] <= 'z'))) &&
 1373|       |      path[1] == ':' ) {
 1374|       |    return true;
 1375|       |  }
 1376|       |#endif
 1377|       |
 1378|    530|  return false;
 1379|    530|}
u_getDataDirectory_78:
 1499|    952|u_getDataDirectory() {
 1500|    952|    umtx_initOnce(gDataDirInitOnce, &dataDirectoryInitFn);
 1501|    952|    return gDataDirectory;
 1502|    952|}
u_getTimeZoneFilesDirectory_78:
 1575|      3|u_getTimeZoneFilesDirectory(UErrorCode *status) {
 1576|      3|    umtx_initOnce(gTimeZoneFilesInitOnce, &TimeZoneDataDirInitFn, *status);
  ------------------
  |  |  122|      3|#define gTimeZoneFilesInitOnce U_ICU_ENTRY_POINT_RENAME(gTimeZoneFilesInitOnce)
  |  |  ------------------
  |  |  |  |  123|      3|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      3|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      3|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1577|      3|    return U_SUCCESS(*status) ? gTimeZoneFilesDirectory->data() : "";
  ------------------
  |  Branch (1577:12): [True: 3, False: 0]
  ------------------
 1578|      3|}
uprv_getDefaultLocaleID_78:
 1686|      1|{
 1687|      1|#if U_POSIX_LOCALE
 1688|       |/*
 1689|       |  Note that:  (a '!' means the ID is improper somehow)
 1690|       |     LC_ALL  ---->     default_loc          codepage
 1691|       |--------------------------------------------------------
 1692|       |     ab.CD             ab                   CD
 1693|       |     ab@CD             ab__CD               -
 1694|       |     ab@CD.EF          ab__CD               EF
 1695|       |
 1696|       |     ab_CD.EF@GH       ab_CD_GH             EF
 1697|       |
 1698|       |Some 'improper' ways to do the same as above:
 1699|       |  !  ab_CD@GH.EF       ab_CD_GH             EF
 1700|       |  !  ab_CD.EF@GH.IJ    ab_CD_GH             EF
 1701|       |  !  ab_CD@ZZ.EF@GH.IJ ab_CD_GH             EF
 1702|       |
 1703|       |     _CD@GH            _CD_GH               -
 1704|       |     _CD.EF@GH         _CD_GH               EF
 1705|       |
 1706|       |The variant cannot have dots in it.
 1707|       |The 'rightmost' variant (@xxx) wins.
 1708|       |The leftmost codepage (.xxx) wins.
 1709|       |*/
 1710|      1|    const char* posixID = uprv_getPOSIXIDForDefaultLocale();
 1711|       |
 1712|       |    /* Format: (no spaces)
 1713|       |    ll [ _CC ] [ . MM ] [ @ VV]
 1714|       |
 1715|       |      l = lang, C = ctry, M = charmap, V = variant
 1716|       |    */
 1717|       |
 1718|      1|    if (gCorrectedPOSIXLocale != nullptr) {
  ------------------
  |  Branch (1718:9): [True: 0, False: 1]
  ------------------
 1719|      0|        return gCorrectedPOSIXLocale;
 1720|      0|    }
 1721|       |
 1722|       |    // Copy the ID into owned memory.
 1723|       |    // Over-allocate in case we replace "C" with "en_US_POSIX" (+10), + null termination
 1724|      1|    char *correctedPOSIXLocale = static_cast<char *>(uprv_malloc(uprv_strlen(posixID) + 10 + 1));
  ------------------
  |  | 1524|      1|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  char *correctedPOSIXLocale = static_cast<char *>(uprv_malloc(uprv_strlen(posixID) + 10 + 1));
  ------------------
  |  |   37|      1|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1725|      1|    if (correctedPOSIXLocale == nullptr) {
  ------------------
  |  Branch (1725:9): [True: 0, False: 1]
  ------------------
 1726|      0|        return nullptr;
 1727|      0|    }
 1728|      1|    uprv_strcpy(correctedPOSIXLocale, posixID);
  ------------------
  |  |   36|      1|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1729|       |
 1730|      1|    char *limit;
 1731|      1|    if ((limit = uprv_strchr(correctedPOSIXLocale, '.')) != nullptr) {
  ------------------
  |  |   40|      1|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1731:9): [True: 0, False: 1]
  ------------------
 1732|      0|        *limit = 0;
 1733|      0|    }
 1734|      1|    if ((limit = uprv_strchr(correctedPOSIXLocale, '@')) != nullptr) {
  ------------------
  |  |   40|      1|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1734:9): [True: 0, False: 1]
  ------------------
 1735|      0|        *limit = 0;
 1736|      0|    }
 1737|       |
 1738|      1|    if ((uprv_strcmp("C", correctedPOSIXLocale) == 0) // no @ variant
  ------------------
  |  |   38|      1|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1738:9): [True: 0, False: 1]
  ------------------
 1739|      1|        || (uprv_strcmp("POSIX", correctedPOSIXLocale) == 0)) {
  ------------------
  |  |   38|      1|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1739:12): [True: 0, False: 1]
  ------------------
 1740|       |      // Raw input was C.* or POSIX.*, Give it a nice POSIX default value.
 1741|       |      // (The "C"/"POSIX" case is handled in uprv_getPOSIXIDForCategory())
 1742|      0|      uprv_strcpy(correctedPOSIXLocale, "en_US_POSIX");
  ------------------
  |  |   36|      0|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1743|      0|    }
 1744|       |
 1745|       |    /* Note that we scan the *uncorrected* ID. */
 1746|      1|    const char *p;
 1747|      1|    if ((p = uprv_strrchr(posixID, '@')) != nullptr) {
  ------------------
  |  |   42|      1|#define uprv_strrchr(s, c) U_STANDARD_CPP_NAMESPACE strrchr(s, c)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1747:9): [True: 0, False: 1]
  ------------------
 1748|      0|        p++;
 1749|       |
 1750|       |        /* Take care of any special cases here.. */
 1751|      0|        if (!uprv_strcmp(p, "nynorsk")) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1751:13): [True: 0, False: 0]
  ------------------
 1752|      0|            p = "NY";
 1753|       |            /* Don't worry about no__NY. In practice, it won't appear. */
 1754|      0|        }
 1755|       |
 1756|      0|        if (uprv_strchr(correctedPOSIXLocale,'_') == nullptr) {
  ------------------
  |  |   40|      0|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1756:13): [True: 0, False: 0]
  ------------------
 1757|      0|            uprv_strcat(correctedPOSIXLocale, "__"); /* aa@b -> aa__b (note this can make the new locale 1 char longer) */
  ------------------
  |  |   39|      0|#define uprv_strcat(dst, src) U_STANDARD_CPP_NAMESPACE strcat(dst, src)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1758|      0|        }
 1759|      0|        else {
 1760|      0|            uprv_strcat(correctedPOSIXLocale, "_"); /* aa_CC@b -> aa_CC_b */
  ------------------
  |  |   39|      0|#define uprv_strcat(dst, src) U_STANDARD_CPP_NAMESPACE strcat(dst, src)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1761|      0|        }
 1762|       |
 1763|      0|        const char *q;
 1764|      0|        if ((q = uprv_strchr(p, '.')) != nullptr) {
  ------------------
  |  |   40|      0|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1764:13): [True: 0, False: 0]
  ------------------
 1765|       |            /* How big will the resulting string be? */
 1766|      0|            int32_t len = (int32_t)(uprv_strlen(correctedPOSIXLocale) + (q-p));
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1767|      0|            uprv_strncat(correctedPOSIXLocale, p, q-p); // do not include charset
  ------------------
  |  |   45|      0|#define uprv_strncat(dst, src, n) U_STANDARD_CPP_NAMESPACE strncat(dst, src, n)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1768|      0|            correctedPOSIXLocale[len] = 0;
 1769|      0|        }
 1770|      0|        else {
 1771|       |            /* Anything following the @ sign */
 1772|      0|            uprv_strcat(correctedPOSIXLocale, p);
  ------------------
  |  |   39|      0|#define uprv_strcat(dst, src) U_STANDARD_CPP_NAMESPACE strcat(dst, src)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1773|      0|        }
 1774|       |
 1775|       |        /* Should there be a map from 'no@nynorsk' -> no_NO_NY here?
 1776|       |         * How about 'russian' -> 'ru'?
 1777|       |         * Many of the other locales using ISO codes will be handled by the
 1778|       |         * canonicalization functions in uloc_getDefault.
 1779|       |         */
 1780|      0|    }
 1781|       |
 1782|      1|    if (gCorrectedPOSIXLocale == nullptr) {
  ------------------
  |  Branch (1782:9): [True: 1, False: 0]
  ------------------
 1783|      1|        gCorrectedPOSIXLocale = correctedPOSIXLocale;
 1784|      1|        gCorrectedPOSIXLocaleHeapAllocated = true;
 1785|      1|        ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
  ------------------
  |  |  617|      1|#define ucln_common_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_common_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1786|      1|        correctedPOSIXLocale = nullptr;
 1787|      1|    }
 1788|      1|    posixID = gCorrectedPOSIXLocale;
 1789|       |
 1790|      1|    if (correctedPOSIXLocale != nullptr) {  /* Was already set - clean up. */
  ------------------
  |  Branch (1790:9): [True: 0, False: 1]
  ------------------
 1791|      0|        uprv_free(correctedPOSIXLocale);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1792|      0|    }
 1793|       |
 1794|      1|    return posixID;
 1795|       |
 1796|       |#elif U_PLATFORM_USES_ONLY_WIN32_API
 1797|       |#define POSIX_LOCALE_CAPACITY 64
 1798|       |    UErrorCode status = U_ZERO_ERROR;
 1799|       |    char *correctedPOSIXLocale = nullptr;
 1800|       |
 1801|       |    // If we have already figured this out just use the cached value
 1802|       |    if (gCorrectedPOSIXLocale != nullptr) {
 1803|       |        return gCorrectedPOSIXLocale;
 1804|       |    }
 1805|       |
 1806|       |    // No cached value, need to determine the current value
 1807|       |    static WCHAR windowsLocale[LOCALE_NAME_MAX_LENGTH] = {};
 1808|       |    int length = GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, LOCALE_SNAME, windowsLocale, LOCALE_NAME_MAX_LENGTH);
 1809|       |
 1810|       |    // Now we should have a Windows locale name that needs converted to the POSIX style.
 1811|       |    if (length > 0) // If length is 0, then the GetLocaleInfoEx failed.
 1812|       |    {
 1813|       |        // First we need to go from UTF-16 to char (and also convert from _ to - while we're at it.)
 1814|       |        char modifiedWindowsLocale[LOCALE_NAME_MAX_LENGTH] = {};
 1815|       |
 1816|       |        int32_t i;
 1817|       |        for (i = 0; i < UPRV_LENGTHOF(modifiedWindowsLocale); i++)
 1818|       |        {
 1819|       |            if (windowsLocale[i] == '_')
 1820|       |            {
 1821|       |                modifiedWindowsLocale[i] = '-';
 1822|       |            }
 1823|       |            else
 1824|       |            {
 1825|       |                modifiedWindowsLocale[i] = static_cast<char>(windowsLocale[i]);
 1826|       |            }
 1827|       |
 1828|       |            if (modifiedWindowsLocale[i] == '\0')
 1829|       |            {
 1830|       |                break;
 1831|       |            }
 1832|       |        }
 1833|       |
 1834|       |        if (i >= UPRV_LENGTHOF(modifiedWindowsLocale))
 1835|       |        {
 1836|       |            // Ran out of room, can't really happen, maybe we'll be lucky about a matching
 1837|       |            // locale when tags are dropped
 1838|       |            modifiedWindowsLocale[UPRV_LENGTHOF(modifiedWindowsLocale) - 1] = '\0';
 1839|       |        }
 1840|       |
 1841|       |        // Now normalize the resulting name
 1842|       |        correctedPOSIXLocale = static_cast<char *>(uprv_malloc(POSIX_LOCALE_CAPACITY + 1));
 1843|       |        /* TODO: Should we just exit on memory allocation failure? */
 1844|       |        if (correctedPOSIXLocale)
 1845|       |        {
 1846|       |            int32_t posixLen = uloc_canonicalize(modifiedWindowsLocale, correctedPOSIXLocale, POSIX_LOCALE_CAPACITY, &status);
 1847|       |            if (U_SUCCESS(status))
 1848|       |            {
 1849|       |                *(correctedPOSIXLocale + posixLen) = 0;
 1850|       |                gCorrectedPOSIXLocale = correctedPOSIXLocale;
 1851|       |                gCorrectedPOSIXLocaleHeapAllocated = true;
 1852|       |                ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
 1853|       |            }
 1854|       |            else
 1855|       |            {
 1856|       |                uprv_free(correctedPOSIXLocale);
 1857|       |            }
 1858|       |        }
 1859|       |    }
 1860|       |
 1861|       |    // If unable to find a locale we can agree upon, use en-US by default
 1862|       |    if (gCorrectedPOSIXLocale == nullptr) {
 1863|       |        gCorrectedPOSIXLocale = "en_US";
 1864|       |    }
 1865|       |    return gCorrectedPOSIXLocale;
 1866|       |
 1867|       |#elif U_PLATFORM == U_PF_OS400
 1868|       |    /* locales are process scoped and are by definition thread safe */
 1869|       |    static char correctedLocale[64];
 1870|       |    const  char *localeID = getenv("LC_ALL");
 1871|       |           char *p;
 1872|       |
 1873|       |    if (localeID == nullptr)
 1874|       |        localeID = getenv("LANG");
 1875|       |    if (localeID == nullptr)
 1876|       |        localeID = setlocale(LC_ALL, nullptr);
 1877|       |    /* Make sure we have something... */
 1878|       |    if (localeID == nullptr)
 1879|       |        return "en_US_POSIX";
 1880|       |
 1881|       |    /* Extract the locale name from the path. */
 1882|       |    if((p = uprv_strrchr(localeID, '/')) != nullptr)
 1883|       |    {
 1884|       |        /* Increment p to start of locale name. */
 1885|       |        p++;
 1886|       |        localeID = p;
 1887|       |    }
 1888|       |
 1889|       |    /* Copy to work location. */
 1890|       |    uprv_strcpy(correctedLocale, localeID);
 1891|       |
 1892|       |    /* Strip off the '.locale' extension. */
 1893|       |    if((p = uprv_strchr(correctedLocale, '.')) != nullptr) {
 1894|       |        *p = 0;
 1895|       |    }
 1896|       |
 1897|       |    /* Upper case the locale name. */
 1898|       |    T_CString_toUpperCase(correctedLocale);
 1899|       |
 1900|       |    /* See if we are using the POSIX locale.  Any of the
 1901|       |    * following are equivalent and use the same QLGPGCMA
 1902|       |    * (POSIX) locale.
 1903|       |    * QLGPGCMA2 means UCS2
 1904|       |    * QLGPGCMA_4 means UTF-32
 1905|       |    * QLGPGCMA_8 means UTF-8
 1906|       |    */
 1907|       |    if ((uprv_strcmp("C", correctedLocale) == 0) ||
 1908|       |        (uprv_strcmp("POSIX", correctedLocale) == 0) ||
 1909|       |        (uprv_strncmp("QLGPGCMA", correctedLocale, 8) == 0))
 1910|       |    {
 1911|       |        uprv_strcpy(correctedLocale, "en_US_POSIX");
 1912|       |    }
 1913|       |    else
 1914|       |    {
 1915|       |        int16_t LocaleLen;
 1916|       |
 1917|       |        /* Lower case the lang portion. */
 1918|       |        for(p = correctedLocale; *p != 0 && *p != '_'; p++)
 1919|       |        {
 1920|       |            *p = uprv_tolower(*p);
 1921|       |        }
 1922|       |
 1923|       |        /* Adjust for Euro.  After '_E' add 'URO'. */
 1924|       |        LocaleLen = uprv_strlen(correctedLocale);
 1925|       |        if (correctedLocale[LocaleLen - 2] == '_' &&
 1926|       |            correctedLocale[LocaleLen - 1] == 'E')
 1927|       |        {
 1928|       |            uprv_strcat(correctedLocale, "URO");
 1929|       |        }
 1930|       |
 1931|       |        /* If using Lotus-based locale then convert to
 1932|       |         * equivalent non Lotus.
 1933|       |         */
 1934|       |        else if (correctedLocale[LocaleLen - 2] == '_' &&
 1935|       |            correctedLocale[LocaleLen - 1] == 'L')
 1936|       |        {
 1937|       |            correctedLocale[LocaleLen - 2] = 0;
 1938|       |        }
 1939|       |
 1940|       |        /* There are separate simplified and traditional
 1941|       |         * locales called zh_HK_S and zh_HK_T.
 1942|       |         */
 1943|       |        else if (uprv_strncmp(correctedLocale, "zh_HK", 5) == 0)
 1944|       |        {
 1945|       |            uprv_strcpy(correctedLocale, "zh_HK");
 1946|       |        }
 1947|       |
 1948|       |        /* A special zh_CN_GBK locale...
 1949|       |        */
 1950|       |        else if (uprv_strcmp(correctedLocale, "zh_CN_GBK") == 0)
 1951|       |        {
 1952|       |            uprv_strcpy(correctedLocale, "zh_CN");
 1953|       |        }
 1954|       |
 1955|       |    }
 1956|       |
 1957|       |    return correctedLocale;
 1958|       |#endif
 1959|       |
 1960|      1|}
putil.cpp:_ZL14isValidOlsonIDPKc:
  726|      1|static UBool isValidOlsonID(const char *id) {
  727|      1|    int32_t idx = 0;
  728|      1|    int32_t idxMax = 0;
  729|       |
  730|       |    /* Determine if this is something like Iceland (Olson ID)
  731|       |    or AST4ADT (non-Olson ID) */
  732|      8|    while (id[idx] && isNonDigit(id[idx]) && id[idx] != ',') {
  ------------------
  |  |  724|     15|#define isNonDigit(ch) (ch < '0' || '9' < ch)
  |  |  ------------------
  |  |  |  Branch (724:25): [True: 1, False: 6]
  |  |  |  Branch (724:37): [True: 6, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (732:12): [True: 7, False: 1]
  |  Branch (732:46): [True: 7, False: 0]
  ------------------
  733|      7|        idx++;
  734|      7|    }
  735|       |
  736|       |    /* Allow at maximum 2 numbers at the end of the id to support zone id's
  737|       |    like GMT+11. */
  738|      1|    idxMax = idx + 2;
  739|      1|    while (id[idx] && isDigit(id[idx]) && idx < idxMax) {
  ------------------
  |  |  725|      1|#define isDigit(ch) ('0' <= ch && ch <= '9')
  |  |  ------------------
  |  |  |  Branch (725:22): [True: 0, False: 0]
  |  |  |  Branch (725:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (739:12): [True: 0, False: 1]
  |  Branch (739:43): [True: 0, False: 0]
  ------------------
  740|      0|        idx++;
  741|      0|    }
  742|       |
  743|       |    /* If we went through the whole string, then it might be okay.
  744|       |    The timezone is sometimes set to "CST-7CDT", "CST6CDT5,J129,J131/19:30",
  745|       |    "GRNLNDST3GRNLNDDT" or similar, so we cannot use it.
  746|       |    The rest of the time it could be an Olson ID. George */
  747|      1|    return id[idx] == 0
  ------------------
  |  Branch (747:12): [True: 1, False: 0]
  ------------------
  748|      1|        || uprv_strcmp(id, "PST8PDT") == 0
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (748:12): [True: 0, False: 0]
  ------------------
  749|      1|        || uprv_strcmp(id, "MST7MDT") == 0
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (749:12): [True: 0, False: 0]
  ------------------
  750|      1|        || uprv_strcmp(id, "CST6CDT") == 0
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (750:12): [True: 0, False: 0]
  ------------------
  751|      1|        || uprv_strcmp(id, "EST5EDT") == 0;
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (751:12): [True: 0, False: 0]
  ------------------
  752|      1|}
putil.cpp:_ZL16skipZoneIDPrefixPPKc:
  766|      1|static void skipZoneIDPrefix(const char** id) {
  767|      1|    if (uprv_strncmp(*id, "posix/", 6) == 0
  ------------------
  |  |   44|      1|#define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (767:9): [True: 0, False: 1]
  ------------------
  768|      1|        || uprv_strncmp(*id, "right/", 6) == 0)
  ------------------
  |  |   44|      1|#define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (768:12): [True: 0, False: 1]
  ------------------
  769|      0|    {
  770|      0|        *id += 6;
  771|      0|    }
  772|      1|}
putil.cpp:_ZL19dataDirectoryInitFnv:
 1424|      1|static void U_CALLCONV dataDirectoryInitFn() {
 1425|       |    /* If we already have the directory, then return immediately. Will happen if user called
 1426|       |     * u_setDataDirectory().
 1427|       |     */
 1428|      1|    if (gDataDirectory) {
  ------------------
  |  Branch (1428:9): [True: 0, False: 1]
  ------------------
 1429|      0|        return;
 1430|      0|    }
 1431|       |
 1432|      1|    const char *path = nullptr;
 1433|       |#if defined(ICU_DATA_DIR_PREFIX_ENV_VAR)
 1434|       |    char datadir_path_buffer[PATH_MAX];
 1435|       |#endif
 1436|       |
 1437|       |    /*
 1438|       |    When ICU_NO_USER_DATA_OVERRIDE is defined, users aren't allowed to
 1439|       |    override ICU's data with the ICU_DATA environment variable. This prevents
 1440|       |    problems where multiple custom copies of ICU's specific version of data
 1441|       |    are installed on a system. Either the application must define the data
 1442|       |    directory with u_setDataDirectory, define ICU_DATA_DIR when compiling
 1443|       |    ICU, set the data with udata_setCommonData or trust that all of the
 1444|       |    required data is contained in ICU's data library that contains
 1445|       |    the entry point defined by U_ICUDATA_ENTRY_POINT.
 1446|       |
 1447|       |    There may also be some platforms where environment variables
 1448|       |    are not allowed.
 1449|       |    */
 1450|      1|#   if !defined(ICU_NO_USER_DATA_OVERRIDE) && !UCONFIG_NO_FILE_IO
 1451|       |    /* First try to get the environment variable */
 1452|      1|#     if U_PLATFORM_HAS_WINUWP_API == 0  // Windows UWP does not support getenv
 1453|      1|        path=getenv("ICU_DATA");
 1454|      1|#     endif
 1455|      1|#   endif
 1456|       |
 1457|       |    /* ICU_DATA_DIR may be set as a compile option.
 1458|       |     * U_ICU_DATA_DEFAULT_DIR is provided and is set by ICU at compile time
 1459|       |     * and is used only when data is built in archive mode eliminating the need
 1460|       |     * for ICU_DATA_DIR to be set. U_ICU_DATA_DEFAULT_DIR is set to the installation
 1461|       |     * directory of the data dat file. Users should use ICU_DATA_DIR if they want to
 1462|       |     * set their own path.
 1463|       |     */
 1464|       |#if defined(ICU_DATA_DIR) || defined(U_ICU_DATA_DEFAULT_DIR)
 1465|       |    if(path==nullptr || *path==0) {
 1466|       |# if defined(ICU_DATA_DIR_PREFIX_ENV_VAR)
 1467|       |        const char *prefix = getenv(ICU_DATA_DIR_PREFIX_ENV_VAR);
 1468|       |# endif
 1469|       |# ifdef ICU_DATA_DIR
 1470|       |        path=ICU_DATA_DIR;
 1471|       |# else
 1472|       |        path=U_ICU_DATA_DEFAULT_DIR;
 1473|       |# endif
 1474|       |# if defined(ICU_DATA_DIR_PREFIX_ENV_VAR)
 1475|       |        if (prefix != nullptr) {
 1476|       |            snprintf(datadir_path_buffer, sizeof(datadir_path_buffer), "%s%s", prefix, path);
 1477|       |            path=datadir_path_buffer;
 1478|       |        }
 1479|       |# endif
 1480|       |    }
 1481|       |#endif
 1482|       |
 1483|       |#if defined(ICU_DATA_DIR_WINDOWS)
 1484|       |    char datadir_path_buffer[MAX_PATH];
 1485|       |    if (getIcuDataDirectoryUnderWindowsDirectory(datadir_path_buffer, UPRV_LENGTHOF(datadir_path_buffer))) {
 1486|       |        path = datadir_path_buffer;
 1487|       |    }
 1488|       |#endif
 1489|       |
 1490|      1|    if(path==nullptr) {
  ------------------
  |  Branch (1490:8): [True: 1, False: 0]
  ------------------
 1491|       |        /* It looks really bad, set it to something. */
 1492|      1|        path = "";
 1493|      1|    }
 1494|       |
 1495|      1|    u_setDataDirectory(path);
  ------------------
  |  |  347|      1|#define u_setDataDirectory U_ICU_ENTRY_POINT_RENAME(u_setDataDirectory)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1496|      1|}
putil.cpp:_ZL21TimeZoneDataDirInitFnR10UErrorCode:
 1521|      1|static void U_CALLCONV TimeZoneDataDirInitFn(UErrorCode &status) {
 1522|      1|    U_ASSERT(gTimeZoneFilesDirectory == nullptr);
  ------------------
  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  ------------------
 1523|      1|    ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
  ------------------
  |  |  617|      1|#define ucln_common_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_common_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1524|      1|    gTimeZoneFilesDirectory = new CharString();
 1525|      1|    if (gTimeZoneFilesDirectory == nullptr) {
  ------------------
  |  Branch (1525:9): [True: 0, False: 1]
  ------------------
 1526|      0|        status = U_MEMORY_ALLOCATION_ERROR;
 1527|      0|        return;
 1528|      0|    }
 1529|       |
 1530|      1|    const char *dir = "";
 1531|       |
 1532|       |#if defined(ICU_TIMEZONE_FILES_DIR_PREFIX_ENV_VAR)
 1533|       |    char timezonefilesdir_path_buffer[PATH_MAX];
 1534|       |    const char *prefix = getenv(ICU_TIMEZONE_FILES_DIR_PREFIX_ENV_VAR);
 1535|       |#endif
 1536|       |
 1537|       |#if U_PLATFORM_HAS_WINUWP_API == 1
 1538|       |// The UWP version does not support the environment variable setting.
 1539|       |
 1540|       |# if defined(ICU_DATA_DIR_WINDOWS)
 1541|       |    // When using the Windows system data, we can possibly pick up time zone data from the Windows directory.
 1542|       |    char datadir_path_buffer[MAX_PATH];
 1543|       |    if (getIcuDataDirectoryUnderWindowsDirectory(datadir_path_buffer, UPRV_LENGTHOF(datadir_path_buffer))) {
 1544|       |        dir = datadir_path_buffer;
 1545|       |    }
 1546|       |# endif
 1547|       |
 1548|       |#else
 1549|      1|    dir = getenv("ICU_TIMEZONE_FILES_DIR");
 1550|      1|#endif // U_PLATFORM_HAS_WINUWP_API
 1551|       |
 1552|       |#if defined(U_TIMEZONE_FILES_DIR)
 1553|       |    if (dir == nullptr) {
 1554|       |        // Build time configuration setting.
 1555|       |        dir = TO_STRING(U_TIMEZONE_FILES_DIR);
 1556|       |    }
 1557|       |#endif
 1558|       |
 1559|      1|    if (dir == nullptr) {
  ------------------
  |  Branch (1559:9): [True: 1, False: 0]
  ------------------
 1560|      1|        dir = "";
 1561|      1|    }
 1562|       |
 1563|       |#if defined(ICU_TIMEZONE_FILES_DIR_PREFIX_ENV_VAR)
 1564|       |    if (prefix != nullptr) {
 1565|       |        snprintf(timezonefilesdir_path_buffer, sizeof(timezonefilesdir_path_buffer), "%s%s", prefix, dir);
 1566|       |        dir = timezonefilesdir_path_buffer;
 1567|       |    }
 1568|       |#endif
 1569|       |
 1570|      1|    setTimeZoneFilesDir(dir, status);
 1571|      1|}
putil.cpp:_ZL19setTimeZoneFilesDirPKcR10UErrorCode:
 1504|      1|static void setTimeZoneFilesDir(const char *path, UErrorCode &status) {
 1505|      1|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1505:9): [True: 0, False: 1]
  ------------------
 1506|      0|        return;
 1507|      0|    }
 1508|      1|    gTimeZoneFilesDirectory->clear();
 1509|      1|    gTimeZoneFilesDirectory->append(path, status);
 1510|       |#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR)
 1511|       |    char *p = gTimeZoneFilesDirectory->data();
 1512|       |    while ((p = uprv_strchr(p, U_FILE_ALT_SEP_CHAR)) != nullptr) {
 1513|       |        *p = U_FILE_SEP_CHAR;
 1514|       |    }
 1515|       |#endif
 1516|      1|}
putil.cpp:_ZL31uprv_getPOSIXIDForDefaultLocalev:
 1660|      1|{
 1661|      1|    static const char* posixID = nullptr;
 1662|      1|    if (posixID == nullptr) {
  ------------------
  |  Branch (1662:9): [True: 1, False: 0]
  ------------------
 1663|      1|        posixID = uprv_getPOSIXIDForCategory(LC_MESSAGES);
 1664|      1|    }
 1665|      1|    return posixID;
 1666|      1|}
putil.cpp:_ZL26uprv_getPOSIXIDForCategoryi:
 1597|      1|{
 1598|      1|    const char* posixID = nullptr;
 1599|      1|    if (category == LC_MESSAGES || category == LC_CTYPE) {
  ------------------
  |  Branch (1599:9): [True: 1, False: 0]
  |  Branch (1599:36): [True: 0, False: 0]
  ------------------
 1600|       |        /*
 1601|       |        * On Solaris two different calls to setlocale can result in
 1602|       |        * different values. Only get this value once.
 1603|       |        *
 1604|       |        * We must check this first because an application can set this.
 1605|       |        *
 1606|       |        * LC_ALL can't be used because it's platform dependent. The LANG
 1607|       |        * environment variable seems to affect LC_CTYPE variable by default.
 1608|       |        * Here is what setlocale(LC_ALL, nullptr) can return.
 1609|       |        * HPUX can return 'C C C C C C C'
 1610|       |        * Solaris can return /en_US/C/C/C/C/C on the second try.
 1611|       |        * Linux can return LC_CTYPE=C;LC_NUMERIC=C;...
 1612|       |        *
 1613|       |        * The default codepage detection also needs to use LC_CTYPE.
 1614|       |        *
 1615|       |        * Do not call setlocale(LC_*, "")! Using an empty string instead
 1616|       |        * of nullptr, will modify the libc behavior.
 1617|       |        */
 1618|      1|        posixID = setlocale(category, nullptr);
 1619|      1|        if ((posixID == nullptr)
  ------------------
  |  Branch (1619:13): [True: 0, False: 1]
  ------------------
 1620|      1|            || (uprv_strcmp("C", posixID) == 0)
  ------------------
  |  |   38|      1|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1620:16): [True: 1, False: 0]
  ------------------
 1621|      1|            || (uprv_strcmp("POSIX", posixID) == 0))
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1621:16): [True: 0, False: 0]
  ------------------
 1622|      1|        {
 1623|       |            /* Maybe we got some garbage.  Try something more reasonable */
 1624|      1|            posixID = getenv("LC_ALL");
 1625|       |            /* Solaris speaks POSIX -  See IEEE Std 1003.1-2008
 1626|       |             * This is needed to properly handle empty env. variables
 1627|       |             */
 1628|       |#if U_PLATFORM == U_PF_SOLARIS
 1629|       |            if ((posixID == 0) || (posixID[0] == '\0')) {
 1630|       |                posixID = getenv(category == LC_MESSAGES ? "LC_MESSAGES" : "LC_CTYPE");
 1631|       |                if ((posixID == 0) || (posixID[0] == '\0')) {
 1632|       |#else
 1633|      1|            if (posixID == nullptr) {
  ------------------
  |  Branch (1633:17): [True: 1, False: 0]
  ------------------
 1634|      1|                posixID = getenv(category == LC_MESSAGES ? "LC_MESSAGES" : "LC_CTYPE");
  ------------------
  |  Branch (1634:34): [True: 1, False: 0]
  ------------------
 1635|      1|                if (posixID == nullptr) {
  ------------------
  |  Branch (1635:21): [True: 1, False: 0]
  ------------------
 1636|      1|#endif
 1637|      1|                    posixID = getenv("LANG");
 1638|      1|                }
 1639|      1|            }
 1640|      1|        }
 1641|      1|    }
 1642|      1|    if ((posixID == nullptr)
  ------------------
  |  Branch (1642:9): [True: 1, False: 0]
  ------------------
 1643|      1|        || (uprv_strcmp("C", posixID) == 0)
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1643:12): [True: 0, False: 0]
  ------------------
 1644|      1|        || (uprv_strcmp("POSIX", posixID) == 0))
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1644:12): [True: 0, False: 0]
  ------------------
 1645|      1|    {
 1646|       |        /* Nothing worked.  Give it a nice POSIX default value. */
 1647|      1|        posixID = "en_US_POSIX";
 1648|       |        // Note: this test will not catch 'C.UTF-8',
 1649|       |        // that will be handled in uprv_getDefaultLocaleID().
 1650|       |        // Leave this mapping here for the uprv_getPOSIXIDForDefaultCodepage()
 1651|       |        // caller which expects to see "en_US_POSIX" in many branches.
 1652|      1|    }
 1653|      1|    return posixID;
 1654|      1|}

_ZN6icu_7813ResourceValueD2Ev:
   18|    995|ResourceValue::~ResourceValue() {}
_ZN6icu_7812ResourceSinkD2Ev:
   20|   234k|ResourceSink::~ResourceSink() {}

_ZN6icu_7812ResourceSinkC2Ev:
  266|   234k|    ResourceSink() {}
_ZNK6icu_7813ResourceArray7getSizeEv:
   59|  12.0k|    int32_t getSize() const { return length; }
_ZN6icu_7813ResourceArrayC2EPKtPKjiRKNS_14ResourceTracerE:
   53|  12.0k|            items16(i16), items32(i32), length(len),
   54|  12.0k|            fTraceInfo(traceInfo) {}
_ZN6icu_7813ResourceTableC2EPKtPKiS2_PKjiRKNS_14ResourceTracerE:
   89|   115k|            keys16(k16), keys32(k32), items16(i16), items32(i32), length(len),
   90|   115k|            fTraceInfo(traceInfo) {}
_ZNK6icu_7813ResourceTable7getSizeEv:
   95|      2|    int32_t getSize() const { return length; }
_ZN6icu_7813ResourceValueC2Ev:
  254|    995|    ResourceValue() {}

_ZN6icu_7814ResourceTracerC2Ev:
  116|    995|    ResourceTracer() {}
_ZN6icu_7814ResourceTracerC2EPKv:
  118|  1.25M|    ResourceTracer(const void*) {}
_ZN6icu_7814ResourceTracerC2EPKvPKc:
  120|  1.99k|    ResourceTracer(const void*, const char*) {}
_ZN6icu_7814ResourceTracerC2EPKvi:
  122|  2.13M|    ResourceTracer(const void*, int32_t) {}
_ZN6icu_7814ResourceTracerC2ERKS0_PKc:
  124|   289k|    ResourceTracer(const ResourceTracer&, const char*) {}
_ZNK6icu_7814ResourceTracer5traceEPKc:
  128|  2.90M|    void trace(const char*) const {}
_ZNK6icu_7814ResourceTracer9traceOpenEv:
  130|   621k|    void traceOpen() const {}
_ZNK6icu_7814ResourceTracer10maybeTraceEPKc:
  132|    835|    void maybeTrace(const char*) const {}
_ZN6icu_7810FileTracer9traceOpenEPKcS2_S2_:
  140|    951|    static void traceOpen(const char*, const char*, const char*) {}

_ZN6icu_7811StringPieceC2EPKc:
   19|   467k|    : ptr_(str), length_((str == nullptr) ? 0 : static_cast<int32_t>(uprv_strlen(str))) { }
  ------------------
  |  |   37|   467k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|   467k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (19:26): [True: 0, False: 467k]
  ------------------

uprv_sortArray_78:
  258|    717|               UBool sortStable, UErrorCode *pErrorCode) {
  259|    717|    if(pErrorCode==nullptr || U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (259:8): [True: 0, False: 717]
  |  Branch (259:31): [True: 0, False: 717]
  ------------------
  260|      0|        return;
  261|      0|    }
  262|    717|    if((length>0 && array==nullptr) || length<0 || itemSize<=0 || cmp==nullptr) {
  ------------------
  |  Branch (262:9): [True: 1, False: 716]
  |  Branch (262:21): [True: 0, False: 1]
  |  Branch (262:40): [True: 0, False: 717]
  |  Branch (262:52): [True: 0, False: 717]
  |  Branch (262:67): [True: 0, False: 717]
  ------------------
  263|      0|        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
  264|      0|        return;
  265|      0|    }
  266|       |
  267|    717|    if(length<=1) {
  ------------------
  |  Branch (267:8): [True: 717, False: 0]
  ------------------
  268|    717|        return;
  269|    717|    } else if(length<MIN_QSORT || sortStable) {
  ------------------
  |  Branch (269:15): [True: 0, False: 0]
  |  Branch (269:35): [True: 0, False: 0]
  ------------------
  270|      0|        insertionSort((char *)array, length, itemSize, cmp, context, pErrorCode);
  271|      0|    } else {
  272|      0|        quickSort((char *)array, length, itemSize, cmp, context, pErrorCode);
  273|      0|    }
  274|    717|}

ucln_common_registerCleanup_78:
   67|     12|{
   68|       |    // Thread safety messiness: From ticket 10295, calls to registerCleanup() may occur
   69|       |    // concurrently. Although such cases should be storing the same value, they raise errors
   70|       |    // from the thread sanity checker. Doing the store within a mutex avoids those.
   71|       |    // BUT that can trigger a recursive entry into std::call_once() in umutex.cpp when this code,
   72|       |    // running from the call_once function, tries to grab the ICU global mutex, which
   73|       |    // re-enters the mutex init path. So, work-around by special casing UCLN_COMMON_MUTEX, not
   74|       |    // using the ICU global mutex for it.
   75|       |    //
   76|       |    // No other point in ICU uses std::call_once().
   77|       |
   78|     12|    U_ASSERT(UCLN_COMMON_START < type && type < UCLN_COMMON_COUNT);
  ------------------
  |  |   35|     12|#   define U_ASSERT(exp) (void)0
  ------------------
   79|     12|    if (type == UCLN_COMMON_MUTEX) {
  ------------------
  |  Branch (79:9): [True: 1, False: 11]
  ------------------
   80|      1|        gCommonCleanupFunctions[type] = func;
   81|     11|    } else if (UCLN_COMMON_START < type && type < UCLN_COMMON_COUNT)  {
  ------------------
  |  Branch (81:16): [True: 11, False: 0]
  |  Branch (81:44): [True: 11, False: 0]
  ------------------
   82|     11|        icu::Mutex m;     // See ticket 10295 for discussion.
   83|     11|        gCommonCleanupFunctions[type] = func;
   84|     11|    }
   85|       |#if !UCLN_NO_AUTO_CLEANUP && (defined(UCLN_AUTO_ATEXIT) || defined(UCLN_AUTO_LOCAL))
   86|       |    ucln_registerAutomaticCleanup();
   87|       |#endif
   88|     12|}
ucln_registerCleanup_78:
   97|      7|{
   98|      7|    U_ASSERT(UCLN_START < type && type < UCLN_COMMON);
  ------------------
  |  |   35|      7|#   define U_ASSERT(exp) (void)0
  ------------------
   99|      7|    if (UCLN_START < type && type < UCLN_COMMON)
  ------------------
  |  Branch (99:9): [True: 7, False: 0]
  |  Branch (99:30): [True: 7, False: 0]
  ------------------
  100|      7|    {
  101|      7|        gLibCleanupFunctions[type] = func;
  102|      7|    }
  103|      7|}

udata_getHeaderSize_78:
   36|    677|udata_getHeaderSize(const DataHeader *udh) {
   37|    677|    if(udh==nullptr) {
  ------------------
  |  Branch (37:8): [True: 0, False: 677]
  ------------------
   38|      0|        return 0;
   39|    677|    } else if(udh->info.isBigEndian==U_IS_BIG_ENDIAN) {
  ------------------
  |  |  353|    677|#   define U_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
  ------------------
  |  Branch (39:15): [True: 677, False: 0]
  ------------------
   40|       |        /* same endianness */
   41|    677|        return udh->dataHeader.headerSize;
   42|    677|    } else {
   43|       |        /* opposite endianness */
   44|      0|        uint16_t x=udh->dataHeader.headerSize;
   45|      0|        return (uint16_t)((x<<8)|(x>>8));
   46|      0|    }
   47|    677|}
udata_checkCommonData_78:
  326|      1|U_CFUNC void udata_checkCommonData(UDataMemory *udm, UErrorCode *err) {
  327|      1|    if (U_FAILURE(*err)) {
  ------------------
  |  Branch (327:9): [True: 0, False: 1]
  ------------------
  328|      0|        return;
  329|      0|    }
  330|       |
  331|      1|    if(udm==nullptr || udm->pHeader==nullptr) {
  ------------------
  |  Branch (331:8): [True: 0, False: 1]
  |  Branch (331:24): [True: 0, False: 1]
  ------------------
  332|      0|      *err=U_INVALID_FORMAT_ERROR;
  333|      1|    } else if(!(udm->pHeader->dataHeader.magic1==0xda &&
  ------------------
  |  Branch (333:17): [True: 1, False: 0]
  ------------------
  334|      1|        udm->pHeader->dataHeader.magic2==0x27 &&
  ------------------
  |  Branch (334:9): [True: 1, False: 0]
  ------------------
  335|      1|        udm->pHeader->info.isBigEndian==U_IS_BIG_ENDIAN &&
  ------------------
  |  |  353|      2|#   define U_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
  ------------------
  |  Branch (335:9): [True: 1, False: 0]
  ------------------
  336|      1|        udm->pHeader->info.charsetFamily==U_CHARSET_FAMILY)
  ------------------
  |  |  588|      1|#   define U_CHARSET_FAMILY U_ASCII_FAMILY
  |  |  ------------------
  |  |  |  |  531|      1|#define U_ASCII_FAMILY 0
  |  |  ------------------
  ------------------
  |  Branch (336:9): [True: 1, False: 0]
  ------------------
  337|      1|        ) {
  338|       |        /* header not valid */
  339|      0|        *err=U_INVALID_FORMAT_ERROR;
  340|      0|    }
  341|      1|    else if (udm->pHeader->info.dataFormat[0]==0x43 &&
  ------------------
  |  Branch (341:14): [True: 1, False: 0]
  ------------------
  342|      1|        udm->pHeader->info.dataFormat[1]==0x6d &&
  ------------------
  |  Branch (342:9): [True: 1, False: 0]
  ------------------
  343|      1|        udm->pHeader->info.dataFormat[2]==0x6e &&
  ------------------
  |  Branch (343:9): [True: 1, False: 0]
  ------------------
  344|      1|        udm->pHeader->info.dataFormat[3]==0x44 &&
  ------------------
  |  Branch (344:9): [True: 1, False: 0]
  ------------------
  345|      1|        udm->pHeader->info.formatVersion[0]==1
  ------------------
  |  Branch (345:9): [True: 1, False: 0]
  ------------------
  346|      1|        ) {
  347|       |        /* dataFormat="CmnD" */
  348|      1|        udm->vFuncs = &CmnDFuncs;
  349|      1|        udm->toc=(const char *)udm->pHeader+udata_getHeaderSize(udm->pHeader);
  ------------------
  |  |  887|      1|#define udata_getHeaderSize U_ICU_ENTRY_POINT_RENAME(udata_getHeaderSize)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  350|      1|    }
  351|      0|    else if(udm->pHeader->info.dataFormat[0]==0x54 &&
  ------------------
  |  Branch (351:13): [True: 0, False: 0]
  ------------------
  352|      0|        udm->pHeader->info.dataFormat[1]==0x6f &&
  ------------------
  |  Branch (352:9): [True: 0, False: 0]
  ------------------
  353|      0|        udm->pHeader->info.dataFormat[2]==0x43 &&
  ------------------
  |  Branch (353:9): [True: 0, False: 0]
  ------------------
  354|      0|        udm->pHeader->info.dataFormat[3]==0x50 &&
  ------------------
  |  Branch (354:9): [True: 0, False: 0]
  ------------------
  355|      0|        udm->pHeader->info.formatVersion[0]==1
  ------------------
  |  Branch (355:9): [True: 0, False: 0]
  ------------------
  356|      0|        ) {
  357|       |        /* dataFormat="ToCP" */
  358|      0|        udm->vFuncs = &ToCPFuncs;
  359|      0|        udm->toc=(const char *)udm->pHeader+udata_getHeaderSize(udm->pHeader);
  ------------------
  |  |  887|      0|#define udata_getHeaderSize U_ICU_ENTRY_POINT_RENAME(udata_getHeaderSize)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  360|      0|    }
  361|      0|    else {
  362|       |        /* dataFormat not recognized */
  363|      0|        *err=U_INVALID_FORMAT_ERROR;
  364|      0|    }
  365|       |
  366|      1|    if (U_FAILURE(*err)) {
  ------------------
  |  Branch (366:9): [True: 0, False: 1]
  ------------------
  367|       |        /* If the data is no good and we memory-mapped it ourselves,
  368|       |         *  close the memory mapping so it doesn't leak.  Note that this has
  369|       |         *  no effect on non-memory mapped data, other than clearing fields in udm.
  370|       |         */
  371|      0|        udata_close(udm);
  ------------------
  |  |  885|      0|#define udata_close U_ICU_ENTRY_POINT_RENAME(udata_close)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  372|      0|    }
  373|      1|}
ucmndata.cpp:_ZL17offsetTOCLookupFnPK11UDataMemoryPKcPiP10UErrorCode:
  229|    951|                  UErrorCode *pErrorCode) {
  230|    951|    (void)pErrorCode;
  231|    951|    const UDataOffsetTOC  *toc = (UDataOffsetTOC *)pData->toc;
  232|    951|    if(toc!=nullptr) {
  ------------------
  |  Branch (232:8): [True: 951, False: 0]
  ------------------
  233|    951|        const char *base=(const char *)toc;
  234|    951|        int32_t number, count=(int32_t)toc->count;
  235|       |
  236|       |        /* perform a binary search for the data in the common data's table of contents */
  237|       |#if defined (UDATA_DEBUG_DUMP)
  238|       |        /* list the contents of the TOC each time .. not recommended */
  239|       |        for(number=0; number<count; ++number) {
  240|       |            fprintf(stderr, "\tx%d: %s\n", number, &base[toc->entry[number].nameOffset]);
  241|       |        }
  242|       |#endif
  243|    951|        number=offsetTOCPrefixBinarySearch(tocEntryName, base, toc->entry, count);
  244|    951|        if(number>=0) {
  ------------------
  |  Branch (244:12): [True: 676, False: 275]
  ------------------
  245|       |            /* found it */
  246|    676|            const UDataOffsetTOCEntry *entry=toc->entry+number;
  247|       |#ifdef UDATA_DEBUG
  248|       |            fprintf(stderr, "%s: Found.\n", tocEntryName);
  249|       |#endif
  250|    676|            if((number+1) < count) {
  ------------------
  |  Branch (250:16): [True: 675, False: 1]
  ------------------
  251|    675|                *pLength = (int32_t)(entry[1].dataOffset - entry->dataOffset);
  252|    675|            } else {
  253|      1|                *pLength = -1;
  254|      1|            }
  255|    676|            return (const DataHeader *)(base+entry->dataOffset);
  256|    676|        } else {
  257|       |#ifdef UDATA_DEBUG
  258|       |            fprintf(stderr, "%s: Not found.\n", tocEntryName);
  259|       |#endif
  260|    275|            return nullptr;
  261|    275|        }
  262|    951|    } else {
  263|       |#ifdef UDATA_DEBUG
  264|       |        fprintf(stderr, "returning header\n");
  265|       |#endif
  266|       |
  267|      0|        return pData->pHeader;
  268|      0|    }
  269|    951|}
ucmndata.cpp:_ZL27offsetTOCPrefixBinarySearchPKcS0_PK19UDataOffsetTOCEntryi:
  125|    951|                            const UDataOffsetTOCEntry *toc, int32_t count) {
  126|    951|    int32_t start=0;
  127|    951|    int32_t limit=count;
  128|       |    /*
  129|       |     * Remember the shared prefix between s, start and limit,
  130|       |     * and don't compare that shared prefix again.
  131|       |     * The shared prefix should get longer as we narrow the [start, limit[ range.
  132|       |     */
  133|    951|    int32_t startPrefixLength=0;
  134|    951|    int32_t limitPrefixLength=0;
  135|    951|    if(count==0) {
  ------------------
  |  Branch (135:8): [True: 0, False: 951]
  ------------------
  136|      0|        return -1;
  137|      0|    }
  138|       |    /*
  139|       |     * Prime the prefix lengths so that we don't keep prefixLength at 0 until
  140|       |     * both the start and limit indexes have moved.
  141|       |     * At the same time, we find if s is one of the start and (limit-1) names,
  142|       |     * and if not, exclude them from the actual binary search.
  143|       |     */
  144|    951|    if(0==strcmpAfterPrefix(s, names+toc[0].nameOffset, &startPrefixLength)) {
  ------------------
  |  Branch (144:8): [True: 1, False: 950]
  ------------------
  145|      1|        return 0;
  146|      1|    }
  147|    950|    ++start;
  148|    950|    --limit;
  149|    950|    if(0==strcmpAfterPrefix(s, names+toc[limit].nameOffset, &limitPrefixLength)) {
  ------------------
  |  Branch (149:8): [True: 1, False: 949]
  ------------------
  150|      1|        return limit;
  151|      1|    }
  152|  11.0k|    while(start<limit) {
  ------------------
  |  Branch (152:11): [True: 10.7k, False: 275]
  ------------------
  153|  10.7k|        int32_t i=(start+limit)/2;
  154|  10.7k|        int32_t prefixLength=MIN(startPrefixLength, limitPrefixLength);
  ------------------
  |  |   97|  10.7k|#define MIN(a,b) (((a)<(b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (97:19): [True: 3.71k, False: 7.04k]
  |  |  ------------------
  ------------------
  155|  10.7k|        int32_t cmp=strcmpAfterPrefix(s, names+toc[i].nameOffset, &prefixLength);
  156|  10.7k|        if(cmp<0) {
  ------------------
  |  Branch (156:12): [True: 4.29k, False: 6.46k]
  ------------------
  157|  4.29k|            limit=i;
  158|  4.29k|            limitPrefixLength=prefixLength;
  159|  6.46k|        } else if(cmp==0) {
  ------------------
  |  Branch (159:19): [True: 674, False: 5.79k]
  ------------------
  160|    674|            return i;
  161|  5.79k|        } else {
  162|  5.79k|            start=i+1;
  163|  5.79k|            startPrefixLength=prefixLength;
  164|  5.79k|        }
  165|  10.7k|    }
  166|    275|    return -1;
  167|    949|}
ucmndata.cpp:_ZL17strcmpAfterPrefixPKcS0_Pi:
  105|  12.6k|strcmpAfterPrefix(const char *s1, const char *s2, int32_t *pPrefixLength) {
  106|  12.6k|    int32_t pl=*pPrefixLength;
  107|  12.6k|    int32_t cmp=0;
  108|  12.6k|    s1+=pl;
  109|  12.6k|    s2+=pl;
  110|  46.8k|    for(;;) {
  111|  46.8k|        int32_t c1 = static_cast<uint8_t>(*s1++);
  112|  46.8k|        int32_t c2 = static_cast<uint8_t>(*s2++);
  113|  46.8k|        cmp=c1-c2;
  114|  46.8k|        if(cmp!=0 || c1==0) {  /* different or done */
  ------------------
  |  Branch (114:12): [True: 11.9k, False: 34.8k]
  |  Branch (114:22): [True: 676, False: 34.1k]
  ------------------
  115|  12.6k|            break;
  116|  12.6k|        }
  117|  34.1k|        ++pl;  /* increment shared same-prefix length */
  118|  34.1k|    }
  119|  12.6k|    *pPrefixLength=pl;
  120|  12.6k|    return cmp;
  121|  12.6k|}

_ZN6icu_7817UDataPathIteratorC2EPKcS2_S2_S2_aP10UErrorCode:
  451|      1|{
  452|       |#ifdef UDATA_DEBUG
  453|       |        fprintf(stderr, "SUFFIX1=%s PATH=%s\n", inSuffix, inPath);
  454|       |#endif
  455|       |    /** Path **/
  456|      1|    if(inPath == nullptr) {
  ------------------
  |  Branch (456:8): [True: 0, False: 1]
  ------------------
  457|      0|        path = u_getDataDirectory();
  ------------------
  |  |  271|      0|#define u_getDataDirectory U_ICU_ENTRY_POINT_RENAME(u_getDataDirectory)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  458|      1|    } else {
  459|      1|        path = inPath;
  460|      1|    }
  461|       |
  462|       |    /** Package **/
  463|      1|    if(pkg != nullptr) {
  ------------------
  |  Branch (463:8): [True: 1, False: 0]
  ------------------
  464|      1|      packageStub.append(U_FILE_SEP_CHAR, *pErrorCode).append(pkg, *pErrorCode);
  ------------------
  |  |  130|      1|#   define U_FILE_SEP_CHAR '/'
  ------------------
  465|       |#ifdef UDATA_DEBUG
  466|       |      fprintf(stderr, "STUB=%s [%d]\n", packageStub.data(), packageStub.length());
  467|       |#endif
  468|      1|    }
  469|       |
  470|       |    /** Item **/
  471|      1|    basename = findBasename(item);
  472|      1|    basenameLen = static_cast<int32_t>(uprv_strlen(basename));
  ------------------
  |  |   37|      1|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  473|       |
  474|       |    /** Item path **/
  475|      1|    if(basename == item) {
  ------------------
  |  Branch (475:8): [True: 1, False: 0]
  ------------------
  476|      1|        nextPath = path;
  477|      1|    } else {
  478|      0|        itemPath.append(item, static_cast<int32_t>(basename - item), *pErrorCode);
  479|      0|        nextPath = itemPath.data();
  480|      0|    }
  481|       |#ifdef UDATA_DEBUG
  482|       |    fprintf(stderr, "SUFFIX=%s [%p]\n", inSuffix, (void*) inSuffix);
  483|       |#endif
  484|       |
  485|       |    /** Suffix  **/
  486|      1|    if(inSuffix != nullptr) {
  ------------------
  |  Branch (486:8): [True: 1, False: 0]
  ------------------
  487|      1|        suffix = inSuffix;
  488|      1|    } else {
  489|      0|        suffix = "";
  490|      0|    }
  491|       |
  492|      1|    checkLastFour = doCheckLastFour;
  493|       |
  494|       |    /* pathBuffer will hold the output path strings returned by this iterator */
  495|       |
  496|       |#ifdef UDATA_DEBUG
  497|       |    fprintf(stderr, "0: init %s -> [path=%s], [base=%s], [suff=%s], [itempath=%s], [nextpath=%s], [checklast4=%s]\n",
  498|       |            item,
  499|       |            path,
  500|       |            basename,
  501|       |            suffix.data(),
  502|       |            itemPath.data(),
  503|       |            nextPath,
  504|       |            checkLastFour?"true":"false");
  505|       |#endif
  506|      1|}
_ZN6icu_7817UDataPathIterator4nextEP10UErrorCode:
  516|      1|{
  517|      1|    if(U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (517:8): [True: 0, False: 1]
  ------------------
  518|      0|        return nullptr;
  519|      0|    }
  520|       |
  521|      1|    const char *currentPath = nullptr;
  522|      1|    int32_t     pathLen = 0;
  523|      1|    const char *pathBasename;
  524|       |
  525|      1|    do
  526|      2|    {
  527|      2|        if( nextPath == nullptr ) {
  ------------------
  |  Branch (527:13): [True: 1, False: 1]
  ------------------
  528|      1|            break;
  529|      1|        }
  530|      1|        currentPath = nextPath;
  531|       |
  532|      1|        if(nextPath == itemPath.data()) { /* we were processing item's path. */
  ------------------
  |  Branch (532:12): [True: 0, False: 1]
  ------------------
  533|      0|            nextPath = path; /* start with regular path next tm. */
  534|      0|            pathLen = static_cast<int32_t>(uprv_strlen(currentPath));
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  535|      1|        } else {
  536|       |            /* fix up next for next time */
  537|      1|            nextPath = uprv_strchr(currentPath, U_PATH_SEP_CHAR);
  ------------------
  |  |   40|      1|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  538|      1|            if(nextPath == nullptr) {
  ------------------
  |  Branch (538:16): [True: 1, False: 0]
  ------------------
  539|       |                /* segment: entire path */
  540|      1|                pathLen = static_cast<int32_t>(uprv_strlen(currentPath));
  ------------------
  |  |   37|      1|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  541|      1|            } else {
  542|       |                /* segment: until next segment */
  543|      0|                pathLen = static_cast<int32_t>(nextPath - currentPath);
  544|       |                /* skip divider */
  545|      0|                nextPath ++;
  546|      0|            }
  547|      1|        }
  548|       |
  549|      1|        if(pathLen == 0) {
  ------------------
  |  Branch (549:12): [True: 1, False: 0]
  ------------------
  550|      1|            continue;
  551|      1|        }
  552|       |
  553|       |#ifdef UDATA_DEBUG
  554|       |        fprintf(stderr, "rest of path (IDD) = %s\n", currentPath);
  555|       |        fprintf(stderr, "                     ");
  556|       |        { 
  557|       |            int32_t qqq;
  558|       |            for(qqq=0;qqq<pathLen;qqq++)
  559|       |            {
  560|       |                fprintf(stderr, " ");
  561|       |            }
  562|       |
  563|       |            fprintf(stderr, "^\n");
  564|       |        }
  565|       |#endif
  566|      0|        pathBuffer.clear().append(currentPath, pathLen, *pErrorCode);
  567|       |
  568|       |        /* check for .dat files */
  569|      0|        pathBasename = findBasename(pathBuffer.data());
  570|       |
  571|      0|        if(checkLastFour && 
  ------------------
  |  Branch (571:12): [True: 0, False: 0]
  ------------------
  572|      0|           (pathLen>=4) &&
  ------------------
  |  Branch (572:12): [True: 0, False: 0]
  ------------------
  573|      0|           uprv_strncmp(pathBuffer.data() +(pathLen-4), suffix.data(), 4)==0 && /* suffix matches */
  ------------------
  |  |   44|      0|#define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (573:12): [True: 0, False: 0]
  ------------------
  574|      0|           uprv_strncmp(findBasename(pathBuffer.data()), basename, basenameLen)==0  && /* base matches */
  ------------------
  |  |   44|      0|#define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (574:12): [True: 0, False: 0]
  ------------------
  575|      0|           uprv_strlen(pathBasename)==(basenameLen+4)) { /* base+suffix = full len */
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (575:12): [True: 0, False: 0]
  ------------------
  576|       |
  577|       |#ifdef UDATA_DEBUG
  578|       |            fprintf(stderr, "Have %s file on the path: %s\n", suffix.data(), pathBuffer.data());
  579|       |#endif
  580|       |            /* do nothing */
  581|      0|        }
  582|      0|        else 
  583|      0|        {       /* regular dir path */
  584|      0|            if(pathBuffer[pathLen-1] != U_FILE_SEP_CHAR) {
  ------------------
  |  |  130|      0|#   define U_FILE_SEP_CHAR '/'
  ------------------
  |  Branch (584:16): [True: 0, False: 0]
  ------------------
  585|      0|                if((pathLen>=4) &&
  ------------------
  |  Branch (585:20): [True: 0, False: 0]
  ------------------
  586|      0|                   uprv_strncmp(pathBuffer.data()+(pathLen-4), ".dat", 4) == 0)
  ------------------
  |  |   44|      0|#define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (586:20): [True: 0, False: 0]
  ------------------
  587|      0|                {
  588|       |#ifdef UDATA_DEBUG
  589|       |                    fprintf(stderr, "skipping non-directory .dat file %s\n", pathBuffer.data());
  590|       |#endif
  591|      0|                    continue;
  592|      0|                }
  593|       |
  594|       |                /* Check if it is a directory with the same name as our package */
  595|      0|                if(!packageStub.isEmpty() &&
  ------------------
  |  Branch (595:20): [True: 0, False: 0]
  ------------------
  596|      0|                   (pathLen > packageStub.length()) &&
  ------------------
  |  Branch (596:20): [True: 0, False: 0]
  ------------------
  597|      0|                   !uprv_strcmp(pathBuffer.data() + pathLen - packageStub.length(), packageStub.data())) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (597:20): [True: 0, False: 0]
  ------------------
  598|       |#ifdef UDATA_DEBUG
  599|       |                  fprintf(stderr, "Found stub %s (will add package %s of len %d)\n", packageStub.data(), basename, basenameLen);
  600|       |#endif
  601|      0|                  pathBuffer.truncate(pathLen - packageStub.length());
  602|      0|                }
  603|      0|                pathBuffer.append(U_FILE_SEP_CHAR, *pErrorCode);
  ------------------
  |  |  130|      0|#   define U_FILE_SEP_CHAR '/'
  ------------------
  604|      0|            }
  605|       |
  606|       |            /* + basename */
  607|      0|            pathBuffer.append(packageStub.data()+1, packageStub.length()-1, *pErrorCode);
  608|       |
  609|      0|            if (!suffix.empty())  /* tack on suffix */
  ------------------
  |  Branch (609:17): [True: 0, False: 0]
  ------------------
  610|      0|            {
  611|      0|                if (suffix.length() > 4) {
  ------------------
  |  Branch (611:21): [True: 0, False: 0]
  ------------------
  612|       |                    // If the suffix is actually an item ("ibm-5348_P100-1997.cnv") and not an extension (".res")
  613|       |                    // then we need to ensure that the path ends with a separator.
  614|      0|                    pathBuffer.ensureEndsWithFileSeparator(*pErrorCode);
  615|      0|                }
  616|      0|                pathBuffer.append(suffix, *pErrorCode);
  617|      0|            }
  618|      0|        }
  619|       |
  620|       |#ifdef UDATA_DEBUG
  621|       |        fprintf(stderr, " -->  %s\n", pathBuffer.data());
  622|       |#endif
  623|       |
  624|      0|        return pathBuffer.data();
  625|       |
  626|      1|    } while(path);
  ------------------
  |  Branch (626:13): [True: 1, False: 0]
  ------------------
  627|       |
  628|       |    /* fell way off the end */
  629|      1|    return nullptr;
  630|      1|}
udata_openChoice_78:
 1406|    951|                 UErrorCode *pErrorCode) {
 1407|       |#ifdef UDATA_DEBUG
 1408|       |  fprintf(stderr, "udata_openChoice(): Opening: %s : %s . %s\n", (path?path:"nullptr"), name, type);
 1409|       |#endif
 1410|       |
 1411|    951|    if(pErrorCode==nullptr || U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (1411:8): [True: 0, False: 951]
  |  Branch (1411:31): [True: 0, False: 951]
  ------------------
 1412|      0|        return nullptr;
 1413|    951|    } else if(name==nullptr || *name==0 || isAcceptable==nullptr) {
  ------------------
  |  Branch (1413:15): [True: 0, False: 951]
  |  Branch (1413:32): [True: 0, False: 951]
  |  Branch (1413:44): [True: 0, False: 951]
  ------------------
 1414|      0|        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
 1415|      0|        return nullptr;
 1416|    951|    } else {
 1417|    951|        return doOpenChoice(path, type, name, isAcceptable, context, pErrorCode);
 1418|    951|    }
 1419|    951|}
udata.cpp:_ZL12findBasenamePKc:
  225|    277|findBasename(const char *path) {
  226|    277|    const char *basename=uprv_strrchr(path, U_FILE_SEP_CHAR);
  ------------------
  |  |   42|    277|#define uprv_strrchr(s, c) U_STANDARD_CPP_NAMESPACE strrchr(s, c)
  |  |  ------------------
  |  |  |  |  393|    277|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  227|    277|    if(basename==nullptr) {
  ------------------
  |  Branch (227:8): [True: 277, False: 0]
  ------------------
  228|    277|        return path;
  229|    277|    } else {
  230|      0|        return basename+1;
  231|      0|    }
  232|    277|}
udata.cpp:_ZL16setCommonICUDataP11UDataMemoryaP10UErrorCode:
  174|      1|{
  175|      1|    UDataMemory  *newCommonData = UDataMemory_createNewInstance(pErr);
  ------------------
  |  |   79|      1|#define UDataMemory_createNewInstance U_ICU_ENTRY_POINT_RENAME(UDataMemory_createNewInstance)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  176|      1|    int32_t i;
  177|      1|    UBool didUpdate = false;
  178|      1|    if (U_FAILURE(*pErr)) {
  ------------------
  |  Branch (178:9): [True: 0, False: 1]
  ------------------
  179|      0|        return false;
  180|      0|    }
  181|       |
  182|       |    /*  For the assignment, other threads must cleanly see either the old            */
  183|       |    /*    or the new, not some partially initialized new.  The old can not be        */
  184|       |    /*    deleted - someone may still have a pointer to it lying around in           */
  185|       |    /*    their locals.                                                              */
  186|      1|    UDatamemory_assign(newCommonData, pData);
  ------------------
  |  |   84|      1|#define UDatamemory_assign U_ICU_ENTRY_POINT_RENAME(UDatamemory_assign)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|      1|    umtx_lock(nullptr);
  ------------------
  |  | 1250|      1|#define umtx_lock U_ICU_ENTRY_POINT_RENAME(umtx_lock)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|      1|    for (i = 0; i < UPRV_LENGTHOF(gCommonICUDataArray); ++i) {
  ------------------
  |  |   99|      1|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (188:17): [True: 1, False: 0]
  ------------------
  189|      1|        if (gCommonICUDataArray[i] == nullptr) {
  ------------------
  |  Branch (189:13): [True: 1, False: 0]
  ------------------
  190|      1|            gCommonICUDataArray[i] = newCommonData;
  191|      1|            didUpdate = true;
  192|      1|            break;
  193|      1|        } else if (gCommonICUDataArray[i]->pHeader == pData->pHeader) {
  ------------------
  |  Branch (193:20): [True: 0, False: 0]
  ------------------
  194|       |            /* The same data pointer is already in the array. */
  195|      0|            break;
  196|      0|        }
  197|      1|    }
  198|      1|    umtx_unlock(nullptr);
  ------------------
  |  | 1251|      1|#define umtx_unlock U_ICU_ENTRY_POINT_RENAME(umtx_unlock)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  199|       |
  200|      1|    if (i == UPRV_LENGTHOF(gCommonICUDataArray) && warn) {
  ------------------
  |  |   99|      2|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (200:9): [True: 0, False: 1]
  |  Branch (200:52): [True: 0, False: 0]
  ------------------
  201|      0|        *pErr = U_USING_DEFAULT_WARNING;
  202|      0|    }
  203|      1|    if (didUpdate) {
  ------------------
  |  Branch (203:9): [True: 1, False: 0]
  ------------------
  204|      1|        ucln_common_registerCleanup(UCLN_COMMON_UDATA, udata_cleanup);
  ------------------
  |  |  617|      1|#define ucln_common_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_common_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|      1|    } else {
  206|      0|        uprv_free(newCommonData);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  207|      0|    }
  208|      1|    return didUpdate;
  209|      1|}
udata.cpp:_ZL18udata_getHashTableR10UErrorCode:
  298|    276|static UHashtable *udata_getHashTable(UErrorCode &err) {
  299|    276|    umtx_initOnce(gCommonDataCacheInitOnce, &udata_initHashTable, err);
  300|    276|    return gCommonDataCache;
  301|    276|}
udata.cpp:_ZL19udata_initHashTableR10UErrorCode:
  283|      1|static void U_CALLCONV udata_initHashTable(UErrorCode &err) {
  284|      1|    U_ASSERT(gCommonDataCache == nullptr);
  ------------------
  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  ------------------
  285|      1|    gCommonDataCache = uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &err);
  ------------------
  |  | 1030|      1|#define uhash_open U_ICU_ENTRY_POINT_RENAME(uhash_open)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  gCommonDataCache = uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &err);
  ------------------
  |  | 1011|      1|#define uhash_hashChars U_ICU_ENTRY_POINT_RENAME(uhash_hashChars)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  gCommonDataCache = uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &err);
  ------------------
  |  |  993|      1|#define uhash_compareChars U_ICU_ENTRY_POINT_RENAME(uhash_compareChars)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  286|      1|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (286:9): [True: 0, False: 1]
  ------------------
  287|      0|       return;
  288|      0|    }
  289|      1|    U_ASSERT(gCommonDataCache != nullptr);
  ------------------
  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  ------------------
  290|      1|    uhash_setValueDeleter(gCommonDataCache, DataCacheElement_deleter);
  ------------------
  |  | 1044|      1|#define uhash_setValueDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setValueDeleter)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  291|      1|    ucln_common_registerCleanup(UCLN_COMMON_UDATA, udata_cleanup);
  ------------------
  |  |  617|      1|#define ucln_common_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_common_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  292|      1|}
udata.cpp:_ZL12doOpenChoicePKcS0_S0_PFaPvS0_S0_PK9UDataInfoES1_P10UErrorCode:
 1151|    951|{
 1152|    951|    UDataMemory         *retVal = nullptr;
 1153|       |
 1154|    951|    const char         *dataPath;
 1155|       |
 1156|    951|    int32_t             tocEntrySuffixIndex;
 1157|    951|    const char         *tocEntryPathSuffix;
 1158|    951|    UErrorCode          subErrorCode=U_ZERO_ERROR;
 1159|    951|    const char         *treeChar;
 1160|       |
 1161|    951|    UBool               isICUData = false;
 1162|       |
 1163|       |
 1164|    951|    FileTracer::traceOpen(path, type, name);
 1165|       |
 1166|       |
 1167|       |    /* Is this path ICU data? */
 1168|    951|    if(path == nullptr ||
  ------------------
  |  Branch (1168:8): [True: 421, False: 530]
  ------------------
 1169|    951|       !strcmp(path, U_ICUDATA_ALIAS) ||  /* "ICUDATA" */
  ------------------
  |  |   74|    530|#define U_ICUDATA_ALIAS "ICUDATA"
  ------------------
  |  Branch (1169:8): [True: 0, False: 530]
  ------------------
 1170|    951|       !uprv_strncmp(path, U_ICUDATA_NAME U_TREE_SEPARATOR_STRING, /* "icudt26e-" */
  ------------------
  |  |   44|    530|#define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n)
  |  |  ------------------
  |  |  |  |  393|    530|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1170:8): [True: 530, False: 0]
  ------------------
 1171|    951|                     uprv_strlen(U_ICUDATA_NAME U_TREE_SEPARATOR_STRING)) ||  
 1172|    951|       !uprv_strncmp(path, U_ICUDATA_ALIAS U_TREE_SEPARATOR_STRING, /* "ICUDATA-" */
  ------------------
  |  |   44|      0|#define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1172:8): [True: 0, False: 0]
  ------------------
 1173|    951|                     uprv_strlen(U_ICUDATA_ALIAS U_TREE_SEPARATOR_STRING))) {
 1174|    951|      isICUData = true;
 1175|    951|    }
 1176|       |
 1177|       |#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR)  /* Windows:  try "foo\bar" and "foo/bar" */
 1178|       |    /* remap from alternate path char to the main one */
 1179|       |    CharString altSepPath;
 1180|       |    if(path) {
 1181|       |        if(uprv_strchr(path,U_FILE_ALT_SEP_CHAR) != nullptr) {
 1182|       |            altSepPath.append(path, *pErrorCode);
 1183|       |            char *p;
 1184|       |            while ((p = uprv_strchr(altSepPath.data(), U_FILE_ALT_SEP_CHAR)) != nullptr) {
 1185|       |                *p = U_FILE_SEP_CHAR;
 1186|       |            }
 1187|       |#if defined (UDATA_DEBUG)
 1188|       |            fprintf(stderr, "Changed path from [%s] to [%s]\n", path, altSepPath.data());
 1189|       |#endif
 1190|       |            path = altSepPath.data();
 1191|       |        }
 1192|       |    }
 1193|       |#endif
 1194|       |
 1195|    951|    CharString tocEntryName; /* entry name in tree format. ex:  'icudt28b/coll/ar.res' */
 1196|    951|    CharString tocEntryPath; /* entry name in path format. ex:  'icudt28b\\coll\\ar.res' */
 1197|       |
 1198|    951|    CharString pkgName;
 1199|    951|    CharString treeName;
 1200|       |
 1201|       |    /* ======= Set up strings */
 1202|    951|    if(path==nullptr) {
  ------------------
  |  Branch (1202:8): [True: 421, False: 530]
  ------------------
 1203|    421|        pkgName.append(U_ICUDATA_NAME, *pErrorCode);
  ------------------
  |  |  154|    421|#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER
  |  |  ------------------
  |  |  |  |  144|    421|#     define U_ICUDATA_TYPE_LETTER "l"
  |  |  ------------------
  ------------------
 1204|    530|    } else {
 1205|    530|        const char *pkg;
 1206|    530|        const char *first;
 1207|    530|        pkg = uprv_strrchr(path, U_FILE_SEP_CHAR);
  ------------------
  |  |   42|    530|#define uprv_strrchr(s, c) U_STANDARD_CPP_NAMESPACE strrchr(s, c)
  |  |  ------------------
  |  |  |  |  393|    530|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1208|    530|        first = uprv_strchr(path, U_FILE_SEP_CHAR);
  ------------------
  |  |   40|    530|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|    530|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1209|    530|        if(uprv_pathIsAbsolute(path) || (pkg != first)) { /* more than one slash in the path- not a tree name */
  ------------------
  |  | 1533|    530|#define uprv_pathIsAbsolute U_ICU_ENTRY_POINT_RENAME(uprv_pathIsAbsolute)
  |  |  ------------------
  |  |  |  |  123|    530|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    530|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    530|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1209:12): [True: 0, False: 530]
  |  Branch (1209:41): [True: 0, False: 530]
  ------------------
 1210|       |            /* see if this is an /absolute/path/to/package  path */
 1211|      0|            if(pkg) {
  ------------------
  |  Branch (1211:16): [True: 0, False: 0]
  ------------------
 1212|      0|                pkgName.append(pkg+1, *pErrorCode);
 1213|      0|            } else {
 1214|      0|                pkgName.append(path, *pErrorCode);
 1215|      0|            }
 1216|    530|        } else {
 1217|    530|            treeChar = uprv_strchr(path, U_TREE_SEPARATOR);
  ------------------
  |  |   40|    530|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|    530|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1218|    530|            if(treeChar) { 
  ------------------
  |  Branch (1218:16): [True: 530, False: 0]
  ------------------
 1219|    530|                treeName.append(treeChar+1, *pErrorCode); /* following '-' */
 1220|    530|                if(isICUData) {
  ------------------
  |  Branch (1220:20): [True: 530, False: 0]
  ------------------
 1221|    530|                    pkgName.append(U_ICUDATA_NAME, *pErrorCode);
  ------------------
  |  |  154|    530|#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER
  |  |  ------------------
  |  |  |  |  144|    530|#     define U_ICUDATA_TYPE_LETTER "l"
  |  |  ------------------
  ------------------
 1222|    530|                } else {
 1223|      0|                    pkgName.append(path, static_cast<int32_t>(treeChar - path), *pErrorCode);
 1224|      0|                    if (first == nullptr) {
  ------------------
  |  Branch (1224:25): [True: 0, False: 0]
  ------------------
 1225|       |                        /*
 1226|       |                        This user data has no path, but there is a tree name.
 1227|       |                        Look up the correct path from the data cache later.
 1228|       |                        */
 1229|      0|                        path = pkgName.data();
 1230|      0|                    }
 1231|      0|                }
 1232|    530|            } else {
 1233|      0|                if(isICUData) {
  ------------------
  |  Branch (1233:20): [True: 0, False: 0]
  ------------------
 1234|      0|                    pkgName.append(U_ICUDATA_NAME, *pErrorCode);
  ------------------
  |  |  154|      0|#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER
  |  |  ------------------
  |  |  |  |  144|      0|#     define U_ICUDATA_TYPE_LETTER "l"
  |  |  ------------------
  ------------------
 1235|      0|                } else {
 1236|      0|                    pkgName.append(path, *pErrorCode);
 1237|      0|                }
 1238|      0|            }
 1239|    530|        }
 1240|    530|    }
 1241|       |
 1242|       |#ifdef UDATA_DEBUG
 1243|       |    fprintf(stderr, " P=%s T=%s\n", pkgName.data(), treeName.data());
 1244|       |#endif
 1245|       |
 1246|       |    /* setting up the entry name and file name 
 1247|       |     * Make up a full name by appending the type to the supplied
 1248|       |     *  name, assuming that a type was supplied.
 1249|       |     */
 1250|       |
 1251|       |    /* prepend the package */
 1252|    951|    tocEntryName.append(pkgName, *pErrorCode);
 1253|    951|    tocEntryPath.append(pkgName, *pErrorCode);
 1254|    951|    tocEntrySuffixIndex = tocEntryName.length();
 1255|       |
 1256|    951|    if(!treeName.isEmpty()) {
  ------------------
  |  Branch (1256:8): [True: 530, False: 421]
  ------------------
 1257|    530|        tocEntryName.append(U_TREE_ENTRY_SEP_CHAR, *pErrorCode).append(treeName, *pErrorCode);
  ------------------
  |  |   62|    530|#define U_TREE_ENTRY_SEP_CHAR '/'
  ------------------
 1258|    530|        tocEntryPath.append(U_FILE_SEP_CHAR, *pErrorCode).append(treeName, *pErrorCode);
  ------------------
  |  |  130|    530|#   define U_FILE_SEP_CHAR '/'
  ------------------
 1259|    530|    }
 1260|       |
 1261|    951|    tocEntryName.append(U_TREE_ENTRY_SEP_CHAR, *pErrorCode).append(name, *pErrorCode);
  ------------------
  |  |   62|    951|#define U_TREE_ENTRY_SEP_CHAR '/'
  ------------------
 1262|    951|    tocEntryPath.append(U_FILE_SEP_CHAR, *pErrorCode).append(name, *pErrorCode);
  ------------------
  |  |  130|    951|#   define U_FILE_SEP_CHAR '/'
  ------------------
 1263|    951|    if(type!=nullptr && *type!=0) {
  ------------------
  |  Branch (1263:8): [True: 951, False: 0]
  |  Branch (1263:25): [True: 951, False: 0]
  ------------------
 1264|    951|        tocEntryName.append(".", *pErrorCode).append(type, *pErrorCode);
 1265|    951|        tocEntryPath.append(".", *pErrorCode).append(type, *pErrorCode);
 1266|    951|    }
 1267|       |    // The +1 is for the U_FILE_SEP_CHAR that is always appended above.
 1268|    951|    tocEntryPathSuffix = tocEntryPath.data() + tocEntrySuffixIndex + 1; /* suffix starts here */
 1269|       |
 1270|       |#ifdef UDATA_DEBUG
 1271|       |    fprintf(stderr, " tocEntryName = %s\n", tocEntryName.data());
 1272|       |    fprintf(stderr, " tocEntryPath = %s\n", tocEntryName.data());
 1273|       |#endif
 1274|       |
 1275|    951|#if !defined(ICU_DATA_DIR_WINDOWS)
 1276|    951|    if(path == nullptr) {
  ------------------
  |  Branch (1276:8): [True: 421, False: 530]
  ------------------
 1277|    421|        path = COMMON_DATA_NAME; /* "icudt26e" */
  ------------------
  |  |   34|    421|#define COMMON_DATA_NAME U_ICUDATA_NAME
  |  |  ------------------
  |  |  |  |  154|    421|#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    421|#     define U_ICUDATA_TYPE_LETTER "l"
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1278|    421|    }
 1279|       |#else
 1280|       |    // When using the Windows system data, we expects only a single data file.
 1281|       |    path = COMMON_DATA_NAME; /* "icudt26e" */
 1282|       |#endif
 1283|       |
 1284|       |    /************************ Begin loop looking for ind. files ***************/
 1285|       |#ifdef UDATA_DEBUG
 1286|       |    fprintf(stderr, "IND: inBasename = %s, pkg=%s\n", "(n/a)", packageNameFromPath(path));
 1287|       |#endif
 1288|       |
 1289|       |    /* End of dealing with a null basename */
 1290|    951|    dataPath = u_getDataDirectory();
  ------------------
  |  |  271|    951|#define u_getDataDirectory U_ICU_ENTRY_POINT_RENAME(u_getDataDirectory)
  |  |  ------------------
  |  |  |  |  123|    951|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    951|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    951|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1291|       |
 1292|       |    /****    Time zone individual files override  */
 1293|    951|    if (isICUData && isTimeZoneFile(name, type)) {
  ------------------
  |  Branch (1293:9): [True: 951, False: 0]
  |  Branch (1293:22): [True: 3, False: 948]
  ------------------
 1294|      3|        const char *tzFilesDir = u_getTimeZoneFilesDirectory(pErrorCode);
  ------------------
  |  |  287|      3|#define u_getTimeZoneFilesDirectory U_ICU_ENTRY_POINT_RENAME(u_getTimeZoneFilesDirectory)
  |  |  ------------------
  |  |  |  |  123|      3|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      3|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      3|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1295|      3|        if (tzFilesDir[0] != 0) {
  ------------------
  |  Branch (1295:13): [True: 0, False: 3]
  ------------------
 1296|       |#ifdef UDATA_DEBUG
 1297|       |            fprintf(stderr, "Trying Time Zone Files directory = %s\n", tzFilesDir);
 1298|       |#endif
 1299|      0|            retVal = doLoadFromIndividualFiles(/* pkgName.data() */ "", tzFilesDir, tocEntryPathSuffix,
 1300|      0|                            /* path */ "", type, name, isAcceptable, context, &subErrorCode, pErrorCode);
 1301|      0|            if((retVal != nullptr) || U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (1301:16): [True: 0, False: 0]
  |  Branch (1301:39): [True: 0, False: 0]
  ------------------
 1302|      0|                return retVal;
 1303|      0|            }
 1304|      0|        }
 1305|      3|    }
 1306|       |
 1307|       |    /****    COMMON PACKAGE  - only if packages are first. */
 1308|    951|    if(gDataFileAccess == UDATA_PACKAGES_FIRST) {
  ------------------
  |  Branch (1308:8): [True: 0, False: 951]
  ------------------
 1309|       |#ifdef UDATA_DEBUG
 1310|       |        fprintf(stderr, "Trying packages (UDATA_PACKAGES_FIRST)\n");
 1311|       |#endif
 1312|       |        /* #2 */
 1313|      0|        retVal = doLoadFromCommonData(isICUData, 
 1314|      0|                            pkgName.data(), dataPath, tocEntryPathSuffix, tocEntryName.data(),
 1315|      0|                            path, type, name, isAcceptable, context, &subErrorCode, pErrorCode);
 1316|      0|        if((retVal != nullptr) || U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (1316:12): [True: 0, False: 0]
  |  Branch (1316:35): [True: 0, False: 0]
  ------------------
 1317|      0|            return retVal;
 1318|      0|        }
 1319|      0|    }
 1320|       |
 1321|       |    /****    INDIVIDUAL FILES  */
 1322|    951|    if((gDataFileAccess==UDATA_PACKAGES_FIRST) ||
  ------------------
  |  Branch (1322:8): [True: 0, False: 951]
  ------------------
 1323|    951|       (gDataFileAccess==UDATA_FILES_FIRST)) {
  ------------------
  |  Branch (1323:8): [True: 951, False: 0]
  ------------------
 1324|       |#ifdef UDATA_DEBUG
 1325|       |        fprintf(stderr, "Trying individual files\n");
 1326|       |#endif
 1327|       |        /* Check to make sure that there is a dataPath to iterate over */
 1328|    951|        if ((dataPath && *dataPath) || !isICUData) {
  ------------------
  |  Branch (1328:14): [True: 951, False: 0]
  |  Branch (1328:26): [True: 0, False: 951]
  |  Branch (1328:40): [True: 0, False: 951]
  ------------------
 1329|      0|            retVal = doLoadFromIndividualFiles(pkgName.data(), dataPath, tocEntryPathSuffix,
 1330|      0|                            path, type, name, isAcceptable, context, &subErrorCode, pErrorCode);
 1331|      0|            if((retVal != nullptr) || U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (1331:16): [True: 0, False: 0]
  |  Branch (1331:39): [True: 0, False: 0]
  ------------------
 1332|      0|                return retVal;
 1333|      0|            }
 1334|      0|        }
 1335|    951|    }
 1336|       |
 1337|       |    /****    COMMON PACKAGE  */
 1338|    951|    if((gDataFileAccess==UDATA_ONLY_PACKAGES) || 
  ------------------
  |  Branch (1338:8): [True: 0, False: 951]
  ------------------
 1339|    951|       (gDataFileAccess==UDATA_FILES_FIRST)) {
  ------------------
  |  Branch (1339:8): [True: 951, False: 0]
  ------------------
 1340|       |#ifdef UDATA_DEBUG
 1341|       |        fprintf(stderr, "Trying packages (UDATA_ONLY_PACKAGES || UDATA_FILES_FIRST)\n");
 1342|       |#endif
 1343|    951|        retVal = doLoadFromCommonData(isICUData,
 1344|    951|                            pkgName.data(), dataPath, tocEntryPathSuffix, tocEntryName.data(),
 1345|    951|                            path, type, name, isAcceptable, context, &subErrorCode, pErrorCode);
 1346|    951|        if((retVal != nullptr) || U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (1346:12): [True: 676, False: 275]
  |  Branch (1346:35): [True: 0, False: 275]
  ------------------
 1347|    676|            return retVal;
 1348|    676|        }
 1349|    951|    }
 1350|       |    
 1351|       |    /* Load from DLL.  If we haven't attempted package load, we also haven't had any chance to
 1352|       |        try a DLL (static or setCommonData/etc)  load.
 1353|       |         If we ever have a "UDATA_ONLY_FILES", add it to the or list here.  */  
 1354|    275|    if(gDataFileAccess==UDATA_NO_FILES) {
  ------------------
  |  Branch (1354:8): [True: 0, False: 275]
  ------------------
 1355|       |#ifdef UDATA_DEBUG
 1356|       |        fprintf(stderr, "Trying common data (UDATA_NO_FILES)\n");
 1357|       |#endif
 1358|      0|        retVal = doLoadFromCommonData(isICUData,
 1359|      0|                            pkgName.data(), "", tocEntryPathSuffix, tocEntryName.data(),
 1360|      0|                            path, type, name, isAcceptable, context, &subErrorCode, pErrorCode);
 1361|      0|        if((retVal != nullptr) || U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (1361:12): [True: 0, False: 0]
  |  Branch (1361:35): [True: 0, False: 0]
  ------------------
 1362|      0|            return retVal;
 1363|      0|        }
 1364|      0|    }
 1365|       |
 1366|       |    /* data not found */
 1367|    275|    if(U_SUCCESS(*pErrorCode)) {
  ------------------
  |  Branch (1367:8): [True: 275, False: 0]
  ------------------
 1368|    275|        if(U_SUCCESS(subErrorCode)) {
  ------------------
  |  Branch (1368:12): [True: 274, False: 1]
  ------------------
 1369|       |            /* file not found */
 1370|    274|            *pErrorCode=U_FILE_ACCESS_ERROR;
 1371|    274|        } else {
 1372|       |            /* entry point not found or rejected */
 1373|      1|            *pErrorCode=subErrorCode;
 1374|      1|        }
 1375|    275|    }
 1376|    275|    return retVal;
 1377|    275|}
udata.cpp:_ZL14isTimeZoneFilePKcS0_:
 1107|    951|static UBool isTimeZoneFile(const char *name, const char *type) {
 1108|    951|    return ((uprv_strcmp(type, "res") == 0) &&
  ------------------
  |  |   38|    951|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    951|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1108:13): [True: 951, False: 0]
  ------------------
 1109|    951|            (uprv_strcmp(name, "zoneinfo64") == 0 ||
  ------------------
  |  |   38|    951|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    951|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1109:14): [True: 1, False: 950]
  ------------------
 1110|    951|             uprv_strcmp(name, "timezoneTypes") == 0 ||
  ------------------
  |  |   38|    950|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    950|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1110:14): [True: 1, False: 949]
  ------------------
 1111|    951|             uprv_strcmp(name, "windowsZones") == 0 ||
  ------------------
  |  |   38|    949|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    949|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1111:14): [True: 0, False: 949]
  ------------------
 1112|    951|             uprv_strcmp(name, "metaZones") == 0));
  ------------------
  |  |   38|    949|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    949|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1112:14): [True: 1, False: 948]
  ------------------
 1113|    951|}
udata.cpp:_ZL13checkDataItemPK10DataHeaderPFaPvPKcS4_PK9UDataInfoES2_S4_S4_P10UErrorCodeSB_:
  949|    676|{
  950|    676|    UDataMemory  *rDataMem = nullptr;          /* the new UDataMemory, to be returned.        */
  951|       |
  952|    676|    if (U_FAILURE(*fatalErr)) {
  ------------------
  |  Branch (952:9): [True: 0, False: 676]
  ------------------
  953|      0|        return nullptr;
  954|      0|    }
  955|       |
  956|    676|    if(pHeader->dataHeader.magic1==0xda &&
  ------------------
  |  Branch (956:8): [True: 676, False: 0]
  ------------------
  957|    676|        pHeader->dataHeader.magic2==0x27 &&
  ------------------
  |  Branch (957:9): [True: 676, False: 0]
  ------------------
  958|    676|        (isAcceptable==nullptr || isAcceptable(context, type, name, &pHeader->info))
  ------------------
  |  Branch (958:10): [True: 0, False: 676]
  |  Branch (958:35): [True: 676, False: 0]
  ------------------
  959|    676|    ) {
  960|    676|        rDataMem=UDataMemory_createNewInstance(fatalErr);
  ------------------
  |  |   79|    676|#define UDataMemory_createNewInstance U_ICU_ENTRY_POINT_RENAME(UDataMemory_createNewInstance)
  |  |  ------------------
  |  |  |  |  123|    676|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    676|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    676|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  961|    676|        if (U_FAILURE(*fatalErr)) {
  ------------------
  |  Branch (961:13): [True: 0, False: 676]
  ------------------
  962|      0|            return nullptr;
  963|      0|        }
  964|    676|        rDataMem->pHeader = pHeader;
  965|    676|    } else {
  966|       |        /* the data is not acceptable, look further */
  967|       |        /* If we eventually find something good, this errorcode will be */
  968|       |        /*    cleared out.                                              */
  969|      0|        *nonFatalErr=U_INVALID_FORMAT_ERROR;
  970|      0|    }
  971|    676|    return rDataMem;
  972|    676|}
udata.cpp:_ZL20doLoadFromCommonDataaPKcS0_S0_S0_S0_S0_S0_PFaPvS0_S0_PK9UDataInfoES1_P10UErrorCodeS8_:
 1042|    951|{
 1043|    951|    UDataMemory        *pEntryData;
 1044|    951|    const DataHeader   *pHeader;
 1045|    951|    UDataMemory        *pCommonData;
 1046|    951|    int32_t            commonDataIndex;
 1047|    951|    UBool              checkedExtendedICUData = false;
 1048|       |    /* try to get common data.  The loop is for platforms such as the 390 that do
 1049|       |     *  not initially load the full set of ICU data.  If the lookup of an ICU data item
 1050|       |     *  fails, the full (but slower to load) set is loaded, the and the loop repeats,
 1051|       |     *  trying the lookup again.  Once the full set of ICU data is loaded, the loop wont
 1052|       |     *  repeat because the full set will be checked the first time through.
 1053|       |     *
 1054|       |     *  The loop also handles the fallback to a .dat file if the application linked
 1055|       |     *   to the stub data library rather than a real library.
 1056|       |     */
 1057|  1.22k|    for (commonDataIndex = isICUData ? 0 : -1;;) {
  ------------------
  |  Branch (1057:28): [True: 951, False: 0]
  ------------------
 1058|  1.22k|        pCommonData=openCommonData(path, commonDataIndex, subErrorCode); /** search for pkg **/
 1059|       |
 1060|  1.22k|        if(U_SUCCESS(*subErrorCode) && pCommonData!=nullptr) {
  ------------------
  |  Branch (1060:12): [True: 1.22k, False: 0]
  |  Branch (1060:40): [True: 951, False: 275]
  ------------------
 1061|    951|            int32_t length;
 1062|       |
 1063|       |            /* look up the data piece in the common data */
 1064|    951|            pHeader=pCommonData->vFuncs->Lookup(pCommonData, tocEntryName, &length, subErrorCode);
 1065|       |#ifdef UDATA_DEBUG
 1066|       |            fprintf(stderr, "%s: pHeader=%p - %s\n", tocEntryName, (void*) pHeader, u_errorName(*subErrorCode));
 1067|       |#endif
 1068|       |
 1069|    951|            if(pHeader!=nullptr) {
  ------------------
  |  Branch (1069:16): [True: 676, False: 275]
  ------------------
 1070|    676|                pEntryData = checkDataItem(pHeader, isAcceptable, context, type, name, subErrorCode, pErrorCode);
 1071|       |#ifdef UDATA_DEBUG
 1072|       |                fprintf(stderr, "pEntryData=%p\n", (void*) pEntryData);
 1073|       |#endif
 1074|    676|                if (U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (1074:21): [True: 0, False: 676]
  ------------------
 1075|      0|                    return nullptr;
 1076|      0|                }
 1077|    676|                if (pEntryData != nullptr) {
  ------------------
  |  Branch (1077:21): [True: 676, False: 0]
  ------------------
 1078|    676|                    pEntryData->length = length;
 1079|    676|                    return pEntryData;
 1080|    676|                }
 1081|    676|            }
 1082|    951|        }
 1083|       |        // If we failed due to being out-of-memory, then stop early and report the error.
 1084|    550|        if (*subErrorCode == U_MEMORY_ALLOCATION_ERROR) {
  ------------------
  |  Branch (1084:13): [True: 0, False: 550]
  ------------------
 1085|      0|            *pErrorCode = *subErrorCode;
 1086|      0|            return nullptr;
 1087|      0|        }
 1088|       |        /* Data wasn't found.  If we were looking for an ICUData item and there is
 1089|       |         * more data available, load it and try again,
 1090|       |         * otherwise break out of this loop. */
 1091|    550|        if (!isICUData) {
  ------------------
  |  Branch (1091:13): [True: 0, False: 550]
  ------------------
 1092|      0|            return nullptr;
 1093|    550|        } else if (pCommonData != nullptr) {
  ------------------
  |  Branch (1093:20): [True: 275, False: 275]
  ------------------
 1094|    275|            ++commonDataIndex;  /* try the next data package */
 1095|    275|        } else if ((!checkedExtendedICUData) && extendICUData(subErrorCode)) {
  ------------------
  |  Branch (1095:20): [True: 275, False: 0]
  |  Branch (1095:49): [True: 0, False: 275]
  ------------------
 1096|      0|            checkedExtendedICUData = true;
 1097|       |            /* try this data package slot again: it changed from nullptr to non-nullptr */
 1098|    275|        } else {
 1099|    275|            return nullptr;
 1100|    275|        }
 1101|    550|    }
 1102|    951|}
udata.cpp:_ZL14openCommonDataPKciP10UErrorCode:
  673|  1.22k|{
  674|  1.22k|    UDataMemory tData;
  675|  1.22k|    const char *pathBuffer;
  676|  1.22k|    const char *inBasename;
  677|       |
  678|  1.22k|    if (U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (678:9): [True: 0, False: 1.22k]
  ------------------
  679|      0|        return nullptr;
  680|      0|    }
  681|       |
  682|  1.22k|    UDataMemory_init(&tData);
  ------------------
  |  |   80|  1.22k|#define UDataMemory_init U_ICU_ENTRY_POINT_RENAME(UDataMemory_init)
  |  |  ------------------
  |  |  |  |  123|  1.22k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.22k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.22k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  683|       |
  684|       |    /* ??????? TODO revisit this */ 
  685|  1.22k|    if (commonDataIndex >= 0) {
  ------------------
  |  Branch (685:9): [True: 1.22k, False: 1]
  ------------------
  686|       |        /* "mini-cache" for common ICU data */
  687|  1.22k|        if(commonDataIndex >= UPRV_LENGTHOF(gCommonICUDataArray)) {
  ------------------
  |  |   99|  1.22k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (687:12): [True: 0, False: 1.22k]
  ------------------
  688|      0|            return nullptr;
  689|      0|        }
  690|  1.22k|        {
  691|  1.22k|            Mutex lock;
  692|  1.22k|            if(gCommonICUDataArray[commonDataIndex] != nullptr) {
  ------------------
  |  Branch (692:16): [True: 950, False: 276]
  ------------------
  693|    950|                return gCommonICUDataArray[commonDataIndex];
  694|    950|            }
  695|    276|#if !defined(ICU_DATA_DIR_WINDOWS)
  696|       |// When using the Windows system data, we expect only a single data file.
  697|    276|            int32_t i;
  698|    276|            for(i = 0; i < commonDataIndex; ++i) {
  ------------------
  |  Branch (698:24): [True: 275, False: 1]
  ------------------
  699|    275|                if(gCommonICUDataArray[i]->pHeader == &U_ICUDATA_ENTRY_POINT) {
  ------------------
  |  |  171|    275|#define U_ICUDATA_ENTRY_POINT  U_DEF2_ICUDATA_ENTRY_POINT(U_ICU_VERSION_MAJOR_NUM,U_LIB_SUFFIX_C_NAME)
  |  |  ------------------
  |  |  |  |  178|    275|#define U_DEF2_ICUDATA_ENTRY_POINT(major,suff) U_DEF_ICUDATA_ENTRY_POINT(major,suff)
  |  |  |  |  ------------------
  |  |  |  |  |  |  187|    275|#define U_DEF_ICUDATA_ENTRY_POINT(major, suff) icudt##major##_dat
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (699:20): [True: 275, False: 0]
  ------------------
  700|       |                    /* The linked-in data is already in the list. */
  701|    275|                    return nullptr;
  702|    275|                }
  703|    275|            }
  704|    276|#endif
  705|    276|        }
  706|       |
  707|       |        /* Add the linked-in data to the list. */
  708|       |        /*
  709|       |         * This is where we would check and call weakly linked partial-data-library
  710|       |         * access functions.
  711|       |         */
  712|       |        /*
  713|       |        if (uprv_getICUData_collation) {
  714|       |            setCommonICUDataPointer(uprv_getICUData_collation(), false, pErrorCode);
  715|       |        }
  716|       |        if (uprv_getICUData_conversion) {
  717|       |            setCommonICUDataPointer(uprv_getICUData_conversion(), false, pErrorCode);
  718|       |        }
  719|       |        */
  720|      1|#if !defined(ICU_DATA_DIR_WINDOWS)
  721|       |// When using the Windows system data, we expect only a single data file.
  722|      1|        setCommonICUDataPointer(&U_ICUDATA_ENTRY_POINT, false, pErrorCode);
  ------------------
  |  |  171|      1|#define U_ICUDATA_ENTRY_POINT  U_DEF2_ICUDATA_ENTRY_POINT(U_ICU_VERSION_MAJOR_NUM,U_LIB_SUFFIX_C_NAME)
  |  |  ------------------
  |  |  |  |  178|      1|#define U_DEF2_ICUDATA_ENTRY_POINT(major,suff) U_DEF_ICUDATA_ENTRY_POINT(major,suff)
  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      1|#define U_DEF_ICUDATA_ENTRY_POINT(major, suff) icudt##major##_dat
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  723|      1|        {
  724|      1|            Mutex lock;
  725|      1|            return gCommonICUDataArray[commonDataIndex];
  726|    276|        }
  727|    276|#endif
  728|    276|    }
  729|       |
  730|       |
  731|       |    /* request is NOT for ICU Data.  */
  732|       |
  733|       |    /* Find the base name portion of the supplied path.   */
  734|       |    /*   inBasename will be left pointing somewhere within the original path string.      */
  735|      1|    inBasename = findBasename(path);
  736|       |#ifdef UDATA_DEBUG
  737|       |    fprintf(stderr, "inBasename = %s\n", inBasename);
  738|       |#endif
  739|       |
  740|      1|    if(*inBasename==0) {
  ------------------
  |  Branch (740:8): [True: 0, False: 1]
  ------------------
  741|       |        /* no basename.     This will happen if the original path was a directory name,   */
  742|       |        /*    like  "a/b/c/".   (Fallback to separate files will still work.)             */
  743|       |#ifdef UDATA_DEBUG
  744|       |        fprintf(stderr, "ocd: no basename in %s, bailing.\n", path);
  745|       |#endif
  746|      0|        if (U_SUCCESS(*pErrorCode)) {
  ------------------
  |  Branch (746:13): [True: 0, False: 0]
  ------------------
  747|      0|            *pErrorCode=U_FILE_ACCESS_ERROR;
  748|      0|        }
  749|      0|        return nullptr;
  750|      0|    }
  751|       |
  752|       |   /* Is the requested common data file already open and cached?                     */
  753|       |   /*   Note that the cache is keyed by the base name only.  The rest of the path,   */
  754|       |   /*     if any, is not considered.                                                 */
  755|      1|    UDataMemory  *dataToReturn = udata_findCachedData(inBasename, *pErrorCode);
  756|      1|    if (dataToReturn != nullptr || U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (756:9): [True: 0, False: 1]
  |  Branch (756:36): [True: 0, False: 1]
  ------------------
  757|      0|        return dataToReturn;
  758|      0|    }
  759|       |
  760|       |    /* Requested item is not in the cache.
  761|       |     * Hunt it down, trying all the path locations
  762|       |     */
  763|       |
  764|      1|    UDataPathIterator iter(u_getDataDirectory(), inBasename, path, ".dat", true, pErrorCode);
  ------------------
  |  |  271|      1|#define u_getDataDirectory U_ICU_ENTRY_POINT_RENAME(u_getDataDirectory)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  765|       |
  766|      1|    while ((UDataMemory_isLoaded(&tData)==false) && (pathBuffer = iter.next(pErrorCode)) != nullptr)
  ------------------
  |  |   81|      1|#define UDataMemory_isLoaded U_ICU_ENTRY_POINT_RENAME(UDataMemory_isLoaded)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (766:12): [True: 1, False: 0]
  |  Branch (766:53): [True: 0, False: 1]
  ------------------
  767|      0|    {
  768|       |#ifdef UDATA_DEBUG
  769|       |        fprintf(stderr, "ocd: trying path %s - ", pathBuffer);
  770|       |#endif
  771|      0|        uprv_mapFile(&tData, pathBuffer, pErrorCode);
  ------------------
  |  | 1525|      0|#define uprv_mapFile U_ICU_ENTRY_POINT_RENAME(uprv_mapFile)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  772|       |#ifdef UDATA_DEBUG
  773|       |        fprintf(stderr, "%s\n", UDataMemory_isLoaded(&tData)?"LOADED":"not loaded");
  774|       |#endif
  775|      0|    }
  776|      1|    if (U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (776:9): [True: 0, False: 1]
  ------------------
  777|      0|        return nullptr;
  778|      0|    }
  779|       |
  780|      1|    if (U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (780:9): [True: 0, False: 1]
  ------------------
  781|      0|        return nullptr;
  782|      0|    }
  783|      1|    if (!UDataMemory_isLoaded(&tData)) {
  ------------------
  |  |   81|      1|#define UDataMemory_isLoaded U_ICU_ENTRY_POINT_RENAME(UDataMemory_isLoaded)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (783:9): [True: 1, False: 0]
  ------------------
  784|       |        /* no common data */
  785|      1|        *pErrorCode=U_FILE_ACCESS_ERROR;
  786|      1|        return nullptr;
  787|      1|    }
  788|       |
  789|       |    /* we have mapped a file, check its header */
  790|      0|    udata_checkCommonData(&tData, pErrorCode);
  ------------------
  |  |  884|      0|#define udata_checkCommonData U_ICU_ENTRY_POINT_RENAME(udata_checkCommonData)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  791|       |
  792|       |
  793|       |    /* Cache the UDataMemory struct for this .dat file,
  794|       |     *   so we won't need to hunt it down and map it again next time
  795|       |     *   something is needed from it.                */
  796|      0|    return udata_cacheDataItem(inBasename, &tData, pErrorCode);
  797|      1|}
udata.cpp:_ZL23setCommonICUDataPointerPKvaP10UErrorCode:
  214|      1|setCommonICUDataPointer(const void *pData, UBool /*warn*/, UErrorCode *pErrorCode) {
  215|      1|    UDataMemory tData;
  216|      1|    UDataMemory_init(&tData);
  ------------------
  |  |   80|      1|#define UDataMemory_init U_ICU_ENTRY_POINT_RENAME(UDataMemory_init)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  217|      1|    UDataMemory_setData(&tData, pData);
  ------------------
  |  |   83|      1|#define UDataMemory_setData U_ICU_ENTRY_POINT_RENAME(UDataMemory_setData)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  218|      1|    udata_checkCommonData(&tData, pErrorCode);
  ------------------
  |  |  884|      1|#define udata_checkCommonData U_ICU_ENTRY_POINT_RENAME(udata_checkCommonData)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  219|      1|    return setCommonICUData(&tData, false, pErrorCode);
  220|      1|}
udata.cpp:_ZL20udata_findCachedDataPKcR10UErrorCode:
  306|    276|{
  307|    276|    UHashtable        *htable;
  308|    276|    UDataMemory       *retVal = nullptr;
  309|    276|    DataCacheElement  *el;
  310|    276|    const char        *baseName;
  311|       |
  312|    276|    htable = udata_getHashTable(err);
  313|    276|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (313:9): [True: 1, False: 275]
  ------------------
  314|      1|        return nullptr;
  315|      1|    }
  316|       |
  317|    275|    baseName = findBasename(path);   /* Cache remembers only the base name, not the full path. */
  318|    275|    umtx_lock(nullptr);
  ------------------
  |  | 1250|    275|#define umtx_lock U_ICU_ENTRY_POINT_RENAME(umtx_lock)
  |  |  ------------------
  |  |  |  |  123|    275|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    275|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    275|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  319|    275|    el = static_cast<DataCacheElement*>(uhash_get(htable, baseName));
  ------------------
  |  | 1007|    275|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|    275|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    275|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    275|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  320|    275|    umtx_unlock(nullptr);
  ------------------
  |  | 1251|    275|#define umtx_unlock U_ICU_ENTRY_POINT_RENAME(umtx_unlock)
  |  |  ------------------
  |  |  |  |  123|    275|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    275|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    275|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  321|    275|    if (el != nullptr) {
  ------------------
  |  Branch (321:9): [True: 0, False: 275]
  ------------------
  322|      0|        retVal = el->item;
  323|      0|    }
  324|       |#ifdef UDATA_DEBUG
  325|       |    fprintf(stderr, "Cache: [%s] -> %p\n", baseName, (void*) retVal);
  326|       |#endif
  327|    275|    return retVal;
  328|    276|}
udata.cpp:_ZL13extendICUDataP10UErrorCode:
  811|    275|{
  812|    275|    UDataMemory   *pData;
  813|    275|    UDataMemory   copyPData;
  814|    275|    UBool         didUpdate = false;
  815|       |
  816|       |    /*
  817|       |     * There is a chance for a race condition here.
  818|       |     * Normally, ICU data is loaded from a DLL or via mmap() and
  819|       |     * setCommonICUData() will detect if the same address is set twice.
  820|       |     * If ICU is built with data loading via fread() then the address will
  821|       |     * be different each time the common data is loaded and we may add
  822|       |     * multiple copies of the data.
  823|       |     * In this case, use a mutex to prevent the race.
  824|       |     * Use a specific mutex to avoid nested locks of the global mutex.
  825|       |     */
  826|       |#if MAP_IMPLEMENTATION==MAP_STDIO
  827|       |    static UMutex extendICUDataMutex;
  828|       |    umtx_lock(&extendICUDataMutex);
  829|       |#endif
  830|    275|    if(!umtx_loadAcquire(gHaveTriedToLoadCommonData)) {
  ------------------
  |  Branch (830:8): [True: 1, False: 274]
  ------------------
  831|       |        /* See if we can explicitly open a .dat file for the ICUData. */
  832|      1|        pData = openCommonData(
  833|      1|                   U_ICUDATA_NAME,            /*  "icudt20l" , for example.          */
  ------------------
  |  |  154|      1|#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER
  |  |  ------------------
  |  |  |  |  144|      1|#     define U_ICUDATA_TYPE_LETTER "l"
  |  |  ------------------
  ------------------
  834|      1|                   -1,                        /*  Pretend we're not opening ICUData  */
  835|      1|                   pErr);
  836|       |
  837|       |        /* How about if there is no pData, eh... */
  838|       |
  839|      1|       UDataMemory_init(&copyPData);
  ------------------
  |  |   80|      1|#define UDataMemory_init U_ICU_ENTRY_POINT_RENAME(UDataMemory_init)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  840|      1|       if(pData != nullptr) {
  ------------------
  |  Branch (840:11): [True: 0, False: 1]
  ------------------
  841|      0|          UDatamemory_assign(&copyPData, pData);
  ------------------
  |  |   84|      0|#define UDatamemory_assign U_ICU_ENTRY_POINT_RENAME(UDatamemory_assign)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  842|      0|          copyPData.map = nullptr;     /* The mapping for this data is owned by the hash table */
  843|      0|          copyPData.mapAddr = nullptr; /*   which will unmap it when ICU is shut down.         */
  844|       |                                       /* CommonICUData is also unmapped when ICU is shut down.*/
  845|       |                                       /* To avoid unmapping the data twice, zero out the map  */
  846|       |                                       /*   fields in the UDataMemory that we're assigning     */
  847|       |                                       /*   to CommonICUData.                                  */
  848|       |
  849|      0|          didUpdate = /* no longer using this result */
  850|      0|              setCommonICUData(&copyPData,/*  The new common data.                                */
  851|      0|                       false,             /*  No warnings if write didn't happen                  */
  852|      0|                       pErr);             /*  setCommonICUData honors errors; NOP if error set    */
  853|      0|        }
  854|       |
  855|      1|        umtx_storeRelease(gHaveTriedToLoadCommonData, 1);
  856|      1|    }
  857|       |
  858|    275|    didUpdate = findCommonICUDataByName(U_ICUDATA_NAME, *pErr);  /* Return 'true' when a racing writes out the extended                 */
  ------------------
  |  |  154|    275|#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER
  |  |  ------------------
  |  |  |  |  144|    275|#     define U_ICUDATA_TYPE_LETTER "l"
  |  |  ------------------
  ------------------
  859|       |                                                          /* data after another thread has failed to see it (in openCommonData), so     */
  860|       |                                                          /* extended data can be examined.                                             */
  861|       |                                                          /* Also handles a race through here before gHaveTriedToLoadCommonData is set. */
  862|       |
  863|       |#if MAP_IMPLEMENTATION==MAP_STDIO
  864|       |    umtx_unlock(&extendICUDataMutex);
  865|       |#endif
  866|    275|    return didUpdate;               /* Return true if ICUData pointer was updated.   */
  867|       |                                    /*   (Could potentially have been done by another thread racing */
  868|       |                                    /*   us through here, but that's fine, we still return true    */
  869|       |                                    /*   so that current thread will also examine extended data.   */
  870|    275|}
udata.cpp:_ZL23findCommonICUDataByNamePKcR10UErrorCode:
  144|    275|{
  145|    275|    UBool found = false;
  146|    275|    int32_t i;
  147|       |
  148|    275|    UDataMemory  *pData = udata_findCachedData(inBasename, err);
  149|    275|    if (U_FAILURE(err) || pData == nullptr)
  ------------------
  |  Branch (149:9): [True: 1, False: 274]
  |  Branch (149:27): [True: 274, False: 0]
  ------------------
  150|    275|        return false;
  151|       |
  152|      0|    {
  153|      0|        Mutex lock;
  154|      0|        for (i = 0; i < UPRV_LENGTHOF(gCommonICUDataArray); ++i) {
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (154:21): [True: 0, False: 0]
  ------------------
  155|      0|            if ((gCommonICUDataArray[i] != nullptr) && (gCommonICUDataArray[i]->pHeader == pData->pHeader)) {
  ------------------
  |  Branch (155:17): [True: 0, False: 0]
  |  Branch (155:56): [True: 0, False: 0]
  ------------------
  156|       |                /* The data pointer is already in the array. */
  157|      0|                found = true;
  158|      0|                break;
  159|      0|            }
  160|      0|        }
  161|      0|    }
  162|      0|    return found;
  163|    275|}

UDataMemory_init_78:
   28|  1.90k|U_CFUNC void UDataMemory_init(UDataMemory *This) {
   29|  1.90k|    uprv_memset(This, 0, sizeof(UDataMemory));
  ------------------
  |  |  100|  1.90k|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|  1.90k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
   30|  1.90k|    This->length=-1;
   31|  1.90k|}
UDatamemory_assign_78:
   34|      1|U_CFUNC void UDatamemory_assign(UDataMemory *dest, UDataMemory *source) {
   35|       |    /* UDataMemory Assignment.  Destination UDataMemory must be initialized first.  */
   36|      1|    UBool mallocedFlag = dest->heapAllocated;
   37|      1|    uprv_memcpy(dest, source, sizeof(UDataMemory));
  ------------------
  |  |   42|      1|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|      1|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|      1|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|      1|    _Pragma("clang diagnostic push") \
  |  |   45|      1|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|      1|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|      1|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|      1|    _Pragma("clang diagnostic pop") \
  |  |   49|      1|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|      1|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|      1|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|      1|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   38|      1|    dest->heapAllocated = mallocedFlag;
   39|      1|}
UDataMemory_createNewInstance_78:
   41|    677|U_CFUNC UDataMemory *UDataMemory_createNewInstance(UErrorCode *pErr) {
   42|    677|    UDataMemory *This;
   43|       |
   44|    677|    if (U_FAILURE(*pErr)) {
  ------------------
  |  Branch (44:9): [True: 0, False: 677]
  ------------------
   45|      0|        return nullptr;
   46|      0|    }
   47|    677|    This = (UDataMemory *)uprv_malloc(sizeof(UDataMemory));
  ------------------
  |  | 1524|    677|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|    677|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    677|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    677|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   48|    677|    if (This == nullptr) {
  ------------------
  |  Branch (48:9): [True: 0, False: 677]
  ------------------
   49|      0|        *pErr = U_MEMORY_ALLOCATION_ERROR; }
   50|    677|    else {
   51|    677|        UDataMemory_init(This);
  ------------------
  |  |   80|    677|#define UDataMemory_init U_ICU_ENTRY_POINT_RENAME(UDataMemory_init)
  |  |  ------------------
  |  |  |  |  123|    677|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    677|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    677|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   52|    677|        This->heapAllocated = true;
   53|    677|    }
   54|    677|    return This;
   55|    677|}
UDataMemory_normalizeDataPointer_78:
   59|      1|UDataMemory_normalizeDataPointer(const void *p) {
   60|       |    /* allow the data to be optionally prepended with an alignment-forcing double value */
   61|      1|    const DataHeader *pdh = (const DataHeader *)p;
   62|      1|    if(pdh==nullptr || (pdh->dataHeader.magic1==0xda && pdh->dataHeader.magic2==0x27)) {
  ------------------
  |  Branch (62:8): [True: 0, False: 1]
  |  Branch (62:25): [True: 1, False: 0]
  |  Branch (62:57): [True: 1, False: 0]
  ------------------
   63|      1|        return pdh;
   64|      1|    } else {
   65|       |#if U_PLATFORM == U_PF_OS400
   66|       |        /*
   67|       |        TODO: Fix this once the compiler implements this feature. Keep in sync with genccode.c
   68|       |
   69|       |        This is here because this platform can't currently put
   70|       |        const data into the read-only pages of an object or
   71|       |        shared library (service program). Only strings are allowed in read-only
   72|       |        pages, so we use char * strings to store the data.
   73|       |
   74|       |        In order to prevent the beginning of the data from ever matching the
   75|       |        magic numbers we must skip the initial double.
   76|       |        [grhoten 4/24/2003]
   77|       |        */
   78|       |        return (const DataHeader *)*((const void **)p+1);
   79|       |#else
   80|      0|        return (const DataHeader *)((const double *)p+1);
   81|      0|#endif
   82|      0|    }
   83|      1|}
UDataMemory_setData_78:
   86|      1|U_CFUNC void UDataMemory_setData (UDataMemory *This, const void *dataAddr) {
   87|      1|    This->pHeader = UDataMemory_normalizeDataPointer(dataAddr);
  ------------------
  |  |   82|      1|#define UDataMemory_normalizeDataPointer U_ICU_ENTRY_POINT_RENAME(UDataMemory_normalizeDataPointer)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   88|      1|}
udata_getMemory_78:
  104|    676|udata_getMemory(UDataMemory *pData) {
  105|    676|    if(pData!=nullptr && pData->pHeader!=nullptr) {
  ------------------
  |  Branch (105:8): [True: 676, False: 0]
  |  Branch (105:26): [True: 676, False: 0]
  ------------------
  106|    676|        return (char *)(pData->pHeader)+udata_getHeaderSize(pData->pHeader);
  ------------------
  |  |  887|    676|#define udata_getHeaderSize U_ICU_ENTRY_POINT_RENAME(udata_getHeaderSize)
  |  |  ------------------
  |  |  |  |  123|    676|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    676|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    676|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|    676|    } else {
  108|      0|        return nullptr;
  109|      0|    }
  110|    676|}
UDataMemory_isLoaded_78:
  159|      2|U_CFUNC UBool UDataMemory_isLoaded(const UDataMemory *This) {
  160|      2|    return This->pHeader != nullptr;
  161|      2|}

uhash_open_78:
  547|    869|           UErrorCode *status) {
  548|       |
  549|    869|    return _uhash_create(keyHash, keyComp, valueComp, DEFAULT_PRIME_INDEX, status);
  ------------------
  |  |   91|    869|#define DEFAULT_PRIME_INDEX 4
  ------------------
  550|    869|}
uhash_openSize_78:
  557|      5|               UErrorCode *status) {
  558|       |
  559|       |    /* Find the smallest index i for which PRIMES[i] >= size. */
  560|      5|    int32_t i = 0;
  561|     18|    while (i<(PRIMES_LENGTH-1) && PRIMES[i]<size) {
  ------------------
  |  |   90|     18|#define PRIMES_LENGTH UPRV_LENGTHOF(PRIMES)
  |  |  ------------------
  |  |  |  |   99|     18|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  |  |  ------------------
  ------------------
  |  Branch (561:12): [True: 18, False: 0]
  |  Branch (561:35): [True: 13, False: 5]
  ------------------
  562|     13|        ++i;
  563|     13|    }
  564|       |
  565|      5|    return _uhash_create(keyHash, keyComp, valueComp, i, status);
  566|      5|}
uhash_init_78:
  573|  2.33k|           UErrorCode *status) {
  574|       |
  575|  2.33k|    return _uhash_init(fillinResult, keyHash, keyComp, valueComp, DEFAULT_PRIME_INDEX, status);
  ------------------
  |  |   91|  2.33k|#define DEFAULT_PRIME_INDEX 4
  ------------------
  576|  2.33k|}
uhash_close_78:
  595|  2.62k|uhash_close(UHashtable *hash) {
  596|  2.62k|    if (hash == nullptr) {
  ------------------
  |  Branch (596:9): [True: 10, False: 2.61k]
  ------------------
  597|     10|        return;
  598|     10|    }
  599|  2.61k|    if (hash->elements != nullptr) {
  ------------------
  |  Branch (599:9): [True: 2.61k, False: 0]
  ------------------
  600|  2.61k|        if (hash->keyDeleter != nullptr || hash->valueDeleter != nullptr) {
  ------------------
  |  Branch (600:13): [True: 2.61k, False: 1]
  |  Branch (600:44): [True: 0, False: 1]
  ------------------
  601|  2.61k|            int32_t pos=UHASH_FIRST;
  ------------------
  |  |  610|  2.61k|#define UHASH_FIRST (-1)
  ------------------
  602|  2.61k|            UHashElement *e;
  603|   115k|            while ((e = (UHashElement*) uhash_nextElement(hash, &pos)) != nullptr) {
  ------------------
  |  | 1029|   115k|#define uhash_nextElement U_ICU_ENTRY_POINT_RENAME(uhash_nextElement)
  |  |  ------------------
  |  |  |  |  123|   115k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   115k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   115k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (603:20): [True: 112k, False: 2.61k]
  ------------------
  604|   112k|                HASH_DELETE_KEY_VALUE(hash, e->key.pointer, e->value.pointer);
  ------------------
  |  |  124|   112k|#define HASH_DELETE_KEY_VALUE(hash, keypointer, valuepointer) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|   112k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |  125|   112k|    if (hash->keyDeleter != nullptr && keypointer != nullptr) { \
  |  |  ------------------
  |  |  |  Branch (125:9): [True: 112k, False: 0]
  |  |  |  Branch (125:40): [True: 112k, False: 0]
  |  |  ------------------
  |  |  126|   112k|        (*hash->keyDeleter)(keypointer); \
  |  |  127|   112k|    } \
  |  |  128|   112k|    if (hash->valueDeleter != nullptr && valuepointer != nullptr) { \
  |  |  ------------------
  |  |  |  Branch (128:9): [True: 100k, False: 11.5k]
  |  |  |  Branch (128:42): [True: 100k, False: 0]
  |  |  ------------------
  |  |  129|   100k|        (*hash->valueDeleter)(valuepointer); \
  |  |  130|   100k|    } \
  |  |  131|   112k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|   112k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  605|   112k|            }
  606|  2.61k|        }
  607|  2.61k|        uprv_free(hash->elements);
  ------------------
  |  | 1503|  2.61k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  2.61k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.61k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.61k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  608|  2.61k|        hash->elements = nullptr;
  609|  2.61k|    }
  610|  2.61k|    if (hash->allocated) {
  ------------------
  |  Branch (610:9): [True: 287, False: 2.33k]
  ------------------
  611|    287|        uprv_free(hash);
  ------------------
  |  | 1503|    287|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  612|    287|    }
  613|  2.61k|}
uhash_setKeyDeleter_78:
  636|  2.61k|uhash_setKeyDeleter(UHashtable *hash, UObjectDeleter *fn) {
  637|  2.61k|    UObjectDeleter *result = hash->keyDeleter;
  638|  2.61k|    hash->keyDeleter = fn;
  639|  2.61k|    return result;
  640|  2.61k|}
uhash_setValueDeleter_78:
  643|  2.35k|uhash_setValueDeleter(UHashtable *hash, UObjectDeleter *fn) {
  644|  2.35k|    UObjectDeleter *result = hash->valueDeleter;
  645|  2.35k|    hash->valueDeleter = fn;
  646|  2.35k|    return result;
  647|  2.35k|}
uhash_get_78:
  665|  2.11M|          const void* key) {
  666|  2.11M|    UHashTok keyholder;
  667|  2.11M|    keyholder.pointer = (void*) key;
  668|  2.11M|    return _uhash_find(hash, keyholder, hash->keyHasher(keyholder))->value.pointer;
  669|  2.11M|}
uhash_geti_78:
  681|  17.0k|           const void* key) {
  682|  17.0k|    UHashTok keyholder;
  683|  17.0k|    keyholder.pointer = (void*) key;
  684|  17.0k|    return _uhash_find(hash, keyholder, hash->keyHasher(keyholder))->value.integer;
  685|  17.0k|}
uhash_put_78:
  721|   346k|          UErrorCode *status) {
  722|   346k|    UHashTok keyholder, valueholder;
  723|   346k|    keyholder.pointer = key;
  724|   346k|    valueholder.pointer = value;
  725|   346k|    return _uhash_put(hash, keyholder, valueholder,
  726|   346k|                      HINT_KEY_POINTER | HINT_VALUE_POINTER,
  ------------------
  |  |  139|   346k|#define HINT_KEY_POINTER   (1)
  ------------------
                                    HINT_KEY_POINTER | HINT_VALUE_POINTER,
  ------------------
  |  |  140|   346k|#define HINT_VALUE_POINTER (2)
  ------------------
  727|   346k|                      status).pointer;
  728|   346k|}
uhash_puti_78:
  747|  11.4k|           UErrorCode *status) {
  748|  11.4k|    UHashTok keyholder, valueholder;
  749|  11.4k|    keyholder.pointer = key;
  750|  11.4k|    valueholder.integer = value;
  751|  11.4k|    return _uhash_put(hash, keyholder, valueholder,
  752|  11.4k|                      HINT_KEY_POINTER,
  ------------------
  |  |  139|  11.4k|#define HINT_KEY_POINTER   (1)
  ------------------
  753|  11.4k|                      status).integer;
  754|  11.4k|}
uhash_remove_78:
  799|  7.03k|             const void* key) {
  800|  7.03k|    UHashTok keyholder;
  801|  7.03k|    keyholder.pointer = (void*) key;
  802|  7.03k|    return _uhash_remove(hash, keyholder).pointer;
  803|  7.03k|}
uhash_nextElement_78:
  875|   208k|uhash_nextElement(const UHashtable *hash, int32_t *pos) {
  876|       |    /* Walk through the array until we find an element that is not
  877|       |     * EMPTY and not DELETED.
  878|       |     */
  879|   208k|    int32_t i;
  880|   208k|    U_ASSERT(hash != nullptr);
  ------------------
  |  |   35|   208k|#   define U_ASSERT(exp) (void)0
  ------------------
  881|   918k|    for (i = *pos + 1; i < hash->length; ++i) {
  ------------------
  |  Branch (881:24): [True: 915k, False: 2.90k]
  ------------------
  882|   915k|        if (!IS_EMPTY_OR_DELETED(hash->elements[i].hashcode)) {
  ------------------
  |  |  120|   915k|#define IS_EMPTY_OR_DELETED(x) ((x) < 0)
  ------------------
  |  Branch (882:13): [True: 205k, False: 710k]
  ------------------
  883|   205k|            *pos = i;
  884|   205k|            return &(hash->elements[i]);
  885|   205k|        }
  886|   915k|    }
  887|       |
  888|       |    /* No more elements */
  889|  2.90k|    return nullptr;
  890|   208k|}
uhash_hashUChars_78:
  932|  1.50M|uhash_hashUChars(const UHashTok key) {
  933|  1.50M|    const char16_t *s = (const char16_t *)key.pointer;
  934|  1.50M|    return s == nullptr ? 0 : ustr_hashUCharsN(s, u_strlen(s));
  ------------------
  |  | 1880|  1.50M|#define ustr_hashUCharsN U_ICU_ENTRY_POINT_RENAME(ustr_hashUCharsN)
  |  |  ------------------
  |  |  |  |  123|  1.50M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.50M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.50M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return s == nullptr ? 0 : ustr_hashUCharsN(s, u_strlen(s));
  ------------------
  |  |  393|  1.50M|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|  1.50M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.50M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.50M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (934:12): [True: 0, False: 1.50M]
  ------------------
  935|  1.50M|}
uhash_hashChars_78:
  938|  1.45M|uhash_hashChars(const UHashTok key) {
  939|  1.45M|    const char *s = (const char *)key.pointer;
  940|  1.45M|    return s == nullptr ? 0 : static_cast<int32_t>(ustr_hashCharsN(s, static_cast<int32_t>(uprv_strlen(s))));
  ------------------
  |  | 1878|   828k|#define ustr_hashCharsN U_ICU_ENTRY_POINT_RENAME(ustr_hashCharsN)
  |  |  ------------------
  |  |  |  |  123|   828k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   828k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   828k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return s == nullptr ? 0 : static_cast<int32_t>(ustr_hashCharsN(s, static_cast<int32_t>(uprv_strlen(s))));
  ------------------
  |  |   37|   828k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|   828k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (940:12): [True: 623k, False: 828k]
  ------------------
  941|  1.45M|}
uhash_compareUChars_78:
 1012|   968k|uhash_compareUChars(const UHashTok key1, const UHashTok key2) {
 1013|   968k|    const char16_t *p1 = (const char16_t*) key1.pointer;
 1014|   968k|    const char16_t *p2 = (const char16_t*) key2.pointer;
 1015|   968k|    if (p1 == p2) {
  ------------------
  |  Branch (1015:9): [True: 16.8k, False: 951k]
  ------------------
 1016|  16.8k|        return true;
 1017|  16.8k|    }
 1018|   951k|    if (p1 == nullptr || p2 == nullptr) {
  ------------------
  |  Branch (1018:9): [True: 0, False: 951k]
  |  Branch (1018:26): [True: 0, False: 951k]
  ------------------
 1019|      0|        return false;
 1020|      0|    }
 1021|  13.0M|    while (*p1 != 0 && *p1 == *p2) {
  ------------------
  |  Branch (1021:12): [True: 12.1M, False: 923k]
  |  Branch (1021:24): [True: 12.1M, False: 28.4k]
  ------------------
 1022|  12.1M|        ++p1;
 1023|  12.1M|        ++p2;
 1024|  12.1M|    }
 1025|   951k|    return *p1 == *p2;
 1026|   951k|}
uhash_compareChars_78:
 1029|  1.25M|uhash_compareChars(const UHashTok key1, const UHashTok key2) {
 1030|  1.25M|    const char *p1 = (const char*) key1.pointer;
 1031|  1.25M|    const char *p2 = (const char*) key2.pointer;
 1032|  1.25M|    if (p1 == p2) {
  ------------------
  |  Branch (1032:9): [True: 621k, False: 635k]
  ------------------
 1033|   621k|        return true;
 1034|   621k|    }
 1035|   635k|    if (p1 == nullptr || p2 == nullptr) {
  ------------------
  |  Branch (1035:9): [True: 0, False: 635k]
  |  Branch (1035:26): [True: 0, False: 635k]
  ------------------
 1036|      0|        return false;
 1037|      0|    }
 1038|  7.02M|    while (*p1 != 0 && *p1 == *p2) {
  ------------------
  |  Branch (1038:12): [True: 6.39M, False: 635k]
  |  Branch (1038:24): [True: 6.39M, False: 0]
  ------------------
 1039|  6.39M|        ++p1;
 1040|  6.39M|        ++p2;
 1041|  6.39M|    }
 1042|   635k|    return *p1 == *p2;
 1043|   635k|}
uhash.cpp:_ZL13_uhash_createPFi8UElementEPFaS_S_ES3_iP10UErrorCode:
  287|    874|              UErrorCode *status) {
  288|    874|    UHashtable *result;
  289|       |
  290|    874|    if (U_FAILURE(*status)) return nullptr;
  ------------------
  |  Branch (290:9): [True: 0, False: 874]
  ------------------
  291|       |
  292|    874|    result = static_cast<UHashtable*>(uprv_malloc(sizeof(UHashtable)));
  ------------------
  |  | 1524|    874|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|    874|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    874|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    874|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  293|    874|    if (result == nullptr) {
  ------------------
  |  Branch (293:9): [True: 0, False: 874]
  ------------------
  294|      0|        *status = U_MEMORY_ALLOCATION_ERROR;
  295|      0|        return nullptr;
  296|      0|    }
  297|       |
  298|    874|    _uhash_init(result, keyHash, keyComp, valueComp, primeIndex, status);
  299|    874|    result->allocated       = true;
  300|       |
  301|    874|    if (U_FAILURE(*status)) {
  ------------------
  |  Branch (301:9): [True: 0, False: 874]
  ------------------
  302|      0|        uprv_free(result);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  303|      0|        return nullptr;
  304|      0|    }
  305|       |
  306|    874|    return result;
  307|    874|}
uhash.cpp:_ZL11_uhash_initP10UHashtablePFi8UElementEPFaS1_S1_ES5_iP10UErrorCode:
  260|  3.20k|{
  261|  3.20k|    if (U_FAILURE(*status)) return nullptr;
  ------------------
  |  Branch (261:9): [True: 0, False: 3.20k]
  ------------------
  262|  3.20k|    U_ASSERT(keyHash != nullptr);
  ------------------
  |  |   35|  3.20k|#   define U_ASSERT(exp) (void)0
  ------------------
  263|  3.20k|    U_ASSERT(keyComp != nullptr);
  ------------------
  |  |   35|  3.20k|#   define U_ASSERT(exp) (void)0
  ------------------
  264|       |
  265|  3.20k|    result->keyHasher       = keyHash;
  266|  3.20k|    result->keyComparator   = keyComp;
  267|  3.20k|    result->valueComparator = valueComp;
  268|  3.20k|    result->keyDeleter      = nullptr;
  269|  3.20k|    result->valueDeleter    = nullptr;
  270|  3.20k|    result->allocated       = false;
  271|  3.20k|    _uhash_internalSetResizePolicy(result, U_GROW);
  272|       |
  273|  3.20k|    _uhash_allocate(result, primeIndex, status);
  274|       |
  275|  3.20k|    if (U_FAILURE(*status)) {
  ------------------
  |  Branch (275:9): [True: 0, False: 3.20k]
  ------------------
  276|      0|        return nullptr;
  277|      0|    }
  278|       |
  279|  3.20k|    return result;
  280|  3.20k|}
uhash.cpp:_ZL15_uhash_allocateP10UHashtableiP10UErrorCode:
  217|  5.73k|                UErrorCode *status) {
  218|       |
  219|  5.73k|    UHashElement *p, *limit;
  220|  5.73k|    UHashTok emptytok;
  221|       |
  222|  5.73k|    if (U_FAILURE(*status)) return;
  ------------------
  |  Branch (222:9): [True: 0, False: 5.73k]
  ------------------
  223|       |
  224|  5.73k|    U_ASSERT(primeIndex >= 0 && primeIndex < PRIMES_LENGTH);
  ------------------
  |  |   35|  5.73k|#   define U_ASSERT(exp) (void)0
  ------------------
  225|       |
  226|  5.73k|    hash->primeIndex = static_cast<int8_t>(primeIndex);
  227|  5.73k|    hash->length = PRIMES[primeIndex];
  228|       |
  229|  5.73k|    p = hash->elements = static_cast<UHashElement*>(
  230|  5.73k|        uprv_malloc(sizeof(UHashElement) * hash->length));
  ------------------
  |  | 1524|  5.73k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  5.73k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.73k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.73k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|       |
  232|  5.73k|    if (hash->elements == nullptr) {
  ------------------
  |  Branch (232:9): [True: 0, False: 5.73k]
  ------------------
  233|      0|        *status = U_MEMORY_ALLOCATION_ERROR;
  234|      0|        return;
  235|      0|    }
  236|       |
  237|  5.73k|    emptytok.pointer = nullptr; /* Only one of these two is needed */
  238|  5.73k|    emptytok.integer = 0;    /* but we don't know which one. */
  239|       |
  240|  5.73k|    limit = p + hash->length;
  241|  2.29M|    while (p < limit) {
  ------------------
  |  Branch (241:12): [True: 2.28M, False: 5.73k]
  ------------------
  242|  2.28M|        p->key = emptytok;
  243|  2.28M|        p->value = emptytok;
  244|  2.28M|        p->hashcode = HASH_EMPTY;
  ------------------
  |  |  118|  2.28M|#define HASH_EMPTY      ((int32_t) HASH_DELETED + 1)
  |  |  ------------------
  |  |  |  |  117|  2.28M|#define HASH_DELETED    ((int32_t) 0x80000000)
  |  |  ------------------
  ------------------
  245|  2.28M|        ++p;
  246|  2.28M|    }
  247|       |
  248|  5.73k|    hash->count = 0;
  249|  5.73k|    hash->lowWaterMark = static_cast<int32_t>(hash->length * hash->lowWaterRatio);
  250|  5.73k|    hash->highWaterMark = static_cast<int32_t>(hash->length * hash->highWaterRatio);
  251|  5.73k|}
uhash.cpp:_ZL30_uhash_internalSetResizePolicyP10UHashtable17UHashResizePolicy:
  197|  3.20k|_uhash_internalSetResizePolicy(UHashtable *hash, enum UHashResizePolicy policy) {
  198|  3.20k|    U_ASSERT(hash != nullptr);
  ------------------
  |  |   35|  3.20k|#   define U_ASSERT(exp) (void)0
  ------------------
  199|  3.20k|    U_ASSERT(((int32_t)policy) >= 0);
  ------------------
  |  |   35|  3.20k|#   define U_ASSERT(exp) (void)0
  ------------------
  200|  3.20k|    U_ASSERT(((int32_t)policy) < 3);
  ------------------
  |  |   35|  3.20k|#   define U_ASSERT(exp) (void)0
  ------------------
  201|  3.20k|    hash->lowWaterRatio  = RESIZE_POLICY_RATIO_TABLE[policy * 2];
  202|  3.20k|    hash->highWaterRatio = RESIZE_POLICY_RATIO_TABLE[policy * 2 + 1];
  203|  3.20k|}
uhash.cpp:_ZL13_uhash_rehashP10UHashtableP10UErrorCode:
  399|  2.53k|_uhash_rehash(UHashtable *hash, UErrorCode *status) {
  400|       |
  401|  2.53k|    UHashElement *old = hash->elements;
  402|  2.53k|    int32_t oldLength = hash->length;
  403|  2.53k|    int32_t newPrimeIndex = hash->primeIndex;
  404|  2.53k|    int32_t i;
  405|       |
  406|  2.53k|    if (hash->count > hash->highWaterMark) {
  ------------------
  |  Branch (406:9): [True: 2.53k, False: 0]
  ------------------
  407|  2.53k|        if (++newPrimeIndex >= PRIMES_LENGTH) {
  ------------------
  |  |   90|  2.53k|#define PRIMES_LENGTH UPRV_LENGTHOF(PRIMES)
  |  |  ------------------
  |  |  |  |   99|  2.53k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  |  |  ------------------
  ------------------
  |  Branch (407:13): [True: 0, False: 2.53k]
  ------------------
  408|      0|            return;
  409|      0|        }
  410|  2.53k|    } else if (hash->count < hash->lowWaterMark) {
  ------------------
  |  Branch (410:16): [True: 0, False: 0]
  ------------------
  411|      0|        if (--newPrimeIndex < 0) {
  ------------------
  |  Branch (411:13): [True: 0, False: 0]
  ------------------
  412|      0|            return;
  413|      0|        }
  414|      0|    } else {
  415|      0|        return;
  416|      0|    }
  417|       |
  418|  2.53k|    _uhash_allocate(hash, newPrimeIndex, status);
  419|       |
  420|  2.53k|    if (U_FAILURE(*status)) {
  ------------------
  |  Branch (420:9): [True: 0, False: 2.53k]
  ------------------
  421|      0|        hash->elements = old;
  422|      0|        hash->length = oldLength;
  423|      0|        return;
  424|      0|    }
  425|       |
  426|   940k|    for (i = oldLength - 1; i >= 0; --i) {
  ------------------
  |  Branch (426:29): [True: 938k, False: 2.53k]
  ------------------
  427|   938k|        if (!IS_EMPTY_OR_DELETED(old[i].hashcode)) {
  ------------------
  |  |  120|   938k|#define IS_EMPTY_OR_DELETED(x) ((x) < 0)
  ------------------
  |  Branch (427:13): [True: 470k, False: 467k]
  ------------------
  428|   470k|            UHashElement *e = _uhash_find(hash, old[i].key, old[i].hashcode);
  429|   470k|            U_ASSERT(e != nullptr);
  ------------------
  |  |   35|   470k|#   define U_ASSERT(exp) (void)0
  ------------------
  430|   470k|            U_ASSERT(e->hashcode == HASH_EMPTY);
  ------------------
  |  |   35|   470k|#   define U_ASSERT(exp) (void)0
  ------------------
  431|   470k|            e->key = old[i].key;
  432|   470k|            e->value = old[i].value;
  433|   470k|            e->hashcode = old[i].hashcode;
  434|   470k|            ++hash->count;
  435|   470k|        }
  436|   938k|    }
  437|       |
  438|  2.53k|    uprv_free(old);
  ------------------
  |  | 1503|  2.53k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  2.53k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.53k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.53k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  439|  2.53k|}
uhash.cpp:_ZL11_uhash_findPK10UHashtable8UElementi:
  339|  2.97M|            int32_t hashcode) {
  340|       |
  341|  2.97M|    int32_t firstDeleted = -1;  /* assume invalid index */
  342|  2.97M|    int32_t theIndex, startIndex;
  343|  2.97M|    int32_t jump = 0; /* lazy evaluate */
  344|  2.97M|    int32_t tableHash;
  345|  2.97M|    UHashElement *elements = hash->elements;
  346|       |
  347|  2.97M|    hashcode &= 0x7FFFFFFF; /* must be positive */
  348|  2.97M|    startIndex = theIndex = (hashcode ^ 0x4000000) % hash->length;
  349|       |
  350|  3.96M|    do {
  351|  3.96M|        tableHash = elements[theIndex].hashcode;
  352|  3.96M|        if (tableHash == hashcode) {          /* quick check */
  ------------------
  |  Branch (352:13): [True: 1.65M, False: 2.31M]
  ------------------
  353|  1.65M|            if ((*hash->keyComparator)(key, elements[theIndex].key)) {
  ------------------
  |  Branch (353:17): [True: 1.65M, False: 0]
  ------------------
  354|  1.65M|                return &(elements[theIndex]);
  355|  1.65M|            }
  356|  2.31M|        } else if (!IS_EMPTY_OR_DELETED(tableHash)) {
  ------------------
  |  |  120|  2.31M|#define IS_EMPTY_OR_DELETED(x) ((x) < 0)
  ------------------
  |  Branch (356:20): [True: 997k, False: 1.31M]
  ------------------
  357|       |            /* We have hit a slot which contains a key-value pair,
  358|       |             * but for which the hash code does not match.  Keep
  359|       |             * looking.
  360|       |             */
  361|  1.31M|        } else if (tableHash == HASH_EMPTY) { /* empty, end o' the line */
  ------------------
  |  |  118|  1.31M|#define HASH_EMPTY      ((int32_t) HASH_DELETED + 1)
  |  |  ------------------
  |  |  |  |  117|  1.31M|#define HASH_DELETED    ((int32_t) 0x80000000)
  |  |  ------------------
  ------------------
  |  Branch (361:20): [True: 1.31M, False: 108]
  ------------------
  362|  1.31M|            break;
  363|  1.31M|        } else if (firstDeleted < 0) { /* remember first deleted */
  ------------------
  |  Branch (363:20): [True: 108, False: 0]
  ------------------
  364|    108|            firstDeleted = theIndex;
  365|    108|        }
  366|   997k|        if (jump == 0) { /* lazy compute jump */
  ------------------
  |  Branch (366:13): [True: 802k, False: 195k]
  ------------------
  367|       |            /* The jump value must be relatively prime to the table
  368|       |             * length.  As long as the length is prime, then any value
  369|       |             * 1..length-1 will be relatively prime to it.
  370|       |             */
  371|   802k|            jump = (hashcode % (hash->length - 1)) + 1;
  372|   802k|        }
  373|   997k|        theIndex = (theIndex + jump) % hash->length;
  374|   997k|    } while (theIndex != startIndex);
  ------------------
  |  Branch (374:14): [True: 997k, False: 0]
  ------------------
  375|       |
  376|  1.31M|    if (firstDeleted >= 0) {
  ------------------
  |  Branch (376:9): [True: 105, False: 1.31M]
  ------------------
  377|    105|        theIndex = firstDeleted; /* reset if had deleted slot */
  378|  1.31M|    } else if (tableHash != HASH_EMPTY) {
  ------------------
  |  |  118|  1.31M|#define HASH_EMPTY      ((int32_t) HASH_DELETED + 1)
  |  |  ------------------
  |  |  |  |  117|  1.31M|#define HASH_DELETED    ((int32_t) 0x80000000)
  |  |  ------------------
  ------------------
  |  Branch (378:16): [True: 0, False: 1.31M]
  ------------------
  379|       |        /* We get to this point if the hashtable is full (no empty or
  380|       |         * deleted slots), and we've failed to find a match.  THIS
  381|       |         * WILL NEVER HAPPEN as long as uhash_put() makes sure that
  382|       |         * count is always < length.
  383|       |         */
  384|      0|        UPRV_UNREACHABLE_EXIT;
  ------------------
  |  |   68|      0|#   define UPRV_UNREACHABLE_EXIT abort()
  ------------------
  385|      0|    }
  386|  1.31M|    return &(elements[theIndex]);
  387|  1.31M|}
uhash.cpp:_ZL10_uhash_putP10UHashtable8UElementS1_aP10UErrorCode:
  471|   357k|           UErrorCode *status) {
  472|       |
  473|       |    /* Put finds the position in the table for the new value.  If the
  474|       |     * key is already in the table, it is deleted, if there is a
  475|       |     * non-nullptr keyDeleter.  Then the key, the hash and the value are
  476|       |     * all put at the position in their respective arrays.
  477|       |     */
  478|   357k|    int32_t hashcode;
  479|   357k|    UHashElement* e;
  480|   357k|    UHashTok emptytok;
  481|       |
  482|   357k|    if (U_FAILURE(*status)) {
  ------------------
  |  Branch (482:9): [True: 0, False: 357k]
  ------------------
  483|      0|        goto err;
  484|      0|    }
  485|   357k|    U_ASSERT(hash != nullptr);
  ------------------
  |  |   35|   357k|#   define U_ASSERT(exp) (void)0
  ------------------
  486|   357k|    if ((hint & HINT_VALUE_POINTER) ?
  ------------------
  |  |  140|   357k|#define HINT_VALUE_POINTER (2)
  ------------------
  |  Branch (486:9): [True: 346k, False: 11.4k]
  |  Branch (486:9): [True: 0, False: 357k]
  ------------------
  487|   346k|            value.pointer == nullptr :
  488|   357k|            value.integer == 0 && (hint & HINT_ALLOW_ZERO) == 0) {
  ------------------
  |  |  141|      0|#define HINT_ALLOW_ZERO    (4)
  ------------------
  |  Branch (488:13): [True: 0, False: 11.4k]
  |  Branch (488:35): [True: 0, False: 0]
  ------------------
  489|       |        /* Disallow storage of nullptr values, since nullptr is returned by
  490|       |         * get() to indicate an absent key.  Storing nullptr == removing.
  491|       |         */
  492|      0|        return _uhash_remove(hash, key);
  493|      0|    }
  494|   357k|    if (hash->count > hash->highWaterMark) {
  ------------------
  |  Branch (494:9): [True: 2.53k, False: 355k]
  ------------------
  495|  2.53k|        _uhash_rehash(hash, status);
  496|  2.53k|        if (U_FAILURE(*status)) {
  ------------------
  |  Branch (496:13): [True: 0, False: 2.53k]
  ------------------
  497|      0|            goto err;
  498|      0|        }
  499|  2.53k|    }
  500|       |
  501|   357k|    hashcode = (*hash->keyHasher)(key);
  502|   357k|    e = _uhash_find(hash, key, hashcode);
  503|   357k|    U_ASSERT(e != nullptr);
  ------------------
  |  |   35|   357k|#   define U_ASSERT(exp) (void)0
  ------------------
  504|       |
  505|   357k|    if (IS_EMPTY_OR_DELETED(e->hashcode)) {
  ------------------
  |  |  120|   357k|#define IS_EMPTY_OR_DELETED(x) ((x) < 0)
  |  |  ------------------
  |  |  |  Branch (120:32): [True: 357k, False: 0]
  |  |  ------------------
  ------------------
  506|       |        /* Important: We must never actually fill the table up.  If we
  507|       |         * do so, then _uhash_find() will return nullptr, and we'll have
  508|       |         * to check for nullptr after every call to _uhash_find().  To
  509|       |         * avoid this we make sure there is always at least one empty
  510|       |         * or deleted slot in the table.  This only is a problem if we
  511|       |         * are out of memory and rehash isn't working.
  512|       |         */
  513|   357k|        ++hash->count;
  514|   357k|        if (hash->count == hash->length) {
  ------------------
  |  Branch (514:13): [True: 0, False: 357k]
  ------------------
  515|       |            /* Don't allow count to reach length */
  516|      0|            --hash->count;
  517|      0|            *status = U_MEMORY_ALLOCATION_ERROR;
  518|      0|            goto err;
  519|      0|        }
  520|   357k|    }
  521|       |
  522|       |    /* We must in all cases handle storage properly.  If there was an
  523|       |     * old key, then it must be deleted (if the deleter != nullptr).
  524|       |     * Make hashcodes stored in table positive.
  525|       |     */
  526|   357k|    return _uhash_setElement(hash, e, hashcode & 0x7FFFFFFF, key, value, hint);
  527|       |
  528|      0| err:
  529|       |    /* If the deleters are non-nullptr, this method adopts its key and/or
  530|       |     * value arguments, and we must be sure to delete the key and/or
  531|       |     * value in all cases, even upon failure.
  532|       |     */
  533|      0|    HASH_DELETE_KEY_VALUE(hash, key.pointer, value.pointer);
  ------------------
  |  |  124|      0|#define HASH_DELETE_KEY_VALUE(hash, keypointer, valuepointer) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|      0|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |  125|      0|    if (hash->keyDeleter != nullptr && keypointer != nullptr) { \
  |  |  ------------------
  |  |  |  Branch (125:9): [True: 0, False: 0]
  |  |  |  Branch (125:40): [True: 0, False: 0]
  |  |  ------------------
  |  |  126|      0|        (*hash->keyDeleter)(keypointer); \
  |  |  127|      0|    } \
  |  |  128|      0|    if (hash->valueDeleter != nullptr && valuepointer != nullptr) { \
  |  |  ------------------
  |  |  |  Branch (128:9): [True: 0, False: 0]
  |  |  |  Branch (128:42): [True: 0, False: 0]
  |  |  ------------------
  |  |  129|      0|        (*hash->valueDeleter)(valuepointer); \
  |  |  130|      0|    } \
  |  |  131|      0|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|      0|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  534|      0|    emptytok.pointer = nullptr; emptytok.integer = 0;
  535|      0|    return emptytok;
  536|   357k|}
uhash.cpp:_ZL17_uhash_setElementP10UHashtableP12UHashElementi8UElementS3_a:
  150|   364k|                  UHashTok key, UHashTok value, int8_t hint) {
  151|       |
  152|   364k|    UHashTok oldValue = e->value;
  153|   364k|    if (hash->keyDeleter != nullptr && e->key.pointer != nullptr &&
  ------------------
  |  Branch (153:9): [True: 127k, False: 237k]
  |  Branch (153:40): [True: 7.03k, False: 120k]
  ------------------
  154|   364k|        e->key.pointer != key.pointer) { /* Avoid double deletion */
  ------------------
  |  Branch (154:9): [True: 7.03k, False: 0]
  ------------------
  155|  7.03k|        (*hash->keyDeleter)(e->key.pointer);
  156|  7.03k|    }
  157|   364k|    if (hash->valueDeleter != nullptr) {
  ------------------
  |  Branch (157:9): [True: 331k, False: 33.1k]
  ------------------
  158|   331k|        if (oldValue.pointer != nullptr &&
  ------------------
  |  Branch (158:13): [True: 0, False: 331k]
  ------------------
  159|   331k|            oldValue.pointer != value.pointer) { /* Avoid double deletion */
  ------------------
  |  Branch (159:13): [True: 0, False: 0]
  ------------------
  160|      0|            (*hash->valueDeleter)(oldValue.pointer);
  161|      0|        }
  162|   331k|        oldValue.pointer = nullptr;
  163|   331k|    }
  164|       |    /* Compilers should copy the UHashTok union correctly, but even if
  165|       |     * they do, memory heap tools (e.g. BoundsChecker) can get
  166|       |     * confused when a pointer is cloaked in a union and then copied.
  167|       |     * TO ALLEVIATE THIS, we use hints (based on what API the user is
  168|       |     * calling) to copy pointers when we know the user thinks
  169|       |     * something is a pointer. */
  170|   364k|    if (hint & HINT_KEY_POINTER) {
  ------------------
  |  |  139|   364k|#define HINT_KEY_POINTER   (1)
  ------------------
  |  Branch (170:9): [True: 357k, False: 7.03k]
  ------------------
  171|   357k|        e->key.pointer = key.pointer;
  172|   357k|    } else {
  173|  7.03k|        e->key = key;
  174|  7.03k|    }
  175|   364k|    if (hint & HINT_VALUE_POINTER) {
  ------------------
  |  |  140|   364k|#define HINT_VALUE_POINTER (2)
  ------------------
  |  Branch (175:9): [True: 346k, False: 18.5k]
  ------------------
  176|   346k|        e->value.pointer = value.pointer;
  177|   346k|    } else {
  178|  18.5k|        e->value = value;
  179|  18.5k|    }
  180|   364k|    e->hashcode = hashcode;
  181|   364k|    return oldValue;
  182|   364k|}
uhash.cpp:_ZL13_uhash_removeP10UHashtable8UElement:
  443|  7.03k|              UHashTok key) {
  444|       |    /* First find the position of the key in the table.  If the object
  445|       |     * has not been removed already, remove it.  If the user wanted
  446|       |     * keys deleted, then delete it also.  We have to put a special
  447|       |     * hashcode in that position that means that something has been
  448|       |     * deleted, since when we do a find, we have to continue PAST any
  449|       |     * deleted values.
  450|       |     */
  451|  7.03k|    UHashTok result;
  452|  7.03k|    UHashElement* e = _uhash_find(hash, key, hash->keyHasher(key));
  453|  7.03k|    U_ASSERT(e != nullptr);
  ------------------
  |  |   35|  7.03k|#   define U_ASSERT(exp) (void)0
  ------------------
  454|  7.03k|    result.pointer = nullptr;
  455|  7.03k|    result.integer = 0;
  456|  7.03k|    if (!IS_EMPTY_OR_DELETED(e->hashcode)) {
  ------------------
  |  |  120|  7.03k|#define IS_EMPTY_OR_DELETED(x) ((x) < 0)
  ------------------
  |  Branch (456:9): [True: 7.03k, False: 0]
  ------------------
  457|  7.03k|        result = _uhash_internalRemoveElement(hash, e);
  458|  7.03k|        if (hash->count < hash->lowWaterMark) {
  ------------------
  |  Branch (458:13): [True: 0, False: 7.03k]
  ------------------
  459|      0|            UErrorCode status = U_ZERO_ERROR;
  460|      0|            _uhash_rehash(hash, &status);
  461|      0|        }
  462|  7.03k|    }
  463|  7.03k|    return result;
  464|  7.03k|}
uhash.cpp:_ZL28_uhash_internalRemoveElementP10UHashtableP12UHashElement:
  188|  7.03k|_uhash_internalRemoveElement(UHashtable *hash, UHashElement* e) {
  189|  7.03k|    UHashTok empty;
  190|  7.03k|    U_ASSERT(!IS_EMPTY_OR_DELETED(e->hashcode));
  ------------------
  |  |   35|  7.03k|#   define U_ASSERT(exp) (void)0
  ------------------
  191|  7.03k|    --hash->count;
  192|  7.03k|    empty.pointer = nullptr; empty.integer = 0;
  193|  7.03k|    return _uhash_setElement(hash, e, HASH_DELETED, empty, empty, 0);
  ------------------
  |  |  117|  7.03k|#define HASH_DELETED    ((int32_t) 0x80000000)
  ------------------
  194|  7.03k|}

u_charsToUChars_78:
  185|   246k|u_charsToUChars(const char *cs, char16_t *us, int32_t length) {
  186|   246k|    char16_t u;
  187|   246k|    uint8_t c;
  188|       |
  189|       |    /*
  190|       |     * Allow the entire ASCII repertoire to be mapped _to_ Unicode.
  191|       |     * For EBCDIC systems, this works for characters with codes from
  192|       |     * codepages 37 and 1047 or compatible.
  193|       |     */
  194|  3.45M|    while(length>0) {
  ------------------
  |  Branch (194:11): [True: 3.20M, False: 246k]
  ------------------
  195|  3.20M|        c=(uint8_t)(*cs++);
  196|  3.20M|        u=(char16_t)CHAR_TO_UCHAR(c);
  ------------------
  |  |  174|  3.20M|#define CHAR_TO_UCHAR(c) c
  ------------------
  197|  3.20M|        U_ASSERT((u!=0 || c==0)); /* only invariant chars converted? */
  ------------------
  |  |   35|  3.20M|#   define U_ASSERT(exp) (void)0
  ------------------
  198|  3.20M|        *us++=u;
  199|  3.20M|        --length;
  200|  3.20M|    }
  201|   246k|}
u_UCharsToChars_78:
  204|   179k|u_UCharsToChars(const char16_t *us, char *cs, int32_t length) {
  205|   179k|    char16_t u;
  206|       |
  207|  2.34M|    while(length>0) {
  ------------------
  |  Branch (207:11): [True: 2.16M, False: 179k]
  ------------------
  208|  2.16M|        u=*us++;
  209|  2.16M|        if(!UCHAR_IS_INVARIANT(u)) {
  ------------------
  |  |  168|  2.16M|#define UCHAR_IS_INVARIANT(c) (((c)<=0x7f) && (invariantChars[(c)>>5]&((uint32_t)1<<((c)&0x1f)))!=0)
  |  |  ------------------
  |  |  |  Branch (168:32): [True: 2.16M, False: 0]
  |  |  |  Branch (168:47): [True: 2.16M, False: 0]
  |  |  ------------------
  ------------------
  210|      0|            U_ASSERT(false); /* Variant characters were used. These are not portable in ICU. */
  ------------------
  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  ------------------
  211|      0|            u=0;
  212|      0|        }
  213|  2.16M|        *cs++=(char)UCHAR_TO_CHAR(u);
  ------------------
  |  |  175|  2.16M|#define UCHAR_TO_CHAR(c) c
  ------------------
  214|  2.16M|        --length;
  215|  2.16M|    }
  216|   179k|}
uprv_isInvariantUString_78:
  263|  36.7k|uprv_isInvariantUString(const char16_t *s, int32_t length) {
  264|  36.7k|    char16_t c;
  265|       |
  266|   436k|    for(;;) {
  267|   436k|        if(length<0) {
  ------------------
  |  Branch (267:12): [True: 395k, False: 41.2k]
  ------------------
  268|       |            /* NUL-terminated */
  269|   395k|            c=*s++;
  270|   395k|            if(c==0) {
  ------------------
  |  Branch (270:16): [True: 34.7k, False: 360k]
  ------------------
  271|  34.7k|                break;
  272|  34.7k|            }
  273|   395k|        } else {
  274|       |            /* count length */
  275|  41.2k|            if(length==0) {
  ------------------
  |  Branch (275:16): [True: 2.06k, False: 39.1k]
  ------------------
  276|  2.06k|                break;
  277|  2.06k|            }
  278|  39.1k|            --length;
  279|  39.1k|            c=*s++;
  280|  39.1k|        }
  281|       |
  282|       |        /*
  283|       |         * no assertions here because these functions are legitimately called
  284|       |         * for strings with variant characters
  285|       |         */
  286|   399k|        if(!UCHAR_IS_INVARIANT(c)) {
  ------------------
  |  |  168|   399k|#define UCHAR_IS_INVARIANT(c) (((c)<=0x7f) && (invariantChars[(c)>>5]&((uint32_t)1<<((c)&0x1f)))!=0)
  |  |  ------------------
  |  |  |  Branch (168:32): [True: 399k, False: 0]
  |  |  |  Branch (168:47): [True: 399k, False: 0]
  |  |  ------------------
  ------------------
  287|      0|            return false; /* found a variant char */
  288|      0|        }
  289|   399k|    }
  290|  36.7k|    return true;
  291|  36.7k|}

locale_getKeywordsStart_78:
  526|  3.57k|locale_getKeywordsStart(std::string_view localeID) {
  527|  3.57k|    if (size_t pos = localeID.find('@'); pos != std::string_view::npos) {
  ------------------
  |  Branch (527:42): [True: 0, False: 3.57k]
  ------------------
  528|      0|        return localeID.data() + pos;
  529|      0|    }
  530|       |#if (U_CHARSET_FAMILY == U_EBCDIC_FAMILY)
  531|       |    else {
  532|       |        /* We do this because the @ sign is variant, and the @ sign used on one
  533|       |        EBCDIC machine won't be compiled the same way on other EBCDIC based
  534|       |        machines. */
  535|       |        static const uint8_t ebcdicSigns[] = { 0x7C, 0x44, 0x66, 0x80, 0xAC, 0xAE, 0xAF, 0xB5, 0xEC, 0xEF, 0x00 };
  536|       |        const uint8_t *charToFind = ebcdicSigns;
  537|       |        while(*charToFind) {
  538|       |            if (size_t pos = localeID.find(*charToFind); pos != std::string_view::npos) {
  539|       |                return localeID.data() + pos;
  540|       |            }
  541|       |            charToFind++;
  542|       |        }
  543|       |    }
  544|       |#endif
  545|  3.57k|    return nullptr;
  546|  3.57k|}
uloc_getKeywordValue_78:
  733|    420|{
  734|    420|    if (U_FAILURE(*status)) { return 0; }
  ------------------
  |  Branch (734:9): [True: 0, False: 420]
  ------------------
  735|    420|    if (keywordName == nullptr || *keywordName == '\0') {
  ------------------
  |  Branch (735:9): [True: 0, False: 420]
  |  Branch (735:35): [True: 0, False: 420]
  ------------------
  736|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
  737|      0|        return 0;
  738|      0|    }
  739|    420|    return ByteSinkUtil::viaByteSinkToTerminatedChars(
  740|    420|        buffer, bufferCapacity,
  741|    420|        [&](ByteSink& sink, UErrorCode& status) {
  742|    420|            ulocimp_getKeywordValue(localeID, keywordName, sink, status);
  743|    420|        },
  744|    420|        *status);
  745|    420|}
_Z26ulocimp_getKeywordValue_78PKcNSt3__117basic_string_viewIcNS1_11char_traitsIcEEEERN6icu_788ByteSinkER10UErrorCode:
  764|    420|{
  765|    420|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (765:9): [True: 0, False: 420]
  ------------------
  766|       |
  767|    420|    if (localeID == nullptr || keywordName.empty()) {
  ------------------
  |  Branch (767:9): [True: 0, False: 420]
  |  Branch (767:32): [True: 0, False: 420]
  ------------------
  768|      0|        status = U_ILLEGAL_ARGUMENT_ERROR;
  769|      0|        return;
  770|      0|    }
  771|       |
  772|    420|    const char* startSearchHere = nullptr;
  773|    420|    const char* nextSeparator = nullptr;
  774|       |
  775|    420|    CharString tempBuffer;
  776|    420|    const char* tmpLocaleID;
  777|       |
  778|    420|    CharString canonKeywordName = locale_canonKeywordName(keywordName, status);
  779|    420|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (779:9): [True: 0, False: 420]
  ------------------
  780|      0|      return;
  781|      0|    }
  782|       |
  783|    420|    if (localeID != nullptr && _hasBCP47Extension(localeID)) {
  ------------------
  |  Branch (783:9): [True: 420, False: 0]
  |  Branch (783:32): [True: 0, False: 420]
  ------------------
  784|      0|        tempBuffer = ulocimp_forLanguageTag(localeID, -1, nullptr, status);
  ------------------
  |  | 1198|      0|#define ulocimp_forLanguageTag U_ICU_ENTRY_POINT_RENAME(ulocimp_forLanguageTag)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  785|      0|        tmpLocaleID = U_SUCCESS(status) && !tempBuffer.isEmpty() ? tempBuffer.data() : localeID;
  ------------------
  |  Branch (785:23): [True: 0, False: 0]
  |  Branch (785:44): [True: 0, False: 0]
  ------------------
  786|    420|    } else {
  787|    420|        tmpLocaleID=localeID;
  788|    420|    }
  789|       |
  790|    420|    startSearchHere = locale_getKeywordsStart(tmpLocaleID);
  ------------------
  |  |  138|    420|#define locale_getKeywordsStart U_ICU_ENTRY_POINT_RENAME(locale_getKeywordsStart)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  791|    420|    if(startSearchHere == nullptr) {
  ------------------
  |  Branch (791:8): [True: 420, False: 0]
  ------------------
  792|       |        /* no keywords, return at once */
  793|    420|        return;
  794|    420|    }
  795|       |
  796|       |    /* find the first keyword */
  797|      0|    while(startSearchHere) {
  ------------------
  |  Branch (797:11): [True: 0, False: 0]
  ------------------
  798|      0|        const char* keyValueTail;
  799|       |
  800|      0|        startSearchHere++; /* skip @ or ; */
  801|      0|        nextSeparator = uprv_strchr(startSearchHere, '=');
  ------------------
  |  |   40|      0|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  802|      0|        if(!nextSeparator) {
  ------------------
  |  Branch (802:12): [True: 0, False: 0]
  ------------------
  803|      0|            status = U_ILLEGAL_ARGUMENT_ERROR; /* key must have =value */
  804|      0|            return;
  805|      0|        }
  806|       |        /* strip leading & trailing spaces (TC decided to tolerate these) */
  807|      0|        while(*startSearchHere == ' ') {
  ------------------
  |  Branch (807:15): [True: 0, False: 0]
  ------------------
  808|      0|            startSearchHere++;
  809|      0|        }
  810|      0|        keyValueTail = nextSeparator;
  811|      0|        while (keyValueTail > startSearchHere && *(keyValueTail-1) == ' ') {
  ------------------
  |  Branch (811:16): [True: 0, False: 0]
  |  Branch (811:50): [True: 0, False: 0]
  ------------------
  812|      0|            keyValueTail--;
  813|      0|        }
  814|       |        /* now keyValueTail points to first char after the keyName */
  815|       |        /* copy & normalize keyName from locale */
  816|      0|        if (startSearchHere == keyValueTail) {
  ------------------
  |  Branch (816:13): [True: 0, False: 0]
  ------------------
  817|      0|            status = U_ILLEGAL_ARGUMENT_ERROR; /* empty keyword name in passed-in locale */
  818|      0|            return;
  819|      0|        }
  820|      0|        CharString localeKeywordName;
  821|      0|        while (startSearchHere < keyValueTail) {
  ------------------
  |  Branch (821:16): [True: 0, False: 0]
  ------------------
  822|      0|          if (!UPRV_ISALPHANUM(*startSearchHere)) {
  ------------------
  |  Branch (822:15): [True: 0, False: 0]
  ------------------
  823|      0|            status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed keyword name */
  824|      0|            return;
  825|      0|          }
  826|      0|          localeKeywordName.append(uprv_tolower(*startSearchHere++), status);
  ------------------
  |  |   68|      0|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|      0|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  827|      0|        }
  828|      0|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (828:13): [True: 0, False: 0]
  ------------------
  829|      0|            return;
  830|      0|        }
  831|       |
  832|      0|        startSearchHere = uprv_strchr(nextSeparator, ';');
  ------------------
  |  |   40|      0|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  833|       |
  834|      0|        if (canonKeywordName == localeKeywordName) {
  ------------------
  |  Branch (834:13): [True: 0, False: 0]
  ------------------
  835|       |             /* current entry matches the keyword. */
  836|      0|           nextSeparator++; /* skip '=' */
  837|       |            /* First strip leading & trailing spaces (TC decided to tolerate these) */
  838|      0|            while(*nextSeparator == ' ') {
  ------------------
  |  Branch (838:19): [True: 0, False: 0]
  ------------------
  839|      0|              nextSeparator++;
  840|      0|            }
  841|      0|            keyValueTail = (startSearchHere)? startSearchHere: nextSeparator + uprv_strlen(nextSeparator);
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (841:28): [True: 0, False: 0]
  ------------------
  842|      0|            while(keyValueTail > nextSeparator && *(keyValueTail-1) == ' ') {
  ------------------
  |  Branch (842:19): [True: 0, False: 0]
  |  Branch (842:51): [True: 0, False: 0]
  ------------------
  843|      0|              keyValueTail--;
  844|      0|            }
  845|       |            /* Now copy the value, but check well-formedness */
  846|      0|            if (nextSeparator == keyValueTail) {
  ------------------
  |  Branch (846:17): [True: 0, False: 0]
  ------------------
  847|      0|              status = U_ILLEGAL_ARGUMENT_ERROR; /* empty key value name in passed-in locale */
  848|      0|              return;
  849|      0|            }
  850|      0|            while (nextSeparator < keyValueTail) {
  ------------------
  |  Branch (850:20): [True: 0, False: 0]
  ------------------
  851|      0|              if (!UPRV_ISALPHANUM(*nextSeparator) && !UPRV_OK_VALUE_PUNCTUATION(*nextSeparator)) {
  ------------------
  |  Branch (851:19): [True: 0, False: 0]
  |  Branch (851:55): [True: 0, False: 0]
  ------------------
  852|      0|                status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed key value */
  853|      0|                return;
  854|      0|              }
  855|       |              /* Should we lowercase value to return here? Tests expect as-is. */
  856|      0|              sink.Append(nextSeparator++, 1);
  857|      0|            }
  858|      0|            return;
  859|      0|        }
  860|      0|    }
  861|      0|}
_Z21ulocimp_getSubtags_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEEPN6icu_7810CharStringES6_S6_S6_PPKcR10UErrorCode:
 1514|  2.88k|        UErrorCode& status) {
 1515|  2.88k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1515:9): [True: 0, False: 2.88k]
  ------------------
 1516|       |
 1517|  2.88k|    std::optional<CharStringByteSink> languageSink;
 1518|  2.88k|    std::optional<CharStringByteSink> scriptSink;
 1519|  2.88k|    std::optional<CharStringByteSink> regionSink;
 1520|  2.88k|    std::optional<CharStringByteSink> variantSink;
 1521|       |
 1522|  2.88k|    if (language != nullptr) { languageSink.emplace(language); }
  ------------------
  |  Branch (1522:9): [True: 2.88k, False: 0]
  ------------------
 1523|  2.88k|    if (script != nullptr) { scriptSink.emplace(script); }
  ------------------
  |  Branch (1523:9): [True: 2.88k, False: 0]
  ------------------
 1524|  2.88k|    if (region != nullptr) { regionSink.emplace(region); }
  ------------------
  |  Branch (1524:9): [True: 2.73k, False: 144]
  ------------------
 1525|  2.88k|    if (variant != nullptr) { variantSink.emplace(variant); }
  ------------------
  |  Branch (1525:9): [True: 2.43k, False: 448]
  ------------------
 1526|       |
 1527|  2.88k|    ulocimp_getSubtags(
  ------------------
  |  | 1209|  2.88k|#define ulocimp_getSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_getSubtags)
  |  |  ------------------
  |  |  |  |  123|  2.88k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.88k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.88k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1528|  2.88k|            localeID,
 1529|  2.88k|            languageSink.has_value() ? &*languageSink : nullptr,
  ------------------
  |  Branch (1529:13): [True: 2.88k, False: 0]
  ------------------
 1530|  2.88k|            scriptSink.has_value() ? &*scriptSink : nullptr,
  ------------------
  |  Branch (1530:13): [True: 2.88k, False: 0]
  ------------------
 1531|  2.88k|            regionSink.has_value() ? &*regionSink : nullptr,
  ------------------
  |  Branch (1531:13): [True: 2.73k, False: 144]
  ------------------
 1532|  2.88k|            variantSink.has_value() ? &*variantSink : nullptr,
  ------------------
  |  Branch (1532:13): [True: 2.43k, False: 448]
  ------------------
 1533|  2.88k|            pEnd,
 1534|  2.88k|            status);
 1535|  2.88k|}
_Z21ulocimp_getSubtags_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEEPN6icu_788ByteSinkES6_S6_S6_PPKcR10UErrorCode:
 1545|  3.18k|        UErrorCode& status) {
 1546|  3.18k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1546:9): [True: 0, False: 3.18k]
  ------------------
 1547|       |
 1548|  3.18k|    if (pEnd != nullptr) {
  ------------------
  |  Branch (1548:9): [True: 2.43k, False: 753]
  ------------------
 1549|  2.43k|        *pEnd = localeID.data();
 1550|  2.43k|    } else if (language == nullptr &&
  ------------------
  |  Branch (1550:16): [True: 305, False: 448]
  ------------------
 1551|    753|               script == nullptr &&
  ------------------
  |  Branch (1551:16): [True: 305, False: 0]
  ------------------
 1552|    753|               region == nullptr &&
  ------------------
  |  Branch (1552:16): [True: 305, False: 0]
  ------------------
 1553|    753|               variant == nullptr) {
  ------------------
  |  Branch (1553:16): [True: 0, False: 305]
  ------------------
 1554|      0|        return;
 1555|      0|    }
 1556|       |
 1557|  3.18k|    if (localeID.empty()) { return; }
  ------------------
  |  Branch (1557:9): [True: 0, False: 3.18k]
  ------------------
 1558|       |
 1559|  3.18k|    bool hasRegion = false;
 1560|       |
 1561|  3.18k|    {
 1562|  3.18k|        size_t len = _getLanguage(localeID, language, status);
 1563|  3.18k|        if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1563:13): [True: 0, False: 3.18k]
  ------------------
 1564|  3.18k|        if (len > 0) {
  ------------------
  |  Branch (1564:13): [True: 3.18k, False: 0]
  ------------------
 1565|  3.18k|            localeID.remove_prefix(len);
 1566|  3.18k|        }
 1567|  3.18k|    }
 1568|       |
 1569|  3.18k|    if (pEnd != nullptr) {
  ------------------
  |  Branch (1569:9): [True: 2.43k, False: 753]
  ------------------
 1570|  2.43k|        *pEnd = localeID.data();
 1571|  2.43k|    } else if (script == nullptr &&
  ------------------
  |  Branch (1571:16): [True: 305, False: 448]
  ------------------
 1572|    753|               region == nullptr &&
  ------------------
  |  Branch (1572:16): [True: 305, False: 0]
  ------------------
 1573|    753|               variant == nullptr) {
  ------------------
  |  Branch (1573:16): [True: 0, False: 305]
  ------------------
 1574|      0|        return;
 1575|      0|    }
 1576|       |
 1577|  3.18k|    if (localeID.empty()) { return; }
  ------------------
  |  Branch (1577:9): [True: 626, False: 2.56k]
  ------------------
 1578|       |
 1579|  2.56k|    if (_isIDSeparator(localeID.front())) {
  ------------------
  |  Branch (1579:9): [True: 2.56k, False: 0]
  ------------------
 1580|  2.56k|        std::string_view sub = localeID;
 1581|  2.56k|        sub.remove_prefix(1);
 1582|  2.56k|        size_t len = _getScript(sub, script);
 1583|  2.56k|        if (len > 0) {
  ------------------
  |  Branch (1583:13): [True: 647, False: 1.91k]
  ------------------
 1584|    647|            localeID.remove_prefix(len + 1);
 1585|    647|            if (pEnd != nullptr) { *pEnd = localeID.data(); }
  ------------------
  |  Branch (1585:17): [True: 324, False: 323]
  ------------------
 1586|    647|        }
 1587|  2.56k|    }
 1588|       |
 1589|  2.56k|    if ((region == nullptr && variant == nullptr && pEnd == nullptr) || localeID.empty()) { return; }
  ------------------
  |  Branch (1589:10): [True: 449, False: 2.11k]
  |  Branch (1589:31): [True: 144, False: 305]
  |  Branch (1589:53): [True: 144, False: 0]
  |  Branch (1589:73): [True: 381, False: 2.03k]
  ------------------
 1590|       |
 1591|  2.03k|    if (_isIDSeparator(localeID.front())) {
  ------------------
  |  Branch (1591:9): [True: 2.03k, False: 0]
  ------------------
 1592|  2.03k|        std::string_view sub = localeID;
 1593|  2.03k|        sub.remove_prefix(1);
 1594|  2.03k|        size_t len = _getRegion(sub, region);
 1595|  2.03k|        if (len > 0) {
  ------------------
  |  Branch (1595:13): [True: 2.03k, False: 0]
  ------------------
 1596|  2.03k|            hasRegion = true;
 1597|  2.03k|            localeID.remove_prefix(len + 1);
 1598|  2.03k|            if (pEnd != nullptr) { *pEnd = localeID.data(); }
  ------------------
  |  Branch (1598:17): [True: 1.71k, False: 323]
  ------------------
 1599|  2.03k|        }
 1600|  2.03k|    }
 1601|       |
 1602|  2.03k|    if ((variant == nullptr && pEnd == nullptr) || localeID.empty()) { return; }
  ------------------
  |  Branch (1602:10): [True: 161, False: 1.87k]
  |  Branch (1602:32): [True: 161, False: 0]
  |  Branch (1602:52): [True: 1.86k, False: 11]
  ------------------
 1603|       |
 1604|     11|    bool hasVariant = false;
 1605|       |
 1606|     11|    if (_isIDSeparator(localeID.front()) && !_isBCP47Extension(localeID)) {
  ------------------
  |  Branch (1606:9): [True: 11, False: 0]
  |  Branch (1606:45): [True: 11, False: 0]
  ------------------
 1607|     11|        std::string_view sub = localeID;
 1608|       |        /* If there was no country ID, skip a possible extra IDSeparator */
 1609|     11|        size_t skip = !hasRegion && localeID.size() > 1 && _isIDSeparator(localeID[1]) ? 2 : 1;
  ------------------
  |  Branch (1609:23): [True: 0, False: 11]
  |  Branch (1609:37): [True: 0, False: 0]
  |  Branch (1609:60): [True: 0, False: 0]
  ------------------
 1610|     11|        sub.remove_prefix(skip);
 1611|     11|        size_t len = _getVariant(sub, localeID[0], variant, false, status);
 1612|     11|        if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1612:13): [True: 0, False: 11]
  ------------------
 1613|     11|        if (len > 0) {
  ------------------
  |  Branch (1613:13): [True: 11, False: 0]
  ------------------
 1614|     11|            hasVariant = true;
 1615|     11|            localeID.remove_prefix(skip + len);
 1616|     11|            if (pEnd != nullptr) { *pEnd = localeID.data(); }
  ------------------
  |  Branch (1616:17): [True: 10, False: 1]
  ------------------
 1617|     11|        }
 1618|     11|    }
 1619|       |
 1620|     11|    if ((variant == nullptr && pEnd == nullptr) || localeID.empty()) { return; }
  ------------------
  |  Branch (1620:10): [True: 0, False: 11]
  |  Branch (1620:32): [True: 0, False: 0]
  |  Branch (1620:52): [True: 11, False: 0]
  ------------------
 1621|       |
 1622|      0|    if (_isBCP47Extension(localeID)) {
  ------------------
  |  Branch (1622:9): [True: 0, False: 0]
  ------------------
 1623|      0|        localeID.remove_prefix(2);
 1624|      0|        constexpr char vaposix[] = "-va-posix";
 1625|      0|        constexpr size_t length = sizeof vaposix - 1;
 1626|      0|        for (size_t next;; localeID.remove_prefix(next)) {
 1627|      0|            next = localeID.find('-', 1);
 1628|      0|            if (next == std::string_view::npos) { break; }
  ------------------
  |  Branch (1628:17): [True: 0, False: 0]
  ------------------
 1629|      0|            next = localeID.find('-', next + 1);
 1630|      0|            bool finished = next == std::string_view::npos;
 1631|      0|            std::string_view sub = localeID;
 1632|      0|            if (!finished) { sub.remove_suffix(sub.length() - next); }
  ------------------
  |  Branch (1632:17): [True: 0, False: 0]
  ------------------
 1633|       |
 1634|      0|            if (sub.length() == length && uprv_strnicmp(sub.data(), vaposix, length) == 0) {
  ------------------
  |  | 1544|      0|#define uprv_strnicmp U_ICU_ENTRY_POINT_RENAME(uprv_strnicmp)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1634:17): [True: 0, False: 0]
  |  Branch (1634:43): [True: 0, False: 0]
  ------------------
 1635|      0|                if (variant != nullptr) {
  ------------------
  |  Branch (1635:21): [True: 0, False: 0]
  ------------------
 1636|      0|                    if (hasVariant) { variant->Append("_", 1); }
  ------------------
  |  Branch (1636:25): [True: 0, False: 0]
  ------------------
 1637|      0|                    constexpr char posix[] = "POSIX";
 1638|      0|                    variant->Append(posix, sizeof posix - 1);
 1639|      0|                }
 1640|      0|                if (pEnd != nullptr) { *pEnd = localeID.data() + length; }
  ------------------
  |  Branch (1640:21): [True: 0, False: 0]
  ------------------
 1641|      0|            }
 1642|       |
 1643|      0|            if (finished) { break; }
  ------------------
  |  Branch (1643:17): [True: 0, False: 0]
  ------------------
 1644|      0|        }
 1645|      0|    }
 1646|      0|}
_Z18ulocimp_getName_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEERN6icu_788ByteSinkER10UErrorCode:
 2171|      1|{
 2172|      1|    _canonicalize(localeID, sink, 0, err);
 2173|      1|}
_Z22ulocimp_getBaseName_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEER10UErrorCode:
 2195|  1.54k|{
 2196|  1.54k|    return ByteSinkUtil::viaByteSinkToCharString(
 2197|  1.54k|        [&](ByteSink& sink, UErrorCode& status) {
 2198|  1.54k|            ulocimp_getBaseName(localeID, sink, status);
 2199|  1.54k|        },
 2200|  1.54k|        err);
 2201|  1.54k|}
_Z22ulocimp_getBaseName_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEERN6icu_788ByteSinkER10UErrorCode:
 2207|  1.54k|{
 2208|  1.54k|    _canonicalize(localeID, sink, _ULOC_STRIP_KEYWORDS, err);
  ------------------
  |  | 1785|  1.54k|#define _ULOC_STRIP_KEYWORDS 0x2
  ------------------
 2209|  1.54k|}
_Z23ulocimp_canonicalize_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEER10UErrorCode:
 2231|      1|{
 2232|      1|    return ByteSinkUtil::viaByteSinkToCharString(
 2233|      1|        [&](ByteSink& sink, UErrorCode& status) {
 2234|      1|            ulocimp_canonicalize(localeID, sink, status);
 2235|      1|        },
 2236|      1|        err);
 2237|      1|}
_Z23ulocimp_canonicalize_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEERN6icu_788ByteSinkER10UErrorCode:
 2243|    886|{
 2244|    886|    _canonicalize(localeID, sink, _ULOC_CANONICALIZE, err);
  ------------------
  |  | 1786|    886|#define _ULOC_CANONICALIZE   0x1
  ------------------
 2245|    886|}
uloc_getDefault_78:
 2336|  3.05k|{
 2337|  3.05k|    return locale_get_default();
  ------------------
  |  |  139|  3.05k|#define locale_get_default U_ICU_ENTRY_POINT_RENAME(locale_get_default)
  |  |  ------------------
  |  |  |  |  123|  3.05k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  3.05k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  3.05k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2338|  3.05k|}
uloc.cpp:_ZN12_GLOBAL__N_123locale_canonKeywordNameENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEER10UErrorCode:
  556|    420|{
  557|    420|  if (U_FAILURE(status)) { return {}; }
  ------------------
  |  Branch (557:7): [True: 0, False: 420]
  ------------------
  558|    420|  CharString result;
  559|       |
  560|  2.94k|  for (char c : keywordName) {
  ------------------
  |  Branch (560:15): [True: 2.94k, False: 420]
  ------------------
  561|  2.94k|    if (!UPRV_ISALPHANUM(c)) {
  ------------------
  |  Branch (561:9): [True: 0, False: 2.94k]
  ------------------
  562|      0|      status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed keyword name */
  563|      0|      return {};
  564|      0|    }
  565|  2.94k|    result.append(uprv_tolower(c), status);
  ------------------
  |  |   68|  2.94k|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|  2.94k|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  2.94k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|  2.94k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|  2.94k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  566|  2.94k|  }
  567|    420|  if (result.isEmpty()) {
  ------------------
  |  Branch (567:7): [True: 0, False: 420]
  ------------------
  568|      0|    status = U_ILLEGAL_ARGUMENT_ERROR; /* empty keyword name */
  569|      0|    return {};
  570|      0|  }
  571|       |
  572|    420|  return result;
  573|    420|}
uloc.cpp:_ZN12_GLOBAL__N_118_hasBCP47ExtensionENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEE:
  510|  2.85k|inline bool _hasBCP47Extension(std::string_view id) {
  511|  2.85k|    return id.find('@') == std::string_view::npos && getShortestSubtagLength(id) == 1;
  ------------------
  |  Branch (511:12): [True: 2.85k, False: 0]
  |  Branch (511:54): [True: 0, False: 2.85k]
  ------------------
  512|  2.85k|}
uloc.cpp:_ZN12_GLOBAL__N_123getShortestSubtagLengthENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEE:
  485|  2.85k|int32_t getShortestSubtagLength(std::string_view localeID) {
  486|  2.85k|    int32_t localeIDLength = static_cast<int32_t>(localeID.length());
  487|  2.85k|    int32_t length = localeIDLength;
  488|  2.85k|    int32_t tmpLength = 0;
  489|  2.85k|    int32_t i;
  490|  2.85k|    bool reset = true;
  491|       |
  492|  17.2k|    for (i = 0; i < localeIDLength; i++) {
  ------------------
  |  Branch (492:17): [True: 14.4k, False: 2.85k]
  ------------------
  493|  14.4k|        if (localeID[i] != '_' && localeID[i] != '-') {
  ------------------
  |  Branch (493:13): [True: 12.0k, False: 2.40k]
  |  Branch (493:35): [True: 12.0k, False: 0]
  ------------------
  494|  12.0k|            if (reset) {
  ------------------
  |  Branch (494:17): [True: 5.25k, False: 6.74k]
  ------------------
  495|  5.25k|                tmpLength = 0;
  496|  5.25k|                reset = false;
  497|  5.25k|            }
  498|  12.0k|            tmpLength++;
  499|  12.0k|        } else {
  500|  2.40k|            if (tmpLength != 0 && tmpLength < length) {
  ------------------
  |  Branch (500:17): [True: 2.40k, False: 0]
  |  Branch (500:35): [True: 2.11k, False: 282]
  ------------------
  501|  2.11k|                length = tmpLength;
  502|  2.11k|            }
  503|  2.40k|            reset = true;
  504|  2.40k|        }
  505|  14.4k|    }
  506|       |
  507|  2.85k|    return length;
  508|  2.85k|}
uloc.cpp:_ZN12_GLOBAL__N_115UPRV_ISALPHANUMEc:
  516|  2.94k|inline bool UPRV_ISALPHANUM(char c) { return uprv_isASCIILetter(c) || UPRV_ISDIGIT(c); }
  ------------------
  |  | 1514|  2.94k|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  123|  2.94k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.94k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.94k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (516:46): [True: 2.94k, False: 0]
  |  Branch (516:71): [True: 0, False: 0]
  ------------------
uloc.cpp:_ZN12_GLOBAL__N_110_findIndexEPKPKcS1_:
 1178|    724|{
 1179|    724|    const char* const* anchor = list;
 1180|    724|    int32_t pass = 0;
 1181|       |
 1182|       |    /* Make two passes through two nullptr-terminated arrays at 'list' */
 1183|    774|    while (pass++ < 2) {
  ------------------
  |  Branch (1183:12): [True: 749, False: 25]
  ------------------
 1184|   226k|        while (*list) {
  ------------------
  |  Branch (1184:16): [True: 226k, False: 50]
  ------------------
 1185|   226k|            if (uprv_strcmp(key, *list) == 0) {
  ------------------
  |  |   38|   226k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|   226k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1185:17): [True: 699, False: 225k]
  ------------------
 1186|    699|                return static_cast<int16_t>(list - anchor);
 1187|    699|            }
 1188|   225k|            list++;
 1189|   225k|        }
 1190|     50|        ++list;     /* skip final nullptr *CWB*/
 1191|     50|    }
 1192|     25|    return std::nullopt;
 1193|    724|}
uloc.cpp:_ZN12_GLOBAL__N_112_getLanguageENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEEPN6icu_788ByteSinkER10UErrorCode:
 1219|  3.18k|size_t _getLanguage(std::string_view localeID, ByteSink* sink, UErrorCode& status) {
 1220|  3.18k|    size_t skip = 0;
 1221|  3.18k|    if (localeID.size() == 4 && uprv_strnicmp(localeID.data(), "root", 4) == 0) {
  ------------------
  |  | 1544|      0|#define uprv_strnicmp U_ICU_ENTRY_POINT_RENAME(uprv_strnicmp)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1221:9): [True: 0, False: 3.18k]
  |  Branch (1221:33): [True: 0, False: 0]
  ------------------
 1222|      0|        skip = 4;
 1223|      0|        localeID.remove_prefix(skip);
 1224|  3.18k|    } else if (localeID.size() >= 3 && uprv_strnicmp(localeID.data(), "und", 3) == 0 &&
  ------------------
  |  | 1544|  2.77k|#define uprv_strnicmp U_ICU_ENTRY_POINT_RENAME(uprv_strnicmp)
  |  |  ------------------
  |  |  |  |  123|  2.77k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.77k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.77k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1224:16): [True: 2.77k, False: 410]
  |  Branch (1224:40): [True: 0, False: 2.77k]
  ------------------
 1225|  3.18k|               (localeID.size() == 3 ||
  ------------------
  |  Branch (1225:17): [True: 0, False: 0]
  ------------------
 1226|      0|                localeID[3] == '-' ||
  ------------------
  |  Branch (1226:17): [True: 0, False: 0]
  ------------------
 1227|      0|                localeID[3] == '_' ||
  ------------------
  |  Branch (1227:17): [True: 0, False: 0]
  ------------------
 1228|      0|                localeID[3] == '@')) {
  ------------------
  |  Branch (1228:17): [True: 0, False: 0]
  ------------------
 1229|      0|        skip = 3;
 1230|      0|        localeID.remove_prefix(skip);
 1231|      0|    }
 1232|       |
 1233|  3.18k|    constexpr int32_t MAXLEN = ULOC_LANG_CAPACITY - 1;  // Minus NUL.
  ------------------
  |  |  251|  3.18k|#define ULOC_LANG_CAPACITY 12
  ------------------
 1234|       |
 1235|       |    /* if it starts with i- or x- then copy that prefix */
 1236|  3.18k|    size_t len = _isIDPrefix(localeID) ? 2 : 0;
  ------------------
  |  Branch (1236:18): [True: 0, False: 3.18k]
  ------------------
 1237|  10.3k|    while (len < localeID.size() && !_isTerminator(localeID[len]) && !_isIDSeparator(localeID[len])) {
  ------------------
  |  Branch (1237:12): [True: 9.71k, False: 626]
  |  Branch (1237:37): [True: 9.71k, False: 0]
  |  Branch (1237:70): [True: 7.15k, False: 2.56k]
  ------------------
 1238|  7.15k|        if (len == MAXLEN) {
  ------------------
  |  Branch (1238:13): [True: 0, False: 7.15k]
  ------------------
 1239|      0|            status = U_ILLEGAL_ARGUMENT_ERROR;
 1240|      0|            return 0;
 1241|      0|        }
 1242|  7.15k|        len++;
 1243|  7.15k|    }
 1244|       |
 1245|  3.18k|    if (sink == nullptr || len == 0) { return skip + len; }
  ------------------
  |  Branch (1245:9): [True: 305, False: 2.88k]
  |  Branch (1245:28): [True: 0, False: 2.88k]
  ------------------
 1246|       |
 1247|  2.88k|    int32_t minCapacity = uprv_max(static_cast<int32_t>(len), 4);  // Minimum 3 letters plus NUL.
  ------------------
  |  | 1526|  2.88k|#define uprv_max U_ICU_ENTRY_POINT_RENAME(uprv_max)
  |  |  ------------------
  |  |  |  |  123|  2.88k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.88k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.88k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1248|  2.88k|    char scratch[MAXLEN];
 1249|  2.88k|    int32_t capacity = 0;
 1250|  2.88k|    char* buffer = sink->GetAppendBuffer(
 1251|  2.88k|            minCapacity, minCapacity, scratch, UPRV_LENGTHOF(scratch), &capacity);
  ------------------
  |  |   99|  2.88k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
 1252|       |
 1253|  9.34k|    for (size_t i = 0; i < len; ++i) {
  ------------------
  |  Branch (1253:24): [True: 6.46k, False: 2.88k]
  ------------------
 1254|  6.46k|        buffer[i] = uprv_tolower(localeID[i]);
  ------------------
  |  |   68|  6.46k|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|  6.46k|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  6.46k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|  6.46k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|  6.46k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1255|  6.46k|    }
 1256|  2.88k|    if (localeID.size() >= 2 && _isIDSeparator(localeID[1])) {
  ------------------
  |  Branch (1256:9): [True: 2.88k, False: 0]
  |  Branch (1256:33): [True: 0, False: 2.88k]
  ------------------
 1257|      0|        buffer[1] = '-';
 1258|      0|    }
 1259|       |
 1260|  2.88k|    if (len == 3) {
  ------------------
  |  Branch (1260:9): [True: 699, False: 2.18k]
  ------------------
 1261|       |        /* convert 3 character code to 2 character code if possible *CWB*/
 1262|    699|        U_ASSERT(capacity >= 4);
  ------------------
  |  |   35|    699|#   define U_ASSERT(exp) (void)0
  ------------------
 1263|    699|        buffer[3] = '\0';
 1264|    699|        std::optional<int16_t> offset = _findIndex(LANGUAGES_3, buffer);
 1265|    699|        if (offset.has_value()) {
  ------------------
  |  Branch (1265:13): [True: 699, False: 0]
  ------------------
 1266|    699|            const char* const alias = LANGUAGES[*offset];
 1267|    699|            sink->Append(alias, static_cast<int32_t>(uprv_strlen(alias)));
  ------------------
  |  |   37|    699|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|    699|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1268|    699|            return skip + len;
 1269|    699|        }
 1270|    699|    }
 1271|       |
 1272|  2.18k|    sink->Append(buffer, static_cast<int32_t>(len));
 1273|  2.18k|    return skip + len;
 1274|  2.88k|}
uloc.cpp:_ZN12_GLOBAL__N_111_isIDPrefixENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEE:
 1152|  3.18k|inline bool _isIDPrefix(std::string_view s) {
 1153|  3.18k|    return s.size() >= 2 && _isPrefixLetter(s[0]) && _isIDSeparator(s[1]);
  ------------------
  |  Branch (1153:12): [True: 3.18k, False: 0]
  |  Branch (1153:29): [True: 104, False: 3.08k]
  |  Branch (1153:54): [True: 0, False: 104]
  ------------------
 1154|  3.18k|}
uloc.cpp:_ZN12_GLOBAL__N_115_isPrefixLetterEc:
 1148|  3.18k|inline bool _isPrefixLetter(char a) { return a == 'x' || a == 'X' || a == 'i' || a == 'I'; }
  ------------------
  |  Branch (1148:46): [True: 18, False: 3.16k]
  |  Branch (1148:58): [True: 0, False: 3.16k]
  |  Branch (1148:70): [True: 86, False: 3.08k]
  |  Branch (1148:82): [True: 0, False: 3.08k]
  ------------------
uloc.cpp:_ZN12_GLOBAL__N_113_isTerminatorEc:
 1159|  20.4k|inline bool _isTerminator(char a) { return a == '.' || a == '@'; }
  ------------------
  |  Branch (1159:44): [True: 0, False: 20.4k]
  |  Branch (1159:56): [True: 0, False: 20.4k]
  ------------------
uloc.cpp:_ZN12_GLOBAL__N_110_getScriptENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEEPN6icu_788ByteSinkE:
 1276|  2.56k|size_t _getScript(std::string_view localeID, ByteSink* sink) {
 1277|  2.56k|    constexpr int32_t LENGTH = 4;
 1278|       |
 1279|  2.56k|    size_t len = 0;
 1280|  8.91k|    while (len < localeID.size() && !_isTerminator(localeID[len]) && !_isIDSeparator(localeID[len]) &&
  ------------------
  |  Branch (1280:12): [True: 6.66k, False: 2.25k]
  |  Branch (1280:37): [True: 6.66k, False: 0]
  |  Branch (1280:70): [True: 6.38k, False: 278]
  ------------------
 1281|  8.91k|            uprv_isASCIILetter(localeID[len])) {
  ------------------
  |  | 1514|  6.38k|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  123|  6.38k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  6.38k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  6.38k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1281:13): [True: 6.35k, False: 31]
  ------------------
 1282|  6.35k|        if (len == LENGTH) { return 0; }
  ------------------
  |  Branch (1282:13): [True: 0, False: 6.35k]
  ------------------
 1283|  6.35k|        len++;
 1284|  6.35k|    }
 1285|  2.56k|    if (len != LENGTH) { return 0; }
  ------------------
  |  Branch (1285:9): [True: 1.91k, False: 647]
  ------------------
 1286|       |
 1287|    647|    if (sink == nullptr) { return len; }
  ------------------
  |  Branch (1287:9): [True: 160, False: 487]
  ------------------
 1288|       |
 1289|    487|    char scratch[LENGTH];
 1290|    487|    int32_t capacity = 0;
 1291|    487|    char* buffer = sink->GetAppendBuffer(
 1292|    487|            LENGTH, LENGTH, scratch, UPRV_LENGTHOF(scratch), &capacity);
  ------------------
  |  |   99|    487|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
 1293|       |
 1294|    487|    buffer[0] = uprv_toupper(localeID[0]);
  ------------------
  |  | 1547|    487|#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper)
  |  |  ------------------
  |  |  |  |  123|    487|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    487|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    487|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1295|  1.94k|    for (int32_t i = 1; i < LENGTH; ++i) {
  ------------------
  |  Branch (1295:25): [True: 1.46k, False: 487]
  ------------------
 1296|  1.46k|        buffer[i] = uprv_tolower(localeID[i]);
  ------------------
  |  |   68|  1.46k|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|  1.46k|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  1.46k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|  1.46k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|  1.46k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1297|  1.46k|    }
 1298|       |
 1299|    487|    sink->Append(buffer, LENGTH);
 1300|    487|    return len;
 1301|    647|}
uloc.cpp:_ZN12_GLOBAL__N_110_getRegionENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEEPN6icu_788ByteSinkE:
 1303|  2.03k|size_t _getRegion(std::string_view localeID, ByteSink* sink) {
 1304|  2.03k|    constexpr int32_t MINLEN = 2;
 1305|  2.03k|    constexpr int32_t MAXLEN = ULOC_COUNTRY_CAPACITY - 1;  // Minus NUL.
  ------------------
  |  |  258|  2.03k|#define ULOC_COUNTRY_CAPACITY 4
  ------------------
 1306|       |
 1307|  2.03k|    size_t len = 0;
 1308|  6.13k|    while (len < localeID.size() && !_isTerminator(localeID[len]) && !_isIDSeparator(localeID[len])) {
  ------------------
  |  Branch (1308:12): [True: 4.11k, False: 2.02k]
  |  Branch (1308:37): [True: 4.11k, False: 0]
  |  Branch (1308:70): [True: 4.10k, False: 11]
  ------------------
 1309|  4.10k|        if (len == MAXLEN) { return 0; }
  ------------------
  |  Branch (1309:13): [True: 0, False: 4.10k]
  ------------------
 1310|  4.10k|        len++;
 1311|  4.10k|    }
 1312|  2.03k|    if (len < MINLEN) { return 0; }
  ------------------
  |  Branch (1312:9): [True: 0, False: 2.03k]
  ------------------
 1313|       |
 1314|  2.03k|    if (sink == nullptr) { return len; }
  ------------------
  |  Branch (1314:9): [True: 162, False: 1.87k]
  ------------------
 1315|       |
 1316|  1.87k|    char scratch[ULOC_COUNTRY_CAPACITY];
 1317|  1.87k|    int32_t capacity = 0;
 1318|  1.87k|    char* buffer = sink->GetAppendBuffer(
 1319|  1.87k|            ULOC_COUNTRY_CAPACITY,
  ------------------
  |  |  258|  1.87k|#define ULOC_COUNTRY_CAPACITY 4
  ------------------
 1320|  1.87k|            ULOC_COUNTRY_CAPACITY,
  ------------------
  |  |  258|  1.87k|#define ULOC_COUNTRY_CAPACITY 4
  ------------------
 1321|  1.87k|            scratch,
 1322|  1.87k|            UPRV_LENGTHOF(scratch),
  ------------------
  |  |   99|  1.87k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
 1323|  1.87k|            &capacity);
 1324|       |
 1325|  5.64k|    for (size_t i = 0; i < len; ++i) {
  ------------------
  |  Branch (1325:24): [True: 3.77k, False: 1.87k]
  ------------------
 1326|  3.77k|        buffer[i] = uprv_toupper(localeID[i]);
  ------------------
  |  | 1547|  3.77k|#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper)
  |  |  ------------------
  |  |  |  |  123|  3.77k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  3.77k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  3.77k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1327|  3.77k|    }
 1328|       |
 1329|  1.87k|    if (len == 3) {
  ------------------
  |  Branch (1329:9): [True: 25, False: 1.84k]
  ------------------
 1330|       |        /* convert 3 character code to 2 character code if possible *CWB*/
 1331|     25|        U_ASSERT(capacity >= 4);
  ------------------
  |  |   35|     25|#   define U_ASSERT(exp) (void)0
  ------------------
 1332|     25|        buffer[3] = '\0';
 1333|     25|        std::optional<int16_t> offset = _findIndex(COUNTRIES_3, buffer);
 1334|     25|        if (offset.has_value()) {
  ------------------
  |  Branch (1334:13): [True: 0, False: 25]
  ------------------
 1335|      0|            const char* const alias = COUNTRIES[*offset];
 1336|      0|            sink->Append(alias, static_cast<int32_t>(uprv_strlen(alias)));
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1337|      0|            return len;
 1338|      0|        }
 1339|     25|    }
 1340|       |
 1341|  1.87k|    sink->Append(buffer, static_cast<int32_t>(len));
 1342|  1.87k|    return len;
 1343|  1.87k|}
uloc.cpp:_ZN12_GLOBAL__N_117_isBCP47ExtensionENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEE:
 1161|     11|inline bool _isBCP47Extension(std::string_view p) {
 1162|     11|    return p.size() >= 3 &&
  ------------------
  |  Branch (1162:12): [True: 11, False: 0]
  ------------------
 1163|     11|           p[0] == '-' &&
  ------------------
  |  Branch (1163:12): [True: 0, False: 11]
  ------------------
 1164|     11|           (p[1] == 't' || p[1] == 'T' ||
  ------------------
  |  Branch (1164:13): [True: 0, False: 0]
  |  Branch (1164:28): [True: 0, False: 0]
  ------------------
 1165|      0|            p[1] == 'u' || p[1] == 'U' ||
  ------------------
  |  Branch (1165:13): [True: 0, False: 0]
  |  Branch (1165:28): [True: 0, False: 0]
  ------------------
 1166|      0|            p[1] == 'x' || p[1] == 'X') &&
  ------------------
  |  Branch (1166:13): [True: 0, False: 0]
  |  Branch (1166:28): [True: 0, False: 0]
  ------------------
 1167|     11|           p[2] == '-';
  ------------------
  |  Branch (1167:12): [True: 0, False: 0]
  ------------------
 1168|     11|}
uloc.cpp:_ZN12_GLOBAL__N_111_getVariantENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEEcPN6icu_788ByteSinkEbR10UErrorCode:
 1354|     11|            UErrorCode& status) {
 1355|     11|    if (U_FAILURE(status) || localeID.empty()) return 0;
  ------------------
  |  Branch (1355:9): [True: 0, False: 11]
  |  Branch (1355:30): [True: 0, False: 11]
  ------------------
 1356|       |
 1357|       |    // Reasonable upper limit for variants
 1358|       |    // There are no strict limitation of the syntax of variant in the legacy
 1359|       |    // locale format. If the locale is constructed from unicode_locale_id
 1360|       |    // as defined in UTS35, then we know each unicode_variant_subtag
 1361|       |    // could have max length of 8 ((alphanum{5,8} | digit alphanum{3})
 1362|       |    // 179 would allow 20 unicode_variant_subtag with sep in the
 1363|       |    // unicode_locale_id
 1364|       |    // 8*20 + 1*(20-1) = 179
 1365|     11|    constexpr int32_t MAX_VARIANTS_LENGTH = 179;
 1366|       |
 1367|       |    /* get one or more variant tags and separate them with '_' */
 1368|     11|    size_t index = 0;
 1369|     11|    if (_isIDSeparator(prev)) {
  ------------------
  |  Branch (1369:9): [True: 11, False: 0]
  ------------------
 1370|       |        /* get a variant string after a '-' or '_' */
 1371|     11|        for (std::string_view sub = localeID;;) {
 1372|     11|            size_t next = sub.find_first_of(".@_-");
 1373|       |            // For historical reasons, a trailing separator is included in the variant.
 1374|     11|            bool finished = next == std::string_view::npos || next + 1 == sub.length();
  ------------------
  |  Branch (1374:29): [True: 11, False: 0]
  |  Branch (1374:63): [True: 0, False: 0]
  ------------------
 1375|     11|            size_t limit = finished ? sub.length() : next;
  ------------------
  |  Branch (1375:28): [True: 11, False: 0]
  ------------------
 1376|     11|            index += limit;
 1377|     11|            if (index > MAX_VARIANTS_LENGTH) {
  ------------------
  |  Branch (1377:17): [True: 0, False: 11]
  ------------------
 1378|      0|                status = U_ILLEGAL_ARGUMENT_ERROR;
 1379|      0|                return 0;
 1380|      0|            }
 1381|       |
 1382|     11|            if (sink != nullptr) {
  ------------------
  |  Branch (1382:17): [True: 11, False: 0]
  ------------------
 1383|     11|                if (needSeparator) {
  ------------------
  |  Branch (1383:21): [True: 0, False: 11]
  ------------------
 1384|      0|                    sink->Append("_", 1);
 1385|     11|                } else {
 1386|     11|                    needSeparator = true;
 1387|     11|                }
 1388|       |
 1389|     11|                int32_t length = static_cast<int32_t>(limit);
 1390|     11|                int32_t minCapacity = uprv_min(length, MAX_VARIANTS_LENGTH);
  ------------------
  |  | 1529|     11|#define uprv_min U_ICU_ENTRY_POINT_RENAME(uprv_min)
  |  |  ------------------
  |  |  |  |  123|     11|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     11|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     11|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1391|     11|                char scratch[MAX_VARIANTS_LENGTH];
 1392|     11|                int32_t capacity = 0;
 1393|     11|                char* buffer = sink->GetAppendBuffer(
 1394|     11|                        minCapacity, minCapacity, scratch, UPRV_LENGTHOF(scratch), &capacity);
  ------------------
  |  |   99|     11|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
 1395|       |
 1396|     66|                for (size_t i = 0; i < limit; ++i) {
  ------------------
  |  Branch (1396:36): [True: 55, False: 11]
  ------------------
 1397|     55|                    buffer[i] = uprv_toupper(sub[i]);
  ------------------
  |  | 1547|     55|#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper)
  |  |  ------------------
  |  |  |  |  123|     55|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     55|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     55|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1398|     55|                }
 1399|     11|                sink->Append(buffer, length);
 1400|     11|            }
 1401|       |
 1402|     11|            if (finished) { return index; }
  ------------------
  |  Branch (1402:17): [True: 11, False: 0]
  ------------------
 1403|      0|            sub.remove_prefix(next);
 1404|      0|            if (_isTerminator(sub.front()) || _isBCP47Extension(sub)) { return index; }
  ------------------
  |  Branch (1404:17): [True: 0, False: 0]
  |  Branch (1404:47): [True: 0, False: 0]
  ------------------
 1405|      0|            sub.remove_prefix(1);
 1406|      0|            index++;
 1407|      0|        }
 1408|     11|    }
 1409|       |
 1410|      0|    size_t skip = 0;
 1411|       |    /* if there is no variant tag after a '-' or '_' then look for '@' */
 1412|      0|    if (prev == '@') {
  ------------------
  |  Branch (1412:9): [True: 0, False: 0]
  ------------------
 1413|       |        /* keep localeID */
 1414|      0|    } else if (const char* p = locale_getKeywordsStart(localeID); p != nullptr) {
  ------------------
  |  |  138|      0|#define locale_getKeywordsStart U_ICU_ENTRY_POINT_RENAME(locale_getKeywordsStart)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1414:67): [True: 0, False: 0]
  ------------------
 1415|      0|        skip = 1 + p - localeID.data(); /* point after the '@' */
 1416|      0|        localeID.remove_prefix(skip);
 1417|      0|    } else {
 1418|      0|        return 0;
 1419|      0|    }
 1420|      0|    for (; index < localeID.size() && !_isTerminator(localeID[index]); index++) {
  ------------------
  |  Branch (1420:12): [True: 0, False: 0]
  |  Branch (1420:39): [True: 0, False: 0]
  ------------------
 1421|      0|        if (index >= MAX_VARIANTS_LENGTH) { // same as length > MAX_VARIANTS_LENGTH
  ------------------
  |  Branch (1421:13): [True: 0, False: 0]
  ------------------
 1422|      0|            status = U_ILLEGAL_ARGUMENT_ERROR;
 1423|      0|            return 0;
 1424|      0|        }
 1425|      0|        if (needSeparator) {
  ------------------
  |  Branch (1425:13): [True: 0, False: 0]
  ------------------
 1426|      0|            if (sink != nullptr) {
  ------------------
  |  Branch (1426:17): [True: 0, False: 0]
  ------------------
 1427|      0|                sink->Append("_", 1);
 1428|      0|            }
 1429|      0|            needSeparator = false;
 1430|      0|        }
 1431|      0|        if (sink != nullptr) {
  ------------------
  |  Branch (1431:13): [True: 0, False: 0]
  ------------------
 1432|      0|            char c = uprv_toupper(localeID[index]);
  ------------------
  |  | 1547|      0|#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1433|      0|            if (c == '-' || c == ',') c = '_';
  ------------------
  |  Branch (1433:17): [True: 0, False: 0]
  |  Branch (1433:29): [True: 0, False: 0]
  ------------------
 1434|      0|            sink->Append(&c, 1);
 1435|      0|        }
 1436|      0|    }
 1437|      0|    return skip + index;
 1438|      0|}
uloc.cpp:_ZN12_GLOBAL__N_113_canonicalizeENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEERN6icu_788ByteSinkEjR10UErrorCode:
 1806|  2.43k|              UErrorCode& err) {
 1807|  2.43k|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (1807:9): [True: 0, False: 2.43k]
  ------------------
 1808|      0|        return;
 1809|      0|    }
 1810|       |
 1811|  2.43k|    int32_t j, fieldCount=0;
 1812|  2.43k|    CharString tempBuffer;  // if localeID has a BCP47 extension, tmpLocaleID points to this
 1813|  2.43k|    CharString localeIDWithHyphens;  // if localeID has a BPC47 extension and have _, tmpLocaleID points to this
 1814|  2.43k|    std::string_view origLocaleID;
 1815|  2.43k|    std::string_view tmpLocaleID;
 1816|  2.43k|    size_t keywordAssign = std::string_view::npos;
 1817|  2.43k|    size_t separatorIndicator = std::string_view::npos;
 1818|       |
 1819|  2.43k|    if (_hasBCP47Extension(localeID)) {
  ------------------
  |  Branch (1819:9): [True: 0, False: 2.43k]
  ------------------
 1820|      0|        std::string_view localeIDPtr = localeID;
 1821|       |
 1822|       |        // convert all underbars to hyphens, unless the "BCP47 extension" comes at the beginning of the string
 1823|      0|        if (localeID.size() >= 2 && localeID.find('_') != std::string_view::npos && localeID[1] != '-' && localeID[1] != '_') {
  ------------------
  |  Branch (1823:13): [True: 0, False: 0]
  |  Branch (1823:37): [True: 0, False: 0]
  |  Branch (1823:85): [True: 0, False: 0]
  |  Branch (1823:107): [True: 0, False: 0]
  ------------------
 1824|      0|            localeIDWithHyphens.append(localeID, err);
 1825|      0|            if (U_SUCCESS(err)) {
  ------------------
  |  Branch (1825:17): [True: 0, False: 0]
  ------------------
 1826|      0|                for (char* p = localeIDWithHyphens.data(); *p != '\0'; ++p) {
  ------------------
  |  Branch (1826:60): [True: 0, False: 0]
  ------------------
 1827|      0|                    if (*p == '_') {
  ------------------
  |  Branch (1827:25): [True: 0, False: 0]
  ------------------
 1828|      0|                        *p = '-';
 1829|      0|                    }
 1830|      0|                }
 1831|      0|                localeIDPtr = localeIDWithHyphens.toStringPiece();
 1832|      0|            }
 1833|      0|        }
 1834|       |
 1835|      0|        tempBuffer = ulocimp_forLanguageTag(localeIDPtr.data(), static_cast<int32_t>(localeIDPtr.size()), nullptr, err);
  ------------------
  |  | 1198|      0|#define ulocimp_forLanguageTag U_ICU_ENTRY_POINT_RENAME(ulocimp_forLanguageTag)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1836|      0|        tmpLocaleID = U_SUCCESS(err) && !tempBuffer.isEmpty() ? static_cast<std::string_view>(tempBuffer.toStringPiece()) : localeIDPtr;
  ------------------
  |  Branch (1836:23): [True: 0, False: 0]
  |  Branch (1836:41): [True: 0, False: 0]
  ------------------
 1837|  2.43k|    } else {
 1838|  2.43k|        tmpLocaleID=localeID;
 1839|  2.43k|    }
 1840|       |
 1841|  2.43k|    origLocaleID=tmpLocaleID;
 1842|       |
 1843|       |    /* get all pieces, one after another, and separate with '_' */
 1844|  2.43k|    CharString tag;
 1845|  2.43k|    CharString script;
 1846|  2.43k|    CharString country;
 1847|  2.43k|    CharString variant;
 1848|  2.43k|    const char* end = nullptr;
 1849|  2.43k|    ulocimp_getSubtags(
  ------------------
  |  | 1209|  2.43k|#define ulocimp_getSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_getSubtags)
  |  |  ------------------
  |  |  |  |  123|  2.43k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.43k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.43k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1850|  2.43k|            tmpLocaleID,
 1851|  2.43k|            &tag,
 1852|  2.43k|            &script,
 1853|  2.43k|            &country,
 1854|  2.43k|            &variant,
 1855|  2.43k|            &end,
 1856|  2.43k|            err);
 1857|  2.43k|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (1857:9): [True: 0, False: 2.43k]
  ------------------
 1858|      0|        return;
 1859|      0|    }
 1860|  2.43k|    U_ASSERT(end != nullptr);
  ------------------
  |  |   35|  2.43k|#   define U_ASSERT(exp) (void)0
  ------------------
 1861|  2.43k|    if (end > tmpLocaleID.data()) {
  ------------------
  |  Branch (1861:9): [True: 2.43k, False: 0]
  ------------------
 1862|  2.43k|        tmpLocaleID.remove_prefix(end - tmpLocaleID.data());
 1863|  2.43k|    }
 1864|       |
 1865|  2.43k|    if (tag.length() == I_DEFAULT_LENGTH && origLocaleID.length() >= I_DEFAULT_LENGTH &&
  ------------------
  |  Branch (1865:9): [True: 0, False: 2.43k]
  |  Branch (1865:45): [True: 0, False: 0]
  ------------------
 1866|  2.43k|            uprv_strncmp(origLocaleID.data(), i_default, I_DEFAULT_LENGTH) == 0) {
  ------------------
  |  |   44|      0|#define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1866:13): [True: 0, False: 0]
  ------------------
 1867|      0|        tag.clear();
 1868|      0|        tag.append(uloc_getDefault(), err);
  ------------------
  |  | 1118|      0|#define uloc_getDefault U_ICU_ENTRY_POINT_RENAME(uloc_getDefault)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1869|  2.43k|    } else {
 1870|  2.43k|        if (!script.isEmpty()) {
  ------------------
  |  Branch (1870:13): [True: 324, False: 2.11k]
  ------------------
 1871|    324|            ++fieldCount;
 1872|    324|            tag.append('_', err);
 1873|    324|            tag.append(script, err);
 1874|    324|        }
 1875|  2.43k|        if (!country.isEmpty()) {
  ------------------
  |  Branch (1875:13): [True: 1.71k, False: 721]
  ------------------
 1876|  1.71k|            ++fieldCount;
 1877|  1.71k|            tag.append('_', err);
 1878|  1.71k|            tag.append(country, err);
 1879|  1.71k|        }
 1880|  2.43k|        if (!variant.isEmpty()) {
  ------------------
  |  Branch (1880:13): [True: 10, False: 2.42k]
  ------------------
 1881|     10|            ++fieldCount;
 1882|     10|            if (country.isEmpty()) {
  ------------------
  |  Branch (1882:17): [True: 0, False: 10]
  ------------------
 1883|      0|                tag.append('_', err);
 1884|      0|            }
 1885|     10|            tag.append('_', err);
 1886|     10|            tag.append(variant, err);
 1887|     10|        }
 1888|  2.43k|    }
 1889|       |
 1890|       |    /* Copy POSIX-style charset specifier, if any [mr.utf8] */
 1891|  2.43k|    if (!OPTION_SET(options, _ULOC_CANONICALIZE) && !tmpLocaleID.empty() && tmpLocaleID.front() == '.') {
  ------------------
  |  | 1786|  2.43k|#define _ULOC_CANONICALIZE   0x1
  ------------------
  |  Branch (1891:9): [True: 1.54k, False: 886]
  |  Branch (1891:53): [True: 0, False: 1.54k]
  |  Branch (1891:77): [True: 0, False: 0]
  ------------------
 1892|      0|        tag.append('.', err);
 1893|      0|        tmpLocaleID.remove_prefix(1);
 1894|      0|        size_t length;
 1895|      0|        if (size_t atPos = tmpLocaleID.find('@'); atPos != std::string_view::npos) {
  ------------------
  |  Branch (1895:51): [True: 0, False: 0]
  ------------------
 1896|      0|            length = atPos;
 1897|      0|        } else {
 1898|      0|            length = tmpLocaleID.length();
 1899|      0|        }
 1900|       |        // The longest charset name we found in IANA charset registry
 1901|       |        // https://www.iana.org/assignments/character-sets/ is
 1902|       |        // "Extended_UNIX_Code_Packed_Format_for_Japanese" in length 45.
 1903|       |        // we therefore restrict the length here to be 64 which is a power of 2
 1904|       |        // number that is longer than 45.
 1905|      0|        constexpr size_t kMaxCharsetLength = 64;
 1906|      0|        if (length > kMaxCharsetLength) {
  ------------------
  |  Branch (1906:13): [True: 0, False: 0]
  ------------------
 1907|      0|           err = U_ILLEGAL_ARGUMENT_ERROR; /* malformed keyword name */
 1908|      0|           return;
 1909|      0|        }
 1910|      0|        if (length > 0) {
  ------------------
  |  Branch (1910:13): [True: 0, False: 0]
  ------------------
 1911|      0|            tag.append(tmpLocaleID.data(), static_cast<int32_t>(length), err);
 1912|      0|            tmpLocaleID.remove_prefix(length);
 1913|      0|        }
 1914|      0|    }
 1915|       |
 1916|       |    /* Scan ahead to next '@' and determine if it is followed by '=' and/or ';'
 1917|       |       After this, tmpLocaleID either starts at '@' or is empty. */
 1918|  2.43k|    if (const char* start = locale_getKeywordsStart(tmpLocaleID); start != nullptr) {
  ------------------
  |  |  138|  2.43k|#define locale_getKeywordsStart U_ICU_ENTRY_POINT_RENAME(locale_getKeywordsStart)
  |  |  ------------------
  |  |  |  |  123|  2.43k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.43k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.43k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1918:67): [True: 0, False: 2.43k]
  ------------------
 1919|      0|        if (start > tmpLocaleID.data()) {
  ------------------
  |  Branch (1919:13): [True: 0, False: 0]
  ------------------
 1920|      0|            tmpLocaleID.remove_prefix(start - tmpLocaleID.data());
 1921|      0|        }
 1922|      0|        keywordAssign = tmpLocaleID.find('=');
 1923|      0|        separatorIndicator = tmpLocaleID.find(';');
 1924|  2.43k|    } else {
 1925|  2.43k|        tmpLocaleID = {};
 1926|  2.43k|    }
 1927|       |
 1928|       |    /* Copy POSIX-style variant, if any [mr@FOO] */
 1929|  2.43k|    if (!OPTION_SET(options, _ULOC_CANONICALIZE) &&
  ------------------
  |  | 1786|  2.43k|#define _ULOC_CANONICALIZE   0x1
  ------------------
  |  Branch (1929:9): [True: 1.54k, False: 886]
  ------------------
 1930|  2.43k|        !tmpLocaleID.empty() && keywordAssign == std::string_view::npos) {
  ------------------
  |  Branch (1930:9): [True: 0, False: 1.54k]
  |  Branch (1930:33): [True: 0, False: 0]
  ------------------
 1931|      0|        tag.append(tmpLocaleID, err);
 1932|      0|        tmpLocaleID = {};
 1933|      0|    }
 1934|       |
 1935|  2.43k|    if (OPTION_SET(options, _ULOC_CANONICALIZE)) {
  ------------------
  |  | 1786|  2.43k|#define _ULOC_CANONICALIZE   0x1
  ------------------
  |  Branch (1935:9): [True: 886, False: 1.54k]
  ------------------
 1936|       |        /* Handle @FOO variant if @ is present and not followed by = */
 1937|    886|        if (!tmpLocaleID.empty() && keywordAssign == std::string_view::npos) {
  ------------------
  |  Branch (1937:13): [True: 0, False: 886]
  |  Branch (1937:37): [True: 0, False: 0]
  ------------------
 1938|       |            /* Add missing '_' if needed */
 1939|      0|            if (fieldCount < 2 || (fieldCount < 3 && !script.isEmpty())) {
  ------------------
  |  Branch (1939:17): [True: 0, False: 0]
  |  Branch (1939:36): [True: 0, False: 0]
  |  Branch (1939:54): [True: 0, False: 0]
  ------------------
 1940|      0|                do {
 1941|      0|                    tag.append('_', err);
 1942|      0|                    ++fieldCount;
 1943|      0|                } while(fieldCount<2);
  ------------------
  |  Branch (1943:25): [True: 0, False: 0]
  ------------------
 1944|      0|            }
 1945|       |
 1946|      0|            CharStringByteSink s(&tag);
 1947|      0|            std::string_view sub = tmpLocaleID;
 1948|      0|            sub.remove_prefix(1);
 1949|      0|            _getVariant(sub, '@', &s, !variant.isEmpty(), err);
 1950|      0|            if (U_FAILURE(err)) { return; }
  ------------------
  |  Branch (1950:17): [True: 0, False: 0]
  ------------------
 1951|      0|        }
 1952|       |
 1953|       |        /* Look up the ID in the canonicalization map */
 1954|  9.74k|        for (j=0; j<UPRV_LENGTHOF(CANONICALIZE_MAP); j++) {
  ------------------
  |  |   99|  9.74k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (1954:19): [True: 8.86k, False: 886]
  ------------------
 1955|  8.86k|            StringPiece id(CANONICALIZE_MAP[j].id);
 1956|  8.86k|            if (tag == id) {
  ------------------
  |  Branch (1956:17): [True: 0, False: 8.86k]
  ------------------
 1957|      0|                if (id.empty() && !tmpLocaleID.empty()) {
  ------------------
  |  Branch (1957:21): [True: 0, False: 0]
  |  Branch (1957:35): [True: 0, False: 0]
  ------------------
 1958|      0|                    break; /* Don't remap "" if keywords present */
 1959|      0|                }
 1960|      0|                tag.clear();
 1961|      0|                tag.append(CANONICALIZE_MAP[j].canonicalID, err);
 1962|      0|                break;
 1963|      0|            }
 1964|  8.86k|        }
 1965|    886|    }
 1966|       |
 1967|  2.43k|    sink.Append(tag.data(), tag.length());
 1968|       |
 1969|  2.43k|    if (!OPTION_SET(options, _ULOC_STRIP_KEYWORDS)) {
  ------------------
  |  | 1785|  2.43k|#define _ULOC_STRIP_KEYWORDS 0x2
  ------------------
  |  Branch (1969:9): [True: 887, False: 1.54k]
  ------------------
 1970|    887|        if (!tmpLocaleID.empty() && keywordAssign != std::string_view::npos &&
  ------------------
  |  Branch (1970:13): [True: 0, False: 887]
  |  Branch (1970:37): [True: 0, False: 0]
  ------------------
 1971|    887|            (separatorIndicator == std::string_view::npos || separatorIndicator > keywordAssign)) {
  ------------------
  |  Branch (1971:14): [True: 0, False: 0]
  |  Branch (1971:62): [True: 0, False: 0]
  ------------------
 1972|      0|            sink.Append("@", 1);
 1973|      0|            ++fieldCount;
 1974|      0|            tmpLocaleID.remove_prefix(1);
 1975|      0|            ulocimp_getKeywords(tmpLocaleID, '@', sink, true, err);
  ------------------
  |  | 1201|      0|#define ulocimp_getKeywords U_ICU_ENTRY_POINT_RENAME(ulocimp_getKeywords)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1976|      0|        }
 1977|    887|    }
 1978|  2.43k|}
uloc.cpp:_ZN12_GLOBAL__N_110OPTION_SETEjj:
 1790|  9.73k|inline bool OPTION_SET(uint32_t options, uint32_t mask) { return (options & mask) != 0; }
uloc.cpp:_ZZ23uloc_getKeywordValue_78ENK3$_0clERN6icu_788ByteSinkER10UErrorCode:
  741|    420|        [&](ByteSink& sink, UErrorCode& status) {
  742|    420|            ulocimp_getKeywordValue(localeID, keywordName, sink, status);
  ------------------
  |  | 1200|    420|#define ulocimp_getKeywordValue U_ICU_ENTRY_POINT_RENAME(ulocimp_getKeywordValue)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  743|    420|        },
uloc.cpp:_ZZ22ulocimp_getBaseName_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEER10UErrorCodeENK3$_0clERN6icu_788ByteSinkES5_:
 2197|  1.54k|        [&](ByteSink& sink, UErrorCode& status) {
 2198|  1.54k|            ulocimp_getBaseName(localeID, sink, status);
  ------------------
  |  | 1199|  1.54k|#define ulocimp_getBaseName U_ICU_ENTRY_POINT_RENAME(ulocimp_getBaseName)
  |  |  ------------------
  |  |  |  |  123|  1.54k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.54k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.54k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2199|  1.54k|        },
uloc.cpp:_ZZ23ulocimp_canonicalize_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEER10UErrorCodeENK3$_0clERN6icu_788ByteSinkES5_:
 2233|      1|        [&](ByteSink& sink, UErrorCode& status) {
 2234|      1|            ulocimp_canonicalize(localeID, sink, status);
  ------------------
  |  | 1197|      1|#define ulocimp_canonicalize U_ICU_ENTRY_POINT_RENAME(ulocimp_canonicalize)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2235|      1|        },

uloc.cpp:_ZN12_GLOBAL__N_114_isIDSeparatorEc:
   49|  28.0k|inline bool _isIDSeparator(char a) { return a == '_' || a == '-'; }
  ------------------
  |  Branch (49:45): [True: 7.46k, False: 20.6k]
  |  Branch (49:57): [True: 0, False: 20.6k]
  ------------------

uprv_max_78:
   17|  2.88k|{
   18|  2.88k|    return (x > y ? x : y);
  ------------------
  |  Branch (18:13): [True: 0, False: 2.88k]
  ------------------
   19|  2.88k|}
uprv_min_78:
   23|     11|{
   24|     11|    return (x > y ? y : x);
  ------------------
  |  Branch (24:13): [True: 0, False: 11]
  ------------------
   25|     11|}

_ZN6icu_786UMutex8getMutexEv:
   80|      8|std::mutex *UMutex::getMutex() {
   81|      8|    std::mutex *retPtr = fMutex.load(std::memory_order_acquire);
   82|      8|    if (retPtr == nullptr) {
  ------------------
  |  Branch (82:9): [True: 8, False: 0]
  ------------------
   83|      8|        std::call_once(*pInitFlag, umtx_init);
   84|      8|        std::lock_guard<std::mutex> guard(*initMutex);
   85|      8|        retPtr = fMutex.load(std::memory_order_acquire);
   86|      8|        if (retPtr == nullptr) {
  ------------------
  |  Branch (86:13): [True: 8, False: 0]
  ------------------
   87|      8|            fMutex = new(fStorage) std::mutex();
   88|      8|            retPtr = fMutex;
   89|      8|            fListLink = gListHead;
   90|      8|            gListHead = this;
   91|      8|        }
   92|      8|    }
   93|      8|    U_ASSERT(retPtr != nullptr);
  ------------------
  |  |   35|      8|#   define U_ASSERT(exp) (void)0
  ------------------
   94|      8|    return retPtr;
   95|      8|}
umtx_lock_78:
  112|  3.39M|umtx_lock(UMutex *mutex) {
  113|  3.39M|    if (mutex == nullptr) {
  ------------------
  |  Branch (113:9): [True: 1.52k, False: 3.39M]
  ------------------
  114|  1.52k|        mutex = &globalMutex;
  115|  1.52k|    }
  116|  3.39M|    mutex->lock();
  117|  3.39M|}
umtx_unlock_78:
  122|  3.39M|{
  123|  3.39M|    if (mutex == nullptr) {
  ------------------
  |  Branch (123:9): [True: 1.52k, False: 3.39M]
  ------------------
  124|  1.52k|        mutex = &globalMutex;
  125|  1.52k|    }
  126|  3.39M|    mutex->unlock();
  127|  3.39M|}
_ZN6icu_7820umtx_initImplPreInitERNS_9UInitOnceE:
  145|     14|umtx_initImplPreInit(UInitOnce &uio) {
  146|     14|    std::call_once(*pInitFlag, umtx_init);
  147|     14|    std::unique_lock<std::mutex> lock(*initMutex);
  148|     14|    if (umtx_loadAcquire(uio.fState) == 0) {
  ------------------
  |  Branch (148:9): [True: 14, False: 0]
  ------------------
  149|     14|        umtx_storeRelease(uio.fState, 1);
  150|     14|        return true;      // Caller will next call the init function.
  151|     14|    } else {
  152|      0|        while (umtx_loadAcquire(uio.fState) == 1) {
  ------------------
  |  Branch (152:16): [True: 0, False: 0]
  ------------------
  153|       |            // Another thread is currently running the initialization.
  154|       |            // Wait until it completes.
  155|      0|            initCondition->wait(lock);
  156|      0|        }
  157|      0|        U_ASSERT(uio.fState == 2);
  ------------------
  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  ------------------
  158|      0|        return false;
  159|      0|    }
  160|     14|}
_ZN6icu_7821umtx_initImplPostInitERNS_9UInitOnceE:
  170|     14|umtx_initImplPostInit(UInitOnce &uio) {
  171|     14|    {
  172|     14|        std::unique_lock<std::mutex> lock(*initMutex);
  173|     14|        umtx_storeRelease(uio.fState, 2);
  174|     14|    }
  175|     14|    initCondition->notify_all();
  176|     14|}
umutex.cpp:_ZN6icu_78L9umtx_initEv:
   72|      1|static void U_CALLCONV umtx_init() {
   73|      1|    initMutex = STATIC_NEW(std::mutex);
  ------------------
  |  |  144|      1|#define STATIC_NEW(type) [] () { \
  |  |  145|      1|    alignas(type) static char storage[sizeof(type)]; \
  |  |  146|      1|    return new(storage) type();} ()
  ------------------
   74|      1|    initCondition = STATIC_NEW(std::condition_variable);
  ------------------
  |  |  144|      1|#define STATIC_NEW(type) [] () { \
  |  |  145|      1|    alignas(type) static char storage[sizeof(type)]; \
  |  |  146|      1|    return new(storage) type();} ()
  ------------------
   75|      1|    ucln_common_registerCleanup(UCLN_COMMON_MUTEX, umtx_cleanup);
  ------------------
  |  |  617|      1|#define ucln_common_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_common_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   76|      1|}

_ZN6icu_789UInitOnce5resetEv:
  101|    575|    void reset() {fState = 0;}
_ZN6icu_786UMutex4lockEv:
  229|  3.39M|    void lock() {
  230|  3.39M|        std::mutex *m = fMutex.load(std::memory_order_acquire);
  231|  3.39M|        if (m == nullptr) { m = getMutex(); }
  ------------------
  |  Branch (231:13): [True: 8, False: 3.39M]
  ------------------
  232|  3.39M|        m->lock();
  233|  3.39M|    }
_ZN6icu_786UMutex6unlockEv:
  234|  3.39M|    void unlock() { fMutex.load(std::memory_order_relaxed)->unlock(); }
_ZN6icu_7816umtx_loadAcquireERNSt3__16atomicIiEE:
   75|  1.07M|inline int32_t umtx_loadAcquire(u_atomic_int32_t &var) {
   76|  1.07M|    return var.load(std::memory_order_acquire);
   77|  1.07M|}
_ZN6icu_7817umtx_storeReleaseERNSt3__16atomicIiEEi:
   79|     29|inline void umtx_storeRelease(u_atomic_int32_t &var, int32_t val) {
   80|     29|    var.store(val, std::memory_order_release);
   81|     29|}
_ZN6icu_7815umtx_atomic_incEPNSt3__16atomicIiEE:
   83|  8.45k|inline int32_t umtx_atomic_inc(u_atomic_int32_t *var) {
   84|  8.45k|    return var->fetch_add(1) + 1;
   85|  8.45k|}
_ZN6icu_7815umtx_atomic_decEPNSt3__16atomicIiEE:
   87|  28.5k|inline int32_t umtx_atomic_dec(u_atomic_int32_t *var) {
   88|  28.5k|    return var->fetch_sub(1) - 1;
   89|  28.5k|}
_ZN6icu_7813umtx_initOnceERNS_9UInitOnceEPFvvE:
  123|  51.7k|inline void umtx_initOnce(UInitOnce &uio, void (U_CALLCONV *fp)()) {
  124|  51.7k|    if (umtx_loadAcquire(uio.fState) == 2) {
  ------------------
  |  Branch (124:9): [True: 51.7k, False: 4]
  ------------------
  125|  51.7k|        return;
  126|  51.7k|    }
  127|      4|    if (umtx_initImplPreInit(uio)) {
  ------------------
  |  Branch (127:9): [True: 4, False: 0]
  ------------------
  128|      4|        (*fp)();
  129|      4|        umtx_initImplPostInit(uio);
  130|      4|    }
  131|      4|}
_ZN6icu_7813umtx_initOnceERNS_9UInitOnceEPFvR10UErrorCodeES3_:
  135|  1.00M|inline void umtx_initOnce(UInitOnce &uio, void (U_CALLCONV *fp)(UErrorCode &), UErrorCode &errCode) {
  136|  1.00M|    if (U_FAILURE(errCode)) {
  ------------------
  |  Branch (136:9): [True: 1, False: 1.00M]
  ------------------
  137|      1|        return;
  138|      1|    }
  139|  1.00M|    if (umtx_loadAcquire(uio.fState) != 2 && umtx_initImplPreInit(uio)) {
  ------------------
  |  Branch (139:9): [True: 8, False: 1.00M]
  |  Branch (139:46): [True: 8, False: 0]
  ------------------
  140|       |        // We run the initialization.
  141|      8|        (*fp)(errCode);
  142|      8|        uio.fErrCode = errCode;
  143|      8|        umtx_initImplPostInit(uio);
  144|  1.00M|    } else {
  145|       |        // Someone else already ran the initialization.
  146|  1.00M|        if (U_FAILURE(uio.fErrCode)) {
  ------------------
  |  Branch (146:13): [True: 0, False: 1.00M]
  ------------------
  147|      0|            errCode = uio.fErrCode;
  148|      0|        }
  149|  1.00M|    }
  150|  1.00M|}
_ZN6icu_7813umtx_initOnceI19USystemTimeZoneTypeEEvRNS_9UInitOnceEPFvT_R10UErrorCodeES4_S6_:
  166|    707|template<class T> void umtx_initOnce(UInitOnce &uio, void (U_CALLCONV *fp)(T, UErrorCode &), T context, UErrorCode &errCode) {
  167|    707|    if (U_FAILURE(errCode)) {
  ------------------
  |  Branch (167:9): [True: 0, False: 707]
  ------------------
  168|      0|        return;
  169|      0|    }
  170|    707|    if (umtx_loadAcquire(uio.fState) != 2 && umtx_initImplPreInit(uio)) {
  ------------------
  |  Branch (170:9): [True: 2, False: 705]
  |  Branch (170:46): [True: 2, False: 0]
  ------------------
  171|       |        // We run the initialization.
  172|      2|        (*fp)(context, errCode);
  173|      2|        uio.fErrCode = errCode;
  174|      2|        umtx_initImplPostInit(uio);
  175|    705|    } else {
  176|       |        // Someone else already ran the initialization.
  177|    705|        if (U_FAILURE(uio.fErrCode)) {
  ------------------
  |  Branch (177:13): [True: 0, False: 705]
  ------------------
  178|      0|            errCode = uio.fErrCode;
  179|      0|        }
  180|    705|    }
  181|    707|}

_ZN6icu_788ByteSinkC2Ev:
   59|  14.0k|  ByteSink() { }
_ZNK6icu_7820CheckedArrayByteSink10OverflowedEv:
  240|  1.30k|  UBool Overflowed() const { return overflowed_; }
_ZNK6icu_7820CheckedArrayByteSink21NumberOfBytesAppendedEv:
  248|  1.61k|  int32_t NumberOfBytesAppended() const { return appended_; }

_ZN6icu_7814ConstChar16PtrC2EPKDs:
  229|  2.68M|ConstChar16Ptr::ConstChar16Ptr(const char16_t *p) : p_(p) {}
_ZN6icu_7814ConstChar16PtrD2Ev:
  237|  2.68M|ConstChar16Ptr::~ConstChar16Ptr() {
  238|  2.68M|    U_ALIASING_BARRIER(p_);
  ------------------
  |  |   35|  2.68M|#   define U_ALIASING_BARRIER(ptr) asm volatile("" : : "rm"(ptr) : "memory")
  ------------------
  239|  2.68M|}
_ZNK6icu_789Char16PtrcvPDsEv:
   97|  4.15M|    inline operator char16_t *() const { return get(); }
_ZNK6icu_7814ConstChar16PtrcvPKDsEv:
  205|  2.68M|    inline operator const char16_t *() const { return get(); }
_ZNK6icu_789Char16Ptr3getEv:
  133|  4.15M|char16_t *Char16Ptr::get() const { return p_; }
_ZNK6icu_7814ConstChar16Ptr3getEv:
  241|  2.68M|const char16_t *ConstChar16Ptr::get() const { return p_; }
_ZN6icu_788internal15toU16StringViewENSt3__117basic_string_viewIDsNS1_11char_traitsIDsEEEE:
  400|    477|inline std::u16string_view toU16StringView(std::u16string_view sv) { return sv; }
_ZN6icu_788internal23toU16StringViewNullableIPKDsvvEENSt3__117basic_string_viewIDsNS4_11char_traitsIDsEEEERKT_:
  441|    287|inline std::u16string_view toU16StringViewNullable(const T& text) {
  442|    287|    if (text == nullptr) return {};  // For backward compatibility.
  ------------------
  |  Branch (442:9): [True: 0, False: 287]
  ------------------
  443|    287|    return toU16StringView(text);
  444|    287|}
_ZN6icu_789Char16PtrC2EPDs:
  121|  1.03M|Char16Ptr::Char16Ptr(char16_t *p) : p_(p) {}
_ZN6icu_789Char16PtrD2Ev:
  129|  1.03M|Char16Ptr::~Char16Ptr() {
  130|  1.03M|    U_ALIASING_BARRIER(p_);
  ------------------
  |  |   35|  1.03M|#   define U_ALIASING_BARRIER(ptr) asm volatile("" : : "rm"(ptr) : "memory")
  ------------------
  131|  1.03M|}
_ZN6icu_788internal23toU16StringViewNullableIPDsvvEENSt3__117basic_string_viewIDsNS3_11char_traitsIDsEEEERKT_:
  441|    190|inline std::u16string_view toU16StringViewNullable(const T& text) {
  442|    190|    if (text == nullptr) return {};  // For backward compatibility.
  ------------------
  |  Branch (442:9): [True: 0, False: 190]
  ------------------
  443|    190|    return toU16StringView(text);
  444|    190|}

_ZN6icu_789ErrorCodeC2Ev:
   90|    886|    ErrorCode() : errorCode(U_ZERO_ERROR) {}
_ZN6icu_789ErrorCodecvR10UErrorCodeEv:
   94|    886|    operator UErrorCode & () { return errorCode; }
_ZNK6icu_789ErrorCode9isFailureEv:
  100|    886|    UBool isFailure() const { return U_FAILURE(errorCode); }

_ZN6icu_7812LocalPointerINS_7UVectorEEC2EPS1_:
  200|  47.5k|    explicit LocalPointer(T *p=nullptr) : LocalPointerBase<T>(p) {}
_ZN6icu_7816LocalPointerBaseINS_7UVectorEEC2EPS1_:
   82|   230k|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7812LocalPointerINS_7UVectorEED2Ev:
  245|   230k|    ~LocalPointer() {
  246|   230k|        delete LocalPointerBase<T>::ptr;
  247|   230k|    }
_ZN6icu_7816LocalPointerBaseINS_7UVectorEED2Ev:
   88|   230k|    ~LocalPointerBase() { /* delete ptr; */ }
_ZNK6icu_7816LocalPointerBaseINS_7UVectorEE6isNullEv:
   94|  11.1k|    UBool isNull() const { return ptr==nullptr; }
_ZN6icu_7812LocalPointerINS_7UVectorEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode:
  319|    587|    void adoptInsteadAndCheckErrorCode(T *p, UErrorCode &errorCode) {
  320|    587|        if(U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (320:12): [True: 587, False: 0]
  ------------------
  321|    587|            delete LocalPointerBase<T>::ptr;
  322|    587|            LocalPointerBase<T>::ptr=p;
  323|    587|            if(p==nullptr) {
  ------------------
  |  Branch (323:16): [True: 0, False: 587]
  ------------------
  324|      0|                errorCode=U_MEMORY_ALLOCATION_ERROR;
  325|      0|            }
  326|    587|        } else {
  327|      0|            delete p;
  328|      0|        }
  329|    587|    }
_ZN6icu_7812LocalPointerINS_13UnicodeStringEEC2EPS1_R10UErrorCode:
  214|  14.7k|    LocalPointer(T *p, UErrorCode &errorCode) : LocalPointerBase<T>(p) {
  215|  14.7k|        if(p==nullptr && U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (215:12): [True: 0, False: 14.7k]
  |  Branch (215:26): [True: 0, False: 0]
  ------------------
  216|      0|            errorCode=U_MEMORY_ALLOCATION_ERROR;
  217|      0|        }
  218|  14.7k|    }
_ZN6icu_7816LocalPointerBaseINS_13UnicodeStringEEC2EPS1_:
   82|  34.2k|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7816LocalPointerBaseINS_13UnicodeStringEED2Ev:
   88|  34.2k|    ~LocalPointerBase() { /* delete ptr; */ }
_ZNK6icu_7816LocalPointerBaseINS_7UVectorEEptEv:
  134|   179k|    T *operator->() const { return ptr; }
_ZN6icu_7816LocalPointerBaseINS_13UnicodeStringEE6orphanEv:
  141|  34.2k|    T *orphan() {
  142|  34.2k|        T *p=ptr;
  143|  34.2k|        ptr=nullptr;
  144|  34.2k|        return p;
  145|  34.2k|    }
_ZN6icu_7812LocalPointerINS_13UnicodeStringEED2Ev:
  245|  23.7k|    ~LocalPointer() {
  246|  23.7k|        delete LocalPointerBase<T>::ptr;
  247|  23.7k|    }
_ZN6icu_7810LocalArrayINS_13UnicodeStringEEC2EPS1_R10UErrorCode:
  389|  10.4k|    LocalArray(T *p, UErrorCode &errorCode) : LocalPointerBase<T>(p) {
  390|  10.4k|        if(p==nullptr && U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (390:12): [True: 0, False: 10.4k]
  |  Branch (390:26): [True: 0, False: 0]
  ------------------
  391|      0|            errorCode=U_MEMORY_ALLOCATION_ERROR;
  392|      0|        }
  393|  10.4k|    }
_ZNK6icu_7816LocalPointerBaseINS_13UnicodeStringEE8getAliasEv:
  122|  10.6k|    T *getAlias() const { return ptr; }
_ZN6icu_7810LocalArrayINS_13UnicodeStringEED2Ev:
  420|  10.4k|    ~LocalArray() {
  421|  10.4k|        delete[] LocalPointerBase<T>::ptr;
  422|  10.4k|    }
_ZN6icu_788internal16LocalOpenPointerI15UResourceBundleXadL_Z13ures_close_78EEEC2EPS2_:
  567|  7.70k|    explicit LocalOpenPointer(Type *p=nullptr) : LocalPointerBase<Type>(p) {}
_ZN6icu_7816LocalPointerBaseI15UResourceBundleEC2EPS1_:
   82|  7.70k|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_788internal16LocalOpenPointerI15UResourceBundleXadL_Z13ures_close_78EEED2Ev:
  575|  7.70k|    ~LocalOpenPointer() { if (ptr != nullptr) { closeFunction(ptr); } }
  ------------------
  |  Branch (575:31): [True: 7.27k, False: 432]
  ------------------
_ZN6icu_7816LocalPointerBaseI15UResourceBundleED2Ev:
   88|  7.70k|    ~LocalPointerBase() { /* delete ptr; */ }
_ZNK6icu_7816LocalPointerBaseI15UResourceBundleE8getAliasEv:
  122|  13.9k|    T *getAlias() const { return ptr; }
_ZN6icu_788internal16LocalOpenPointerI15UResourceBundleXadL_Z13ures_close_78EEE12adoptInsteadEPS2_:
  595|  1.45k|    void adoptInstead(Type *p) {
  596|  1.45k|        if (ptr != nullptr) { closeFunction(ptr); }
  ------------------
  |  Branch (596:13): [True: 520, False: 938]
  ------------------
  597|  1.45k|        ptr=p;
  598|  1.45k|    }
_ZNK6icu_7816LocalPointerBaseI15UResourceBundleE7isValidEv:
  100|    635|    UBool isValid() const { return ptr!=nullptr; }
_ZN6icu_7812LocalPointerINS_15NumberingSystemEEC2EPS1_R10UErrorCode:
  214|  1.26k|    LocalPointer(T *p, UErrorCode &errorCode) : LocalPointerBase<T>(p) {
  215|  1.26k|        if(p==nullptr && U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (215:12): [True: 0, False: 1.26k]
  |  Branch (215:26): [True: 0, False: 0]
  ------------------
  216|      0|            errorCode=U_MEMORY_ALLOCATION_ERROR;
  217|      0|        }
  218|  1.26k|    }
_ZN6icu_7816LocalPointerBaseINS_15NumberingSystemEEC2EPS1_:
   82|  1.26k|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7812LocalPointerINS_15NumberingSystemEED2Ev:
  245|  1.26k|    ~LocalPointer() {
  246|  1.26k|        delete LocalPointerBase<T>::ptr;
  247|  1.26k|    }
_ZN6icu_7816LocalPointerBaseINS_15NumberingSystemEED2Ev:
   88|  1.26k|    ~LocalPointerBase() { /* delete ptr; */ }
_ZNK6icu_7816LocalPointerBaseINS_15NumberingSystemEEptEv:
  134|  2.52k|    T *operator->() const { return ptr; }
_ZN6icu_7816LocalPointerBaseINS_15NumberingSystemEE6orphanEv:
  141|    840|    T *orphan() {
  142|    840|        T *p=ptr;
  143|    840|        ptr=nullptr;
  144|    840|        return p;
  145|    840|    }
_ZN6icu_7812LocalPointerINS_7UVectorEEC2EPS1_R10UErrorCode:
  214|  60.9k|    LocalPointer(T *p, UErrorCode &errorCode) : LocalPointerBase<T>(p) {
  215|  60.9k|        if(p==nullptr && U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (215:12): [True: 0, False: 60.9k]
  |  Branch (215:26): [True: 0, False: 0]
  ------------------
  216|      0|            errorCode=U_MEMORY_ALLOCATION_ERROR;
  217|      0|        }
  218|  60.9k|    }
_ZN6icu_7816LocalPointerBaseINS_7UVectorEE6orphanEv:
  141|    587|    T *orphan() {
  142|    587|        T *p=ptr;
  143|    587|        ptr=nullptr;
  144|    587|        return p;
  145|    587|    }
_ZN6icu_7816LocalPointerBaseINS_17StringEnumerationEEC2EPS1_:
   82|  73.0k|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7812LocalPointerINS_17StringEnumerationEED2Ev:
  245|  73.0k|    ~LocalPointer() {
  246|  73.0k|        delete LocalPointerBase<T>::ptr;
  247|  73.0k|    }
_ZN6icu_7816LocalPointerBaseINS_17StringEnumerationEED2Ev:
   88|  73.0k|    ~LocalPointerBase() { /* delete ptr; */ }
_ZN6icu_7812LocalPointerINS_7UVectorEEC2EOS2_:
  224|   121k|    LocalPointer(LocalPointer<T> &&src) noexcept : LocalPointerBase<T>(src.ptr) {
  225|   121k|        src.ptr=nullptr;
  226|   121k|    }
_ZNK6icu_7816LocalPointerBaseINS_7UVectorEE8getAliasEv:
  122|  60.9k|    T *getAlias() const { return ptr; }
_ZN6icu_7812LocalPointerINS_17StringEnumerationEEC2EPS1_:
  200|  73.0k|    explicit LocalPointer(T *p=nullptr) : LocalPointerBase<T>(p) {}
_ZNK6icu_7816LocalPointerBaseINS_17StringEnumerationEEptEv:
  134|   154k|    T *operator->() const { return ptr; }
_ZN6icu_7812LocalPointerINS_22MetaZoneIDsEnumerationEEC2EPS1_:
  200|  60.9k|    explicit LocalPointer(T *p=nullptr) : LocalPointerBase<T>(p) {}
_ZN6icu_7816LocalPointerBaseINS_22MetaZoneIDsEnumerationEEC2EPS1_:
   82|  60.9k|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7812LocalPointerINS_22MetaZoneIDsEnumerationEED2Ev:
  245|  60.9k|    ~LocalPointer() {
  246|  60.9k|        delete LocalPointerBase<T>::ptr;
  247|  60.9k|    }
_ZN6icu_7816LocalPointerBaseINS_22MetaZoneIDsEnumerationEED2Ev:
   88|  60.9k|    ~LocalPointerBase() { /* delete ptr; */ }
_ZN6icu_7812LocalPointerINS_22MetaZoneIDsEnumerationEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode:
  319|  60.9k|    void adoptInsteadAndCheckErrorCode(T *p, UErrorCode &errorCode) {
  320|  60.9k|        if(U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (320:12): [True: 60.9k, False: 0]
  ------------------
  321|  60.9k|            delete LocalPointerBase<T>::ptr;
  322|  60.9k|            LocalPointerBase<T>::ptr=p;
  323|  60.9k|            if(p==nullptr) {
  ------------------
  |  Branch (323:16): [True: 0, False: 60.9k]
  ------------------
  324|      0|                errorCode=U_MEMORY_ALLOCATION_ERROR;
  325|      0|            }
  326|  60.9k|        } else {
  327|      0|            delete p;
  328|      0|        }
  329|  60.9k|    }
_ZN6icu_7816LocalPointerBaseINS_22MetaZoneIDsEnumerationEE6orphanEv:
  141|  60.9k|    T *orphan() {
  142|  60.9k|        T *p=ptr;
  143|  60.9k|        ptr=nullptr;
  144|  60.9k|        return p;
  145|  60.9k|    }
_ZN6icu_7812LocalPointerINS_13UnicodeStringEEC2EPS1_:
  200|  8.99k|    explicit LocalPointer(T *p=nullptr) : LocalPointerBase<T>(p) {}
_ZNK6icu_7816LocalPointerBaseINS_13UnicodeStringEEptEv:
  134|  8.99k|    T *operator->() const { return ptr; }
_ZN6icu_7816LocalPointerBaseIDsEC2EPDs:
   82|    190|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZNK6icu_7816LocalPointerBaseIDsE6isNullEv:
   94|    190|    UBool isNull() const { return ptr==nullptr; }
_ZNK6icu_7816LocalPointerBaseIDsE8getAliasEv:
  122|    570|    T *getAlias() const { return ptr; }
_ZN6icu_7816LocalPointerBaseIDsE6orphanEv:
  141|    190|    T *orphan() {
  142|    190|        T *p=ptr;
  143|    190|        ptr=nullptr;
  144|    190|        return p;
  145|    190|    }
_ZN6icu_7816LocalPointerBaseIDsED2Ev:
   88|    190|    ~LocalPointerBase() { /* delete ptr; */ }
_ZN6icu_7812LocalPointerINS_23OlsonToMetaMappingEntryEEC2EPS1_R10UErrorCode:
  214|    912|    LocalPointer(T *p, UErrorCode &errorCode) : LocalPointerBase<T>(p) {
  215|    912|        if(p==nullptr && U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (215:12): [True: 0, False: 912]
  |  Branch (215:26): [True: 0, False: 0]
  ------------------
  216|      0|            errorCode=U_MEMORY_ALLOCATION_ERROR;
  217|      0|        }
  218|    912|    }
_ZN6icu_7816LocalPointerBaseINS_23OlsonToMetaMappingEntryEEC2EPS1_:
   82|    912|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7812LocalPointerINS_23OlsonToMetaMappingEntryEED2Ev:
  245|    912|    ~LocalPointer() {
  246|    912|        delete LocalPointerBase<T>::ptr;
  247|    912|    }
_ZN6icu_7816LocalPointerBaseINS_23OlsonToMetaMappingEntryEED2Ev:
   88|    912|    ~LocalPointerBase() { /* delete ptr; */ }
_ZNK6icu_7816LocalPointerBaseINS_23OlsonToMetaMappingEntryEEptEv:
  134|  2.73k|    T *operator->() const { return ptr; }
_ZN6icu_7816LocalPointerBaseINS_23OlsonToMetaMappingEntryEE6orphanEv:
  141|    912|    T *orphan() {
  142|    912|        T *p=ptr;
  143|    912|        ptr=nullptr;
  144|    912|        return p;
  145|    912|    }
_ZN6icu_7816LocalPointerBaseIiEC2EPi:
   82|      5|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7816LocalPointerBaseIiED2Ev:
   88|      5|    ~LocalPointerBase() { /* delete ptr; */ }
_ZN6icu_7816LocalPointerBaseIPKcEC2EPS2_:
   82|      5|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7816LocalPointerBaseIPKcED2Ev:
   88|      5|    ~LocalPointerBase() { /* delete ptr; */ }
_ZN6icu_788internal16LocalOpenPointerI10UHashtableXadL_Z14uhash_close_78EEEC2EPS2_:
  567|      1|    explicit LocalOpenPointer(Type *p=nullptr) : LocalPointerBase<Type>(p) {}
_ZN6icu_7816LocalPointerBaseI10UHashtableEC2EPS1_:
   82|      1|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZNK6icu_7816LocalPointerBaseI10UHashtableE8getAliasEv:
  122|    178|    T *getAlias() const { return ptr; }
_ZN6icu_7816LocalPointerBaseI10UHashtableE6orphanEv:
  141|      1|    T *orphan() {
  142|      1|        T *p=ptr;
  143|      1|        ptr=nullptr;
  144|      1|        return p;
  145|      1|    }
_ZN6icu_788internal16LocalOpenPointerI10UHashtableXadL_Z14uhash_close_78EEED2Ev:
  575|      1|    ~LocalOpenPointer() { if (ptr != nullptr) { closeFunction(ptr); } }
  ------------------
  |  Branch (575:31): [True: 0, False: 1]
  ------------------
_ZN6icu_7816LocalPointerBaseI10UHashtableED2Ev:
   88|      1|    ~LocalPointerBase() { /* delete ptr; */ }
_ZNK6icu_7816LocalPointerBaseINS_13UnicodeStringEE7isValidEv:
  100|  8.99k|    UBool isValid() const { return ptr!=nullptr; }
_ZNK6icu_7816LocalPointerBaseI15UResourceBundleEptEv:
  134|    823|    T *operator->() const { return ptr; }

_ZNK6icu_786Locale10getCountryEv:
 1204|    717|{
 1205|    717|    return country;
 1206|    717|}
_ZNK6icu_786Locale11getLanguageEv:
 1210|    717|{
 1211|    717|    return language;
 1212|    717|}
_ZNK6icu_786Locale9getScriptEv:
 1216|    717|{
 1217|    717|    return script;
 1218|    717|}
_ZNK6icu_786Locale10getVariantEv:
 1222|    717|{
 1223|    717|    return fIsBogus ? "" : &baseName[variantBegin];
  ------------------
  |  Branch (1223:12): [True: 0, False: 717]
  ------------------
 1224|    717|}
_ZNK6icu_786Locale7getNameEv:
 1228|  5.31k|{
 1229|  5.31k|    return fullName;
 1230|  5.31k|}

_ZN6icu_7811ReplaceableC2Ev:
  243|  3.29M|inline Replaceable::Replaceable() {}

_ZN6icu_7811StringPieceC2EPKci:
  151|    420|  StringPiece(const char* offset, int32_t len) : ptr_(offset), length_(len) { }
_ZNK6icu_7811StringPiece4dataEv:
  200|   460k|  const char* data() const { return ptr_; }
_ZN6icu_7811StringPiece13remove_prefixEi:
  267|  1.26k|  void remove_prefix(int32_t n) {
  268|  1.26k|    if (n >= 0) {
  ------------------
  |  Branch (268:9): [True: 1.26k, False: 0]
  ------------------
  269|  1.26k|      if (n > length_) {
  ------------------
  |  Branch (269:11): [True: 0, False: 1.26k]
  ------------------
  270|      0|        n = length_;
  271|      0|      }
  272|  1.26k|      ptr_ += n;
  273|  1.26k|      length_ -= n;
  274|  1.26k|    }
  275|  1.26k|  }
_ZNK6icu_7811StringPiece4sizeEv:
  206|  1.30k|  int32_t size() const { return length_; }
_ZN6icu_7811StringPieceC2Ev:
   71|      1|  StringPiece() : ptr_(nullptr), length_(0) { }
_ZNK6icu_7811StringPiececvNSt3__117basic_string_viewIcNS1_11char_traitsIcEEEEEv:
  185|    886|  inline operator std::string_view() const {
  186|    886|    return {data(), static_cast<std::string_view::size_type>(size())};
  187|    886|  }
_ZNK6icu_7811StringPiece6lengthEv:
  212|   466k|  int32_t length() const { return length_; }

_ZN6icu_7813UnicodeStringC2Ev:
 4182|  2.15M|UnicodeString::UnicodeString() {
 4183|  2.15M|  fUnion.fStackFields.fLengthAndFlags=kShortString;
 4184|  2.15M|}
_ZNK6icu_7813UnicodeString8doEqualsERKS0_i:
 3773|   104k|  inline UBool doEquals(const UnicodeString &text, int32_t len) const {
 3774|   104k|    return doEquals(text.getArrayStart(), len);
 3775|   104k|  }
_ZNK6icu_7813UnicodeString8pinIndexERi:
 4138|   206k|{
 4139|       |  // pin index
 4140|   206k|  if(start < 0) {
  ------------------
  |  Branch (4140:6): [True: 0, False: 206k]
  ------------------
 4141|      0|    start = 0;
 4142|   206k|  } else if(start > length()) {
  ------------------
  |  Branch (4142:13): [True: 0, False: 206k]
  ------------------
 4143|      0|    start = length();
 4144|      0|  }
 4145|   206k|}
_ZNK6icu_7813UnicodeString10pinIndicesERiS1_:
 4150|  4.47M|{
 4151|       |  // pin indices
 4152|  4.47M|  int32_t len = length();
 4153|  4.47M|  if(start < 0) {
  ------------------
  |  Branch (4153:6): [True: 15.4k, False: 4.45M]
  ------------------
 4154|  15.4k|    start = 0;
 4155|  4.45M|  } else if(start > len) {
  ------------------
  |  Branch (4155:13): [True: 0, False: 4.45M]
  ------------------
 4156|      0|    start = len;
 4157|      0|  }
 4158|  4.47M|  if(_length < 0) {
  ------------------
  |  Branch (4158:6): [True: 0, False: 4.47M]
  ------------------
 4159|      0|    _length = 0;
 4160|  4.47M|  } else if(_length > (len - start)) {
  ------------------
  |  Branch (4160:13): [True: 52.8k, False: 4.41M]
  ------------------
 4161|  52.8k|    _length = (len - start);
 4162|  52.8k|  }
 4163|  4.47M|}
_ZN6icu_7813UnicodeString13getArrayStartEv:
 4166|  1.93M|UnicodeString::getArrayStart() {
 4167|  1.93M|  return (fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) ?
  ------------------
  |  Branch (4167:10): [True: 1.89M, False: 46.6k]
  ------------------
 4168|  1.89M|    fUnion.fStackFields.fBuffer : fUnion.fFields.fArray;
 4169|  1.93M|}
_ZNK6icu_7813UnicodeString13getArrayStartEv:
 4172|  9.57M|UnicodeString::getArrayStart() const {
 4173|  9.57M|  return (fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) ?
  ------------------
  |  Branch (4173:10): [True: 4.96M, False: 4.60M]
  ------------------
 4174|  4.96M|    fUnion.fStackFields.fBuffer : fUnion.fFields.fArray;
 4175|  9.57M|}
_ZNK6icu_7813UnicodeString14hasShortLengthEv:
 4202|  21.5M|UnicodeString::hasShortLength() const {
 4203|  21.5M|  return fUnion.fFields.fLengthAndFlags>=0;
 4204|  21.5M|}
_ZNK6icu_7813UnicodeString14getShortLengthEv:
 4207|  21.1M|UnicodeString::getShortLength() const {
 4208|       |  // fLengthAndFlags must be non-negative -> short length >= 0
 4209|       |  // and arithmetic or logical shift does not matter.
 4210|  21.1M|  return fUnion.fFields.fLengthAndFlags>>kLengthShift;
 4211|  21.1M|}
_ZNK6icu_7813UnicodeString6lengthEv:
 4214|  21.1M|UnicodeString::length() const {
 4215|  21.1M|  return hasShortLength() ? getShortLength() : fUnion.fFields.fLength;
  ------------------
  |  Branch (4215:10): [True: 21.1M, False: 292]
  ------------------
 4216|  21.1M|}
_ZNK6icu_7813UnicodeString11getCapacityEv:
 4219|  1.54M|UnicodeString::getCapacity() const {
 4220|  1.54M|  return (fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) ?
  ------------------
  |  Branch (4220:10): [True: 1.52M, False: 24.5k]
  ------------------
 4221|  1.52M|    US_STACKBUF_SIZE : fUnion.fFields.fCapacity;
 4222|  1.54M|}
_ZNK6icu_7813UnicodeString8hashCodeEv:
 4226|   173k|{ return doHashCode(); }
_ZNK6icu_7813UnicodeString7isBogusEv:
 4230|  6.48M|{ return fUnion.fFields.fLengthAndFlags & kIsBogus; }
_ZNK6icu_7813UnicodeString10isWritableEv:
 4234|  1.75M|{ return !(fUnion.fFields.fLengthAndFlags & (kOpenGetBuffer | kIsBogus)); }
_ZNK6icu_7813UnicodeString16isBufferWritableEv:
 4238|   499k|{
 4239|   499k|  return
 4240|   499k|      !(fUnion.fFields.fLengthAndFlags&(kOpenGetBuffer|kIsBogus|kBufferIsReadonly)) &&
  ------------------
  |  Branch (4240:7): [True: 499k, False: 0]
  ------------------
 4241|   499k|      (!(fUnion.fFields.fLengthAndFlags&kRefCounted) || refCount()==1);
  ------------------
  |  Branch (4241:8): [True: 490k, False: 8.90k]
  |  Branch (4241:57): [True: 4.85k, False: 4.05k]
  ------------------
 4242|   499k|}
_ZNK6icu_7813UnicodeString9getBufferEv:
 4245|  5.61k|UnicodeString::getBuffer() const {
 4246|  5.61k|  if(fUnion.fFields.fLengthAndFlags&(kIsBogus|kOpenGetBuffer)) {
  ------------------
  |  Branch (4246:6): [True: 0, False: 5.61k]
  ------------------
 4247|      0|    return nullptr;
 4248|  5.61k|  } else if(fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) {
  ------------------
  |  Branch (4248:13): [True: 420, False: 5.19k]
  ------------------
 4249|    420|    return fUnion.fStackFields.fBuffer;
 4250|  5.19k|  } else {
 4251|  5.19k|    return fUnion.fFields.fArray;
 4252|  5.19k|  }
 4253|  5.61k|}
_ZNK6icu_7813UnicodeString9doCompareEiiRKS0_ii:
 4264|  1.55M|{
 4265|  1.55M|  if(srcText.isBogus()) {
  ------------------
  |  Branch (4265:6): [True: 0, False: 1.55M]
  ------------------
 4266|      0|    return static_cast<int8_t>(!isBogus()); // 0 if both are bogus, 1 otherwise
 4267|  1.55M|  } else {
 4268|  1.55M|    srcText.pinIndices(srcStart, srcLength);
 4269|  1.55M|    return doCompare(start, thisLength, srcText.getArrayStart(), srcStart, srcLength);
 4270|  1.55M|  }
 4271|  1.55M|}
_ZNK6icu_7813UnicodeStringeqERKS0_:
 4290|   110k|{
 4291|   110k|  if(isBogus()) {
  ------------------
  |  Branch (4291:6): [True: 0, False: 110k]
  ------------------
 4292|      0|    return text.isBogus();
 4293|   110k|  } else {
 4294|   110k|    int32_t len = length(), textLength = text.length();
 4295|   110k|    return !text.isBogus() && len == textLength && doEquals(text, len);
  ------------------
  |  Branch (4295:12): [True: 110k, False: 0]
  |  Branch (4295:31): [True: 104k, False: 5.36k]
  |  Branch (4295:52): [True: 104k, False: 13]
  ------------------
 4296|   110k|  }
 4297|   110k|}
_ZNK6icu_7813UnicodeStringneERKS0_:
 4301|  5.83k|{ return (! operator==(text)); }
_ZNK6icu_7813UnicodeString7compareERKS0_:
 4321|  1.55M|{ return doCompare(0, length(), text, 0, text.length()); }
_ZNK6icu_7813UnicodeString7compareENS_14ConstChar16PtrEi:
 4332|  1.27k|{ return doCompare(0, length(), srcChars, 0, srcLength); }
_ZNK6icu_7813UnicodeString7indexOfERKS0_iiii:
 4506|   102k|{
 4507|   102k|  if(!srcText.isBogus()) {
  ------------------
  |  Branch (4507:6): [True: 102k, False: 0]
  ------------------
 4508|   102k|    srcText.pinIndices(srcStart, srcLength);
 4509|   102k|    if(srcLength > 0) {
  ------------------
  |  Branch (4509:8): [True: 102k, False: 0]
  ------------------
 4510|   102k|      return indexOf(srcText.getArrayStart(), srcStart, srcLength, start, _length);
 4511|   102k|    }
 4512|   102k|  }
 4513|      0|  return -1;
 4514|   102k|}
_ZNK6icu_7813UnicodeString7indexOfEPKDsii:
 4536|   110k|               int32_t start) const {
 4537|   110k|  pinIndex(start);
 4538|   110k|  return indexOf(srcChars, 0, srcLength, start, length() - start);
 4539|   110k|}
_ZNK6icu_7813UnicodeString7indexOfEDsi:
 4570|  5.19k|               int32_t start) const {
 4571|  5.19k|  pinIndex(start);
 4572|  5.19k|  return doIndexOf(c, start, length() - start);
 4573|  5.19k|}
_ZNK6icu_7813UnicodeString11lastIndexOfEDs:
 4645|   110k|{ return doLastIndexOf(c, 0, length()); }
_ZNK6icu_7813UnicodeString10startsWithENS_14ConstChar16PtrEi:
 4677|   265k|UnicodeString::startsWith(ConstChar16Ptr srcChars, int32_t srcLength) const {
 4678|   265k|  if(srcLength < 0) {
  ------------------
  |  Branch (4678:6): [True: 0, False: 265k]
  ------------------
 4679|      0|    srcLength = u_strlen(toUCharPtr(srcChars));
  ------------------
  |  |  393|      0|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4680|      0|  }
 4681|   265k|  return doEqualsSubstring(0, srcLength, srcChars, 0, srcLength);
 4682|   265k|}
_ZNK6icu_7813UnicodeString8endsWithENS_14ConstChar16PtrEi:
 4708|  27.4k|            int32_t srcLength) const {
 4709|  27.4k|  if(srcLength < 0) {
  ------------------
  |  Branch (4709:6): [True: 0, False: 27.4k]
  ------------------
 4710|      0|    srcLength = u_strlen(toUCharPtr(srcChars));
  ------------------
  |  |  393|      0|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4711|      0|  }
 4712|  27.4k|  return doEqualsSubstring(length() - srcLength, srcLength, srcChars, 0, srcLength);
 4713|  27.4k|}
_ZN6icu_7813UnicodeString7replaceEiiRKS0_ii:
 4741|  11.3k|{ return doReplace(start, _length, srcText, srcStart, srcLength); }
_ZN6icu_7813UnicodeString14findAndReplaceERKS0_S2_:
 4781|  90.7k|{ return findAndReplace(0, length(), oldText, 0, oldText.length(),
 4782|  90.7k|            newText, 0, newText.length()); }
_ZNK6icu_7813UnicodeString20tempSubStringBetweenEii:
 4840|  5.19k|UnicodeString::tempSubStringBetween(int32_t start, int32_t limit) const {
 4841|  5.19k|    return tempSubString(start, limit - start);
 4842|  5.19k|}
_ZNK6icu_7813UnicodeString8doCharAtEi:
 4846|  3.44M|{
 4847|  3.44M|  if (static_cast<uint32_t>(offset) < static_cast<uint32_t>(length())) {
  ------------------
  |  Branch (4847:7): [True: 3.44M, False: 0]
  ------------------
 4848|  3.44M|    return getArrayStart()[offset];
 4849|  3.44M|  } else {
 4850|      0|    return kInvalidUChar;
 4851|      0|  }
 4852|  3.44M|}
_ZNK6icu_7813UnicodeString6charAtEi:
 4856|  3.44M|{ return doCharAt(offset); }
_ZNK6icu_7813UnicodeString7isEmptyEv:
 4863|  1.70M|UnicodeString::isEmpty() const {
 4864|       |  // Arithmetic or logical right shift does not matter: only testing for 0.
 4865|  1.70M|  return (fUnion.fFields.fLengthAndFlags>>kLengthShift) == 0;
 4866|  1.70M|}
_ZN6icu_7813UnicodeString13setZeroLengthEv:
 4872|  12.2k|UnicodeString::setZeroLength() {
 4873|  12.2k|  fUnion.fFields.fLengthAndFlags &= kAllStorageFlags;
 4874|  12.2k|}
_ZN6icu_7813UnicodeString14setShortLengthEi:
 4877|  3.72M|UnicodeString::setShortLength(int32_t len) {
 4878|       |  // requires 0 <= len <= kMaxShortLength
 4879|  3.72M|  fUnion.fFields.fLengthAndFlags =
 4880|  3.72M|    static_cast<int16_t>((fUnion.fFields.fLengthAndFlags & kAllStorageFlags) | (len << kLengthShift));
 4881|  3.72M|}
_ZN6icu_7813UnicodeString9setLengthEi:
 4884|  3.72M|UnicodeString::setLength(int32_t len) {
 4885|  3.72M|  if(len <= kMaxShortLength) {
  ------------------
  |  Branch (4885:6): [True: 3.72M, False: 365]
  ------------------
 4886|  3.72M|    setShortLength(len);
 4887|  3.72M|  } else {
 4888|    365|    fUnion.fFields.fLengthAndFlags |= kLengthIsLarge;
 4889|    365|    fUnion.fFields.fLength = len;
 4890|    365|  }
 4891|  3.72M|}
_ZN6icu_7813UnicodeString10setToEmptyEv:
 4894|  1.47k|UnicodeString::setToEmpty() {
 4895|  1.47k|  fUnion.fFields.fLengthAndFlags = kShortString;
 4896|  1.47k|}
_ZN6icu_7813UnicodeString8setArrayEPDsii:
 4899|  2.38M|UnicodeString::setArray(char16_t *array, int32_t len, int32_t capacity) {
 4900|  2.38M|  setLength(len);
 4901|  2.38M|  fUnion.fFields.fArray = array;
 4902|  2.38M|  fUnion.fFields.fCapacity = capacity;
 4903|  2.38M|}
_ZN6icu_7813UnicodeString5setToERKS0_ii:
 4917|  5.19k|{
 4918|  5.19k|  unBogus();
 4919|  5.19k|  return doReplace(0, length(), srcText, srcStart, srcLength);
 4920|  5.19k|}
_ZN6icu_7813UnicodeString5setToERKS0_i:
 4925|  90.7k|{
 4926|  90.7k|  unBogus();
 4927|  90.7k|  srcText.pinIndex(srcStart);
 4928|  90.7k|  return doReplace(0, length(), srcText, srcStart, srcText.length() - srcStart);
 4929|  90.7k|}
_ZN6icu_7813UnicodeString5setToERKS0_:
 4933|   268k|{
 4934|   268k|  return copyFrom(srcText);
 4935|   268k|}
_ZN6icu_7813UnicodeString5setToEPKDsi:
 4940|   322k|{
 4941|   322k|  unBogus();
 4942|   322k|  return doReplace(0, length(), srcChars, 0, srcLength);
 4943|   322k|}
_ZN6icu_7813UnicodeString5setToEDs:
 4947|    289|{
 4948|    289|  unBogus();
 4949|    289|  return doReplace(0, length(), &srcChar, 0, 1);
 4950|    289|}
_ZN6icu_7813UnicodeString6appendERKS0_:
 4967|  21.2k|{ return doAppend(srcText, 0, srcText.length()); }
_ZN6icu_7813UnicodeString6appendEDs:
 4982|  21.2k|{ return doAppend(&srcChar, 0, 1); }
_ZN6icu_7813UnicodeString6removeEv:
 5035|  2.94k|{
 5036|       |  // remove() of a bogus string makes the string empty and non-bogus
 5037|  2.94k|  if(isBogus()) {
  ------------------
  |  Branch (5037:6): [True: 0, False: 2.94k]
  ------------------
 5038|      0|    setToEmpty();
 5039|  2.94k|  } else {
 5040|  2.94k|    setZeroLength();
 5041|  2.94k|  }
 5042|  2.94k|  return *this;
 5043|  2.94k|}
_ZN6icu_7813UnicodeString13retainBetweenEii:
 5062|  21.2k|UnicodeString::retainBetween(int32_t start, int32_t limit) {
 5063|  21.2k|  truncate(limit);
 5064|  21.2k|  return doReplace(0, start, nullptr, 0, 0);
 5065|  21.2k|}
_ZN6icu_7813UnicodeString8truncateEi:
 5069|  21.2k|{
 5070|  21.2k|  if(isBogus() && targetLength == 0) {
  ------------------
  |  Branch (5070:6): [True: 0, False: 21.2k]
  |  Branch (5070:19): [True: 0, False: 0]
  ------------------
 5071|       |    // truncate(0) of a bogus string makes the string empty and non-bogus
 5072|      0|    unBogus();
 5073|      0|    return false;
 5074|  21.2k|  } else if (static_cast<uint32_t>(targetLength) < static_cast<uint32_t>(length())) {
  ------------------
  |  Branch (5074:14): [True: 21.2k, False: 0]
  ------------------
 5075|  21.2k|    setLength(targetLength);
 5076|  21.2k|    return true;
 5077|  21.2k|  } else {
 5078|      0|    return false;
 5079|      0|  }
 5080|  21.2k|}
_ZN6icu_7813UnicodeStringC2IPKDsvEERKT_:
 3274|    287|  UNISTR_FROM_STRING_EXPLICIT UnicodeString(const S &text) {
 3275|    287|    fUnion.fFields.fLengthAndFlags = kShortString;
 3276|    287|    doAppend(internal::toU16StringViewNullable(text));
 3277|    287|  }
_ZN6icu_7813UnicodeStringC2IPDsvEERKT_:
 3274|    190|  UNISTR_FROM_STRING_EXPLICIT UnicodeString(const S &text) {
 3275|    190|    fUnion.fFields.fLengthAndFlags = kShortString;
 3276|    190|    doAppend(internal::toU16StringViewNullable(text));
 3277|    190|  }

_ZN6icu_7828ures_getUnicodeStringByIndexEPK15UResourceBundleiP10UErrorCode:
  860|  1.27k|ures_getUnicodeStringByIndex(const UResourceBundle *resB, int32_t indexS, UErrorCode* status) {
  861|  1.27k|    UnicodeString result;
  862|  1.27k|    int32_t len = 0;
  863|  1.27k|    const char16_t* r = ConstChar16Ptr(ures_getStringByIndex(resB, indexS, &len, status));
  ------------------
  |  | 1676|  1.27k|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  123|  1.27k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.27k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.27k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  864|  1.27k|    if(U_SUCCESS(*status)) {
  ------------------
  |  Branch (864:8): [True: 1.27k, False: 0]
  ------------------
  865|  1.27k|        result.setTo(true, r, len);
  866|  1.27k|    } else {
  867|      0|        result.setToBogus();
  868|      0|    }
  869|  1.27k|    return result;
  870|  1.27k|}
_ZN6icu_7826ures_getUnicodeStringByKeyEPK15UResourceBundlePKcP10UErrorCode:
  883|    840|ures_getUnicodeStringByKey(const UResourceBundle *resB, const char* key, UErrorCode* status) {
  884|    840|    UnicodeString result;
  885|    840|    int32_t len = 0;
  886|    840|    const char16_t* r = ConstChar16Ptr(ures_getStringByKey(resB, key, &len, status));
  ------------------
  |  | 1677|    840|#define ures_getStringByKey U_ICU_ENTRY_POINT_RENAME(ures_getStringByKey)
  |  |  ------------------
  |  |  |  |  123|    840|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    840|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    840|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  887|    840|    if(U_SUCCESS(*status)) {
  ------------------
  |  Branch (887:8): [True: 551, False: 289]
  ------------------
  888|    551|        result.setTo(true, r, len);
  889|    551|    } else {
  890|    289|        result.setToBogus();
  891|    289|    }
  892|    840|    return result;
  893|    840|}

dtfmtsym_fuzzer.cpp:_ZL9U_FAILURE10UErrorCode:
  737|    420|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
dtfmtsym.cpp:_ZL9U_FAILURE10UErrorCode:
  737|   400k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
dtfmtsym.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  20.4k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
numsys.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  2.52k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
timezone.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  2.32M|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
timezone.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|   802k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
tznames.cpp:_ZL9U_FAILURE10UErrorCode:
  737|    707|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
tznames.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|    995|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
tznames_impl.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  3.04M|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
tznames_impl.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|   780k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
zonemeta.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  1.54M|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
zonemeta.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|   128k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
olsontz.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|      4|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
olsontz.cpp:_ZL9U_FAILURE10UErrorCode:
  737|      2|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
charstr.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  1.67M|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
locavailable.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  2.66k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
locbased.cpp:_ZL9U_FAILURE10UErrorCode:
  737|    840|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
locid.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  24.5k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
locid.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  3.48k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
putil.cpp:_ZL9U_FAILURE10UErrorCode:
  737|      6|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
putil.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|      3|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
uarrsort.cpp:_ZL9U_FAILURE10UErrorCode:
  737|    717|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
uhash.cpp:_ZL9U_FAILURE10UErrorCode:
  737|   376k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
uloc.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  18.2k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
unistr.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  1.03M|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
uresbund.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  8.05M|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
uresbund.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|   926k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
uresdata.cpp:_ZL9U_FAILURE10UErrorCode:
  737|   274k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
ustring.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  1.21M|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
uvector.cpp:_ZL9U_FAILURE10UErrorCode:
  737|   154k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
uvector.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|    717|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
bytesinkutil.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  5.25k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
udata.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  5.58k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
udata.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  1.77k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
udatamem.cpp:_ZL9U_FAILURE10UErrorCode:
  737|    677|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
ucmndata.cpp:_ZL9U_FAILURE10UErrorCode:
  737|      2|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }

_ZN6icu_7817UniqueCharStringsC2ER10UErrorCode:
   27|      1|    UniqueCharStrings(UErrorCode &errorCode) : strings(nullptr) {
   28|       |        // Note: We hash on string contents but store stable char16_t * pointers.
   29|       |        // If the strings are stored in resource bundles which should be built with
   30|       |        // duplicate elimination, then we should be able to hash on just the pointer values.
   31|      1|        uhash_init(&map, uhash_hashUChars, uhash_compareUChars, uhash_compareLong, &errorCode);
  ------------------
  |  | 1022|      1|#define uhash_init U_ICU_ENTRY_POINT_RENAME(uhash_init)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      uhash_init(&map, uhash_hashUChars, uhash_compareUChars, uhash_compareLong, &errorCode);
  ------------------
  |  | 1016|      1|#define uhash_hashUChars U_ICU_ENTRY_POINT_RENAME(uhash_hashUChars)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      uhash_init(&map, uhash_hashUChars, uhash_compareUChars, uhash_compareLong, &errorCode);
  ------------------
  |  |  998|      1|#define uhash_compareUChars U_ICU_ENTRY_POINT_RENAME(uhash_compareUChars)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      uhash_init(&map, uhash_hashUChars, uhash_compareUChars, uhash_compareLong, &errorCode);
  ------------------
  |  |  996|      1|#define uhash_compareLong U_ICU_ENTRY_POINT_RENAME(uhash_compareLong)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   32|      1|        if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (32:13): [True: 0, False: 1]
  ------------------
   33|      1|        strings = new CharString();
   34|      1|        if (strings == nullptr) {
  ------------------
  |  Branch (34:13): [True: 0, False: 1]
  ------------------
   35|      0|            errorCode = U_MEMORY_ALLOCATION_ERROR;
   36|      0|        }
   37|      1|    }
_ZN6icu_7817UniqueCharStrings3addEPKDsR10UErrorCode:
   58|  1.29k|    int32_t add(const char16_t*p, UErrorCode &errorCode) {
   59|  1.29k|        if (U_FAILURE(errorCode)) { return -1; }
  ------------------
  |  Branch (59:13): [True: 0, False: 1.29k]
  ------------------
   60|  1.29k|        if (isFrozen) {
  ------------------
  |  Branch (60:13): [True: 0, False: 1.29k]
  ------------------
   61|      0|            errorCode = U_NO_WRITE_PERMISSION;
   62|      0|            return -1;
   63|      0|        }
   64|       |        // The string points into the resource bundle.
   65|  1.29k|        int32_t oldIndex = uhash_geti(&map, p);
  ------------------
  |  | 1008|  1.29k|#define uhash_geti U_ICU_ENTRY_POINT_RENAME(uhash_geti)
  |  |  ------------------
  |  |  |  |  123|  1.29k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.29k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.29k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   66|  1.29k|        if (oldIndex != 0) {  // found duplicate
  ------------------
  |  Branch (66:13): [True: 476, False: 814]
  ------------------
   67|    476|            return oldIndex;
   68|    476|        }
   69|       |        // Explicit NUL terminator for the previous string.
   70|       |        // The strings object is also terminated with one implicit NUL.
   71|    814|        strings->append(0, errorCode);
   72|    814|        int32_t newIndex = strings->length();
   73|    814|        strings->appendInvariantChars(p, u_strlen(p), errorCode);
  ------------------
  |  |  393|    814|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|    814|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    814|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    814|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   74|    814|        uhash_puti(&map, const_cast<char16_t *>(p), newIndex, &errorCode);
  ------------------
  |  | 1033|    814|#define uhash_puti U_ICU_ENTRY_POINT_RENAME(uhash_puti)
  |  |  ------------------
  |  |  |  |  123|    814|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    814|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    814|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   75|    814|        return newIndex;
   76|  1.29k|    }
_ZN6icu_7817UniqueCharStrings6freezeEv:
  100|      1|    void freeze() { isFrozen = true; }
_ZNK6icu_7817UniqueCharStrings3getEi:
  106|  1.29k|    const char *get(int32_t i) const {
  107|  1.29k|        U_ASSERT(isFrozen);
  ------------------
  |  |   35|  1.29k|#   define U_ASSERT(exp) (void)0
  ------------------
  108|  1.29k|        return isFrozen && i > 0 ? strings->data() + i : nullptr;
  ------------------
  |  Branch (108:16): [True: 1.29k, False: 0]
  |  Branch (108:28): [True: 1.29k, False: 0]
  ------------------
  109|  1.29k|    }
_ZN6icu_7817UniqueCharStrings17orphanCharStringsEv:
   44|      1|    CharString *orphanCharStrings() {
   45|      1|        CharString *result = strings;
   46|      1|        strings = nullptr;
   47|      1|        return result;
   48|      1|    }
_ZN6icu_7817UniqueCharStringsD2Ev:
   38|      1|    ~UniqueCharStrings() {
   39|      1|        uhash_close(&map);
  ------------------
  |  |  991|      1|#define uhash_close U_ICU_ENTRY_POINT_RENAME(uhash_close)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   40|      1|        delete strings;
   41|      1|    }

_ZN6icu_7811ReplaceableD2Ev:
  106|  3.29M|Replaceable::~Replaceable() {}
_ZN6icu_7813UnicodeString6addRefEv:
  146|  8.45k|UnicodeString::addRef() {
  147|  8.45k|  umtx_atomic_inc(reinterpret_cast<u_atomic_int32_t*>(fUnion.fFields.fArray) - 1);
  148|  8.45k|}
_ZN6icu_7813UnicodeString9removeRefEv:
  151|  24.5k|UnicodeString::removeRef() {
  152|  24.5k|  return umtx_atomic_dec(reinterpret_cast<u_atomic_int32_t*>(fUnion.fFields.fArray) - 1);
  153|  24.5k|}
_ZNK6icu_7813UnicodeString8refCountEv:
  156|  20.0k|UnicodeString::refCount() const {
  157|  20.0k|  return umtx_loadAcquire(*(reinterpret_cast<u_atomic_int32_t*>(fUnion.fFields.fArray) - 1));
  158|  20.0k|}
_ZN6icu_7813UnicodeString12releaseArrayEv:
  161|  7.11M|UnicodeString::releaseArray() {
  162|  7.11M|  if((fUnion.fFields.fLengthAndFlags & kRefCounted) && removeRef() == 0) {
  ------------------
  |  Branch (162:6): [True: 24.5k, False: 7.09M]
  |  Branch (162:56): [True: 20.1k, False: 4.40k]
  ------------------
  163|  20.1k|    uprv_free(reinterpret_cast<int32_t*>(fUnion.fFields.fArray) - 1);
  ------------------
  |  | 1503|  20.1k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  20.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  20.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  20.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  164|  20.1k|  }
  165|  7.11M|}
_ZN6icu_7813UnicodeStringC2EDs:
  216|   181k|UnicodeString::UnicodeString(char16_t ch) {
  217|   181k|  fUnion.fFields.fLengthAndFlags = kLength1 | kShortString;
  218|   181k|  fUnion.fStackFields.fBuffer[0] = ch;
  219|   181k|}
_ZN6icu_7813UnicodeStringC2EPKDsi:
  234|  5.19k|                             int32_t textLength) {
  235|  5.19k|  fUnion.fFields.fLengthAndFlags = kShortString;
  236|  5.19k|  doAppend(text, 0, textLength);
  237|  5.19k|}
_ZN6icu_7813UnicodeStringC2EaNS_14ConstChar16PtrEi:
  241|   411k|                             int32_t textLength) {
  242|   411k|  fUnion.fFields.fLengthAndFlags = kReadonlyAlias;
  243|   411k|  const char16_t *text = textPtr;
  244|   411k|  if(text == nullptr) {
  ------------------
  |  Branch (244:6): [True: 0, False: 411k]
  ------------------
  245|       |    // treat as an empty string, do not alias
  246|      0|    setToEmpty();
  247|   411k|  } else if(textLength < -1 ||
  ------------------
  |  Branch (247:13): [True: 0, False: 411k]
  ------------------
  248|   411k|            (textLength == -1 && !isTerminated) ||
  ------------------
  |  Branch (248:14): [True: 420, False: 410k]
  |  Branch (248:34): [True: 0, False: 420]
  ------------------
  249|   411k|            (textLength >= 0 && isTerminated && text[textLength] != 0)
  ------------------
  |  Branch (249:14): [True: 410k, False: 420]
  |  Branch (249:33): [True: 405k, False: 5.61k]
  |  Branch (249:49): [True: 0, False: 405k]
  ------------------
  250|   411k|  ) {
  251|      0|    setToBogus();
  252|   411k|  } else {
  253|   411k|    if(textLength == -1) {
  ------------------
  |  Branch (253:8): [True: 420, False: 410k]
  ------------------
  254|       |      // text is terminated, or else it would have failed the above test
  255|    420|      textLength = u_strlen(text);
  ------------------
  |  |  393|    420|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|    420|    }
  257|   411k|    setArray(const_cast<char16_t *>(text), textLength,
  258|   411k|             isTerminated ? textLength + 1 : textLength);
  ------------------
  |  Branch (258:14): [True: 405k, False: 5.61k]
  ------------------
  259|   411k|  }
  260|   411k|}
_ZN6icu_7813UnicodeStringC2EPKciNS0_10EInvariantE:
  284|   246k|UnicodeString::UnicodeString(const char *src, int32_t length, EInvariant) {
  285|   246k|  fUnion.fFields.fLengthAndFlags = kShortString;
  286|   246k|  if(src==nullptr) {
  ------------------
  |  Branch (286:6): [True: 0, False: 246k]
  ------------------
  287|       |    // treat as an empty string
  288|   246k|  } else {
  289|   246k|    if(length<0) {
  ------------------
  |  Branch (289:8): [True: 181k, False: 65.2k]
  ------------------
  290|   181k|      length = static_cast<int32_t>(uprv_strlen(src));
  ------------------
  |  |   37|   181k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|   181k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  291|   181k|    }
  292|   246k|    if(cloneArrayIfNeeded(length, length, false)) {
  ------------------
  |  Branch (292:8): [True: 246k, False: 0]
  ------------------
  293|   246k|      u_charsToUChars(src, getArrayStart(), length);
  ------------------
  |  |  226|   246k|#define u_charsToUChars U_ICU_ENTRY_POINT_RENAME(u_charsToUChars)
  |  |  ------------------
  |  |  |  |  123|   246k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   246k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   246k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  294|   246k|      setLength(length);
  295|   246k|    } else {
  296|      0|      setToBogus();
  297|      0|    }
  298|   246k|  }
  299|   246k|}
_ZN6icu_7813UnicodeStringC2ERKS0_:
  345|   294k|UnicodeString::UnicodeString(const UnicodeString& that) {
  346|   294k|  fUnion.fFields.fLengthAndFlags = kShortString;
  347|   294k|  copyFrom(that);
  348|   294k|}
_ZNK6icu_7813UnicodeString5cloneEv:
  375|  8.99k|UnicodeString::clone() const {
  376|  8.99k|  LocalPointer<UnicodeString> clonedString(new UnicodeString(*this));
  377|  8.99k|  return clonedString.isValid() && !clonedString->isBogus() ? clonedString.orphan() : nullptr;
  ------------------
  |  Branch (377:10): [True: 8.99k, False: 0]
  |  Branch (377:36): [True: 8.99k, False: 0]
  ------------------
  378|  8.99k|}
_ZN6icu_7813UnicodeString8allocateEi:
  409|   583k|UnicodeString::allocate(int32_t capacity) {
  410|   583k|  if(capacity <= US_STACKBUF_SIZE) {
  ------------------
  |  Branch (410:6): [True: 563k, False: 20.1k]
  ------------------
  411|   563k|    fUnion.fFields.fLengthAndFlags = kShortString;
  412|   563k|    return true;
  413|   563k|  }
  414|  20.1k|  if(capacity <= kMaxCapacity) {
  ------------------
  |  Branch (414:6): [True: 20.1k, False: 0]
  ------------------
  415|  20.1k|    ++capacity;  // for the NUL
  416|       |    // Switch to size_t which is unsigned so that we can allocate up to 4GB.
  417|       |    // Reference counter + UChars.
  418|  20.1k|    size_t numBytes = sizeof(int32_t) + static_cast<size_t>(capacity) * U_SIZEOF_UCHAR;
  ------------------
  |  |  352|  20.1k|#define U_SIZEOF_UCHAR 2
  ------------------
  419|       |    // Round up to a multiple of 16.
  420|  20.1k|    numBytes = (numBytes + 15) & ~15;
  421|  20.1k|    int32_t* array = static_cast<int32_t*>(uprv_malloc(numBytes));
  ------------------
  |  | 1524|  20.1k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  20.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  20.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  20.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  422|  20.1k|    if(array != nullptr) {
  ------------------
  |  Branch (422:8): [True: 20.1k, False: 0]
  ------------------
  423|       |      // set initial refCount and point behind the refCount
  424|  20.1k|      *array++ = 1;
  425|  20.1k|      numBytes -= sizeof(int32_t);
  426|       |
  427|       |      // have fArray point to the first char16_t
  428|  20.1k|      fUnion.fFields.fArray = reinterpret_cast<char16_t*>(array);
  429|  20.1k|      fUnion.fFields.fCapacity = static_cast<int32_t>(numBytes / U_SIZEOF_UCHAR);
  ------------------
  |  |  352|  20.1k|#define U_SIZEOF_UCHAR 2
  ------------------
  430|  20.1k|      fUnion.fFields.fLengthAndFlags = kLongString;
  431|  20.1k|      return true;
  432|  20.1k|    }
  433|  20.1k|  }
  434|      0|  fUnion.fFields.fLengthAndFlags = kIsBogus;
  435|      0|  fUnion.fFields.fArray = nullptr;
  436|      0|  fUnion.fFields.fCapacity = 0;
  437|      0|  return false;
  438|  20.1k|}
_ZN6icu_7813UnicodeStringD2Ev:
  462|  3.29M|{
  463|       |#ifdef UNISTR_COUNT_FINAL_STRING_LENGTHS
  464|       |  // Count lengths of strings at the end of their lifetime.
  465|       |  // Useful for discussion of a desirable stack buffer size.
  466|       |  // Count the contents length, not the optional NUL terminator nor further capacity.
  467|       |  // Ignore open-buffer strings and strings which alias external storage.
  468|       |  if((fUnion.fFields.fLengthAndFlags&(kOpenGetBuffer|kReadonlyAlias|kWritableAlias)) == 0) {
  469|       |    if(hasShortLength()) {
  470|       |      umtx_atomic_inc(finalLengthCounts + getShortLength());
  471|       |    } else {
  472|       |      umtx_atomic_inc(&beyondCount);
  473|       |    }
  474|       |  }
  475|       |#endif
  476|       |
  477|  3.29M|  releaseArray();
  478|  3.29M|}
_ZN6icu_7813UnicodeStringaSERKS0_:
  527|  54.1k|UnicodeString::operator=(const UnicodeString &src) {
  528|  54.1k|  return copyFrom(src);
  529|  54.1k|}
_ZN6icu_7813UnicodeString12fastCopyFromERKS0_:
  532|   423k|UnicodeString::fastCopyFrom(const UnicodeString &src) {
  533|   423k|  return copyFrom(src, true);
  534|   423k|}
_ZN6icu_7813UnicodeString8copyFromERKS0_a:
  537|  1.04M|UnicodeString::copyFrom(const UnicodeString &src, UBool fastCopy) {
  538|       |  // if assigning to ourselves, do nothing
  539|  1.04M|  if(this == &src) {
  ------------------
  |  Branch (539:6): [True: 0, False: 1.04M]
  ------------------
  540|      0|    return *this;
  541|      0|  }
  542|       |
  543|       |  // is the right side bogus?
  544|  1.04M|  if(src.isBogus()) {
  ------------------
  |  Branch (544:6): [True: 13.5k, False: 1.02M]
  ------------------
  545|  13.5k|    setToBogus();
  546|  13.5k|    return *this;
  547|  13.5k|  }
  548|       |
  549|       |  // delete the current contents
  550|  1.02M|  releaseArray();
  551|       |
  552|  1.02M|  if(src.isEmpty()) {
  ------------------
  |  Branch (552:6): [True: 1.18k, False: 1.02M]
  ------------------
  553|       |    // empty string - use the stack buffer
  554|  1.18k|    setToEmpty();
  555|  1.18k|    return *this;
  556|  1.18k|  }
  557|       |
  558|       |  // fLength>0 and not an "open" src.getBuffer(minCapacity)
  559|  1.02M|  fUnion.fFields.fLengthAndFlags = src.fUnion.fFields.fLengthAndFlags;
  560|  1.02M|  switch(src.fUnion.fFields.fLengthAndFlags & kAllStorageFlags) {
  561|  44.4k|  case kShortString:
  ------------------
  |  Branch (561:3): [True: 44.4k, False: 981k]
  ------------------
  562|       |    // short string using the stack buffer, do the same
  563|  44.4k|    uprv_memcpy(fUnion.fStackFields.fBuffer, src.fUnion.fStackFields.fBuffer,
  ------------------
  |  |   42|  44.4k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  44.4k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  44.4k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  44.4k|    _Pragma("clang diagnostic push") \
  |  |   45|  44.4k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  44.4k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  44.4k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  44.4k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  44.4k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  44.4k|    _Pragma("clang diagnostic pop") \
  |  |   49|  44.4k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  44.4k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  44.4k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  44.4k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  564|  44.4k|                getShortLength() * U_SIZEOF_UCHAR);
  565|  44.4k|    break;
  566|  8.45k|  case kLongString:
  ------------------
  |  Branch (566:3): [True: 8.45k, False: 1.01M]
  ------------------
  567|       |    // src uses a refCounted string buffer, use that buffer with refCount
  568|       |    // src is const, use a cast - we don't actually change it
  569|  8.45k|    const_cast<UnicodeString &>(src).addRef();
  570|       |    // copy all fields, share the reference-counted buffer
  571|  8.45k|    fUnion.fFields.fArray = src.fUnion.fFields.fArray;
  572|  8.45k|    fUnion.fFields.fCapacity = src.fUnion.fFields.fCapacity;
  573|  8.45k|    if(!hasShortLength()) {
  ------------------
  |  Branch (573:8): [True: 0, False: 8.45k]
  ------------------
  574|      0|      fUnion.fFields.fLength = src.fUnion.fFields.fLength;
  575|      0|    }
  576|  8.45k|    break;
  577|   973k|  case kReadonlyAlias:
  ------------------
  |  Branch (577:3): [True: 973k, False: 52.9k]
  ------------------
  578|   973k|    if(fastCopy) {
  ------------------
  |  Branch (578:8): [True: 409k, False: 563k]
  ------------------
  579|       |      // src is a readonly alias, do the same
  580|       |      // -> maintain the readonly alias as such
  581|   409k|      fUnion.fFields.fArray = src.fUnion.fFields.fArray;
  582|   409k|      fUnion.fFields.fCapacity = src.fUnion.fFields.fCapacity;
  583|   409k|      if(!hasShortLength()) {
  ------------------
  |  Branch (583:10): [True: 0, False: 409k]
  ------------------
  584|      0|        fUnion.fFields.fLength = src.fUnion.fFields.fLength;
  585|      0|      }
  586|   409k|      break;
  587|   409k|    }
  588|       |    // else if(!fastCopy) fall through to case kWritableAlias
  589|       |    // -> allocate a new buffer and copy the contents
  590|   563k|    U_FALLTHROUGH;
  ------------------
  |  |  511|   563k|#       define U_FALLTHROUGH [[clang::fallthrough]]
  ------------------
  591|   563k|  case kWritableAlias: {
  ------------------
  |  Branch (591:3): [True: 0, False: 1.02M]
  ------------------
  592|       |    // src is a writable alias; we make a copy of that instead
  593|   563k|    int32_t srcLength = src.length();
  594|   563k|    if(allocate(srcLength)) {
  ------------------
  |  Branch (594:8): [True: 563k, False: 0]
  ------------------
  595|   563k|      u_memcpy(getArrayStart(), src.getArrayStart(), srcLength);
  ------------------
  |  |  334|   563k|#define u_memcpy U_ICU_ENTRY_POINT_RENAME(u_memcpy)
  |  |  ------------------
  |  |  |  |  123|   563k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   563k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   563k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  596|   563k|      setLength(srcLength);
  597|   563k|      break;
  598|   563k|    }
  599|       |    // if there is not enough memory, then fall through to setting to bogus
  600|      0|    U_FALLTHROUGH;
  ------------------
  |  |  511|      0|#       define U_FALLTHROUGH [[clang::fallthrough]]
  ------------------
  601|      0|  }
  602|      0|  default:
  ------------------
  |  Branch (602:3): [True: 0, False: 1.02M]
  ------------------
  603|       |    // if src is bogus, set ourselves to bogus
  604|       |    // do not call setToBogus() here because fArray and flags are not consistent here
  605|      0|    fUnion.fFields.fLengthAndFlags = kIsBogus;
  606|      0|    fUnion.fFields.fArray = nullptr;
  607|      0|    fUnion.fFields.fCapacity = 0;
  608|      0|    break;
  609|  1.02M|  }
  610|       |
  611|  1.02M|  return *this;
  612|  1.02M|}
_ZN6icu_7813UnicodeStringaSEOS0_:
  614|    420|UnicodeString &UnicodeString::operator=(UnicodeString &&src) noexcept {
  615|       |  // No explicit check for self move assignment, consistent with standard library.
  616|       |  // Self move assignment causes no crash nor leak but might make the object bogus.
  617|    420|  releaseArray();
  618|    420|  copyFieldsFrom(src, true);
  619|    420|  return *this;
  620|    420|}
_ZN6icu_7813UnicodeString14copyFieldsFromERS0_a:
  623|    420|void UnicodeString::copyFieldsFrom(UnicodeString &src, UBool setSrcToBogus) noexcept {
  624|    420|  int16_t lengthAndFlags = fUnion.fFields.fLengthAndFlags = src.fUnion.fFields.fLengthAndFlags;
  625|    420|  if(lengthAndFlags & kUsingStackBuffer) {
  ------------------
  |  Branch (625:6): [True: 0, False: 420]
  ------------------
  626|       |    // Short string using the stack buffer, copy the contents.
  627|       |    // Check for self assignment to prevent "overlap in memcpy" warnings,
  628|       |    // although it should be harmless to copy a buffer to itself exactly.
  629|      0|    if(this != &src) {
  ------------------
  |  Branch (629:8): [True: 0, False: 0]
  ------------------
  630|      0|      uprv_memcpy(fUnion.fStackFields.fBuffer, src.fUnion.fStackFields.fBuffer,
  ------------------
  |  |   42|      0|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|      0|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|      0|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|      0|    _Pragma("clang diagnostic push") \
  |  |   45|      0|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|      0|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|      0|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|      0|    _Pragma("clang diagnostic pop") \
  |  |   49|      0|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|      0|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|      0|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  631|      0|                  getShortLength() * U_SIZEOF_UCHAR);
  632|      0|    }
  633|    420|  } else {
  634|       |    // In all other cases, copy all fields.
  635|    420|    fUnion.fFields.fArray = src.fUnion.fFields.fArray;
  636|    420|    fUnion.fFields.fCapacity = src.fUnion.fFields.fCapacity;
  637|    420|    if(!hasShortLength()) {
  ------------------
  |  Branch (637:8): [True: 0, False: 420]
  ------------------
  638|      0|      fUnion.fFields.fLength = src.fUnion.fFields.fLength;
  639|      0|    }
  640|    420|    if(setSrcToBogus) {
  ------------------
  |  Branch (640:8): [True: 420, False: 0]
  ------------------
  641|       |      // Set src to bogus without releasing any memory.
  642|    420|      src.fUnion.fFields.fLengthAndFlags = kIsBogus;
  643|    420|      src.fUnion.fFields.fArray = nullptr;
  644|    420|      src.fUnion.fFields.fCapacity = 0;
  645|    420|    }
  646|    420|  }
  647|    420|}
_ZNK6icu_7813UnicodeString8doEqualsEPKDsi:
  698|   104k|UnicodeString::doEquals(const char16_t *text, int32_t len) const {
  699|       |  // Requires: this not bogus and have same lengths.
  700|       |  // Byte-wise comparison works for equality regardless of endianness.
  701|   104k|  return uprv_memcmp(getArrayStart(), text, len * U_SIZEOF_UCHAR) == 0;
  ------------------
  |  |  101|   104k|#define uprv_memcmp(buffer1, buffer2, size) U_STANDARD_CPP_NAMESPACE memcmp(buffer1, buffer2,size)
  |  |  ------------------
  |  |  |  |  393|   104k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  702|   104k|}
_ZNK6icu_7813UnicodeString17doEqualsSubstringEiiPKDsii:
  710|   292k|{
  711|       |  // compare illegal string values
  712|   292k|  if(isBogus()) {
  ------------------
  |  Branch (712:6): [True: 0, False: 292k]
  ------------------
  713|      0|    return false;
  714|      0|  }
  715|       |  
  716|       |  // pin indices to legal values
  717|   292k|  pinIndices(start, length);
  718|       |
  719|   292k|  if(srcChars == nullptr) {
  ------------------
  |  Branch (719:6): [True: 0, False: 292k]
  ------------------
  720|       |    // treat const char16_t *srcChars==nullptr as an empty string
  721|      0|    return length == 0 ? true : false;
  ------------------
  |  Branch (721:12): [True: 0, False: 0]
  ------------------
  722|      0|  }
  723|       |
  724|       |  // get the correct pointer
  725|   292k|  const char16_t *chars = getArrayStart();
  726|       |
  727|   292k|  chars += start;
  728|   292k|  srcChars += srcStart;
  729|       |
  730|       |  // get the srcLength if necessary
  731|   292k|  if(srcLength < 0) {
  ------------------
  |  Branch (731:6): [True: 0, False: 292k]
  ------------------
  732|      0|    srcLength = u_strlen(srcChars + srcStart);
  ------------------
  |  |  393|      0|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  733|      0|  }
  734|       |
  735|   292k|  if (length != srcLength) {
  ------------------
  |  Branch (735:7): [True: 46.5k, False: 246k]
  ------------------
  736|  46.5k|    return false;
  737|  46.5k|  }
  738|       |
  739|   246k|  if(length == 0 || chars == srcChars) {
  ------------------
  |  Branch (739:6): [True: 0, False: 246k]
  |  Branch (739:21): [True: 0, False: 246k]
  ------------------
  740|      0|    return true;
  741|      0|  }
  742|       |
  743|   246k|  return u_memcmp(chars, srcChars, srcLength) == 0;
  ------------------
  |  |  332|   246k|#define u_memcmp U_ICU_ENTRY_POINT_RENAME(u_memcmp)
  |  |  ------------------
  |  |  |  |  123|   246k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   246k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   246k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  744|   246k|}
_ZNK6icu_7813UnicodeString9doCompareEiiPKDsii:
  752|  1.55M|{
  753|       |  // compare illegal string values
  754|  1.55M|  if(isBogus()) {
  ------------------
  |  Branch (754:6): [True: 0, False: 1.55M]
  ------------------
  755|      0|    return -1;
  756|      0|  }
  757|       |  
  758|       |  // pin indices to legal values
  759|  1.55M|  pinIndices(start, length);
  760|       |
  761|  1.55M|  if(srcChars == nullptr) {
  ------------------
  |  Branch (761:6): [True: 0, False: 1.55M]
  ------------------
  762|       |    // treat const char16_t *srcChars==nullptr as an empty string
  763|      0|    return length == 0 ? 0 : 1;
  ------------------
  |  Branch (763:12): [True: 0, False: 0]
  ------------------
  764|      0|  }
  765|       |
  766|       |  // get the correct pointer
  767|  1.55M|  const char16_t *chars = getArrayStart();
  768|       |
  769|  1.55M|  chars += start;
  770|  1.55M|  srcChars += srcStart;
  771|       |
  772|  1.55M|  int32_t minLength;
  773|  1.55M|  int8_t lengthResult;
  774|       |
  775|       |  // get the srcLength if necessary
  776|  1.55M|  if(srcLength < 0) {
  ------------------
  |  Branch (776:6): [True: 0, False: 1.55M]
  ------------------
  777|      0|    srcLength = u_strlen(srcChars + srcStart);
  ------------------
  |  |  393|      0|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  778|      0|  }
  779|       |
  780|       |  // are we comparing different lengths?
  781|  1.55M|  if(length != srcLength) {
  ------------------
  |  Branch (781:6): [True: 1.20M, False: 343k]
  ------------------
  782|  1.20M|    if(length < srcLength) {
  ------------------
  |  Branch (782:8): [True: 656k, False: 552k]
  ------------------
  783|   656k|      minLength = length;
  784|   656k|      lengthResult = -1;
  785|   656k|    } else {
  786|   552k|      minLength = srcLength;
  787|   552k|      lengthResult = 1;
  788|   552k|    }
  789|  1.20M|  } else {
  790|   343k|    minLength = length;
  791|   343k|    lengthResult = 0;
  792|   343k|  }
  793|       |
  794|       |  /*
  795|       |   * note that uprv_memcmp() returns an int but we return an int8_t;
  796|       |   * we need to take care not to truncate the result -
  797|       |   * one way to do this is to right-shift the value to
  798|       |   * move the sign bit into the lower 8 bits and making sure that this
  799|       |   * does not become 0 itself
  800|       |   */
  801|       |
  802|  1.55M|  if(minLength > 0 && chars != srcChars) {
  ------------------
  |  Branch (802:6): [True: 1.55M, False: 0]
  |  Branch (802:23): [True: 1.42M, False: 125k]
  ------------------
  803|  1.42M|    int32_t result;
  804|       |
  805|       |#   if U_IS_BIG_ENDIAN 
  806|       |      // big-endian: byte comparison works
  807|       |      result = uprv_memcmp(chars, srcChars, minLength * sizeof(char16_t));
  808|       |      if(result != 0) {
  809|       |        return (int8_t)(result >> 15 | 1);
  810|       |      }
  811|       |#   else
  812|       |      // little-endian: compare char16_t units
  813|  8.42M|      do {
  814|  8.42M|        result = static_cast<int32_t>(*(chars++)) - static_cast<int32_t>(*(srcChars++));
  815|  8.42M|        if(result != 0) {
  ------------------
  |  Branch (815:12): [True: 1.36M, False: 7.06M]
  ------------------
  816|  1.36M|          return static_cast<int8_t>(result >> 15 | 1);
  817|  1.36M|        }
  818|  8.42M|      } while(--minLength > 0);
  ------------------
  |  Branch (818:15): [True: 7.00M, False: 66.7k]
  ------------------
  819|  1.42M|#   endif
  820|  1.42M|  }
  821|   191k|  return lengthResult;
  822|  1.55M|}
_ZNK6icu_7813UnicodeString11countChar32Eii:
  907|    420|UnicodeString::countChar32(int32_t start, int32_t length) const {
  908|    420|  pinIndices(start, length);
  909|       |  // if(isBogus()) then fArray==0 and start==0 - u_countChar32() checks for nullptr
  910|    420|  return u_countChar32(getArrayStart()+start, length);
  ------------------
  |  |  228|    420|#define u_countChar32 U_ICU_ENTRY_POINT_RENAME(u_countChar32)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  911|    420|}
_ZNK6icu_7813UnicodeString7extractENS_9Char16PtrEiR10UErrorCode:
  958|  1.03M|                       UErrorCode &errorCode) const {
  959|  1.03M|  int32_t len = length();
  960|  1.03M|  if(U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (960:6): [True: 1.03M, False: 0]
  ------------------
  961|  1.03M|    if (isBogus() || destCapacity < 0 || (destCapacity > 0 && dest == nullptr)) {
  ------------------
  |  Branch (961:9): [True: 0, False: 1.03M]
  |  Branch (961:22): [True: 0, False: 1.03M]
  |  Branch (961:43): [True: 1.03M, False: 0]
  |  Branch (961:63): [True: 0, False: 1.03M]
  ------------------
  962|      0|      errorCode=U_ILLEGAL_ARGUMENT_ERROR;
  963|  1.03M|    } else {
  964|  1.03M|      const char16_t *array = getArrayStart();
  965|  1.03M|      if(len>0 && len<=destCapacity && array!=dest) {
  ------------------
  |  Branch (965:10): [True: 1.03M, False: 0]
  |  Branch (965:19): [True: 1.03M, False: 0]
  |  Branch (965:40): [True: 1.03M, False: 0]
  ------------------
  966|  1.03M|        u_memcpy(dest, array, len);
  ------------------
  |  |  334|  1.03M|#define u_memcpy U_ICU_ENTRY_POINT_RENAME(u_memcpy)
  |  |  ------------------
  |  |  |  |  123|  1.03M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.03M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.03M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  967|  1.03M|      }
  968|  1.03M|      return u_terminateUChars(dest, destCapacity, len, &errorCode);
  ------------------
  |  |  408|  1.03M|#define u_terminateUChars U_ICU_ENTRY_POINT_RENAME(u_terminateUChars)
  |  |  ------------------
  |  |  |  |  123|  1.03M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.03M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.03M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  969|  1.03M|    }
  970|  1.03M|  }
  971|       |
  972|      0|  return len;
  973|  1.03M|}
_ZNK6icu_7813UnicodeString7extractEiiPciNS0_10EInvariantE:
  981|   176k|{
  982|       |  // if the arguments are illegal, then do nothing
  983|   176k|  if(targetCapacity < 0 || (targetCapacity > 0 && target == nullptr)) {
  ------------------
  |  Branch (983:6): [True: 0, False: 176k]
  |  Branch (983:29): [True: 176k, False: 0]
  |  Branch (983:51): [True: 0, False: 176k]
  ------------------
  984|      0|    return 0;
  985|      0|  }
  986|       |
  987|       |  // pin the indices to legal values
  988|   176k|  pinIndices(start, length);
  989|       |
  990|   176k|  if(length <= targetCapacity) {
  ------------------
  |  Branch (990:6): [True: 176k, False: 0]
  ------------------
  991|   176k|    u_UCharsToChars(getArrayStart() + start, target, length);
  ------------------
  |  |  211|   176k|#define u_UCharsToChars U_ICU_ENTRY_POINT_RENAME(u_UCharsToChars)
  |  |  ------------------
  |  |  |  |  123|   176k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   176k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   176k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  992|   176k|  }
  993|   176k|  UErrorCode status = U_ZERO_ERROR;
  994|   176k|  return u_terminateChars(target, targetCapacity, length, &status);
  ------------------
  |  |  406|   176k|#define u_terminateChars U_ICU_ENTRY_POINT_RENAME(u_terminateChars)
  |  |  ------------------
  |  |  |  |  123|   176k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   176k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   176k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  995|   176k|}
_ZNK6icu_7813UnicodeString13tempSubStringEii:
  998|  5.19k|UnicodeString::tempSubString(int32_t start, int32_t len) const {
  999|  5.19k|  pinIndices(start, len);
 1000|  5.19k|  const char16_t *array = getBuffer();  // not getArrayStart() to check kIsBogus & kOpenGetBuffer
 1001|  5.19k|  if(array==nullptr) {
  ------------------
  |  Branch (1001:6): [True: 0, False: 5.19k]
  ------------------
 1002|      0|    array=fUnion.fStackFields.fBuffer;  // anything not nullptr because that would make an empty string
 1003|      0|    len=-2;  // bogus result string
 1004|      0|  }
 1005|  5.19k|  return UnicodeString(false, array + start, len);
 1006|  5.19k|}
_ZNK6icu_7813UnicodeString7indexOfEPKDsiiii:
 1112|   212k|{
 1113|   212k|  if (isBogus() || srcChars == nullptr || srcStart < 0 || srcLength == 0) {
  ------------------
  |  Branch (1113:7): [True: 0, False: 212k]
  |  Branch (1113:20): [True: 0, False: 212k]
  |  Branch (1113:43): [True: 0, False: 212k]
  |  Branch (1113:59): [True: 0, False: 212k]
  ------------------
 1114|      0|    return -1;
 1115|      0|  }
 1116|       |
 1117|       |  // UnicodeString does not find empty substrings
 1118|   212k|  if(srcLength < 0 && srcChars[srcStart] == 0) {
  ------------------
  |  Branch (1118:6): [True: 0, False: 212k]
  |  Branch (1118:23): [True: 0, False: 0]
  ------------------
 1119|      0|    return -1;
 1120|      0|  }
 1121|       |
 1122|       |  // get the indices within bounds
 1123|   212k|  pinIndices(start, length);
 1124|       |
 1125|       |  // find the first occurrence of the substring
 1126|   212k|  const char16_t *array = getArrayStart();
 1127|   212k|  const char16_t *match = u_strFindFirst(array + start, length, srcChars + srcStart, srcLength);
  ------------------
  |  |  361|   212k|#define u_strFindFirst U_ICU_ENTRY_POINT_RENAME(u_strFindFirst)
  |  |  ------------------
  |  |  |  |  123|   212k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   212k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   212k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1128|   212k|  if(match == nullptr) {
  ------------------
  |  Branch (1128:6): [True: 201k, False: 11.3k]
  ------------------
 1129|   201k|    return -1;
 1130|   201k|  } else {
 1131|  11.3k|    return static_cast<int32_t>(match - array);
 1132|  11.3k|  }
 1133|   212k|}
_ZNK6icu_7813UnicodeString9doIndexOfEDsii:
 1139|  5.19k|{
 1140|       |  // pin indices
 1141|  5.19k|  pinIndices(start, length);
 1142|       |
 1143|       |  // find the first occurrence of c
 1144|  5.19k|  const char16_t *array = getArrayStart();
 1145|  5.19k|  const char16_t *match = u_memchr(array + start, c, length);
  ------------------
  |  |  330|  5.19k|#define u_memchr U_ICU_ENTRY_POINT_RENAME(u_memchr)
  |  |  ------------------
  |  |  |  |  123|  5.19k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.19k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.19k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1146|  5.19k|  if(match == nullptr) {
  ------------------
  |  Branch (1146:6): [True: 0, False: 5.19k]
  ------------------
 1147|      0|    return -1;
 1148|  5.19k|  } else {
 1149|  5.19k|    return static_cast<int32_t>(match - array);
 1150|  5.19k|  }
 1151|  5.19k|}
_ZNK6icu_7813UnicodeString13doLastIndexOfEDsii:
 1203|   110k|{
 1204|   110k|  if(isBogus()) {
  ------------------
  |  Branch (1204:6): [True: 0, False: 110k]
  ------------------
 1205|      0|    return -1;
 1206|      0|  }
 1207|       |
 1208|       |  // pin indices
 1209|   110k|  pinIndices(start, length);
 1210|       |
 1211|       |  // find the last occurrence of c
 1212|   110k|  const char16_t *array = getArrayStart();
 1213|   110k|  const char16_t *match = u_memrchr(array + start, c, length);
  ------------------
  |  |  336|   110k|#define u_memrchr U_ICU_ENTRY_POINT_RENAME(u_memrchr)
  |  |  ------------------
  |  |  |  |  123|   110k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   110k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   110k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1214|   110k|  if(match == nullptr) {
  ------------------
  |  Branch (1214:6): [True: 20.0k, False: 90.7k]
  ------------------
 1215|  20.0k|    return -1;
 1216|  90.7k|  } else {
 1217|  90.7k|    return static_cast<int32_t>(match - array);
 1218|  90.7k|  }
 1219|   110k|}
_ZN6icu_7813UnicodeString14findAndReplaceEiiRKS0_iiS2_ii:
 1251|  90.7k|{
 1252|  90.7k|  if(isBogus() || oldText.isBogus() || newText.isBogus()) {
  ------------------
  |  Branch (1252:6): [True: 0, False: 90.7k]
  |  Branch (1252:19): [True: 0, False: 90.7k]
  |  Branch (1252:40): [True: 0, False: 90.7k]
  ------------------
 1253|      0|    return *this;
 1254|      0|  }
 1255|       |
 1256|  90.7k|  pinIndices(start, length);
 1257|  90.7k|  oldText.pinIndices(oldStart, oldLength);
 1258|  90.7k|  newText.pinIndices(newStart, newLength);
 1259|       |
 1260|  90.7k|  if(oldLength == 0) {
  ------------------
  |  Branch (1260:6): [True: 0, False: 90.7k]
  ------------------
 1261|      0|    return *this;
 1262|      0|  }
 1263|       |
 1264|   102k|  while(length > 0 && length >= oldLength) {
  ------------------
  |  Branch (1264:9): [True: 102k, False: 0]
  |  Branch (1264:23): [True: 102k, False: 0]
  ------------------
 1265|   102k|    int32_t pos = indexOf(oldText, oldStart, oldLength, start, length);
 1266|   102k|    if(pos < 0) {
  ------------------
  |  Branch (1266:8): [True: 90.7k, False: 11.3k]
  ------------------
 1267|       |      // no more oldText's here: done
 1268|  90.7k|      break;
 1269|  90.7k|    } else {
 1270|       |      // we found oldText, replace it by newText and go beyond it
 1271|  11.3k|      replace(pos, oldLength, newText, newStart, newLength);
 1272|  11.3k|      length -= pos + oldLength - start;
 1273|  11.3k|      start = pos + newLength;
 1274|  11.3k|    }
 1275|   102k|  }
 1276|       |
 1277|  90.7k|  return *this;
 1278|  90.7k|}
_ZN6icu_7813UnicodeString10setToBogusEv:
 1283|   818k|{
 1284|   818k|  releaseArray();
 1285|       |
 1286|   818k|  fUnion.fFields.fLengthAndFlags = kIsBogus;
 1287|   818k|  fUnion.fFields.fArray = nullptr;
 1288|   818k|  fUnion.fFields.fCapacity = 0;
 1289|   818k|}
_ZN6icu_7813UnicodeString7unBogusEv:
 1293|   418k|UnicodeString::unBogus() {
 1294|   418k|  if(fUnion.fFields.fLengthAndFlags & kIsBogus) {
  ------------------
  |  Branch (1294:6): [True: 289, False: 418k]
  ------------------
 1295|    289|    setToEmpty();
 1296|    289|  }
 1297|   418k|}
_ZN6icu_7813UnicodeString19getTerminatedBufferEv:
 1300|   314k|UnicodeString::getTerminatedBuffer() {
 1301|   314k|  if(!isWritable()) {
  ------------------
  |  Branch (1301:6): [True: 0, False: 314k]
  ------------------
 1302|      0|    return nullptr;
 1303|      0|  }
 1304|   314k|  char16_t *array = getArrayStart();
 1305|   314k|  int32_t len = length();
 1306|   314k|  if(len < getCapacity()) {
  ------------------
  |  Branch (1306:6): [True: 312k, False: 1.72k]
  ------------------
 1307|   312k|    if(fUnion.fFields.fLengthAndFlags & kBufferIsReadonly) {
  ------------------
  |  Branch (1307:8): [True: 0, False: 312k]
  ------------------
 1308|       |      // If len<capacity on a read-only alias, then array[len] is
 1309|       |      // either the original NUL (if constructed with (true, s, length))
 1310|       |      // or one of the original string contents characters (if later truncated),
 1311|       |      // therefore we can assume that array[len] is initialized memory.
 1312|      0|      if(array[len] == 0) {
  ------------------
  |  Branch (1312:10): [True: 0, False: 0]
  ------------------
 1313|      0|        return array;
 1314|      0|      }
 1315|   312k|    } else if(((fUnion.fFields.fLengthAndFlags & kRefCounted) == 0 || refCount() == 1)) {
  ------------------
  |  Branch (1315:16): [True: 311k, False: 1.14k]
  |  Branch (1315:71): [True: 1.14k, False: 0]
  ------------------
 1316|       |      // kRefCounted: Do not write the NUL if the buffer is shared.
 1317|       |      // That is mostly safe, except when the length of one copy was modified
 1318|       |      // without copy-on-write, e.g., via truncate(newLength) or remove().
 1319|       |      // Then the NUL would be written into the middle of another copy's string.
 1320|       |
 1321|       |      // Otherwise, the buffer is fully writable and it is anyway safe to write the NUL.
 1322|       |      // Do not test if there is a NUL already because it might be uninitialized memory.
 1323|       |      // (That would be safe, but tools like valgrind & Purify would complain.)
 1324|   312k|      array[len] = 0;
 1325|   312k|      return array;
 1326|   312k|    }
 1327|   312k|  }
 1328|  1.72k|  if(len<INT32_MAX && cloneArrayIfNeeded(len+1)) {
  ------------------
  |  Branch (1328:6): [True: 1.72k, False: 0]
  |  Branch (1328:23): [True: 1.72k, False: 0]
  ------------------
 1329|  1.72k|    array = getArrayStart();
 1330|  1.72k|    array[len] = 0;
 1331|  1.72k|    return array;
 1332|  1.72k|  } else {
 1333|      0|    return nullptr;
 1334|      0|  }
 1335|  1.72k|}
_ZN6icu_7813UnicodeString5setToEaNS_14ConstChar16PtrEi:
 1342|  1.97M|{
 1343|  1.97M|  if(fUnion.fFields.fLengthAndFlags & kOpenGetBuffer) {
  ------------------
  |  Branch (1343:6): [True: 0, False: 1.97M]
  ------------------
 1344|       |    // do not modify a string that has an "open" getBuffer(minCapacity)
 1345|      0|    return *this;
 1346|      0|  }
 1347|       |
 1348|  1.97M|  const char16_t *text = textPtr;
 1349|  1.97M|  if(text == nullptr) {
  ------------------
  |  Branch (1349:6): [True: 0, False: 1.97M]
  ------------------
 1350|       |    // treat as an empty string, do not alias
 1351|      0|    releaseArray();
 1352|      0|    setToEmpty();
 1353|      0|    return *this;
 1354|      0|  }
 1355|       |
 1356|  1.97M|  if( textLength < -1 ||
  ------------------
  |  Branch (1356:7): [True: 0, False: 1.97M]
  ------------------
 1357|  1.97M|      (textLength == -1 && !isTerminated) ||
  ------------------
  |  Branch (1357:8): [True: 384k, False: 1.59M]
  |  Branch (1357:28): [True: 0, False: 384k]
  ------------------
 1358|  1.97M|      (textLength >= 0 && isTerminated && text[textLength] != 0)
  ------------------
  |  Branch (1358:8): [True: 1.59M, False: 384k]
  |  Branch (1358:27): [True: 1.59M, False: 0]
  |  Branch (1358:43): [True: 0, False: 1.59M]
  ------------------
 1359|  1.97M|  ) {
 1360|      0|    setToBogus();
 1361|      0|    return *this;
 1362|      0|  }
 1363|       |
 1364|  1.97M|  releaseArray();
 1365|       |
 1366|  1.97M|  if(textLength == -1) {
  ------------------
  |  Branch (1366:6): [True: 384k, False: 1.59M]
  ------------------
 1367|       |    // text is terminated, or else it would have failed the above test
 1368|   384k|    textLength = u_strlen(text);
  ------------------
  |  |  393|   384k|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|   384k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   384k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   384k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1369|   384k|  }
 1370|  1.97M|  fUnion.fFields.fLengthAndFlags = kReadonlyAlias;
 1371|  1.97M|  setArray(const_cast<char16_t*>(text), textLength, isTerminated ? textLength + 1 : textLength);
  ------------------
  |  Branch (1371:53): [True: 1.97M, False: 0]
  ------------------
 1372|  1.97M|  return *this;
 1373|  1.97M|}
_ZN6icu_7813UnicodeString9setCharAtEiDs:
 1439|   234k|{
 1440|   234k|  int32_t len = length();
 1441|   234k|  if(cloneArrayIfNeeded() && len > 0) {
  ------------------
  |  Branch (1441:6): [True: 234k, False: 0]
  |  Branch (1441:30): [True: 234k, False: 0]
  ------------------
 1442|   234k|    if(offset < 0) {
  ------------------
  |  Branch (1442:8): [True: 0, False: 234k]
  ------------------
 1443|      0|      offset = 0;
 1444|   234k|    } else if(offset >= len) {
  ------------------
  |  Branch (1444:15): [True: 0, False: 234k]
  ------------------
 1445|      0|      offset = len - 1;
 1446|      0|    }
 1447|       |
 1448|   234k|    getArrayStart()[offset] = c;
 1449|   234k|  }
 1450|   234k|  return *this;
 1451|   234k|}
_ZN6icu_7813UnicodeString9doReplaceEiiRKS0_ii:
 1484|   107k|{
 1485|       |  // pin the indices to legal values
 1486|   107k|  src.pinIndices(srcStart, srcLength);
 1487|       |
 1488|       |  // get the characters from src
 1489|       |  // and replace the range in ourselves with them
 1490|   107k|  return doReplace(start, length, src.getArrayStart(), srcStart, srcLength);
 1491|   107k|}
_ZN6icu_7813UnicodeString9doReplaceEiiPKDsii:
 1499|   451k|{
 1500|   451k|  if(!isWritable()) {
  ------------------
  |  Branch (1500:6): [True: 0, False: 451k]
  ------------------
 1501|      0|    return *this;
 1502|      0|  }
 1503|       |
 1504|   451k|  int32_t oldLength = this->length();
 1505|       |
 1506|       |  // optimize (read-only alias).remove(0, start) and .remove(start, end)
 1507|   451k|  if((fUnion.fFields.fLengthAndFlags&kBufferIsReadonly) && srcLength == 0) {
  ------------------
  |  Branch (1507:6): [True: 0, False: 451k]
  |  Branch (1507:60): [True: 0, False: 0]
  ------------------
 1508|      0|    if(start == 0) {
  ------------------
  |  Branch (1508:8): [True: 0, False: 0]
  ------------------
 1509|       |      // remove prefix by adjusting the array pointer
 1510|      0|      pinIndex(length);
 1511|      0|      fUnion.fFields.fArray += length;
 1512|      0|      fUnion.fFields.fCapacity -= length;
 1513|      0|      setLength(oldLength - length);
 1514|      0|      return *this;
 1515|      0|    } else {
 1516|      0|      pinIndex(start);
 1517|      0|      if(length >= (oldLength - start)) {
  ------------------
  |  Branch (1517:10): [True: 0, False: 0]
  ------------------
 1518|       |        // remove suffix by reducing the length (like truncate())
 1519|      0|        setLength(start);
 1520|      0|        fUnion.fFields.fCapacity = start;  // not NUL-terminated any more
 1521|      0|        return *this;
 1522|      0|      }
 1523|      0|    }
 1524|      0|  }
 1525|       |
 1526|   451k|  if(start == oldLength) {
  ------------------
  |  Branch (1526:6): [True: 393k, False: 57.8k]
  ------------------
 1527|   393k|    return doAppend(srcChars, srcStart, srcLength);
 1528|   393k|  }
 1529|       |
 1530|  57.8k|  if (srcChars == nullptr) {
  ------------------
  |  Branch (1530:7): [True: 21.2k, False: 36.6k]
  ------------------
 1531|  21.2k|    srcLength = 0;
 1532|  36.6k|  } else {
 1533|       |    // Perform all remaining operations relative to srcChars + srcStart.
 1534|       |    // From this point forward, do not use srcStart.
 1535|  36.6k|    srcChars += srcStart;
 1536|  36.6k|    if (srcLength < 0) {
  ------------------
  |  Branch (1536:9): [True: 20.5k, False: 16.0k]
  ------------------
 1537|       |      // get the srcLength if necessary
 1538|  20.5k|      srcLength = u_strlen(srcChars);
  ------------------
  |  |  393|  20.5k|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|  20.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  20.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  20.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1539|  20.5k|    }
 1540|  36.6k|  }
 1541|       |
 1542|       |  // pin the indices to legal values
 1543|  57.8k|  pinIndices(start, length);
 1544|       |
 1545|       |  // Calculate the size of the string after the replace.
 1546|       |  // Avoid int32_t overflow.
 1547|  57.8k|  int32_t newLength = oldLength - length;
 1548|  57.8k|  if(srcLength > (INT32_MAX - newLength)) {
  ------------------
  |  Branch (1548:6): [True: 0, False: 57.8k]
  ------------------
 1549|      0|    setToBogus();
 1550|      0|    return *this;
 1551|      0|  }
 1552|  57.8k|  newLength += srcLength;
 1553|       |
 1554|       |  // Check for insertion into ourself
 1555|  57.8k|  const char16_t *oldArray = getArrayStart();
 1556|  57.8k|  if (isBufferWritable() &&
  ------------------
  |  Branch (1556:7): [True: 53.8k, False: 4.05k]
  ------------------
 1557|  57.8k|      oldArray < srcChars + srcLength &&
  ------------------
  |  Branch (1557:7): [True: 0, False: 53.8k]
  ------------------
 1558|  57.8k|      srcChars < oldArray + oldLength) {
  ------------------
  |  Branch (1558:7): [True: 0, False: 0]
  ------------------
 1559|       |    // Copy into a new UnicodeString and start over
 1560|      0|    UnicodeString copy(srcChars, srcLength);
 1561|      0|    if (copy.isBogus()) {
  ------------------
  |  Branch (1561:9): [True: 0, False: 0]
  ------------------
 1562|      0|      setToBogus();
 1563|      0|      return *this;
 1564|      0|    }
 1565|      0|    return doReplace(start, length, copy.getArrayStart(), 0, srcLength);
 1566|      0|  }
 1567|       |
 1568|       |  // cloneArrayIfNeeded(doCopyArray=false) may change fArray but will not copy the current contents;
 1569|       |  // therefore we need to keep the current fArray
 1570|  57.8k|  char16_t oldStackBuffer[US_STACKBUF_SIZE];
 1571|  57.8k|  if((fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) && (newLength > US_STACKBUF_SIZE)) {
  ------------------
  |  Branch (1571:6): [True: 51.9k, False: 5.97k]
  |  Branch (1571:60): [True: 376, False: 51.5k]
  ------------------
 1572|       |    // copy the stack buffer contents because it will be overwritten with
 1573|       |    // fUnion.fFields values
 1574|    376|    u_memcpy(oldStackBuffer, oldArray, oldLength);
  ------------------
  |  |  334|    376|#define u_memcpy U_ICU_ENTRY_POINT_RENAME(u_memcpy)
  |  |  ------------------
  |  |  |  |  123|    376|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    376|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    376|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1575|    376|    oldArray = oldStackBuffer;
 1576|    376|  }
 1577|       |
 1578|       |  // clone our array and allocate a bigger array if needed
 1579|  57.8k|  int32_t *bufferToDelete = nullptr;
 1580|  57.8k|  if(!cloneArrayIfNeeded(newLength, getGrowCapacity(newLength),
  ------------------
  |  Branch (1580:6): [True: 0, False: 57.8k]
  ------------------
 1581|  57.8k|                         false, &bufferToDelete)
 1582|  57.8k|  ) {
 1583|      0|    return *this;
 1584|      0|  }
 1585|       |
 1586|       |  // now do the replace
 1587|       |
 1588|  57.8k|  char16_t *newArray = getArrayStart();
 1589|  57.8k|  if(newArray != oldArray) {
  ------------------
  |  Branch (1589:6): [True: 4.42k, False: 53.4k]
  ------------------
 1590|       |    // if fArray changed, then we need to copy everything except what will change
 1591|  4.42k|    us_arrayCopy(oldArray, 0, newArray, 0, start);
 1592|  4.42k|    us_arrayCopy(oldArray, start + length,
 1593|  4.42k|                 newArray, start + srcLength,
 1594|  4.42k|                 oldLength - (start + length));
 1595|  53.4k|  } else if(length != srcLength) {
  ------------------
  |  Branch (1595:13): [True: 18.3k, False: 35.1k]
  ------------------
 1596|       |    // fArray did not change; copy only the portion that isn't changing, leaving a hole
 1597|  18.3k|    us_arrayCopy(oldArray, start + length,
 1598|  18.3k|                 newArray, start + srcLength,
 1599|  18.3k|                 oldLength - (start + length));
 1600|  18.3k|  }
 1601|       |
 1602|       |  // now fill in the hole with the new string
 1603|  57.8k|  us_arrayCopy(srcChars, 0, newArray, start, srcLength);
 1604|       |
 1605|  57.8k|  setLength(newLength);
 1606|       |
 1607|       |  // delayed delete in case srcChars == fArray when we started, and
 1608|       |  // to keep oldArray alive for the above operations
 1609|  57.8k|  if (bufferToDelete) {
  ------------------
  |  Branch (1609:7): [True: 0, False: 57.8k]
  ------------------
 1610|      0|    uprv_free(bufferToDelete);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1611|      0|  }
 1612|       |
 1613|  57.8k|  return *this;
 1614|  57.8k|}
_ZN6icu_7813UnicodeString8doAppendERKS0_ii:
 1632|  21.2k|UnicodeString::doAppend(const UnicodeString& src, int32_t srcStart, int32_t srcLength) {
 1633|  21.2k|  if(srcLength == 0) {
  ------------------
  |  Branch (1633:6): [True: 0, False: 21.2k]
  ------------------
 1634|      0|    return *this;
 1635|      0|  }
 1636|       |
 1637|       |  // pin the indices to legal values
 1638|  21.2k|  src.pinIndices(srcStart, srcLength);
 1639|  21.2k|  return doAppend(src.getArrayStart(), srcStart, srcLength);
 1640|  21.2k|}
_ZN6icu_7813UnicodeString8doAppendEPKDsii:
 1643|   441k|UnicodeString::doAppend(const char16_t *srcChars, int32_t srcStart, int32_t srcLength) {
 1644|   441k|  if(!isWritable() || srcLength == 0 || srcChars == nullptr) {
  ------------------
  |  Branch (1644:6): [True: 0, False: 441k]
  |  Branch (1644:23): [True: 0, False: 441k]
  |  Branch (1644:41): [True: 0, False: 441k]
  ------------------
 1645|      0|    return *this;
 1646|      0|  }
 1647|       |
 1648|       |  // Perform all remaining operations relative to srcChars + srcStart.
 1649|       |  // From this point forward, do not use srcStart.
 1650|   441k|  srcChars += srcStart;
 1651|       |
 1652|   441k|  if(srcLength < 0) {
  ------------------
  |  Branch (1652:6): [True: 302k, False: 139k]
  ------------------
 1653|       |    // get the srcLength if necessary
 1654|   302k|    if((srcLength = u_strlen(srcChars)) == 0) {
  ------------------
  |  |  393|   302k|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|   302k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   302k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   302k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1654:8): [True: 0, False: 302k]
  ------------------
 1655|      0|      return *this;
 1656|      0|    }
 1657|   302k|  }
 1658|       |
 1659|   441k|  int32_t oldLength = length();
 1660|   441k|  int32_t newLength;
 1661|       |
 1662|   441k|  if (srcLength <= getCapacity() - oldLength && isBufferWritable()) {
  ------------------
  |  Branch (1662:7): [True: 432k, False: 8.80k]
  |  Branch (1662:49): [True: 432k, False: 0]
  ------------------
 1663|   432k|    newLength = oldLength + srcLength;
 1664|       |    // Faster than a memmove
 1665|   432k|    if (srcLength <= 4) {
  ------------------
  |  Branch (1665:9): [True: 63.5k, False: 369k]
  ------------------
 1666|  63.5k|      char16_t *arr = getArrayStart();
 1667|  63.5k|      arr[oldLength] = srcChars[0];
 1668|  63.5k|      if (srcLength > 1) arr[oldLength+1] = srcChars[1];
  ------------------
  |  Branch (1668:11): [True: 42.0k, False: 21.5k]
  ------------------
 1669|  63.5k|      if (srcLength > 2) arr[oldLength+2] = srcChars[2];
  ------------------
  |  Branch (1669:11): [True: 42.0k, False: 21.5k]
  ------------------
 1670|  63.5k|      if (srcLength > 3) arr[oldLength+3] = srcChars[3];
  ------------------
  |  Branch (1670:11): [True: 22.6k, False: 40.9k]
  ------------------
 1671|  63.5k|      setLength(newLength);
 1672|  63.5k|      return *this;
 1673|  63.5k|    }
 1674|   432k|  } else {
 1675|  8.80k|    if (uprv_add32_overflow(oldLength, srcLength, &newLength)) {
  ------------------
  |  | 1394|  8.80k|#define uprv_add32_overflow U_ICU_ENTRY_POINT_RENAME(uprv_add32_overflow)
  |  |  ------------------
  |  |  |  |  123|  8.80k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  8.80k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  8.80k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1675:9): [True: 0, False: 8.80k]
  ------------------
 1676|      0|      setToBogus();
 1677|      0|      return *this;
 1678|      0|    }
 1679|       |
 1680|       |    // Check for append onto ourself
 1681|  8.80k|    const char16_t* oldArray = getArrayStart();
 1682|  8.80k|    if (isBufferWritable() &&
  ------------------
  |  Branch (1682:9): [True: 8.80k, False: 0]
  ------------------
 1683|  8.80k|        oldArray < srcChars + srcLength &&
  ------------------
  |  Branch (1683:9): [True: 0, False: 8.80k]
  ------------------
 1684|  8.80k|        srcChars < oldArray + oldLength) {
  ------------------
  |  Branch (1684:9): [True: 0, False: 0]
  ------------------
 1685|       |      // Copy into a new UnicodeString and start over
 1686|      0|      UnicodeString copy(srcChars, srcLength);
 1687|      0|      if (copy.isBogus()) {
  ------------------
  |  Branch (1687:11): [True: 0, False: 0]
  ------------------
 1688|      0|        setToBogus();
 1689|      0|        return *this;
 1690|      0|      }
 1691|      0|      return doAppend(copy.getArrayStart(), 0, srcLength);
 1692|      0|    }
 1693|       |
 1694|       |    // optimize append() onto a large-enough, owned string
 1695|  8.80k|    if (!cloneArrayIfNeeded(newLength, getGrowCapacity(newLength))) {
  ------------------
  |  Branch (1695:9): [True: 0, False: 8.80k]
  ------------------
 1696|      0|      return *this;
 1697|      0|    }
 1698|  8.80k|  }
 1699|       |
 1700|   378k|  char16_t *newArray = getArrayStart();
 1701|       |  // Do not copy characters when
 1702|       |  //   char16_t *buffer=str.getAppendBuffer(...);
 1703|       |  // is followed by
 1704|       |  //   str.append(buffer, length);
 1705|       |  // or
 1706|       |  //   str.appendString(buffer, length)
 1707|       |  // or similar.
 1708|   378k|  if(srcChars != newArray + oldLength) {
  ------------------
  |  Branch (1708:6): [True: 378k, False: 0]
  ------------------
 1709|   378k|    us_arrayCopy(srcChars, 0, newArray, oldLength, srcLength);
 1710|   378k|  }
 1711|   378k|  setLength(newLength);
 1712|       |
 1713|   378k|  return *this;
 1714|   441k|}
_ZN6icu_7813UnicodeString8doAppendENSt3__117basic_string_viewIDsNS1_11char_traitsIDsEEEE:
 1717|    477|UnicodeString::doAppend(std::u16string_view src) {
 1718|    477|  if (!isWritable() || src.empty()) {
  ------------------
  |  Branch (1718:7): [True: 0, False: 477]
  |  Branch (1718:24): [True: 0, False: 477]
  ------------------
 1719|      0|    return *this;
 1720|      0|  }
 1721|    477|  if (src.length() > INT32_MAX) {
  ------------------
  |  Branch (1721:7): [True: 0, False: 477]
  ------------------
 1722|      0|    setToBogus();
 1723|      0|    return *this;
 1724|      0|  }
 1725|    477|  return doAppend(src.data(), 0, static_cast<int32_t>(src.length()));
 1726|    477|}
_ZNK6icu_7813UnicodeString10doHashCodeEv:
 1864|   173k|{
 1865|       |    /* Delegate hash computation to uhash.  This makes UnicodeString
 1866|       |     * hashing consistent with char16_t* hashing.  */
 1867|   173k|    int32_t hashCode = ustr_hashUCharsN(getArrayStart(), length());
  ------------------
  |  | 1880|   173k|#define ustr_hashUCharsN U_ICU_ENTRY_POINT_RENAME(ustr_hashUCharsN)
  |  |  ------------------
  |  |  |  |  123|   173k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   173k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   173k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1868|   173k|    if (hashCode == kInvalidHashCode) {
  ------------------
  |  Branch (1868:9): [True: 0, False: 173k]
  ------------------
 1869|      0|        hashCode = kEmptyHashCode;
 1870|      0|    }
 1871|   173k|    return hashCode;
 1872|   173k|}
_ZN6icu_7813UnicodeString18cloneArrayIfNeededEiiaPPia:
 1917|   548k|                                  UBool forceClone) {
 1918|       |  // default parameters need to be static, therefore
 1919|       |  // the defaults are -1 to have convenience defaults
 1920|   548k|  if(newCapacity == -1) {
  ------------------
  |  Branch (1920:6): [True: 234k, False: 314k]
  ------------------
 1921|   234k|    newCapacity = getCapacity();
 1922|   234k|  }
 1923|       |
 1924|       |  // while a getBuffer(minCapacity) is "open",
 1925|       |  // prevent any modifications of the string by returning false here
 1926|       |  // if the string is bogus, then only an assignment or similar can revive it
 1927|   548k|  if(!isWritable()) {
  ------------------
  |  Branch (1927:6): [True: 0, False: 548k]
  ------------------
 1928|      0|    return false;
 1929|      0|  }
 1930|       |
 1931|       |  /*
 1932|       |   * We need to make a copy of the array if
 1933|       |   * the buffer is read-only, or
 1934|       |   * the buffer is refCounted (shared), and refCount>1, or
 1935|       |   * the buffer is too small.
 1936|       |   * Return false if memory could not be allocated.
 1937|       |   */
 1938|   548k|  if(forceClone ||
  ------------------
  |  Branch (1938:6): [True: 0, False: 548k]
  ------------------
 1939|   548k|     fUnion.fFields.fLengthAndFlags & kBufferIsReadonly ||
  ------------------
  |  Branch (1939:6): [True: 0, False: 548k]
  ------------------
 1940|   548k|     (fUnion.fFields.fLengthAndFlags & kRefCounted && refCount() > 1) ||
  ------------------
  |  Branch (1940:7): [True: 9.98k, False: 538k]
  |  Branch (1940:55): [True: 4.05k, False: 5.93k]
  ------------------
 1941|   548k|     newCapacity > getCapacity()
  ------------------
  |  Branch (1941:6): [True: 15.8k, False: 529k]
  ------------------
 1942|   548k|  ) {
 1943|       |    // check growCapacity for default value and use of the stack buffer
 1944|  19.8k|    if(growCapacity < 0) {
  ------------------
  |  Branch (1944:8): [True: 1.72k, False: 18.1k]
  ------------------
 1945|  1.72k|      growCapacity = newCapacity;
 1946|  18.1k|    } else if(newCapacity <= US_STACKBUF_SIZE && growCapacity > US_STACKBUF_SIZE) {
  ------------------
  |  Branch (1946:15): [True: 3.75k, False: 14.4k]
  |  Branch (1946:50): [True: 3.75k, False: 0]
  ------------------
 1947|  3.75k|      growCapacity = US_STACKBUF_SIZE;
 1948|  14.4k|    } else if(newCapacity > growCapacity) {
  ------------------
  |  Branch (1948:15): [True: 0, False: 14.4k]
  ------------------
 1949|      0|      setToBogus();
 1950|      0|      return false;  // bad inputs
 1951|      0|    }
 1952|  19.8k|    if(growCapacity > kMaxCapacity) {
  ------------------
  |  Branch (1952:8): [True: 0, False: 19.8k]
  ------------------
 1953|      0|      setToBogus();
 1954|      0|      return false;
 1955|      0|    }
 1956|       |
 1957|       |    // save old values
 1958|  19.8k|    char16_t oldStackBuffer[US_STACKBUF_SIZE];
 1959|  19.8k|    char16_t *oldArray;
 1960|  19.8k|    int32_t oldLength = length();
 1961|  19.8k|    int16_t flags = fUnion.fFields.fLengthAndFlags;
 1962|       |
 1963|  19.8k|    if(flags&kUsingStackBuffer) {
  ------------------
  |  Branch (1963:8): [True: 15.8k, False: 4.05k]
  ------------------
 1964|  15.8k|      U_ASSERT(!(flags&kRefCounted)); /* kRefCounted and kUsingStackBuffer are mutally exclusive */
  ------------------
  |  |   35|  15.8k|#   define U_ASSERT(exp) (void)0
  ------------------
 1965|  15.8k|      if(doCopyArray && growCapacity > US_STACKBUF_SIZE) {
  ------------------
  |  Branch (1965:10): [True: 10.5k, False: 5.30k]
  |  Branch (1965:25): [True: 10.5k, False: 0]
  ------------------
 1966|       |        // copy the stack buffer contents because it will be overwritten with
 1967|       |        // fUnion.fFields values
 1968|  10.5k|        us_arrayCopy(fUnion.fStackFields.fBuffer, 0, oldStackBuffer, 0, oldLength);
 1969|  10.5k|        oldArray = oldStackBuffer;
 1970|  10.5k|      } else {
 1971|  5.30k|        oldArray = nullptr; // no need to copy from the stack buffer to itself
 1972|  5.30k|      }
 1973|  15.8k|    } else {
 1974|  4.05k|      oldArray = fUnion.fFields.fArray;
 1975|  4.05k|      U_ASSERT(oldArray!=nullptr); /* when stack buffer is not used, oldArray must have a non-nullptr reference */
  ------------------
  |  |   35|  4.05k|#   define U_ASSERT(exp) (void)0
  ------------------
 1976|  4.05k|    }
 1977|       |
 1978|       |    // allocate a new array
 1979|  19.8k|    if(allocate(growCapacity) ||
  ------------------
  |  Branch (1979:8): [True: 19.8k, False: 0]
  ------------------
 1980|  19.8k|       (newCapacity < growCapacity && allocate(newCapacity))
  ------------------
  |  Branch (1980:9): [True: 0, False: 0]
  |  Branch (1980:39): [True: 0, False: 0]
  ------------------
 1981|  19.8k|    ) {
 1982|  19.8k|      if(doCopyArray) {
  ------------------
  |  Branch (1982:10): [True: 10.5k, False: 9.35k]
  ------------------
 1983|       |        // copy the contents
 1984|       |        // do not copy more than what fits - it may be smaller than before
 1985|  10.5k|        int32_t minLength = oldLength;
 1986|  10.5k|        newCapacity = getCapacity();
 1987|  10.5k|        if(newCapacity < minLength) {
  ------------------
  |  Branch (1987:12): [True: 0, False: 10.5k]
  ------------------
 1988|      0|          minLength = newCapacity;
 1989|      0|        }
 1990|  10.5k|        if(oldArray != nullptr) {
  ------------------
  |  Branch (1990:12): [True: 10.5k, False: 0]
  ------------------
 1991|  10.5k|          us_arrayCopy(oldArray, 0, getArrayStart(), 0, minLength);
 1992|  10.5k|        }
 1993|  10.5k|        setLength(minLength);
 1994|  10.5k|      } else {
 1995|  9.35k|        setZeroLength();
 1996|  9.35k|      }
 1997|       |
 1998|       |      // release the old array
 1999|  19.8k|      if(flags & kRefCounted) {
  ------------------
  |  Branch (1999:10): [True: 4.05k, False: 15.8k]
  ------------------
 2000|       |        // the array is refCounted; decrement and release if 0
 2001|  4.05k|        u_atomic_int32_t* pRefCount = reinterpret_cast<u_atomic_int32_t*>(oldArray) - 1;
 2002|  4.05k|        if(umtx_atomic_dec(pRefCount) == 0) {
  ------------------
  |  Branch (2002:12): [True: 0, False: 4.05k]
  ------------------
 2003|      0|          if (pBufferToDelete == nullptr) {
  ------------------
  |  Branch (2003:15): [True: 0, False: 0]
  ------------------
 2004|       |              // Note: cast to (void *) is needed with MSVC, where u_atomic_int32_t
 2005|       |              // is defined as volatile. (Volatile has useful non-standard behavior
 2006|       |              //   with this compiler.)
 2007|      0|            uprv_free((void *)pRefCount);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2008|      0|          } else {
 2009|       |            // the caller requested to delete it himself
 2010|      0|            *pBufferToDelete = reinterpret_cast<int32_t*>(pRefCount);
 2011|      0|          }
 2012|      0|        }
 2013|  4.05k|      }
 2014|  19.8k|    } else {
 2015|       |      // not enough memory for growCapacity and not even for the smaller newCapacity
 2016|       |      // reset the old values for setToBogus() to release the array
 2017|      0|      if(!(flags&kUsingStackBuffer)) {
  ------------------
  |  Branch (2017:10): [True: 0, False: 0]
  ------------------
 2018|      0|        fUnion.fFields.fArray = oldArray;
 2019|      0|      }
 2020|      0|      fUnion.fFields.fLengthAndFlags = flags;
 2021|      0|      setToBogus();
 2022|      0|      return false;
 2023|      0|    }
 2024|  19.8k|  }
 2025|   548k|  return true;
 2026|   548k|}
uhash_hashUnicodeString_78:
 2081|   173k|uhash_hashUnicodeString(const UElement key) {
 2082|   173k|    const UnicodeString *str = (const UnicodeString*) key.pointer;
 2083|   173k|    return (str == nullptr) ? 0 : str->hashCode();
  ------------------
  |  Branch (2083:12): [True: 0, False: 173k]
  ------------------
 2084|   173k|}
uhash_compareUnicodeString_78:
 2089|  99.1k|uhash_compareUnicodeString(const UElement key1, const UElement key2) {
 2090|  99.1k|    const UnicodeString *str1 = (const UnicodeString*) key1.pointer;
 2091|  99.1k|    const UnicodeString *str2 = (const UnicodeString*) key2.pointer;
 2092|  99.1k|    if (str1 == str2) {
  ------------------
  |  Branch (2092:9): [True: 0, False: 99.1k]
  ------------------
 2093|      0|        return true;
 2094|      0|    }
 2095|  99.1k|    if (str1 == nullptr || str2 == nullptr) {
  ------------------
  |  Branch (2095:9): [True: 0, False: 99.1k]
  |  Branch (2095:28): [True: 0, False: 99.1k]
  ------------------
 2096|      0|        return false;
 2097|      0|    }
 2098|  99.1k|    return *str1 == *str2;
 2099|  99.1k|}
unistr.cpp:_ZL12us_arrayCopyPKDsiPDsii:
   87|   484k|{
   88|   484k|  if(count>0) {
  ------------------
  |  Branch (88:6): [True: 428k, False: 55.4k]
  ------------------
   89|   428k|    uprv_memmove(dst+dstStart, src+srcStart, (size_t)count*sizeof(*src));
  ------------------
  |  |   51|   428k|#define uprv_memmove(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|   428k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   52|   428k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   53|   428k|    _Pragma("clang diagnostic push") \
  |  |   54|   428k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   55|   428k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|   428k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   56|   428k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|   428k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   57|   428k|    _Pragma("clang diagnostic pop") \
  |  |   58|   428k|    U_STANDARD_CPP_NAMESPACE memmove(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|   428k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   59|   428k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|   428k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   90|   428k|  }
   91|   484k|}
unistr.cpp:_ZN6icu_7812_GLOBAL__N_115getGrowCapacityEi:
  397|  66.6k|int32_t getGrowCapacity(int32_t newLength) {
  398|  66.6k|  int32_t growSize = (newLength >> 2) + kGrowSize;
  399|  66.6k|  if(growSize <= (kMaxCapacity - newLength)) {
  ------------------
  |  Branch (399:6): [True: 66.6k, False: 0]
  ------------------
  400|  66.6k|    return newLength + growSize;
  401|  66.6k|  } else {
  402|      0|    return kMaxCapacity;
  403|      0|  }
  404|  66.6k|}

_ZN6icu_787UMemorynwEm:
   61|   489k|void * U_EXPORT2 UMemory::operator new(size_t size) noexcept {
   62|   489k|    return uprv_malloc(size);
  ------------------
  |  | 1524|   489k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|   489k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   489k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   489k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   63|   489k|}
_ZN6icu_787UMemorydlEPv:
   65|   271k|void U_EXPORT2 UMemory::operator delete(void *p) noexcept {
   66|   271k|    if(p!=nullptr) {
  ------------------
  |  Branch (66:8): [True: 271k, False: 0]
  ------------------
   67|   271k|        uprv_free(p);
  ------------------
  |  | 1503|   271k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|   271k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   271k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   271k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   68|   271k|    }
   69|   271k|}
_ZN6icu_787UMemorynaEm:
   71|   284k|void * U_EXPORT2 UMemory::operator new[](size_t size) noexcept {
   72|   284k|    return uprv_malloc(size);
  ------------------
  |  | 1524|   284k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|   284k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   284k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   284k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   73|   284k|}
_ZN6icu_787UMemorydaEPv:
   75|   284k|void U_EXPORT2 UMemory::operator delete[](void *p) noexcept {
   76|   284k|    if(p!=nullptr) {
  ------------------
  |  Branch (76:8): [True: 284k, False: 0]
  ------------------
   77|   284k|        uprv_free(p);
  ------------------
  |  | 1503|   284k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|   284k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   284k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   284k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   78|   284k|    }
   79|   284k|}
_ZN6icu_787UObjectD2Ev:
   94|  3.66M|UObject::~UObject() {}
uprv_deleteUObject_78:
  103|  42.1k|uprv_deleteUObject(void *obj) {
  104|  42.1k|    delete static_cast<UObject *>(obj);
  105|  42.1k|}

ures_initStackObject_78:
  726|   145k|U_CFUNC void ures_initStackObject(UResourceBundle* resB) {
  727|   145k|  uprv_memset(resB, 0, sizeof(UResourceBundle));
  ------------------
  |  |  100|   145k|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|   145k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  728|   145k|  ures_setIsStackObject(resB, true);
  729|   145k|}
_ZN6icu_7820StackUResourceBundleC2Ev:
  733|   144k|StackUResourceBundle::StackUResourceBundle() {
  734|   144k|    ures_initStackObject(&bundle);
  ------------------
  |  | 1690|   144k|#define ures_initStackObject U_ICU_ENTRY_POINT_RENAME(ures_initStackObject)
  |  |  ------------------
  |  |  |  |  123|   144k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   144k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   144k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  735|   144k|}
_ZN6icu_7820StackUResourceBundleD2Ev:
  737|   144k|StackUResourceBundle::~StackUResourceBundle() {
  738|   144k|    ures_close(&bundle);
  ------------------
  |  | 1652|   144k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|   144k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   144k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   144k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  739|   144k|}
ures_close_78:
 1147|  1.10M|{
 1148|  1.10M|    ures_closeBundle(resB, true);
 1149|  1.10M|}
ures_getString_78:
 1524|    420|U_CAPI const char16_t* U_EXPORT2 ures_getString(const UResourceBundle* resB, int32_t* len, UErrorCode* status) {
 1525|    420|    const char16_t *s;
 1526|    420|    if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (1526:9): [True: 0, False: 420]
  |  Branch (1526:28): [True: 0, False: 420]
  ------------------
 1527|      0|        return nullptr;
 1528|      0|    }
 1529|    420|    if(resB == nullptr) {
  ------------------
  |  Branch (1529:8): [True: 0, False: 420]
  ------------------
 1530|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
 1531|      0|        return nullptr;
 1532|      0|    }
 1533|    420|    s = res_getString({resB}, &resB->getResData(), resB->fRes, len);
 1534|    420|    if (s == nullptr) {
  ------------------
  |  Branch (1534:9): [True: 0, False: 420]
  ------------------
 1535|      0|        *status = U_RESOURCE_TYPE_MISMATCH;
 1536|      0|    }
 1537|    420|    return s;
 1538|    420|}
ures_getIntVector_78:
 1630|    524|                                                   UErrorCode*               status) {
 1631|    524|  const int32_t *p;
 1632|    524|  if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (1632:7): [True: 0, False: 524]
  |  Branch (1632:26): [True: 3, False: 521]
  ------------------
 1633|      3|    return nullptr;
 1634|      3|  }
 1635|    521|  if(resB == nullptr) {
  ------------------
  |  Branch (1635:6): [True: 0, False: 521]
  ------------------
 1636|      0|    *status = U_ILLEGAL_ARGUMENT_ERROR;
 1637|      0|    return nullptr;
 1638|      0|  }
 1639|    521|  p = res_getIntVector({resB}, &resB->getResData(), resB->fRes, len);
 1640|    521|  if (p == nullptr) {
  ------------------
  |  Branch (1640:7): [True: 0, False: 521]
  ------------------
 1641|      0|    *status = U_RESOURCE_TYPE_MISMATCH;
 1642|      0|  }
 1643|    521|  return p;
 1644|    521|}
ures_getInt_78:
 1648|    867|U_CAPI int32_t U_EXPORT2 ures_getInt(const UResourceBundle* resB, UErrorCode *status) {
 1649|    867|  if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (1649:7): [True: 0, False: 867]
  |  Branch (1649:26): [True: 2, False: 865]
  ------------------
 1650|      2|    return 0xffffffff;
 1651|      2|  }
 1652|    865|  if(resB == nullptr) {
  ------------------
  |  Branch (1652:6): [True: 0, False: 865]
  ------------------
 1653|      0|    *status = U_ILLEGAL_ARGUMENT_ERROR;
 1654|      0|    return 0xffffffff;
 1655|      0|  }
 1656|    865|  if(RES_GET_TYPE(resB->fRes) != URES_INT) {
  ------------------
  |  |   68|    865|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  |  Branch (1656:6): [True: 0, False: 865]
  ------------------
 1657|      0|    *status = U_RESOURCE_TYPE_MISMATCH;
 1658|      0|    return 0xffffffff;
 1659|      0|  }
 1660|    865|  return res_getInt({resB}, resB->fRes);
 1661|    865|}
ures_getType_78:
 1678|     39|U_CAPI UResType U_EXPORT2 ures_getType(const UResourceBundle *resB) {
 1679|     39|  if(resB == nullptr) {
  ------------------
  |  Branch (1679:6): [True: 0, False: 39]
  ------------------
 1680|      0|    return URES_NONE;
 1681|      0|  }
 1682|     39|  return res_getPublicType(resB->fRes);
  ------------------
  |  |  203|     39|#define res_getPublicType U_ICU_ENTRY_POINT_RENAME(res_getPublicType)
  |  |  ------------------
  |  |  |  |  123|     39|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     39|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     39|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1683|     39|}
ures_getKey_78:
 1685|  2.00k|U_CAPI const char * U_EXPORT2 ures_getKey(const UResourceBundle *resB) {
 1686|       |  //
 1687|       |  // TODO: Trace ures_getKey? I guess not usually.
 1688|       |  //
 1689|       |  // We usually get the key string to decide whether we want the value, or to
 1690|       |  // make a key-value pair. Tracing the value should suffice.
 1691|       |  //
 1692|       |  // However, I believe we have some data (e.g., in res_index) where the key
 1693|       |  // strings are the data. Tracing the enclosing table should suffice.
 1694|       |  //
 1695|  2.00k|  if(resB == nullptr) {
  ------------------
  |  Branch (1695:6): [True: 0, False: 2.00k]
  ------------------
 1696|      0|    return nullptr;
 1697|      0|  }
 1698|  2.00k|  return(resB->fKey);
 1699|  2.00k|}
ures_getSize_78:
 1701|   185k|U_CAPI int32_t U_EXPORT2 ures_getSize(const UResourceBundle *resB) {
 1702|   185k|  if(resB == nullptr) {
  ------------------
  |  Branch (1702:6): [True: 0, False: 185k]
  ------------------
 1703|      0|    return 0;
 1704|      0|  }
 1705|       |  
 1706|   185k|  return resB->fSize;
 1707|   185k|}
ures_hasNext_78:
 1728|  2.98k|U_CAPI UBool U_EXPORT2 ures_hasNext(const UResourceBundle *resB) {
 1729|  2.98k|  if(resB == nullptr) {
  ------------------
  |  Branch (1729:6): [True: 0, False: 2.98k]
  ------------------
 1730|      0|    return false;
 1731|      0|  }
 1732|  2.98k|  return resB->fIndex < resB->fSize-1;
 1733|  2.98k|}
ures_getNextResource_78:
 1784|  3.02k|U_CAPI UResourceBundle* U_EXPORT2 ures_getNextResource(UResourceBundle *resB, UResourceBundle *fillIn, UErrorCode *status) {
 1785|  3.02k|    const char *key = nullptr;
 1786|  3.02k|    Resource r = RES_BOGUS;
  ------------------
  |  |   65|  3.02k|#define RES_BOGUS 0xffffffff
  ------------------
 1787|       |
 1788|  3.02k|    if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (1788:9): [True: 0, False: 3.02k]
  |  Branch (1788:28): [True: 0, False: 3.02k]
  ------------------
 1789|       |            /*return nullptr;*/
 1790|      0|            return fillIn;
 1791|      0|    }
 1792|  3.02k|    if(resB == nullptr) {
  ------------------
  |  Branch (1792:8): [True: 0, False: 3.02k]
  ------------------
 1793|      0|            *status = U_ILLEGAL_ARGUMENT_ERROR;
 1794|       |            /*return nullptr;*/
 1795|      0|            return fillIn;
 1796|      0|    }
 1797|       |
 1798|  3.02k|    if(resB->fIndex == resB->fSize-1) {
  ------------------
  |  Branch (1798:8): [True: 115, False: 2.91k]
  ------------------
 1799|    115|      *status = U_INDEX_OUTOFBOUNDS_ERROR;
 1800|       |      /*return nullptr;*/
 1801|  2.91k|    } else {
 1802|  2.91k|        resB->fIndex++;
 1803|  2.91k|        switch(RES_GET_TYPE(resB->fRes)) {
  ------------------
  |  |   68|  2.91k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 1804|      0|        case URES_INT:
  ------------------
  |  Branch (1804:9): [True: 0, False: 2.91k]
  ------------------
 1805|      0|        case URES_BINARY:
  ------------------
  |  Branch (1805:9): [True: 0, False: 2.91k]
  ------------------
 1806|      0|        case URES_STRING:
  ------------------
  |  Branch (1806:9): [True: 0, False: 2.91k]
  ------------------
 1807|      0|        case URES_STRING_V2:
  ------------------
  |  Branch (1807:9): [True: 0, False: 2.91k]
  ------------------
 1808|      0|        case URES_INT_VECTOR:
  ------------------
  |  Branch (1808:9): [True: 0, False: 2.91k]
  ------------------
 1809|      0|            return ures_copyResb(fillIn, resB, status);
  ------------------
  |  | 1653|      0|#define ures_copyResb U_ICU_ENTRY_POINT_RENAME(ures_copyResb)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1810|  2.00k|        case URES_TABLE:
  ------------------
  |  Branch (1810:9): [True: 2.00k, False: 912]
  ------------------
 1811|  2.00k|        case URES_TABLE16:
  ------------------
  |  Branch (1811:9): [True: 0, False: 2.91k]
  ------------------
 1812|  2.00k|        case URES_TABLE32:
  ------------------
  |  Branch (1812:9): [True: 0, False: 2.91k]
  ------------------
 1813|  2.00k|            r = res_getTableItemByIndex(&resB->getResData(), resB->fRes, resB->fIndex, &key);
  ------------------
  |  |  206|  2.00k|#define res_getTableItemByIndex U_ICU_ENTRY_POINT_RENAME(res_getTableItemByIndex)
  |  |  ------------------
  |  |  |  |  123|  2.00k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.00k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.00k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1814|  2.00k|            if(r == RES_BOGUS && resB->fHasFallback) {
  ------------------
  |  |   65|  4.00k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1814:16): [True: 0, False: 2.00k]
  |  Branch (1814:34): [True: 0, False: 0]
  ------------------
 1815|       |                /* TODO: do the fallback */
 1816|      0|            }
 1817|  2.00k|            return init_resb_result(resB->fData, r, key, resB->fIndex, resB, fillIn, status);
 1818|    912|        case URES_ARRAY:
  ------------------
  |  Branch (1818:9): [True: 912, False: 2.00k]
  ------------------
 1819|    912|        case URES_ARRAY16:
  ------------------
  |  Branch (1819:9): [True: 0, False: 2.91k]
  ------------------
 1820|    912|            r = res_getArrayItem(&resB->getResData(), resB->fRes, resB->fIndex);
  ------------------
  |  |  200|    912|#define res_getArrayItem U_ICU_ENTRY_POINT_RENAME(res_getArrayItem)
  |  |  ------------------
  |  |  |  |  123|    912|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    912|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    912|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1821|    912|            if(r == RES_BOGUS && resB->fHasFallback) {
  ------------------
  |  |   65|  1.82k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1821:16): [True: 0, False: 912]
  |  Branch (1821:34): [True: 0, False: 0]
  ------------------
 1822|       |                /* TODO: do the fallback */
 1823|      0|            }
 1824|    912|            return init_resb_result(resB->fData, r, key, resB->fIndex, resB, fillIn, status);
 1825|      0|        default:
  ------------------
  |  Branch (1825:9): [True: 0, False: 2.91k]
  ------------------
 1826|       |            /*return nullptr;*/
 1827|      0|            return fillIn;
 1828|  2.91k|        }
 1829|  2.91k|    }
 1830|       |    /*return nullptr;*/
 1831|    115|    return fillIn;
 1832|  3.02k|}
ures_getByIndex_78:
 1834|     39|U_CAPI UResourceBundle* U_EXPORT2 ures_getByIndex(const UResourceBundle *resB, int32_t indexR, UResourceBundle *fillIn, UErrorCode *status) {
 1835|     39|    const char* key = nullptr;
 1836|     39|    Resource r = RES_BOGUS;
  ------------------
  |  |   65|     39|#define RES_BOGUS 0xffffffff
  ------------------
 1837|       |
 1838|     39|    if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (1838:9): [True: 0, False: 39]
  |  Branch (1838:28): [True: 0, False: 39]
  ------------------
 1839|       |        /*return nullptr;*/
 1840|      0|        return fillIn;
 1841|      0|    }
 1842|     39|    if(resB == nullptr) {
  ------------------
  |  Branch (1842:8): [True: 0, False: 39]
  ------------------
 1843|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
 1844|       |        /*return nullptr;*/
 1845|      0|        return fillIn;
 1846|      0|    }
 1847|       |
 1848|     39|    if(indexR >= 0 && resB->fSize > indexR) {
  ------------------
  |  Branch (1848:8): [True: 39, False: 0]
  |  Branch (1848:23): [True: 39, False: 0]
  ------------------
 1849|     39|        switch(RES_GET_TYPE(resB->fRes)) {
  ------------------
  |  |   68|     39|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 1850|      0|        case URES_INT:
  ------------------
  |  Branch (1850:9): [True: 0, False: 39]
  ------------------
 1851|      0|        case URES_BINARY:
  ------------------
  |  Branch (1851:9): [True: 0, False: 39]
  ------------------
 1852|      0|        case URES_STRING:
  ------------------
  |  Branch (1852:9): [True: 0, False: 39]
  ------------------
 1853|      0|        case URES_STRING_V2:
  ------------------
  |  Branch (1853:9): [True: 0, False: 39]
  ------------------
 1854|      0|        case URES_INT_VECTOR:
  ------------------
  |  Branch (1854:9): [True: 0, False: 39]
  ------------------
 1855|      0|            return ures_copyResb(fillIn, resB, status);
  ------------------
  |  | 1653|      0|#define ures_copyResb U_ICU_ENTRY_POINT_RENAME(ures_copyResb)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1856|      0|        case URES_TABLE:
  ------------------
  |  Branch (1856:9): [True: 0, False: 39]
  ------------------
 1857|      0|        case URES_TABLE16:
  ------------------
  |  Branch (1857:9): [True: 0, False: 39]
  ------------------
 1858|      0|        case URES_TABLE32:
  ------------------
  |  Branch (1858:9): [True: 0, False: 39]
  ------------------
 1859|      0|            r = res_getTableItemByIndex(&resB->getResData(), resB->fRes, indexR, &key);
  ------------------
  |  |  206|      0|#define res_getTableItemByIndex U_ICU_ENTRY_POINT_RENAME(res_getTableItemByIndex)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1860|      0|            if(r == RES_BOGUS && resB->fHasFallback) {
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1860:16): [True: 0, False: 0]
  |  Branch (1860:34): [True: 0, False: 0]
  ------------------
 1861|       |                /* TODO: do the fallback */
 1862|      0|            }
 1863|      0|            return init_resb_result(resB->fData, r, key, indexR, resB, fillIn, status);
 1864|     39|        case URES_ARRAY:
  ------------------
  |  Branch (1864:9): [True: 39, False: 0]
  ------------------
 1865|     39|        case URES_ARRAY16:
  ------------------
  |  Branch (1865:9): [True: 0, False: 39]
  ------------------
 1866|     39|            r = res_getArrayItem(&resB->getResData(), resB->fRes, indexR);
  ------------------
  |  |  200|     39|#define res_getArrayItem U_ICU_ENTRY_POINT_RENAME(res_getArrayItem)
  |  |  ------------------
  |  |  |  |  123|     39|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     39|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     39|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1867|     39|            if(r == RES_BOGUS && resB->fHasFallback) {
  ------------------
  |  |   65|     78|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1867:16): [True: 0, False: 39]
  |  Branch (1867:34): [True: 0, False: 0]
  ------------------
 1868|       |                /* TODO: do the fallback */
 1869|      0|            }
 1870|     39|            return init_resb_result(resB->fData, r, key, indexR, resB, fillIn, status);
 1871|      0|        default:
  ------------------
  |  Branch (1871:9): [True: 0, False: 39]
  ------------------
 1872|       |            /*return nullptr;*/
 1873|      0|            return fillIn;
 1874|     39|        }
 1875|     39|    } else {
 1876|      0|        *status = U_MISSING_RESOURCE_ERROR;
 1877|      0|    }
 1878|       |    /*return nullptr;*/
 1879|      0|    return fillIn;
 1880|     39|}
ures_getStringByIndex_78:
 1882|  2.13M|U_CAPI const char16_t* U_EXPORT2 ures_getStringByIndex(const UResourceBundle *resB, int32_t indexS, int32_t* len, UErrorCode *status) {
 1883|  2.13M|    const char* key = nullptr;
 1884|  2.13M|    Resource r = RES_BOGUS;
  ------------------
  |  |   65|  2.13M|#define RES_BOGUS 0xffffffff
  ------------------
 1885|       |
 1886|  2.13M|    if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (1886:9): [True: 0, False: 2.13M]
  |  Branch (1886:28): [True: 0, False: 2.13M]
  ------------------
 1887|      0|        return nullptr;
 1888|      0|    }
 1889|  2.13M|    if(resB == nullptr) {
  ------------------
  |  Branch (1889:8): [True: 0, False: 2.13M]
  ------------------
 1890|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
 1891|      0|        return nullptr;
 1892|      0|    }
 1893|       |
 1894|  2.13M|    if(indexS >= 0 && resB->fSize > indexS) {
  ------------------
  |  Branch (1894:8): [True: 2.13M, False: 0]
  |  Branch (1894:23): [True: 2.13M, False: 0]
  ------------------
 1895|  2.13M|        switch(RES_GET_TYPE(resB->fRes)) {
  ------------------
  |  |   68|  2.13M|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 1896|      0|        case URES_STRING:
  ------------------
  |  Branch (1896:9): [True: 0, False: 2.13M]
  ------------------
 1897|      0|        case URES_STRING_V2:
  ------------------
  |  Branch (1897:9): [True: 0, False: 2.13M]
  ------------------
 1898|      0|            return res_getString({resB}, &resB->getResData(), resB->fRes, len);
 1899|      0|        case URES_TABLE:
  ------------------
  |  Branch (1899:9): [True: 0, False: 2.13M]
  ------------------
 1900|      0|        case URES_TABLE16:
  ------------------
  |  Branch (1900:9): [True: 0, False: 2.13M]
  ------------------
 1901|      0|        case URES_TABLE32:
  ------------------
  |  Branch (1901:9): [True: 0, False: 2.13M]
  ------------------
 1902|      0|            r = res_getTableItemByIndex(&resB->getResData(), resB->fRes, indexS, &key);
  ------------------
  |  |  206|      0|#define res_getTableItemByIndex U_ICU_ENTRY_POINT_RENAME(res_getTableItemByIndex)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1903|      0|            if(r == RES_BOGUS && resB->fHasFallback) {
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1903:16): [True: 0, False: 0]
  |  Branch (1903:34): [True: 0, False: 0]
  ------------------
 1904|       |                /* TODO: do the fallback */
 1905|      0|            }
 1906|      0|            return ures_getStringWithAlias(resB, r, indexS, len, status);
 1907|      0|        case URES_ARRAY:
  ------------------
  |  Branch (1907:9): [True: 0, False: 2.13M]
  ------------------
 1908|  2.13M|        case URES_ARRAY16:
  ------------------
  |  Branch (1908:9): [True: 2.13M, False: 0]
  ------------------
 1909|  2.13M|            r = res_getArrayItem(&resB->getResData(), resB->fRes, indexS);
  ------------------
  |  |  200|  2.13M|#define res_getArrayItem U_ICU_ENTRY_POINT_RENAME(res_getArrayItem)
  |  |  ------------------
  |  |  |  |  123|  2.13M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.13M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.13M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1910|  2.13M|            if(r == RES_BOGUS && resB->fHasFallback) {
  ------------------
  |  |   65|  4.27M|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1910:16): [True: 0, False: 2.13M]
  |  Branch (1910:34): [True: 0, False: 0]
  ------------------
 1911|       |                /* TODO: do the fallback */
 1912|      0|            }
 1913|  2.13M|            return ures_getStringWithAlias(resB, r, indexS, len, status);
 1914|      0|        case URES_ALIAS:
  ------------------
  |  Branch (1914:9): [True: 0, False: 2.13M]
  ------------------
 1915|      0|            return ures_getStringWithAlias(resB, resB->fRes, indexS, len, status);
 1916|      0|        case URES_INT:
  ------------------
  |  Branch (1916:9): [True: 0, False: 2.13M]
  ------------------
 1917|      0|        case URES_BINARY:
  ------------------
  |  Branch (1917:9): [True: 0, False: 2.13M]
  ------------------
 1918|      0|        case URES_INT_VECTOR:
  ------------------
  |  Branch (1918:9): [True: 0, False: 2.13M]
  ------------------
 1919|      0|            *status = U_RESOURCE_TYPE_MISMATCH;
 1920|      0|            break;
 1921|      0|        default:
  ------------------
  |  Branch (1921:9): [True: 0, False: 2.13M]
  ------------------
 1922|       |          /* must not occur */
 1923|      0|          *status = U_INTERNAL_PROGRAM_ERROR;
 1924|      0|          break;
 1925|  2.13M|        }
 1926|  2.13M|    } else {
 1927|      0|        *status = U_MISSING_RESOURCE_ERROR;
 1928|      0|    }
 1929|      0|    return nullptr;
 1930|  2.13M|}
ures_getStringByKeyWithFallback_78:
 2033|    420|                                UErrorCode *status) {
 2034|       |
 2035|    420|    UResourceBundle stack;
 2036|    420|    const char16_t* retVal = nullptr;
 2037|    420|    ures_initStackObject(&stack);
  ------------------
  |  | 1690|    420|#define ures_initStackObject U_ICU_ENTRY_POINT_RENAME(ures_initStackObject)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2038|    420|    ures_getByKeyWithFallback(resB, inKey, &stack, status);
  ------------------
  |  | 1662|    420|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2039|    420|    int32_t length;
 2040|    420|    retVal = ures_getString(&stack, &length, status);
  ------------------
  |  | 1675|    420|#define ures_getString U_ICU_ENTRY_POINT_RENAME(ures_getString)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2041|    420|    ures_close(&stack);
  ------------------
  |  | 1652|    420|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2042|    420|    if (U_FAILURE(*status)) {
  ------------------
  |  Branch (2042:9): [True: 0, False: 420]
  ------------------
 2043|      0|        return nullptr;
 2044|      0|    }
 2045|    420|    if (length == 3 && retVal[0] == EMPTY_SET && retVal[1] == EMPTY_SET && retVal[2] == EMPTY_SET ) {
  ------------------
  |  |   35|    420|#define EMPTY_SET 0x2205
  ------------------
                  if (length == 3 && retVal[0] == EMPTY_SET && retVal[1] == EMPTY_SET && retVal[2] == EMPTY_SET ) {
  ------------------
  |  |   35|    420|#define EMPTY_SET 0x2205
  ------------------
                  if (length == 3 && retVal[0] == EMPTY_SET && retVal[1] == EMPTY_SET && retVal[2] == EMPTY_SET ) {
  ------------------
  |  |   35|      0|#define EMPTY_SET 0x2205
  ------------------
  |  Branch (2045:9): [True: 0, False: 420]
  |  Branch (2045:24): [True: 0, False: 0]
  |  Branch (2045:50): [True: 0, False: 0]
  |  Branch (2045:76): [True: 0, False: 0]
  ------------------
 2046|      0|        retVal = nullptr;
 2047|      0|        length = 0;
 2048|      0|        *status = U_MISSING_RESOURCE_ERROR;
 2049|      0|    }
 2050|    420|    if (len != nullptr) {
  ------------------
  |  Branch (2050:9): [True: 420, False: 0]
  ------------------
 2051|    420|        *len = length;
 2052|    420|    }
 2053|    420|    return retVal;
 2054|    420|}
ures_getByKeyWithFallback_78:
 2164|   145k|                          UErrorCode *status) {
 2165|   145k|    Resource res = RES_BOGUS, rootRes = RES_BOGUS;
  ------------------
  |  |   65|   145k|#define RES_BOGUS 0xffffffff
  ------------------
                  Resource res = RES_BOGUS, rootRes = RES_BOGUS;
  ------------------
  |  |   65|   145k|#define RES_BOGUS 0xffffffff
  ------------------
 2166|   145k|    UResourceBundle *helper = nullptr;
 2167|       |
 2168|   145k|    if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (2168:9): [True: 0, False: 145k]
  |  Branch (2168:28): [True: 0, False: 145k]
  ------------------
 2169|      0|        return fillIn;
 2170|      0|    }
 2171|   145k|    if(resB == nullptr) {
  ------------------
  |  Branch (2171:8): [True: 0, False: 145k]
  ------------------
 2172|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
 2173|      0|        return fillIn;
 2174|      0|    }
 2175|       |
 2176|   145k|    int32_t type = RES_GET_TYPE(resB->fRes);
  ------------------
  |  |   68|   145k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 2177|   145k|    if(URES_IS_TABLE(type)) {
  ------------------
  |  |   84|   145k|#define URES_IS_TABLE(type) ((int32_t)(type)==URES_TABLE || (int32_t)(type)==URES_TABLE16 || (int32_t)(type)==URES_TABLE32)
  |  |  ------------------
  |  |  |  Branch (84:30): [True: 142k, False: 3.66k]
  |  |  |  Branch (84:61): [True: 3.66k, False: 0]
  |  |  |  Branch (84:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2178|   145k|        const char* origResPath = resB->fResPath;
 2179|   145k|        int32_t origResPathLen = resB->fResPathLen;
 2180|   145k|        res = getTableItemByKeyPath(&resB->getResData(), resB->fRes, inKey);
 2181|   145k|        const char* key = inKey;
 2182|   145k|        bool didRootOnce = false;
 2183|   145k|        if(res == RES_BOGUS) {
  ------------------
  |  |   65|   145k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (2183:12): [True: 142k, False: 2.87k]
  ------------------
 2184|   142k|            UResourceDataEntry *dataEntry = resB->fData;
 2185|   142k|            CharString path;
 2186|   142k|            char *myPath = nullptr;
 2187|   142k|            const char* resPath = resB->fResPath;
 2188|   142k|            int32_t len = resB->fResPathLen;
 2189|   442k|            while(res == RES_BOGUS && (dataEntry->fParent != nullptr || !didRootOnce)) { /* Otherwise, we'll look in parents */
  ------------------
  |  |   65|   884k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (2189:19): [True: 441k, False: 1.02k]
  |  Branch (2189:40): [True: 157k, False: 283k]
  |  Branch (2189:73): [True: 141k, False: 141k]
  ------------------
 2190|   299k|                if (dataEntry->fParent != nullptr) {
  ------------------
  |  Branch (2190:21): [True: 157k, False: 141k]
  ------------------
 2191|   157k|                    dataEntry = dataEntry->fParent;
 2192|   157k|                } else {
 2193|       |                    // We can't just stop when we get to a bundle whose fParent is nullptr.  That'll work most of the time,
 2194|       |                    // but if the bundle that the caller passed to us was "root" (which happens in getAllItemsWithFallback(),
 2195|       |                    // this function will drop right out without doing anything if "root" doesn't contain the exact key path
 2196|       |                    // specified.  In that case, we need one extra time through this loop to make sure we follow any
 2197|       |                    // applicable aliases at the root level.
 2198|   141k|                    didRootOnce = true;
 2199|   141k|                }
 2200|   299k|                rootRes = dataEntry->fData.rootRes;
 2201|       |
 2202|   299k|                if(dataEntry->fBogus == U_ZERO_ERROR) {
  ------------------
  |  Branch (2202:20): [True: 299k, False: 0]
  ------------------
 2203|   299k|                    createPath(origResPath, origResPathLen, resPath, len, inKey, path, status);
 2204|   299k|                    if (U_FAILURE(*status)) {
  ------------------
  |  Branch (2204:25): [True: 0, False: 299k]
  ------------------
 2205|      0|                        ures_close(helper);
  ------------------
  |  | 1652|      0|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2206|      0|                        return fillIn;
 2207|      0|                    }
 2208|   299k|                    myPath = path.data();
 2209|   299k|                    key = inKey;
 2210|   299k|                    do {
 2211|   299k|                        res = res_findResource(&(dataEntry->fData), rootRes, &myPath, &key);
  ------------------
  |  |  198|   299k|#define res_findResource U_ICU_ENTRY_POINT_RENAME(res_findResource)
  |  |  ------------------
  |  |  |  |  123|   299k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   299k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   299k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2212|   299k|                        if (RES_GET_TYPE(res) == URES_ALIAS && *myPath) {
  ------------------
  |  |   68|   299k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  |  Branch (2212:29): [True: 1, False: 299k]
  |  Branch (2212:64): [True: 0, False: 1]
  ------------------
 2213|       |                            /* We hit an alias, but we didn't finish following the path. */
 2214|      0|                            helper = init_resb_result(dataEntry, res, nullptr, -1, resB, helper, status);
 2215|       |                            /*helper = init_resb_result(dataEntry, res, inKey, -1, resB, helper, status);*/
 2216|      0|                            if(helper) {
  ------------------
  |  Branch (2216:32): [True: 0, False: 0]
  ------------------
 2217|      0|                              dataEntry = helper->fData;
 2218|      0|                              rootRes = helper->fRes;
 2219|      0|                              resPath = helper->fResPath;
 2220|      0|                              len = helper->fResPathLen;
 2221|       |
 2222|      0|                            } else {
 2223|      0|                              break;
 2224|      0|                            }
 2225|   299k|                        } else if (res == RES_BOGUS) {
  ------------------
  |  |   65|   299k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (2225:36): [True: 298k, False: 1.02k]
  ------------------
 2226|   298k|                            break;
 2227|   298k|                        }
 2228|   299k|                    } while(*myPath); /* Continue until the whole path is consumed */
  ------------------
  |  Branch (2228:29): [True: 0, False: 1.02k]
  ------------------
 2229|   299k|                }
 2230|   299k|            }
 2231|       |            /*dataEntry = getFallbackData(resB, &key, &res, status);*/
 2232|   142k|            if(res != RES_BOGUS) {
  ------------------
  |  |   65|   142k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (2232:16): [True: 1.02k, False: 141k]
  ------------------
 2233|       |              /* check if resB->fResPath gives the right name here */
 2234|  1.02k|                if(uprv_strcmp(dataEntry->fName, uloc_getDefault())==0 || uprv_strcmp(dataEntry->fName, kRootLocaleName)==0) {
  ------------------
  |  |   38|  1.02k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  1.02k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
                              if(uprv_strcmp(dataEntry->fName, uloc_getDefault())==0 || uprv_strcmp(dataEntry->fName, kRootLocaleName)==0) {
  ------------------
  |  |   38|  1.02k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  1.02k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (2234:20): [True: 0, False: 1.02k]
  |  Branch (2234:75): [True: 562, False: 466]
  ------------------
 2235|    562|                    *status = U_USING_DEFAULT_WARNING;
 2236|    562|                } else {
 2237|    466|                    *status = U_USING_FALLBACK_WARNING;
 2238|    466|                }
 2239|       |
 2240|  1.02k|                fillIn = init_resb_result(dataEntry, res, key, -1, resB, fillIn, status);
 2241|  1.02k|                if (resPath != nullptr) {
  ------------------
  |  Branch (2241:21): [True: 597, False: 431]
  ------------------
 2242|    597|                    createPath(origResPath, origResPathLen, resPath, len, inKey, path, status);
 2243|    597|                } else {
 2244|    431|                    const char* separator = nullptr;
 2245|    431|                    if (fillIn->fResPath != nullptr) {
  ------------------
  |  Branch (2245:25): [True: 431, False: 0]
  ------------------
 2246|    431|                        separator = uprv_strchr(fillIn->fResPath, RES_PATH_SEPARATOR);
  ------------------
  |  |   40|    431|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|    431|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2247|    431|                    }
 2248|    431|                    if (separator != nullptr && separator[1] != '\0') {
  ------------------
  |  Branch (2248:25): [True: 431, False: 0]
  |  Branch (2248:49): [True: 0, False: 431]
  ------------------
 2249|      0|                        createPath(origResPath, origResPathLen, fillIn->fResPath,
 2250|      0|                                   static_cast<int32_t>(uprv_strlen(fillIn->fResPath)), inKey, path, status);
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2251|    431|                    } else {
 2252|    431|                        createPath(origResPath, origResPathLen, "", 0, inKey, path, status);
 2253|    431|                    }
 2254|    431|                }
 2255|  1.02k|                ures_freeResPath(fillIn);
 2256|  1.02k|                ures_appendResPath(fillIn, path.data(), path.length(), status);
 2257|  1.02k|                if(fillIn->fResPath[fillIn->fResPathLen-1] != RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|  1.02k|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2257:20): [True: 1.01k, False: 10]
  ------------------
 2258|  1.01k|                    ures_appendResPath(fillIn, RES_PATH_SEPARATOR_S, 1, status);
  ------------------
  |  |   61|  1.01k|#define RES_PATH_SEPARATOR_S   "/"
  ------------------
 2259|  1.01k|                }
 2260|   141k|            } else {
 2261|   141k|                *status = U_MISSING_RESOURCE_ERROR;
 2262|   141k|            }
 2263|   142k|        } else {
 2264|  2.87k|            fillIn = init_resb_result(resB->fData, res, key, -1, resB, fillIn, status);
 2265|  2.87k|        }
 2266|   145k|    } 
 2267|      0|    else {
 2268|      0|        *status = U_RESOURCE_TYPE_MISMATCH;
 2269|      0|    }
 2270|   145k|    ures_close(helper);
  ------------------
  |  | 1652|   145k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|   145k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   145k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   145k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2271|   145k|    return fillIn;
 2272|   145k|}
ures_getAllItemsWithFallback_78:
 2471|   142k|                             icu::ResourceSink &sink, UErrorCode &errorCode) {
 2472|   142k|    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (2472:9): [True: 0, False: 142k]
  ------------------
 2473|   142k|    if (path == nullptr) {
  ------------------
  |  Branch (2473:9): [True: 0, False: 142k]
  ------------------
 2474|      0|        errorCode = U_ILLEGAL_ARGUMENT_ERROR;
 2475|      0|        return;
 2476|      0|    }
 2477|   142k|    StackUResourceBundle stackBundle;
 2478|   142k|    const UResourceBundle *rb;
 2479|   142k|    if (*path == 0) {
  ------------------
  |  Branch (2479:9): [True: 708, False: 141k]
  ------------------
 2480|       |        // empty path
 2481|    708|        rb = bundle;
 2482|   141k|    } else {
 2483|   141k|        rb = ures_getByKeyWithFallback(bundle, path, stackBundle.getAlias(), &errorCode);
  ------------------
  |  | 1662|   141k|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|   141k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   141k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   141k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2484|   141k|        if (U_FAILURE(errorCode)) {
  ------------------
  |  Branch (2484:13): [True: 141k, False: 287]
  ------------------
 2485|   141k|            return;
 2486|   141k|        }
 2487|   141k|    }
 2488|       |    // Get all table items with fallback.
 2489|    995|    ResourceDataValue value;
 2490|    995|    getAllItemsWithFallback(rb, value, sink, errorCode);
 2491|    995|}
ures_getByKey_78:
 2493|   657k|U_CAPI UResourceBundle* U_EXPORT2 ures_getByKey(const UResourceBundle *resB, const char* inKey, UResourceBundle *fillIn, UErrorCode *status) {
 2494|   657k|    Resource res = RES_BOGUS;
  ------------------
  |  |   65|   657k|#define RES_BOGUS 0xffffffff
  ------------------
 2495|   657k|    UResourceDataEntry *dataEntry = nullptr;
 2496|   657k|    const char *key = inKey;
 2497|       |
 2498|   657k|    if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (2498:9): [True: 0, False: 657k]
  |  Branch (2498:28): [True: 2, False: 657k]
  ------------------
 2499|      2|        return fillIn;
 2500|      2|    }
 2501|   657k|    if(resB == nullptr) {
  ------------------
  |  Branch (2501:8): [True: 0, False: 657k]
  ------------------
 2502|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
 2503|      0|        return fillIn;
 2504|      0|    }
 2505|       |
 2506|   657k|    int32_t type = RES_GET_TYPE(resB->fRes);
  ------------------
  |  |   68|   657k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 2507|   657k|    if(URES_IS_TABLE(type)) {
  ------------------
  |  |   84|   657k|#define URES_IS_TABLE(type) ((int32_t)(type)==URES_TABLE || (int32_t)(type)==URES_TABLE16 || (int32_t)(type)==URES_TABLE32)
  |  |  ------------------
  |  |  |  Branch (84:30): [True: 656k, False: 651]
  |  |  |  Branch (84:61): [True: 651, False: 0]
  |  |  |  Branch (84:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2508|   657k|        int32_t t;
 2509|   657k|        res = res_getTableItemByKey(&resB->getResData(), resB->fRes, &t, &key);
  ------------------
  |  |  207|   657k|#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey)
  |  |  ------------------
  |  |  |  |  123|   657k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   657k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   657k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2510|   657k|        if(res == RES_BOGUS) {
  ------------------
  |  |   65|   657k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (2510:12): [True: 34.1k, False: 622k]
  ------------------
 2511|  34.1k|            key = inKey;
 2512|  34.1k|            if(resB->fHasFallback) {
  ------------------
  |  Branch (2512:16): [True: 475, False: 33.6k]
  ------------------
 2513|    475|                dataEntry = getFallbackData(resB, &key, &res, status);
 2514|    475|                if(U_SUCCESS(*status)) {
  ------------------
  |  Branch (2514:20): [True: 475, False: 0]
  ------------------
 2515|       |                    /* check if resB->fResPath gives the right name here */
 2516|    475|                    return init_resb_result(dataEntry, res, key, -1, resB, fillIn, status);
 2517|    475|                } else {
 2518|      0|                    *status = U_MISSING_RESOURCE_ERROR;
 2519|      0|                }
 2520|  33.6k|            } else {
 2521|  33.6k|                *status = U_MISSING_RESOURCE_ERROR;
 2522|  33.6k|            }
 2523|   622k|        } else {
 2524|   622k|            return init_resb_result(resB->fData, res, key, -1, resB, fillIn, status);
 2525|   622k|        }
 2526|   657k|    } 
 2527|       |#if 0
 2528|       |    /* this is a kind of TODO item. If we have an array with an index table, we could do this. */
 2529|       |    /* not currently */
 2530|       |    else if(RES_GET_TYPE(resB->fRes) == URES_ARRAY && resB->fHasFallback == true) {
 2531|       |        /* here should go a first attempt to locate the key using index table */
 2532|       |        dataEntry = getFallbackData(resB, &key, &res, status);
 2533|       |        if(U_SUCCESS(*status)) {
 2534|       |            return init_resb_result(dataEntry, res, key, resB, fillIn, status);
 2535|       |        } else {
 2536|       |            *status = U_MISSING_RESOURCE_ERROR;
 2537|       |        }
 2538|       |    }
 2539|       |#endif    
 2540|      0|    else {
 2541|      0|        *status = U_RESOURCE_TYPE_MISMATCH;
 2542|      0|    }
 2543|  33.6k|    return fillIn;
 2544|   657k|}
ures_getStringByKey_78:
 2546|  2.36k|U_CAPI const char16_t* U_EXPORT2 ures_getStringByKey(const UResourceBundle *resB, const char* inKey, int32_t* len, UErrorCode *status) {
 2547|  2.36k|    Resource res = RES_BOGUS;
  ------------------
  |  |   65|  2.36k|#define RES_BOGUS 0xffffffff
  ------------------
 2548|  2.36k|    UResourceDataEntry *dataEntry = nullptr;
 2549|  2.36k|    const char* key = inKey;
 2550|       |
 2551|  2.36k|    if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (2551:9): [True: 0, False: 2.36k]
  |  Branch (2551:28): [True: 0, False: 2.36k]
  ------------------
 2552|      0|        return nullptr;
 2553|      0|    }
 2554|  2.36k|    if(resB == nullptr) {
  ------------------
  |  Branch (2554:8): [True: 0, False: 2.36k]
  ------------------
 2555|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
 2556|      0|        return nullptr;
 2557|      0|    }
 2558|       |
 2559|  2.36k|    int32_t type = RES_GET_TYPE(resB->fRes);
  ------------------
  |  |   68|  2.36k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 2560|  2.36k|    if(URES_IS_TABLE(type)) {
  ------------------
  |  |   84|  2.36k|#define URES_IS_TABLE(type) ((int32_t)(type)==URES_TABLE || (int32_t)(type)==URES_TABLE16 || (int32_t)(type)==URES_TABLE32)
  |  |  ------------------
  |  |  |  Branch (84:30): [True: 421, False: 1.94k]
  |  |  |  Branch (84:61): [True: 1.94k, False: 0]
  |  |  |  Branch (84:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2561|  2.36k|        int32_t t=0;
 2562|       |
 2563|  2.36k|        res = res_getTableItemByKey(&resB->getResData(), resB->fRes, &t, &key);
  ------------------
  |  |  207|  2.36k|#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey)
  |  |  ------------------
  |  |  |  |  123|  2.36k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.36k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.36k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2564|       |
 2565|  2.36k|        if(res == RES_BOGUS) {
  ------------------
  |  |   65|  2.36k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (2565:12): [True: 362, False: 1.99k]
  ------------------
 2566|    362|            key = inKey;
 2567|    362|            if(resB->fHasFallback) {
  ------------------
  |  Branch (2567:16): [True: 0, False: 362]
  ------------------
 2568|      0|                dataEntry = getFallbackData(resB, &key, &res, status);
 2569|      0|                if(U_SUCCESS(*status)) {
  ------------------
  |  Branch (2569:20): [True: 0, False: 0]
  ------------------
 2570|      0|                    switch (RES_GET_TYPE(res)) {
  ------------------
  |  |   68|      0|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 2571|      0|                    case URES_STRING:
  ------------------
  |  Branch (2571:21): [True: 0, False: 0]
  ------------------
 2572|      0|                    case URES_STRING_V2:
  ------------------
  |  Branch (2572:21): [True: 0, False: 0]
  ------------------
 2573|      0|                        return res_getString({resB, key}, &dataEntry->fData, res, len);
 2574|      0|                    case URES_ALIAS:
  ------------------
  |  Branch (2574:21): [True: 0, False: 0]
  ------------------
 2575|      0|                      {
 2576|      0|                        const char16_t* result = nullptr;
 2577|      0|                        UResourceBundle *tempRes = ures_getByKey(resB, inKey, nullptr, status);
  ------------------
  |  | 1661|      0|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2578|      0|                        result = ures_getString(tempRes, len, status);
  ------------------
  |  | 1675|      0|#define ures_getString U_ICU_ENTRY_POINT_RENAME(ures_getString)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2579|      0|                        ures_close(tempRes);
  ------------------
  |  | 1652|      0|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2580|      0|                        return result;
 2581|      0|                      }
 2582|      0|                    default:
  ------------------
  |  Branch (2582:21): [True: 0, False: 0]
  ------------------
 2583|      0|                        *status = U_RESOURCE_TYPE_MISMATCH;
 2584|      0|                    }
 2585|      0|                } else {
 2586|      0|                    *status = U_MISSING_RESOURCE_ERROR;
 2587|      0|                }
 2588|    362|            } else {
 2589|    362|                *status = U_MISSING_RESOURCE_ERROR;
 2590|    362|            }
 2591|  1.99k|        } else {
 2592|  1.99k|            switch (RES_GET_TYPE(res)) {
  ------------------
  |  |   68|  1.99k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 2593|      0|            case URES_STRING:
  ------------------
  |  Branch (2593:13): [True: 0, False: 1.99k]
  ------------------
 2594|  1.99k|            case URES_STRING_V2:
  ------------------
  |  Branch (2594:13): [True: 1.99k, False: 0]
  ------------------
 2595|  1.99k|                return res_getString({resB, key}, &resB->getResData(), res, len);
 2596|      0|            case URES_ALIAS:
  ------------------
  |  Branch (2596:13): [True: 0, False: 1.99k]
  ------------------
 2597|      0|              {
 2598|      0|                const char16_t* result = nullptr;
 2599|      0|                UResourceBundle *tempRes = ures_getByKey(resB, inKey, nullptr, status);
  ------------------
  |  | 1661|      0|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2600|      0|                result = ures_getString(tempRes, len, status);
  ------------------
  |  | 1675|      0|#define ures_getString U_ICU_ENTRY_POINT_RENAME(ures_getString)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2601|      0|                ures_close(tempRes);
  ------------------
  |  | 1652|      0|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2602|      0|                return result;
 2603|      0|              }
 2604|      0|            default:
  ------------------
  |  Branch (2604:13): [True: 0, False: 1.99k]
  ------------------
 2605|      0|                *status = U_RESOURCE_TYPE_MISMATCH;
 2606|  1.99k|            }
 2607|  1.99k|        }
 2608|  2.36k|    } 
 2609|       |#if 0 
 2610|       |    /* this is a kind of TODO item. If we have an array with an index table, we could do this. */
 2611|       |    /* not currently */   
 2612|       |    else if(RES_GET_TYPE(resB->fRes) == URES_ARRAY && resB->fHasFallback == true) {
 2613|       |        /* here should go a first attempt to locate the key using index table */
 2614|       |        dataEntry = getFallbackData(resB, &key, &res, status);
 2615|       |        if(U_SUCCESS(*status)) {
 2616|       |            // TODO: Tracing
 2617|       |            return res_getString(rd, res, len);
 2618|       |        } else {
 2619|       |            *status = U_MISSING_RESOURCE_ERROR;
 2620|       |        }
 2621|       |    } 
 2622|       |#endif    
 2623|      0|    else {
 2624|      0|        *status = U_RESOURCE_TYPE_MISMATCH;
 2625|      0|    }
 2626|    362|    return nullptr;
 2627|  2.36k|}
ures_getLocaleByType_78:
 2671|    840|                     UErrorCode* status) {
 2672|    840|    if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (2672:9): [True: 0, False: 840]
  |  Branch (2672:28): [True: 0, False: 840]
  ------------------
 2673|      0|        return nullptr;
 2674|      0|    }
 2675|    840|    if (!resourceBundle) {
  ------------------
  |  Branch (2675:9): [True: 0, False: 840]
  ------------------
 2676|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
 2677|      0|        return nullptr;
 2678|    840|    } else {
 2679|    840|        switch(type) {
 2680|    420|        case ULOC_ACTUAL_LOCALE:
  ------------------
  |  Branch (2680:9): [True: 420, False: 420]
  ------------------
 2681|    420|            return resourceBundle->fData->fName;
 2682|    420|        case ULOC_VALID_LOCALE:
  ------------------
  |  Branch (2682:9): [True: 420, False: 420]
  ------------------
 2683|    420|            return resourceBundle->fValidLocaleDataEntry->fName;
 2684|      0|        case ULOC_REQUESTED_LOCALE:
  ------------------
  |  Branch (2684:9): [True: 0, False: 840]
  ------------------
 2685|      0|        default:
  ------------------
  |  Branch (2685:9): [True: 0, False: 840]
  ------------------
 2686|      0|            *status = U_ILLEGAL_ARGUMENT_ERROR;
 2687|      0|            return nullptr;
 2688|    840|        }
 2689|    840|    }
 2690|    840|}
ures_open_78:
 2769|  1.54k|ures_open(const char* path, const char* localeID, UErrorCode* status) {
 2770|  1.54k|    return ures_openWithType(nullptr, path, localeID, URES_OPEN_LOCALE_DEFAULT_ROOT, status);
 2771|  1.54k|}
ures_openDirect_78:
 2783|   620k|ures_openDirect(const char* path, const char* localeID, UErrorCode* status) {
 2784|   620k|    return ures_openWithType(nullptr, path, localeID, URES_OPEN_DIRECT, status);
 2785|   620k|}
uresbund.cpp:_ZL21ures_setIsStackObjectP15UResourceBundlea:
  711|   957k|static void ures_setIsStackObject( UResourceBundle* resB, UBool state) {
  712|   957k|    if(state) {
  ------------------
  |  Branch (712:8): [True: 145k, False: 812k]
  ------------------
  713|   145k|        resB->fMagic1 = 0;
  714|   145k|        resB->fMagic2 = 0;
  715|   812k|    } else {
  716|   812k|        resB->fMagic1 = MAGIC1;
  ------------------
  |  |   30|   812k|#define MAGIC1 19700503
  ------------------
  717|   812k|        resB->fMagic2 = MAGIC2;
  ------------------
  |  |   31|   812k|#define MAGIC2 19641227
  ------------------
  718|   812k|    }
  719|   957k|}
uresbund.cpp:_ZL16ures_closeBundleP15UResourceBundlea:
 1123|  1.10M|{
 1124|  1.10M|    if(resB != nullptr) {
  ------------------
  |  Branch (1124:8): [True: 957k, False: 145k]
  ------------------
 1125|   957k|        if(resB->fData != nullptr) {
  ------------------
  |  Branch (1125:12): [True: 815k, False: 142k]
  ------------------
 1126|   815k|            entryClose(resB->fData);
 1127|   815k|        }
 1128|   957k|        if(resB->fVersion != nullptr) {
  ------------------
  |  Branch (1128:12): [True: 0, False: 957k]
  ------------------
 1129|      0|            uprv_free(resB->fVersion);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1130|      0|        }
 1131|   957k|        ures_freeResPath(resB);
 1132|       |
 1133|   957k|        if(ures_isStackObject(resB) == false && freeBundleObj) {
  ------------------
  |  Branch (1133:12): [True: 812k, False: 145k]
  |  Branch (1133:49): [True: 812k, False: 0]
  ------------------
 1134|   812k|            uprv_free(resB);
  ------------------
  |  | 1503|   812k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|   812k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   812k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   812k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1135|   812k|        }
 1136|       |#if 0 /*U_DEBUG*/
 1137|       |        else {
 1138|       |            /* poison the data */
 1139|       |            uprv_memset(resB, -1, sizeof(UResourceBundle));
 1140|       |        }
 1141|       |#endif
 1142|   957k|    }
 1143|  1.10M|}
uresbund.cpp:_ZL10entryCloseP18UResourceDataEntry:
 1061|  1.25M|static void entryClose(UResourceDataEntry *resB) {
 1062|  1.25M|  Mutex lock(&resbMutex);
 1063|  1.25M|  entryCloseInt(resB);
 1064|  1.25M|}
uresbund.cpp:_ZL13entryCloseIntP18UResourceDataEntry:
 1028|  1.25M|static void entryCloseInt(UResourceDataEntry *resB) {
 1029|  1.25M|    UResourceDataEntry *p = resB;
 1030|       |
 1031|  2.51M|    while(resB != nullptr) {
  ------------------
  |  Branch (1031:11): [True: 1.26M, False: 1.25M]
  ------------------
 1032|  1.26M|        p = resB->fParent;
 1033|  1.26M|        resB->fCountExisting--;
 1034|       |
 1035|       |        /* Entries are left in the cache. TODO: add ures_flushCache() to force a flush
 1036|       |         of the cache. */
 1037|       |/*
 1038|       |        if(resB->fCountExisting <= 0) {
 1039|       |            uhash_remove(cache, resB);
 1040|       |            if(resB->fBogus == U_ZERO_ERROR) {
 1041|       |                res_unload(&(resB->fData));
 1042|       |            }
 1043|       |            if(resB->fName != nullptr) {
 1044|       |                uprv_free(resB->fName);
 1045|       |            }
 1046|       |            if(resB->fPath != nullptr) {
 1047|       |                uprv_free(resB->fPath);
 1048|       |            }
 1049|       |            uprv_free(resB);
 1050|       |        }
 1051|       |*/
 1052|       |
 1053|  1.26M|        resB = p;
 1054|  1.26M|    }
 1055|  1.25M|}
uresbund.cpp:_ZL18ures_isStackObjectPK15UResourceBundle:
  721|   957k|static UBool ures_isStackObject(const UResourceBundle* resB) {
  722|   957k|  return((resB->fMagic1 == MAGIC1 && resB->fMagic2 == MAGIC2)?false:true);
  ------------------
  |  |   30|  1.91M|#define MAGIC1 19700503
  ------------------
                return((resB->fMagic1 == MAGIC1 && resB->fMagic2 == MAGIC2)?false:true);
  ------------------
  |  |   31|   812k|#define MAGIC2 19641227
  ------------------
  |  Branch (722:11): [True: 812k, False: 145k]
  |  Branch (722:38): [True: 812k, False: 0]
  ------------------
  723|   957k|}
uresbund.cpp:_ZL18ures_appendResPathP15UResourceBundlePKciP10UErrorCode:
 1083|  1.26M|static void ures_appendResPath(UResourceBundle *resB, const char* toAdd, int32_t lenToAdd, UErrorCode *status) {
 1084|  1.26M|    int32_t resPathLenOrig = resB->fResPathLen;
 1085|  1.26M|    if(resB->fResPath == nullptr) {
  ------------------
  |  Branch (1085:8): [True: 631k, False: 638k]
  ------------------
 1086|   631k|        resB->fResPath = resB->fResBuf;
 1087|   631k|        *(resB->fResPath) = 0;
 1088|   631k|        resB->fResPathLen = 0;
 1089|   631k|    } 
 1090|  1.26M|    resB->fResPathLen += lenToAdd;
 1091|  1.26M|    if(RES_BUFSIZE <= resB->fResPathLen+1) {
  ------------------
  |  |   59|  1.26M|#define RES_BUFSIZE 64
  ------------------
  |  Branch (1091:8): [True: 0, False: 1.26M]
  ------------------
 1092|      0|        if(resB->fResPath == resB->fResBuf) {
  ------------------
  |  Branch (1092:12): [True: 0, False: 0]
  ------------------
 1093|      0|            resB->fResPath = static_cast<char*>(uprv_malloc((resB->fResPathLen + 1) * sizeof(char)));
  ------------------
  |  | 1524|      0|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1094|       |            /* Check that memory was allocated correctly. */
 1095|      0|            if (resB->fResPath == nullptr) {
  ------------------
  |  Branch (1095:17): [True: 0, False: 0]
  ------------------
 1096|      0|                *status = U_MEMORY_ALLOCATION_ERROR;
 1097|      0|                return;
 1098|      0|            }
 1099|      0|            uprv_strcpy(resB->fResPath, resB->fResBuf);
  ------------------
  |  |   36|      0|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1100|      0|        } else {
 1101|      0|            char* temp = static_cast<char*>(uprv_realloc(resB->fResPath, (resB->fResPathLen + 1) * sizeof(char)));
  ------------------
  |  | 1536|      0|#define uprv_realloc U_ICU_ENTRY_POINT_RENAME(uprv_realloc)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1102|       |            /* Check that memory was reallocated correctly. */
 1103|      0|            if (temp == nullptr) {
  ------------------
  |  Branch (1103:17): [True: 0, False: 0]
  ------------------
 1104|      0|                *status = U_MEMORY_ALLOCATION_ERROR;
 1105|      0|                return;
 1106|      0|            }
 1107|      0|            resB->fResPath = temp;
 1108|      0|        }
 1109|      0|    }
 1110|  1.26M|    uprv_strcpy(resB->fResPath + resPathLenOrig, toAdd);
  ------------------
  |  |   36|  1.26M|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  1.26M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1111|  1.26M|}
uresbund.cpp:_ZL13entryIncreaseP18UResourceDataEntry:
  304|   631k|static void entryIncrease(UResourceDataEntry *entry) {
  305|   631k|    Mutex lock(&resbMutex);
  306|   631k|    entry->fCountExisting++;
  307|   636k|    while(entry->fParent != nullptr) {
  ------------------
  |  Branch (307:11): [True: 4.84k, False: 631k]
  ------------------
  308|  4.84k|      entry = entry->fParent;
  309|  4.84k|      entry->fCountExisting++;
  310|  4.84k|    }
  311|   631k|}
uresbund.cpp:_ZL23ures_getStringWithAliasPK15UResourceBundlejiPiP10UErrorCode:
 1709|  2.13M|static const char16_t* ures_getStringWithAlias(const UResourceBundle *resB, Resource r, int32_t sIndex, int32_t *len, UErrorCode *status) {
 1710|  2.13M|  if(RES_GET_TYPE(r) == URES_ALIAS) {
  ------------------
  |  |   68|  2.13M|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  |  Branch (1710:6): [True: 0, False: 2.13M]
  ------------------
 1711|      0|    const char16_t* result = nullptr;
 1712|      0|    UResourceBundle *tempRes = ures_getByIndex(resB, sIndex, nullptr, status);
  ------------------
  |  | 1660|      0|#define ures_getByIndex U_ICU_ENTRY_POINT_RENAME(ures_getByIndex)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1713|      0|    result = ures_getString(tempRes, len, status);
  ------------------
  |  | 1675|      0|#define ures_getString U_ICU_ENTRY_POINT_RENAME(ures_getString)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1714|      0|    ures_close(tempRes);
  ------------------
  |  | 1652|      0|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1715|      0|    return result;
 1716|  2.13M|  } else {
 1717|  2.13M|    return res_getString({resB, sIndex}, &resB->getResData(), r, len); 
 1718|  2.13M|  }
 1719|  2.13M|}
uresbund.cpp:_ZN12_GLOBAL__N_116init_resb_resultEP18UResourceDataEntryjPKciPK15UResourceBundlePS4_P10UErrorCode:
 1480|   630k|        UResourceBundle *resB, UErrorCode *status) {
 1481|   630k|    return init_resb_result(
 1482|   630k|        dataEntry, r, key, idx,
 1483|   630k|        container->fValidLocaleDataEntry, container->fResPath, 0, resB, status);
 1484|   630k|}
uresbund.cpp:_ZN12_GLOBAL__N_116init_resb_resultEP18UResourceDataEntryjPKciS1_S3_iP15UResourceBundleP10UErrorCode:
 1389|   631k|        UResourceBundle *resB, UErrorCode *status) {
 1390|       |    // TODO: When an error occurs: Should we return nullptr vs. resB?
 1391|   631k|    if(status == nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (1391:8): [True: 0, False: 631k]
  |  Branch (1391:29): [True: 0, False: 631k]
  ------------------
 1392|      0|        return resB;
 1393|      0|    }
 1394|   631k|    if (validLocaleDataEntry == nullptr) {
  ------------------
  |  Branch (1394:9): [True: 0, False: 631k]
  ------------------
 1395|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
 1396|      0|        return nullptr;
 1397|      0|    }
 1398|   631k|    if(RES_GET_TYPE(r) == URES_ALIAS) {
  ------------------
  |  |   68|   631k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  |  Branch (1398:8): [True: 835, False: 630k]
  ------------------
 1399|       |        // This is an alias, need to exchange with real data.
 1400|    835|        if(recursionDepth >= URES_MAX_ALIAS_LEVEL) {
  ------------------
  |  |   33|    835|#define URES_MAX_ALIAS_LEVEL 256
  ------------------
  |  Branch (1400:12): [True: 0, False: 835]
  ------------------
 1401|      0|            *status = U_TOO_MANY_ALIASES_ERROR;
 1402|      0|            return resB;
 1403|      0|        }
 1404|    835|        return getAliasTargetAsResourceBundle(
 1405|    835|            dataEntry->fData, r, key, idx,
 1406|    835|            validLocaleDataEntry, containerResPath, recursionDepth, resB, status);
 1407|    835|    }
 1408|   630k|    if(resB == nullptr) {
  ------------------
  |  Branch (1408:8): [True: 190k, False: 439k]
  ------------------
 1409|   190k|        resB = static_cast<UResourceBundle*>(uprv_malloc(sizeof(UResourceBundle)));
  ------------------
  |  | 1524|   190k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|   190k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   190k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   190k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1410|   190k|        if (resB == nullptr) {
  ------------------
  |  Branch (1410:13): [True: 0, False: 190k]
  ------------------
 1411|      0|            *status = U_MEMORY_ALLOCATION_ERROR;
 1412|      0|            return nullptr;
 1413|      0|        }
 1414|   190k|        ures_setIsStackObject(resB, false);
 1415|   190k|        resB->fResPath = nullptr;
 1416|   190k|        resB->fResPathLen = 0;
 1417|   439k|    } else {
 1418|   439k|        if(resB->fData != nullptr) {
  ------------------
  |  Branch (1418:12): [True: 437k, False: 1.82k]
  ------------------
 1419|   437k|            entryClose(resB->fData);
 1420|   437k|        }
 1421|   439k|        if(resB->fVersion != nullptr) {
  ------------------
  |  Branch (1421:12): [True: 0, False: 439k]
  ------------------
 1422|      0|            uprv_free(resB->fVersion);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1423|      0|        }
 1424|       |        /* 
 1425|       |        weiv: if stack object was passed in, it doesn't really need to be reinited,
 1426|       |        since the purpose of initing is to remove stack junk. However, at this point 
 1427|       |        we would not do anything to an allocated object, so stack object should be
 1428|       |        treated the same
 1429|       |        */
 1430|       |        /*
 1431|       |        if(ures_isStackObject(resB) != false) {
 1432|       |        ures_initStackObject(resB);
 1433|       |        }
 1434|       |        */
 1435|   439k|        if(containerResPath != resB->fResPath) {
  ------------------
  |  Branch (1435:12): [True: 3.08k, False: 436k]
  ------------------
 1436|  3.08k|            ures_freeResPath(resB);
 1437|  3.08k|        }
 1438|   439k|    }
 1439|   630k|    resB->fData = dataEntry;
 1440|   630k|    entryIncrease(resB->fData);
 1441|   630k|    resB->fHasFallback = false;
 1442|   630k|    resB->fIsTopLevel = false;
 1443|   630k|    resB->fIndex = -1;
 1444|   630k|    resB->fKey = key; 
 1445|   630k|    resB->fValidLocaleDataEntry = validLocaleDataEntry;
 1446|   630k|    if(containerResPath != resB->fResPath) {
  ------------------
  |  Branch (1446:8): [True: 6.13k, False: 624k]
  ------------------
 1447|  6.13k|        ures_appendResPath(
 1448|  6.13k|            resB, containerResPath, static_cast<int32_t>(uprv_strlen(containerResPath)), status);
  ------------------
  |  |   37|  6.13k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  6.13k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1449|  6.13k|    }
 1450|   630k|    if(key != nullptr) {
  ------------------
  |  Branch (1450:8): [True: 629k, False: 951]
  ------------------
 1451|   629k|        ures_appendResPath(resB, key, static_cast<int32_t>(uprv_strlen(key)), status);
  ------------------
  |  |   37|   629k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|   629k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1452|   629k|        if(resB->fResPath[resB->fResPathLen-1] != RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|   629k|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (1452:12): [True: 628k, False: 1.10k]
  ------------------
 1453|   628k|            ures_appendResPath(resB, RES_PATH_SEPARATOR_S, 1, status);
  ------------------
  |  |   61|   628k|#define RES_PATH_SEPARATOR_S   "/"
  ------------------
 1454|   628k|        }
 1455|   629k|    } else if(idx >= 0) {
  ------------------
  |  Branch (1455:15): [True: 951, False: 0]
  ------------------
 1456|    951|        char buf[256];
 1457|    951|        int32_t len = T_CString_integerToString(buf, idx, 10);
  ------------------
  |  |   67|    951|#define T_CString_integerToString U_ICU_ENTRY_POINT_RENAME(T_CString_integerToString)
  |  |  ------------------
  |  |  |  |  123|    951|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    951|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    951|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1458|    951|        ures_appendResPath(resB, buf, len, status);
 1459|    951|        if(resB->fResPath[resB->fResPathLen-1] != RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|    951|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (1459:12): [True: 951, False: 0]
  ------------------
 1460|    951|            ures_appendResPath(resB, RES_PATH_SEPARATOR_S, 1, status);
  ------------------
  |  |   61|    951|#define RES_PATH_SEPARATOR_S   "/"
  ------------------
 1461|    951|        }
 1462|    951|    }
 1463|       |    /* Make sure that Purify doesn't complain about uninitialized memory copies. */
 1464|   630k|    {
 1465|   630k|        int32_t usedLen = ((resB->fResBuf == resB->fResPath) ? resB->fResPathLen : 0);
  ------------------
  |  Branch (1465:28): [True: 630k, False: 0]
  ------------------
 1466|   630k|        uprv_memset(resB->fResBuf + usedLen, 0, sizeof(resB->fResBuf) - usedLen);
  ------------------
  |  |  100|   630k|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|   630k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1467|   630k|    }
 1468|       |
 1469|   630k|    resB->fVersion = nullptr;
 1470|   630k|    resB->fRes = r;
 1471|   630k|    resB->fSize = res_countArrayItems(&resB->getResData(), resB->fRes);
  ------------------
  |  |  197|   630k|#define res_countArrayItems U_ICU_ENTRY_POINT_RENAME(res_countArrayItems)
  |  |  ------------------
  |  |  |  |  123|   630k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   630k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   630k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1472|   630k|    ResourceTracer(resB).trace("get");
 1473|   630k|    return resB;
 1474|   630k|}
uresbund.cpp:_ZN12_GLOBAL__N_130getAliasTargetAsResourceBundleERK12ResourceDatajPKciP18UResourceDataEntryS4_iP15UResourceBundleP10UErrorCode:
 1166|    835|        UResourceBundle *resB, UErrorCode *status) {
 1167|       |    // TODO: When an error occurs: Should we return nullptr vs. resB?
 1168|    835|    if (U_FAILURE(*status)) { return resB; }
  ------------------
  |  Branch (1168:9): [True: 0, False: 835]
  ------------------
 1169|    835|    U_ASSERT(RES_GET_TYPE(r) == URES_ALIAS);
  ------------------
  |  |   35|    835|#   define U_ASSERT(exp) (void)0
  ------------------
 1170|    835|    int32_t len = 0;
 1171|    835|    const char16_t *alias = res_getAlias(&resData, r, &len);
  ------------------
  |  |  199|    835|#define res_getAlias U_ICU_ENTRY_POINT_RENAME(res_getAlias)
  |  |  ------------------
  |  |  |  |  123|    835|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    835|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    835|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1172|    835|    if(len <= 0) {
  ------------------
  |  Branch (1172:8): [True: 0, False: 835]
  ------------------
 1173|       |        // bad alias
 1174|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
 1175|      0|        return resB;
 1176|      0|    }
 1177|       |
 1178|       |    // Copy the UTF-16 alias string into an invariant-character string.
 1179|       |    //
 1180|       |    // We do this so that res_findResource() can modify the path,
 1181|       |    // which allows us to remove redundant _res_findResource() variants
 1182|       |    // in uresdata.c.
 1183|       |    // res_findResource() now NUL-terminates each segment so that table keys
 1184|       |    // can always be compared with strcmp() instead of strncmp().
 1185|       |    // Saves code there and simplifies testing and code coverage.
 1186|       |    //
 1187|       |    // markus 2003oct17
 1188|    835|    CharString chAlias;
 1189|    835|    chAlias.appendInvariantChars(alias, len, *status);
 1190|    835|    if (U_FAILURE(*status)) {
  ------------------
  |  Branch (1190:9): [True: 0, False: 835]
  ------------------
 1191|      0|        return nullptr;
 1192|      0|    }
 1193|       |
 1194|       |    // We have an alias, now let's cut it up.
 1195|    835|    const char *path = nullptr, *locale = nullptr, *keyPath = nullptr;
 1196|    835|    if(chAlias[0] == RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|    835|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (1196:8): [True: 835, False: 0]
  ------------------
 1197|       |        // There is a path included.
 1198|    835|        char *chAliasData = chAlias.data();
 1199|    835|        char *sep = chAliasData + 1;
 1200|    835|        path = sep;
 1201|    835|        sep = uprv_strchr(sep, RES_PATH_SEPARATOR);
  ------------------
  |  |   40|    835|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|    835|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1202|    835|        if(sep != nullptr) {
  ------------------
  |  Branch (1202:12): [True: 835, False: 0]
  ------------------
 1203|    835|            *sep++ = 0;
 1204|    835|        }
 1205|    835|        if(uprv_strcmp(path, "LOCALE") == 0) {
  ------------------
  |  |   38|    835|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    835|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1205:12): [True: 12, False: 823]
  ------------------
 1206|       |            // This is an XPath alias, starting with "/LOCALE/".
 1207|       |            // It contains the path to a resource which should be looked up
 1208|       |            // starting in the valid locale.
 1209|       |            // TODO: Can/should we forbid a /LOCALE alias without key path?
 1210|       |            //   It seems weird to alias to the same path, just starting from the valid locale.
 1211|       |            //   That will often yield an infinite loop.
 1212|     12|            keyPath = sep;
 1213|       |            // Read from the valid locale which we already have.
 1214|     12|            path = locale = nullptr;
 1215|    823|        } else {
 1216|    823|            if(uprv_strcmp(path, "ICUDATA") == 0) { /* want ICU data */
  ------------------
  |  |   38|    823|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    823|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1216:16): [True: 823, False: 0]
  ------------------
 1217|    823|                path = nullptr;
 1218|    823|            }
 1219|    823|            if (sep == nullptr) {
  ------------------
  |  Branch (1219:17): [True: 0, False: 823]
  ------------------
 1220|       |                // TODO: This ends up using the root bundle. Can/should we forbid this?
 1221|      0|                locale = "";
 1222|    823|            } else {
 1223|    823|                locale = sep;
 1224|    823|                sep = uprv_strchr(sep, RES_PATH_SEPARATOR);
  ------------------
  |  |   40|    823|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|    823|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1225|    823|                if(sep != nullptr) {
  ------------------
  |  Branch (1225:20): [True: 823, False: 0]
  ------------------
 1226|    823|                    *sep++ = 0;
 1227|    823|                }
 1228|    823|                keyPath = sep;
 1229|    823|            }
 1230|    823|        }
 1231|    835|    } else {
 1232|       |        // No path, start with a locale.
 1233|      0|        char *sep = chAlias.data();
 1234|      0|        locale = sep;
 1235|      0|        sep = uprv_strchr(sep, RES_PATH_SEPARATOR);
  ------------------
  |  |   40|      0|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1236|      0|        if(sep != nullptr) {
  ------------------
  |  Branch (1236:12): [True: 0, False: 0]
  ------------------
 1237|      0|            *sep++ = 0;
 1238|      0|        }
 1239|      0|        keyPath = sep;
 1240|      0|        path = validLocaleDataEntry->fPath;
 1241|      0|    }
 1242|       |
 1243|       |    // Got almost everything, let's try to open.
 1244|       |    // First, open the bundle with real data.
 1245|    835|    LocalUResourceBundlePointer mainRes;
 1246|    835|    UResourceDataEntry *dataEntry;
 1247|    835|    if (locale == nullptr) {
  ------------------
  |  Branch (1247:9): [True: 12, False: 823]
  ------------------
 1248|       |        // alias = /LOCALE/keyPath
 1249|       |        // Read from the valid locale which we already have.
 1250|     12|        dataEntry = validLocaleDataEntry;
 1251|    823|    } else {
 1252|    823|        UErrorCode intStatus = U_ZERO_ERROR;
 1253|       |        // TODO: Shouldn't we use ures_open() for locale data bundles (!noFallback)?
 1254|    823|        mainRes.adoptInstead(ures_openDirect(path, locale, &intStatus));
  ------------------
  |  | 1693|    823|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|    823|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    823|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    823|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1255|    823|        if(U_FAILURE(intStatus)) {
  ------------------
  |  Branch (1255:12): [True: 0, False: 823]
  ------------------
 1256|       |            // We failed to open the resource bundle we're aliasing to.
 1257|      0|            *status = intStatus;
 1258|      0|            return resB;
 1259|      0|        }
 1260|    823|        dataEntry = mainRes->fData;
 1261|    823|    }
 1262|       |
 1263|    835|    const char* temp = nullptr;
 1264|    835|    if(keyPath == nullptr) {
  ------------------
  |  Branch (1264:8): [True: 0, False: 835]
  ------------------
 1265|       |        // No key path. This means that we are going to to use the corresponding resource from
 1266|       |        // another bundle.
 1267|       |        // TODO: Why the special code path?
 1268|       |        //   Why not put together a key path from containerResPath + key or idx,
 1269|       |        //   as a comment below suggests, and go into the regular code branch?
 1270|       |        // First, we are going to get a corresponding container
 1271|       |        // resource to the one we are searching.
 1272|      0|        r = dataEntry->fData.rootRes;
 1273|      0|        if(containerResPath) {
  ------------------
  |  Branch (1273:12): [True: 0, False: 0]
  ------------------
 1274|      0|            chAlias.clear().append(containerResPath, *status);
 1275|      0|            if (U_FAILURE(*status)) {
  ------------------
  |  Branch (1275:17): [True: 0, False: 0]
  ------------------
 1276|      0|                return nullptr;
 1277|      0|            }
 1278|      0|            char *aKey = chAlias.data();
 1279|       |            // TODO: should res_findResource() return a new dataEntry, too?
 1280|      0|            r = res_findResource(&dataEntry->fData, r, &aKey, &temp);
  ------------------
  |  |  198|      0|#define res_findResource U_ICU_ENTRY_POINT_RENAME(res_findResource)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1281|      0|        }
 1282|      0|        if(key) {
  ------------------
  |  Branch (1282:12): [True: 0, False: 0]
  ------------------
 1283|       |            // We need to make keyPath from the containerResPath and
 1284|       |            // current key, if there is a key associated.
 1285|      0|            chAlias.clear().append(key, *status);
 1286|      0|            if (U_FAILURE(*status)) {
  ------------------
  |  Branch (1286:17): [True: 0, False: 0]
  ------------------
 1287|      0|                return nullptr;
 1288|      0|            }
 1289|      0|            char *aKey = chAlias.data();
 1290|      0|            r = res_findResource(&dataEntry->fData, r, &aKey, &temp);
  ------------------
  |  |  198|      0|#define res_findResource U_ICU_ENTRY_POINT_RENAME(res_findResource)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1291|      0|        } else if(idx != -1) {
  ------------------
  |  Branch (1291:19): [True: 0, False: 0]
  ------------------
 1292|       |            // If there is no key, but there is an index, try to get by the index.
 1293|       |            // Here we have either a table or an array, so get the element.
 1294|      0|            int32_t type = RES_GET_TYPE(r);
  ------------------
  |  |   68|      0|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 1295|      0|            if(URES_IS_TABLE(type)) {
  ------------------
  |  |   84|      0|#define URES_IS_TABLE(type) ((int32_t)(type)==URES_TABLE || (int32_t)(type)==URES_TABLE16 || (int32_t)(type)==URES_TABLE32)
  |  |  ------------------
  |  |  |  Branch (84:30): [True: 0, False: 0]
  |  |  |  Branch (84:61): [True: 0, False: 0]
  |  |  |  Branch (84:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1296|      0|                const char *aKey;
 1297|      0|                r = res_getTableItemByIndex(&dataEntry->fData, r, idx, &aKey);
  ------------------
  |  |  206|      0|#define res_getTableItemByIndex U_ICU_ENTRY_POINT_RENAME(res_getTableItemByIndex)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1298|      0|            } else { /* array */
 1299|      0|                r = res_getArrayItem(&dataEntry->fData, r, idx);
  ------------------
  |  |  200|      0|#define res_getArrayItem U_ICU_ENTRY_POINT_RENAME(res_getArrayItem)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1300|      0|            }
 1301|      0|        }
 1302|      0|        if(r != RES_BOGUS) {
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1302:12): [True: 0, False: 0]
  ------------------
 1303|      0|            resB = init_resb_result(
 1304|      0|                dataEntry, r, temp, -1, validLocaleDataEntry, nullptr, recursionDepth+1,
 1305|      0|                resB, status);
 1306|      0|        } else {
 1307|      0|            *status = U_MISSING_RESOURCE_ERROR;
 1308|      0|        }
 1309|    835|    } else {
 1310|       |        // This one is a bit trickier.
 1311|       |        // We start finding keys, but after we resolve one alias, the path might continue.
 1312|       |        // Consider:
 1313|       |        //     aliastest:alias { "testtypes/anotheralias/Sequence" }
 1314|       |        //     anotheralias:alias { "/ICUDATA/sh/CollationElements" }
 1315|       |        // aliastest resource should finally have the sequence, not collation elements.
 1316|    835|        CharString pathBuf(keyPath, *status);
 1317|    835|        if (U_FAILURE(*status)) {
  ------------------
  |  Branch (1317:13): [True: 0, False: 835]
  ------------------
 1318|      0|            return nullptr;
 1319|      0|        }
 1320|    835|        char *myPath = pathBuf.data();
 1321|    835|        containerResPath = nullptr;
 1322|       |        // Now we have fallback following here.
 1323|    860|        for(;;) {
 1324|    860|            r = dataEntry->fData.rootRes;
 1325|       |            // TODO: Move  containerResPath = nullptr  to here,
 1326|       |            // consistent with restarting from the rootRes of another bundle?!
 1327|       |
 1328|       |            // This loop handles 'found' resources over several levels.
 1329|  1.69k|            while(*myPath && U_SUCCESS(*status)) {
  ------------------
  |  Branch (1329:19): [True: 860, False: 835]
  |  Branch (1329:30): [True: 860, False: 0]
  ------------------
 1330|    860|                r = res_findResource(&(dataEntry->fData), r, &myPath, &temp);
  ------------------
  |  |  198|    860|#define res_findResource U_ICU_ENTRY_POINT_RENAME(res_findResource)
  |  |  ------------------
  |  |  |  |  123|    860|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    860|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    860|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1331|    860|                if(r == RES_BOGUS) {
  ------------------
  |  |   65|    860|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1331:20): [True: 25, False: 835]
  ------------------
 1332|       |                    // No resource found, we don't really want to look anymore on this level.
 1333|     25|                    break;
 1334|     25|                }
 1335|       |                // Found a resource, but it might be an indirection.
 1336|    835|                resB = init_resb_result(
 1337|    835|                    dataEntry, r, temp, -1,
 1338|    835|                    validLocaleDataEntry, containerResPath, recursionDepth+1,
 1339|    835|                    resB, status);
 1340|    835|                if (U_FAILURE(*status)) {
  ------------------
  |  Branch (1340:21): [True: 0, False: 835]
  ------------------
 1341|      0|                    break;
 1342|      0|                }
 1343|    835|                if (temp == nullptr || uprv_strcmp(keyPath, temp) != 0) {
  ------------------
  |  |   38|    835|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    835|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1343:21): [True: 0, False: 835]
  |  Branch (1343:40): [True: 835, False: 0]
  ------------------
 1344|       |                    // The call to init_resb_result() above will set resB->fKeyPath to be
 1345|       |                    // the same as resB->fKey,
 1346|       |                    // throwing away any additional path elements if we had them --
 1347|       |                    // if the key path wasn't just a single resource ID, clear out
 1348|       |                    // the bundle's key path and re-set it to be equal to keyPath.
 1349|    835|                    ures_freeResPath(resB);
 1350|    835|                    ures_appendResPath(resB, keyPath, static_cast<int32_t>(uprv_strlen(keyPath)), status);
  ------------------
  |  |   37|    835|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|    835|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1351|    835|                    if(resB->fResPath[resB->fResPathLen-1] != RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|    835|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (1351:24): [True: 835, False: 0]
  ------------------
 1352|    835|                        ures_appendResPath(resB, RES_PATH_SEPARATOR_S, 1, status);
  ------------------
  |  |   61|    835|#define RES_PATH_SEPARATOR_S   "/"
  ------------------
 1353|    835|                    }
 1354|    835|                    if (U_FAILURE(*status)) {
  ------------------
  |  Branch (1354:25): [True: 0, False: 835]
  ------------------
 1355|      0|                        break;
 1356|      0|                    }
 1357|    835|                }
 1358|    835|                r = resB->fRes; /* switch to a new resource, possibly a new tree */
 1359|    835|                dataEntry = resB->fData;
 1360|    835|                containerResPath = resB->fResPath;
 1361|    835|            }
 1362|    860|            if (U_FAILURE(*status) || r != RES_BOGUS) {
  ------------------
  |  |   65|    860|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1362:17): [True: 0, False: 860]
  |  Branch (1362:39): [True: 835, False: 25]
  ------------------
 1363|    835|                break;
 1364|    835|            }
 1365|       |            // Fall back to the parent bundle, if there is one.
 1366|     25|            dataEntry = dataEntry->fParent;
 1367|     25|            if (dataEntry == nullptr) {
  ------------------
  |  Branch (1367:17): [True: 0, False: 25]
  ------------------
 1368|      0|                *status = U_MISSING_RESOURCE_ERROR;
 1369|      0|                break;
 1370|      0|            }
 1371|       |            // Copy the same keyPath again.
 1372|     25|            myPath = pathBuf.data();
 1373|     25|            uprv_strcpy(myPath, keyPath);
  ------------------
  |  |   36|     25|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|     25|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1374|     25|        }
 1375|    835|    }
 1376|    835|    if(mainRes.getAlias() == resB) {
  ------------------
  |  Branch (1376:8): [True: 0, False: 835]
  ------------------
 1377|      0|        mainRes.orphan();
 1378|      0|    }
 1379|    835|    ResourceTracer(resB).maybeTrace("getalias");
 1380|    835|    return resB;
 1381|    835|}
uresbund.cpp:_ZL21getTableItemByKeyPathPK12ResourceDatajPKc:
 2059|   145k|static Resource getTableItemByKeyPath(const ResourceData *pResData, Resource table, const char *key) {
 2060|   145k|  Resource resource = table;  /* The current resource */
 2061|   145k|  icu::CharString path;
 2062|   145k|  UErrorCode errorCode = U_ZERO_ERROR;
 2063|   145k|  path.append(key, errorCode);
 2064|   145k|  if (U_FAILURE(errorCode)) { return RES_BOGUS; }
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (2064:7): [True: 0, False: 145k]
  ------------------
 2065|   145k|  char *pathPart = path.data();  /* Path from current resource to desired resource */
 2066|   145k|  UResType type = static_cast<UResType>(RES_GET_TYPE(resource)); /* the current resource type */
  ------------------
  |  |   68|   145k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 2067|   292k|  while (*pathPart && resource != RES_BOGUS && URES_IS_CONTAINER(type)) {
  ------------------
  |  |   65|   438k|#define RES_BOGUS 0xffffffff
  ------------------
                while (*pathPart && resource != RES_BOGUS && URES_IS_CONTAINER(type)) {
  ------------------
  |  |   85|   146k|#define URES_IS_CONTAINER(type) (URES_IS_TABLE(type) || URES_IS_ARRAY(type))
  |  |  ------------------
  |  |  |  |   84|   293k|#define URES_IS_TABLE(type) ((int32_t)(type)==URES_TABLE || (int32_t)(type)==URES_TABLE16 || (int32_t)(type)==URES_TABLE32)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (84:30): [True: 142k, False: 3.66k]
  |  |  |  |  |  Branch (84:61): [True: 3.66k, False: 0]
  |  |  |  |  |  Branch (84:94): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define URES_IS_CONTAINER(type) (URES_IS_TABLE(type) || URES_IS_ARRAY(type))
  |  |  ------------------
  |  |  |  |   83|      0|#define URES_IS_ARRAY(type) ((int32_t)(type)==URES_ARRAY || (int32_t)(type)==URES_ARRAY16)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (83:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (83:61): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2067:10): [True: 146k, False: 145k]
  |  Branch (2067:23): [True: 146k, False: 7]
  ------------------
 2068|   146k|    char *nextPathPart = uprv_strchr(pathPart, RES_PATH_SEPARATOR);
  ------------------
  |  |   40|   146k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|   146k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2069|   146k|    if (nextPathPart != nullptr) {
  ------------------
  |  Branch (2069:9): [True: 1.89k, False: 144k]
  ------------------
 2070|  1.89k|      *nextPathPart = 0;  /* Terminating null for this part of path. */
 2071|  1.89k|      nextPathPart++;
 2072|   144k|    } else {
 2073|   144k|      nextPathPart = uprv_strchr(pathPart, 0);
  ------------------
  |  |   40|   144k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|   144k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2074|   144k|    }
 2075|   146k|    int32_t t;
 2076|   146k|    const char *pathP = pathPart;
 2077|   146k|    resource = res_getTableItemByKey(pResData, resource, &t, &pathP);
  ------------------
  |  |  207|   146k|#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey)
  |  |  ------------------
  |  |  |  |  123|   146k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   146k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   146k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2078|   146k|    type = static_cast<UResType>(RES_GET_TYPE(resource));
  ------------------
  |  |   68|   146k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 2079|   146k|    pathPart = nextPathPart; 
 2080|   146k|  }
 2081|   145k|  if (*pathPart) {
  ------------------
  |  Branch (2081:7): [True: 7, False: 145k]
  ------------------
 2082|      7|    return RES_BOGUS;
  ------------------
  |  |   65|      7|#define RES_BOGUS 0xffffffff
  ------------------
 2083|      7|  }
 2084|   145k|  return resource;
 2085|   145k|}
uresbund.cpp:_ZL10createPathPKciS0_iS0_RN6icu_7810CharStringEP10UErrorCode:
 2093|   300k|                       UErrorCode* status) {
 2094|       |    // This is a utility function used by ures_getByKeyWithFallback() below.  This function builds a path from
 2095|       |    // resPath and inKey, returning the result in `path`.  Originally, this function just cleared `path` and
 2096|       |    // appended resPath and inKey to it, but that caused problems for horizontal inheritance.
 2097|       |    //
 2098|       |    // In normal cases, resPath is the same as origResPath, but if ures_getByKeyWithFallback() has followed an
 2099|       |    // alias, resPath may be different from origResPath.  Not only may the existing path elements be different,
 2100|       |    // but resPath may also have MORE path elements than origResPath did.  If it does, those additional path
 2101|       |    // elements SUPERSEDE the corresponding elements of inKey.  So this code counts the number of elements in
 2102|       |    // resPath and origResPath and, for each path element in resPath that doesn't have a counterpart in origResPath,
 2103|       |    // deletes a path element from the beginning of inKey.  The remainder of inKey is then appended to
 2104|       |    // resPath to form the result.  (We're not using uprv_strchr() here because resPath and origResPath may
 2105|       |    // not be zero-terminated.)
 2106|   300k|    path.clear();
 2107|   300k|    const char* key = inKey;
 2108|   300k|    if (resPathLen > 0) {
  ------------------
  |  Branch (2108:9): [True: 298k, False: 1.78k]
  ------------------
 2109|   298k|        path.append(resPath, resPathLen, *status);
 2110|   298k|        if (U_SUCCESS(*status)) {
  ------------------
  |  Branch (2110:13): [True: 298k, False: 0]
  ------------------
 2111|   298k|            const char* resPathLimit = resPath + resPathLen;
 2112|   298k|            const char* origResPathLimit = origResPath + origResPathLen;
 2113|   298k|            const char* resPathPtr = resPath;
 2114|   298k|            const char* origResPathPtr = origResPath;
 2115|       |            
 2116|       |            // Remove from the beginning of resPath the number of segments that are contained in origResPath.
 2117|       |            // If origResPath has MORE segments than resPath, this will leave resPath as the empty string.
 2118|   597k|            while (origResPathPtr < origResPathLimit && resPathPtr < resPathLimit) {
  ------------------
  |  Branch (2118:20): [True: 298k, False: 298k]
  |  Branch (2118:57): [True: 298k, False: 0]
  ------------------
 2119|  3.58M|                while (origResPathPtr < origResPathLimit && *origResPathPtr != RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|  3.58M|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2119:24): [True: 3.58M, False: 0]
  |  Branch (2119:61): [True: 3.28M, False: 298k]
  ------------------
 2120|  3.28M|                    ++origResPathPtr;
 2121|  3.28M|                }
 2122|   298k|                if (origResPathPtr < origResPathLimit && *origResPathPtr == RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|   298k|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2122:21): [True: 298k, False: 0]
  |  Branch (2122:58): [True: 298k, False: 0]
  ------------------
 2123|   298k|                    ++origResPathPtr;
 2124|   298k|                }
 2125|  3.58M|                while (resPathPtr < resPathLimit && *resPathPtr != RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|  3.58M|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2125:24): [True: 3.58M, False: 0]
  |  Branch (2125:53): [True: 3.28M, False: 298k]
  ------------------
 2126|  3.28M|                    ++resPathPtr;
 2127|  3.28M|                }
 2128|   298k|                if (resPathPtr < resPathLimit && *resPathPtr == RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|   298k|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2128:21): [True: 298k, False: 0]
  |  Branch (2128:50): [True: 298k, False: 0]
  ------------------
 2129|   298k|                    ++resPathPtr;
 2130|   298k|                }
 2131|   298k|            }
 2132|       |            
 2133|       |            // New remove from the beginning of `key` the number of segments remaining in resPath.
 2134|       |            // If resPath has more segments than `key` does, `key` will end up empty.
 2135|   298k|            while (resPathPtr < resPathLimit && *key != '\0') {
  ------------------
  |  Branch (2135:20): [True: 0, False: 298k]
  |  Branch (2135:49): [True: 0, False: 0]
  ------------------
 2136|      0|                while (resPathPtr < resPathLimit && *resPathPtr != RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|      0|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2136:24): [True: 0, False: 0]
  |  Branch (2136:53): [True: 0, False: 0]
  ------------------
 2137|      0|                    ++resPathPtr;
 2138|      0|                }
 2139|      0|                if (resPathPtr < resPathLimit && *resPathPtr == RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|      0|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2139:21): [True: 0, False: 0]
  |  Branch (2139:50): [True: 0, False: 0]
  ------------------
 2140|      0|                    ++resPathPtr;
 2141|      0|                }
 2142|      0|                while (*key != '\0' && *key != RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|      0|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2142:24): [True: 0, False: 0]
  |  Branch (2142:40): [True: 0, False: 0]
  ------------------
 2143|      0|                    ++key;
 2144|      0|                }
 2145|      0|                if (*key == RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|      0|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2145:21): [True: 0, False: 0]
  ------------------
 2146|      0|                    ++key;
 2147|      0|                }
 2148|      0|            }
 2149|   298k|        }
 2150|       |        // Finally, append what's left of `key` to `path`.  What you end up with here is `resPath`, plus
 2151|       |        // any pieces of `key` that aren't superseded by `resPath`.
 2152|       |        // Or, to put it another way, calculate <#-segments-in-key> - (<#-segments-in-resPath> - <#-segments-in-origResPath>),
 2153|       |        // and append that many segments from the end of `key` to `resPath` to produce the result.
 2154|   298k|        path.append(key, *status);
 2155|   298k|    } else {
 2156|  1.78k|        path.append(inKey, *status);
 2157|  1.78k|    }
 2158|   300k|}
uresbund.cpp:_ZL16ures_freeResPathP15UResourceBundle:
 1113|   962k|static void ures_freeResPath(UResourceBundle *resB) {
 1114|   962k|    if (resB->fResPath && resB->fResPath != resB->fResBuf) {
  ------------------
  |  Branch (1114:9): [True: 630k, False: 331k]
  |  Branch (1114:27): [True: 0, False: 630k]
  ------------------
 1115|      0|        uprv_free(resB->fResPath);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1116|      0|    }
 1117|   962k|    resB->fResPath = nullptr;
 1118|   962k|    resB->fResPathLen = 0;
 1119|   962k|}
uresbund.cpp:_ZN12_GLOBAL__N_123getAllItemsWithFallbackEPK15UResourceBundleRN6icu_7817ResourceDataValueERNS3_12ResourceSinkER10UErrorCode:
 2278|  2.11k|        ResourceSink &sink, UErrorCode &errorCode) {
 2279|  2.11k|    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (2279:9): [True: 0, False: 2.11k]
  ------------------
 2280|       |    // We recursively enumerate child-first,
 2281|       |    // only storing parent items in the absence of child items.
 2282|       |    // The sink needs to store a placeholder value for the no-fallback/no-inheritance marker
 2283|       |    // to prevent a parent item from being stored.
 2284|       |    //
 2285|       |    // It would be possible to recursively enumerate parent-first,
 2286|       |    // overriding parent items with child items.
 2287|       |    // When the sink sees the no-fallback/no-inheritance marker,
 2288|       |    // then it would remove the parent's item.
 2289|       |    // We would deserialize parent values even though they are overridden in a child bundle.
 2290|  2.11k|    value.setData(bundle->getResData());
 2291|  2.11k|    value.setValidLocaleDataEntry(bundle->fValidLocaleDataEntry);
 2292|  2.11k|    UResourceDataEntry *parentEntry = bundle->fData->fParent;
 2293|  2.11k|    UBool hasParent = parentEntry != nullptr && U_SUCCESS(parentEntry->fBogus);
  ------------------
  |  Branch (2293:23): [True: 1.11k, False: 995]
  |  Branch (2293:49): [True: 1.11k, False: 0]
  ------------------
 2294|  2.11k|    value.setResource(bundle->fRes, ResourceTracer(bundle));
 2295|  2.11k|    sink.put(bundle->fKey, value, !hasParent, errorCode);
 2296|  2.11k|    if (hasParent) {
  ------------------
  |  Branch (2296:9): [True: 1.11k, False: 995]
  ------------------
 2297|       |        // We might try to query the sink whether
 2298|       |        // any fallback from the parent bundle is still possible.
 2299|       |
 2300|       |        // Turn the parent UResourceDataEntry into a UResourceBundle,
 2301|       |        // much like in ures_openWithType().
 2302|       |        // TODO: See if we can refactor ures_getByKeyWithFallback()
 2303|       |        // and pull out an inner function that takes and returns a UResourceDataEntry
 2304|       |        // so that we need not create UResourceBundle objects.
 2305|  1.11k|        StackUResourceBundle parentBundle;
 2306|  1.11k|        UResourceBundle &parentRef = parentBundle.ref();
 2307|  1.11k|        parentRef.fData = parentEntry;
 2308|  1.11k|        parentRef.fValidLocaleDataEntry = bundle->fValidLocaleDataEntry;
 2309|  1.11k|        parentRef.fHasFallback = !parentRef.getResData().noFallback;
 2310|  1.11k|        parentRef.fIsTopLevel = true;
 2311|  1.11k|        parentRef.fRes = parentRef.getResData().rootRes;
 2312|  1.11k|        parentRef.fSize = res_countArrayItems(&parentRef.getResData(), parentRef.fRes);
  ------------------
  |  |  197|  1.11k|#define res_countArrayItems U_ICU_ENTRY_POINT_RENAME(res_countArrayItems)
  |  |  ------------------
  |  |  |  |  123|  1.11k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.11k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.11k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2313|  1.11k|        parentRef.fIndex = -1;
 2314|  1.11k|        entryIncrease(parentEntry);
 2315|       |
 2316|       |        // Look up the container item in the parent bundle.
 2317|  1.11k|        StackUResourceBundle containerBundle;
 2318|  1.11k|        const UResourceBundle *rb;
 2319|  1.11k|        UErrorCode pathErrorCode = U_ZERO_ERROR;  // Ignore if parents up to root do not have this path.
 2320|  1.11k|        if (bundle->fResPath == nullptr || *bundle->fResPath == 0) {
  ------------------
  |  Branch (2320:13): [True: 0, False: 1.11k]
  |  Branch (2320:44): [True: 0, False: 1.11k]
  ------------------
 2321|      0|            rb = parentBundle.getAlias();
 2322|  1.11k|        } else {
 2323|  1.11k|            rb = ures_getByKeyWithFallback(parentBundle.getAlias(), bundle->fResPath,
  ------------------
  |  | 1662|  1.11k|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|  1.11k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.11k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.11k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2324|  1.11k|                                           containerBundle.getAlias(), &pathErrorCode);
 2325|  1.11k|        }
 2326|  1.11k|        if (U_SUCCESS(pathErrorCode)) {
  ------------------
  |  Branch (2326:13): [True: 1.11k, False: 0]
  ------------------
 2327|  1.11k|            getAllItemsWithFallback(rb, value, sink, errorCode);
 2328|  1.11k|        }
 2329|  1.11k|    }
 2330|  2.11k|}
uresbund.cpp:_ZL15getFallbackDataPK15UResourceBundlePPKcPjP10UErrorCode:
  319|    475|        const char **resTag, Resource *res, UErrorCode *status) {
  320|    475|    UResourceDataEntry *dataEntry = resBundle->fData;
  321|    475|    int32_t indexR = -1;
  322|    475|    int32_t i = 0;
  323|    475|    *res = RES_BOGUS;
  ------------------
  |  |   65|    475|#define RES_BOGUS 0xffffffff
  ------------------
  324|    475|    if(dataEntry == nullptr) {
  ------------------
  |  Branch (324:8): [True: 0, False: 475]
  ------------------
  325|      0|        *status = U_MISSING_RESOURCE_ERROR;
  326|      0|        return nullptr;
  327|      0|    }
  328|    475|    if(dataEntry->fBogus == U_ZERO_ERROR) { /* if this resource is real, */
  ------------------
  |  Branch (328:8): [True: 475, False: 0]
  ------------------
  329|    475|        *res = res_getTableItemByKey(&(dataEntry->fData), dataEntry->fData.rootRes, &indexR, resTag); /* try to get data from there */
  ------------------
  |  |  207|    475|#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey)
  |  |  ------------------
  |  |  |  |  123|    475|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    475|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    475|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  330|    475|        i++;
  331|    475|    }
  332|    475|    if(resBundle->fHasFallback) {
  ------------------
  |  Branch (332:8): [True: 475, False: 0]
  ------------------
  333|       |        // Otherwise, we'll look in parents.
  334|    998|        while(*res == RES_BOGUS && dataEntry->fParent != nullptr) {
  ------------------
  |  |   65|  1.99k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (334:15): [True: 523, False: 475]
  |  Branch (334:36): [True: 523, False: 0]
  ------------------
  335|    523|            dataEntry = dataEntry->fParent;
  336|    523|            if(dataEntry->fBogus == U_ZERO_ERROR) {
  ------------------
  |  Branch (336:16): [True: 523, False: 0]
  ------------------
  337|    523|                i++;
  338|    523|                *res = res_getTableItemByKey(&(dataEntry->fData), dataEntry->fData.rootRes, &indexR, resTag);
  ------------------
  |  |  207|    523|#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey)
  |  |  ------------------
  |  |  |  |  123|    523|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    523|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    523|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  339|    523|            }
  340|    523|        }
  341|    475|    }
  342|       |
  343|    475|    if(*res == RES_BOGUS) {
  ------------------
  |  |   65|    475|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (343:8): [True: 0, False: 475]
  ------------------
  344|       |        // If the resource is not found, we need to give an error.
  345|      0|        *status = U_MISSING_RESOURCE_ERROR;
  346|      0|        return nullptr;
  347|      0|    }
  348|       |    // If the resource is found in parents, we need to adjust the error.
  349|    475|    if(i>1) {
  ------------------
  |  Branch (349:8): [True: 475, False: 0]
  ------------------
  350|    475|        if(uprv_strcmp(dataEntry->fName, uloc_getDefault())==0 || uprv_strcmp(dataEntry->fName, kRootLocaleName)==0) {
  ------------------
  |  |   38|    475|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    475|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
                      if(uprv_strcmp(dataEntry->fName, uloc_getDefault())==0 || uprv_strcmp(dataEntry->fName, kRootLocaleName)==0) {
  ------------------
  |  |   38|    475|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    475|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (350:12): [True: 0, False: 475]
  |  Branch (350:67): [True: 7, False: 468]
  ------------------
  351|      7|            *status = U_USING_DEFAULT_WARNING;
  352|    468|        } else {
  353|    468|            *status = U_USING_FALLBACK_WARNING;
  354|    468|        }
  355|    475|    }
  356|    475|    return dataEntry;
  357|    475|}
uresbund.cpp:_ZL17ures_openWithTypeP15UResourceBundlePKcS2_12UResOpenTypeP10UErrorCode:
 2712|   621k|                  UResOpenType openType, UErrorCode* status) {
 2713|   621k|    if(U_FAILURE(*status)) {
  ------------------
  |  Branch (2713:8): [True: 0, False: 621k]
  ------------------
 2714|      0|        return nullptr;
 2715|      0|    }
 2716|       |
 2717|   621k|    UResourceDataEntry *entry;
 2718|   621k|    if(openType != URES_OPEN_DIRECT) {
  ------------------
  |  Branch (2718:8): [True: 1.54k, False: 620k]
  ------------------
 2719|  1.54k|        if (localeID == nullptr) {
  ------------------
  |  Branch (2719:13): [True: 0, False: 1.54k]
  ------------------
 2720|      0|            localeID = uloc_getDefault();
  ------------------
  |  | 1118|      0|#define uloc_getDefault U_ICU_ENTRY_POINT_RENAME(uloc_getDefault)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2721|      0|        }
 2722|       |        /* first "canonicalize" the locale ID */
 2723|  1.54k|        CharString canonLocaleID = ulocimp_getBaseName(localeID, *status);
  ------------------
  |  | 1199|  1.54k|#define ulocimp_getBaseName U_ICU_ENTRY_POINT_RENAME(ulocimp_getBaseName)
  |  |  ------------------
  |  |  |  |  123|  1.54k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.54k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.54k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2724|  1.54k|        if(U_FAILURE(*status)) {
  ------------------
  |  Branch (2724:12): [True: 0, False: 1.54k]
  ------------------
 2725|      0|            *status = U_ILLEGAL_ARGUMENT_ERROR;
 2726|      0|            return nullptr;
 2727|      0|        }
 2728|  1.54k|        entry = entryOpen(path, canonLocaleID.data(), openType, status);
 2729|   620k|    } else {
 2730|   620k|        entry = entryOpenDirect(path, localeID, status);
 2731|   620k|    }
 2732|   621k|    if(U_FAILURE(*status)) {
  ------------------
  |  Branch (2732:8): [True: 0, False: 621k]
  ------------------
 2733|      0|        return nullptr;
 2734|      0|    }
 2735|   621k|    if(entry == nullptr) {
  ------------------
  |  Branch (2735:8): [True: 0, False: 621k]
  ------------------
 2736|      0|        *status = U_MISSING_RESOURCE_ERROR;
 2737|      0|        return nullptr;
 2738|      0|    }
 2739|       |
 2740|   621k|    UBool isStackObject;
 2741|   621k|    if(r == nullptr) {
  ------------------
  |  Branch (2741:8): [True: 621k, False: 0]
  ------------------
 2742|   621k|        r = static_cast<UResourceBundle*>(uprv_malloc(sizeof(UResourceBundle)));
  ------------------
  |  | 1524|   621k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|   621k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   621k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   621k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2743|   621k|        if(r == nullptr) {
  ------------------
  |  Branch (2743:12): [True: 0, False: 621k]
  ------------------
 2744|      0|            entryClose(entry);
 2745|      0|            *status = U_MEMORY_ALLOCATION_ERROR;
 2746|      0|            return nullptr;
 2747|      0|        }
 2748|   621k|        isStackObject = false;
 2749|   621k|    } else {  // fill-in
 2750|      0|        isStackObject = ures_isStackObject(r);
 2751|      0|        ures_closeBundle(r, false);
 2752|      0|    }
 2753|   621k|    uprv_memset(r, 0, sizeof(UResourceBundle));
  ------------------
  |  |  100|   621k|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|   621k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2754|   621k|    ures_setIsStackObject(r, isStackObject);
 2755|       |
 2756|   621k|    r->fValidLocaleDataEntry = r->fData = entry;
 2757|   621k|    r->fHasFallback = openType != URES_OPEN_DIRECT && !r->getResData().noFallback;
  ------------------
  |  Branch (2757:23): [True: 1.54k, False: 620k]
  |  Branch (2757:55): [True: 1.54k, False: 0]
  ------------------
 2758|   621k|    r->fIsTopLevel = true;
 2759|   621k|    r->fRes = r->getResData().rootRes;
 2760|   621k|    r->fSize = res_countArrayItems(&r->getResData(), r->fRes);
  ------------------
  |  |  197|   621k|#define res_countArrayItems U_ICU_ENTRY_POINT_RENAME(res_countArrayItems)
  |  |  ------------------
  |  |  |  |  123|   621k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   621k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   621k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2761|   621k|    r->fIndex = -1;
 2762|       |
 2763|   621k|    ResourceTracer(r).traceOpen();
 2764|       |
 2765|   621k|    return r;
 2766|   621k|}
uresbund.cpp:_ZL9entryOpenPKcS0_12UResOpenTypeP10UErrorCode:
  812|  1.54k|                                     UResOpenType openType, UErrorCode* status) {
  813|  1.54k|    U_ASSERT(openType != URES_OPEN_DIRECT);
  ------------------
  |  |   35|  1.54k|#   define U_ASSERT(exp) (void)0
  ------------------
  814|  1.54k|    UErrorCode intStatus = U_ZERO_ERROR;
  815|  1.54k|    UResourceDataEntry *r = nullptr;
  816|  1.54k|    UResourceDataEntry *t1 = nullptr;
  817|  1.54k|    UBool isDefault = false;
  818|  1.54k|    UBool isRoot = false;
  819|  1.54k|    UBool hasRealData = false;
  820|  1.54k|    UBool hasChopped = true;
  821|  1.54k|    UBool usingUSRData = U_USE_USRDATA && ( path == nullptr || uprv_strncmp(path,U_ICUDATA_NAME,8) == 0);
  ------------------
  |  |  157|  3.09k|#define U_USE_USRDATA     0  /**< @internal */
  |  |  ------------------
  |  |  |  Branch (157:27): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  UBool usingUSRData = U_USE_USRDATA && ( path == nullptr || uprv_strncmp(path,U_ICUDATA_NAME,8) == 0);
  ------------------
  |  |   44|      0|#define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (821:45): [True: 0, False: 0]
  |  Branch (821:64): [True: 0, False: 0]
  ------------------
  822|       |
  823|  1.54k|    char name[ULOC_FULLNAME_CAPACITY];
  824|  1.54k|    char usrDataPath[96];
  825|       |
  826|  1.54k|    initCache(status);
  827|       |
  828|  1.54k|    if(U_FAILURE(*status)) {
  ------------------
  |  Branch (828:8): [True: 0, False: 1.54k]
  ------------------
  829|      0|        return nullptr;
  830|      0|    }
  831|       |
  832|  1.54k|    uprv_strncpy(name, localeID, sizeof(name) - 1);
  ------------------
  |  |   43|  1.54k|#define uprv_strncpy(dst, src, size) U_STANDARD_CPP_NAMESPACE strncpy(dst, src, size)
  |  |  ------------------
  |  |  |  |  393|  1.54k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  833|  1.54k|    name[sizeof(name) - 1] = 0;
  834|       |
  835|  1.54k|    if ( usingUSRData ) {
  ------------------
  |  Branch (835:10): [True: 0, False: 1.54k]
  ------------------
  836|      0|        if ( path == nullptr ) {
  ------------------
  |  Branch (836:14): [True: 0, False: 0]
  ------------------
  837|      0|            uprv_strcpy(usrDataPath, U_USRDATA_NAME);
  ------------------
  |  |   36|      0|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  838|      0|        } else {
  839|      0|            uprv_strncpy(usrDataPath, path, sizeof(usrDataPath) - 1);
  ------------------
  |  |   43|      0|#define uprv_strncpy(dst, src, size) U_STANDARD_CPP_NAMESPACE strncpy(dst, src, size)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  840|      0|            usrDataPath[0] = 'u';
  841|      0|            usrDataPath[1] = 's';
  842|      0|            usrDataPath[2] = 'r';
  843|      0|            usrDataPath[sizeof(usrDataPath) - 1] = 0;
  844|      0|        }
  845|      0|    }
  846|       | 
  847|       |    // Note: We need to query the default locale *before* locking resbMutex.
  848|  1.54k|    const char *defaultLocale = uloc_getDefault();
  ------------------
  |  | 1118|  1.54k|#define uloc_getDefault U_ICU_ENTRY_POINT_RENAME(uloc_getDefault)
  |  |  ------------------
  |  |  |  |  123|  1.54k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.54k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.54k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  849|       |
  850|  1.54k|    Mutex lock(&resbMutex);    // Lock resbMutex until the end of this function.
  851|       |
  852|       |    /* We're going to skip all the locales that do not have any data */
  853|  1.54k|    r = findFirstExisting(path, name, defaultLocale, openType, &isRoot, &hasChopped, &isDefault, &intStatus);
  854|       |
  855|       |    // If we failed due to out-of-memory, report the failure and exit early.
  856|  1.54k|    if (intStatus == U_MEMORY_ALLOCATION_ERROR) {
  ------------------
  |  Branch (856:9): [True: 0, False: 1.54k]
  ------------------
  857|      0|        *status = intStatus;
  858|      0|        goto finish;
  859|      0|    }
  860|       |
  861|  1.54k|    if(r != nullptr) { /* if there is one real locale, we can look for parents. */
  ------------------
  |  Branch (861:8): [True: 1.54k, False: 0]
  ------------------
  862|  1.54k|        t1 = r;
  863|  1.54k|        hasRealData = true;
  864|  1.54k|        if ( usingUSRData ) {  /* This code inserts user override data into the inheritance chain */
  ------------------
  |  Branch (864:14): [True: 0, False: 1.54k]
  ------------------
  865|      0|            UErrorCode usrStatus = U_ZERO_ERROR;
  866|      0|            UResourceDataEntry *u1 = init_entry(t1->fName, usrDataPath, &usrStatus);
  867|       |            // If we failed due to out-of-memory, report the failure and exit early.
  868|      0|            if (intStatus == U_MEMORY_ALLOCATION_ERROR) {
  ------------------
  |  Branch (868:17): [True: 0, False: 0]
  ------------------
  869|      0|                *status = intStatus;
  870|      0|                goto finish;
  871|      0|            }
  872|      0|            if ( u1 != nullptr ) {
  ------------------
  |  Branch (872:18): [True: 0, False: 0]
  ------------------
  873|      0|                if(u1->fBogus == U_ZERO_ERROR) {
  ------------------
  |  Branch (873:20): [True: 0, False: 0]
  ------------------
  874|      0|                    u1->fParent = t1;
  875|      0|                    r = u1;
  876|      0|                } else {
  877|       |                    /* the USR override data wasn't found, set it to be deleted */
  878|      0|                    u1->fCountExisting = 0;
  879|      0|                }
  880|      0|            }
  881|      0|        }
  882|  1.54k|        if ((hasChopped || mayHaveParent(name)) && !isRoot) {
  ------------------
  |  Branch (882:14): [True: 1.01k, False: 530]
  |  Branch (882:28): [True: 8, False: 522]
  |  Branch (882:52): [True: 1.02k, False: 0]
  ------------------
  883|  1.02k|            if (!loadParentsExceptRoot(t1, name, UPRV_LENGTHOF(name), usingUSRData, usrDataPath, status)) {
  ------------------
  |  |   99|  1.02k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (883:17): [True: 0, False: 1.02k]
  ------------------
  884|      0|                goto finish;
  885|      0|            }
  886|  1.02k|        }
  887|  1.54k|    }
  888|       |
  889|       |    /* we could have reached this point without having any real data */
  890|       |    /* if that is the case, we need to chain in the default locale   */
  891|  1.54k|    if(r==nullptr && openType == URES_OPEN_LOCALE_DEFAULT_ROOT && !isDefault && !isRoot) {
  ------------------
  |  Branch (891:8): [True: 0, False: 1.54k]
  |  Branch (891:22): [True: 0, False: 0]
  |  Branch (891:67): [True: 0, False: 0]
  |  Branch (891:81): [True: 0, False: 0]
  ------------------
  892|       |        /* insert default locale */
  893|      0|        uprv_strcpy(name, defaultLocale);
  ------------------
  |  |   36|      0|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  894|      0|        r = findFirstExisting(path, name, defaultLocale, openType, &isRoot, &hasChopped, &isDefault, &intStatus);
  895|       |        // If we failed due to out-of-memory, report the failure and exit early.
  896|      0|        if (intStatus == U_MEMORY_ALLOCATION_ERROR) {
  ------------------
  |  Branch (896:13): [True: 0, False: 0]
  ------------------
  897|      0|            *status = intStatus;
  898|      0|            goto finish;
  899|      0|        }
  900|      0|        intStatus = U_USING_DEFAULT_WARNING;
  901|      0|        if(r != nullptr) { /* the default locale exists */
  ------------------
  |  Branch (901:12): [True: 0, False: 0]
  ------------------
  902|      0|            t1 = r;
  903|      0|            hasRealData = true;
  904|      0|            isDefault = true;
  905|       |            // TODO: Why not if (usingUSRData) { ... } like in the non-default-locale code path?
  906|      0|            if ((hasChopped || mayHaveParent(name)) && !isRoot) {
  ------------------
  |  Branch (906:18): [True: 0, False: 0]
  |  Branch (906:32): [True: 0, False: 0]
  |  Branch (906:56): [True: 0, False: 0]
  ------------------
  907|      0|                if (!loadParentsExceptRoot(t1, name, UPRV_LENGTHOF(name), usingUSRData, usrDataPath, status)) {
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (907:21): [True: 0, False: 0]
  ------------------
  908|      0|                    goto finish;
  909|      0|                }
  910|      0|            }
  911|      0|        }
  912|      0|    }
  913|       |
  914|       |    /* we could still have r == nullptr at this point - maybe even default locale is not */
  915|       |    /* present */
  916|  1.54k|    if(r == nullptr) {
  ------------------
  |  Branch (916:8): [True: 0, False: 1.54k]
  ------------------
  917|      0|        uprv_strcpy(name, kRootLocaleName);
  ------------------
  |  |   36|      0|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  918|      0|        r = findFirstExisting(path, name, defaultLocale, openType, &isRoot, &hasChopped, &isDefault, &intStatus);
  919|       |        // If we failed due to out-of-memory, report the failure and exit early.
  920|      0|        if (intStatus == U_MEMORY_ALLOCATION_ERROR) {
  ------------------
  |  Branch (920:13): [True: 0, False: 0]
  ------------------
  921|      0|            *status = intStatus;
  922|      0|            goto finish;
  923|      0|        }
  924|      0|        if(r != nullptr) {
  ------------------
  |  Branch (924:12): [True: 0, False: 0]
  ------------------
  925|      0|            t1 = r;
  926|      0|            intStatus = U_USING_DEFAULT_WARNING;
  927|      0|            hasRealData = true;
  928|      0|        } else { /* we don't even have the root locale */
  929|      0|            *status = U_MISSING_RESOURCE_ERROR;
  930|      0|            goto finish;
  931|      0|        }
  932|  1.54k|    } else if(!isRoot && uprv_strcmp(t1->fName, kRootLocaleName) != 0 &&
  ------------------
  |  |   38|  1.54k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  1.54k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (932:15): [True: 1.54k, False: 0]
  |  Branch (932:26): [True: 1.54k, False: 0]
  ------------------
  933|  1.54k|            t1->fParent == nullptr && !r->fData.noFallback) {
  ------------------
  |  Branch (933:13): [True: 350, False: 1.19k]
  |  Branch (933:39): [True: 350, False: 0]
  ------------------
  934|    350|        if (!insertRootBundle(t1, status)) {
  ------------------
  |  Branch (934:13): [True: 0, False: 350]
  ------------------
  935|      0|            goto finish;
  936|      0|        }
  937|    350|        if(!hasRealData) {
  ------------------
  |  Branch (937:12): [True: 0, False: 350]
  ------------------
  938|      0|            r->fBogus = U_USING_DEFAULT_WARNING;
  939|      0|        }
  940|    350|    }
  941|       |
  942|       |    // TODO: Does this ever loop?
  943|  3.68k|    while(r != nullptr && !isRoot && t1->fParent != nullptr) {
  ------------------
  |  Branch (943:11): [True: 3.68k, False: 0]
  |  Branch (943:27): [True: 3.68k, False: 0]
  |  Branch (943:38): [True: 2.13k, False: 1.54k]
  ------------------
  944|  2.13k|        t1->fParent->fCountExisting++;
  945|  2.13k|        t1 = t1->fParent;
  946|  2.13k|    }
  947|       |
  948|  1.54k|finish:
  949|  1.54k|    if(U_SUCCESS(*status)) {
  ------------------
  |  Branch (949:8): [True: 1.54k, False: 0]
  ------------------
  950|  1.54k|        if(intStatus != U_ZERO_ERROR) {
  ------------------
  |  Branch (950:12): [True: 159, False: 1.38k]
  ------------------
  951|    159|            *status = intStatus;  
  952|    159|        }
  953|  1.54k|        return r;
  954|  1.54k|    } else {
  955|      0|        return nullptr;
  956|      0|    }
  957|  1.54k|}
uresbund.cpp:_ZL9initCacheP10UErrorCode:
  483|   621k|static void initCache(UErrorCode *status) {
  484|   621k|    umtx_initOnce(gCacheInitOnce, &createCache, *status);
  485|   621k|}
uresbund.cpp:_ZL11createCacheR10UErrorCode:
  477|      1|static void U_CALLCONV createCache(UErrorCode &status) {
  478|      1|    U_ASSERT(cache == nullptr);
  ------------------
  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  ------------------
  479|      1|    cache = uhash_open(hashEntry, compareEntries, nullptr, &status);
  ------------------
  |  | 1030|      1|#define uhash_open U_ICU_ENTRY_POINT_RENAME(uhash_open)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  480|      1|    ucln_common_registerCleanup(UCLN_COMMON_URES, ures_cleanup);
  ------------------
  |  |  617|      1|#define ucln_common_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_common_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  481|      1|}
uresbund.cpp:_ZL9hashEntry8UElement:
   58|   625k|static int32_t U_CALLCONV hashEntry(const UHashTok parm) {
   59|   625k|    UResourceDataEntry* b = static_cast<UResourceDataEntry*>(parm.pointer);
   60|   625k|    UHashTok namekey, pathkey;
   61|   625k|    namekey.pointer = b->fName;
   62|   625k|    pathkey.pointer = b->fPath;
   63|   625k|    return uhash_hashChars(namekey)+37u*uhash_hashChars(pathkey);
  ------------------
  |  | 1011|   625k|#define uhash_hashChars U_ICU_ENTRY_POINT_RENAME(uhash_hashChars)
  |  |  ------------------
  |  |  |  |  123|   625k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   625k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   625k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return uhash_hashChars(namekey)+37u*uhash_hashChars(pathkey);
  ------------------
  |  | 1011|   625k|#define uhash_hashChars U_ICU_ENTRY_POINT_RENAME(uhash_hashChars)
  |  |  ------------------
  |  |  |  |  123|   625k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   625k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   625k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   64|   625k|}
uresbund.cpp:_ZL14compareEntries8UElementS_:
   67|   622k|static UBool U_CALLCONV compareEntries(const UHashTok p1, const UHashTok p2) {
   68|   622k|    UResourceDataEntry* b1 = static_cast<UResourceDataEntry*>(p1.pointer);
   69|   622k|    UResourceDataEntry* b2 = static_cast<UResourceDataEntry*>(p2.pointer);
   70|   622k|    UHashTok name1, name2, path1, path2;
   71|   622k|    name1.pointer = b1->fName;
   72|   622k|    name2.pointer = b2->fName;
   73|   622k|    path1.pointer = b1->fPath;
   74|   622k|    path2.pointer = b2->fPath;
   75|   622k|    return uhash_compareChars(name1, name2) && uhash_compareChars(path1, path2);
  ------------------
  |  |  993|   622k|#define uhash_compareChars U_ICU_ENTRY_POINT_RENAME(uhash_compareChars)
  |  |  ------------------
  |  |  |  |  123|   622k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   622k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   622k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return uhash_compareChars(name1, name2) && uhash_compareChars(path1, path2);
  ------------------
  |  |  993|   622k|#define uhash_compareChars U_ICU_ENTRY_POINT_RENAME(uhash_compareChars)
  |  |  ------------------
  |  |  |  |  123|   622k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   622k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   622k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (75:12): [True: 622k, False: 0]
  |  Branch (75:48): [True: 622k, False: 0]
  ------------------
   76|   622k|}
uresbund.cpp:_ZL17findFirstExistingPKcPcS0_12UResOpenTypePaS3_S3_P10UErrorCode:
  665|  1.54k|                  UBool *isRoot, UBool *foundParent, UBool *isDefault, UErrorCode* status) {
  666|  1.54k|    UResourceDataEntry *r = nullptr;
  667|  1.54k|    UBool hasRealData = false;
  668|  1.54k|    *foundParent = true; /* we're starting with a fresh name */
  669|  1.54k|    char origName[ULOC_FULLNAME_CAPACITY];
  670|       |
  671|  1.54k|    uprv_strcpy(origName, name);
  ------------------
  |  |   36|  1.54k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  1.54k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  672|  3.39k|    while(*foundParent && !hasRealData) {
  ------------------
  |  Branch (672:11): [True: 2.86k, False: 530]
  |  Branch (672:27): [True: 1.85k, False: 1.01k]
  ------------------
  673|  1.85k|        r = init_entry(name, path, status);
  674|       |        /* Null pointer test */
  675|  1.85k|        if (U_FAILURE(*status)) {
  ------------------
  |  Branch (675:13): [True: 0, False: 1.85k]
  ------------------
  676|      0|            return nullptr;
  677|      0|        }
  678|  1.85k|        *isDefault = static_cast<UBool>(uprv_strncmp(name, defaultLocale, uprv_strlen(name)) == 0);
  ------------------
  |  |   44|  1.85k|#define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n)
  |  |  ------------------
  |  |  |  |  393|  1.85k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  679|  1.85k|        hasRealData = static_cast<UBool>(r->fBogus == U_ZERO_ERROR);
  680|  1.85k|        if(!hasRealData) {
  ------------------
  |  Branch (680:12): [True: 305, False: 1.54k]
  ------------------
  681|       |            /* this entry is not real. We will discard it. */
  682|       |            /* However, the parent line for this entry is  */
  683|       |            /* not to be used - as there might be parent   */
  684|       |            /* lines in cache from previous openings that  */
  685|       |            /* are not updated yet. */
  686|    305|            r->fCountExisting--;
  687|       |            /*entryCloseInt(r);*/
  688|    305|            r = nullptr;
  689|    305|            *status = U_USING_FALLBACK_WARNING;
  690|  1.54k|        } else {
  691|  1.54k|            uprv_strcpy(name, r->fName); /* this is needed for supporting aliases */
  ------------------
  |  |   36|  1.54k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  1.54k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  692|  1.54k|        }
  693|       |
  694|  1.85k|        *isRoot = static_cast<UBool>(uprv_strcmp(name, kRootLocaleName) == 0);
  ------------------
  |  |   38|  1.85k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  1.85k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  695|       |
  696|       |        /*Fallback data stuff*/
  697|  1.85k|        if (!hasRealData) {
  ------------------
  |  Branch (697:13): [True: 305, False: 1.54k]
  ------------------
  698|    305|            *foundParent = getParentLocaleID(name, origName, openType);
  699|  1.54k|        } else {
  700|       |            // we've already found a real resource file; what we return to the caller is the parent
  701|       |            // locale ID for inheritance, which should come from chopLocale(), not getParentLocaleID()
  702|  1.54k|            *foundParent = chopLocale(name);
  703|  1.54k|        }
  704|  1.85k|        if (*foundParent && *name == '\0') {
  ------------------
  |  Branch (704:13): [True: 1.32k, False: 530]
  |  Branch (704:29): [True: 0, False: 1.32k]
  ------------------
  705|      0|            uprv_strcpy(name, "und");
  ------------------
  |  |   36|      0|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  706|      0|        }
  707|  1.85k|    }
  708|  1.54k|    return r;
  709|  1.54k|}
uresbund.cpp:_ZL17getParentLocaleIDPcPKc12UResOpenType:
  211|    305|static bool getParentLocaleID(char *name, const char *origName, UResOpenType openType) {
  212|       |    // early out if the locale ID has a variant code or ends with _
  213|    305|    size_t nameLen = uprv_strlen(name);
  ------------------
  |  |   37|    305|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|    305|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  214|    305|    if (!nameLen || name[nameLen - 1] == '_' || hasVariant(name)) {
  ------------------
  |  Branch (214:9): [True: 0, False: 305]
  |  Branch (214:21): [True: 0, False: 305]
  |  Branch (214:49): [True: 1, False: 304]
  ------------------
  215|      1|        return chopLocale(name);
  216|      1|    }
  217|       |    
  218|    304|    UErrorCode err = U_ZERO_ERROR;
  219|    304|    CharString language;
  220|    304|    CharString script;
  221|    304|    CharString region;
  222|    304|    ulocimp_getSubtags(name, &language, &script, &region, nullptr, nullptr, err);
  ------------------
  |  | 1209|    304|#define ulocimp_getSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_getSubtags)
  |  |  ------------------
  |  |  |  |  123|    304|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    304|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    304|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|       |
  224|    304|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (224:9): [True: 0, False: 304]
  ------------------
  225|       |        // hopefully this never happens...
  226|      0|        return chopLocale(name);
  227|      0|    }
  228|       |    
  229|       |    // if the open type is URES_OPEN_LOCALE_DEFAULT_ROOT, first look the locale ID up in the parent locale table;
  230|       |    // if that table specifies a parent for it, return that  (we don't do this for the other open types-- if we're not
  231|       |    // falling back through the system default locale, we also want to do straight truncation fallback instead
  232|       |    // of looking things up in the parent locale table-- see https://www.unicode.org/reports/tr35/tr35.html#Parent_Locales:
  233|       |    // "Collation data, however, is an exception...")
  234|    304|    if (openType == URES_OPEN_LOCALE_DEFAULT_ROOT) {
  ------------------
  |  Branch (234:9): [True: 304, False: 0]
  ------------------
  235|    304|        const char* parentID = performFallbackLookup(name, parentLocaleChars, parentLocaleChars, parentLocaleTable, UPRV_LENGTHOF(parentLocaleTable));
  ------------------
  |  |   99|    304|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  236|    304|        if (parentID != nullptr) {
  ------------------
  |  Branch (236:13): [True: 0, False: 304]
  ------------------
  237|      0|            uprv_strcpy(name, parentID);
  ------------------
  |  |   36|      0|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  238|      0|            return true;
  239|      0|        }
  240|    304|    }
  241|       |
  242|    304|    CharString workingLocale;
  243|       |
  244|       |    // if it's not in the parent locale table, figure out the fallback script algorithmically
  245|       |    // (see CLDR-15265 for an explanation of the algorithm)
  246|    304|    if (!script.isEmpty() && !region.isEmpty()) {
  ------------------
  |  Branch (246:9): [True: 160, False: 144]
  |  Branch (246:30): [True: 17, False: 143]
  ------------------
  247|       |        // if "name" has both script and region, is the script the default script?
  248|       |        // - if so, remove it and keep the region
  249|       |        // - if not, remove the region and keep the script
  250|     17|        if (getDefaultScript(language, region) == script) {
  ------------------
  |  Branch (250:13): [True: 4, False: 13]
  ------------------
  251|      4|            workingLocale.append(language, err).append("_", err).append(region, err);
  252|     13|        } else {
  253|     13|            workingLocale.append(language, err).append("_", err).append(script, err);
  254|     13|        }
  255|    287|    } else if (!region.isEmpty()) {
  ------------------
  |  Branch (255:16): [True: 144, False: 143]
  ------------------
  256|       |        // if "name" has region but not script, did the original locale ID specify a script?
  257|       |        // - if yes, replace the region with the script from the original locale ID
  258|       |        // - if no, replace the region with the default script for that language and region
  259|    144|        UErrorCode err = U_ZERO_ERROR;
  260|    144|        CharString origNameLanguage;
  261|    144|        CharString origNameScript;
  262|    144|        ulocimp_getSubtags(origName, &origNameLanguage, &origNameScript, nullptr, nullptr, nullptr, err);
  ------------------
  |  | 1209|    144|#define ulocimp_getSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_getSubtags)
  |  |  ------------------
  |  |  |  |  123|    144|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    144|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    144|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  263|    144|        if (!origNameScript.isEmpty()) {
  ------------------
  |  Branch (263:13): [True: 3, False: 141]
  ------------------
  264|      3|            workingLocale.append(language, err).append("_", err).append(origNameScript, err);
  265|    141|        } else {
  266|    141|            workingLocale.append(language, err).append("_", err).append(getDefaultScript(language, region), err);
  267|    141|        }
  268|    144|    } else if (!script.isEmpty()) {
  ------------------
  |  Branch (268:16): [True: 143, False: 0]
  ------------------
  269|       |        // if "name" has script but not region (and our open type if URES_OPEN_LOCALE_DEFAULT_ROOT), is the script
  270|       |        // the default script for the language?
  271|       |        // - if so, remove it from the locale ID
  272|       |        // - if not, return false to continue up the chain
  273|       |        // (we don't do this for other open types for the same reason we don't look things up in the parent
  274|       |        // locale table for other open types-- see the reference to UTS #35 above)
  275|    143|        if (openType != URES_OPEN_LOCALE_DEFAULT_ROOT || getDefaultScript(language, CharString()) == script) {
  ------------------
  |  Branch (275:13): [True: 0, False: 143]
  |  Branch (275:13): [True: 143, False: 0]
  |  Branch (275:58): [True: 143, False: 0]
  ------------------
  276|    143|            workingLocale.append(language, err);
  277|    143|        } else {
  278|      0|            return false;
  279|      0|        }
  280|    143|    } else {
  281|       |        // if "name" just contains a language code, return false so the calling code falls back to "root"
  282|      0|        return false;
  283|      0|    }
  284|    304|    if (U_SUCCESS(err) && !workingLocale.isEmpty()) {
  ------------------
  |  Branch (284:9): [True: 304, False: 0]
  |  Branch (284:27): [True: 304, False: 0]
  ------------------
  285|    304|        uprv_strcpy(name, workingLocale.data());
  ------------------
  |  |   36|    304|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|    304|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  286|    304|        return true;
  287|    304|    } else {
  288|      0|        return false;
  289|      0|    }
  290|    304|}
uresbund.cpp:_ZL10hasVariantPKc:
   94|    305|static UBool hasVariant(const char* localeID) {
   95|    305|    UErrorCode err = U_ZERO_ERROR;
   96|    305|    CheckedArrayByteSink sink(nullptr, 0);
   97|    305|    ulocimp_getSubtags(
  ------------------
  |  | 1209|    305|#define ulocimp_getSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_getSubtags)
  |  |  ------------------
  |  |  |  |  123|    305|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    305|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    305|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|    305|            localeID,
   99|    305|            nullptr,
  100|    305|            nullptr,
  101|    305|            nullptr,
  102|    305|            &sink,
  103|    305|            nullptr,
  104|    305|            err);
  105|    305|    return sink.NumberOfBytesAppended() != 0;
  106|    305|}
uresbund.cpp:_ZL21performFallbackLookupPKcS0_S0_PKii:
  118|    761|                                         int32_t lookupTableLength) {
  119|    761|    const int32_t* bottom = lookupTable;
  120|    761|    const int32_t* top = lookupTable + lookupTableLength;
  121|       |
  122|  7.49k|    while (bottom < top) {
  ------------------
  |  Branch (122:12): [True: 6.82k, False: 671]
  ------------------
  123|       |        // Effectively, divide by 2 and round down to an even index
  124|  6.82k|        const int32_t* middle = bottom + (((top - bottom) / 4) * 2);
  125|  6.82k|        const char* entryKey = &(keyStrs[*middle]);
  126|  6.82k|        int32_t strcmpResult = uprv_strcmp(key, entryKey);
  ------------------
  |  |   38|  6.82k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  6.82k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  127|  6.82k|        if (strcmpResult == 0) {
  ------------------
  |  Branch (127:13): [True: 90, False: 6.73k]
  ------------------
  128|     90|            return &(valueStrs[middle[1]]);
  129|  6.73k|        } else if (strcmpResult < 0) {
  ------------------
  |  Branch (129:20): [True: 3.26k, False: 3.46k]
  ------------------
  130|  3.26k|            top = middle;
  131|  3.46k|        } else {
  132|  3.46k|            bottom = middle + 2;
  133|  3.46k|        }
  134|  6.82k|    }
  135|    671|    return nullptr;
  136|    761|}
uresbund.cpp:_ZL16getDefaultScriptRKN6icu_7810CharStringES2_:
  138|    301|static CharString getDefaultScript(const CharString& language, const CharString& region) {
  139|    301|    const char* defaultScript = nullptr;
  140|    301|    UErrorCode err = U_ZERO_ERROR;
  141|       |    
  142|       |    // the default script will be "Latn" if we don't find the locale ID in the tables
  143|    301|    CharString result("Latn", err);
  144|       |    
  145|       |    // if we were passed both language and region, make them into a locale ID and look that up in the default
  146|       |    // script table
  147|    301|    if (!region.isEmpty()) {
  ------------------
  |  Branch (147:9): [True: 158, False: 143]
  ------------------
  148|    158|        CharString localeID;
  149|    158|        localeID.append(language, err).append("_", err).append(region, err);
  150|    158|        if (U_FAILURE(err)) {
  ------------------
  |  Branch (150:13): [True: 0, False: 158]
  ------------------
  151|      0|            return result;
  152|      0|        }
  153|    158|        defaultScript = performFallbackLookup(localeID.data(), dsLocaleIDChars, scriptCodeChars, defaultScriptTable, UPRV_LENGTHOF(defaultScriptTable));
  ------------------
  |  |   99|    158|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  154|    158|    }
  155|       |    
  156|       |    // if we didn't find anything, look up just the language in the default script table
  157|    301|    if (defaultScript == nullptr) {
  ------------------
  |  Branch (157:9): [True: 299, False: 2]
  ------------------
  158|    299|        defaultScript = performFallbackLookup(language.data(), dsLocaleIDChars, scriptCodeChars, defaultScriptTable, UPRV_LENGTHOF(defaultScriptTable));
  ------------------
  |  |   99|    299|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  159|    299|    }
  160|       |    
  161|       |    // if either lookup above succeeded, copy the result from "defaultScript" into "result"; otherwise, return "Latn"
  162|    301|    if (defaultScript != nullptr) {
  ------------------
  |  Branch (162:9): [True: 90, False: 211]
  ------------------
  163|     90|        result.clear();
  164|     90|        result.append(defaultScript, err);
  165|     90|    }
  166|    301|    return result;
  167|    301|}
uresbund.cpp:_ZL10chopLocalePc:
   83|  1.86k|static UBool chopLocale(char *name) {
   84|  1.86k|    char *i = uprv_strrchr(name, '_');
  ------------------
  |  |   42|  1.86k|#define uprv_strrchr(s, c) U_STANDARD_CPP_NAMESPACE strrchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  1.86k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
   85|       |
   86|  1.86k|    if(i != nullptr) {
  ------------------
  |  Branch (86:8): [True: 1.12k, False: 741]
  ------------------
   87|  1.12k|        *i = '\0';
   88|  1.12k|        return true;
   89|  1.12k|    }
   90|       |
   91|    741|    return false;
   92|  1.86k|}
uresbund.cpp:_ZL10init_entryPKcS0_P10UErrorCode:
  514|   623k|static UResourceDataEntry *init_entry(const char *localeID, const char *path, UErrorCode *status) {
  515|   623k|    UResourceDataEntry *r = nullptr;
  516|   623k|    UResourceDataEntry find;
  517|       |    /*int32_t hashValue;*/
  518|   623k|    const char *name;
  519|   623k|    char aliasName[100] = { 0 };
  520|   623k|    int32_t aliasLen = 0;
  521|       |    /*UBool isAlias = false;*/
  522|       |    /*UHashTok hashkey; */
  523|       |
  524|   623k|    if(U_FAILURE(*status)) {
  ------------------
  |  Branch (524:8): [True: 0, False: 623k]
  ------------------
  525|      0|        return nullptr;
  526|      0|    }
  527|       |
  528|       |    /* here we try to deduce the right locale name */
  529|   623k|    if(localeID == nullptr) { /* if localeID is nullptr, we're trying to open default locale */
  ------------------
  |  Branch (529:8): [True: 0, False: 623k]
  ------------------
  530|      0|        name = uloc_getDefault();
  ------------------
  |  | 1118|      0|#define uloc_getDefault U_ICU_ENTRY_POINT_RENAME(uloc_getDefault)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  531|   623k|    } else if(*localeID == 0) { /* if localeID is "" then we try to open root locale */
  ------------------
  |  Branch (531:15): [True: 0, False: 623k]
  ------------------
  532|      0|        name = kRootLocaleName;
  ------------------
  |  |   18|      0|#define kRootLocaleName         "root"
  ------------------
  533|   623k|    } else { /* otherwise, we'll open what we're given */
  534|   623k|        name = localeID;
  535|   623k|    }
  536|       |
  537|   623k|    find.fName = const_cast<char*>(name);
  538|   623k|    find.fPath = const_cast<char*>(path);
  539|       |
  540|       |    /* calculate the hash value of the entry */
  541|       |    /*hashkey.pointer = (void *)&find;*/
  542|       |    /*hashValue = hashEntry(hashkey);*/
  543|       |
  544|       |    /* check to see if we already have this entry */
  545|   623k|    r = static_cast<UResourceDataEntry*>(uhash_get(cache, &find));
  ------------------
  |  | 1007|   623k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|   623k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   623k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   623k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  546|   623k|    if(r == nullptr) {
  ------------------
  |  Branch (546:8): [True: 951, False: 622k]
  ------------------
  547|       |        /* if the entry is not yet in the hash table, we'll try to construct a new one */
  548|    951|        r = static_cast<UResourceDataEntry*>(uprv_malloc(sizeof(UResourceDataEntry)));
  ------------------
  |  | 1524|    951|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|    951|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    951|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    951|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  549|    951|        if(r == nullptr) {
  ------------------
  |  Branch (549:12): [True: 0, False: 951]
  ------------------
  550|      0|            *status = U_MEMORY_ALLOCATION_ERROR;
  551|      0|            return nullptr;
  552|      0|        }
  553|       |
  554|    951|        uprv_memset(r, 0, sizeof(UResourceDataEntry));
  ------------------
  |  |  100|    951|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|    951|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  555|       |        /*r->fHashKey = hashValue;*/
  556|       |
  557|    951|        setEntryName(r, name, status);
  558|    951|        if (U_FAILURE(*status)) {
  ------------------
  |  Branch (558:13): [True: 0, False: 951]
  ------------------
  559|      0|            uprv_free(r);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  560|      0|            return nullptr;
  561|      0|        }
  562|       |
  563|    951|        if(path != nullptr) {
  ------------------
  |  Branch (563:12): [True: 530, False: 421]
  ------------------
  564|    530|            r->fPath = uprv_strdup(path);
  ------------------
  |  | 1541|    530|#define uprv_strdup U_ICU_ENTRY_POINT_RENAME(uprv_strdup)
  |  |  ------------------
  |  |  |  |  123|    530|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    530|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    530|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  565|    530|            if(r->fPath == nullptr) {
  ------------------
  |  Branch (565:16): [True: 0, False: 530]
  ------------------
  566|      0|                *status = U_MEMORY_ALLOCATION_ERROR;
  567|      0|                uprv_free(r);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      0|                return nullptr;
  569|      0|            }
  570|    530|        }
  571|       |
  572|       |        /* this is the actual loading */
  573|    951|        res_load(&(r->fData), r->fPath, r->fName, status);
  ------------------
  |  |  208|    951|#define res_load U_ICU_ENTRY_POINT_RENAME(res_load)
  |  |  ------------------
  |  |  |  |  123|    951|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    951|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    951|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  574|       |
  575|    951|        if (U_FAILURE(*status)) {
  ------------------
  |  Branch (575:13): [True: 275, False: 676]
  ------------------
  576|       |            /* if we failed to load due to an out-of-memory error, exit early. */
  577|    275|            if (*status == U_MEMORY_ALLOCATION_ERROR) {
  ------------------
  |  Branch (577:17): [True: 0, False: 275]
  ------------------
  578|      0|                uprv_free(r);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  579|      0|                return nullptr;
  580|      0|            }
  581|       |            /* we have no such entry in dll, so it will always use fallback */
  582|    275|            *status = U_USING_FALLBACK_WARNING;
  583|    275|            r->fBogus = U_USING_FALLBACK_WARNING;
  584|    676|        } else { /* if we have a regular entry */
  585|    676|            Resource aliasres;
  586|    676|            if (r->fData.usesPoolBundle) {
  ------------------
  |  Branch (586:17): [True: 667, False: 9]
  ------------------
  587|    667|                r->fPool = getPoolEntry(r->fPath, status);
  588|    667|                if (U_SUCCESS(*status)) {
  ------------------
  |  Branch (588:21): [True: 667, False: 0]
  ------------------
  589|    667|                    const int32_t *poolIndexes = r->fPool->fData.pRoot + 1;
  590|    667|                    if(r->fData.pRoot[1 + URES_INDEX_POOL_CHECKSUM] == poolIndexes[URES_INDEX_POOL_CHECKSUM]) {
  ------------------
  |  Branch (590:24): [True: 667, False: 0]
  ------------------
  591|    667|                        r->fData.poolBundleKeys = reinterpret_cast<const char*>(poolIndexes + (poolIndexes[URES_INDEX_LENGTH] & 0xff));
  592|    667|                        r->fData.poolBundleStrings = r->fPool->fData.p16BitUnits;
  593|    667|                    } else {
  594|      0|                        r->fBogus = *status = U_INVALID_FORMAT_ERROR;
  595|      0|                    }
  596|    667|                } else {
  597|      0|                    r->fBogus = *status;
  598|      0|                }
  599|    667|            }
  600|    676|            if (U_SUCCESS(*status)) {
  ------------------
  |  Branch (600:17): [True: 676, False: 0]
  ------------------
  601|       |                /* handle the alias by trying to get out the %%Alias tag.*/
  602|       |                /* We'll try to get alias string from the bundle */
  603|    676|                aliasres = res_getResource(&(r->fData), "%%ALIAS");
  ------------------
  |  |  204|    676|#define res_getResource U_ICU_ENTRY_POINT_RENAME(res_getResource)
  |  |  ------------------
  |  |  |  |  123|    676|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    676|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    676|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  604|    676|                if (aliasres != RES_BOGUS) {
  ------------------
  |  |   65|    676|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (604:21): [True: 1, False: 675]
  ------------------
  605|       |                    // No tracing: called during initial data loading
  606|      1|                    const char16_t *alias = res_getStringNoTrace(&(r->fData), aliasres, &aliasLen);
  ------------------
  |  |  205|      1|#define res_getStringNoTrace U_ICU_ENTRY_POINT_RENAME(res_getStringNoTrace)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  607|      1|                    if(alias != nullptr && aliasLen > 0) { /* if there is actual alias - unload and load new data */
  ------------------
  |  Branch (607:24): [True: 1, False: 0]
  |  Branch (607:44): [True: 1, False: 0]
  ------------------
  608|      1|                        u_UCharsToChars(alias, aliasName, aliasLen+1);
  ------------------
  |  |  211|      1|#define u_UCharsToChars U_ICU_ENTRY_POINT_RENAME(u_UCharsToChars)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  609|      1|                        r->fAlias = init_entry(aliasName, path, status);
  610|      1|                    }
  611|      1|                }
  612|    676|            }
  613|    676|        }
  614|       |
  615|    951|        {
  616|    951|            UResourceDataEntry *oldR = nullptr;
  617|    951|            if ((oldR = static_cast<UResourceDataEntry*>(uhash_get(cache, r))) == nullptr) { /* if the data is not cached */
  ------------------
  |  | 1007|    951|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|    951|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    951|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    951|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (617:17): [True: 951, False: 0]
  ------------------
  618|       |                /* just insert it in the cache */
  619|    951|                UErrorCode cacheStatus = U_ZERO_ERROR;
  620|    951|                uhash_put(cache, (void *)r, r, &cacheStatus);
  ------------------
  |  | 1032|    951|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|    951|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    951|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    951|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  621|    951|                if (U_FAILURE(cacheStatus)) {
  ------------------
  |  Branch (621:21): [True: 0, False: 951]
  ------------------
  622|      0|                    *status = cacheStatus;
  623|      0|                    free_entry(r);
  624|      0|                    r = nullptr;
  625|      0|                }
  626|    951|            } else {
  627|       |                /* somebody have already inserted it while we were working, discard newly opened data */
  628|       |                /* Also, we could get here IF we opened an alias */
  629|      0|                free_entry(r);
  630|      0|                r = oldR;
  631|      0|            }
  632|    951|        }
  633|       |
  634|    951|    }
  635|   623k|    if(r != nullptr) {
  ------------------
  |  Branch (635:8): [True: 623k, False: 0]
  ------------------
  636|       |        /* return the real bundle */
  637|   623k|        while(r->fAlias != nullptr) {
  ------------------
  |  Branch (637:15): [True: 1, False: 623k]
  ------------------
  638|      1|            r = r->fAlias;
  639|      1|        }
  640|   623k|        r->fCountExisting++; /* we increase its reference count */
  641|       |        /* if the resource has a warning */
  642|       |        /* we don't want to overwrite a status with no error */
  643|   623k|        if(r->fBogus != U_ZERO_ERROR && U_SUCCESS(*status)) {
  ------------------
  |  Branch (643:12): [True: 305, False: 622k]
  |  Branch (643:41): [True: 305, False: 0]
  ------------------
  644|    305|             *status = r->fBogus; /* set the returning status */
  645|    305|        }
  646|   623k|    }
  647|   623k|    return r;
  648|   623k|}
uresbund.cpp:_ZL12setEntryNameP18UResourceDataEntryPKcP10UErrorCode:
  489|    951|static void setEntryName(UResourceDataEntry *res, const char *name, UErrorCode *status) {
  490|    951|    int32_t len = static_cast<int32_t>(uprv_strlen(name));
  ------------------
  |  |   37|    951|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|    951|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  491|    951|    if(res->fName != nullptr && res->fName != res->fNameBuffer) {
  ------------------
  |  Branch (491:8): [True: 0, False: 951]
  |  Branch (491:33): [True: 0, False: 0]
  ------------------
  492|      0|        uprv_free(res->fName);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  493|      0|    }
  494|    951|    if (len < static_cast<int32_t>(sizeof(res->fNameBuffer))) {
  ------------------
  |  Branch (494:9): [True: 218, False: 733]
  ------------------
  495|    218|        res->fName = res->fNameBuffer;
  496|    218|    }
  497|    733|    else {
  498|    733|        res->fName = static_cast<char*>(uprv_malloc(len + 1));
  ------------------
  |  | 1524|    733|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|    733|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    733|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    733|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  499|    733|    }
  500|    951|    if(res->fName == nullptr) {
  ------------------
  |  Branch (500:8): [True: 0, False: 951]
  ------------------
  501|      0|        *status = U_MEMORY_ALLOCATION_ERROR;
  502|    951|    } else {
  503|    951|        uprv_strcpy(res->fName, name);
  ------------------
  |  |   36|    951|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|    951|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  504|    951|    }
  505|    951|}
uresbund.cpp:_ZL12getPoolEntryPKcP10UErrorCode:
  651|    667|getPoolEntry(const char *path, UErrorCode *status) {
  652|    667|    UResourceDataEntry *poolBundle = init_entry(kPoolBundleName, path, status);
  ------------------
  |  |   19|    667|#define kPoolBundleName         "pool"
  ------------------
  653|    667|    if( U_SUCCESS(*status) &&
  ------------------
  |  Branch (653:9): [True: 667, False: 0]
  ------------------
  654|    667|        (poolBundle == nullptr || poolBundle->fBogus != U_ZERO_ERROR || !poolBundle->fData.isPoolBundle)
  ------------------
  |  Branch (654:10): [True: 0, False: 667]
  |  Branch (654:35): [True: 0, False: 667]
  |  Branch (654:73): [True: 0, False: 667]
  ------------------
  655|    667|    ) {
  656|      0|        *status = U_INVALID_FORMAT_ERROR;
  657|      0|    }
  658|    667|    return poolBundle;
  659|    667|}
uresbund.cpp:_ZL13mayHaveParentPc:
  297|    741|static UBool mayHaveParent(char *name) {
  298|    741|    return (name[0] != 0 && uprv_strstr("nb nn",name) != nullptr);
  ------------------
  |  |   41|    741|#define uprv_strstr(s, c) U_STANDARD_CPP_NAMESPACE strstr(s, c)
  |  |  ------------------
  |  |  |  |  393|    741|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (298:13): [True: 741, False: 0]
  |  Branch (298:29): [True: 11, False: 730]
  ------------------
  299|    741|}
uresbund.cpp:_ZL21loadParentsExceptRootRP18UResourceDataEntryPciaS2_P10UErrorCode:
  746|  1.02k|                      UBool usingUSRData, char usrDataPath[], UErrorCode *status) {
  747|  1.02k|    if (U_FAILURE(*status)) { return false; }
  ------------------
  |  Branch (747:9): [True: 0, False: 1.02k]
  ------------------
  748|  1.02k|    UBool checkParent = true;
  749|  1.33k|    while (checkParent && t1->fParent == nullptr && !t1->fData.noFallback &&
  ------------------
  |  Branch (749:12): [True: 1.13k, False: 208]
  |  Branch (749:27): [True: 340, False: 791]
  |  Branch (749:53): [True: 340, False: 0]
  ------------------
  750|  1.33k|            res_getResource(&t1->fData,"%%ParentIsRoot") == RES_BOGUS) {
  ------------------
  |  |  204|    340|#define res_getResource U_ICU_ENTRY_POINT_RENAME(res_getResource)
  |  |  ------------------
  |  |  |  |  123|    340|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    340|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    340|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          res_getResource(&t1->fData,"%%ParentIsRoot") == RES_BOGUS) {
  ------------------
  |  |   65|    340|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (750:13): [True: 340, False: 0]
  ------------------
  751|    340|        Resource parentRes = res_getResource(&t1->fData, "%%Parent");
  ------------------
  |  |  204|    340|#define res_getResource U_ICU_ENTRY_POINT_RENAME(res_getResource)
  |  |  ------------------
  |  |  |  |  123|    340|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    340|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    340|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  752|    340|        if (parentRes != RES_BOGUS) {  // An explicit parent was found.
  ------------------
  |  |   65|    340|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (752:13): [True: 90, False: 250]
  ------------------
  753|     90|            int32_t parentLocaleLen = 0;
  754|       |            // No tracing: called during initial data loading
  755|     90|            const char16_t *parentLocaleName = res_getStringNoTrace(&(t1->fData), parentRes, &parentLocaleLen);
  ------------------
  |  |  205|     90|#define res_getStringNoTrace U_ICU_ENTRY_POINT_RENAME(res_getStringNoTrace)
  |  |  ------------------
  |  |  |  |  123|     90|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     90|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     90|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  756|     90|            if(parentLocaleName != nullptr && 0 < parentLocaleLen && parentLocaleLen < nameCapacity) {
  ------------------
  |  Branch (756:16): [True: 90, False: 0]
  |  Branch (756:47): [True: 90, False: 0]
  |  Branch (756:70): [True: 90, False: 0]
  ------------------
  757|     90|                u_UCharsToChars(parentLocaleName, name, parentLocaleLen + 1);
  ------------------
  |  |  211|     90|#define u_UCharsToChars U_ICU_ENTRY_POINT_RENAME(u_UCharsToChars)
  |  |  ------------------
  |  |  |  |  123|     90|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     90|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     90|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  758|     90|                if (uprv_strcmp(name, kRootLocaleName) == 0) {
  ------------------
  |  |   38|     90|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|     90|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (758:21): [True: 26, False: 64]
  ------------------
  759|     26|                    return true;
  760|     26|                }
  761|     90|            }
  762|     90|        }
  763|       |        // Insert regular parents.
  764|    314|        UErrorCode parentStatus = U_ZERO_ERROR;
  765|    314|        UResourceDataEntry *t2 = init_entry(name, t1->fPath, &parentStatus);
  766|    314|        if (U_FAILURE(parentStatus)) {
  ------------------
  |  Branch (766:13): [True: 0, False: 314]
  ------------------
  767|      0|            *status = parentStatus;
  768|      0|            return false;
  769|      0|        }
  770|    314|        UResourceDataEntry *u2 = nullptr;
  771|    314|        UErrorCode usrStatus = U_ZERO_ERROR;
  772|    314|        if (usingUSRData) {  // This code inserts user override data into the inheritance chain.
  ------------------
  |  Branch (772:13): [True: 0, False: 314]
  ------------------
  773|      0|            u2 = init_entry(name, usrDataPath, &usrStatus);
  774|       |            // If we failed due to out-of-memory, report that to the caller and exit early.
  775|      0|            if (usrStatus == U_MEMORY_ALLOCATION_ERROR) {
  ------------------
  |  Branch (775:17): [True: 0, False: 0]
  ------------------
  776|      0|                *status = usrStatus;
  777|      0|                return false;
  778|      0|            }
  779|      0|        }
  780|       |
  781|    314|        if (usingUSRData && U_SUCCESS(usrStatus) && u2->fBogus == U_ZERO_ERROR) {
  ------------------
  |  Branch (781:13): [True: 0, False: 314]
  |  Branch (781:29): [True: 0, False: 0]
  |  Branch (781:53): [True: 0, False: 0]
  ------------------
  782|      0|            t1->fParent = u2;
  783|      0|            u2->fParent = t2;
  784|    314|        } else {
  785|    314|            t1->fParent = t2;
  786|    314|            if (usingUSRData) {
  ------------------
  |  Branch (786:17): [True: 0, False: 314]
  ------------------
  787|       |                // The USR override data wasn't found, set it to be deleted.
  788|      0|                u2->fCountExisting = 0;
  789|      0|            }
  790|    314|        }
  791|    314|        t1 = t2;
  792|    314|        checkParent = chopLocale(name) || mayHaveParent(name);
  ------------------
  |  Branch (792:23): [True: 103, False: 211]
  |  Branch (792:43): [True: 3, False: 208]
  ------------------
  793|    314|    }
  794|    999|    return true;
  795|  1.02k|}
uresbund.cpp:_ZL16insertRootBundleRP18UResourceDataEntryP10UErrorCode:
  798|    350|insertRootBundle(UResourceDataEntry *&t1, UErrorCode *status) {
  799|    350|    if (U_FAILURE(*status)) { return false; }
  ------------------
  |  Branch (799:9): [True: 0, False: 350]
  ------------------
  800|    350|    UErrorCode parentStatus = U_ZERO_ERROR;
  801|    350|    UResourceDataEntry *t2 = init_entry(kRootLocaleName, t1->fPath, &parentStatus);
  ------------------
  |  |   18|    350|#define kRootLocaleName         "root"
  ------------------
  802|    350|    if (U_FAILURE(parentStatus)) {
  ------------------
  |  Branch (802:9): [True: 0, False: 350]
  ------------------
  803|      0|        *status = parentStatus;
  804|      0|        return false;
  805|      0|    }
  806|    350|    t1->fParent = t2;
  807|    350|    t1 = t2;
  808|    350|    return true;
  809|    350|}
uresbund.cpp:_ZL15entryOpenDirectPKcS0_P10UErrorCode:
  966|   620k|entryOpenDirect(const char* path, const char* localeID, UErrorCode* status) {
  967|   620k|    initCache(status);
  968|   620k|    if(U_FAILURE(*status)) {
  ------------------
  |  Branch (968:8): [True: 0, False: 620k]
  ------------------
  969|      0|        return nullptr;
  970|      0|    }
  971|       |
  972|       |    // Note: We need to query the default locale *before* locking resbMutex.
  973|       |    // If the localeID is nullptr, then we want to use the default locale.
  974|   620k|    if (localeID == nullptr) {
  ------------------
  |  Branch (974:9): [True: 0, False: 620k]
  ------------------
  975|      0|        localeID = uloc_getDefault();
  ------------------
  |  | 1118|      0|#define uloc_getDefault U_ICU_ENTRY_POINT_RENAME(uloc_getDefault)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  976|   620k|    } else if (*localeID == 0) {
  ------------------
  |  Branch (976:16): [True: 0, False: 620k]
  ------------------
  977|       |        // If the localeID is "", then we want to use the root locale.
  978|      0|        localeID = kRootLocaleName;
  ------------------
  |  |   18|      0|#define kRootLocaleName         "root"
  ------------------
  979|      0|    }
  980|       |
  981|   620k|    Mutex lock(&resbMutex);
  982|       |
  983|       |    // findFirstExisting() without fallbacks.
  984|   620k|    UResourceDataEntry *r = init_entry(localeID, path, status);
  985|   620k|    if(U_SUCCESS(*status)) {
  ------------------
  |  Branch (985:8): [True: 620k, False: 0]
  ------------------
  986|   620k|        if(r->fBogus != U_ZERO_ERROR) {
  ------------------
  |  Branch (986:12): [True: 0, False: 620k]
  ------------------
  987|      0|            r->fCountExisting--;
  988|      0|            r = nullptr;
  989|      0|        }
  990|   620k|    } else {
  991|      0|        r = nullptr;
  992|      0|    }
  993|       |
  994|       |    // Some code depends on the ures_openDirect() bundle to have a parent bundle chain,
  995|       |    // unless it is marked with "nofallback".
  996|   620k|    UResourceDataEntry *t1 = r;
  997|   620k|    if(r != nullptr && uprv_strcmp(localeID, kRootLocaleName) != 0 &&  // not root
  ------------------
  |  |   38|   620k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|   620k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (997:8): [True: 620k, False: 0]
  |  Branch (997:24): [True: 620k, False: 0]
  ------------------
  998|   620k|            r->fParent == nullptr && !r->fData.noFallback &&
  ------------------
  |  Branch (998:13): [True: 620k, False: 0]
  |  Branch (998:38): [True: 0, False: 620k]
  ------------------
  999|   620k|            uprv_strlen(localeID) < ULOC_FULLNAME_CAPACITY) {
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
                          uprv_strlen(localeID) < ULOC_FULLNAME_CAPACITY) {
  ------------------
  |  |  264|      0|#define ULOC_FULLNAME_CAPACITY 157
  ------------------
  |  Branch (999:13): [True: 0, False: 0]
  ------------------
 1000|      0|        char name[ULOC_FULLNAME_CAPACITY];
 1001|      0|        uprv_strcpy(name, localeID);
  ------------------
  |  |   36|      0|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1002|      0|        if(!chopLocale(name) || uprv_strcmp(name, kRootLocaleName) == 0 ||
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1002:12): [True: 0, False: 0]
  |  Branch (1002:33): [True: 0, False: 0]
  ------------------
 1003|      0|                loadParentsExceptRoot(t1, name, UPRV_LENGTHOF(name), false, nullptr, status)) {
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (1003:17): [True: 0, False: 0]
  ------------------
 1004|      0|            if(uprv_strcmp(t1->fName, kRootLocaleName) != 0 && t1->fParent == nullptr) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1004:16): [True: 0, False: 0]
  |  Branch (1004:64): [True: 0, False: 0]
  ------------------
 1005|      0|                insertRootBundle(t1, status);
 1006|      0|            }
 1007|      0|        }
 1008|      0|        if(U_FAILURE(*status)) {
  ------------------
  |  Branch (1008:12): [True: 0, False: 0]
  ------------------
 1009|      0|            r = nullptr;
 1010|      0|        }
 1011|      0|    }
 1012|       |
 1013|   620k|    if(r != nullptr) {
  ------------------
  |  Branch (1013:8): [True: 620k, False: 0]
  ------------------
 1014|       |        // TODO: Does this ever loop?
 1015|   620k|        while(t1->fParent != nullptr) {
  ------------------
  |  Branch (1015:15): [True: 0, False: 620k]
  ------------------
 1016|      0|            t1->fParent->fCountExisting++;
 1017|      0|            t1 = t1->fParent;
 1018|      0|        }
 1019|   620k|    }
 1020|   620k|    return r;
 1021|   620k|}

res_load_78:
  260|    951|         const char *path, const char *name, UErrorCode *errorCode) {
  261|    951|    UVersionInfo formatVersion;
  262|       |
  263|    951|    uprv_memset(pResData, 0, sizeof(ResourceData));
  ------------------
  |  |  100|    951|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|    951|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  264|       |
  265|       |    /* load the ResourceBundle file */
  266|    951|    pResData->data=udata_openChoice(path, "res", name, isAcceptable, formatVersion, errorCode);
  ------------------
  |  |  894|    951|#define udata_openChoice U_ICU_ENTRY_POINT_RENAME(udata_openChoice)
  |  |  ------------------
  |  |  |  |  123|    951|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    951|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    951|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  267|    951|    if(U_FAILURE(*errorCode)) {
  ------------------
  |  Branch (267:8): [True: 275, False: 676]
  ------------------
  268|    275|        return;
  269|    275|    }
  270|       |
  271|       |    /* get its memory and initialize *pResData */
  272|    676|    res_init(pResData, formatVersion, udata_getMemory(pResData->data), -1, errorCode);
  ------------------
  |  |  891|    676|#define udata_getMemory U_ICU_ENTRY_POINT_RENAME(udata_getMemory)
  |  |  ------------------
  |  |  |  |  123|    676|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    676|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    676|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  273|    676|}
res_getPublicType_78:
  306|   178k|res_getPublicType(Resource res) {
  307|   178k|    return (UResType)gPublicTypes[RES_GET_TYPE(res)];
  ------------------
  |  |   68|   178k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  308|   178k|}
res_getStringNoTrace_78:
  311|  2.31M|res_getStringNoTrace(const ResourceData *pResData, Resource res, int32_t *pLength) {
  312|  2.31M|    const char16_t *p;
  313|  2.31M|    uint32_t offset=RES_GET_OFFSET(res);
  ------------------
  |  |   69|  2.31M|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  314|  2.31M|    int32_t length;
  315|  2.31M|    if(RES_GET_TYPE(res)==URES_STRING_V2) {
  ------------------
  |  |   68|  2.31M|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  |  Branch (315:8): [True: 2.31M, False: 0]
  ------------------
  316|  2.31M|        int32_t first;
  317|  2.31M|        if((int32_t)offset<pResData->poolStringIndexLimit) {
  ------------------
  |  Branch (317:12): [True: 63.1k, False: 2.25M]
  ------------------
  318|  63.1k|            p=(const char16_t *)pResData->poolBundleStrings+offset;
  319|  2.25M|        } else {
  320|  2.25M|            p=(const char16_t *)pResData->p16BitUnits+(offset-pResData->poolStringIndexLimit);
  321|  2.25M|        }
  322|  2.31M|        first=*p;
  323|  2.31M|        if(!U16_IS_TRAIL(first)) {
  ------------------
  |  |   67|  2.31M|#define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
  ------------------
  |  Branch (323:12): [True: 2.31M, False: 1.75k]
  ------------------
  324|  2.31M|            length=u_strlen(p);
  ------------------
  |  |  393|  2.31M|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|  2.31M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.31M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.31M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  325|  2.31M|        } else if(first<0xdfef) {
  ------------------
  |  Branch (325:19): [True: 1.75k, False: 0]
  ------------------
  326|  1.75k|            length=first&0x3ff;
  327|  1.75k|            ++p;
  328|  1.75k|        } else if(first<0xdfff) {
  ------------------
  |  Branch (328:19): [True: 0, False: 0]
  ------------------
  329|      0|            length=((first-0xdfef)<<16)|p[1];
  330|      0|            p+=2;
  331|      0|        } else {
  332|      0|            length=((int32_t)p[1]<<16)|p[2];
  333|      0|            p+=3;
  334|      0|        }
  335|  2.31M|    } else if(res==offset) /* RES_GET_TYPE(res)==URES_STRING */ {
  ------------------
  |  Branch (335:15): [True: 0, False: 0]
  ------------------
  336|      0|        const int32_t *p32= res==0 ? &gEmptyString.length : pResData->pRoot+res;
  ------------------
  |  Branch (336:29): [True: 0, False: 0]
  ------------------
  337|      0|        length=*p32++;
  338|      0|        p=(const char16_t *)p32;
  339|      0|    } else {
  340|      0|        p=nullptr;
  341|      0|        length=0;
  342|      0|    }
  343|  2.31M|    if(pLength) {
  ------------------
  |  Branch (343:8): [True: 2.12M, False: 187k]
  ------------------
  344|  2.12M|        *pLength=length;
  345|  2.12M|    }
  346|  2.31M|    return p;
  347|  2.31M|}
res_getAlias_78:
  420|  6.03k|res_getAlias(const ResourceData *pResData, Resource res, int32_t *pLength) {
  421|  6.03k|    const char16_t *p;
  422|  6.03k|    uint32_t offset=RES_GET_OFFSET(res);
  ------------------
  |  |   69|  6.03k|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  423|  6.03k|    int32_t length;
  424|  6.03k|    if(RES_GET_TYPE(res)==URES_ALIAS) {
  ------------------
  |  |   68|  6.03k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  |  Branch (424:8): [True: 6.03k, False: 0]
  ------------------
  425|  6.03k|        const int32_t *p32= offset==0 ? &gEmptyString.length : pResData->pRoot+offset;
  ------------------
  |  Branch (425:29): [True: 0, False: 6.03k]
  ------------------
  426|  6.03k|        length=*p32++;
  427|  6.03k|        p=(const char16_t *)p32;
  428|  6.03k|    } else {
  429|      0|        p=nullptr;
  430|      0|        length=0;
  431|      0|    }
  432|  6.03k|    if(pLength) {
  ------------------
  |  Branch (432:8): [True: 6.03k, False: 0]
  ------------------
  433|  6.03k|        *pLength=length;
  434|  6.03k|    }
  435|  6.03k|    return p;
  436|  6.03k|}
res_getIntVectorNoTrace_78:
  459|    521|res_getIntVectorNoTrace(const ResourceData *pResData, Resource res, int32_t *pLength) {
  460|    521|    const int32_t *p;
  461|    521|    uint32_t offset=RES_GET_OFFSET(res);
  ------------------
  |  |   69|    521|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  462|    521|    int32_t length;
  463|    521|    if(RES_GET_TYPE(res)==URES_INT_VECTOR) {
  ------------------
  |  |   68|    521|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  |  Branch (463:8): [True: 521, False: 0]
  ------------------
  464|    521|        p= offset==0 ? (const int32_t *)&gEmpty32 : pResData->pRoot+offset;
  ------------------
  |  Branch (464:12): [True: 0, False: 521]
  ------------------
  465|    521|        length=*p++;
  466|    521|    } else {
  467|      0|        p=nullptr;
  468|      0|        length=0;
  469|      0|    }
  470|    521|    if(pLength) {
  ------------------
  |  Branch (470:8): [True: 521, False: 0]
  ------------------
  471|    521|        *pLength=length;
  472|    521|    }
  473|    521|    return p;
  474|    521|}
res_countArrayItems_78:
  477|  1.25M|res_countArrayItems(const ResourceData *pResData, Resource res) {
  478|  1.25M|    uint32_t offset=RES_GET_OFFSET(res);
  ------------------
  |  |   69|  1.25M|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  479|  1.25M|    switch(RES_GET_TYPE(res)) {
  ------------------
  |  |   68|  1.25M|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  480|      0|    case URES_STRING:
  ------------------
  |  Branch (480:5): [True: 0, False: 1.25M]
  ------------------
  481|    859|    case URES_STRING_V2:
  ------------------
  |  Branch (481:5): [True: 859, False: 1.25M]
  ------------------
  482|    859|    case URES_BINARY:
  ------------------
  |  Branch (482:5): [True: 0, False: 1.25M]
  ------------------
  483|    859|    case URES_ALIAS:
  ------------------
  |  Branch (483:5): [True: 0, False: 1.25M]
  ------------------
  484|  1.72k|    case URES_INT:
  ------------------
  |  Branch (484:5): [True: 865, False: 1.25M]
  ------------------
  485|  2.24k|    case URES_INT_VECTOR:
  ------------------
  |  Branch (485:5): [True: 521, False: 1.25M]
  ------------------
  486|  2.24k|        return 1;
  487|    626|    case URES_ARRAY:
  ------------------
  |  Branch (487:5): [True: 626, False: 1.25M]
  ------------------
  488|    626|    case URES_TABLE32:
  ------------------
  |  Branch (488:5): [True: 0, False: 1.25M]
  ------------------
  489|    626|        return offset==0 ? 0 : *(pResData->pRoot+offset);
  ------------------
  |  Branch (489:16): [True: 0, False: 626]
  ------------------
  490|   661k|    case URES_TABLE:
  ------------------
  |  Branch (490:5): [True: 661k, False: 591k]
  ------------------
  491|   661k|        return offset==0 ? 0 : *((const uint16_t *)(pResData->pRoot+offset));
  ------------------
  |  Branch (491:16): [True: 649, False: 661k]
  ------------------
  492|   585k|    case URES_ARRAY16:
  ------------------
  |  Branch (492:5): [True: 585k, False: 668k]
  ------------------
  493|   588k|    case URES_TABLE16:
  ------------------
  |  Branch (493:5): [True: 3.31k, False: 1.24M]
  ------------------
  494|   588k|        return pResData->p16BitUnits[offset];
  495|      0|    default:
  ------------------
  |  Branch (495:5): [True: 0, False: 1.25M]
  ------------------
  496|      0|        return 0;
  497|  1.25M|    }
  498|  1.25M|}
_ZN6icu_7817ResourceDataValueD2Ev:
  502|    995|ResourceDataValue::~ResourceDataValue() {}
_ZNK6icu_7817ResourceDataValue7getTypeEv:
  504|   178k|UResType ResourceDataValue::getType() const {
  505|   178k|    return res_getPublicType(res);
  ------------------
  |  |  203|   178k|#define res_getPublicType U_ICU_ENTRY_POINT_RENAME(res_getPublicType)
  |  |  ------------------
  |  |  |  |  123|   178k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   178k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   178k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  506|   178k|}
_ZNK6icu_7817ResourceDataValue9getStringERiR10UErrorCode:
  508|   134k|const char16_t *ResourceDataValue::getString(int32_t &length, UErrorCode &errorCode) const {
  509|   134k|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (509:8): [True: 0, False: 134k]
  ------------------
  510|      0|        return nullptr;
  511|      0|    }
  512|   134k|    const char16_t *s = res_getString(fTraceInfo, &getData(), res, &length);
  513|   134k|    if(s == nullptr) {
  ------------------
  |  Branch (513:8): [True: 0, False: 134k]
  ------------------
  514|      0|        errorCode = U_RESOURCE_TYPE_MISMATCH;
  515|      0|    }
  516|   134k|    return s;
  517|   134k|}
_ZNK6icu_7817ResourceDataValue14getAliasStringERiR10UErrorCode:
  519|  5.19k|const char16_t *ResourceDataValue::getAliasString(int32_t &length, UErrorCode &errorCode) const {
  520|  5.19k|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (520:8): [True: 0, False: 5.19k]
  ------------------
  521|      0|        return nullptr;
  522|      0|    }
  523|  5.19k|    const char16_t *s = res_getAlias(&getData(), res, &length);
  ------------------
  |  |  199|  5.19k|#define res_getAlias U_ICU_ENTRY_POINT_RENAME(res_getAlias)
  |  |  ------------------
  |  |  |  |  123|  5.19k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.19k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.19k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  524|  5.19k|    if(s == nullptr) {
  ------------------
  |  Branch (524:8): [True: 0, False: 5.19k]
  ------------------
  525|      0|        errorCode = U_RESOURCE_TYPE_MISMATCH;
  526|      0|    }
  527|  5.19k|    return s;
  528|  5.19k|}
_ZNK6icu_7817ResourceDataValue8getArrayER10UErrorCode:
  572|  12.0k|ResourceArray ResourceDataValue::getArray(UErrorCode &errorCode) const {
  573|  12.0k|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (573:8): [True: 0, False: 12.0k]
  ------------------
  574|      0|        return {};
  575|      0|    }
  576|  12.0k|    const uint16_t *items16 = nullptr;
  577|  12.0k|    const Resource *items32 = nullptr;
  578|  12.0k|    uint32_t offset=RES_GET_OFFSET(res);
  ------------------
  |  |   69|  12.0k|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  579|  12.0k|    int32_t length = 0;
  580|  12.0k|    switch(RES_GET_TYPE(res)) {
  ------------------
  |  |   68|  12.0k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  581|    308|    case URES_ARRAY:
  ------------------
  |  Branch (581:5): [True: 308, False: 11.7k]
  ------------------
  582|    308|        if (offset!=0) {  // empty if offset==0
  ------------------
  |  Branch (582:13): [True: 308, False: 0]
  ------------------
  583|    308|            items32 = reinterpret_cast<const Resource*>(getData().pRoot) + offset;
  584|    308|            length = *items32++;
  585|    308|        }
  586|    308|        break;
  587|  11.7k|    case URES_ARRAY16:
  ------------------
  |  Branch (587:5): [True: 11.7k, False: 308]
  ------------------
  588|  11.7k|        items16 = getData().p16BitUnits+offset;
  589|  11.7k|        length = *items16++;
  590|  11.7k|        break;
  591|      0|    default:
  ------------------
  |  Branch (591:5): [True: 0, False: 12.0k]
  ------------------
  592|      0|        errorCode = U_RESOURCE_TYPE_MISMATCH;
  593|      0|        return {};
  594|  12.0k|    }
  595|  12.0k|    return ResourceArray(items16, items32, length, fTraceInfo);
  596|  12.0k|}
_ZNK6icu_7817ResourceDataValue8getTableER10UErrorCode:
  598|   115k|ResourceTable ResourceDataValue::getTable(UErrorCode &errorCode) const {
  599|   115k|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (599:8): [True: 0, False: 115k]
  ------------------
  600|      0|        return {};
  601|      0|    }
  602|   115k|    const uint16_t *keys16 = nullptr;
  603|   115k|    const int32_t *keys32 = nullptr;
  604|   115k|    const uint16_t *items16 = nullptr;
  605|   115k|    const Resource *items32 = nullptr;
  606|   115k|    uint32_t offset = RES_GET_OFFSET(res);
  ------------------
  |  |   69|   115k|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  607|   115k|    int32_t length = 0;
  608|   115k|    switch(RES_GET_TYPE(res)) {
  ------------------
  |  |   68|   115k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  609|  11.8k|    case URES_TABLE:
  ------------------
  |  Branch (609:5): [True: 11.8k, False: 104k]
  ------------------
  610|  11.8k|        if (offset != 0) {  // empty if offset==0
  ------------------
  |  Branch (610:13): [True: 11.8k, False: 0]
  ------------------
  611|  11.8k|            keys16 = reinterpret_cast<const uint16_t*>(getData().pRoot + offset);
  612|  11.8k|            length = *keys16++;
  613|  11.8k|            items32 = reinterpret_cast<const Resource*>(keys16 + length + (~length & 1));
  614|  11.8k|        }
  615|  11.8k|        break;
  616|   104k|    case URES_TABLE16:
  ------------------
  |  Branch (616:5): [True: 104k, False: 11.8k]
  ------------------
  617|   104k|        keys16 = getData().p16BitUnits+offset;
  618|   104k|        length = *keys16++;
  619|   104k|        items16 = keys16 + length;
  620|   104k|        break;
  621|      0|    case URES_TABLE32:
  ------------------
  |  Branch (621:5): [True: 0, False: 115k]
  ------------------
  622|      0|        if (offset != 0) {  // empty if offset==0
  ------------------
  |  Branch (622:13): [True: 0, False: 0]
  ------------------
  623|      0|            keys32 = getData().pRoot+offset;
  624|      0|            length = *keys32++;
  625|      0|            items32 = reinterpret_cast<const Resource*>(keys32) + length;
  626|      0|        }
  627|      0|        break;
  628|      0|    default:
  ------------------
  |  Branch (628:5): [True: 0, False: 115k]
  ------------------
  629|      0|        errorCode = U_RESOURCE_TYPE_MISMATCH;
  630|      0|        return {};
  631|   115k|    }
  632|   115k|    return ResourceTable(keys16, keys32, items16, items32, length, fTraceInfo);
  633|   115k|}
_ZNK6icu_7817ResourceDataValue21isNoInheritanceMarkerEv:
  635|   143k|UBool ResourceDataValue::isNoInheritanceMarker() const {
  636|   143k|    return ::isNoInheritanceMarker(&getData(), res);
  637|   143k|}
_ZNK6icu_7817ResourceDataValue14getStringArrayEPNS_13UnicodeStringEiR10UErrorCode:
  640|  6.03k|                                          UErrorCode &errorCode) const {
  641|  6.03k|    return ::getStringArray(&getData(), getArray(errorCode), dest, capacity, errorCode);
  642|  6.03k|}
res_getTableItemByKey_78:
  713|  1.40M|                      int32_t *indexR, const char **key) {
  714|  1.40M|    uint32_t offset=RES_GET_OFFSET(table);
  ------------------
  |  |   69|  1.40M|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  715|  1.40M|    int32_t length;
  716|  1.40M|    int32_t idx;
  717|  1.40M|    if(key == nullptr || *key == nullptr) {
  ------------------
  |  Branch (717:8): [True: 0, False: 1.40M]
  |  Branch (717:26): [True: 0, False: 1.40M]
  ------------------
  718|      0|        return RES_BOGUS;
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  719|      0|    }
  720|  1.40M|    switch(RES_GET_TYPE(table)) {
  ------------------
  |  |   68|  1.40M|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  721|  1.40M|    case URES_TABLE: {
  ------------------
  |  Branch (721:5): [True: 1.40M, False: 6.40k]
  ------------------
  722|  1.40M|        if (offset!=0) { /* empty if offset==0 */
  ------------------
  |  Branch (722:13): [True: 1.39M, False: 2.29k]
  ------------------
  723|  1.39M|            const uint16_t *p= (const uint16_t *)(pResData->pRoot+offset);
  724|  1.39M|            length=*p++;
  725|  1.39M|            *indexR=idx=_res_findTableItem(pResData, p, length, *key, key);
  726|  1.39M|            if(idx>=0) {
  ------------------
  |  Branch (726:16): [True: 927k, False: 470k]
  ------------------
  727|   927k|                const Resource *p32=(const Resource *)(p+length+(~length&1));
  728|   927k|                return p32[idx];
  729|   927k|            }
  730|  1.39M|        }
  731|   473k|        break;
  732|  1.40M|    }
  733|   473k|    case URES_TABLE16: {
  ------------------
  |  Branch (733:5): [True: 6.40k, False: 1.40M]
  ------------------
  734|  6.40k|        const uint16_t *p=pResData->p16BitUnits+offset;
  735|  6.40k|        length=*p++;
  736|  6.40k|        *indexR=idx=_res_findTableItem(pResData, p, length, *key, key);
  737|  6.40k|        if(idx>=0) {
  ------------------
  |  Branch (737:12): [True: 2.05k, False: 4.35k]
  ------------------
  738|  2.05k|            return makeResourceFrom16(pResData, p[length+idx]);
  739|  2.05k|        }
  740|  4.35k|        break;
  741|  6.40k|    }
  742|  4.35k|    case URES_TABLE32: {
  ------------------
  |  Branch (742:5): [True: 0, False: 1.40M]
  ------------------
  743|      0|        if (offset!=0) { /* empty if offset==0 */
  ------------------
  |  Branch (743:13): [True: 0, False: 0]
  ------------------
  744|      0|            const int32_t *p= pResData->pRoot+offset;
  745|      0|            length=*p++;
  746|      0|            *indexR=idx=_res_findTable32Item(pResData, p, length, *key, key);
  747|      0|            if(idx>=0) {
  ------------------
  |  Branch (747:16): [True: 0, False: 0]
  ------------------
  748|      0|                return (Resource)p[length+idx];
  749|      0|            }
  750|      0|        }
  751|      0|        break;
  752|      0|    }
  753|      0|    default:
  ------------------
  |  Branch (753:5): [True: 0, False: 1.40M]
  ------------------
  754|      0|        break;
  755|  1.40M|    }
  756|   477k|    return RES_BOGUS;
  ------------------
  |  |   65|   477k|#define RES_BOGUS 0xffffffff
  ------------------
  757|  1.40M|}
res_getTableItemByIndex_78:
  761|  2.00k|                        int32_t indexR, const char **key) {
  762|  2.00k|    uint32_t offset=RES_GET_OFFSET(table);
  ------------------
  |  |   69|  2.00k|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  763|  2.00k|    int32_t length;
  764|  2.00k|    if (indexR < 0) {
  ------------------
  |  Branch (764:9): [True: 0, False: 2.00k]
  ------------------
  765|      0|        return RES_BOGUS;
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  766|      0|    }
  767|  2.00k|    switch(RES_GET_TYPE(table)) {
  ------------------
  |  |   68|  2.00k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  768|  2.00k|    case URES_TABLE: {
  ------------------
  |  Branch (768:5): [True: 2.00k, False: 0]
  ------------------
  769|  2.00k|        if (offset != 0) { /* empty if offset==0 */
  ------------------
  |  Branch (769:13): [True: 2.00k, False: 0]
  ------------------
  770|  2.00k|            const uint16_t *p= (const uint16_t *)(pResData->pRoot+offset);
  771|  2.00k|            length=*p++;
  772|  2.00k|            if(indexR<length) {
  ------------------
  |  Branch (772:16): [True: 2.00k, False: 0]
  ------------------
  773|  2.00k|                const Resource *p32=(const Resource *)(p+length+(~length&1));
  774|  2.00k|                if(key!=nullptr) {
  ------------------
  |  Branch (774:20): [True: 2.00k, False: 0]
  ------------------
  775|  2.00k|                    *key=RES_GET_KEY16(pResData, p[indexR]);
  ------------------
  |  |   44|  2.00k|    ((keyOffset)<(pResData)->localKeyLimit ? \
  |  |  ------------------
  |  |  |  Branch (44:6): [True: 1.48k, False: 520]
  |  |  ------------------
  |  |   45|  2.00k|        (const char *)(pResData)->pRoot+(keyOffset) : \
  |  |   46|  2.00k|        (pResData)->poolBundleKeys+(keyOffset)-(pResData)->localKeyLimit)
  ------------------
  776|  2.00k|                }
  777|  2.00k|                return p32[indexR];
  778|  2.00k|            }
  779|  2.00k|        }
  780|      0|        break;
  781|  2.00k|    }
  782|      0|    case URES_TABLE16: {
  ------------------
  |  Branch (782:5): [True: 0, False: 2.00k]
  ------------------
  783|      0|        const uint16_t *p=pResData->p16BitUnits+offset;
  784|      0|        length=*p++;
  785|      0|        if(indexR<length) {
  ------------------
  |  Branch (785:12): [True: 0, False: 0]
  ------------------
  786|      0|            if(key!=nullptr) {
  ------------------
  |  Branch (786:16): [True: 0, False: 0]
  ------------------
  787|      0|                *key=RES_GET_KEY16(pResData, p[indexR]);
  ------------------
  |  |   44|      0|    ((keyOffset)<(pResData)->localKeyLimit ? \
  |  |  ------------------
  |  |  |  Branch (44:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|        (const char *)(pResData)->pRoot+(keyOffset) : \
  |  |   46|      0|        (pResData)->poolBundleKeys+(keyOffset)-(pResData)->localKeyLimit)
  ------------------
  788|      0|            }
  789|      0|            return makeResourceFrom16(pResData, p[length+indexR]);
  790|      0|        }
  791|      0|        break;
  792|      0|    }
  793|      0|    case URES_TABLE32: {
  ------------------
  |  Branch (793:5): [True: 0, False: 2.00k]
  ------------------
  794|      0|        if (offset != 0) { /* empty if offset==0 */
  ------------------
  |  Branch (794:13): [True: 0, False: 0]
  ------------------
  795|      0|            const int32_t *p= pResData->pRoot+offset;
  796|      0|            length=*p++;
  797|      0|            if(indexR<length) {
  ------------------
  |  Branch (797:16): [True: 0, False: 0]
  ------------------
  798|      0|                if(key!=nullptr) {
  ------------------
  |  Branch (798:20): [True: 0, False: 0]
  ------------------
  799|      0|                    *key=RES_GET_KEY32(pResData, p[indexR]);
  ------------------
  |  |   49|      0|    ((keyOffset)>=0 ? \
  |  |  ------------------
  |  |  |  Branch (49:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   50|      0|        (const char *)(pResData)->pRoot+(keyOffset) : \
  |  |   51|      0|        (pResData)->poolBundleKeys+((keyOffset)&0x7fffffff))
  ------------------
  800|      0|                }
  801|      0|                return (Resource)p[length+indexR];
  802|      0|            }
  803|      0|        }
  804|      0|        break;
  805|      0|    }
  806|      0|    default:
  ------------------
  |  Branch (806:5): [True: 0, False: 2.00k]
  ------------------
  807|      0|        break;
  808|  2.00k|    }
  809|      0|    return RES_BOGUS;
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  810|  2.00k|}
res_getResource_78:
  813|  1.35k|res_getResource(const ResourceData *pResData, const char *key) {
  814|  1.35k|    const char *realKey=key;
  815|  1.35k|    int32_t idx;
  816|  1.35k|    return res_getTableItemByKey(pResData, pResData->rootRes, &idx, &realKey);
  ------------------
  |  |  207|  1.35k|#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey)
  |  |  ------------------
  |  |  |  |  123|  1.35k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.35k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.35k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  817|  1.35k|}
_ZNK6icu_7813ResourceTable14getKeyAndValueEiRPKcRNS_13ResourceValueE:
  821|   405k|                                         const char *&key, icu::ResourceValue &value) const {
  822|   405k|    if(0 <= i && i < length) {
  ------------------
  |  Branch (822:8): [True: 405k, False: 0]
  |  Branch (822:18): [True: 289k, False: 115k]
  ------------------
  823|   289k|        icu::ResourceDataValue &rdValue = static_cast<icu::ResourceDataValue &>(value);
  824|   289k|        if (keys16 != nullptr) {
  ------------------
  |  Branch (824:13): [True: 289k, False: 0]
  ------------------
  825|   289k|            key = RES_GET_KEY16(&rdValue.getData(), keys16[i]);
  ------------------
  |  |   44|   289k|    ((keyOffset)<(pResData)->localKeyLimit ? \
  |  |  ------------------
  |  |  |  Branch (44:6): [True: 941, False: 288k]
  |  |  ------------------
  |  |   45|   289k|        (const char *)(pResData)->pRoot+(keyOffset) : \
  |  |   46|   289k|        (pResData)->poolBundleKeys+(keyOffset)-(pResData)->localKeyLimit)
  ------------------
  826|   289k|        } else {
  827|      0|            key = RES_GET_KEY32(&rdValue.getData(), keys32[i]);
  ------------------
  |  |   49|      0|    ((keyOffset)>=0 ? \
  |  |  ------------------
  |  |  |  Branch (49:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   50|      0|        (const char *)(pResData)->pRoot+(keyOffset) : \
  |  |   51|      0|        (pResData)->poolBundleKeys+((keyOffset)&0x7fffffff))
  ------------------
  828|      0|        }
  829|   289k|        Resource res;
  830|   289k|        if (items16 != nullptr) {
  ------------------
  |  Branch (830:13): [True: 147k, False: 142k]
  ------------------
  831|   147k|            res = makeResourceFrom16(&rdValue.getData(), items16[i]);
  832|   147k|        } else {
  833|   142k|            res = items32[i];
  834|   142k|        }
  835|       |        // Note: the ResourceTracer keeps a reference to the field of this
  836|       |        // ResourceTable. This is OK because the ResourceTable should remain
  837|       |        // alive for the duration that fields are being read from it
  838|       |        // (including nested fields).
  839|   289k|        rdValue.setResource(res, ResourceTracer(fTraceInfo, key));
  840|   289k|        return true;
  841|   289k|    }
  842|   115k|    return false;
  843|   405k|}
res_getArrayItem_78:
  869|  2.14M|res_getArrayItem(const ResourceData *pResData, Resource array, int32_t indexR) {
  870|  2.14M|    uint32_t offset=RES_GET_OFFSET(array);
  ------------------
  |  |   69|  2.14M|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  871|  2.14M|    if (indexR < 0) {
  ------------------
  |  Branch (871:9): [True: 0, False: 2.14M]
  ------------------
  872|      0|        return RES_BOGUS;
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  873|      0|    }
  874|  2.14M|    switch(RES_GET_TYPE(array)) {
  ------------------
  |  |   68|  2.14M|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  875|    951|    case URES_ARRAY: {
  ------------------
  |  Branch (875:5): [True: 951, False: 2.13M]
  ------------------
  876|    951|        if (offset!=0) { /* empty if offset==0 */
  ------------------
  |  Branch (876:13): [True: 951, False: 0]
  ------------------
  877|    951|            const int32_t *p= pResData->pRoot+offset;
  878|    951|            if(indexR<*p) {
  ------------------
  |  Branch (878:16): [True: 951, False: 0]
  ------------------
  879|    951|                return (Resource)p[1+indexR];
  880|    951|            }
  881|    951|        }
  882|      0|        break;
  883|    951|    }
  884|  2.13M|    case URES_ARRAY16: {
  ------------------
  |  Branch (884:5): [True: 2.13M, False: 951]
  ------------------
  885|  2.13M|        const uint16_t *p=pResData->p16BitUnits+offset;
  886|  2.13M|        if(indexR<*p) {
  ------------------
  |  Branch (886:12): [True: 2.13M, False: 0]
  ------------------
  887|  2.13M|            return makeResourceFrom16(pResData, p[1+indexR]);
  888|  2.13M|        }
  889|      0|        break;
  890|  2.13M|    }
  891|      0|    default:
  ------------------
  |  Branch (891:5): [True: 0, False: 2.14M]
  ------------------
  892|      0|        break;
  893|  2.14M|    }
  894|      0|    return RES_BOGUS;
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  895|  2.14M|}
_ZNK6icu_7813ResourceArray19internalGetResourceEPK12ResourceDatai:
  897|  37.8k|uint32_t icu::ResourceArray::internalGetResource(const ResourceData *pResData, int32_t i) const {
  898|  37.8k|    if (items16 != nullptr) {
  ------------------
  |  Branch (898:9): [True: 36.7k, False: 1.04k]
  ------------------
  899|  36.7k|        return makeResourceFrom16(pResData, items16[i]);
  900|  36.7k|    } else {
  901|  1.04k|        return items32[i];
  902|  1.04k|    }
  903|  37.8k|}
res_findResource_78:
  921|   300k|res_findResource(const ResourceData *pResData, Resource r, char** path, const char** key) {
  922|   300k|  char *pathP = *path, *nextSepP = *path;
  923|   300k|  char *closeIndex = nullptr;
  924|   300k|  Resource t1 = r;
  925|   300k|  Resource t2;
  926|   300k|  int32_t indexR = 0;
  927|   300k|  UResType type = (UResType)RES_GET_TYPE(t1);
  ------------------
  |  |   68|   300k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  928|       |
  929|       |  /* if you come in with an empty path, you'll be getting back the same resource */
  930|   300k|  if(!uprv_strlen(pathP)) {
  ------------------
  |  |   37|   300k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|   300k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (930:6): [True: 0, False: 300k]
  ------------------
  931|      0|      return r;
  932|      0|  }
  933|       |
  934|       |  /* one needs to have an aggregate resource in order to search in it */
  935|   300k|  if(!URES_IS_CONTAINER(type)) {
  ------------------
  |  |   85|   300k|#define URES_IS_CONTAINER(type) (URES_IS_TABLE(type) || URES_IS_ARRAY(type))
  |  |  ------------------
  |  |  |  |   84|   600k|#define URES_IS_TABLE(type) ((int32_t)(type)==URES_TABLE || (int32_t)(type)==URES_TABLE16 || (int32_t)(type)==URES_TABLE32)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (84:30): [True: 300k, False: 3]
  |  |  |  |  |  Branch (84:61): [True: 3, False: 0]
  |  |  |  |  |  Branch (84:94): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define URES_IS_CONTAINER(type) (URES_IS_TABLE(type) || URES_IS_ARRAY(type))
  |  |  ------------------
  |  |  |  |   83|      0|#define URES_IS_ARRAY(type) ((int32_t)(type)==URES_ARRAY || (int32_t)(type)==URES_ARRAY16)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (83:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (83:61): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  936|      0|      return RES_BOGUS;
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  937|      0|  }
  938|       |  
  939|   898k|  while(nextSepP && *pathP && t1 != RES_BOGUS && URES_IS_CONTAINER(type)) {
  ------------------
  |  |   65|  1.49M|#define RES_BOGUS 0xffffffff
  ------------------
                while(nextSepP && *pathP && t1 != RES_BOGUS && URES_IS_CONTAINER(type)) {
  ------------------
  |  |   85|   598k|#define URES_IS_CONTAINER(type) (URES_IS_TABLE(type) || URES_IS_ARRAY(type))
  |  |  ------------------
  |  |  |  |   84|  1.19M|#define URES_IS_TABLE(type) ((int32_t)(type)==URES_TABLE || (int32_t)(type)==URES_TABLE16 || (int32_t)(type)==URES_TABLE32)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (84:30): [True: 598k, False: 6]
  |  |  |  |  |  Branch (84:61): [True: 6, False: 0]
  |  |  |  |  |  Branch (84:94): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define URES_IS_CONTAINER(type) (URES_IS_TABLE(type) || URES_IS_ARRAY(type))
  |  |  ------------------
  |  |  |  |   83|      0|#define URES_IS_ARRAY(type) ((int32_t)(type)==URES_ARRAY || (int32_t)(type)==URES_ARRAY16)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (83:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (83:61): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (939:9): [True: 599k, False: 299k]
  |  Branch (939:21): [True: 599k, False: 10]
  |  Branch (939:31): [True: 598k, False: 479]
  ------------------
  940|       |    /* Iteration stops if: the path has been consumed, we found a non-existing
  941|       |     * resource (t1 == RES_BOGUS) or we found a scalar resource (including alias)
  942|       |     */
  943|   598k|    nextSepP = uprv_strchr(pathP, RES_PATH_SEPARATOR);
  ------------------
  |  |   40|   598k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|   598k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  944|       |    /* if there are more separators, terminate string 
  945|       |     * and set path to the remaining part of the string
  946|       |     */
  947|   598k|    if(nextSepP != nullptr) {
  ------------------
  |  Branch (947:8): [True: 299k, False: 299k]
  ------------------
  948|   299k|      if(nextSepP == pathP) {
  ------------------
  |  Branch (948:10): [True: 0, False: 299k]
  ------------------
  949|       |        // Empty key string.
  950|      0|        return RES_BOGUS;
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  951|      0|      }
  952|   299k|      *nextSepP = 0; /* overwrite the separator with a NUL to terminate the key */
  953|   299k|      *path = nextSepP+1;
  954|   299k|    } else {
  955|   299k|      *path = uprv_strchr(pathP, 0);
  ------------------
  |  |   40|   299k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|   299k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  956|   299k|    }
  957|       |
  958|       |    /* if the resource is a table */
  959|       |    /* try the key based access */
  960|   598k|    if(URES_IS_TABLE(type)) {
  ------------------
  |  |   84|   598k|#define URES_IS_TABLE(type) ((int32_t)(type)==URES_TABLE || (int32_t)(type)==URES_TABLE16 || (int32_t)(type)==URES_TABLE32)
  |  |  ------------------
  |  |  |  Branch (84:30): [True: 598k, False: 6]
  |  |  |  Branch (84:61): [True: 6, False: 0]
  |  |  |  Branch (84:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  961|   598k|      *key = pathP;
  962|   598k|      t2 = res_getTableItemByKey(pResData, t1, &indexR, key);
  ------------------
  |  |  207|   598k|#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey)
  |  |  ------------------
  |  |  |  |  123|   598k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   598k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   598k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  963|   598k|    } else if(URES_IS_ARRAY(type)) {
  ------------------
  |  |   83|      0|#define URES_IS_ARRAY(type) ((int32_t)(type)==URES_ARRAY || (int32_t)(type)==URES_ARRAY16)
  |  |  ------------------
  |  |  |  Branch (83:30): [True: 0, False: 0]
  |  |  |  Branch (83:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  964|      0|      indexR = uprv_strtol(pathP, &closeIndex, 10);
  ------------------
  |  |   77|      0|#define uprv_strtol(str, end, base) U_STANDARD_CPP_NAMESPACE strtol(str, end, base)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  965|      0|      if(indexR >= 0 && *closeIndex == 0) {
  ------------------
  |  Branch (965:10): [True: 0, False: 0]
  |  Branch (965:25): [True: 0, False: 0]
  ------------------
  966|      0|        t2 = res_getArrayItem(pResData, t1, indexR);
  ------------------
  |  |  200|      0|#define res_getArrayItem U_ICU_ENTRY_POINT_RENAME(res_getArrayItem)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  967|      0|      } else {
  968|      0|        t2 = RES_BOGUS; /* have an array, but don't have a valid index */
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  969|      0|      }
  970|      0|      *key = nullptr;
  971|      0|    } else { /* can't do much here, except setting t2 to bogus */
  972|      0|      t2 = RES_BOGUS;
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  973|      0|    }
  974|   598k|    t1 = t2;
  975|   598k|    type = (UResType)RES_GET_TYPE(t1);
  ------------------
  |  |   68|   598k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  976|       |    /* position pathP to next resource key/index */
  977|   598k|    pathP = *path;
  978|   598k|  }
  979|       |
  980|   300k|  return t1;
  981|   300k|}
uresdata.cpp:_ZL12isAcceptablePvPKcS1_PK9UDataInfo:
  141|    676|             const UDataInfo *pInfo) {
  142|    676|    uprv_memcpy(context, pInfo->formatVersion, 4);
  ------------------
  |  |   42|    676|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|    676|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|    676|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|    676|    _Pragma("clang diagnostic push") \
  |  |   45|    676|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|    676|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|    676|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|    676|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|    676|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|    676|    _Pragma("clang diagnostic pop") \
  |  |   49|    676|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|    676|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|    676|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|    676|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  143|    676|    return
  144|    676|        pInfo->size>=20 &&
  ------------------
  |  Branch (144:9): [True: 676, False: 0]
  ------------------
  145|    676|        pInfo->isBigEndian==U_IS_BIG_ENDIAN &&
  ------------------
  |  |  353|  1.35k|#   define U_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
  ------------------
  |  Branch (145:9): [True: 676, False: 0]
  ------------------
  146|    676|        pInfo->charsetFamily==U_CHARSET_FAMILY &&
  ------------------
  |  |  588|    676|#   define U_CHARSET_FAMILY U_ASCII_FAMILY
  |  |  ------------------
  |  |  |  |  531|  1.35k|#define U_ASCII_FAMILY 0
  |  |  ------------------
  ------------------
  |  Branch (146:9): [True: 676, False: 0]
  ------------------
  147|    676|        pInfo->sizeofUChar==U_SIZEOF_UCHAR &&
  ------------------
  |  |  352|  1.35k|#define U_SIZEOF_UCHAR 2
  ------------------
  |  Branch (147:9): [True: 676, False: 0]
  ------------------
  148|    676|        pInfo->dataFormat[0]==0x52 &&   /* dataFormat="ResB" */
  ------------------
  |  Branch (148:9): [True: 676, False: 0]
  ------------------
  149|    676|        pInfo->dataFormat[1]==0x65 &&
  ------------------
  |  Branch (149:9): [True: 676, False: 0]
  ------------------
  150|    676|        pInfo->dataFormat[2]==0x73 &&
  ------------------
  |  Branch (150:9): [True: 676, False: 0]
  ------------------
  151|    676|        pInfo->dataFormat[3]==0x42 &&
  ------------------
  |  Branch (151:9): [True: 676, False: 0]
  ------------------
  152|    676|        (1<=pInfo->formatVersion[0] && pInfo->formatVersion[0]<=3);
  ------------------
  |  Branch (152:10): [True: 676, False: 0]
  |  Branch (152:40): [True: 676, False: 0]
  ------------------
  153|    676|}
uresdata.cpp:_ZL8res_initP12ResourceDataPhPKviP10UErrorCode:
  160|    676|         UErrorCode *errorCode) {
  161|    676|    UResType rootType;
  162|       |
  163|       |    /* get the root resource */
  164|    676|    pResData->pRoot = static_cast<const int32_t*>(inBytes);
  165|    676|    pResData->rootRes = static_cast<Resource>(*pResData->pRoot);
  166|    676|    pResData->p16BitUnits=&gEmpty16;
  167|       |
  168|       |    /* formatVersion 1.1 must have a root item and at least 5 indexes */
  169|    676|    if(length>=0 && (length/4)<((formatVersion[0]==1 && formatVersion[1]==0) ? 1 : 1+5)) {
  ------------------
  |  Branch (169:8): [True: 0, False: 676]
  |  Branch (169:21): [True: 0, False: 0]
  |  Branch (169:34): [True: 0, False: 0]
  |  Branch (169:57): [True: 0, False: 0]
  ------------------
  170|      0|        *errorCode=U_INVALID_FORMAT_ERROR;
  171|      0|        res_unload(pResData);
  ------------------
  |  |  210|      0|#define res_unload U_ICU_ENTRY_POINT_RENAME(res_unload)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  172|      0|        return;
  173|      0|    }
  174|       |
  175|       |    /* currently, we accept only resources that have a Table as their roots */
  176|    676|    rootType = static_cast<UResType>(RES_GET_TYPE(pResData->rootRes));
  ------------------
  |  |   68|    676|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  177|    676|    if(!URES_IS_TABLE(rootType)) {
  ------------------
  |  |   84|    676|#define URES_IS_TABLE(type) ((int32_t)(type)==URES_TABLE || (int32_t)(type)==URES_TABLE16 || (int32_t)(type)==URES_TABLE32)
  |  |  ------------------
  |  |  |  Branch (84:30): [True: 634, False: 42]
  |  |  |  Branch (84:61): [True: 42, False: 0]
  |  |  |  Branch (84:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  178|      0|        *errorCode=U_INVALID_FORMAT_ERROR;
  179|      0|        res_unload(pResData);
  ------------------
  |  |  210|      0|#define res_unload U_ICU_ENTRY_POINT_RENAME(res_unload)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|      0|        return;
  181|      0|    }
  182|       |
  183|    676|    if(formatVersion[0]==1 && formatVersion[1]==0) {
  ------------------
  |  Branch (183:8): [True: 0, False: 676]
  |  Branch (183:31): [True: 0, False: 0]
  ------------------
  184|      0|        pResData->localKeyLimit=0x10000;  /* greater than any 16-bit key string offset */
  185|    676|    } else {
  186|       |        /* bundles with formatVersion 1.1 and later contain an indexes[] array */
  187|    676|        const int32_t *indexes=pResData->pRoot+1;
  188|    676|        int32_t indexLength=indexes[URES_INDEX_LENGTH]&0xff;
  189|    676|        if(indexLength<=URES_INDEX_MAX_TABLE_LENGTH) {
  ------------------
  |  Branch (189:12): [True: 0, False: 676]
  ------------------
  190|      0|            *errorCode=U_INVALID_FORMAT_ERROR;
  191|      0|            res_unload(pResData);
  ------------------
  |  |  210|      0|#define res_unload U_ICU_ENTRY_POINT_RENAME(res_unload)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|      0|            return;
  193|      0|        }
  194|    676|        if( length>=0 &&
  ------------------
  |  Branch (194:13): [True: 0, False: 676]
  ------------------
  195|    676|            (length<((1+indexLength)<<2) ||
  ------------------
  |  Branch (195:14): [True: 0, False: 0]
  ------------------
  196|      0|             length<(indexes[URES_INDEX_BUNDLE_TOP]<<2))
  ------------------
  |  Branch (196:14): [True: 0, False: 0]
  ------------------
  197|    676|        ) {
  198|      0|            *errorCode=U_INVALID_FORMAT_ERROR;
  199|      0|            res_unload(pResData);
  ------------------
  |  |  210|      0|#define res_unload U_ICU_ENTRY_POINT_RENAME(res_unload)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  200|      0|            return;
  201|      0|        }
  202|    676|        if(indexes[URES_INDEX_KEYS_TOP]>(1+indexLength)) {
  ------------------
  |  Branch (202:12): [True: 9, False: 667]
  ------------------
  203|      9|            pResData->localKeyLimit=indexes[URES_INDEX_KEYS_TOP]<<2;
  204|      9|        }
  205|    676|        if(formatVersion[0]>=3) {
  ------------------
  |  Branch (205:12): [True: 445, False: 231]
  ------------------
  206|       |            // In formatVersion 1, the indexLength took up this whole int.
  207|       |            // In version 2, bits 31..8 were reserved and always 0.
  208|       |            // In version 3, they contain bits 23..0 of the poolStringIndexLimit.
  209|       |            // Bits 27..24 are in indexes[URES_INDEX_ATTRIBUTES] bits 15..12.
  210|    445|            pResData->poolStringIndexLimit = static_cast<int32_t>(static_cast<uint32_t>(indexes[URES_INDEX_LENGTH]) >> 8);
  211|    445|        }
  212|    676|        if(indexLength>URES_INDEX_ATTRIBUTES) {
  ------------------
  |  Branch (212:12): [True: 676, False: 0]
  ------------------
  213|    676|            int32_t att=indexes[URES_INDEX_ATTRIBUTES];
  214|    676|            pResData->noFallback = static_cast<UBool>(att & URES_ATT_NO_FALLBACK);
  ------------------
  |  |  148|    676|#define URES_ATT_NO_FALLBACK 1
  ------------------
  215|    676|            pResData->isPoolBundle = static_cast<UBool>((att & URES_ATT_IS_POOL_BUNDLE) != 0);
  ------------------
  |  |  156|    676|#define URES_ATT_IS_POOL_BUNDLE 2
  ------------------
  216|    676|            pResData->usesPoolBundle = static_cast<UBool>((att & URES_ATT_USES_POOL_BUNDLE) != 0);
  ------------------
  |  |  157|    676|#define URES_ATT_USES_POOL_BUNDLE 4
  ------------------
  217|    676|            pResData->poolStringIndexLimit|=(att&0xf000)<<12;  // bits 15..12 -> 27..24
  218|    676|            pResData->poolStringIndex16Limit = static_cast<int32_t>(static_cast<uint32_t>(att) >> 16);
  219|    676|        }
  220|    676|        if((pResData->isPoolBundle || pResData->usesPoolBundle) && indexLength<=URES_INDEX_POOL_CHECKSUM) {
  ------------------
  |  Branch (220:13): [True: 2, False: 674]
  |  Branch (220:39): [True: 667, False: 7]
  |  Branch (220:68): [True: 0, False: 669]
  ------------------
  221|      0|            *errorCode=U_INVALID_FORMAT_ERROR;
  222|      0|            res_unload(pResData);
  ------------------
  |  |  210|      0|#define res_unload U_ICU_ENTRY_POINT_RENAME(res_unload)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|      0|            return;
  224|      0|        }
  225|    676|        if( indexLength>URES_INDEX_16BIT_TOP &&
  ------------------
  |  Branch (225:13): [True: 676, False: 0]
  ------------------
  226|    676|            indexes[URES_INDEX_16BIT_TOP]>indexes[URES_INDEX_KEYS_TOP]
  ------------------
  |  Branch (226:13): [True: 676, False: 0]
  ------------------
  227|    676|        ) {
  228|    676|            pResData->p16BitUnits = reinterpret_cast<const uint16_t*>(pResData->pRoot + indexes[URES_INDEX_KEYS_TOP]);
  229|    676|        }
  230|    676|    }
  231|       |
  232|    676|    if(formatVersion[0]==1 || U_CHARSET_FAMILY==U_ASCII_FAMILY) {
  ------------------
  |  |  588|    676|#   define U_CHARSET_FAMILY U_ASCII_FAMILY
  |  |  ------------------
  |  |  |  |  531|    676|#define U_ASCII_FAMILY 0
  |  |  ------------------
  ------------------
                  if(formatVersion[0]==1 || U_CHARSET_FAMILY==U_ASCII_FAMILY) {
  ------------------
  |  |  531|    676|#define U_ASCII_FAMILY 0
  ------------------
  |  Branch (232:8): [True: 0, False: 676]
  |  Branch (232:31): [Folded - Ignored]
  ------------------
  233|       |        /*
  234|       |         * formatVersion 1: compare key strings in native-charset order
  235|       |         * formatVersion 2 and up: compare key strings in ASCII order
  236|       |         */
  237|    676|        pResData->useNativeStrcmp=true;
  238|    676|    }
  239|    676|}
uresdata.cpp:_ZN12_GLOBAL__N_121isNoInheritanceMarkerEPK12ResourceDataj:
  357|   143k|UBool isNoInheritanceMarker(const ResourceData *pResData, Resource res) {
  358|   143k|    uint32_t offset=RES_GET_OFFSET(res);
  ------------------
  |  |   69|   143k|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  359|   143k|    if (offset == 0) {
  ------------------
  |  Branch (359:9): [True: 0, False: 143k]
  ------------------
  360|       |        // empty string
  361|   143k|    } else if (res == offset) {
  ------------------
  |  Branch (361:16): [True: 0, False: 143k]
  ------------------
  362|      0|        const int32_t *p32=pResData->pRoot+res;
  363|      0|        int32_t length=*p32;
  364|      0|        const char16_t* p = reinterpret_cast<const char16_t*>(p32);
  365|      0|        return length == 3 && p[2] == 0x2205 && p[3] == 0x2205 && p[4] == 0x2205;
  ------------------
  |  Branch (365:16): [True: 0, False: 0]
  |  Branch (365:31): [True: 0, False: 0]
  |  Branch (365:49): [True: 0, False: 0]
  |  Branch (365:67): [True: 0, False: 0]
  ------------------
  366|   143k|    } else if (RES_GET_TYPE(res) == URES_STRING_V2) {
  ------------------
  |  |   68|   143k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  |  Branch (366:16): [True: 143k, False: 0]
  ------------------
  367|   143k|        const char16_t *p;
  368|   143k|        if (static_cast<int32_t>(offset) < pResData->poolStringIndexLimit) {
  ------------------
  |  Branch (368:13): [True: 50.4k, False: 93.5k]
  ------------------
  369|  50.4k|            p = reinterpret_cast<const char16_t*>(pResData->poolBundleStrings) + offset;
  370|  93.5k|        } else {
  371|  93.5k|            p = reinterpret_cast<const char16_t*>(pResData->p16BitUnits) + (offset - pResData->poolStringIndexLimit);
  372|  93.5k|        }
  373|   143k|        int32_t first=*p;
  374|   143k|        if (first == 0x2205) {  // implicit length
  ------------------
  |  Branch (374:13): [True: 580, False: 143k]
  ------------------
  375|    580|            return p[1] == 0x2205 && p[2] == 0x2205 && p[3] == 0;
  ------------------
  |  Branch (375:20): [True: 580, False: 0]
  |  Branch (375:38): [True: 580, False: 0]
  |  Branch (375:56): [True: 580, False: 0]
  ------------------
  376|   143k|        } else if (first == 0xdc03) {  // explicit length 3 (should not occur)
  ------------------
  |  Branch (376:20): [True: 0, False: 143k]
  ------------------
  377|      0|            return p[1] == 0x2205 && p[2] == 0x2205 && p[3] == 0x2205;
  ------------------
  |  Branch (377:20): [True: 0, False: 0]
  |  Branch (377:38): [True: 0, False: 0]
  |  Branch (377:56): [True: 0, False: 0]
  ------------------
  378|   143k|        } else {
  379|       |            // Assume that the string has not been stored with more length units than necessary.
  380|   143k|            return false;
  381|   143k|        }
  382|   143k|    }
  383|      0|    return false;
  384|   143k|}
uresdata.cpp:_ZN12_GLOBAL__N_114getStringArrayEPK12ResourceDataRKN6icu_7813ResourceArrayEPNS3_13UnicodeStringEiR10UErrorCode:
  388|  6.03k|                       UErrorCode &errorCode) {
  389|  6.03k|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (389:8): [True: 0, False: 6.03k]
  ------------------
  390|      0|        return 0;
  391|      0|    }
  392|  6.03k|    if(dest == nullptr ? capacity != 0 : capacity < 0) {
  ------------------
  |  Branch (392:8): [True: 0, False: 6.03k]
  |  Branch (392:8): [True: 0, False: 6.03k]
  ------------------
  393|      0|        errorCode = U_ILLEGAL_ARGUMENT_ERROR;
  394|      0|        return 0;
  395|      0|    }
  396|  6.03k|    int32_t length = array.getSize();
  397|  6.03k|    if(length == 0) {
  ------------------
  |  Branch (397:8): [True: 0, False: 6.03k]
  ------------------
  398|      0|        return 0;
  399|      0|    }
  400|  6.03k|    if(length > capacity) {
  ------------------
  |  Branch (400:8): [True: 0, False: 6.03k]
  ------------------
  401|      0|        errorCode = U_BUFFER_OVERFLOW_ERROR;
  402|      0|        return length;
  403|      0|    }
  404|  43.8k|    for(int32_t i = 0; i < length; ++i) {
  ------------------
  |  Branch (404:24): [True: 37.8k, False: 6.03k]
  ------------------
  405|  37.8k|        int32_t sLength;
  406|       |        // No tracing: handled by the caller
  407|  37.8k|        const char16_t *s = res_getStringNoTrace(pResData, array.internalGetResource(pResData, i), &sLength);
  ------------------
  |  |  205|  37.8k|#define res_getStringNoTrace U_ICU_ENTRY_POINT_RENAME(res_getStringNoTrace)
  |  |  ------------------
  |  |  |  |  123|  37.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  37.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  37.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  408|  37.8k|        if(s == nullptr) {
  ------------------
  |  Branch (408:12): [True: 0, False: 37.8k]
  ------------------
  409|      0|            errorCode = U_RESOURCE_TYPE_MISMATCH;
  410|      0|            return 0;
  411|      0|        }
  412|  37.8k|        dest[i].setTo(true, s, sLength);
  413|  37.8k|    }
  414|  6.03k|    return length;
  415|  6.03k|}
uresdata.cpp:_ZL18_res_findTableItemPK12ResourceDataPKtiPKcPS5_:
   76|  1.40M|                   const char *key, const char **realKey) {
   77|  1.40M|    const char *tableKey;
   78|  1.40M|    int32_t mid, start, limit;
   79|  1.40M|    int result;
   80|       |
   81|       |    /* do a binary search for the key */
   82|  1.40M|    start=0;
   83|  1.40M|    limit=length;
   84|  5.72M|    while(start<limit) {
  ------------------
  |  Branch (84:11): [True: 5.24M, False: 475k]
  ------------------
   85|  5.24M|        mid = (start + limit) / 2;
   86|  5.24M|        tableKey = RES_GET_KEY16(pResData, keyOffsets[mid]);
  ------------------
  |  |   44|  5.24M|    ((keyOffset)<(pResData)->localKeyLimit ? \
  |  |  ------------------
  |  |  |  Branch (44:6): [True: 2.10M, False: 3.14M]
  |  |  ------------------
  |  |   45|  5.24M|        (const char *)(pResData)->pRoot+(keyOffset) : \
  |  |   46|  5.24M|        (pResData)->poolBundleKeys+(keyOffset)-(pResData)->localKeyLimit)
  ------------------
   87|  5.24M|        if (pResData->useNativeStrcmp) {
  ------------------
  |  Branch (87:13): [True: 5.24M, False: 0]
  ------------------
   88|  5.24M|            result = uprv_strcmp(key, tableKey);
  ------------------
  |  |   38|  5.24M|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  5.24M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
   89|  5.24M|        } else {
   90|      0|            result = uprv_compareInvCharsAsAscii(key, tableKey);
  ------------------
  |  |  153|      0|#   define uprv_compareInvCharsAsAscii(s1, s2) uprv_strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  |  |  ------------------
  |  |  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   91|      0|        }
   92|  5.24M|        if (result < 0) {
  ------------------
  |  Branch (92:13): [True: 2.78M, False: 2.46M]
  ------------------
   93|  2.78M|            limit = mid;
   94|  2.78M|        } else if (result > 0) {
  ------------------
  |  Branch (94:20): [True: 1.53M, False: 929k]
  ------------------
   95|  1.53M|            start = mid + 1;
   96|  1.53M|        } else {
   97|       |            /* We found it! */
   98|   929k|            *realKey=tableKey;
   99|   929k|            return mid;
  100|   929k|        }
  101|  5.24M|    }
  102|   475k|    return URESDATA_ITEM_NOT_FOUND;  /* not found or table is empty. */
  ------------------
  |  |   53|   475k|#define URESDATA_ITEM_NOT_FOUND -1
  ------------------
  103|  1.40M|}
uresdata.cpp:_ZL18makeResourceFrom16PK12ResourceDatai:
  700|  2.32M|makeResourceFrom16(const ResourceData *pResData, int32_t res16) {
  701|  2.32M|    if(res16<pResData->poolStringIndex16Limit) {
  ------------------
  |  Branch (701:8): [True: 71.7k, False: 2.25M]
  ------------------
  702|       |        // Pool string, nothing to do.
  703|  2.25M|    } else {
  704|       |        // Local string, adjust the 16-bit offset to a regular one,
  705|       |        // with a larger pool string index limit.
  706|  2.25M|        res16=res16-pResData->poolStringIndex16Limit+pResData->poolStringIndexLimit;
  707|  2.25M|    }
  708|  2.32M|    return URES_MAKE_RESOURCE(URES_STRING_V2, res16);
  ------------------
  |  |   87|  2.32M|#define URES_MAKE_RESOURCE(type, offset) (((Resource)(type)<<28)|(Resource)(offset))
  ------------------
  709|  2.32M|}

_ZN6icu_7817ResourceDataValueC2Ev:
  516|    995|        pResData(nullptr),
  517|    995|        validLocaleDataEntry(nullptr),
  518|    995|        res(static_cast<Resource>(URES_NONE)),
  519|    995|        fTraceInfo() {}
_ZN6icu_7817ResourceDataValue7setDataERK12ResourceData:
  522|  2.11k|    void setData(const ResourceData &data) {
  523|  2.11k|        pResData = &data;
  524|  2.11k|    }
_ZN6icu_7817ResourceDataValue23setValidLocaleDataEntryEP18UResourceDataEntry:
  526|  2.11k|    void setValidLocaleDataEntry(UResourceDataEntry *entry) {
  527|  2.11k|        validLocaleDataEntry = entry;
  528|  2.11k|    }
_ZN6icu_7817ResourceDataValue11setResourceEjONS_14ResourceTracerE:
  530|   291k|    void setResource(Resource r, ResourceTracer&& traceInfo) {
  531|   291k|        res = r;
  532|   291k|        fTraceInfo = traceInfo;
  533|   291k|    }
_ZNK6icu_7817ResourceDataValue7getDataEv:
  535|  1.43M|    const ResourceData &getData() const { return *pResData; }
_ZN6icu_7813res_getStringERKNS_14ResourceTracerEPK12ResourceDatajPi:
  486|  2.27M|        const ResourceData *pResData, Resource res, int32_t *pLength) {
  487|  2.27M|    traceInfo.trace("string");
  488|  2.27M|    return res_getStringNoTrace(pResData, res, pLength);
  ------------------
  |  |  205|  2.27M|#define res_getStringNoTrace U_ICU_ENTRY_POINT_RENAME(res_getStringNoTrace)
  |  |  ------------------
  |  |  |  |  123|  2.27M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.27M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.27M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  489|  2.27M|}
_ZN6icu_7816res_getIntVectorERKNS_14ResourceTracerEPK12ResourceDatajPi:
  498|    521|        const ResourceData *pResData, Resource res, int32_t *pLength) {
  499|    521|    traceInfo.trace("intvector");
  500|    521|    return res_getIntVectorNoTrace(pResData, res, pLength);
  ------------------
  |  |  202|    521|#define res_getIntVectorNoTrace U_ICU_ENTRY_POINT_RENAME(res_getIntVectorNoTrace)
  |  |  ------------------
  |  |  |  |  123|    521|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    521|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    521|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  501|    521|}
_ZN6icu_7810res_getIntERKNS_14ResourceTracerEj:
  503|    865|inline int32_t res_getInt(const ResourceTracer& traceInfo, Resource res) {
  504|    865|    traceInfo.trace("int");
  505|    865|    return RES_GET_INT_NO_TRACE(res);
  ------------------
  |  |   76|    865|#   define RES_GET_INT_NO_TRACE(res) (((int32_t)((res)<<4L))>>4L)
  ------------------
  506|    865|}

_ZNK15UResourceBundle10getResDataEv:
   94|  6.97M|    inline const ResourceData &getResData() const { return fData->fData; }
_ZN6icu_7820StackUResourceBundle8getAliasEv:
  130|   144k|    UResourceBundle* getAlias() { return &bundle; }
_ZN6icu_7820StackUResourceBundle3refEv:
  132|  1.11k|    UResourceBundle& ref() { return bundle; }

_ZN6icu_7817StringEnumerationC2Ev:
   28|  73.7k|    : chars(charsBuffer), charsCapacity(sizeof(charsBuffer)) {
   29|  73.7k|}
_ZN6icu_7817StringEnumerationD2Ev:
   31|  73.7k|StringEnumeration::~StringEnumeration() {
   32|  73.7k|    if (chars != nullptr && chars != charsBuffer) {
  ------------------
  |  Branch (32:9): [True: 73.7k, False: 0]
  |  Branch (32:29): [True: 0, False: 73.7k]
  ------------------
   33|      0|        uprv_free(chars);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   34|      0|    }
   35|  73.7k|}

u_strFindFirst_78:
   57|   212k|               const char16_t *sub, int32_t subLength) {
   58|   212k|    const char16_t *start, *p, *q, *subLimit;
   59|   212k|    char16_t c, cs, cq;
   60|       |
   61|   212k|    if(sub==nullptr || subLength<-1) {
  ------------------
  |  Branch (61:8): [True: 0, False: 212k]
  |  Branch (61:24): [True: 0, False: 212k]
  ------------------
   62|      0|        return (char16_t *)s;
   63|      0|    }
   64|   212k|    if(s==nullptr || length<-1) {
  ------------------
  |  Branch (64:8): [True: 0, False: 212k]
  |  Branch (64:22): [True: 0, False: 212k]
  ------------------
   65|      0|        return nullptr;
   66|      0|    }
   67|       |
   68|   212k|    start=s;
   69|       |
   70|   212k|    if(length<0 && subLength<0) {
  ------------------
  |  Branch (70:8): [True: 0, False: 212k]
  |  Branch (70:20): [True: 0, False: 0]
  ------------------
   71|       |        /* both strings are NUL-terminated */
   72|      0|        if((cs=*sub++)==0) {
  ------------------
  |  Branch (72:12): [True: 0, False: 0]
  ------------------
   73|      0|            return (char16_t *)s;
   74|      0|        }
   75|      0|        if(*sub==0 && !U16_IS_SURROGATE(cs)) {
  ------------------
  |  |   75|      0|#define U16_IS_SURROGATE(c) U_IS_SURROGATE(c)
  |  |  ------------------
  |  |  |  |  193|      0|#define U_IS_SURROGATE(c) (((c)&0xfffff800)==0xd800)
  |  |  ------------------
  ------------------
  |  Branch (75:12): [True: 0, False: 0]
  |  Branch (75:23): [True: 0, False: 0]
  ------------------
   76|       |            /* the substring consists of a single, non-surrogate BMP code point */
   77|      0|            return u_strchr(s, cs);
  ------------------
  |  |  385|      0|#define u_strchr U_ICU_ENTRY_POINT_RENAME(u_strchr)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   78|      0|        }
   79|       |
   80|      0|        while((c=*s++)!=0) {
  ------------------
  |  Branch (80:15): [True: 0, False: 0]
  ------------------
   81|      0|            if(c==cs) {
  ------------------
  |  Branch (81:16): [True: 0, False: 0]
  ------------------
   82|       |                /* found first substring char16_t, compare rest */
   83|      0|                p=s;
   84|      0|                q=sub;
   85|      0|                for(;;) {
   86|      0|                    if((cq=*q)==0) {
  ------------------
  |  Branch (86:24): [True: 0, False: 0]
  ------------------
   87|      0|                        if(isMatchAtCPBoundary(start, s-1, p, nullptr)) {
  ------------------
  |  Branch (87:28): [True: 0, False: 0]
  ------------------
   88|      0|                            return (char16_t *)(s-1); /* well-formed match */
   89|      0|                        } else {
   90|      0|                            break; /* no match because surrogate pair is split */
   91|      0|                        }
   92|      0|                    }
   93|      0|                    if((c=*p)==0) {
  ------------------
  |  Branch (93:24): [True: 0, False: 0]
  ------------------
   94|      0|                        return nullptr; /* no match, and none possible after s */
   95|      0|                    }
   96|      0|                    if(c!=cq) {
  ------------------
  |  Branch (96:24): [True: 0, False: 0]
  ------------------
   97|      0|                        break; /* no match */
   98|      0|                    }
   99|      0|                    ++p;
  100|      0|                    ++q;
  101|      0|                }
  102|      0|            }
  103|      0|        }
  104|       |
  105|       |        /* not found */
  106|      0|        return nullptr;
  107|      0|    }
  108|       |
  109|   212k|    if(subLength<0) {
  ------------------
  |  Branch (109:8): [True: 0, False: 212k]
  ------------------
  110|      0|        subLength=u_strlen(sub);
  ------------------
  |  |  393|      0|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  111|      0|    }
  112|   212k|    if(subLength==0) {
  ------------------
  |  Branch (112:8): [True: 0, False: 212k]
  ------------------
  113|      0|        return (char16_t *)s;
  114|      0|    }
  115|       |
  116|       |    /* get sub[0] to search for it fast */
  117|   212k|    cs=*sub++;
  118|   212k|    --subLength;
  119|   212k|    subLimit=sub+subLength;
  120|       |
  121|   212k|    if(subLength==0 && !U16_IS_SURROGATE(cs)) {
  ------------------
  |  |   75|   102k|#define U16_IS_SURROGATE(c) U_IS_SURROGATE(c)
  |  |  ------------------
  |  |  |  |  193|   102k|#define U_IS_SURROGATE(c) (((c)&0xfffff800)==0xd800)
  |  |  ------------------
  ------------------
  |  Branch (121:8): [True: 102k, False: 110k]
  |  Branch (121:24): [True: 102k, False: 0]
  ------------------
  122|       |        /* the substring consists of a single, non-surrogate BMP code point */
  123|   102k|        return length<0 ? u_strchr(s, cs) : u_memchr(s, cs, length);
  ------------------
  |  |  385|      0|#define u_strchr U_ICU_ENTRY_POINT_RENAME(u_strchr)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      return length<0 ? u_strchr(s, cs) : u_memchr(s, cs, length);
  ------------------
  |  |  330|   102k|#define u_memchr U_ICU_ENTRY_POINT_RENAME(u_memchr)
  |  |  ------------------
  |  |  |  |  123|   102k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   102k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   102k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (123:16): [True: 0, False: 102k]
  ------------------
  124|   102k|    }
  125|       |
  126|   110k|    if(length<0) {
  ------------------
  |  Branch (126:8): [True: 0, False: 110k]
  ------------------
  127|       |        /* s is NUL-terminated */
  128|      0|        while((c=*s++)!=0) {
  ------------------
  |  Branch (128:15): [True: 0, False: 0]
  ------------------
  129|      0|            if(c==cs) {
  ------------------
  |  Branch (129:16): [True: 0, False: 0]
  ------------------
  130|       |                /* found first substring char16_t, compare rest */
  131|      0|                p=s;
  132|      0|                q=sub;
  133|      0|                for(;;) {
  134|      0|                    if(q==subLimit) {
  ------------------
  |  Branch (134:24): [True: 0, False: 0]
  ------------------
  135|      0|                        if(isMatchAtCPBoundary(start, s-1, p, nullptr)) {
  ------------------
  |  Branch (135:28): [True: 0, False: 0]
  ------------------
  136|      0|                            return (char16_t *)(s-1); /* well-formed match */
  137|      0|                        } else {
  138|      0|                            break; /* no match because surrogate pair is split */
  139|      0|                        }
  140|      0|                    }
  141|      0|                    if((c=*p)==0) {
  ------------------
  |  Branch (141:24): [True: 0, False: 0]
  ------------------
  142|      0|                        return nullptr; /* no match, and none possible after s */
  143|      0|                    }
  144|      0|                    if(c!=*q) {
  ------------------
  |  Branch (144:24): [True: 0, False: 0]
  ------------------
  145|      0|                        break; /* no match */
  146|      0|                    }
  147|      0|                    ++p;
  148|      0|                    ++q;
  149|      0|                }
  150|      0|            }
  151|      0|        }
  152|   110k|    } else {
  153|   110k|        const char16_t *limit, *preLimit;
  154|       |
  155|       |        /* subLength was decremented above */
  156|   110k|        if(length<=subLength) {
  ------------------
  |  Branch (156:12): [True: 15.7k, False: 95.0k]
  ------------------
  157|  15.7k|            return nullptr; /* s is shorter than sub */
  158|  15.7k|        }
  159|       |
  160|  95.0k|        limit=s+length;
  161|       |
  162|       |        /* the substring must start before preLimit */
  163|  95.0k|        preLimit=limit-subLength;
  164|       |
  165|   934k|        while(s!=preLimit) {
  ------------------
  |  Branch (165:15): [True: 839k, False: 95.0k]
  ------------------
  166|   839k|            c=*s++;
  167|   839k|            if(c==cs) {
  ------------------
  |  Branch (167:16): [True: 1.96k, False: 837k]
  ------------------
  168|       |                /* found first substring char16_t, compare rest */
  169|  1.96k|                p=s;
  170|  1.96k|                q=sub;
  171|  2.44k|                for(;;) {
  172|  2.44k|                    if(q==subLimit) {
  ------------------
  |  Branch (172:24): [True: 0, False: 2.44k]
  ------------------
  173|      0|                        if(isMatchAtCPBoundary(start, s-1, p, limit)) {
  ------------------
  |  Branch (173:28): [True: 0, False: 0]
  ------------------
  174|      0|                            return (char16_t *)(s-1); /* well-formed match */
  175|      0|                        } else {
  176|      0|                            break; /* no match because surrogate pair is split */
  177|      0|                        }
  178|      0|                    }
  179|  2.44k|                    if(*p!=*q) {
  ------------------
  |  Branch (179:24): [True: 1.96k, False: 472]
  ------------------
  180|  1.96k|                        break; /* no match */
  181|  1.96k|                    }
  182|    472|                    ++p;
  183|    472|                    ++q;
  184|    472|                }
  185|  1.96k|            }
  186|   839k|        }
  187|  95.0k|    }
  188|       |
  189|       |    /* not found */
  190|  95.0k|    return nullptr;
  191|   110k|}
u_memchr_78:
  241|   107k|u_memchr(const char16_t *s, char16_t c, int32_t count) {
  242|   107k|    if(count<=0) {
  ------------------
  |  Branch (242:8): [True: 0, False: 107k]
  ------------------
  243|      0|        return nullptr; /* no string */
  244|   107k|    } else if(U16_IS_SURROGATE(c)) {
  ------------------
  |  |   75|   107k|#define U16_IS_SURROGATE(c) U_IS_SURROGATE(c)
  |  |  ------------------
  |  |  |  |  193|   107k|#define U_IS_SURROGATE(c) (((c)&0xfffff800)==0xd800)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (193:27): [True: 0, False: 107k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  245|       |        /* make sure to not find half of a surrogate pair */
  246|      0|        return u_strFindFirst(s, count, &c, 1);
  ------------------
  |  |  361|      0|#define u_strFindFirst U_ICU_ENTRY_POINT_RENAME(u_strFindFirst)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  247|   107k|    } else {
  248|       |        /* trivial search for a BMP code point */
  249|   107k|        const char16_t *limit=s+count;
  250|   750k|        do {
  251|   750k|            if(*s==c) {
  ------------------
  |  Branch (251:16): [True: 16.5k, False: 733k]
  ------------------
  252|  16.5k|                return (char16_t *)s;
  253|  16.5k|            }
  254|   750k|        } while(++s!=limit);
  ------------------
  |  Branch (254:17): [True: 643k, False: 90.7k]
  ------------------
  255|  90.7k|        return nullptr;
  256|   107k|    }
  257|   107k|}
u_memrchr_78:
  416|   110k|u_memrchr(const char16_t *s, char16_t c, int32_t count) {
  417|   110k|    if(count<=0) {
  ------------------
  |  Branch (417:8): [True: 0, False: 110k]
  ------------------
  418|      0|        return nullptr; /* no string */
  419|   110k|    } else if(U16_IS_SURROGATE(c)) {
  ------------------
  |  |   75|   110k|#define U16_IS_SURROGATE(c) U_IS_SURROGATE(c)
  |  |  ------------------
  |  |  |  |  193|   110k|#define U_IS_SURROGATE(c) (((c)&0xfffff800)==0xd800)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (193:27): [True: 0, False: 110k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  420|       |        /* make sure to not find half of a surrogate pair */
  421|      0|        return u_strFindLast(s, count, &c, 1);
  ------------------
  |  |  362|      0|#define u_strFindLast U_ICU_ENTRY_POINT_RENAME(u_strFindLast)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  422|   110k|    } else {
  423|       |        /* trivial search for a BMP code point */
  424|   110k|        const char16_t *limit=s+count;
  425|   876k|        do {
  426|   876k|            if(*(--limit)==c) {
  ------------------
  |  Branch (426:16): [True: 90.7k, False: 786k]
  ------------------
  427|  90.7k|                return (char16_t *)limit;
  428|  90.7k|            }
  429|   876k|        } while(s!=limit);
  ------------------
  |  Branch (429:17): [True: 766k, False: 20.0k]
  ------------------
  430|  20.0k|        return nullptr;
  431|   110k|    }
  432|   110k|}
u_strlen_78:
  995|  4.52M|{
  996|       |#if U_SIZEOF_WCHAR_T == U_SIZEOF_UCHAR
  997|       |    return (int32_t)uprv_wcslen((const wchar_t *)s);
  998|       |#else
  999|  4.52M|    const char16_t *t = s;
 1000|  68.1M|    while(*t != 0) {
  ------------------
  |  Branch (1000:11): [True: 63.6M, False: 4.52M]
  ------------------
 1001|  63.6M|      ++t;
 1002|  63.6M|    }
 1003|  4.52M|    return t - s;
 1004|  4.52M|#endif
 1005|  4.52M|}
u_countChar32_78:
 1008|    420|u_countChar32(const char16_t *s, int32_t length) {
 1009|    420|    int32_t count;
 1010|       |
 1011|    420|    if(s==nullptr || length<-1) {
  ------------------
  |  Branch (1011:8): [True: 0, False: 420]
  |  Branch (1011:22): [True: 0, False: 420]
  ------------------
 1012|      0|        return 0;
 1013|      0|    }
 1014|       |
 1015|    420|    count=0;
 1016|    420|    if(length>=0) {
  ------------------
  |  Branch (1016:8): [True: 420, False: 0]
  ------------------
 1017|  4.62k|        while(length>0) {
  ------------------
  |  Branch (1017:15): [True: 4.20k, False: 420]
  ------------------
 1018|  4.20k|            ++count;
 1019|  4.20k|            if(U16_IS_LEAD(*s) && length>=2 && U16_IS_TRAIL(*(s+1))) {
  ------------------
  |  |   59|  8.40k|#define U16_IS_LEAD(c) (((c)&0xfffffc00)==0xd800)
  |  |  ------------------
  |  |  |  Branch (59:24): [True: 40, False: 4.16k]
  |  |  ------------------
  ------------------
                          if(U16_IS_LEAD(*s) && length>=2 && U16_IS_TRAIL(*(s+1))) {
  ------------------
  |  |   67|     40|#define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
  |  |  ------------------
  |  |  |  Branch (67:25): [True: 40, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1019:35): [True: 40, False: 0]
  ------------------
 1020|     40|                s+=2;
 1021|     40|                length-=2;
 1022|  4.16k|            } else {
 1023|  4.16k|                ++s;
 1024|  4.16k|                --length;
 1025|  4.16k|            }
 1026|  4.20k|        }
 1027|    420|    } else /* length==-1 */ {
 1028|      0|        char16_t c;
 1029|       |
 1030|      0|        for(;;) {
 1031|      0|            if((c=*s++)==0) {
  ------------------
  |  Branch (1031:16): [True: 0, False: 0]
  ------------------
 1032|      0|                break;
 1033|      0|            }
 1034|      0|            ++count;
 1035|       |
 1036|       |            /*
 1037|       |             * sufficient to look ahead one because of UTF-16;
 1038|       |             * safe to look ahead one because at worst that would be the terminating NUL
 1039|       |             */
 1040|      0|            if(U16_IS_LEAD(c) && U16_IS_TRAIL(*s)) {
  ------------------
  |  |   59|      0|#define U16_IS_LEAD(c) (((c)&0xfffffc00)==0xd800)
  |  |  ------------------
  |  |  |  Branch (59:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                          if(U16_IS_LEAD(c) && U16_IS_TRAIL(*s)) {
  ------------------
  |  |   67|      0|#define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
  |  |  ------------------
  |  |  |  Branch (67:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1041|      0|                ++s;
 1042|      0|            }
 1043|      0|        }
 1044|      0|    }
 1045|    420|    return count;
 1046|    420|}
u_memcpy_78:
 1117|  1.60M|u_memcpy(char16_t *dest, const char16_t *src, int32_t count) {
 1118|  1.60M|    if(count > 0) {
  ------------------
  |  Branch (1118:8): [True: 1.60M, False: 0]
  ------------------
 1119|  1.60M|        uprv_memcpy(dest, src, (size_t)count*U_SIZEOF_UCHAR);
  ------------------
  |  |   42|  1.60M|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  1.60M|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  1.60M|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  1.60M|    _Pragma("clang diagnostic push") \
  |  |   45|  1.60M|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  1.60M|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.60M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  1.60M|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.60M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  1.60M|    _Pragma("clang diagnostic pop") \
  |  |   49|  1.60M|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  1.60M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  1.60M|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  1.60M|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1120|  1.60M|    }
 1121|  1.60M|    return dest;
 1122|  1.60M|}
u_memcmp_78:
 1146|   246k|u_memcmp(const char16_t *buf1, const char16_t *buf2, int32_t count) {
 1147|   246k|    if(count > 0) {
  ------------------
  |  Branch (1147:8): [True: 246k, False: 0]
  ------------------
 1148|   246k|        const char16_t *limit = buf1 + count;
 1149|   246k|        int32_t result;
 1150|       |
 1151|   421k|        while (buf1 < limit) {
  ------------------
  |  Branch (1151:16): [True: 402k, False: 19.6k]
  ------------------
 1152|   402k|            result = (int32_t)(uint16_t)*buf1 - (int32_t)(uint16_t)*buf2;
 1153|   402k|            if (result != 0) {
  ------------------
  |  Branch (1153:17): [True: 226k, False: 175k]
  ------------------
 1154|   226k|                return result;
 1155|   226k|            }
 1156|   175k|            buf1++;
 1157|   175k|            buf2++;
 1158|   175k|        }
 1159|   246k|    }
 1160|  19.6k|    return 0;
 1161|   246k|}
u_terminateUChars_78:
 1469|  1.03M|u_terminateUChars(char16_t *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode) {
 1470|  1.03M|    __TERMINATE_STRING(dest, destCapacity, length, pErrorCode);
  ------------------
  |  | 1437|  1.03M|#define __TERMINATE_STRING(dest, destCapacity, length, pErrorCode) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  1.03M|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  | 1438|  1.03M|    if(pErrorCode!=nullptr && U_SUCCESS(*pErrorCode)) {                    \
  |  |  ------------------
  |  |  |  Branch (1438:8): [True: 1.03M, False: 0]
  |  |  |  Branch (1438:31): [True: 1.03M, False: 0]
  |  |  ------------------
  |  | 1439|  1.03M|        /* not a public function, so no complete argument checking */   \
  |  | 1440|  1.03M|                                                                        \
  |  | 1441|  1.03M|        if(length<0) {                                                  \
  |  |  ------------------
  |  |  |  Branch (1441:12): [True: 0, False: 1.03M]
  |  |  ------------------
  |  | 1442|      0|            /* assume that the caller handles this */                   \
  |  | 1443|  1.03M|        } else if(length<destCapacity) {                                \
  |  |  ------------------
  |  |  |  Branch (1443:19): [True: 1.03M, False: 0]
  |  |  ------------------
  |  | 1444|  1.03M|            /* NUL-terminate the string, the NUL fits */                \
  |  | 1445|  1.03M|            dest[length]=0;                                             \
  |  | 1446|  1.03M|            /* unset the not-terminated warning but leave all others */ \
  |  | 1447|  1.03M|            if(*pErrorCode==U_STRING_NOT_TERMINATED_WARNING) {          \
  |  |  ------------------
  |  |  |  Branch (1447:16): [True: 0, False: 1.03M]
  |  |  ------------------
  |  | 1448|      0|                *pErrorCode=U_ZERO_ERROR;                               \
  |  | 1449|      0|            }                                                           \
  |  | 1450|  1.03M|        } else if(length==destCapacity) {                               \
  |  |  ------------------
  |  |  |  Branch (1450:19): [True: 0, False: 0]
  |  |  ------------------
  |  | 1451|      0|            /* unable to NUL-terminate, but the string itself fit - set a warning code */ \
  |  | 1452|      0|            *pErrorCode=U_STRING_NOT_TERMINATED_WARNING;                \
  |  | 1453|      0|        } else /* length>destCapacity */ {                              \
  |  | 1454|      0|            /* even the string itself did not fit - set an error code */ \
  |  | 1455|      0|            *pErrorCode=U_BUFFER_OVERFLOW_ERROR;                        \
  |  | 1456|      0|        }                                                               \
  |  | 1457|  1.03M|    } \
  |  | 1458|  1.03M|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  1.03M|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1471|  1.03M|    return length;
 1472|  1.03M|}
u_terminateChars_78:
 1475|   177k|u_terminateChars(char *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode) {
 1476|   177k|    __TERMINATE_STRING(dest, destCapacity, length, pErrorCode);
  ------------------
  |  | 1437|   177k|#define __TERMINATE_STRING(dest, destCapacity, length, pErrorCode) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|   177k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  | 1438|   177k|    if(pErrorCode!=nullptr && U_SUCCESS(*pErrorCode)) {                    \
  |  |  ------------------
  |  |  |  Branch (1438:8): [True: 177k, False: 0]
  |  |  |  Branch (1438:31): [True: 177k, False: 0]
  |  |  ------------------
  |  | 1439|   177k|        /* not a public function, so no complete argument checking */   \
  |  | 1440|   177k|                                                                        \
  |  | 1441|   177k|        if(length<0) {                                                  \
  |  |  ------------------
  |  |  |  Branch (1441:12): [True: 0, False: 177k]
  |  |  ------------------
  |  | 1442|      0|            /* assume that the caller handles this */                   \
  |  | 1443|   177k|        } else if(length<destCapacity) {                                \
  |  |  ------------------
  |  |  |  Branch (1443:19): [True: 177k, False: 0]
  |  |  ------------------
  |  | 1444|   177k|            /* NUL-terminate the string, the NUL fits */                \
  |  | 1445|   177k|            dest[length]=0;                                             \
  |  | 1446|   177k|            /* unset the not-terminated warning but leave all others */ \
  |  | 1447|   177k|            if(*pErrorCode==U_STRING_NOT_TERMINATED_WARNING) {          \
  |  |  ------------------
  |  |  |  Branch (1447:16): [True: 0, False: 177k]
  |  |  ------------------
  |  | 1448|      0|                *pErrorCode=U_ZERO_ERROR;                               \
  |  | 1449|      0|            }                                                           \
  |  | 1450|   177k|        } else if(length==destCapacity) {                               \
  |  |  ------------------
  |  |  |  Branch (1450:19): [True: 0, False: 0]
  |  |  ------------------
  |  | 1451|      0|            /* unable to NUL-terminate, but the string itself fit - set a warning code */ \
  |  | 1452|      0|            *pErrorCode=U_STRING_NOT_TERMINATED_WARNING;                \
  |  | 1453|      0|        } else /* length>destCapacity */ {                              \
  |  | 1454|      0|            /* even the string itself did not fit - set an error code */ \
  |  | 1455|      0|            *pErrorCode=U_BUFFER_OVERFLOW_ERROR;                        \
  |  | 1456|      0|        }                                                               \
  |  | 1457|   177k|    } \
  |  | 1458|   177k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|   177k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1477|   177k|    return length;
 1478|   177k|}
ustr_hashUCharsN_78:
 1523|  1.67M|ustr_hashUCharsN(const char16_t *str, int32_t length) {
 1524|  1.67M|    STRING_HASH(char16_t, str, length, *p);
  ------------------
  |  | 1506|  1.67M|#define STRING_HASH(TYPE, STR, STRLEN, DEREF) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  1.67M|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  | 1507|  1.67M|    uint32_t hash = 0;                        \
  |  | 1508|  1.67M|    const TYPE *p = (const TYPE*) STR;        \
  |  | 1509|  1.67M|    if (p != nullptr) {                          \
  |  |  ------------------
  |  |  |  Branch (1509:9): [True: 1.67M, False: 0]
  |  |  ------------------
  |  | 1510|  1.67M|        int32_t len = (int32_t)(STRLEN);      \
  |  | 1511|  1.67M|        int32_t inc = ((len - 32) / 32) + 1;  \
  |  | 1512|  1.67M|        const TYPE *limit = p + len;          \
  |  | 1513|  24.1M|        while (p<limit) {                     \
  |  |  ------------------
  |  |  |  Branch (1513:16): [True: 22.5M, False: 1.67M]
  |  |  ------------------
  |  | 1514|  22.5M|            hash = (hash * 37) + DEREF;       \
  |  | 1515|  22.5M|            p += inc;                         \
  |  | 1516|  22.5M|        }                                     \
  |  | 1517|  1.67M|    }                                         \
  |  | 1518|  1.67M|    return static_cast<int32_t>(hash);        \
  |  | 1519|  1.67M|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  1.67M|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1525|  1.67M|}
ustr_hashCharsN_78:
 1528|   828k|ustr_hashCharsN(const char *str, int32_t length) {
 1529|   828k|    STRING_HASH(uint8_t, str, length, *p);
  ------------------
  |  | 1506|   828k|#define STRING_HASH(TYPE, STR, STRLEN, DEREF) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|   828k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  | 1507|   828k|    uint32_t hash = 0;                        \
  |  | 1508|   828k|    const TYPE *p = (const TYPE*) STR;        \
  |  | 1509|   828k|    if (p != nullptr) {                          \
  |  |  ------------------
  |  |  |  Branch (1509:9): [True: 828k, False: 0]
  |  |  ------------------
  |  | 1510|   828k|        int32_t len = (int32_t)(STRLEN);      \
  |  | 1511|   828k|        int32_t inc = ((len - 32) / 32) + 1;  \
  |  | 1512|   828k|        const TYPE *limit = p + len;          \
  |  | 1513|  10.0M|        while (p<limit) {                     \
  |  |  ------------------
  |  |  |  Branch (1513:16): [True: 9.22M, False: 828k]
  |  |  ------------------
  |  | 1514|  9.22M|            hash = (hash * 37) + DEREF;       \
  |  | 1515|  9.22M|            p += inc;                         \
  |  | 1516|  9.22M|        }                                     \
  |  | 1517|   828k|    }                                         \
  |  | 1518|   828k|    return static_cast<int32_t>(hash);        \
  |  | 1519|   828k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|   828k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1530|   828k|}

_ZN6icu_787UVectorC2EPFvPvEPFa8UElementS4_ER10UErrorCode:
   41|  62.6k|        UVector(d, c, DEFAULT_CAPACITY, status) {
   42|  62.6k|}
_ZN6icu_787UVectorC2EPFvPvEPFa8UElementS4_EiR10UErrorCode:
   45|  63.3k|    deleter(d),
   46|  63.3k|    comparer(c)
   47|  63.3k|{
   48|  63.3k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (48:9): [True: 0, False: 63.3k]
  ------------------
   49|      0|        return;
   50|      0|    }
   51|       |    // Fix bogus initialCapacity values; avoid malloc(0) and integer overflow
   52|  63.3k|    if ((initialCapacity < 1) || (initialCapacity > static_cast<int32_t>(INT32_MAX / sizeof(UElement)))) {
  ------------------
  |  Branch (52:9): [True: 0, False: 63.3k]
  |  Branch (52:34): [True: 0, False: 63.3k]
  ------------------
   53|      0|        initialCapacity = DEFAULT_CAPACITY;
   54|      0|    }
   55|  63.3k|    elements = static_cast<UElement*>(uprv_malloc(sizeof(UElement) * initialCapacity));
  ------------------
  |  | 1524|  63.3k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  63.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  63.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  63.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   56|  63.3k|    if (elements == nullptr) {
  ------------------
  |  Branch (56:9): [True: 0, False: 63.3k]
  ------------------
   57|      0|        status = U_MEMORY_ALLOCATION_ERROR;
   58|  63.3k|    } else {
   59|  63.3k|        capacity = initialCapacity;
   60|  63.3k|    }
   61|  63.3k|}
_ZN6icu_787UVectorD2Ev:
   63|  62.7k|UVector::~UVector() {
   64|  62.7k|    removeAllElements();
   65|  62.7k|    uprv_free(elements);
  ------------------
  |  | 1503|  62.7k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  62.7k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  62.7k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  62.7k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   66|  62.7k|    elements = nullptr;
   67|  62.7k|}
_ZN6icu_787UVector10addElementEPvR10UErrorCode:
  102|  81.5k|void UVector::addElement(void* obj, UErrorCode &status) {
  103|  81.5k|    U_ASSERT(deleter == nullptr);
  ------------------
  |  |   35|  81.5k|#   define U_ASSERT(exp) (void)0
  ------------------
  104|  81.5k|    if (ensureCapacity(count + 1, status)) {
  ------------------
  |  Branch (104:9): [True: 81.5k, False: 0]
  ------------------
  105|  81.5k|        elements[count++].pointer = obj;
  106|  81.5k|    }
  107|  81.5k|}
_ZN6icu_787UVector12adoptElementEPvR10UErrorCode:
  109|  10.0k|void UVector::adoptElement(void* obj, UErrorCode &status) {
  110|  10.0k|    U_ASSERT(deleter != nullptr);
  ------------------
  |  |   35|  10.0k|#   define U_ASSERT(exp) (void)0
  ------------------
  111|  10.0k|    if (ensureCapacity(count + 1, status)) {
  ------------------
  |  Branch (111:9): [True: 10.0k, False: 0]
  ------------------
  112|  10.0k|        elements[count++].pointer = obj;
  113|  10.0k|    } else {
  114|      0|        (*deleter)(obj);
  115|      0|    }
  116|  10.0k|}
_ZNK6icu_787UVector9elementAtEi:
  185|   570k|void* UVector::elementAt(int32_t index) const {
  186|   570k|    return (0 <= index && index < count) ? elements[index].pointer : nullptr;
  ------------------
  |  Branch (186:13): [True: 570k, False: 0]
  |  Branch (186:27): [True: 570k, False: 0]
  ------------------
  187|   570k|}
_ZN6icu_787UVector15removeElementAtEi:
  235|  8.99k|void UVector::removeElementAt(int32_t index) {
  236|  8.99k|    void* e = orphanElementAt(index);
  237|  8.99k|    if (e != nullptr && deleter != nullptr) {
  ------------------
  |  Branch (237:9): [True: 8.99k, False: 0]
  |  Branch (237:25): [True: 8.99k, False: 0]
  ------------------
  238|  8.99k|        (*deleter)(e);
  239|  8.99k|    }
  240|  8.99k|}
_ZN6icu_787UVector17removeAllElementsEv:
  251|  63.2k|void UVector::removeAllElements() {
  252|  63.2k|    if (deleter != nullptr) {
  ------------------
  |  Branch (252:9): [True: 1.55k, False: 61.6k]
  ------------------
  253|  1.55k|        for (int32_t i=0; i<count; ++i) {
  ------------------
  |  Branch (253:27): [True: 0, False: 1.55k]
  ------------------
  254|      0|            if (elements[i].pointer != nullptr) {
  ------------------
  |  Branch (254:17): [True: 0, False: 0]
  ------------------
  255|      0|                (*deleter)(elements[i].pointer);
  256|      0|            }
  257|      0|        }
  258|  1.55k|    }
  259|  63.2k|    count = 0;
  260|  63.2k|}
_ZNK6icu_787UVector7indexOfEPvi:
  288|  97.3k|int32_t UVector::indexOf(void* obj, int32_t startIndex) const {
  289|  97.3k|    UElement key;
  290|  97.3k|    key.pointer = obj;
  291|  97.3k|    return indexOf(key, startIndex, HINT_KEY_POINTER);
  292|  97.3k|}
_ZNK6icu_787UVector7indexOfE8UElementia:
  300|  97.3k|int32_t UVector::indexOf(UElement key, int32_t startIndex, int8_t hint) const {
  301|  97.3k|    if (comparer != nullptr) {
  ------------------
  |  Branch (301:9): [True: 97.3k, False: 0]
  ------------------
  302|   127k|        for (int32_t i=startIndex; i<count; ++i) {
  ------------------
  |  Branch (302:36): [True: 45.6k, False: 81.5k]
  ------------------
  303|  45.6k|            if ((*comparer)(key, elements[i])) {
  ------------------
  |  Branch (303:17): [True: 15.8k, False: 29.7k]
  ------------------
  304|  15.8k|                return i;
  305|  15.8k|            }
  306|  45.6k|        }
  307|  97.3k|    } else {
  308|      0|        for (int32_t i=startIndex; i<count; ++i) {
  ------------------
  |  Branch (308:36): [True: 0, False: 0]
  ------------------
  309|       |            /* Pointers are not always the same size as ints so to perform
  310|       |             * a valid comparison we need to know whether we are being
  311|       |             * provided an int or a pointer. */
  312|      0|            if (hint & HINT_KEY_POINTER) {
  ------------------
  |  Branch (312:17): [True: 0, False: 0]
  ------------------
  313|      0|                if (key.pointer == elements[i].pointer) {
  ------------------
  |  Branch (313:21): [True: 0, False: 0]
  ------------------
  314|      0|                    return i;
  315|      0|                }
  316|      0|            } else {
  317|      0|                if (key.integer == elements[i].integer) {
  ------------------
  |  Branch (317:21): [True: 0, False: 0]
  ------------------
  318|      0|                    return i;
  319|      0|                }
  320|      0|            }
  321|      0|        }
  322|      0|    }
  323|  81.5k|    return -1;
  324|  97.3k|}
_ZN6icu_787UVector14ensureCapacityEiR10UErrorCode:
  326|  91.6k|UBool UVector::ensureCapacity(int32_t minimumCapacity, UErrorCode &status) {
  327|  91.6k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (327:9): [True: 0, False: 91.6k]
  ------------------
  328|      0|        return false;
  329|      0|    }
  330|  91.6k|    if (minimumCapacity < 0) {
  ------------------
  |  Branch (330:9): [True: 0, False: 91.6k]
  ------------------
  331|      0|        status = U_ILLEGAL_ARGUMENT_ERROR;
  332|      0|        return false;
  333|      0|    }
  334|  91.6k|    if (capacity < minimumCapacity) {
  ------------------
  |  Branch (334:9): [True: 775, False: 90.8k]
  ------------------
  335|    775|        if (capacity > (INT32_MAX - 1) / 2) {        	// integer overflow check
  ------------------
  |  Branch (335:13): [True: 0, False: 775]
  ------------------
  336|      0|            status = U_ILLEGAL_ARGUMENT_ERROR;
  337|      0|            return false;
  338|      0|        }
  339|    775|        int32_t newCap = capacity * 2;
  340|    775|        if (newCap < minimumCapacity) {
  ------------------
  |  Branch (340:13): [True: 0, False: 775]
  ------------------
  341|      0|            newCap = minimumCapacity;
  342|      0|        }
  343|    775|        if (newCap > static_cast<int32_t>(INT32_MAX / sizeof(UElement))) { // integer overflow check
  ------------------
  |  Branch (343:13): [True: 0, False: 775]
  ------------------
  344|       |            // We keep the original memory contents on bad minimumCapacity.
  345|      0|            status = U_ILLEGAL_ARGUMENT_ERROR;
  346|      0|            return false;
  347|      0|        }
  348|    775|        UElement* newElems = static_cast<UElement*>(uprv_realloc(elements, sizeof(UElement) * newCap));
  ------------------
  |  | 1536|    775|#define uprv_realloc U_ICU_ENTRY_POINT_RENAME(uprv_realloc)
  |  |  ------------------
  |  |  |  |  123|    775|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    775|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    775|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  349|    775|        if (newElems == nullptr) {
  ------------------
  |  Branch (349:13): [True: 0, False: 775]
  ------------------
  350|       |            // We keep the original contents on the memory failure on realloc or bad minimumCapacity.
  351|      0|            status = U_MEMORY_ALLOCATION_ERROR;
  352|      0|            return false;
  353|      0|        }
  354|    775|        elements = newElems;
  355|    775|        capacity = newCap;
  356|    775|    }
  357|  91.6k|    return true;
  358|  91.6k|}
_ZN6icu_787UVector10setDeleterEPFvPvE:
  397|      1|UObjectDeleter *UVector::setDeleter(UObjectDeleter *d) {
  398|      1|    UObjectDeleter *old = deleter;
  399|      1|    deleter = d;
  400|      1|    return old;
  401|      1|}
_ZN6icu_787UVector15orphanElementAtEi:
  418|  8.99k|void* UVector::orphanElementAt(int32_t index) {
  419|  8.99k|    void* e = nullptr;
  420|  8.99k|    if (0 <= index && index < count) {
  ------------------
  |  Branch (420:9): [True: 8.99k, False: 0]
  |  Branch (420:23): [True: 8.99k, False: 0]
  ------------------
  421|  8.99k|        e = elements[index].pointer;
  422|   108k|        for (int32_t i=index; i<count-1; ++i) {
  ------------------
  |  Branch (422:31): [True: 99.4k, False: 8.99k]
  ------------------
  423|  99.4k|            elements[i] = elements[i+1];
  424|  99.4k|        }
  425|  8.99k|        --count;
  426|  8.99k|    }
  427|       |    /* else index out of range */
  428|  8.99k|    return e;
  429|  8.99k|}
_ZN6icu_787UVector4sortEPFi8UElementS1_ER10UErrorCode:
  547|    717|void UVector::sort(UElementComparator *compare, UErrorCode &ec) {
  548|    717|    if (U_SUCCESS(ec)) {
  ------------------
  |  Branch (548:9): [True: 717, False: 0]
  ------------------
  549|    717|        uprv_sortArray(elements, count, sizeof(UElement),
  ------------------
  |  | 1538|    717|#define uprv_sortArray U_ICU_ENTRY_POINT_RENAME(uprv_sortArray)
  |  |  ------------------
  |  |  |  |  123|    717|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    717|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    717|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  550|    717|                       sortComparator, &compare, false, &ec);
  551|    717|    }
  552|    717|}

_ZNK6icu_787UVector7isEmptyEv:
  192|    388|    inline UBool isEmpty() const {return count == 0;}
_ZNK6icu_787UVector8containsEPv:
  174|  97.3k|    inline UBool contains(void* obj) const {return indexOf(obj) >= 0;}
_ZNK6icu_787UVector4sizeEv:
  190|   616k|    inline int32_t size() const {return count;}
_ZNK6icu_787UVectorixEi:
  218|  8.99k|    inline void* operator[](int32_t index) const {return elementAt(index);}

_ZN6icu_7813BasicTimeZoneC2ERKNS_13UnicodeStringE:
   28|      1|: TimeZone(id) {
   29|      1|}
_ZN6icu_7813BasicTimeZoneC2ERKS0_:
   32|    287|: TimeZone(source) {
   33|    287|}
_ZN6icu_7813BasicTimeZoneD2Ev:
   35|    287|BasicTimeZone::~BasicTimeZone() {
   36|    287|}

_ZN6icu_788Calendar6getNowEv:
 1093|    420|{
 1094|    420|    return uprv_getUTCtime(); // return as milliseconds
  ------------------
  |  | 1512|    420|#define uprv_getUTCtime U_ICU_ENTRY_POINT_RENAME(uprv_getUTCtime)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1095|    420|}

_ZN6icu_7817DateFormatSymbolsC2ERKNS_6LocaleER10UErrorCode:
  294|    420|    : UObject()
  295|    420|{
  296|    420|  initializeData(locale, nullptr,  status);
  297|    420|}
_ZN6icu_7817DateFormatSymbols11assignArrayERPNS_13UnicodeStringERiPKS1_i:
  331|    105|{
  332|       |    // assignArray() is only called by copyData() and initializeData(), which in turn
  333|       |    // implements the copy constructor and the assignment operator.
  334|       |    // All strings in a DateFormatSymbols object are created in one of the following
  335|       |    // three ways that all allow to safely use UnicodeString::fastCopyFrom():
  336|       |    // - readonly-aliases from resource bundles
  337|       |    // - readonly-aliases or allocated strings from constants
  338|       |    // - safely cloned strings (with owned buffers) from setXYZ() functions
  339|       |    //
  340|       |    // Note that this is true for as long as DateFormatSymbols can be constructed
  341|       |    // only from a locale bundle or set via the cloning API,
  342|       |    // *and* for as long as all the strings are in *private* fields, preventing
  343|       |    // a subclass from creating these strings in an "unsafe" way (with respect to fastCopyFrom()).
  344|    105|    if(srcArray == nullptr) {
  ------------------
  |  Branch (344:8): [True: 0, False: 105]
  ------------------
  345|       |        // Do not attempt to copy bogus input (which will crash).
  346|       |        // Note that this assignArray method already had the potential to return a null dstArray;
  347|       |        // see handling below for "if(dstArray != nullptr)".
  348|      0|        dstCount = 0;
  349|      0|        dstArray = nullptr;
  350|      0|        return;
  351|      0|    }
  352|    105|    dstCount = srcCount;
  353|    105|    dstArray = newUnicodeStringArray(srcCount);
  354|    105|    if(dstArray != nullptr) {
  ------------------
  |  Branch (354:8): [True: 105, False: 0]
  ------------------
  355|    105|        int32_t i;
  356|    315|        for(i=0; i<srcCount; ++i) {
  ------------------
  |  Branch (356:18): [True: 210, False: 105]
  ------------------
  357|    210|            dstArray[i].fastCopyFrom(srcArray[i]);
  358|    210|        }
  359|    105|    }
  360|    105|}
_ZN6icu_7817DateFormatSymbolsD2Ev:
  497|    420|{
  498|    420|    dispose();
  499|    420|    delete actualLocale;
  500|    420|    delete validLocale;
  501|    420|}
_ZN6icu_7817DateFormatSymbols7disposeEv:
  504|    420|{
  505|    420|    delete[] fEras;
  506|    420|    delete[] fEraNames;
  507|    420|    delete[] fNarrowEras;
  508|    420|    delete[] fMonths;
  509|    420|    delete[] fShortMonths;
  510|    420|    delete[] fNarrowMonths;
  511|    420|    delete[] fStandaloneMonths;
  512|    420|    delete[] fStandaloneShortMonths;
  513|    420|    delete[] fStandaloneNarrowMonths;
  514|    420|    delete[] fWeekdays;
  515|    420|    delete[] fShortWeekdays;
  516|    420|    delete[] fShorterWeekdays;
  517|    420|    delete[] fNarrowWeekdays;
  518|    420|    delete[] fStandaloneWeekdays;
  519|    420|    delete[] fStandaloneShortWeekdays;
  520|    420|    delete[] fStandaloneShorterWeekdays;
  521|    420|    delete[] fStandaloneNarrowWeekdays;
  522|    420|    delete[] fAmPms;
  523|    420|    delete[] fNarrowAmPms;
  524|    420|    delete[] fQuarters;
  525|    420|    delete[] fShortQuarters;
  526|    420|    delete[] fNarrowQuarters;
  527|    420|    delete[] fStandaloneQuarters;
  528|    420|    delete[] fStandaloneShortQuarters;
  529|    420|    delete[] fStandaloneNarrowQuarters;
  530|    420|    delete[] fLeapMonthPatterns;
  531|    420|    delete[] fShortYearNames;
  532|    420|    delete[] fShortZodiacNames;
  533|    420|    delete[] fAbbreviatedDayPeriods;
  534|    420|    delete[] fWideDayPeriods;
  535|    420|    delete[] fNarrowDayPeriods;
  536|    420|    delete[] fStandaloneAbbreviatedDayPeriods;
  537|    420|    delete[] fStandaloneWideDayPeriods;
  538|    420|    delete[] fStandaloneNarrowDayPeriods;
  539|       |
  540|    420|    delete actualLocale;
  541|    420|    actualLocale = nullptr;
  542|    420|    delete validLocale;
  543|    420|    validLocale = nullptr;
  544|    420|    disposeZoneStrings();
  545|    420|}
_ZN6icu_7817DateFormatSymbols18disposeZoneStringsEv:
  548|    420|{
  549|    420|    if (fZoneStrings) {
  ------------------
  |  Branch (549:9): [True: 0, False: 420]
  ------------------
  550|      0|        for (int32_t row = 0; row < fZoneStringsRowCount; ++row) {
  ------------------
  |  Branch (550:31): [True: 0, False: 0]
  ------------------
  551|      0|            delete[] fZoneStrings[row];
  552|      0|        }
  553|      0|        uprv_free(fZoneStrings);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  554|      0|    }
  555|    420|    if (fLocaleZoneStrings) {
  ------------------
  |  Branch (555:9): [True: 420, False: 0]
  ------------------
  556|   268k|        for (int32_t row = 0; row < fZoneStringsRowCount; ++row) {
  ------------------
  |  Branch (556:31): [True: 267k, False: 420]
  ------------------
  557|   267k|            delete[] fLocaleZoneStrings[row];
  558|   267k|        }
  559|    420|        uprv_free(fLocaleZoneStrings);
  ------------------
  |  | 1503|    420|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  560|    420|    }
  561|       |
  562|    420|    fZoneStrings = nullptr;
  563|    420|    fLocaleZoneStrings = nullptr;
  564|    420|    fZoneStringsRowCount = 0;
  565|    420|    fZoneStringsColCount = 0;
  566|    420|}
_ZNK6icu_7817DateFormatSymbols7getErasERi:
  690|    420|{
  691|    420|    count = fErasCount;
  692|    420|    return fEras;
  693|    420|}
_ZNK6icu_7817DateFormatSymbols11getEraNamesERi:
  697|    420|{
  698|    420|    count = fEraNamesCount;
  699|    420|    return fEraNames;
  700|    420|}
_ZNK6icu_7817DateFormatSymbols13getNarrowErasERi:
  704|    420|{
  705|    420|    count = fNarrowErasCount;
  706|    420|    return fNarrowEras;
  707|    420|}
_ZNK6icu_7817DateFormatSymbols9getMonthsERi:
  711|    420|{
  712|    420|    count = fMonthsCount;
  713|    420|    return fMonths;
  714|    420|}
_ZNK6icu_7817DateFormatSymbols14getShortMonthsERi:
  718|    420|{
  719|    420|    count = fShortMonthsCount;
  720|    420|    return fShortMonths;
  721|    420|}
_ZNK6icu_7817DateFormatSymbols9getMonthsERiNS0_13DtContextTypeENS0_11DtWidthTypeE:
  725|    840|{
  726|    840|    UnicodeString *returnValue = nullptr;
  727|       |
  728|    840|    switch (context) {
  ------------------
  |  Branch (728:13): [True: 398, False: 442]
  ------------------
  729|    287|    case FORMAT :
  ------------------
  |  Branch (729:5): [True: 287, False: 553]
  ------------------
  730|    287|        switch(width) {
  ------------------
  |  Branch (730:16): [True: 43, False: 244]
  ------------------
  731|     28|        case WIDE :
  ------------------
  |  Branch (731:9): [True: 28, False: 259]
  ------------------
  732|     28|            count = fMonthsCount;
  733|     28|            returnValue = fMonths;
  734|     28|            break;
  735|    167|        case ABBREVIATED :
  ------------------
  |  Branch (735:9): [True: 167, False: 120]
  ------------------
  736|    194|        case SHORT : // no month data for this, defaults to ABBREVIATED
  ------------------
  |  Branch (736:9): [True: 27, False: 260]
  ------------------
  737|    194|            count = fShortMonthsCount;
  738|    194|            returnValue = fShortMonths;
  739|    194|            break;
  740|     22|        case NARROW :
  ------------------
  |  Branch (740:9): [True: 22, False: 265]
  ------------------
  741|     22|            count = fNarrowMonthsCount;
  742|     22|            returnValue = fNarrowMonths;
  743|     22|            break;
  744|      0|        case DT_WIDTH_COUNT :
  ------------------
  |  Branch (744:9): [True: 0, False: 287]
  ------------------
  745|      0|            break;
  746|    287|        }
  747|    287|        break;
  748|    287|    case STANDALONE :
  ------------------
  |  Branch (748:5): [True: 155, False: 685]
  ------------------
  749|    155|        switch(width) {
  ------------------
  |  Branch (749:16): [True: 38, False: 117]
  ------------------
  750|     26|        case WIDE :
  ------------------
  |  Branch (750:9): [True: 26, False: 129]
  ------------------
  751|     26|            count = fStandaloneMonthsCount;
  752|     26|            returnValue = fStandaloneMonths;
  753|     26|            break;
  754|     47|        case ABBREVIATED :
  ------------------
  |  Branch (754:9): [True: 47, False: 108]
  ------------------
  755|     66|        case SHORT : // no month data for this, defaults to ABBREVIATED
  ------------------
  |  Branch (755:9): [True: 19, False: 136]
  ------------------
  756|     66|            count = fStandaloneShortMonthsCount;
  757|     66|            returnValue = fStandaloneShortMonths;
  758|     66|            break;
  759|     25|        case NARROW :
  ------------------
  |  Branch (759:9): [True: 25, False: 130]
  ------------------
  760|     25|            count = fStandaloneNarrowMonthsCount;
  761|     25|            returnValue = fStandaloneNarrowMonths;
  762|     25|            break;
  763|      0|        case DT_WIDTH_COUNT :
  ------------------
  |  Branch (763:9): [True: 0, False: 155]
  ------------------
  764|      0|            break;
  765|    155|        }
  766|    155|        break;
  767|    155|    case DT_CONTEXT_COUNT :
  ------------------
  |  Branch (767:5): [True: 0, False: 840]
  ------------------
  768|      0|        break;
  769|    840|    }
  770|    840|    return returnValue;
  771|    840|}
_ZNK6icu_7817DateFormatSymbols11getWeekdaysERi:
  775|    420|{
  776|    420|    count = fWeekdaysCount;
  777|    420|    return fWeekdays;
  778|    420|}
_ZNK6icu_7817DateFormatSymbols16getShortWeekdaysERi:
  782|    840|{
  783|    840|    count = fShortWeekdaysCount;
  784|    840|    return fShortWeekdays;
  785|    840|}
_ZNK6icu_7817DateFormatSymbols11getWeekdaysERiNS0_13DtContextTypeENS0_11DtWidthTypeE:
  789|    840|{
  790|    840|    UnicodeString *returnValue = nullptr;
  791|    840|    switch (context) {
  ------------------
  |  Branch (791:13): [True: 398, False: 442]
  ------------------
  792|    287|    case FORMAT :
  ------------------
  |  Branch (792:5): [True: 287, False: 553]
  ------------------
  793|    287|        switch(width) {
  ------------------
  |  Branch (793:16): [True: 43, False: 244]
  ------------------
  794|     28|            case WIDE :
  ------------------
  |  Branch (794:13): [True: 28, False: 259]
  ------------------
  795|     28|                count = fWeekdaysCount;
  796|     28|                returnValue = fWeekdays;
  797|     28|                break;
  798|    167|            case ABBREVIATED :
  ------------------
  |  Branch (798:13): [True: 167, False: 120]
  ------------------
  799|    167|                count = fShortWeekdaysCount;
  800|    167|                returnValue = fShortWeekdays;
  801|    167|                break;
  802|     27|            case SHORT :
  ------------------
  |  Branch (802:13): [True: 27, False: 260]
  ------------------
  803|     27|                count = fShorterWeekdaysCount;
  804|     27|                returnValue = fShorterWeekdays;
  805|     27|                break;
  806|     22|            case NARROW :
  ------------------
  |  Branch (806:13): [True: 22, False: 265]
  ------------------
  807|     22|                count = fNarrowWeekdaysCount;
  808|     22|                returnValue = fNarrowWeekdays;
  809|     22|                break;
  810|      0|            case DT_WIDTH_COUNT :
  ------------------
  |  Branch (810:13): [True: 0, False: 287]
  ------------------
  811|      0|                break;
  812|    287|        }
  813|    287|        break;
  814|    287|    case STANDALONE :
  ------------------
  |  Branch (814:5): [True: 155, False: 685]
  ------------------
  815|    155|        switch(width) {
  ------------------
  |  Branch (815:16): [True: 38, False: 117]
  ------------------
  816|     26|            case WIDE :
  ------------------
  |  Branch (816:13): [True: 26, False: 129]
  ------------------
  817|     26|                count = fStandaloneWeekdaysCount;
  818|     26|                returnValue = fStandaloneWeekdays;
  819|     26|                break;
  820|     47|            case ABBREVIATED :
  ------------------
  |  Branch (820:13): [True: 47, False: 108]
  ------------------
  821|     47|                count = fStandaloneShortWeekdaysCount;
  822|     47|                returnValue = fStandaloneShortWeekdays;
  823|     47|                break;
  824|     19|            case SHORT :
  ------------------
  |  Branch (824:13): [True: 19, False: 136]
  ------------------
  825|     19|                count = fStandaloneShorterWeekdaysCount;
  826|     19|                returnValue = fStandaloneShorterWeekdays;
  827|     19|                break;
  828|     25|            case NARROW :
  ------------------
  |  Branch (828:13): [True: 25, False: 130]
  ------------------
  829|     25|                count = fStandaloneNarrowWeekdaysCount;
  830|     25|                returnValue = fStandaloneNarrowWeekdays;
  831|     25|                break;
  832|      0|            case DT_WIDTH_COUNT :
  ------------------
  |  Branch (832:13): [True: 0, False: 155]
  ------------------
  833|      0|                break;
  834|    155|        }
  835|    155|        break;
  836|    155|    case DT_CONTEXT_COUNT :
  ------------------
  |  Branch (836:5): [True: 0, False: 840]
  ------------------
  837|      0|        break;
  838|    840|    }
  839|    840|    return returnValue;
  840|    840|}
_ZNK6icu_7817DateFormatSymbols11getQuartersERiNS0_13DtContextTypeENS0_11DtWidthTypeE:
  844|    420|{
  845|    420|    UnicodeString *returnValue = nullptr;
  846|       |
  847|    420|    switch (context) {
  ------------------
  |  Branch (847:13): [True: 56, False: 364]
  ------------------
  848|    231|    case FORMAT :
  ------------------
  |  Branch (848:5): [True: 231, False: 189]
  ------------------
  849|    231|        switch(width) {
  ------------------
  |  Branch (849:16): [True: 27, False: 204]
  ------------------
  850|     27|        case WIDE :
  ------------------
  |  Branch (850:9): [True: 27, False: 204]
  ------------------
  851|     27|            count = fQuartersCount;
  852|     27|            returnValue = fQuarters;
  853|     27|            break;
  854|    135|        case ABBREVIATED :
  ------------------
  |  Branch (854:9): [True: 135, False: 96]
  ------------------
  855|    159|        case SHORT : // no quarter data for this, defaults to ABBREVIATED
  ------------------
  |  Branch (855:9): [True: 24, False: 207]
  ------------------
  856|    159|            count = fShortQuartersCount;
  857|    159|            returnValue = fShortQuarters;
  858|    159|            break;
  859|     18|        case NARROW :
  ------------------
  |  Branch (859:9): [True: 18, False: 213]
  ------------------
  860|     18|            count = fNarrowQuartersCount;
  861|     18|            returnValue = fNarrowQuarters;
  862|     18|            break;
  863|      0|        case DT_WIDTH_COUNT :
  ------------------
  |  Branch (863:9): [True: 0, False: 231]
  ------------------
  864|      0|            break;
  865|    231|        }
  866|    231|        break;
  867|    231|    case STANDALONE :
  ------------------
  |  Branch (867:5): [True: 133, False: 287]
  ------------------
  868|    133|        switch(width) {
  ------------------
  |  Branch (868:16): [True: 28, False: 105]
  ------------------
  869|     22|        case WIDE :
  ------------------
  |  Branch (869:9): [True: 22, False: 111]
  ------------------
  870|     22|            count = fStandaloneQuartersCount;
  871|     22|            returnValue = fStandaloneQuarters;
  872|     22|            break;
  873|     44|        case ABBREVIATED :
  ------------------
  |  Branch (873:9): [True: 44, False: 89]
  ------------------
  874|     62|        case SHORT : // no quarter data for this, defaults to ABBREVIATED
  ------------------
  |  Branch (874:9): [True: 18, False: 115]
  ------------------
  875|     62|            count = fStandaloneShortQuartersCount;
  876|     62|            returnValue = fStandaloneShortQuarters;
  877|     62|            break;
  878|     21|        case NARROW :
  ------------------
  |  Branch (878:9): [True: 21, False: 112]
  ------------------
  879|     21|            count = fStandaloneNarrowQuartersCount;
  880|     21|            returnValue = fStandaloneNarrowQuarters;
  881|     21|            break;
  882|      0|        case DT_WIDTH_COUNT :
  ------------------
  |  Branch (882:9): [True: 0, False: 133]
  ------------------
  883|      0|            break;
  884|    133|        }
  885|    133|        break;
  886|    133|    case DT_CONTEXT_COUNT :
  ------------------
  |  Branch (886:5): [True: 0, False: 420]
  ------------------
  887|      0|        break;
  888|    420|    }
  889|    420|    return returnValue;
  890|    420|}
_ZNK6icu_7817DateFormatSymbols22getTimeSeparatorStringERNS_13UnicodeStringE:
  894|    420|{
  895|       |    // fastCopyFrom() - see assignArray comments
  896|    420|    return result.fastCopyFrom(fTimeSeparator);
  897|    420|}
_ZNK6icu_7817DateFormatSymbols14getAmPmStringsERi:
  901|    420|{
  902|    420|    count = fAmPmsCount;
  903|    420|    return fAmPms;
  904|    420|}
_ZNK6icu_7817DateFormatSymbols20getLeapMonthPatternsERi:
  908|    420|{
  909|    420|    count = fLeapMonthPatternsCount;
  910|    420|    return fLeapMonthPatterns;
  911|    420|}
_ZNK6icu_7817DateFormatSymbols12getYearNamesERiNS0_13DtContextTypeENS0_11DtWidthTypeE:
  916|    840|{
  917|    840|    count = fShortYearNamesCount;
  918|    840|    return fShortYearNames;
  919|    840|}
_ZNK6icu_7817DateFormatSymbols14getZodiacNamesERiNS0_13DtContextTypeENS0_11DtWidthTypeE:
  936|    840|{
  937|    840|    count = fShortZodiacNamesCount;
  938|    840|    return fShortZodiacNames;
  939|    840|}
_ZNK6icu_7817DateFormatSymbols14getZoneStringsERiS1_:
 1261|    420|{
 1262|    420|    const UnicodeString **result = nullptr;
 1263|    420|    static UMutex LOCK;
 1264|       |
 1265|    420|    umtx_lock(&LOCK);
  ------------------
  |  | 1250|    420|#define umtx_lock U_ICU_ENTRY_POINT_RENAME(umtx_lock)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1266|    420|    if (fZoneStrings == nullptr) {
  ------------------
  |  Branch (1266:9): [True: 420, False: 0]
  ------------------
 1267|    420|        if (fLocaleZoneStrings == nullptr) {
  ------------------
  |  Branch (1267:13): [True: 420, False: 0]
  ------------------
 1268|    420|            const_cast<DateFormatSymbols*>(this)->initZoneStringsArray();
 1269|    420|        }
 1270|    420|        result = (const UnicodeString**)fLocaleZoneStrings;
 1271|    420|    } else {
 1272|      0|        result = (const UnicodeString**)fZoneStrings;
 1273|      0|    }
 1274|    420|    rowCount = fZoneStringsRowCount;
 1275|    420|    columnCount = fZoneStringsColCount;
 1276|    420|    umtx_unlock(&LOCK);
  ------------------
  |  | 1251|    420|#define umtx_unlock U_ICU_ENTRY_POINT_RENAME(umtx_unlock)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1277|       |
 1278|    420|    return result;
 1279|    420|}
_ZN6icu_7817DateFormatSymbols20initZoneStringsArrayEv:
 1286|    420|DateFormatSymbols::initZoneStringsArray() {
 1287|    420|    if (fZoneStrings != nullptr || fLocaleZoneStrings != nullptr) {
  ------------------
  |  Branch (1287:9): [True: 0, False: 420]
  |  Branch (1287:36): [True: 0, False: 420]
  ------------------
 1288|      0|        return;
 1289|      0|    }
 1290|       |
 1291|    420|    UErrorCode status = U_ZERO_ERROR;
 1292|       |
 1293|    420|    StringEnumeration *tzids = nullptr;
 1294|    420|    UnicodeString ** zarray = nullptr;
 1295|    420|    TimeZoneNames *tzNames = nullptr;
 1296|    420|    int32_t rows = 0;
 1297|       |
 1298|    420|    static const UTimeZoneNameType TYPES[] = {
 1299|    420|        UTZNM_LONG_STANDARD, UTZNM_SHORT_STANDARD,
 1300|    420|        UTZNM_LONG_DAYLIGHT, UTZNM_SHORT_DAYLIGHT
 1301|    420|    };
 1302|    420|    static const int32_t NUM_TYPES = 4;
 1303|       |
 1304|    420|    do { // dummy do-while
 1305|       |
 1306|    420|        tzids = TimeZone::createTimeZoneIDEnumeration(ZONE_SET, nullptr, nullptr, status);
  ------------------
  |  | 1282|    420|#define ZONE_SET UCAL_ZONE_TYPE_ANY
  ------------------
 1307|    420|        rows = tzids->count(status);
 1308|    420|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (1308:13): [True: 0, False: 420]
  ------------------
 1309|      0|            break;
 1310|      0|        }
 1311|       |
 1312|       |        // Allocate array
 1313|    420|        int32_t size = rows * sizeof(UnicodeString*);
 1314|    420|        zarray = static_cast<UnicodeString**>(uprv_malloc(size));
  ------------------
  |  | 1524|    420|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1315|    420|        if (zarray == nullptr) {
  ------------------
  |  Branch (1315:13): [True: 0, False: 420]
  ------------------
 1316|      0|            status = U_MEMORY_ALLOCATION_ERROR;
 1317|      0|            break;
 1318|      0|        }
 1319|    420|        uprv_memset(zarray, 0, size);
  ------------------
  |  |  100|    420|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|    420|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1320|       |
 1321|    420|        tzNames = TimeZoneNames::createInstance(fZSFLocale, status);
 1322|    420|        tzNames->loadAllDisplayNames(status);
 1323|    420|        if (U_FAILURE(status)) { break; }
  ------------------
  |  Branch (1323:13): [True: 0, False: 420]
  ------------------
 1324|       |
 1325|    420|        const UnicodeString *tzid;
 1326|    420|        int32_t i = 0;
 1327|    420|        UDate now = Calendar::getNow();
 1328|    420|        UnicodeString tzDispName;
 1329|       |
 1330|   268k|        while ((tzid = tzids->snext(status)) != nullptr) {
  ------------------
  |  Branch (1330:16): [True: 267k, False: 420]
  ------------------
 1331|   267k|            if (U_FAILURE(status)) {
  ------------------
  |  Branch (1331:17): [True: 0, False: 267k]
  ------------------
 1332|      0|                break;
 1333|      0|            }
 1334|       |
 1335|   267k|            zarray[i] = new UnicodeString[5];
 1336|   267k|            if (zarray[i] == nullptr) {
  ------------------
  |  Branch (1336:17): [True: 0, False: 267k]
  ------------------
 1337|      0|                status = U_MEMORY_ALLOCATION_ERROR;
 1338|      0|                break;
 1339|      0|            }
 1340|       |
 1341|   267k|            zarray[i][0].setTo(*tzid);
 1342|   267k|            tzNames->getDisplayNames(*tzid, TYPES, NUM_TYPES, now, zarray[i]+1, status);
 1343|   267k|            i++;
 1344|   267k|        }
 1345|       |
 1346|    420|    } while (false);
  ------------------
  |  Branch (1346:14): [Folded - Ignored]
  ------------------
 1347|       |
 1348|    420|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1348:9): [True: 0, False: 420]
  ------------------
 1349|      0|        if (zarray) {
  ------------------
  |  Branch (1349:13): [True: 0, False: 0]
  ------------------
 1350|      0|            for (int32_t i = 0; i < rows; i++) {
  ------------------
  |  Branch (1350:33): [True: 0, False: 0]
  ------------------
 1351|      0|                if (zarray[i]) {
  ------------------
  |  Branch (1351:21): [True: 0, False: 0]
  ------------------
 1352|      0|                    delete[] zarray[i];
 1353|      0|                }
 1354|      0|            }
 1355|      0|            uprv_free(zarray);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1356|      0|            zarray = nullptr;
 1357|      0|        }
 1358|      0|    }
 1359|       |
 1360|    420|    delete tzNames;
 1361|    420|    delete tzids;
 1362|       |
 1363|    420|    fLocaleZoneStrings = zarray;
 1364|    420|    fZoneStringsRowCount = rows;
 1365|    420|    fZoneStringsColCount = 1 + NUM_TYPES;
 1366|    420|}
_ZNK6icu_7817DateFormatSymbols20getLocalPatternCharsERNS_13UnicodeStringE:
 1444|    420|{
 1445|       |    // fastCopyFrom() - see assignArray comments
 1446|    420|    return result.fastCopyFrom(fLocalPatternChars);
 1447|    420|}
_ZN6icu_7817DateFormatSymbols14initializeDataERKNS_6LocaleEPKcR10UErrorCodea:
 2022|    420|{
 2023|    420|    int32_t len = 0;
 2024|       |    /* In case something goes wrong, initialize all of the data to nullptr. */
 2025|    420|    fEras = nullptr;
 2026|    420|    fErasCount = 0;
 2027|    420|    fEraNames = nullptr;
 2028|    420|    fEraNamesCount = 0;
 2029|    420|    fNarrowEras = nullptr;
 2030|    420|    fNarrowErasCount = 0;
 2031|    420|    fMonths = nullptr;
 2032|    420|    fMonthsCount=0;
 2033|    420|    fShortMonths = nullptr;
 2034|    420|    fShortMonthsCount=0;
 2035|    420|    fNarrowMonths = nullptr;
 2036|    420|    fNarrowMonthsCount=0;
 2037|    420|    fStandaloneMonths = nullptr;
 2038|    420|    fStandaloneMonthsCount=0;
 2039|    420|    fStandaloneShortMonths = nullptr;
 2040|    420|    fStandaloneShortMonthsCount=0;
 2041|    420|    fStandaloneNarrowMonths = nullptr;
 2042|    420|    fStandaloneNarrowMonthsCount=0;
 2043|    420|    fWeekdays = nullptr;
 2044|    420|    fWeekdaysCount=0;
 2045|    420|    fShortWeekdays = nullptr;
 2046|    420|    fShortWeekdaysCount=0;
 2047|    420|    fShorterWeekdays = nullptr;
 2048|    420|    fShorterWeekdaysCount=0;
 2049|    420|    fNarrowWeekdays = nullptr;
 2050|    420|    fNarrowWeekdaysCount=0;
 2051|    420|    fStandaloneWeekdays = nullptr;
 2052|    420|    fStandaloneWeekdaysCount=0;
 2053|    420|    fStandaloneShortWeekdays = nullptr;
 2054|    420|    fStandaloneShortWeekdaysCount=0;
 2055|    420|    fStandaloneShorterWeekdays = nullptr;
 2056|    420|    fStandaloneShorterWeekdaysCount=0;
 2057|    420|    fStandaloneNarrowWeekdays = nullptr;
 2058|    420|    fStandaloneNarrowWeekdaysCount=0;
 2059|    420|    fAmPms = nullptr;
 2060|    420|    fAmPmsCount=0;
 2061|    420|    fNarrowAmPms = nullptr;
 2062|    420|    fNarrowAmPmsCount=0;
 2063|    420|    fTimeSeparator.setToBogus();
 2064|    420|    fQuarters = nullptr;
 2065|    420|    fQuartersCount = 0;
 2066|    420|    fShortQuarters = nullptr;
 2067|    420|    fShortQuartersCount = 0;
 2068|    420|    fNarrowQuarters = nullptr;
 2069|    420|    fNarrowQuartersCount = 0;
 2070|    420|    fStandaloneQuarters = nullptr;
 2071|    420|    fStandaloneQuartersCount = 0;
 2072|    420|    fStandaloneShortQuarters = nullptr;
 2073|    420|    fStandaloneShortQuartersCount = 0;
 2074|    420|    fStandaloneNarrowQuarters = nullptr;
 2075|    420|    fStandaloneNarrowQuartersCount = 0;
 2076|    420|    fLeapMonthPatterns = nullptr;
 2077|    420|    fLeapMonthPatternsCount = 0;
 2078|    420|    fShortYearNames = nullptr;
 2079|    420|    fShortYearNamesCount = 0;
 2080|    420|    fShortZodiacNames = nullptr;
 2081|    420|    fShortZodiacNamesCount = 0;
 2082|    420|    fZoneStringsRowCount = 0;
 2083|    420|    fZoneStringsColCount = 0;
 2084|    420|    fZoneStrings = nullptr;
 2085|    420|    fLocaleZoneStrings = nullptr;
 2086|    420|    fAbbreviatedDayPeriods = nullptr;
 2087|    420|    fAbbreviatedDayPeriodsCount = 0;
 2088|    420|    fWideDayPeriods = nullptr;
 2089|    420|    fWideDayPeriodsCount = 0;
 2090|    420|    fNarrowDayPeriods = nullptr;
 2091|    420|    fNarrowDayPeriodsCount = 0;
 2092|    420|    fStandaloneAbbreviatedDayPeriods = nullptr;
 2093|    420|    fStandaloneAbbreviatedDayPeriodsCount = 0;
 2094|    420|    fStandaloneWideDayPeriods = nullptr;
 2095|    420|    fStandaloneWideDayPeriodsCount = 0;
 2096|    420|    fStandaloneNarrowDayPeriods = nullptr;
 2097|    420|    fStandaloneNarrowDayPeriodsCount = 0;
 2098|    420|    uprv_memset(fCapitalization, 0, sizeof(fCapitalization));
  ------------------
  |  |  100|    420|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|    420|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2099|       |
 2100|       |    // We need to preserve the requested locale for
 2101|       |    // lazy ZoneStringFormat instantiation.  ZoneStringFormat
 2102|       |    // is region sensitive, thus, bundle locale bundle's locale
 2103|       |    // is not sufficient.
 2104|    420|    fZSFLocale = locale;
 2105|       |
 2106|    420|    if (U_FAILURE(status)) return;
  ------------------
  |  Branch (2106:9): [True: 0, False: 420]
  ------------------
 2107|       |
 2108|       |    // Create a CalendarDataSink to process this data and the resource bundles
 2109|    420|    CalendarDataSink calendarSink(status);
 2110|    420|    LocalUResourceBundlePointer rb(ures_open(nullptr, locale.getBaseName(), &status));
  ------------------
  |  | 1691|    420|#define ures_open U_ICU_ENTRY_POINT_RENAME(ures_open)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2111|    420|    LocalUResourceBundlePointer cb(ures_getByKey(rb.getAlias(), gCalendarTag, nullptr, &status));
  ------------------
  |  | 1661|    420|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2112|       |
 2113|    420|    if (U_FAILURE(status)) return;
  ------------------
  |  Branch (2113:9): [True: 0, False: 420]
  ------------------
 2114|       |
 2115|       |    // Iterate over the resource bundle data following the fallbacks through different calendar types
 2116|    420|    UnicodeString calendarType((type != nullptr && *type != '\0')? type : gGregorianTag, -1, US_INV);
  ------------------
  |  |   98|    420|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  |  Branch (2116:33): [True: 0, False: 420]
  |  Branch (2116:52): [True: 0, False: 0]
  ------------------
 2117|    420|    while (!calendarType.isBogus()) {
  ------------------
  |  Branch (2117:12): [True: 420, False: 0]
  ------------------
 2118|    420|        CharString calendarTypeBuffer;
 2119|    420|        calendarTypeBuffer.appendInvariantChars(calendarType, status);
 2120|    420|        if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (2120:13): [True: 0, False: 420]
  ------------------
 2121|    420|        const char *calendarTypeCArray = calendarTypeBuffer.data();
 2122|       |
 2123|       |        // Enumerate this calendar type. If the calendar is not found fallback to gregorian
 2124|    420|        UErrorCode oldStatus = status;
 2125|    420|        LocalUResourceBundlePointer ctb(ures_getByKeyWithFallback(cb.getAlias(), calendarTypeCArray, nullptr, &status));
  ------------------
  |  | 1662|    420|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2126|    420|        if (status == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (2126:13): [True: 0, False: 420]
  ------------------
 2127|      0|            if (uprv_strcmp(calendarTypeCArray, gGregorianTag) != 0) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (2127:17): [True: 0, False: 0]
  ------------------
 2128|      0|                calendarType.setTo(false, kGregorianTagUChar, UPRV_LENGTHOF(kGregorianTagUChar));
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
 2129|      0|                calendarSink.visitAllResources();
 2130|      0|                status = oldStatus;
 2131|      0|                continue;
 2132|      0|            }
 2133|      0|            return;
 2134|      0|        }
 2135|       |
 2136|    420|        calendarSink.preEnumerate(calendarType);
 2137|    420|        ures_getAllItemsWithFallback(ctb.getAlias(), "", calendarSink, status);
  ------------------
  |  | 1658|    420|#define ures_getAllItemsWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllItemsWithFallback)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2138|    420|        if (U_FAILURE(status)) break;
  ------------------
  |  Branch (2138:13): [True: 0, False: 420]
  ------------------
 2139|       |
 2140|       |        // Stop loading when gregorian was loaded
 2141|    420|        if (uprv_strcmp(calendarTypeCArray, gGregorianTag) == 0) {
  ------------------
  |  |   38|    420|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    420|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (2141:13): [True: 420, False: 0]
  ------------------
 2142|    420|            break;
 2143|    420|        }
 2144|       |
 2145|       |        // Get the next calendar type to process from the sink
 2146|      0|        calendarType = calendarSink.nextCalendarType;
 2147|       |
 2148|       |        // Gregorian is always the last fallback
 2149|      0|        if (calendarType.isBogus()) {
  ------------------
  |  Branch (2149:13): [True: 0, False: 0]
  ------------------
 2150|      0|            calendarType.setTo(false, kGregorianTagUChar, UPRV_LENGTHOF(kGregorianTagUChar));
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
 2151|      0|            calendarSink.visitAllResources();
 2152|      0|        }
 2153|      0|    }
 2154|       |
 2155|       |    // CharString object to build paths
 2156|    420|    CharString path;
 2157|       |
 2158|       |    // Load Leap Month Patterns
 2159|    420|    UErrorCode tempStatus = status;
 2160|    420|    fLeapMonthPatterns = newUnicodeStringArray(kMonthPatternsCount);
 2161|    420|    if (fLeapMonthPatterns) {
  ------------------
  |  Branch (2161:9): [True: 420, False: 0]
  ------------------
 2162|    420|        initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatWide, calendarSink,
 2163|    420|                             buildResourcePath(path, gMonthPatternsTag, gNamesFormatTag, gNamesWideTag, tempStatus), tempStatus);
 2164|    420|        initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatAbbrev, calendarSink,
 2165|    420|                             buildResourcePath(path, gMonthPatternsTag, gNamesFormatTag, gNamesAbbrTag, tempStatus), tempStatus);
 2166|    420|        initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatNarrow, calendarSink,
 2167|    420|                             buildResourcePath(path, gMonthPatternsTag, gNamesFormatTag, gNamesNarrowTag, tempStatus), tempStatus);
 2168|    420|        initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneWide, calendarSink,
 2169|    420|                             buildResourcePath(path, gMonthPatternsTag, gNamesStandaloneTag, gNamesWideTag, tempStatus), tempStatus);
 2170|    420|        initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneAbbrev, calendarSink,
 2171|    420|                             buildResourcePath(path, gMonthPatternsTag, gNamesStandaloneTag, gNamesAbbrTag, tempStatus), tempStatus);
 2172|    420|        initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneNarrow, calendarSink,
 2173|    420|                             buildResourcePath(path, gMonthPatternsTag, gNamesStandaloneTag, gNamesNarrowTag, tempStatus), tempStatus);
 2174|    420|        initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternNumeric, calendarSink,
 2175|    420|                             buildResourcePath(path, gMonthPatternsTag, gNamesNumericTag, gNamesAllTag, tempStatus), tempStatus);
 2176|    420|        if (U_SUCCESS(tempStatus)) {
  ------------------
  |  Branch (2176:13): [True: 0, False: 420]
  ------------------
 2177|       |            // Hack to fix bad C inheritance for dangi monthPatterns (OK in J); this should be handled by aliases in root, but isn't.
 2178|       |            // The ordering of the following statements is important.
 2179|      0|            if (fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev].isEmpty()) {
  ------------------
  |  Branch (2179:17): [True: 0, False: 0]
  ------------------
 2180|      0|                fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatWide]);
 2181|      0|            }
 2182|      0|            if (fLeapMonthPatterns[kLeapMonthPatternFormatNarrow].isEmpty()) {
  ------------------
  |  Branch (2182:17): [True: 0, False: 0]
  ------------------
 2183|      0|                fLeapMonthPatterns[kLeapMonthPatternFormatNarrow].setTo(fLeapMonthPatterns[kLeapMonthPatternStandaloneNarrow]);
 2184|      0|            }
 2185|      0|            if (fLeapMonthPatterns[kLeapMonthPatternStandaloneWide].isEmpty()) {
  ------------------
  |  Branch (2185:17): [True: 0, False: 0]
  ------------------
 2186|      0|                fLeapMonthPatterns[kLeapMonthPatternStandaloneWide].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatWide]);
 2187|      0|            }
 2188|      0|            if (fLeapMonthPatterns[kLeapMonthPatternStandaloneAbbrev].isEmpty()) {
  ------------------
  |  Branch (2188:17): [True: 0, False: 0]
  ------------------
 2189|      0|                fLeapMonthPatterns[kLeapMonthPatternStandaloneAbbrev].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev]);
 2190|      0|            }
 2191|       |            // end of hack
 2192|      0|            fLeapMonthPatternsCount = kMonthPatternsCount;
 2193|    420|        } else {
 2194|    420|            delete[] fLeapMonthPatterns;
 2195|    420|            fLeapMonthPatterns = nullptr;
 2196|    420|        }
 2197|    420|    }
 2198|       |
 2199|       |    // Load cyclic names sets
 2200|    420|    tempStatus = status;
 2201|    420|    initField(&fShortYearNames, fShortYearNamesCount, calendarSink,
 2202|    420|              buildResourcePath(path, gCyclicNameSetsTag, gNameSetYearsTag, gNamesFormatTag, gNamesAbbrTag, tempStatus), tempStatus);
 2203|    420|    initField(&fShortZodiacNames, fShortZodiacNamesCount, calendarSink,
 2204|    420|              buildResourcePath(path, gCyclicNameSetsTag, gNameSetZodiacsTag, gNamesFormatTag, gNamesAbbrTag, tempStatus), tempStatus);
 2205|       |
 2206|       |    // Load context transforms and capitalization
 2207|    420|    tempStatus = U_ZERO_ERROR;
 2208|    420|    LocalUResourceBundlePointer localeBundle(ures_open(nullptr, locale.getName(), &tempStatus));
  ------------------
  |  | 1691|    420|#define ures_open U_ICU_ENTRY_POINT_RENAME(ures_open)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2209|    420|    if (U_SUCCESS(tempStatus)) {
  ------------------
  |  Branch (2209:9): [True: 420, False: 0]
  ------------------
 2210|    420|        LocalUResourceBundlePointer contextTransforms(ures_getByKeyWithFallback(localeBundle.getAlias(), gContextTransformsTag, nullptr, &tempStatus));
  ------------------
  |  | 1662|    420|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2211|    420|        if (U_SUCCESS(tempStatus)) {
  ------------------
  |  Branch (2211:13): [True: 115, False: 305]
  ------------------
 2212|    115|            for (LocalUResourceBundlePointer contextTransformUsage;
 2213|    635|                 contextTransformUsage.adoptInstead(ures_getNextResource(contextTransforms.getAlias(), nullptr, &tempStatus)),
  ------------------
  |  | 1672|    635|#define ures_getNextResource U_ICU_ENTRY_POINT_RENAME(ures_getNextResource)
  |  |  ------------------
  |  |  |  |  123|    635|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    635|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    635|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2213:18): [True: 520, False: 115]
  ------------------
 2214|    635|                 contextTransformUsage.isValid();) {
 2215|    520|                const int32_t * intVector = ures_getIntVector(contextTransformUsage.getAlias(), &len, &status);
  ------------------
  |  | 1665|    520|#define ures_getIntVector U_ICU_ENTRY_POINT_RENAME(ures_getIntVector)
  |  |  ------------------
  |  |  |  |  123|    520|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    520|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    520|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2216|    520|                if (U_SUCCESS(tempStatus) && intVector != nullptr && len >= 2) {
  ------------------
  |  Branch (2216:21): [True: 520, False: 0]
  |  Branch (2216:46): [True: 520, False: 0]
  |  Branch (2216:70): [True: 520, False: 0]
  ------------------
 2217|    520|                    const char* usageType = ures_getKey(contextTransformUsage.getAlias());
  ------------------
  |  | 1666|    520|#define ures_getKey U_ICU_ENTRY_POINT_RENAME(ures_getKey)
  |  |  ------------------
  |  |  |  |  123|    520|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    520|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    520|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2218|    520|                    if (usageType != nullptr) {
  ------------------
  |  Branch (2218:25): [True: 520, False: 0]
  ------------------
 2219|    520|                        const ContextUsageTypeNameToEnumValue * typeMapPtr = contextUsageTypeMap;
 2220|    520|                        int32_t compResult = 0;
 2221|       |                        // linear search; list is short and we cannot be sure that bsearch is available
 2222|  4.11k|                        while ( typeMapPtr->usageTypeName != nullptr && (compResult = uprv_strcmp(usageType, typeMapPtr->usageTypeName)) > 0 ) {
  ------------------
  |  |   38|  4.11k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  4.11k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (2222:33): [True: 4.11k, False: 0]
  |  Branch (2222:73): [True: 3.59k, False: 520]
  ------------------
 2223|  3.59k|                            ++typeMapPtr;
 2224|  3.59k|                        }
 2225|    520|                        if (typeMapPtr->usageTypeName != nullptr && compResult == 0) {
  ------------------
  |  Branch (2225:29): [True: 520, False: 0]
  |  Branch (2225:69): [True: 196, False: 324]
  ------------------
 2226|    196|                            fCapitalization[typeMapPtr->usageTypeEnumValue][0] = static_cast<UBool>(intVector[0]);
 2227|    196|                            fCapitalization[typeMapPtr->usageTypeEnumValue][1] = static_cast<UBool>(intVector[1]);
 2228|    196|                        }
 2229|    520|                    }
 2230|    520|                }
 2231|    520|                tempStatus = U_ZERO_ERROR;
 2232|    520|            }
 2233|    115|        }
 2234|       |
 2235|    420|        tempStatus = U_ZERO_ERROR;
 2236|    420|        const LocalPointer<NumberingSystem> numberingSystem(
 2237|    420|                NumberingSystem::createInstance(locale, tempStatus), tempStatus);
 2238|    420|        if (U_SUCCESS(tempStatus)) {
  ------------------
  |  Branch (2238:13): [True: 420, False: 0]
  ------------------
 2239|       |            // These functions all fail gracefully if passed nullptr pointers and
 2240|       |            // do nothing unless U_SUCCESS(tempStatus), so it's only necessary
 2241|       |            // to check for errors once after all calls are made.
 2242|    420|            const LocalUResourceBundlePointer numberElementsData(ures_getByKeyWithFallback(
  ------------------
  |  | 1662|    420|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2243|    420|                    localeBundle.getAlias(), gNumberElementsTag, nullptr, &tempStatus));
 2244|    420|            const LocalUResourceBundlePointer nsNameData(ures_getByKeyWithFallback(
  ------------------
  |  | 1662|    420|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2245|    420|                    numberElementsData.getAlias(), numberingSystem->getName(), nullptr, &tempStatus));
 2246|    420|            const LocalUResourceBundlePointer symbolsData(ures_getByKeyWithFallback(
  ------------------
  |  | 1662|    420|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2247|    420|                    nsNameData.getAlias(), gSymbolsTag, nullptr, &tempStatus));
 2248|    420|            fTimeSeparator = ures_getUnicodeStringByKey(
 2249|    420|                    symbolsData.getAlias(), gTimeSeparatorTag, &tempStatus);
 2250|    420|            if (U_FAILURE(tempStatus)) {
  ------------------
  |  Branch (2250:17): [True: 289, False: 131]
  ------------------
 2251|    289|                fTimeSeparator.setToBogus();
 2252|    289|            }
 2253|    420|        }
 2254|       |
 2255|    420|    }
 2256|       |
 2257|    420|    if (fTimeSeparator.isBogus()) {
  ------------------
  |  Branch (2257:9): [True: 289, False: 131]
  ------------------
 2258|    289|        fTimeSeparator.setTo(DateFormatSymbols::DEFAULT_TIME_SEPARATOR);
 2259|    289|    }
 2260|       |
 2261|       |    // Load day periods
 2262|    420|    fAbbreviatedDayPeriods = loadDayPeriodStrings(calendarSink,
 2263|    420|                            buildResourcePath(path, gDayPeriodTag, gNamesFormatTag, gNamesAbbrTag, status),
 2264|    420|                            fAbbreviatedDayPeriodsCount, status);
 2265|       |
 2266|    420|    fWideDayPeriods = loadDayPeriodStrings(calendarSink,
 2267|    420|                            buildResourcePath(path, gDayPeriodTag, gNamesFormatTag, gNamesWideTag, status),
 2268|    420|                            fWideDayPeriodsCount, status);
 2269|    420|    fNarrowDayPeriods = loadDayPeriodStrings(calendarSink,
 2270|    420|                            buildResourcePath(path, gDayPeriodTag, gNamesFormatTag, gNamesNarrowTag, status),
 2271|    420|                            fNarrowDayPeriodsCount, status);
 2272|       |
 2273|    420|    fStandaloneAbbreviatedDayPeriods = loadDayPeriodStrings(calendarSink,
 2274|    420|                            buildResourcePath(path, gDayPeriodTag, gNamesStandaloneTag, gNamesAbbrTag, status),
 2275|    420|                            fStandaloneAbbreviatedDayPeriodsCount, status);
 2276|       |
 2277|    420|    fStandaloneWideDayPeriods = loadDayPeriodStrings(calendarSink,
 2278|    420|                            buildResourcePath(path, gDayPeriodTag, gNamesStandaloneTag, gNamesWideTag, status),
 2279|    420|                            fStandaloneWideDayPeriodsCount, status);
 2280|    420|    fStandaloneNarrowDayPeriods = loadDayPeriodStrings(calendarSink,
 2281|    420|                            buildResourcePath(path, gDayPeriodTag, gNamesStandaloneTag, gNamesNarrowTag, status),
 2282|    420|                            fStandaloneNarrowDayPeriodsCount, status);
 2283|       |
 2284|       |    // Fill in for missing/bogus items (dayPeriods are a map so single items might be missing)
 2285|    420|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (2285:9): [True: 420, False: 0]
  ------------------
 2286|  4.62k|        for (int32_t dpidx = 0; dpidx < fAbbreviatedDayPeriodsCount; ++dpidx) {
  ------------------
  |  Branch (2286:33): [True: 4.20k, False: 420]
  ------------------
 2287|  4.20k|            if (dpidx < fWideDayPeriodsCount && fWideDayPeriods != nullptr && fWideDayPeriods[dpidx].isBogus()) {
  ------------------
  |  Branch (2287:17): [True: 4.20k, False: 0]
  |  Branch (2287:49): [True: 4.20k, False: 0]
  |  Branch (2287:79): [True: 3.45k, False: 747]
  ------------------
 2288|  3.45k|                fWideDayPeriods[dpidx].fastCopyFrom(fAbbreviatedDayPeriods[dpidx]);
 2289|  3.45k|            }
 2290|  4.20k|            if (dpidx < fNarrowDayPeriodsCount && fNarrowDayPeriods != nullptr && fNarrowDayPeriods[dpidx].isBogus()) {
  ------------------
  |  Branch (2290:17): [True: 4.20k, False: 0]
  |  Branch (2290:51): [True: 4.20k, False: 0]
  |  Branch (2290:83): [True: 3.25k, False: 949]
  ------------------
 2291|  3.25k|                fNarrowDayPeriods[dpidx].fastCopyFrom(fAbbreviatedDayPeriods[dpidx]);
 2292|  3.25k|            }
 2293|  4.20k|            if (dpidx < fStandaloneAbbreviatedDayPeriodsCount && fStandaloneAbbreviatedDayPeriods != nullptr && fStandaloneAbbreviatedDayPeriods[dpidx].isBogus()) {
  ------------------
  |  Branch (2293:17): [True: 4.20k, False: 0]
  |  Branch (2293:66): [True: 4.20k, False: 0]
  |  Branch (2293:113): [True: 3.47k, False: 722]
  ------------------
 2294|  3.47k|                fStandaloneAbbreviatedDayPeriods[dpidx].fastCopyFrom(fAbbreviatedDayPeriods[dpidx]);
 2295|  3.47k|            }
 2296|  4.20k|            if (dpidx < fStandaloneWideDayPeriodsCount && fStandaloneWideDayPeriods != nullptr && fStandaloneWideDayPeriods[dpidx].isBogus()) {
  ------------------
  |  Branch (2296:17): [True: 4.20k, False: 0]
  |  Branch (2296:59): [True: 4.20k, False: 0]
  |  Branch (2296:99): [True: 3.76k, False: 439]
  ------------------
 2297|  3.76k|                fStandaloneWideDayPeriods[dpidx].fastCopyFrom(fStandaloneAbbreviatedDayPeriods[dpidx]);
 2298|  3.76k|            }
 2299|  4.20k|            if (dpidx < fStandaloneNarrowDayPeriodsCount && fStandaloneNarrowDayPeriods != nullptr && fStandaloneNarrowDayPeriods[dpidx].isBogus()) {
  ------------------
  |  Branch (2299:17): [True: 4.20k, False: 0]
  |  Branch (2299:61): [True: 4.20k, False: 0]
  |  Branch (2299:103): [True: 3.64k, False: 560]
  ------------------
 2300|  3.64k|                fStandaloneNarrowDayPeriods[dpidx].fastCopyFrom(fStandaloneAbbreviatedDayPeriods[dpidx]);
 2301|  3.64k|            }
 2302|  4.20k|        }
 2303|    420|    }
 2304|       |
 2305|    420|    U_LOCALE_BASED(locBased, *this);
  ------------------
  |  |   25|    420|  LocaleBased varname((objname).validLocale, (objname).actualLocale)
  ------------------
 2306|       |    // if we make it to here, the resource data is cool, and we can get everything out
 2307|       |    // of it that we need except for the time-zone and localized-pattern data, which
 2308|       |    // are stored in a separate file
 2309|    420|    locBased.setLocaleIDs(ures_getLocaleByType(cb.getAlias(), ULOC_VALID_LOCALE, &status),
  ------------------
  |  | 1669|    420|#define ures_getLocaleByType U_ICU_ENTRY_POINT_RENAME(ures_getLocaleByType)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2310|    420|                          ures_getLocaleByType(cb.getAlias(), ULOC_ACTUAL_LOCALE, &status), status);
  ------------------
  |  | 1669|    420|#define ures_getLocaleByType U_ICU_ENTRY_POINT_RENAME(ures_getLocaleByType)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2311|       |
 2312|       |    // Load eras
 2313|    420|    initField(&fEras, fErasCount, calendarSink, buildResourcePath(path, gErasTag, gNamesAbbrTag, status), status);
 2314|    420|    UErrorCode oldStatus = status;
 2315|    420|    initField(&fEraNames, fEraNamesCount, calendarSink, buildResourcePath(path, gErasTag, gNamesWideTag, status), status);
 2316|    420|    if (status == U_MISSING_RESOURCE_ERROR) { // Workaround because eras/wide was omitted from CLDR 1.3
  ------------------
  |  Branch (2316:9): [True: 0, False: 420]
  ------------------
 2317|      0|        status = oldStatus;
 2318|      0|        assignArray(fEraNames, fEraNamesCount, fEras, fErasCount);
 2319|      0|    }
 2320|       |    // current ICU4J falls back to abbreviated if narrow eras are missing, so we will too
 2321|    420|    oldStatus = status;
 2322|    420|    initField(&fNarrowEras, fNarrowErasCount, calendarSink, buildResourcePath(path, gErasTag, gNamesNarrowTag, status), status);
 2323|    420|    if (status == U_MISSING_RESOURCE_ERROR) { // Workaround because eras/wide was omitted from CLDR 1.3
  ------------------
  |  Branch (2323:9): [True: 0, False: 420]
  ------------------
 2324|      0|        status = oldStatus;
 2325|      0|        assignArray(fNarrowEras, fNarrowErasCount, fEras, fErasCount);
 2326|      0|    }
 2327|       |
 2328|       |    // Load month names
 2329|    420|    initField(&fMonths, fMonthsCount, calendarSink,
 2330|    420|              buildResourcePath(path, gMonthNamesTag, gNamesFormatTag, gNamesWideTag, status), status);
 2331|    420|    initField(&fShortMonths, fShortMonthsCount, calendarSink,
 2332|    420|              buildResourcePath(path, gMonthNamesTag, gNamesFormatTag, gNamesAbbrTag, status), status);
 2333|    420|    initField(&fStandaloneMonths, fStandaloneMonthsCount, calendarSink,
 2334|    420|              buildResourcePath(path, gMonthNamesTag, gNamesStandaloneTag, gNamesWideTag, status), status);
 2335|    420|    if (status == U_MISSING_RESOURCE_ERROR) { /* If standalone/wide not available, use format/wide */
  ------------------
  |  Branch (2335:9): [True: 0, False: 420]
  ------------------
 2336|      0|        status = U_ZERO_ERROR;
 2337|      0|        assignArray(fStandaloneMonths, fStandaloneMonthsCount, fMonths, fMonthsCount);
 2338|      0|    }
 2339|    420|    initField(&fStandaloneShortMonths, fStandaloneShortMonthsCount, calendarSink,
 2340|    420|              buildResourcePath(path, gMonthNamesTag, gNamesStandaloneTag, gNamesAbbrTag, status), status);
 2341|    420|    if (status == U_MISSING_RESOURCE_ERROR) { /* If standalone/abbreviated not available, use format/abbreviated */
  ------------------
  |  Branch (2341:9): [True: 0, False: 420]
  ------------------
 2342|      0|        status = U_ZERO_ERROR;
 2343|      0|        assignArray(fStandaloneShortMonths, fStandaloneShortMonthsCount, fShortMonths, fShortMonthsCount);
 2344|      0|    }
 2345|       |
 2346|    420|    UErrorCode narrowMonthsEC = status;
 2347|    420|    UErrorCode standaloneNarrowMonthsEC = status;
 2348|    420|    initField(&fNarrowMonths, fNarrowMonthsCount, calendarSink,
 2349|    420|              buildResourcePath(path, gMonthNamesTag, gNamesFormatTag, gNamesNarrowTag, narrowMonthsEC), narrowMonthsEC);
 2350|    420|    initField(&fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, calendarSink,
 2351|    420|              buildResourcePath(path, gMonthNamesTag, gNamesStandaloneTag, gNamesNarrowTag, narrowMonthsEC), standaloneNarrowMonthsEC);
 2352|    420|    if (narrowMonthsEC == U_MISSING_RESOURCE_ERROR && standaloneNarrowMonthsEC != U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (2352:9): [True: 0, False: 420]
  |  Branch (2352:55): [True: 0, False: 0]
  ------------------
 2353|       |        // If format/narrow not available, use standalone/narrow
 2354|      0|        assignArray(fNarrowMonths, fNarrowMonthsCount, fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount);
 2355|    420|    } else if (narrowMonthsEC != U_MISSING_RESOURCE_ERROR && standaloneNarrowMonthsEC == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (2355:16): [True: 420, False: 0]
  |  Branch (2355:62): [True: 0, False: 420]
  ------------------
 2356|       |        // If standalone/narrow not available, use format/narrow
 2357|      0|        assignArray(fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, fNarrowMonths, fNarrowMonthsCount);
 2358|    420|    } else if (narrowMonthsEC == U_MISSING_RESOURCE_ERROR && standaloneNarrowMonthsEC == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (2358:16): [True: 0, False: 420]
  |  Branch (2358:62): [True: 0, False: 0]
  ------------------
 2359|       |        // If neither is available, use format/abbreviated
 2360|      0|        assignArray(fNarrowMonths, fNarrowMonthsCount, fShortMonths, fShortMonthsCount);
 2361|      0|        assignArray(fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, fShortMonths, fShortMonthsCount);
 2362|      0|    }
 2363|       |
 2364|       |    // Load AM/PM markers; if wide or narrow not available, use short
 2365|    420|    UErrorCode ampmStatus = U_ZERO_ERROR;
 2366|    420|    initField(&fAmPms, fAmPmsCount, calendarSink,
 2367|    420|              buildResourcePath(path, gAmPmMarkersTag, ampmStatus), ampmStatus);
 2368|    420|    if (U_FAILURE(ampmStatus)) {
  ------------------
  |  Branch (2368:9): [True: 175, False: 245]
  ------------------
 2369|    175|        initField(&fAmPms, fAmPmsCount, calendarSink,
 2370|    175|                  buildResourcePath(path, gAmPmMarkersAbbrTag, status), status);
 2371|    175|    }
 2372|    420|    ampmStatus = U_ZERO_ERROR;
 2373|    420|    initField(&fNarrowAmPms, fNarrowAmPmsCount, calendarSink,
 2374|    420|              buildResourcePath(path, gAmPmMarkersNarrowTag, ampmStatus), ampmStatus);
 2375|    420|    if (U_FAILURE(ampmStatus)) {
  ------------------
  |  Branch (2375:9): [True: 255, False: 165]
  ------------------
 2376|    255|        initField(&fNarrowAmPms, fNarrowAmPmsCount, calendarSink,
 2377|    255|                  buildResourcePath(path, gAmPmMarkersAbbrTag, status), status);
 2378|    255|    }
 2379|    420|    if(status == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (2379:8): [True: 105, False: 315]
  ------------------
 2380|    105|        status = U_ZERO_ERROR;
 2381|    105|        assignArray(fNarrowAmPms, fNarrowAmPmsCount, fAmPms, fAmPmsCount);
 2382|    105|    }
 2383|       |
 2384|       |    // Load quarters
 2385|    420|    initField(&fQuarters, fQuartersCount, calendarSink,
 2386|    420|              buildResourcePath(path, gQuartersTag, gNamesFormatTag, gNamesWideTag, status), status);
 2387|    420|    initField(&fShortQuarters, fShortQuartersCount, calendarSink,
 2388|    420|              buildResourcePath(path, gQuartersTag, gNamesFormatTag, gNamesAbbrTag, status), status);
 2389|    420|    if(status == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (2389:8): [True: 0, False: 420]
  ------------------
 2390|      0|        status = U_ZERO_ERROR;
 2391|      0|        assignArray(fShortQuarters, fShortQuartersCount, fQuarters, fQuartersCount);
 2392|      0|    }
 2393|       |
 2394|    420|    initField(&fStandaloneQuarters, fStandaloneQuartersCount, calendarSink,
 2395|    420|              buildResourcePath(path, gQuartersTag, gNamesStandaloneTag, gNamesWideTag, status), status);
 2396|    420|    if(status == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (2396:8): [True: 0, False: 420]
  ------------------
 2397|      0|        status = U_ZERO_ERROR;
 2398|      0|        assignArray(fStandaloneQuarters, fStandaloneQuartersCount, fQuarters, fQuartersCount);
 2399|      0|    }
 2400|    420|    initField(&fStandaloneShortQuarters, fStandaloneShortQuartersCount, calendarSink,
 2401|    420|              buildResourcePath(path, gQuartersTag, gNamesStandaloneTag, gNamesAbbrTag, status), status);
 2402|    420|    if(status == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (2402:8): [True: 0, False: 420]
  ------------------
 2403|      0|        status = U_ZERO_ERROR;
 2404|      0|        assignArray(fStandaloneShortQuarters, fStandaloneShortQuartersCount, fShortQuarters, fShortQuartersCount);
 2405|      0|    }
 2406|       |
 2407|       |    // unlike the fields above, narrow format quarters fall back on narrow standalone quarters
 2408|    420|    initField(&fStandaloneNarrowQuarters, fStandaloneNarrowQuartersCount, calendarSink,
 2409|    420|              buildResourcePath(path, gQuartersTag, gNamesStandaloneTag, gNamesNarrowTag, status), status);
 2410|    420|    initField(&fNarrowQuarters, fNarrowQuartersCount, calendarSink,
 2411|    420|              buildResourcePath(path, gQuartersTag, gNamesFormatTag, gNamesNarrowTag, status), status);
 2412|    420|    if(status == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (2412:8): [True: 0, False: 420]
  ------------------
 2413|      0|        status = U_ZERO_ERROR;
 2414|      0|        assignArray(fNarrowQuarters, fNarrowQuartersCount, fStandaloneNarrowQuarters, fStandaloneNarrowQuartersCount);
 2415|      0|    }
 2416|       |    
 2417|       |    // ICU 3.8 or later version no longer uses localized date-time pattern characters by default (ticket#5597)
 2418|       |    /*
 2419|       |    // fastCopyFrom()/setTo() - see assignArray comments
 2420|       |    resStr = ures_getStringByKey(fResourceBundle, gLocalPatternCharsTag, &len, &status);
 2421|       |    fLocalPatternChars.setTo(true, resStr, len);
 2422|       |    // If the locale data does not include new pattern chars, use the defaults
 2423|       |    // TODO: Consider making this an error, since this may add conflicting characters.
 2424|       |    if (len < PATTERN_CHARS_LEN) {
 2425|       |        fLocalPatternChars.append(UnicodeString(true, &gPatternChars[len], PATTERN_CHARS_LEN-len));
 2426|       |    }
 2427|       |    */
 2428|    420|    fLocalPatternChars.setTo(true, gPatternChars, PATTERN_CHARS_LEN);
  ------------------
  |  |   66|    420|#define PATTERN_CHARS_LEN 37
  ------------------
 2429|       |
 2430|       |    // Format wide weekdays -> fWeekdays
 2431|       |    // {sfb} fixed to handle 1-based weekdays
 2432|    420|    initField(&fWeekdays, fWeekdaysCount, calendarSink,
 2433|    420|              buildResourcePath(path, gDayNamesTag, gNamesFormatTag, gNamesWideTag, status), 1, status);
 2434|       |
 2435|       |    // Format abbreviated weekdays -> fShortWeekdays
 2436|    420|    initField(&fShortWeekdays, fShortWeekdaysCount, calendarSink,
 2437|    420|              buildResourcePath(path, gDayNamesTag, gNamesFormatTag, gNamesAbbrTag, status), 1, status);
 2438|       |
 2439|       |    // Format short weekdays -> fShorterWeekdays (fall back to abbreviated)
 2440|    420|    initField(&fShorterWeekdays, fShorterWeekdaysCount, calendarSink,
 2441|    420|              buildResourcePath(path, gDayNamesTag, gNamesFormatTag, gNamesShortTag, status), 1, status);
 2442|    420|    if (status == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (2442:9): [True: 0, False: 420]
  ------------------
 2443|      0|        status = U_ZERO_ERROR;
 2444|      0|        assignArray(fShorterWeekdays, fShorterWeekdaysCount, fShortWeekdays, fShortWeekdaysCount);
 2445|      0|    }
 2446|       |
 2447|       |    // Stand-alone wide weekdays -> fStandaloneWeekdays
 2448|    420|    initField(&fStandaloneWeekdays, fStandaloneWeekdaysCount, calendarSink,
 2449|    420|              buildResourcePath(path, gDayNamesTag, gNamesStandaloneTag, gNamesWideTag, status), 1, status);
 2450|    420|    if (status == U_MISSING_RESOURCE_ERROR) { /* If standalone/wide is not available, use format/wide */
  ------------------
  |  Branch (2450:9): [True: 0, False: 420]
  ------------------
 2451|      0|        status = U_ZERO_ERROR;
 2452|      0|        assignArray(fStandaloneWeekdays, fStandaloneWeekdaysCount, fWeekdays, fWeekdaysCount);
 2453|      0|    }
 2454|       |
 2455|       |    // Stand-alone abbreviated weekdays -> fStandaloneShortWeekdays
 2456|    420|    initField(&fStandaloneShortWeekdays, fStandaloneShortWeekdaysCount, calendarSink,
 2457|    420|              buildResourcePath(path, gDayNamesTag, gNamesStandaloneTag, gNamesAbbrTag, status), 1, status);
 2458|    420|    if (status == U_MISSING_RESOURCE_ERROR) { /* If standalone/abbreviated is not available, use format/abbreviated */
  ------------------
  |  Branch (2458:9): [True: 0, False: 420]
  ------------------
 2459|      0|        status = U_ZERO_ERROR;
 2460|      0|        assignArray(fStandaloneShortWeekdays, fStandaloneShortWeekdaysCount, fShortWeekdays, fShortWeekdaysCount);
 2461|      0|    }
 2462|       |
 2463|       |    // Stand-alone short weekdays -> fStandaloneShorterWeekdays (fall back to format abbreviated)
 2464|    420|    initField(&fStandaloneShorterWeekdays, fStandaloneShorterWeekdaysCount, calendarSink,
 2465|    420|              buildResourcePath(path, gDayNamesTag, gNamesStandaloneTag, gNamesShortTag, status), 1, status);
 2466|    420|    if (status == U_MISSING_RESOURCE_ERROR) { /* If standalone/short is not available, use format/short */
  ------------------
  |  Branch (2466:9): [True: 0, False: 420]
  ------------------
 2467|      0|        status = U_ZERO_ERROR;
 2468|      0|        assignArray(fStandaloneShorterWeekdays, fStandaloneShorterWeekdaysCount, fShorterWeekdays, fShorterWeekdaysCount);
 2469|      0|    }
 2470|       |
 2471|       |    // Format narrow weekdays -> fNarrowWeekdays
 2472|    420|    UErrorCode narrowWeeksEC = status;
 2473|    420|    initField(&fNarrowWeekdays, fNarrowWeekdaysCount, calendarSink,
 2474|    420|              buildResourcePath(path, gDayNamesTag, gNamesFormatTag, gNamesNarrowTag, status), 1, narrowWeeksEC);
 2475|       |    // Stand-alone narrow weekdays -> fStandaloneNarrowWeekdays
 2476|    420|    UErrorCode standaloneNarrowWeeksEC = status;
 2477|    420|    initField(&fStandaloneNarrowWeekdays, fStandaloneNarrowWeekdaysCount, calendarSink,
 2478|    420|              buildResourcePath(path, gDayNamesTag, gNamesStandaloneTag, gNamesNarrowTag, status), 1, standaloneNarrowWeeksEC);
 2479|       |
 2480|    420|    if (narrowWeeksEC == U_MISSING_RESOURCE_ERROR && standaloneNarrowWeeksEC != U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (2480:9): [True: 0, False: 420]
  |  Branch (2480:54): [True: 0, False: 0]
  ------------------
 2481|       |        // If format/narrow not available, use standalone/narrow
 2482|      0|        assignArray(fNarrowWeekdays, fNarrowWeekdaysCount, fStandaloneNarrowWeekdays, fStandaloneNarrowWeekdaysCount);
 2483|    420|    } else if (narrowWeeksEC != U_MISSING_RESOURCE_ERROR && standaloneNarrowWeeksEC == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (2483:16): [True: 420, False: 0]
  |  Branch (2483:61): [True: 0, False: 420]
  ------------------
 2484|       |        // If standalone/narrow not available, use format/narrow
 2485|      0|        assignArray(fStandaloneNarrowWeekdays, fStandaloneNarrowWeekdaysCount, fNarrowWeekdays, fNarrowWeekdaysCount);
 2486|    420|    } else if (narrowWeeksEC == U_MISSING_RESOURCE_ERROR && standaloneNarrowWeeksEC == U_MISSING_RESOURCE_ERROR ) {
  ------------------
  |  Branch (2486:16): [True: 0, False: 420]
  |  Branch (2486:61): [True: 0, False: 0]
  ------------------
 2487|       |        // If neither is available, use format/abbreviated
 2488|      0|        assignArray(fNarrowWeekdays, fNarrowWeekdaysCount, fShortWeekdays, fShortWeekdaysCount);
 2489|      0|        assignArray(fStandaloneNarrowWeekdays, fStandaloneNarrowWeekdaysCount, fShortWeekdays, fShortWeekdaysCount);
 2490|      0|    }
 2491|       |
 2492|       |    // Last resort fallback in case previous data wasn't loaded
 2493|    420|    if (U_FAILURE(status))
  ------------------
  |  Branch (2493:9): [True: 0, False: 420]
  ------------------
 2494|      0|    {
 2495|      0|        if (useLastResortData)
  ------------------
  |  Branch (2495:13): [True: 0, False: 0]
  ------------------
 2496|      0|        {
 2497|       |            // Handle the case in which there is no resource data present.
 2498|       |            // We don't have to generate usable patterns in this situation;
 2499|       |            // we just need to produce something that will be semi-intelligible
 2500|       |            // in most locales.
 2501|       |
 2502|      0|            status = U_USING_FALLBACK_WARNING;
 2503|       |            //TODO(fabalbon): make sure we are storing las resort data for all fields in here.
 2504|      0|            initField(&fEras, fErasCount, reinterpret_cast<const char16_t*>(gLastResortEras), kEraNum, kEraLen, status);
 2505|      0|            initField(&fEraNames, fEraNamesCount, reinterpret_cast<const char16_t*>(gLastResortEras), kEraNum, kEraLen, status);
 2506|      0|            initField(&fNarrowEras, fNarrowErasCount, reinterpret_cast<const char16_t*>(gLastResortEras), kEraNum, kEraLen, status);
 2507|      0|            initField(&fMonths, fMonthsCount, reinterpret_cast<const char16_t*>(gLastResortMonthNames), kMonthNum, kMonthLen, status);
 2508|      0|            initField(&fShortMonths, fShortMonthsCount, reinterpret_cast<const char16_t*>(gLastResortMonthNames), kMonthNum, kMonthLen, status);
 2509|      0|            initField(&fNarrowMonths, fNarrowMonthsCount, reinterpret_cast<const char16_t*>(gLastResortMonthNames), kMonthNum, kMonthLen, status);
 2510|      0|            initField(&fStandaloneMonths, fStandaloneMonthsCount, reinterpret_cast<const char16_t*>(gLastResortMonthNames), kMonthNum, kMonthLen, status);
 2511|      0|            initField(&fStandaloneShortMonths, fStandaloneShortMonthsCount, reinterpret_cast<const char16_t*>(gLastResortMonthNames), kMonthNum, kMonthLen, status);
 2512|      0|            initField(&fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, reinterpret_cast<const char16_t*>(gLastResortMonthNames), kMonthNum, kMonthLen, status);
 2513|      0|            initField(&fWeekdays, fWeekdaysCount, reinterpret_cast<const char16_t*>(gLastResortDayNames), kDayNum, kDayLen, status);
 2514|      0|            initField(&fShortWeekdays, fShortWeekdaysCount, reinterpret_cast<const char16_t*>(gLastResortDayNames), kDayNum, kDayLen, status);
 2515|      0|            initField(&fShorterWeekdays, fShorterWeekdaysCount, reinterpret_cast<const char16_t*>(gLastResortDayNames), kDayNum, kDayLen, status);
 2516|      0|            initField(&fNarrowWeekdays, fNarrowWeekdaysCount, reinterpret_cast<const char16_t*>(gLastResortDayNames), kDayNum, kDayLen, status);
 2517|      0|            initField(&fStandaloneWeekdays, fStandaloneWeekdaysCount, reinterpret_cast<const char16_t*>(gLastResortDayNames), kDayNum, kDayLen, status);
 2518|      0|            initField(&fStandaloneShortWeekdays, fStandaloneShortWeekdaysCount, reinterpret_cast<const char16_t*>(gLastResortDayNames), kDayNum, kDayLen, status);
 2519|      0|            initField(&fStandaloneShorterWeekdays, fStandaloneShorterWeekdaysCount, reinterpret_cast<const char16_t*>(gLastResortDayNames), kDayNum, kDayLen, status);
 2520|      0|            initField(&fStandaloneNarrowWeekdays, fStandaloneNarrowWeekdaysCount, reinterpret_cast<const char16_t*>(gLastResortDayNames), kDayNum, kDayLen, status);
 2521|      0|            initField(&fAmPms, fAmPmsCount, reinterpret_cast<const char16_t*>(gLastResortAmPmMarkers), kAmPmNum, kAmPmLen, status);
 2522|      0|            initField(&fNarrowAmPms, fNarrowAmPmsCount, reinterpret_cast<const char16_t*>(gLastResortAmPmMarkers), kAmPmNum, kAmPmLen, status);
 2523|      0|            initField(&fQuarters, fQuartersCount, reinterpret_cast<const char16_t*>(gLastResortQuarters), kQuarterNum, kQuarterLen, status);
 2524|      0|            initField(&fShortQuarters, fShortQuartersCount, reinterpret_cast<const char16_t*>(gLastResortQuarters), kQuarterNum, kQuarterLen, status);
 2525|      0|            initField(&fNarrowQuarters, fNarrowQuartersCount, reinterpret_cast<const char16_t*>(gLastResortQuarters), kQuarterNum, kQuarterLen, status);
 2526|      0|            initField(&fStandaloneQuarters, fStandaloneQuartersCount, reinterpret_cast<const char16_t*>(gLastResortQuarters), kQuarterNum, kQuarterLen, status);
 2527|      0|            initField(&fStandaloneShortQuarters, fStandaloneShortQuartersCount, reinterpret_cast<const char16_t*>(gLastResortQuarters), kQuarterNum, kQuarterLen, status);
 2528|      0|            initField(&fStandaloneNarrowQuarters, fStandaloneNarrowQuartersCount, reinterpret_cast<const char16_t*>(gLastResortQuarters), kQuarterNum, kQuarterLen, status);
 2529|      0|            fLocalPatternChars.setTo(true, gPatternChars, PATTERN_CHARS_LEN);
  ------------------
  |  |   66|      0|#define PATTERN_CHARS_LEN 37
  ------------------
 2530|      0|        }
 2531|      0|    }
 2532|    420|}
dtfmtsym.cpp:_ZN6icu_78L21newUnicodeStringArrayEm:
  269|    525|static inline UnicodeString* newUnicodeStringArray(size_t count) {
  270|    525|    return new UnicodeString[count ? count : 1];
  ------------------
  |  Branch (270:30): [True: 525, False: 0]
  ------------------
  271|    525|}
dtfmtsym.cpp:_ZN6icu_7812_GLOBAL__N_116CalendarDataSinkC2ER10UErrorCode:
 1531|    420|    :   arrays(false, status), arraySizes(false, status), maps(false, status),
 1532|    420|        mapRefs(),
 1533|    420|        aliasPathPairs(uprv_deleteUObject, uhash_compareUnicodeString, status),
  ------------------
  |  | 1489|    420|#define uprv_deleteUObject U_ICU_ENTRY_POINT_RENAME(uprv_deleteUObject)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      aliasPathPairs(uprv_deleteUObject, uhash_compareUnicodeString, status),
  ------------------
  |  |  999|    420|#define uhash_compareUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_compareUnicodeString)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1534|    420|        currentCalendarType(), nextCalendarType(),
 1535|    420|        resourcesToVisit(nullptr), aliasRelativePath() {
 1536|    420|        if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1536:13): [True: 0, False: 420]
  ------------------
 1537|    420|    }
dtfmtsym.cpp:_ZN6icu_7812_GLOBAL__N_116CalendarDataSink3putEPKcRNS_13ResourceValueEaR10UErrorCode:
 1552|    974|    virtual void put(const char *key, ResourceValue &value, UBool, UErrorCode &errorCode) override {
 1553|    974|        if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1553:13): [True: 0, False: 974]
  ------------------
 1554|    974|        U_ASSERT(!currentCalendarType.isEmpty());
  ------------------
  |  |   35|    974|#   define U_ASSERT(exp) (void)0
  ------------------
 1555|       |
 1556|       |        // Stores the resources to visit on the next calendar.
 1557|    974|        LocalPointer<UVector> resourcesToVisitNext(nullptr);
 1558|    974|        ResourceTable calendarData = value.getTable(errorCode);
 1559|    974|        if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1559:13): [True: 0, False: 974]
  ------------------
 1560|       |
 1561|       |        // Enumerate all resources for this calendar
 1562|  11.0k|        for (int i = 0; calendarData.getKeyAndValue(i, key, value); i++) {
  ------------------
  |  Branch (1562:25): [True: 10.0k, False: 974]
  ------------------
 1563|  10.0k|            UnicodeString keyUString(key, -1, US_INV);
  ------------------
  |  |   98|  10.0k|#define US_INV icu::UnicodeString::kInvariant
  ------------------
 1564|       |
 1565|       |            // == Handle aliases ==
 1566|  10.0k|            AliasType aliasType = processAliasFromValue(keyUString, value, errorCode);
 1567|  10.0k|            if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1567:17): [True: 0, False: 10.0k]
  ------------------
 1568|  10.0k|            if (aliasType == GREGORIAN) {
  ------------------
  |  Branch (1568:17): [True: 0, False: 10.0k]
  ------------------
 1569|       |                // Ignore aliases to the gregorian calendar, all of its resources will be loaded anyway.
 1570|      0|                continue;
 1571|       |
 1572|  10.0k|            } else if (aliasType == DIFFERENT_CALENDAR) {
  ------------------
  |  Branch (1572:24): [True: 0, False: 10.0k]
  ------------------
 1573|       |                // Whenever an alias to the next calendar (except gregorian) is encountered, register the
 1574|       |                // calendar type it's pointing to
 1575|      0|                if (resourcesToVisitNext.isNull()) {
  ------------------
  |  Branch (1575:21): [True: 0, False: 0]
  ------------------
 1576|      0|                    resourcesToVisitNext
 1577|      0|                        .adoptInsteadAndCheckErrorCode(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, errorCode),
  ------------------
  |  | 1489|      0|#define uprv_deleteUObject U_ICU_ENTRY_POINT_RENAME(uprv_deleteUObject)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                      .adoptInsteadAndCheckErrorCode(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, errorCode),
  ------------------
  |  |  999|      0|#define uhash_compareUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_compareUnicodeString)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1578|      0|                                                       errorCode);
 1579|      0|                    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1579:25): [True: 0, False: 0]
  ------------------
 1580|      0|                }
 1581|      0|                LocalPointer<UnicodeString> aliasRelativePathCopy(aliasRelativePath.clone(), errorCode);
 1582|      0|                resourcesToVisitNext->adoptElement(aliasRelativePathCopy.orphan(), errorCode);
 1583|      0|                if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1583:21): [True: 0, False: 0]
  ------------------
 1584|      0|                continue;
 1585|       |
 1586|  10.0k|            } else if (aliasType == SAME_CALENDAR) {
  ------------------
  |  Branch (1586:24): [True: 840, False: 9.24k]
  ------------------
 1587|       |                // Register same-calendar alias
 1588|    840|                if (arrays.get(aliasRelativePath) == nullptr && maps.get(aliasRelativePath) == nullptr) {
  ------------------
  |  Branch (1588:21): [True: 136, False: 704]
  |  Branch (1588:65): [True: 136, False: 0]
  ------------------
 1589|    136|                    LocalPointer<UnicodeString> aliasRelativePathCopy(aliasRelativePath.clone(), errorCode);
 1590|    136|                    aliasPathPairs.adoptElement(aliasRelativePathCopy.orphan(), errorCode);
 1591|    136|                    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1591:25): [True: 0, False: 136]
  ------------------
 1592|    136|                    LocalPointer<UnicodeString> keyUStringCopy(keyUString.clone(), errorCode);
 1593|    136|                    aliasPathPairs.adoptElement(keyUStringCopy.orphan(), errorCode);
 1594|    136|                    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1594:25): [True: 0, False: 136]
  ------------------
 1595|    136|                }
 1596|    840|                continue;
 1597|    840|            }
 1598|       |
 1599|       |            // Only visit the resources that were referenced by an alias on the previous calendar
 1600|       |            // (AmPmMarkersAbbr is an exception).
 1601|  9.24k|            if (!resourcesToVisit.isNull() && !resourcesToVisit->isEmpty() && !resourcesToVisit->contains(&keyUString)
  ------------------
  |  Branch (1601:17): [True: 0, False: 9.24k]
  |  Branch (1601:47): [True: 0, False: 0]
  |  Branch (1601:79): [True: 0, False: 0]
  ------------------
 1602|  9.24k|                && uprv_strcmp(key, gAmPmMarkersAbbrTag) != 0) { continue; }
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1602:20): [True: 0, False: 0]
  ------------------
 1603|       |
 1604|       |            // == Handle data ==
 1605|  9.24k|            if (uprv_strcmp(key, gAmPmMarkersTag) == 0
  ------------------
  |  |   38|  9.24k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  9.24k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1605:17): [True: 200, False: 9.04k]
  ------------------
 1606|  9.24k|                || uprv_strcmp(key, gAmPmMarkersAbbrTag) == 0
  ------------------
  |  |   38|  9.04k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  9.04k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1606:20): [True: 760, False: 8.28k]
  ------------------
 1607|  9.24k|                || uprv_strcmp(key, gAmPmMarkersNarrowTag) == 0) {
  ------------------
  |  |   38|  8.28k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  8.28k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1607:20): [True: 167, False: 8.12k]
  ------------------
 1608|  1.12k|                if (arrays.get(keyUString) == nullptr) {
  ------------------
  |  Branch (1608:21): [True: 732, False: 395]
  ------------------
 1609|    732|                    ResourceArray resourceArray = value.getArray(errorCode);
 1610|    732|                    int32_t arraySize = resourceArray.getSize();
 1611|    732|                    LocalArray<UnicodeString> stringArray(new UnicodeString[arraySize], errorCode);
 1612|    732|                    value.getStringArray(stringArray.getAlias(), arraySize, errorCode);
 1613|    732|                    arrays.put(keyUString, stringArray.orphan(), errorCode);
 1614|    732|                    arraySizes.puti(keyUString, arraySize, errorCode);
 1615|    732|                    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1615:25): [True: 0, False: 732]
  ------------------
 1616|    732|                }
 1617|  8.12k|            } else if (uprv_strcmp(key, gErasTag) == 0
  ------------------
  |  |   38|  8.12k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  8.12k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1617:24): [True: 845, False: 7.27k]
  ------------------
 1618|  8.12k|                       || uprv_strcmp(key, gDayNamesTag) == 0
  ------------------
  |  |   38|  7.27k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  7.27k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1618:27): [True: 884, False: 6.39k]
  ------------------
 1619|  8.12k|                       || uprv_strcmp(key, gMonthNamesTag) == 0
  ------------------
  |  |   38|  6.39k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  6.39k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1619:27): [True: 881, False: 5.51k]
  ------------------
 1620|  8.12k|                       || uprv_strcmp(key, gQuartersTag) == 0
  ------------------
  |  |   38|  5.51k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  5.51k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1620:27): [True: 838, False: 4.67k]
  ------------------
 1621|  8.12k|                       || uprv_strcmp(key, gDayPeriodTag) == 0
  ------------------
  |  |   38|  4.67k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  4.67k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1621:27): [True: 364, False: 4.30k]
  ------------------
 1622|  8.12k|                       || uprv_strcmp(key, gMonthPatternsTag) == 0
  ------------------
  |  |   38|  4.30k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  4.30k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1622:27): [True: 0, False: 4.30k]
  ------------------
 1623|  8.12k|                       || uprv_strcmp(key, gCyclicNameSetsTag) == 0) {
  ------------------
  |  |   38|  4.30k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  4.30k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1623:27): [True: 0, False: 4.30k]
  ------------------
 1624|  3.81k|                processResource(keyUString, key, value, errorCode);
 1625|  3.81k|            }
 1626|  9.24k|        }
 1627|       |
 1628|       |        // Apply same-calendar aliases
 1629|    974|        UBool modified;
 1630|    974|        do {
 1631|    974|            modified = false;
 1632|  5.46k|            for (int32_t i = 0; i < aliasPathPairs.size();) {
  ------------------
  |  Branch (1632:33): [True: 4.49k, False: 974]
  ------------------
 1633|  4.49k|                UBool mod = false;
 1634|  4.49k|                UnicodeString* alias = static_cast<UnicodeString*>(aliasPathPairs[i]);
 1635|  4.49k|                UnicodeString *aliasArray;
 1636|  4.49k|                Hashtable *aliasMap;
 1637|  4.49k|                if ((aliasArray = static_cast<UnicodeString*>(arrays.get(*alias))) != nullptr) {
  ------------------
  |  Branch (1637:21): [True: 4.49k, False: 0]
  ------------------
 1638|  4.49k|                    UnicodeString* path = static_cast<UnicodeString*>(aliasPathPairs[i + 1]);
 1639|  4.49k|                    if (arrays.get(*path) == nullptr) {
  ------------------
  |  Branch (1639:25): [True: 4.45k, False: 38]
  ------------------
 1640|       |                        // Clone the array
 1641|  4.45k|                        int32_t aliasArraySize = arraySizes.geti(*alias);
 1642|  4.45k|                        LocalArray<UnicodeString> aliasArrayCopy(new UnicodeString[aliasArraySize], errorCode);
 1643|  4.45k|                        if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1643:29): [True: 0, False: 4.45k]
  ------------------
 1644|  4.45k|                        uprv_arrayCopy(aliasArray, aliasArrayCopy.getAlias(), aliasArraySize);
 1645|       |                        // Put the array on the 'arrays' map
 1646|  4.45k|                        arrays.put(*path, aliasArrayCopy.orphan(), errorCode);
 1647|  4.45k|                        arraySizes.puti(*path, aliasArraySize, errorCode);
 1648|  4.45k|                    }
 1649|  4.49k|                    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1649:25): [True: 0, False: 4.49k]
  ------------------
 1650|  4.49k|                    mod = true;
 1651|  4.49k|                } else if ((aliasMap = static_cast<Hashtable*>(maps.get(*alias))) != nullptr) {
  ------------------
  |  Branch (1651:28): [True: 0, False: 0]
  ------------------
 1652|      0|                    UnicodeString* path = static_cast<UnicodeString*>(aliasPathPairs[i + 1]);
 1653|      0|                    if (maps.get(*path) == nullptr) {
  ------------------
  |  Branch (1653:25): [True: 0, False: 0]
  ------------------
 1654|      0|                        maps.put(*path, aliasMap, errorCode);
 1655|      0|                    }
 1656|      0|                    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1656:25): [True: 0, False: 0]
  ------------------
 1657|      0|                    mod = true;
 1658|      0|                }
 1659|  4.49k|                if (mod) {
  ------------------
  |  Branch (1659:21): [True: 4.49k, False: 0]
  ------------------
 1660|  4.49k|                    aliasPathPairs.removeElementAt(i + 1);
 1661|  4.49k|                    aliasPathPairs.removeElementAt(i);
 1662|  4.49k|                    modified = true;
 1663|  4.49k|                } else {
 1664|      0|                    i += 2;
 1665|      0|                }
 1666|  4.49k|            }
 1667|    974|        } while (modified && !aliasPathPairs.isEmpty());
  ------------------
  |  Branch (1667:18): [True: 388, False: 586]
  |  Branch (1667:30): [True: 0, False: 388]
  ------------------
 1668|       |
 1669|       |        // Set the resources to visit on the next calendar
 1670|    974|        if (!resourcesToVisitNext.isNull()) {
  ------------------
  |  Branch (1670:13): [True: 0, False: 974]
  ------------------
 1671|      0|            resourcesToVisit = std::move(resourcesToVisitNext);
 1672|      0|        }
 1673|    974|    }
dtfmtsym.cpp:_ZN6icu_7812_GLOBAL__N_116CalendarDataSink21processAliasFromValueERNS_13UnicodeStringERNS_13ResourceValueER10UErrorCode:
 1797|  26.1k|                                    UErrorCode &errorCode) {
 1798|  26.1k|        if (U_FAILURE(errorCode)) { return NONE; }
  ------------------
  |  Branch (1798:13): [True: 0, False: 26.1k]
  ------------------
 1799|       |
 1800|  26.1k|        if (value.getType() == URES_ALIAS) {
  ------------------
  |  Branch (1800:13): [True: 5.19k, False: 20.9k]
  ------------------
 1801|  5.19k|            int32_t aliasPathSize;
 1802|  5.19k|            const char16_t* aliasPathUChar = value.getAliasString(aliasPathSize, errorCode);
 1803|  5.19k|            if (U_FAILURE(errorCode)) { return NONE; }
  ------------------
  |  Branch (1803:17): [True: 0, False: 5.19k]
  ------------------
 1804|  5.19k|            UnicodeString aliasPath(aliasPathUChar, aliasPathSize);
 1805|  5.19k|            const int32_t aliasPrefixLength = UPRV_LENGTHOF(kCalendarAliasPrefixUChar);
  ------------------
  |  |   99|  5.19k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
 1806|  5.19k|            if (aliasPath.startsWith(kCalendarAliasPrefixUChar, aliasPrefixLength)
  ------------------
  |  Branch (1806:17): [True: 5.19k, False: 0]
  |  Branch (1806:17): [True: 5.19k, False: 0]
  ------------------
 1807|  5.19k|                && aliasPath.length() > aliasPrefixLength) {
  ------------------
  |  Branch (1807:20): [True: 5.19k, False: 0]
  ------------------
 1808|  5.19k|                int32_t typeLimit = aliasPath.indexOf(SOLIDUS, aliasPrefixLength);
  ------------------
  |  |   35|  5.19k|#define SOLIDUS           ((char16_t)0x002F)
  ------------------
 1809|  5.19k|                if (typeLimit > aliasPrefixLength) {
  ------------------
  |  Branch (1809:21): [True: 5.19k, False: 0]
  ------------------
 1810|  5.19k|                    const UnicodeString aliasCalendarType =
 1811|  5.19k|                        aliasPath.tempSubStringBetween(aliasPrefixLength, typeLimit);
 1812|  5.19k|                    aliasRelativePath.setTo(aliasPath, typeLimit + 1, aliasPath.length());
 1813|       |
 1814|  5.19k|                    if (currentCalendarType == aliasCalendarType
  ------------------
  |  Branch (1814:25): [True: 5.19k, False: 0]
  ------------------
 1815|  5.19k|                        && currentRelativePath != aliasRelativePath) {
  ------------------
  |  Branch (1815:28): [True: 5.19k, False: 0]
  ------------------
 1816|       |                        // If we have an alias to the same calendar, the path to the resource must be different
 1817|  5.19k|                        return SAME_CALENDAR;
 1818|       |
 1819|  5.19k|                    } else if (currentCalendarType != aliasCalendarType
  ------------------
  |  Branch (1819:32): [True: 0, False: 0]
  ------------------
 1820|      0|                               && currentRelativePath == aliasRelativePath) {
  ------------------
  |  Branch (1820:35): [True: 0, False: 0]
  ------------------
 1821|       |                        // If we have an alias to a different calendar, the path to the resource must be the same
 1822|      0|                        if (aliasCalendarType.compare(kGregorianTagUChar, UPRV_LENGTHOF(kGregorianTagUChar)) == 0) {
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (1822:29): [True: 0, False: 0]
  ------------------
 1823|      0|                            return GREGORIAN;
 1824|      0|                        } else if (nextCalendarType.isBogus()) {
  ------------------
  |  Branch (1824:36): [True: 0, False: 0]
  ------------------
 1825|      0|                            nextCalendarType = aliasCalendarType;
 1826|      0|                            return DIFFERENT_CALENDAR;
 1827|      0|                        } else if (nextCalendarType == aliasCalendarType) {
  ------------------
  |  Branch (1827:36): [True: 0, False: 0]
  ------------------
 1828|      0|                            return DIFFERENT_CALENDAR;
 1829|      0|                        }
 1830|      0|                    }
 1831|  5.19k|                }
 1832|  5.19k|            }
 1833|      0|            errorCode = U_INTERNAL_PROGRAM_ERROR;
 1834|      0|            return NONE;
 1835|  5.19k|        }
 1836|  20.9k|        return NONE;
 1837|  26.1k|    }
dtfmtsym.cpp:_ZN6icu_7812_GLOBAL__N_116CalendarDataSink15processResourceERNS_13UnicodeStringEPKcRNS_13ResourceValueER10UErrorCode:
 1676|  10.2k|    void processResource(UnicodeString &path, const char *key, ResourceValue &value, UErrorCode &errorCode) {
 1677|  10.2k|        if (U_FAILURE(errorCode)) return;
  ------------------
  |  Branch (1677:13): [True: 0, False: 10.2k]
  ------------------
 1678|       |
 1679|  10.2k|        ResourceTable table = value.getTable(errorCode);
 1680|  10.2k|        if (U_FAILURE(errorCode)) return;
  ------------------
  |  Branch (1680:13): [True: 0, False: 10.2k]
  ------------------
 1681|  10.2k|        Hashtable* stringMap = nullptr;
 1682|       |
 1683|       |        // Iterate over all the elements of the table and add them to the map
 1684|  37.6k|        for (int i = 0; table.getKeyAndValue(i, key, value); i++) {
  ------------------
  |  Branch (1684:25): [True: 27.4k, False: 10.2k]
  ------------------
 1685|  27.4k|            UnicodeString keyUString(key, -1, US_INV);
  ------------------
  |  |   98|  27.4k|#define US_INV icu::UnicodeString::kInvariant
  ------------------
 1686|       |
 1687|       |            // Ignore '%variant' keys
 1688|  27.4k|            if (keyUString.endsWith(kVariantTagUChar, UPRV_LENGTHOF(kVariantTagUChar))) {
  ------------------
  |  |   99|  27.4k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (1688:17): [True: 638, False: 26.7k]
  ------------------
 1689|    638|                continue;
 1690|    638|            }
 1691|       |
 1692|       |            // == Handle String elements ==
 1693|  26.7k|            if (value.getType() == URES_STRING) {
  ------------------
  |  Branch (1693:17): [True: 5.54k, False: 21.2k]
  ------------------
 1694|       |                // We are on a leaf, store the map elements into the stringMap
 1695|  5.54k|                if (i == 0) {
  ------------------
  |  Branch (1695:21): [True: 1.06k, False: 4.47k]
  ------------------
 1696|       |                    // mapRefs will keep ownership of 'stringMap':
 1697|  1.06k|                    stringMap = mapRefs.create(false, errorCode);
 1698|  1.06k|                    if (stringMap == nullptr) {
  ------------------
  |  Branch (1698:25): [True: 0, False: 1.06k]
  ------------------
 1699|      0|                        errorCode = U_MEMORY_ALLOCATION_ERROR;
 1700|      0|                        return;
 1701|      0|                    }
 1702|  1.06k|                    maps.put(path, stringMap, errorCode);
 1703|  1.06k|                    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1703:25): [True: 0, False: 1.06k]
  ------------------
 1704|  1.06k|                    stringMap->setValueDeleter(uprv_deleteUObject);
  ------------------
  |  | 1489|  1.06k|#define uprv_deleteUObject U_ICU_ENTRY_POINT_RENAME(uprv_deleteUObject)
  |  |  ------------------
  |  |  |  |  123|  1.06k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.06k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.06k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1705|  1.06k|                }
 1706|  5.54k|                U_ASSERT(stringMap != nullptr);
  ------------------
  |  |   35|  5.54k|#   define U_ASSERT(exp) (void)0
  ------------------
 1707|  5.54k|                int32_t valueStringSize;
 1708|  5.54k|                const char16_t *valueString = value.getString(valueStringSize, errorCode);
 1709|  5.54k|                if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1709:21): [True: 0, False: 5.54k]
  ------------------
 1710|  5.54k|                LocalPointer<UnicodeString> valueUString(new UnicodeString(true, valueString, valueStringSize), errorCode);
 1711|  5.54k|                stringMap->put(keyUString, valueUString.orphan(), errorCode);
 1712|  5.54k|                if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1712:21): [True: 0, False: 5.54k]
  ------------------
 1713|  5.54k|                continue;
 1714|  5.54k|            }
 1715|  21.2k|            U_ASSERT(stringMap == nullptr);
  ------------------
  |  |   35|  21.2k|#   define U_ASSERT(exp) (void)0
  ------------------
 1716|       |
 1717|       |            // Store the current path's length and append the current key to the path.
 1718|  21.2k|            int32_t pathLength = path.length();
 1719|  21.2k|            path.append(SOLIDUS).append(keyUString);
  ------------------
  |  |   35|  21.2k|#define SOLIDUS           ((char16_t)0x002F)
  ------------------
 1720|       |
 1721|       |            // In cyclicNameSets ignore everything but years/format/abbreviated
 1722|       |            // and zodiacs/format/abbreviated
 1723|  21.2k|            if (path.startsWith(kCyclicNameSetsTagUChar, UPRV_LENGTHOF(kCyclicNameSetsTagUChar))) {
  ------------------
  |  |   99|  21.2k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (1723:17): [True: 0, False: 21.2k]
  ------------------
 1724|      0|                UBool skip = true;
 1725|      0|                int32_t startIndex = UPRV_LENGTHOF(kCyclicNameSetsTagUChar);
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
 1726|      0|                int32_t length = 0;
 1727|      0|                if (startIndex == path.length()
  ------------------
  |  Branch (1727:21): [True: 0, False: 0]
  ------------------
 1728|      0|                    || path.compare(startIndex, (length = UPRV_LENGTHOF(kZodiacsUChar)), kZodiacsUChar, 0, UPRV_LENGTHOF(kZodiacsUChar)) == 0
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
                                  || path.compare(startIndex, (length = UPRV_LENGTHOF(kZodiacsUChar)), kZodiacsUChar, 0, UPRV_LENGTHOF(kZodiacsUChar)) == 0
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (1728:24): [True: 0, False: 0]
  ------------------
 1729|      0|                    || path.compare(startIndex, (length = UPRV_LENGTHOF(kYearsTagUChar)), kYearsTagUChar, 0, UPRV_LENGTHOF(kYearsTagUChar)) == 0
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
                                  || path.compare(startIndex, (length = UPRV_LENGTHOF(kYearsTagUChar)), kYearsTagUChar, 0, UPRV_LENGTHOF(kYearsTagUChar)) == 0
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (1729:24): [True: 0, False: 0]
  ------------------
 1730|      0|                    || path.compare(startIndex, (length = UPRV_LENGTHOF(kDayPartsTagUChar)), kDayPartsTagUChar, 0, UPRV_LENGTHOF(kDayPartsTagUChar)) == 0) {
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
                                  || path.compare(startIndex, (length = UPRV_LENGTHOF(kDayPartsTagUChar)), kDayPartsTagUChar, 0, UPRV_LENGTHOF(kDayPartsTagUChar)) == 0) {
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (1730:24): [True: 0, False: 0]
  ------------------
 1731|      0|                    startIndex += length;
 1732|      0|                    length = 0;
 1733|      0|                    if (startIndex == path.length()
  ------------------
  |  Branch (1733:25): [True: 0, False: 0]
  ------------------
 1734|      0|                        || path.compare(startIndex, (length = UPRV_LENGTHOF(kFormatTagUChar)), kFormatTagUChar, 0, UPRV_LENGTHOF(kFormatTagUChar)) == 0) {
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
                                      || path.compare(startIndex, (length = UPRV_LENGTHOF(kFormatTagUChar)), kFormatTagUChar, 0, UPRV_LENGTHOF(kFormatTagUChar)) == 0) {
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (1734:28): [True: 0, False: 0]
  ------------------
 1735|      0|                        startIndex += length;
 1736|      0|                        length = 0;
 1737|      0|                        if (startIndex == path.length()
  ------------------
  |  Branch (1737:29): [True: 0, False: 0]
  ------------------
 1738|      0|                            || path.compare(startIndex, (length = UPRV_LENGTHOF(kAbbrTagUChar)), kAbbrTagUChar, 0, UPRV_LENGTHOF(kAbbrTagUChar)) == 0) {
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
                                          || path.compare(startIndex, (length = UPRV_LENGTHOF(kAbbrTagUChar)), kAbbrTagUChar, 0, UPRV_LENGTHOF(kAbbrTagUChar)) == 0) {
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (1738:32): [True: 0, False: 0]
  ------------------
 1739|      0|                            skip = false;
 1740|      0|                        }
 1741|      0|                    }
 1742|      0|                }
 1743|      0|                if (skip) {
  ------------------
  |  Branch (1743:21): [True: 0, False: 0]
  ------------------
 1744|       |                    // Drop the latest key on the path and continue
 1745|      0|                    path.retainBetween(0, pathLength);
 1746|      0|                    continue;
 1747|      0|                }
 1748|      0|            }
 1749|       |
 1750|       |            // == Handle aliases ==
 1751|  21.2k|            if (arrays.get(path) != nullptr || maps.get(path) != nullptr) {
  ------------------
  |  Branch (1751:17): [True: 4.98k, False: 16.2k]
  |  Branch (1751:48): [True: 164, False: 16.0k]
  ------------------
 1752|       |                // Drop the latest key on the path and continue
 1753|  5.14k|                path.retainBetween(0, pathLength);
 1754|  5.14k|                continue;
 1755|  5.14k|            }
 1756|       |
 1757|  16.0k|            AliasType aliasType = processAliasFromValue(path, value, errorCode);
 1758|  16.0k|            if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1758:17): [True: 0, False: 16.0k]
  ------------------
 1759|  16.0k|            if (aliasType == SAME_CALENDAR) {
  ------------------
  |  Branch (1759:17): [True: 4.35k, False: 11.7k]
  ------------------
 1760|       |                // Store the alias path and the current path on aliasPathPairs
 1761|  4.35k|                LocalPointer<UnicodeString> aliasRelativePathCopy(aliasRelativePath.clone(), errorCode);
 1762|  4.35k|                aliasPathPairs.adoptElement(aliasRelativePathCopy.orphan(), errorCode);
 1763|  4.35k|                if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1763:21): [True: 0, False: 4.35k]
  ------------------
 1764|  4.35k|                LocalPointer<UnicodeString> pathCopy(path.clone(), errorCode);
 1765|  4.35k|                aliasPathPairs.adoptElement(pathCopy.orphan(), errorCode);
 1766|  4.35k|                if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1766:21): [True: 0, False: 4.35k]
  ------------------
 1767|       |
 1768|       |                // Drop the latest key on the path and continue
 1769|  4.35k|                path.retainBetween(0, pathLength);
 1770|  4.35k|                continue;
 1771|  4.35k|            }
 1772|  11.7k|            U_ASSERT(aliasType == NONE);
  ------------------
  |  |   35|  11.7k|#   define U_ASSERT(exp) (void)0
  ------------------
 1773|       |
 1774|       |            // == Handle data ==
 1775|  11.7k|            if (value.getType() == URES_ARRAY) {
  ------------------
  |  Branch (1775:17): [True: 5.30k, False: 6.42k]
  ------------------
 1776|       |                // We are on a leaf, store the array
 1777|  5.30k|                ResourceArray rDataArray = value.getArray(errorCode);
 1778|  5.30k|                int32_t dataArraySize = rDataArray.getSize();
 1779|  5.30k|                LocalArray<UnicodeString> dataArray(new UnicodeString[dataArraySize], errorCode);
 1780|  5.30k|                value.getStringArray(dataArray.getAlias(), dataArraySize, errorCode);
 1781|  5.30k|                arrays.put(path, dataArray.orphan(), errorCode);
 1782|  5.30k|                arraySizes.puti(path, dataArraySize, errorCode);
 1783|  5.30k|                if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1783:21): [True: 0, False: 5.30k]
  ------------------
 1784|  6.42k|            } else if (value.getType() == URES_TABLE) {
  ------------------
  |  Branch (1784:24): [True: 6.42k, False: 0]
  ------------------
 1785|       |                // We are not on a leaf, recursively process the subtable.
 1786|  6.42k|                processResource(path, key, value, errorCode);
 1787|  6.42k|                if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1787:21): [True: 0, False: 6.42k]
  ------------------
 1788|  6.42k|            }
 1789|       |
 1790|       |            // Drop the latest key on the path
 1791|  11.7k|            path.retainBetween(0, pathLength);
 1792|  11.7k|        }
 1793|  10.2k|    }
dtfmtsym.cpp:_ZN6icu_7812_GLOBAL__N_116CalendarDataSink12preEnumerateERKNS_13UnicodeStringE:
 1546|    420|    void preEnumerate(const UnicodeString &calendarType) {
 1547|    420|        currentCalendarType = calendarType;
 1548|    420|        nextCalendarType.setToBogus();
 1549|    420|        aliasPathPairs.removeAllElements();
 1550|    420|    }
dtfmtsym.cpp:_ZN6icu_78L20initLeapMonthPatternEPNS_13UnicodeStringEiRNS_12_GLOBAL__N_116CalendarDataSinkERNS_10CharStringER10UErrorCode:
 1912|  2.94k|initLeapMonthPattern(UnicodeString *field, int32_t index, CalendarDataSink &sink, CharString &path, UErrorCode &status) {
 1913|  2.94k|    field[index].remove();
 1914|  2.94k|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (1914:9): [True: 420, False: 2.52k]
  ------------------
 1915|    420|        UnicodeString pathUString(path.data(), -1, US_INV);
  ------------------
  |  |   98|    420|#define US_INV icu::UnicodeString::kInvariant
  ------------------
 1916|    420|        Hashtable *leapMonthTable = static_cast<Hashtable*>(sink.maps.get(pathUString));
 1917|    420|        if (leapMonthTable != nullptr) {
  ------------------
  |  Branch (1917:13): [True: 0, False: 420]
  ------------------
 1918|      0|            UnicodeString leapLabel(false, kLeapTagUChar, UPRV_LENGTHOF(kLeapTagUChar));
  ------------------
  |  |   99|      0|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
 1919|      0|            UnicodeString *leapMonthPattern = static_cast<UnicodeString*>(leapMonthTable->get(leapLabel));
 1920|      0|            if (leapMonthPattern != nullptr) {
  ------------------
  |  Branch (1920:17): [True: 0, False: 0]
  ------------------
 1921|      0|                field[index].fastCopyFrom(*leapMonthPattern);
 1922|      0|            } else {
 1923|      0|                field[index].setToBogus();
 1924|      0|            }
 1925|      0|            return;
 1926|      0|        }
 1927|    420|        status = U_MISSING_RESOURCE_ERROR;
 1928|    420|    }
 1929|  2.94k|}
dtfmtsym.cpp:_ZN6icu_78L17buildResourcePathERNS_10CharStringEPKcS3_S3_R10UErrorCode:
 1945|  14.7k|                   const char* segment3, UErrorCode &errorCode) {
 1946|  14.7k|    return buildResourcePath(path, segment1, segment2, errorCode).append('/', errorCode)
 1947|  14.7k|                                                                 .append(segment3, -1, errorCode);
 1948|  14.7k|}
dtfmtsym.cpp:_ZN6icu_78L9initFieldEPPNS_13UnicodeStringERiRNS_12_GLOBAL__N_116CalendarDataSinkERNS_10CharStringER10UErrorCode:
 1872|  8.41k|initField(UnicodeString **field, int32_t& length, CalendarDataSink &sink, CharString &key, UErrorCode &status) {
 1873|  8.41k|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (1873:9): [True: 7.99k, False: 420]
  ------------------
 1874|  7.99k|        UnicodeString keyUString(key.data(), -1, US_INV);
  ------------------
  |  |   98|  7.99k|#define US_INV icu::UnicodeString::kInvariant
  ------------------
 1875|  7.99k|        UnicodeString* array = static_cast<UnicodeString*>(sink.arrays.get(keyUString));
 1876|       |
 1877|  7.99k|        if (array != nullptr) {
  ------------------
  |  Branch (1877:13): [True: 7.03k, False: 955]
  ------------------
 1878|  7.03k|            length = sink.arraySizes.geti(keyUString);
 1879|  7.03k|            *field = array;
 1880|       |            // DateFormatSymbols takes ownership of the array:
 1881|  7.03k|            sink.arrays.remove(keyUString);
 1882|  7.03k|        } else {
 1883|    955|            length = 0;
 1884|    955|            status = U_MISSING_RESOURCE_ERROR;
 1885|    955|        }
 1886|  7.99k|    }
 1887|  8.41k|}
dtfmtsym.cpp:_ZN6icu_78L17buildResourcePathERNS_10CharStringEPKcS3_S3_S3_R10UErrorCode:
 1952|    840|                   const char* segment3, const char* segment4, UErrorCode &errorCode) {
 1953|    840|    return buildResourcePath(path, segment1, segment2, segment3, errorCode).append('/', errorCode)
 1954|    840|                                                                           .append(segment4, -1, errorCode);
 1955|    840|}
dtfmtsym.cpp:_ZN6icu_7820loadDayPeriodStringsERNS_12_GLOBAL__N_116CalendarDataSinkERNS_10CharStringERiR10UErrorCode:
 1988|  2.52k|                                    int32_t &stringCount,  UErrorCode &status) {
 1989|  2.52k|    if (U_FAILURE(status)) { return nullptr; }
  ------------------
  |  Branch (1989:9): [True: 0, False: 2.52k]
  ------------------
 1990|       |
 1991|  2.52k|    UnicodeString pathUString(path.data(), -1, US_INV);
  ------------------
  |  |   98|  2.52k|#define US_INV icu::UnicodeString::kInvariant
  ------------------
 1992|  2.52k|    Hashtable* map = static_cast<Hashtable*>(sink.maps.get(pathUString));
 1993|       |
 1994|  2.52k|    stringCount = UPRV_LENGTHOF(dayPeriodKeys);
  ------------------
  |  |   99|  2.52k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
 1995|  2.52k|    UnicodeString *strings = new UnicodeString[stringCount];
 1996|  2.52k|    if (strings == nullptr) {
  ------------------
  |  Branch (1996:9): [True: 0, False: 2.52k]
  ------------------
 1997|      0|        status = U_MEMORY_ALLOCATION_ERROR;
 1998|      0|        return nullptr;
 1999|      0|    }
 2000|       |
 2001|  2.52k|    if (map != nullptr) {
  ------------------
  |  Branch (2001:9): [True: 1.06k, False: 1.45k]
  ------------------
 2002|  11.7k|        for (int32_t i = 0; i < stringCount; ++i) {
  ------------------
  |  Branch (2002:29): [True: 10.6k, False: 1.06k]
  ------------------
 2003|  10.6k|            UnicodeString dayPeriodKey(dayPeriodKeys[i], -1, US_INV);
  ------------------
  |  |   98|  10.6k|#define US_INV icu::UnicodeString::kInvariant
  ------------------
 2004|  10.6k|            UnicodeString *dayPeriod = static_cast<UnicodeString*>(map->get(dayPeriodKey));
 2005|  10.6k|            if (dayPeriod != nullptr) {
  ------------------
  |  Branch (2005:17): [True: 4.90k, False: 5.78k]
  ------------------
 2006|  4.90k|                strings[i].fastCopyFrom(*dayPeriod);
 2007|  5.78k|            } else {
 2008|  5.78k|                strings[i].setToBogus();
 2009|  5.78k|            }
 2010|  10.6k|        }
 2011|  1.45k|    } else {
 2012|  15.9k|        for (int32_t i = 0; i < stringCount; i++) {
  ------------------
  |  Branch (2012:29): [True: 14.5k, False: 1.45k]
  ------------------
 2013|  14.5k|            strings[i].setToBogus();
 2014|  14.5k|        }
 2015|  1.45k|    }
 2016|  2.52k|    return strings;
 2017|  2.52k|}
dtfmtsym.cpp:_ZN6icu_78L17buildResourcePathERNS_10CharStringEPKcS3_R10UErrorCode:
 1938|  15.9k|                   UErrorCode &errorCode) {
 1939|  15.9k|    return buildResourcePath(path, segment1, errorCode).append('/', errorCode)
 1940|  15.9k|                                                       .append(segment2, -1, errorCode);
 1941|  15.9k|}
dtfmtsym.cpp:_ZN6icu_78L17buildResourcePathERNS_10CharStringEPKcR10UErrorCode:
 1932|  17.2k|&buildResourcePath(CharString &path, const char* segment1, UErrorCode &errorCode) {
 1933|  17.2k|    return path.clear().append(segment1, -1, errorCode);
 1934|  17.2k|}
dtfmtsym.cpp:_ZN6icu_78L9initFieldEPPNS_13UnicodeStringERiRNS_12_GLOBAL__N_116CalendarDataSinkERNS_10CharStringEiR10UErrorCode:
 1890|  3.36k|initField(UnicodeString **field, int32_t& length, CalendarDataSink &sink, CharString &key, int32_t arrayOffset, UErrorCode &status) {
 1891|  3.36k|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (1891:9): [True: 3.36k, False: 0]
  ------------------
 1892|  3.36k|        UnicodeString keyUString(key.data(), -1, US_INV);
  ------------------
  |  |   98|  3.36k|#define US_INV icu::UnicodeString::kInvariant
  ------------------
 1893|  3.36k|        UnicodeString* array = static_cast<UnicodeString*>(sink.arrays.get(keyUString));
 1894|       |
 1895|  3.36k|        if (array != nullptr) {
  ------------------
  |  Branch (1895:13): [True: 3.36k, False: 0]
  ------------------
 1896|  3.36k|            int32_t arrayLength = sink.arraySizes.geti(keyUString);
 1897|  3.36k|            length = arrayLength + arrayOffset;
 1898|  3.36k|            *field = new UnicodeString[length];
 1899|  3.36k|            if (*field == nullptr) {
  ------------------
  |  Branch (1899:17): [True: 0, False: 3.36k]
  ------------------
 1900|      0|                status = U_MEMORY_ALLOCATION_ERROR;
 1901|      0|                return;
 1902|      0|            }
 1903|  3.36k|            uprv_arrayCopy(array, 0, *field, arrayOffset, arrayLength);
 1904|  3.36k|        } else {
 1905|      0|            length = 0;
 1906|      0|            status = U_MISSING_RESOURCE_ERROR;
 1907|      0|        }
 1908|  3.36k|    }
 1909|  3.36k|}
dtfmtsym.cpp:_ZN6icu_7812_GLOBAL__N_116CalendarDataSinkD2Ev:
 1845|    420|CalendarDataSink::~CalendarDataSink() {
 1846|    420|    arrays.setValueDeleter(deleteUnicodeStringArray);
 1847|    420|}
dtfmtsym.cpp:_ZN6icu_7812_GLOBAL__N_116CalendarDataSink24deleteUnicodeStringArrayEPv:
 1840|  3.45k|    static void U_CALLCONV deleteUnicodeStringArray(void *uArray) {
 1841|  3.45k|        delete[] static_cast<UnicodeString *>(uArray);
 1842|  3.45k|    }

_ZN6icu_789ClockMath16floorDivideInt64Ell:
   30|  5.47k|int64_t ClockMath::floorDivideInt64(int64_t numerator, int64_t denominator) {
   31|  5.47k|    return (numerator >= 0) ?
  ------------------
  |  Branch (31:12): [True: 5.47k, False: 0]
  ------------------
   32|  5.47k|        numerator / denominator : ((numerator + 1) / denominator) - 1;
   33|  5.47k|}
_ZN6icu_785Grego11fieldsToDayEiii:
  107|  1.82k|int64_t Grego::fieldsToDay(int32_t year, int32_t month, int32_t dom) {
  108|       |
  109|  1.82k|    int64_t y = year - 1;
  110|       |
  111|  1.82k|    int64_t julian = 365LL * y +
  112|  1.82k|        ClockMath::floorDivideInt64(y, 4LL) + (JULIAN_1_CE - 3) + // Julian cal
  113|  1.82k|        ClockMath::floorDivideInt64(y, 400LL) -
  114|  1.82k|        ClockMath::floorDivideInt64(y, 100LL) + 2 + // => Gregorian cal
  115|  1.82k|        DAYS_BEFORE[month + (isLeapYear(year) ? 12 : 0)] + dom; // => month/dom
  ------------------
  |  Branch (115:30): [True: 215, False: 1.60k]
  ------------------
  116|       |
  117|  1.82k|    return julian - JULIAN_1970_CE; // JD => epoch day
  118|  1.82k|}

_ZN6icu_785Grego10isLeapYearEi:
  331|  1.82k|inline UBool Grego::isLeapYear(int32_t year) {
  332|       |    // year&0x3 == year%4
  333|  1.82k|    return ((year&0x3) == 0) && ((year%100 != 0) || (year%400 == 0));
  ------------------
  |  Branch (333:12): [True: 215, False: 1.60k]
  |  Branch (333:34): [True: 185, False: 30]
  |  Branch (333:53): [True: 30, False: 0]
  ------------------
  334|  1.82k|}

_ZN6icu_7815NumberingSystemC2Ev:
   62|    420|NumberingSystem::NumberingSystem() {
   63|    420|     radix = 10;
   64|    420|     algorithmic = false;
   65|    420|     UnicodeString defaultDigits = DEFAULT_DIGITS;
  ------------------
  |  |   40|    420|#define DEFAULT_DIGITS UNICODE_STRING_SIMPLE("0123456789")
  |  |  ------------------
  |  |  |  |  135|    420|#define UNICODE_STRING_SIMPLE(cs) UNICODE_STRING(cs, -1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  121|    420|# define UNICODE_STRING(cs, _length) icu::UnicodeString(true, u ## cs, _length)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   66|    420|     desc.setTo(defaultDigits);
   67|    420|     uprv_strcpy(name,gLatn);
  ------------------
  |  |   36|    420|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|    420|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
   68|    420|}
_ZN6icu_7815NumberingSystem14createInstanceEiaRKNS_13UnicodeStringER10UErrorCode:
   81|    420|NumberingSystem::createInstance(int32_t radix_in, UBool isAlgorithmic_in, const UnicodeString & desc_in, UErrorCode &status) {
   82|       |
   83|    420|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (83:9): [True: 0, False: 420]
  ------------------
   84|      0|        return nullptr;
   85|      0|    }
   86|       |
   87|    420|    if ( radix_in < 2 ) {
  ------------------
  |  Branch (87:10): [True: 0, False: 420]
  ------------------
   88|      0|        status = U_ILLEGAL_ARGUMENT_ERROR;
   89|      0|        return nullptr;
   90|      0|    }
   91|       |
   92|    420|    if ( !isAlgorithmic_in ) {
  ------------------
  |  Branch (92:10): [True: 420, False: 0]
  ------------------
   93|    420|       if ( desc_in.countChar32() != radix_in ) {
  ------------------
  |  Branch (93:13): [True: 0, False: 420]
  ------------------
   94|      0|           status = U_ILLEGAL_ARGUMENT_ERROR;
   95|      0|           return nullptr;
   96|      0|       }
   97|    420|    }
   98|       |
   99|    420|    LocalPointer<NumberingSystem> ns(new NumberingSystem(), status);
  100|    420|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (100:9): [True: 0, False: 420]
  ------------------
  101|      0|        return nullptr;
  102|      0|    }
  103|       |
  104|    420|    ns->setRadix(radix_in);
  105|    420|    ns->setDesc(desc_in);
  106|    420|    ns->setAlgorithmic(isAlgorithmic_in);
  107|    420|    ns->setName(nullptr);
  108|       |
  109|    420|    return ns.orphan();
  110|    420|}
_ZN6icu_7815NumberingSystem14createInstanceERKNS_6LocaleER10UErrorCode:
  113|    420|NumberingSystem::createInstance(const Locale & inLocale, UErrorCode& status) {
  114|       |
  115|    420|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (115:9): [True: 0, False: 420]
  ------------------
  116|      0|        return nullptr;
  117|      0|    }
  118|       |
  119|    420|    UBool nsResolved = true;
  120|    420|    UBool usingFallback = false;
  121|    420|    char buffer[ULOC_KEYWORDS_CAPACITY] = "";
  122|    420|    int32_t count = inLocale.getKeywordValue("numbers", buffer, sizeof(buffer), status);
  123|    420|    if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING) {
  ------------------
  |  Branch (123:9): [True: 0, False: 420]
  |  Branch (123:30): [True: 0, False: 420]
  ------------------
  124|       |        // the "numbers" keyword exceeds ULOC_KEYWORDS_CAPACITY; ignore and use default.
  125|      0|        count = 0;
  126|      0|        status = U_ZERO_ERROR;
  127|      0|    }
  128|    420|    if ( count > 0 ) { // @numbers keyword was specified in the locale
  ------------------
  |  Branch (128:10): [True: 0, False: 420]
  ------------------
  129|      0|        U_ASSERT(count < ULOC_KEYWORDS_CAPACITY);
  ------------------
  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  ------------------
  130|      0|        buffer[count] = '\0'; // Make sure it is null terminated.
  131|      0|        if ( !uprv_strcmp(buffer,gDefault) || !uprv_strcmp(buffer,gNative) || 
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
                      if ( !uprv_strcmp(buffer,gDefault) || !uprv_strcmp(buffer,gNative) || 
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (131:14): [True: 0, False: 0]
  |  Branch (131:47): [True: 0, False: 0]
  ------------------
  132|      0|             !uprv_strcmp(buffer,gTraditional) || !uprv_strcmp(buffer,gFinance)) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
                           !uprv_strcmp(buffer,gTraditional) || !uprv_strcmp(buffer,gFinance)) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (132:14): [True: 0, False: 0]
  |  Branch (132:51): [True: 0, False: 0]
  ------------------
  133|      0|            nsResolved = false;
  134|      0|        }
  135|    420|    } else {
  136|    420|        uprv_strcpy(buffer, gDefault);
  ------------------
  |  |   36|    420|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|    420|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  137|    420|        nsResolved = false;
  138|    420|    }
  139|       |
  140|    420|    if (!nsResolved) { // Resolve the numbering system ( default, native, traditional or finance ) into a "real" numbering system
  ------------------
  |  Branch (140:9): [True: 420, False: 0]
  ------------------
  141|    420|        UErrorCode localStatus = U_ZERO_ERROR;
  142|    420|        LocalUResourceBundlePointer resource(ures_open(nullptr, inLocale.getName(), &localStatus));
  ------------------
  |  | 1691|    420|#define ures_open U_ICU_ENTRY_POINT_RENAME(ures_open)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  143|    420|        LocalUResourceBundlePointer numberElementsRes(ures_getByKey(resource.getAlias(), gNumberElements, nullptr, &localStatus));
  ------------------
  |  | 1661|    420|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  144|       |        // Don't stomp on the catastrophic failure of OOM.
  145|    420|        if (localStatus == U_MEMORY_ALLOCATION_ERROR) {
  ------------------
  |  Branch (145:13): [True: 0, False: 420]
  ------------------
  146|      0|            status = U_MEMORY_ALLOCATION_ERROR;
  147|      0|            return nullptr;
  148|      0|        }
  149|    840|        while (!nsResolved) {
  ------------------
  |  Branch (149:16): [True: 420, False: 420]
  ------------------
  150|    420|            localStatus = U_ZERO_ERROR;
  151|    420|            count = 0;
  152|    420|            const char16_t *nsName = ures_getStringByKeyWithFallback(numberElementsRes.getAlias(), buffer, &count, &localStatus);
  ------------------
  |  | 1678|    420|#define ures_getStringByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getStringByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  153|       |            // Don't stomp on the catastrophic failure of OOM.
  154|    420|            if (localStatus == U_MEMORY_ALLOCATION_ERROR) {
  ------------------
  |  Branch (154:17): [True: 0, False: 420]
  ------------------
  155|      0|                status = U_MEMORY_ALLOCATION_ERROR;
  156|      0|                return nullptr;
  157|      0|            }
  158|    420|            if ( count > 0 && count < ULOC_KEYWORDS_CAPACITY ) { // numbering system found
  ------------------
  |  |  277|    420|#define ULOC_KEYWORDS_CAPACITY 96
  ------------------
  |  Branch (158:18): [True: 420, False: 0]
  |  Branch (158:31): [True: 420, False: 0]
  ------------------
  159|    420|                u_UCharsToChars(nsName, buffer, count);
  ------------------
  |  |  211|    420|#define u_UCharsToChars U_ICU_ENTRY_POINT_RENAME(u_UCharsToChars)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  160|    420|                buffer[count] = '\0'; // Make sure it is null terminated.
  161|    420|                nsResolved = true;
  162|    420|            } 
  163|       |
  164|    420|            if (!nsResolved) { // Fallback behavior per TR35 - traditional falls back to native, finance and native fall back to default
  ------------------
  |  Branch (164:17): [True: 0, False: 420]
  ------------------
  165|      0|                if (!uprv_strcmp(buffer,gNative) || !uprv_strcmp(buffer,gFinance)) { 
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
                              if (!uprv_strcmp(buffer,gNative) || !uprv_strcmp(buffer,gFinance)) { 
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (165:21): [True: 0, False: 0]
  |  Branch (165:53): [True: 0, False: 0]
  ------------------
  166|      0|                    uprv_strcpy(buffer,gDefault);
  ------------------
  |  |   36|      0|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  167|      0|                } else if (!uprv_strcmp(buffer,gTraditional)) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (167:28): [True: 0, False: 0]
  ------------------
  168|      0|                    uprv_strcpy(buffer,gNative);
  ------------------
  |  |   36|      0|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  169|      0|                } else { // If we get here we couldn't find even the default numbering system
  170|      0|                    usingFallback = true;
  171|      0|                    nsResolved = true;
  172|      0|                }
  173|      0|            }
  174|    420|        }
  175|    420|    }
  176|       |
  177|    420|    if (usingFallback) {
  ------------------
  |  Branch (177:9): [True: 0, False: 420]
  ------------------
  178|      0|        status = U_USING_FALLBACK_WARNING;
  179|      0|        NumberingSystem *ns = new NumberingSystem();
  180|      0|        if (ns == nullptr) {
  ------------------
  |  Branch (180:13): [True: 0, False: 0]
  ------------------
  181|      0|            status = U_MEMORY_ALLOCATION_ERROR;
  182|      0|        }
  183|      0|        return ns;
  184|    420|    } else {
  185|    420|        return NumberingSystem::createInstanceByName(buffer, status);
  186|    420|    }
  187|    420| }
_ZN6icu_7815NumberingSystem20createInstanceByNameEPKcR10UErrorCode:
  195|    420|NumberingSystem::createInstanceByName(const char *name, UErrorCode& status) {
  196|    420|    int32_t radix = 10;
  197|    420|    int32_t algorithmic = 0;
  198|       |
  199|    420|    LocalUResourceBundlePointer numberingSystemsInfo(ures_openDirect(nullptr, gNumberingSystems, &status));
  ------------------
  |  | 1693|    420|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  200|    420|    LocalUResourceBundlePointer nsCurrent(ures_getByKey(numberingSystemsInfo.getAlias(), gNumberingSystems, nullptr, &status));
  ------------------
  |  | 1661|    420|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  201|    420|    LocalUResourceBundlePointer nsTop(ures_getByKey(nsCurrent.getAlias(), name, nullptr, &status));
  ------------------
  |  | 1661|    420|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  202|       |
  203|    420|    UnicodeString nsd = ures_getUnicodeStringByKey(nsTop.getAlias(), gDesc, &status);
  204|       |
  205|    420|    ures_getByKey(nsTop.getAlias(), gRadix, nsCurrent.getAlias(), &status);
  ------------------
  |  | 1661|    420|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  206|    420|    radix = ures_getInt(nsCurrent.getAlias(), &status);
  ------------------
  |  | 1664|    420|#define ures_getInt U_ICU_ENTRY_POINT_RENAME(ures_getInt)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  207|       |
  208|    420|    ures_getByKey(nsTop.getAlias(), gAlgorithmic, nsCurrent.getAlias(), &status);
  ------------------
  |  | 1661|    420|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|    420|    algorithmic = ures_getInt(nsCurrent.getAlias(), &status);
  ------------------
  |  | 1664|    420|#define ures_getInt U_ICU_ENTRY_POINT_RENAME(ures_getInt)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|       |
  211|    420|    UBool isAlgorithmic = ( algorithmic == 1 );
  212|       |
  213|    420|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (213:9): [True: 0, False: 420]
  ------------------
  214|       |        // Don't stomp on the catastrophic failure of OOM.
  215|      0|        if (status != U_MEMORY_ALLOCATION_ERROR) {
  ------------------
  |  Branch (215:13): [True: 0, False: 0]
  ------------------
  216|      0|            status = U_UNSUPPORTED_ERROR;
  217|      0|        }
  218|      0|        return nullptr;
  219|      0|    }
  220|       |
  221|    420|    LocalPointer<NumberingSystem> ns(NumberingSystem::createInstance(radix, isAlgorithmic, nsd, status), status);
  222|    420|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (222:9): [True: 0, False: 420]
  ------------------
  223|      0|        return nullptr;
  224|      0|    }
  225|    420|    ns->setName(name);
  226|    420|    return ns.orphan();
  227|    420|}
_ZN6icu_7815NumberingSystemD2Ev:
  233|    420|NumberingSystem::~NumberingSystem() {
  234|    420|}
_ZNK6icu_7815NumberingSystem7getNameEv:
  244|    420|const char * NumberingSystem::getName() const {
  245|    420|    return name;
  246|    420|}
_ZN6icu_7815NumberingSystem8setRadixEi:
  248|    420|void NumberingSystem::setRadix(int32_t r) {
  249|    420|    radix = r;
  250|    420|}
_ZN6icu_7815NumberingSystem14setAlgorithmicEa:
  252|    420|void NumberingSystem::setAlgorithmic(UBool c) {
  253|    420|    algorithmic = c;
  254|    420|}
_ZN6icu_7815NumberingSystem7setDescERKNS_13UnicodeStringE:
  256|    420|void NumberingSystem::setDesc(const UnicodeString &d) {
  257|    420|    desc.setTo(d);
  258|    420|}
_ZN6icu_7815NumberingSystem7setNameEPKc:
  259|    840|void NumberingSystem::setName(const char *n) {
  260|    840|    if ( n == nullptr ) {
  ------------------
  |  Branch (260:10): [True: 420, False: 420]
  ------------------
  261|    420|        name[0] = static_cast<char>(0);
  262|    420|    } else {
  263|    420|        uprv_strncpy(name,n,kInternalNumSysNameCapacity);
  ------------------
  |  |   43|    420|#define uprv_strncpy(dst, src, size) U_STANDARD_CPP_NAMESPACE strncpy(dst, src, size)
  |  |  ------------------
  |  |  |  |  393|    420|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  264|    420|        name[kInternalNumSysNameCapacity] = '\0'; // Make sure it is null terminated.
  265|    420|    }
  266|    840|}

_ZN6icu_7813OlsonTimeZoneC2EPK15UResourceBundleS3_RKNS_13UnicodeStringER10UErrorCode:
  124|      1|  BasicTimeZone(tzid), finalZone(nullptr)
  125|      1|{
  126|      1|    clearTransitionRules();
  127|      1|    U_DEBUG_TZ_MSG(("OlsonTimeZone(%s)\n", ures_getKey((UResourceBundle*)res)));
  128|      1|    if ((top == nullptr || res == nullptr) && U_SUCCESS(ec)) {
  ------------------
  |  Branch (128:10): [True: 0, False: 1]
  |  Branch (128:28): [True: 0, False: 1]
  |  Branch (128:47): [True: 0, False: 0]
  ------------------
  129|      0|        ec = U_ILLEGAL_ARGUMENT_ERROR;
  130|      0|    }
  131|      1|    if (U_SUCCESS(ec)) {
  ------------------
  |  Branch (131:9): [True: 1, False: 0]
  ------------------
  132|       |        // TODO -- clean up -- Doesn't work if res points to an alias
  133|       |        //        // TODO remove nonconst casts below when ures_* API is fixed
  134|       |        //        setID(ures_getKey((UResourceBundle*) res)); // cast away const
  135|       |
  136|      1|        int32_t len;
  137|      1|        StackUResourceBundle r;
  138|       |
  139|       |        // Pre-32bit second transitions
  140|      1|        ures_getByKey(res, kTRANSPRE32, r.getAlias(), &ec);
  ------------------
  |  | 1661|      1|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      ures_getByKey(res, kTRANSPRE32, r.getAlias(), &ec);
  ------------------
  |  |   71|      1|#define kTRANSPRE32     "transPre32"
  ------------------
  141|      1|        transitionTimesPre32 = ures_getIntVector(r.getAlias(), &len, &ec);
  ------------------
  |  | 1665|      1|#define ures_getIntVector U_ICU_ENTRY_POINT_RENAME(ures_getIntVector)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  142|      1|        transitionCountPre32 = static_cast<int16_t>(len >> 1);
  143|      1|        if (ec == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (143:13): [True: 1, False: 0]
  ------------------
  144|       |            // No pre-32bit transitions
  145|      1|            transitionTimesPre32 = nullptr;
  146|      1|            transitionCountPre32 = 0;
  147|      1|            ec = U_ZERO_ERROR;
  148|      1|        } else if (U_SUCCESS(ec) && (len < 0 || len > 0x7FFF || (len & 1) != 0) /* len must be even */) {
  ------------------
  |  Branch (148:20): [True: 0, False: 0]
  |  Branch (148:38): [True: 0, False: 0]
  |  Branch (148:49): [True: 0, False: 0]
  |  Branch (148:65): [True: 0, False: 0]
  ------------------
  149|      0|            ec = U_INVALID_FORMAT_ERROR;
  150|      0|        }
  151|       |
  152|       |        // 32bit second transitions
  153|      1|        ures_getByKey(res, kTRANS, r.getAlias(), &ec);
  ------------------
  |  | 1661|      1|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      ures_getByKey(res, kTRANS, r.getAlias(), &ec);
  ------------------
  |  |   70|      1|#define kTRANS          "trans"
  ------------------
  154|      1|        transitionTimes32 = ures_getIntVector(r.getAlias(), &len, &ec);
  ------------------
  |  | 1665|      1|#define ures_getIntVector U_ICU_ENTRY_POINT_RENAME(ures_getIntVector)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  155|      1|        transitionCount32 = static_cast<int16_t>(len);
  156|      1|        if (ec == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (156:13): [True: 1, False: 0]
  ------------------
  157|       |            // No 32bit transitions
  158|      1|            transitionTimes32 = nullptr;
  159|      1|            transitionCount32 = 0;
  160|      1|            ec = U_ZERO_ERROR;
  161|      1|        } else if (U_SUCCESS(ec) && (len < 0 || len > 0x7FFF)) {
  ------------------
  |  Branch (161:20): [True: 0, False: 0]
  |  Branch (161:38): [True: 0, False: 0]
  |  Branch (161:49): [True: 0, False: 0]
  ------------------
  162|      0|            ec = U_INVALID_FORMAT_ERROR;
  163|      0|        }
  164|       |
  165|       |        // Post-32bit second transitions
  166|      1|        ures_getByKey(res, kTRANSPOST32, r.getAlias(), &ec);
  ------------------
  |  | 1661|      1|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      ures_getByKey(res, kTRANSPOST32, r.getAlias(), &ec);
  ------------------
  |  |   72|      1|#define kTRANSPOST32    "transPost32"
  ------------------
  167|      1|        transitionTimesPost32 = ures_getIntVector(r.getAlias(), &len, &ec);
  ------------------
  |  | 1665|      1|#define ures_getIntVector U_ICU_ENTRY_POINT_RENAME(ures_getIntVector)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|      1|        transitionCountPost32 = static_cast<int16_t>(len >> 1);
  169|      1|        if (ec == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (169:13): [True: 1, False: 0]
  ------------------
  170|       |            // No pre-32bit transitions
  171|      1|            transitionTimesPost32 = nullptr;
  172|      1|            transitionCountPost32 = 0;
  173|      1|            ec = U_ZERO_ERROR;
  174|      1|        } else if (U_SUCCESS(ec) && (len < 0 || len > 0x7FFF || (len & 1) != 0) /* len must be even */) {
  ------------------
  |  Branch (174:20): [True: 0, False: 0]
  |  Branch (174:38): [True: 0, False: 0]
  |  Branch (174:49): [True: 0, False: 0]
  |  Branch (174:65): [True: 0, False: 0]
  ------------------
  175|      0|            ec = U_INVALID_FORMAT_ERROR;
  176|      0|        }
  177|       |
  178|       |        // Type offsets list must be of even size, with size >= 2
  179|      1|        ures_getByKey(res, kTYPEOFFSETS, r.getAlias(), &ec);
  ------------------
  |  | 1661|      1|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      ures_getByKey(res, kTYPEOFFSETS, r.getAlias(), &ec);
  ------------------
  |  |   73|      1|#define kTYPEOFFSETS    "typeOffsets"
  ------------------
  180|      1|        typeOffsets = ures_getIntVector(r.getAlias(), &len, &ec);
  ------------------
  |  | 1665|      1|#define ures_getIntVector U_ICU_ENTRY_POINT_RENAME(ures_getIntVector)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  181|      1|        if (U_SUCCESS(ec) && (len < 2 || len > 0x7FFE || (len & 1) != 0)) {
  ------------------
  |  Branch (181:13): [True: 1, False: 0]
  |  Branch (181:31): [True: 0, False: 1]
  |  Branch (181:42): [True: 0, False: 1]
  |  Branch (181:58): [True: 0, False: 1]
  ------------------
  182|      0|            ec = U_INVALID_FORMAT_ERROR;
  183|      0|        }
  184|      1|        typeCount = static_cast<int16_t>(len) >> 1;
  185|       |
  186|       |        // Type map data must be of the same size as the transition count
  187|      1|        typeMapData =  nullptr;
  188|      1|        if (transitionCount() > 0) {
  ------------------
  |  Branch (188:13): [True: 0, False: 1]
  ------------------
  189|      0|            ures_getByKey(res, kTYPEMAP, r.getAlias(), &ec);
  ------------------
  |  | 1661|      0|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          ures_getByKey(res, kTYPEMAP, r.getAlias(), &ec);
  ------------------
  |  |   74|      0|#define kTYPEMAP        "typeMap"
  ------------------
  190|      0|            typeMapData = ures_getBinary(r.getAlias(), &len, &ec);
  ------------------
  |  | 1659|      0|#define ures_getBinary U_ICU_ENTRY_POINT_RENAME(ures_getBinary)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|      0|            if (ec == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (191:17): [True: 0, False: 0]
  ------------------
  192|       |                // no type mapping data
  193|      0|                ec = U_INVALID_FORMAT_ERROR;
  194|      0|            } else if (U_SUCCESS(ec) && len != transitionCount()) {
  ------------------
  |  Branch (194:24): [True: 0, False: 0]
  |  Branch (194:41): [True: 0, False: 0]
  ------------------
  195|      0|                ec = U_INVALID_FORMAT_ERROR;
  196|      0|            }
  197|      0|        }
  198|       |
  199|       |        // Process final rule and data, if any
  200|      1|        if (U_SUCCESS(ec)) {
  ------------------
  |  Branch (200:13): [True: 1, False: 0]
  ------------------
  201|      1|            const char16_t *ruleIdUStr = ures_getStringByKey(res, kFINALRULE, &len, &ec);
  ------------------
  |  | 1677|      1|#define ures_getStringByKey U_ICU_ENTRY_POINT_RENAME(ures_getStringByKey)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          const char16_t *ruleIdUStr = ures_getStringByKey(res, kFINALRULE, &len, &ec);
  ------------------
  |  |   76|      1|#define kFINALRULE      "finalRule"
  ------------------
  202|      1|            ures_getByKey(res, kFINALRAW, r.getAlias(), &ec);
  ------------------
  |  | 1661|      1|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          ures_getByKey(res, kFINALRAW, r.getAlias(), &ec);
  ------------------
  |  |   77|      1|#define kFINALRAW       "finalRaw"
  ------------------
  203|      1|            int32_t ruleRaw = ures_getInt(r.getAlias(), &ec);
  ------------------
  |  | 1664|      1|#define ures_getInt U_ICU_ENTRY_POINT_RENAME(ures_getInt)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  204|      1|            ures_getByKey(res, kFINALYEAR, r.getAlias(), &ec);
  ------------------
  |  | 1661|      1|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          ures_getByKey(res, kFINALYEAR, r.getAlias(), &ec);
  ------------------
  |  |   78|      1|#define kFINALYEAR      "finalYear"
  ------------------
  205|      1|            int32_t ruleYear = ures_getInt(r.getAlias(), &ec);
  ------------------
  |  | 1664|      1|#define ures_getInt U_ICU_ENTRY_POINT_RENAME(ures_getInt)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  206|      1|            if (U_SUCCESS(ec)) {
  ------------------
  |  Branch (206:17): [True: 0, False: 1]
  ------------------
  207|      0|                UnicodeString ruleID(true, ruleIdUStr, len);
  208|      0|                UResourceBundle *rule = TimeZone::loadRule(top, ruleID, nullptr, ec);
  209|      0|                const int32_t *ruleData = ures_getIntVector(rule, &len, &ec); 
  ------------------
  |  | 1665|      0|#define ures_getIntVector U_ICU_ENTRY_POINT_RENAME(ures_getIntVector)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|      0|                if (U_SUCCESS(ec) && len == 11) {
  ------------------
  |  Branch (210:21): [True: 0, False: 0]
  |  Branch (210:38): [True: 0, False: 0]
  ------------------
  211|      0|                    UnicodeString emptyStr;
  212|      0|                    finalZone = new SimpleTimeZone(
  213|      0|                        ruleRaw * U_MILLIS_PER_SECOND,
  ------------------
  |  |  221|      0|#define U_MILLIS_PER_SECOND        (1000)
  ------------------
  214|      0|                        emptyStr,
  215|      0|                        static_cast<int8_t>(ruleData[0]), static_cast<int8_t>(ruleData[1]), static_cast<int8_t>(ruleData[2]),
  216|      0|                        ruleData[3] * U_MILLIS_PER_SECOND,
  ------------------
  |  |  221|      0|#define U_MILLIS_PER_SECOND        (1000)
  ------------------
  217|      0|                        static_cast<SimpleTimeZone::TimeMode>(ruleData[4]),
  218|      0|                        static_cast<int8_t>(ruleData[5]), static_cast<int8_t>(ruleData[6]), static_cast<int8_t>(ruleData[7]),
  219|      0|                        ruleData[8] * U_MILLIS_PER_SECOND,
  ------------------
  |  |  221|      0|#define U_MILLIS_PER_SECOND        (1000)
  ------------------
  220|      0|                        static_cast<SimpleTimeZone::TimeMode>(ruleData[9]),
  221|      0|                        ruleData[10] * U_MILLIS_PER_SECOND, ec);
  ------------------
  |  |  221|      0|#define U_MILLIS_PER_SECOND        (1000)
  ------------------
  222|      0|                    if (finalZone == nullptr) {
  ------------------
  |  Branch (222:25): [True: 0, False: 0]
  ------------------
  223|      0|                        ec = U_MEMORY_ALLOCATION_ERROR;
  224|      0|                    } else {
  225|      0|                        finalStartYear = ruleYear;
  226|       |
  227|       |                        // Note: Setting finalStartYear to the finalZone is problematic.  When a date is around
  228|       |                        // year boundary, SimpleTimeZone may return false result when DST is observed at the 
  229|       |                        // beginning of year.  We could apply safe margin (day or two), but when one of recurrent
  230|       |                        // rules falls around year boundary, it could return false result.  Without setting the
  231|       |                        // start year, finalZone works fine around the year boundary of the start year.
  232|       |
  233|       |                        // finalZone->setStartYear(finalStartYear);
  234|       |
  235|       |
  236|       |                        // Compute the millis for Jan 1, 0:00 GMT of the finalYear
  237|       |
  238|       |                        // Note: finalStartMillis is used for detecting either if
  239|       |                        // historic transition data or finalZone to be used.  In an
  240|       |                        // extreme edge case - for example, two transitions fall into
  241|       |                        // small windows of time around the year boundary, this may
  242|       |                        // result incorrect offset computation.  But I think it will
  243|       |                        // never happen practically.  Yoshito - Feb 20, 2010
  244|      0|                        finalStartMillis = Grego::fieldsToDay(finalStartYear, 0, 1) * U_MILLIS_PER_DAY;
  ------------------
  |  |  227|      0|#define U_MILLIS_PER_DAY       (86400000)
  ------------------
  245|      0|                    }
  246|      0|                } else {
  247|      0|                    ec = U_INVALID_FORMAT_ERROR;
  248|      0|                }
  249|      0|                ures_close(rule);
  ------------------
  |  | 1652|      0|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|      1|            } else if (ec == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (250:24): [True: 1, False: 0]
  ------------------
  251|       |                // No final zone
  252|      1|                ec = U_ZERO_ERROR;
  253|      1|            }
  254|      1|        }
  255|       |
  256|       |        // initialize canonical ID
  257|      1|        canonicalID = ZoneMeta::getCanonicalCLDRID(tzid, ec);
  258|      1|    }
  259|       |
  260|      1|    if (U_FAILURE(ec)) {
  ------------------
  |  Branch (260:9): [True: 0, False: 1]
  ------------------
  261|      0|        constructEmpty();
  262|      0|    }
  263|      1|}
_ZN6icu_7813OlsonTimeZoneC2ERKS0_:
  269|    287|    BasicTimeZone(other), finalZone(nullptr) {
  270|    287|    *this = other;
  271|    287|}
_ZN6icu_7813OlsonTimeZoneaSERKS0_:
  276|    287|OlsonTimeZone& OlsonTimeZone::operator=(const OlsonTimeZone& other) {
  277|    287|    if (this == &other) { return *this; }  // self-assignment: no-op
  ------------------
  |  Branch (277:9): [True: 0, False: 287]
  ------------------
  278|    287|    canonicalID = other.canonicalID;
  279|       |
  280|    287|    transitionTimesPre32 = other.transitionTimesPre32;
  281|    287|    transitionTimes32 = other.transitionTimes32;
  282|    287|    transitionTimesPost32 = other.transitionTimesPost32;
  283|       |
  284|    287|    transitionCountPre32 = other.transitionCountPre32;
  285|    287|    transitionCount32 = other.transitionCount32;
  286|    287|    transitionCountPost32 = other.transitionCountPost32;
  287|       |
  288|    287|    typeCount = other.typeCount;
  289|    287|    typeOffsets = other.typeOffsets;
  290|    287|    typeMapData = other.typeMapData;
  291|       |
  292|    287|    delete finalZone;
  293|    287|    finalZone = other.finalZone != nullptr ? other.finalZone->clone() : nullptr;
  ------------------
  |  Branch (293:17): [True: 0, False: 287]
  ------------------
  294|       |
  295|    287|    finalStartYear = other.finalStartYear;
  296|    287|    finalStartMillis = other.finalStartMillis;
  297|       |
  298|    287|    clearTransitionRules();
  299|       |
  300|    287|    return *this;
  301|    287|}
_ZN6icu_7813OlsonTimeZoneD2Ev:
  306|    287|OlsonTimeZone::~OlsonTimeZone() {
  307|    287|    deleteTransitionRules();
  308|    287|    delete finalZone;
  309|    287|}
_ZNK6icu_7813OlsonTimeZone5cloneEv:
  324|    287|OlsonTimeZone* OlsonTimeZone::clone() const {
  325|    287|    return new OlsonTimeZone(*this);
  326|    287|}
_ZNK6icu_7813OlsonTimeZone9getOffsetEdaRiS1_R10UErrorCode:
  392|      1|                              int32_t& dstoff, UErrorCode& ec) const {
  393|      1|    if (U_FAILURE(ec)) {
  ------------------
  |  Branch (393:9): [True: 0, False: 1]
  ------------------
  394|      0|        return;
  395|      0|    }
  396|      1|    if (finalZone != nullptr && date >= finalStartMillis) {
  ------------------
  |  Branch (396:9): [True: 0, False: 1]
  |  Branch (396:33): [True: 0, False: 0]
  ------------------
  397|      0|        finalZone->getOffset(date, local, rawoff, dstoff, ec);
  398|      1|    } else {
  399|      1|        getHistoricalOffset(date, local, kFormer, kLatter, rawoff, dstoff);
  400|      1|    }
  401|      1|}
_ZNK6icu_7813OlsonTimeZone12getRawOffsetEv:
  430|      1|int32_t OlsonTimeZone::getRawOffset() const {
  431|      1|    UErrorCode ec = U_ZERO_ERROR;
  432|      1|    int32_t raw, dst;
  433|      1|    getOffset(uprv_getUTCtime(), false, raw, dst, ec);
  ------------------
  |  | 1512|      1|#define uprv_getUTCtime U_ICU_ENTRY_POINT_RENAME(uprv_getUTCtime)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  434|      1|    return raw;
  435|      1|}
_ZNK6icu_7813OlsonTimeZone19getHistoricalOffsetEdaiiRiS1_:
  476|      1|                                   int32_t& rawoff, int32_t& dstoff) const {
  477|      1|    U_DEBUG_TZ_MSG(("getHistoricalOffset(%.1f, %s, %d, %d, raw, dst)\n",
  478|      1|        date, local?"T":"F", NonExistingTimeOpt, DuplicatedTimeOpt));
  479|       |#if defined U_DEBUG_TZ
  480|       |        printTime(date*1000.0);
  481|       |#endif
  482|      1|    int16_t transCount = transitionCount();
  483|       |
  484|      1|    if (transCount > 0) {
  ------------------
  |  Branch (484:9): [True: 0, False: 1]
  ------------------
  485|      0|        double sec = uprv_floor(date / U_MILLIS_PER_SECOND);
  ------------------
  |  | 1499|      0|#define uprv_floor U_ICU_ENTRY_POINT_RENAME(uprv_floor)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      double sec = uprv_floor(date / U_MILLIS_PER_SECOND);
  ------------------
  |  |  221|      0|#define U_MILLIS_PER_SECOND        (1000)
  ------------------
  486|      0|        if (!local && sec < transitionTimeInSeconds(0)) {
  ------------------
  |  Branch (486:13): [True: 0, False: 0]
  |  Branch (486:23): [True: 0, False: 0]
  ------------------
  487|       |            // Before the first transition time
  488|      0|            rawoff = initialRawOffset() * U_MILLIS_PER_SECOND;
  ------------------
  |  |  221|      0|#define U_MILLIS_PER_SECOND        (1000)
  ------------------
  489|      0|            dstoff = initialDstOffset() * U_MILLIS_PER_SECOND;
  ------------------
  |  |  221|      0|#define U_MILLIS_PER_SECOND        (1000)
  ------------------
  490|      0|        } else {
  491|       |            // Linear search from the end is the fastest approach, since
  492|       |            // most lookups will happen at/near the end.
  493|      0|            int16_t transIdx;
  494|      0|            for (transIdx = transCount - 1; transIdx >= 0; transIdx--) {
  ------------------
  |  Branch (494:45): [True: 0, False: 0]
  ------------------
  495|      0|                int64_t transition = transitionTimeInSeconds(transIdx);
  496|       |
  497|      0|                if (local && (sec >= (transition - MAX_OFFSET_SECONDS))) {
  ------------------
  |  |  471|      0|#define MAX_OFFSET_SECONDS 86400
  ------------------
  |  Branch (497:21): [True: 0, False: 0]
  |  Branch (497:30): [True: 0, False: 0]
  ------------------
  498|      0|                    int32_t offsetBefore = zoneOffsetAt(transIdx - 1);
  499|      0|                    UBool dstBefore = dstOffsetAt(transIdx - 1) != 0;
  500|       |
  501|      0|                    int32_t offsetAfter = zoneOffsetAt(transIdx);
  502|      0|                    UBool dstAfter = dstOffsetAt(transIdx) != 0;
  503|       |
  504|      0|                    UBool dstToStd = dstBefore && !dstAfter;
  ------------------
  |  Branch (504:38): [True: 0, False: 0]
  |  Branch (504:51): [True: 0, False: 0]
  ------------------
  505|      0|                    UBool stdToDst = !dstBefore && dstAfter;
  ------------------
  |  Branch (505:38): [True: 0, False: 0]
  |  Branch (505:52): [True: 0, False: 0]
  ------------------
  506|       |                    
  507|      0|                    if (offsetAfter - offsetBefore >= 0) {
  ------------------
  |  Branch (507:25): [True: 0, False: 0]
  ------------------
  508|       |                        // Positive transition, which makes a non-existing local time range
  509|      0|                        if (((NonExistingTimeOpt & kStdDstMask) == kStandard && dstToStd)
  ------------------
  |  Branch (509:30): [True: 0, False: 0]
  |  Branch (509:81): [True: 0, False: 0]
  ------------------
  510|      0|                                || ((NonExistingTimeOpt & kStdDstMask) == kDaylight && stdToDst)) {
  ------------------
  |  Branch (510:37): [True: 0, False: 0]
  |  Branch (510:88): [True: 0, False: 0]
  ------------------
  511|      0|                            transition += offsetBefore;
  512|      0|                        } else if (((NonExistingTimeOpt & kStdDstMask) == kStandard && stdToDst)
  ------------------
  |  Branch (512:37): [True: 0, False: 0]
  |  Branch (512:88): [True: 0, False: 0]
  ------------------
  513|      0|                                || ((NonExistingTimeOpt & kStdDstMask) == kDaylight && dstToStd)) {
  ------------------
  |  Branch (513:37): [True: 0, False: 0]
  |  Branch (513:88): [True: 0, False: 0]
  ------------------
  514|      0|                            transition += offsetAfter;
  515|      0|                        } else if ((NonExistingTimeOpt & kFormerLatterMask) == kLatter) {
  ------------------
  |  Branch (515:36): [True: 0, False: 0]
  ------------------
  516|      0|                            transition += offsetBefore;
  517|      0|                        } else {
  518|       |                            // Interprets the time with rule before the transition,
  519|       |                            // default for non-existing time range
  520|      0|                            transition += offsetAfter;
  521|      0|                        }
  522|      0|                    } else {
  523|       |                        // Negative transition, which makes a duplicated local time range
  524|      0|                        if (((DuplicatedTimeOpt & kStdDstMask) == kStandard && dstToStd)
  ------------------
  |  Branch (524:30): [True: 0, False: 0]
  |  Branch (524:80): [True: 0, False: 0]
  ------------------
  525|      0|                                || ((DuplicatedTimeOpt & kStdDstMask) == kDaylight && stdToDst)) {
  ------------------
  |  Branch (525:37): [True: 0, False: 0]
  |  Branch (525:87): [True: 0, False: 0]
  ------------------
  526|      0|                            transition += offsetAfter;
  527|      0|                        } else if (((DuplicatedTimeOpt & kStdDstMask) == kStandard && stdToDst)
  ------------------
  |  Branch (527:37): [True: 0, False: 0]
  |  Branch (527:87): [True: 0, False: 0]
  ------------------
  528|      0|                                || ((DuplicatedTimeOpt & kStdDstMask) == kDaylight && dstToStd)) {
  ------------------
  |  Branch (528:37): [True: 0, False: 0]
  |  Branch (528:87): [True: 0, False: 0]
  ------------------
  529|      0|                            transition += offsetBefore;
  530|      0|                        } else if ((DuplicatedTimeOpt & kFormerLatterMask) == kFormer) {
  ------------------
  |  Branch (530:36): [True: 0, False: 0]
  ------------------
  531|      0|                            transition += offsetBefore;
  532|      0|                        } else {
  533|       |                            // Interprets the time with rule after the transition,
  534|       |                            // default for duplicated local time range
  535|      0|                            transition += offsetAfter;
  536|      0|                        }
  537|      0|                    }
  538|      0|                }
  539|      0|                if (sec >= transition) {
  ------------------
  |  Branch (539:21): [True: 0, False: 0]
  ------------------
  540|      0|                    break;
  541|      0|                }
  542|      0|            }
  543|       |            // transIdx could be -1 when local=true
  544|      0|            rawoff = rawOffsetAt(transIdx) * U_MILLIS_PER_SECOND;
  ------------------
  |  |  221|      0|#define U_MILLIS_PER_SECOND        (1000)
  ------------------
  545|      0|            dstoff = dstOffsetAt(transIdx) * U_MILLIS_PER_SECOND;
  ------------------
  |  |  221|      0|#define U_MILLIS_PER_SECOND        (1000)
  ------------------
  546|      0|        }
  547|      1|    } else {
  548|       |        // No transitions, single pair of offsets only
  549|      1|        rawoff = initialRawOffset() * U_MILLIS_PER_SECOND;
  ------------------
  |  |  221|      1|#define U_MILLIS_PER_SECOND        (1000)
  ------------------
  550|      1|        dstoff = initialDstOffset() * U_MILLIS_PER_SECOND;
  ------------------
  |  |  221|      1|#define U_MILLIS_PER_SECOND        (1000)
  ------------------
  551|      1|    }
  552|      1|    U_DEBUG_TZ_MSG(("getHistoricalOffset(%.1f, %s, %d, %d, raw, dst) - raw=%d, dst=%d\n",
  553|      1|        date, local?"T":"F", NonExistingTimeOpt, DuplicatedTimeOpt, rawoff, dstoff));
  554|      1|}
_ZN6icu_7813OlsonTimeZone20clearTransitionRulesEv:
  656|    575|OlsonTimeZone::clearTransitionRules() {
  657|    575|    initialRule = nullptr;
  658|    575|    firstTZTransition = nullptr;
  659|    575|    firstFinalTZTransition = nullptr;
  660|    575|    historicRules = nullptr;
  661|    575|    historicRuleCount = 0;
  662|    575|    finalZoneWithStartYear = nullptr;
  663|    575|    firstTZTransitionIdx = 0;
  664|    575|    transitionRulesInitOnce.reset();
  665|    575|}
_ZN6icu_7813OlsonTimeZone21deleteTransitionRulesEv:
  668|    287|OlsonTimeZone::deleteTransitionRules() {
  669|    287|    delete initialRule;
  670|    287|    delete firstTZTransition;
  671|    287|    delete firstFinalTZTransition;
  672|    287|    delete finalZoneWithStartYear;
  673|    287|    if (historicRules != nullptr) {
  ------------------
  |  Branch (673:9): [True: 0, False: 287]
  ------------------
  674|      0|        for (int i = 0; i < historicRuleCount; i++) {
  ------------------
  |  Branch (674:25): [True: 0, False: 0]
  ------------------
  675|      0|            if (historicRules[i] != nullptr) {
  ------------------
  |  Branch (675:17): [True: 0, False: 0]
  ------------------
  676|      0|                delete historicRules[i];
  677|      0|            }
  678|      0|        }
  679|      0|        uprv_free(historicRules);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  680|      0|    }
  681|    287|    clearTransitionRules();
  682|    287|}

_ZNK6icu_7813OlsonTimeZone15transitionCountEv:
  407|      2|OlsonTimeZone::transitionCount() const {
  408|      2|    return transitionCountPre32 + transitionCount32 + transitionCountPost32;
  409|      2|}
_ZNK6icu_7813OlsonTimeZone16initialRawOffsetEv:
  435|      1|OlsonTimeZone::initialRawOffset() const {
  436|      1|    return typeOffsets[0];
  437|      1|}
_ZNK6icu_7813OlsonTimeZone16initialDstOffsetEv:
  440|      1|OlsonTimeZone::initialDstOffset() const {
  441|      1|    return typeOffsets[1];
  442|      1|}
_ZNK6icu_7813OlsonTimeZone14getCanonicalIDEv:
  445|    287|OlsonTimeZone::getCanonicalID() const {
  446|    287|    return canonicalID;
  447|    287|}

_ZN6icu_788TimeZoneC2ERKNS_13UnicodeStringE:
  352|      1|    :   UObject(), fID(id)
  353|      1|{
  354|      1|}
_ZN6icu_788TimeZoneD2Ev:
  359|    287|{
  360|    287|}
_ZN6icu_788TimeZoneC2ERKS0_:
  365|    287|    :   UObject(source), fID(source.fID)
  366|    287|{
  367|    287|}
_ZN6icu_788TimeZone18detectHostTimeZoneEv:
  459|      1|{
  460|       |    // We access system timezone data through uprv_tzset(), uprv_tzname(), and others,
  461|       |    // which have platform specific implementations in putil.cpp
  462|      1|    int32_t rawOffset = 0;
  463|      1|    const char *hostID;
  464|      1|    UBool hostDetectionSucceeded = true;
  465|       |
  466|       |    // First, try to create a system timezone, based
  467|       |    // on the string ID in tzname[0].
  468|       |
  469|      1|    uprv_tzset(); // Initialize tz... system data
  ------------------
  |  | 1551|      1|#define uprv_tzset U_ICU_ENTRY_POINT_RENAME(uprv_tzset)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|       |
  471|      1|    uprv_tzname_clear_cache();
  ------------------
  |  | 1550|      1|#define uprv_tzname_clear_cache U_ICU_ENTRY_POINT_RENAME(uprv_tzname_clear_cache)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  472|       |
  473|       |    // Get the timezone ID from the host.  This function should do
  474|       |    // any required host-specific remapping; e.g., on Windows this
  475|       |    // function maps the Windows Time Zone name to an ICU timezone ID.
  476|      1|    hostID = uprv_tzname(0);
  ------------------
  |  | 1549|      1|#define uprv_tzname U_ICU_ENTRY_POINT_RENAME(uprv_tzname)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  477|       |
  478|       |    // Invert sign because UNIX semantics are backwards
  479|      1|    rawOffset = uprv_timezone() * -U_MILLIS_PER_SECOND;
  ------------------
  |  | 1546|      1|#define uprv_timezone U_ICU_ENTRY_POINT_RENAME(uprv_timezone)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  rawOffset = uprv_timezone() * -U_MILLIS_PER_SECOND;
  ------------------
  |  |  221|      1|#define U_MILLIS_PER_SECOND        (1000)
  ------------------
  480|       |
  481|      1|    TimeZone* hostZone = nullptr;
  482|       |
  483|      1|    UnicodeString hostStrID(hostID, -1, US_INV);
  ------------------
  |  |   98|      1|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  484|       |
  485|      1|    if (hostStrID.length() == 0) {
  ------------------
  |  Branch (485:9): [True: 0, False: 1]
  ------------------
  486|       |        // The host time zone detection (or remapping) above has failed and
  487|       |        // we have no name at all. Fallback to using the Unknown zone.
  488|      0|        hostStrID = UnicodeString(true, UNKNOWN_ZONE_ID, UNKNOWN_ZONE_ID_LENGTH);
  489|      0|        hostDetectionSucceeded = false;
  490|      0|    }
  491|       |
  492|      1|    hostZone = createSystemTimeZone(hostStrID);
  493|       |
  494|       |#if U_PLATFORM_USES_ONLY_WIN32_API
  495|       |    // hostID points to a heap-allocated location on Windows.
  496|       |    uprv_free(const_cast<char *>(hostID));
  497|       |#endif
  498|       |
  499|      1|    int32_t hostIDLen = hostStrID.length();
  500|      1|    if (hostZone != nullptr && rawOffset != hostZone->getRawOffset()
  ------------------
  |  Branch (500:9): [True: 1, False: 0]
  |  Branch (500:32): [True: 0, False: 1]
  ------------------
  501|      1|        && (3 <= hostIDLen && hostIDLen <= 4))
  ------------------
  |  Branch (501:13): [True: 0, False: 0]
  |  Branch (501:31): [True: 0, False: 0]
  ------------------
  502|      0|    {
  503|       |        // Uh oh. This probably wasn't a good id.
  504|       |        // It was probably an ambiguous abbreviation
  505|      0|        delete hostZone;
  506|      0|        hostZone = nullptr;
  507|      0|    }
  508|       |
  509|       |    // Construct a fixed standard zone with the host's ID
  510|       |    // and raw offset.
  511|      1|    if (hostZone == nullptr && hostDetectionSucceeded) {
  ------------------
  |  Branch (511:9): [True: 0, False: 1]
  |  Branch (511:32): [True: 0, False: 0]
  ------------------
  512|      0|        hostZone = new SimpleTimeZone(rawOffset, hostStrID);
  513|      0|    }
  514|       |
  515|       |    // If we _still_ don't have a time zone, use the Unknown zone.
  516|       |    //
  517|       |    // Note: This is extremely unlikely situation. If
  518|       |    // new SimpleTimeZone(...) above fails, the following
  519|       |    // code may also fail.
  520|      1|    if (hostZone == nullptr) {
  ------------------
  |  Branch (520:9): [True: 0, False: 1]
  ------------------
  521|       |        // Unknown zone uses static allocated memory, so it must always exist.
  522|       |        // However, clone() allocates memory and can fail.
  523|      0|        hostZone = TimeZone::getUnknown().clone();
  524|      0|    }
  525|       |
  526|      1|    return hostZone;
  527|      1|}
_ZN6icu_788TimeZone13createDefaultEv:
  573|    287|{
  574|    287|    umtx_initOnce(gDefaultZoneInitOnce, initDefault);
  575|    287|    {
  576|    287|        Mutex lock(&gDefaultZoneMutex);
  577|    287|        return (DEFAULT_ZONE != nullptr) ? DEFAULT_ZONE->clone() : nullptr;
  ------------------
  |  Branch (577:16): [True: 287, False: 0]
  ------------------
  578|    287|    }
  579|    287|}
_ZN6icu_7813TZEnumerationD2Ev:
  980|    707|TZEnumeration::~TZEnumeration() {
  981|    707|    if (localMap != nullptr) {
  ------------------
  |  Branch (981:9): [True: 0, False: 707]
  ------------------
  982|      0|        uprv_free(localMap);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  983|      0|    }
  984|    707|}
_ZN6icu_788TimeZone27createTimeZoneIDEnumerationE19USystemTimeZoneTypePKcPKiR10UErrorCode:
  993|    707|            UErrorCode& ec) {
  994|    707|    return TZEnumeration::create(zoneType, region, rawOffset, ec);
  995|    707|}
_ZN6icu_788TimeZone6findIDERKNS_13UnicodeStringE:
 1097|   184k|TimeZone::findID(const UnicodeString& id) {
 1098|   184k|    const char16_t *result = nullptr;
 1099|   184k|    UErrorCode ec = U_ZERO_ERROR;
 1100|   184k|    UResourceBundle *rb = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  | 1693|   184k|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|   184k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   184k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   184k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  UResourceBundle *rb = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  |   92|   184k|#define kZONEINFO "zoneinfo64"
  ------------------
 1101|       |
 1102|       |    // resolve zone index by name
 1103|   184k|    UResourceBundle *names = ures_getByKey(rb, kNAMES, nullptr, &ec);
  ------------------
  |  | 1661|   184k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|   184k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   184k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   184k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  UResourceBundle *names = ures_getByKey(rb, kNAMES, nullptr, &ec);
  ------------------
  |  |   96|   184k|#define kNAMES    "Names"
  ------------------
 1104|   184k|    int32_t idx = findInStringArray(names, id, ec);
 1105|   184k|    result = ures_getStringByIndex(names, idx, nullptr, &ec);
  ------------------
  |  | 1676|   184k|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  123|   184k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   184k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   184k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1106|   184k|    if (U_FAILURE(ec)) {
  ------------------
  |  Branch (1106:9): [True: 0, False: 184k]
  ------------------
 1107|      0|        result = nullptr;
 1108|      0|    }
 1109|   184k|    ures_close(names);
  ------------------
  |  | 1652|   184k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|   184k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   184k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   184k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1110|   184k|    ures_close(rb);
  ------------------
  |  | 1652|   184k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|   184k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   184k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   184k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1111|   184k|    return result;
 1112|   184k|}
_ZN6icu_788TimeZone16dereferOlsonLinkERKNS_13UnicodeStringE:
 1116|     38|TimeZone::dereferOlsonLink(const UnicodeString& id) {
 1117|     38|    const char16_t *result = nullptr;
 1118|     38|    UErrorCode ec = U_ZERO_ERROR;
 1119|     38|    UResourceBundle *rb = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  | 1693|     38|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|     38|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     38|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     38|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  UResourceBundle *rb = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  |   92|     38|#define kZONEINFO "zoneinfo64"
  ------------------
 1120|       |
 1121|       |    // resolve zone index by name
 1122|     38|    UResourceBundle *names = ures_getByKey(rb, kNAMES, nullptr, &ec);
  ------------------
  |  | 1661|     38|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     38|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     38|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     38|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  UResourceBundle *names = ures_getByKey(rb, kNAMES, nullptr, &ec);
  ------------------
  |  |   96|     38|#define kNAMES    "Names"
  ------------------
 1123|     38|    int32_t idx = findInStringArray(names, id, ec);
 1124|     38|    result = ures_getStringByIndex(names, idx, nullptr, &ec);
  ------------------
  |  | 1676|     38|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  123|     38|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     38|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     38|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1125|       |
 1126|       |    // open the zone bundle by index
 1127|     38|    ures_getByKey(rb, kZONES, rb, &ec);
  ------------------
  |  | 1661|     38|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     38|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     38|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     38|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  ures_getByKey(rb, kZONES, rb, &ec);
  ------------------
  |  |   94|     38|#define kZONES    "Zones"
  ------------------
 1128|     38|    ures_getByIndex(rb, idx, rb, &ec); 
  ------------------
  |  | 1660|     38|#define ures_getByIndex U_ICU_ENTRY_POINT_RENAME(ures_getByIndex)
  |  |  ------------------
  |  |  |  |  123|     38|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     38|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     38|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1129|       |
 1130|     38|    if (U_SUCCESS(ec)) {
  ------------------
  |  Branch (1130:9): [True: 38, False: 0]
  ------------------
 1131|     38|        if (ures_getType(rb) == URES_INT) {
  ------------------
  |  | 1679|     38|#define ures_getType U_ICU_ENTRY_POINT_RENAME(ures_getType)
  |  |  ------------------
  |  |  |  |  123|     38|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     38|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     38|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1131:13): [True: 25, False: 13]
  ------------------
 1132|       |            // this is a link - dereference the link
 1133|     25|            int32_t deref = ures_getInt(rb, &ec);
  ------------------
  |  | 1664|     25|#define ures_getInt U_ICU_ENTRY_POINT_RENAME(ures_getInt)
  |  |  ------------------
  |  |  |  |  123|     25|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     25|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     25|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1134|     25|            const char16_t* tmp = ures_getStringByIndex(names, deref, nullptr, &ec);
  ------------------
  |  | 1676|     25|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  123|     25|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     25|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     25|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1135|     25|            if (U_SUCCESS(ec)) {
  ------------------
  |  Branch (1135:17): [True: 25, False: 0]
  ------------------
 1136|     25|                result = tmp;
 1137|     25|            }
 1138|     25|        }
 1139|     38|    }
 1140|       |
 1141|     38|    ures_close(names);
  ------------------
  |  | 1652|     38|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|     38|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     38|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     38|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1142|     38|    ures_close(rb);
  ------------------
  |  | 1652|     38|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|     38|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     38|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     38|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1143|       |
 1144|     38|    return result;
 1145|     38|}
timezone.cpp:_ZN6icu_7812_GLOBAL__N_120createSystemTimeZoneERKNS_13UnicodeStringE:
  422|      1|createSystemTimeZone(const UnicodeString& id) {
  423|      1|    UErrorCode ec = U_ZERO_ERROR;
  424|      1|    return createSystemTimeZone(id, ec);
  425|      1|}
timezone.cpp:_ZN6icu_7812_GLOBAL__N_120createSystemTimeZoneERKNS_13UnicodeStringER10UErrorCode:
  391|      1|createSystemTimeZone(const UnicodeString& id, UErrorCode& ec) {
  392|      1|    if (U_FAILURE(ec)) {
  ------------------
  |  Branch (392:9): [True: 0, False: 1]
  ------------------
  393|      0|        return nullptr;
  394|      0|    }
  395|      1|    TimeZone* z = nullptr;
  396|      1|    StackUResourceBundle res;
  397|      1|    U_DEBUG_TZ_MSG(("pre-err=%s\n", u_errorName(ec)));
  398|      1|    UResourceBundle *top = openOlsonResource(id, res.ref(), ec);
  399|      1|    U_DEBUG_TZ_MSG(("post-err=%s\n", u_errorName(ec)));
  400|      1|    if (U_SUCCESS(ec)) {
  ------------------
  |  Branch (400:9): [True: 1, False: 0]
  ------------------
  401|      1|        z = new OlsonTimeZone(top, res.getAlias(), id, ec);
  402|      1|        if (z == nullptr) {
  ------------------
  |  Branch (402:13): [True: 0, False: 1]
  ------------------
  403|      0|            ec = U_MEMORY_ALLOCATION_ERROR;
  404|      0|            U_DEBUG_TZ_MSG(("cstz: olson time zone failed to initialize - err %s\n", u_errorName(ec)));
  405|      0|        }
  406|      1|    }
  407|      1|    ures_close(top);
  ------------------
  |  | 1652|      1|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  408|      1|    if (U_FAILURE(ec)) {
  ------------------
  |  Branch (408:9): [True: 0, False: 1]
  ------------------
  409|      0|        U_DEBUG_TZ_MSG(("cstz: failed to create, err %s\n", u_errorName(ec)));
  410|      0|        delete z;
  411|      0|        z = nullptr;
  412|      0|    }
  413|      1|    return z;
  414|      1|}
timezone.cpp:_ZN6icu_78L11initDefaultEv:
  539|      1|{
  540|      1|    ucln_i18n_registerCleanup(UCLN_I18N_TIMEZONE, timeZone_cleanup);
  ------------------
  |  |  618|      1|#define ucln_i18n_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_i18n_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  541|       |
  542|      1|    Mutex lock(&gDefaultZoneMutex);
  543|       |    // If setDefault() has already been called we can skip getting the
  544|       |    // default zone information from the system.
  545|      1|    if (DEFAULT_ZONE != nullptr) {
  ------------------
  |  Branch (545:9): [True: 0, False: 1]
  ------------------
  546|      0|        return;
  547|      0|    }
  548|       |    
  549|       |    // NOTE:  this code is safely single threaded, being only
  550|       |    // run via umtx_initOnce().
  551|       |    //
  552|       |    // Some of the locale/timezone OS functions may not be thread safe,
  553|       |    //
  554|       |    // The operating system might actually use ICU to implement timezones.
  555|       |    // So we may have ICU calling ICU here, like on AIX.
  556|       |    // There shouldn't be a problem with this; initOnce does not hold a mutex
  557|       |    // while the init function is being run.
  558|       |
  559|       |    // The code detecting the host time zone was separated from this
  560|       |    // and implemented as TimeZone::detectHostTimeZone()
  561|       |
  562|      1|    TimeZone *default_zone = TimeZone::detectHostTimeZone();
  563|       |
  564|      1|    U_ASSERT(DEFAULT_ZONE == nullptr);
  ------------------
  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  ------------------
  565|       |
  566|      1|    DEFAULT_ZONE = default_zone;
  567|      1|}
_ZN6icu_7813TZEnumeration6createE19USystemTimeZoneTypePKcPKiR10UErrorCode:
  826|    707|    static TZEnumeration* create(USystemTimeZoneType type, const char* region, const int32_t* rawOffset, UErrorCode& ec) {
  827|    707|        if (U_FAILURE(ec)) {
  ------------------
  |  Branch (827:13): [True: 0, False: 707]
  ------------------
  828|      0|            return nullptr;
  829|      0|        }
  830|       |
  831|    707|        int32_t baseLen;
  832|    707|        int32_t *baseMap = getMap(type, baseLen, ec);
  833|       |
  834|    707|        if (U_FAILURE(ec)) {
  ------------------
  |  Branch (834:13): [True: 0, False: 707]
  ------------------
  835|      0|            return nullptr;
  836|      0|        }
  837|       |
  838|       |        // If any additional conditions are available,
  839|       |        // create instance local map filtered by the conditions.
  840|       |
  841|    707|        int32_t *filteredMap = nullptr;
  842|    707|        int32_t numEntries = 0;
  843|       |
  844|    707|        if (region != nullptr || rawOffset != nullptr) {
  ------------------
  |  Branch (844:13): [True: 0, False: 707]
  |  Branch (844:34): [True: 0, False: 707]
  ------------------
  845|      0|            int32_t filteredMapSize = DEFAULT_FILTERED_MAP_SIZE;
  ------------------
  |  |  823|      0|#define DEFAULT_FILTERED_MAP_SIZE 8
  ------------------
  846|      0|            filteredMap = static_cast<int32_t*>(uprv_malloc(filteredMapSize * sizeof(int32_t)));
  ------------------
  |  | 1524|      0|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  847|      0|            if (filteredMap == nullptr) {
  ------------------
  |  Branch (847:17): [True: 0, False: 0]
  ------------------
  848|      0|                ec = U_MEMORY_ALLOCATION_ERROR;
  849|      0|                return nullptr;
  850|      0|            }
  851|       |
  852|       |            // Walk through the base map
  853|      0|            UResourceBundle *res = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  | 1693|      0|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          UResourceBundle *res = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  |   92|      0|#define kZONEINFO "zoneinfo64"
  ------------------
  854|      0|            res = ures_getByKey(res, kNAMES, res, &ec); // dereference Zones section
  ------------------
  |  | 1661|      0|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          res = ures_getByKey(res, kNAMES, res, &ec); // dereference Zones section
  ------------------
  |  |   96|      0|#define kNAMES    "Names"
  ------------------
  855|      0|            for (int32_t i = 0; i < baseLen; i++) {
  ------------------
  |  Branch (855:33): [True: 0, False: 0]
  ------------------
  856|      0|                int32_t zidx = baseMap[i];
  857|      0|                UnicodeString id = ures_getUnicodeStringByIndex(res, zidx, &ec);
  858|      0|                if (U_FAILURE(ec)) {
  ------------------
  |  Branch (858:21): [True: 0, False: 0]
  ------------------
  859|      0|                    break;
  860|      0|                }
  861|      0|                if (region != nullptr) {
  ------------------
  |  Branch (861:21): [True: 0, False: 0]
  ------------------
  862|       |                    // Filter by region
  863|      0|                    char tzregion[4]; // max 3 letters + null term
  864|      0|                    TimeZone::getRegion(id, tzregion, sizeof(tzregion), ec);
  865|      0|                    if (U_FAILURE(ec)) {
  ------------------
  |  Branch (865:25): [True: 0, False: 0]
  ------------------
  866|      0|                        break;
  867|      0|                    }
  868|      0|                    if (uprv_stricmp(tzregion, region) != 0) {
  ------------------
  |  | 1542|      0|#define uprv_stricmp U_ICU_ENTRY_POINT_RENAME(uprv_stricmp)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (868:25): [True: 0, False: 0]
  ------------------
  869|       |                        // region does not match
  870|      0|                        continue;
  871|      0|                    }
  872|      0|                }
  873|      0|                if (rawOffset != nullptr) {
  ------------------
  |  Branch (873:21): [True: 0, False: 0]
  ------------------
  874|       |                    // Filter by raw offset
  875|       |                    // Note: This is VERY inefficient
  876|      0|                    TimeZone *z = createSystemTimeZone(id, ec);
  877|      0|                    if (U_FAILURE(ec)) {
  ------------------
  |  Branch (877:25): [True: 0, False: 0]
  ------------------
  878|      0|                        break;
  879|      0|                    }
  880|      0|                    int32_t tzoffset = z->getRawOffset();
  881|      0|                    delete z;
  882|       |
  883|      0|                    if (tzoffset != *rawOffset) {
  ------------------
  |  Branch (883:25): [True: 0, False: 0]
  ------------------
  884|      0|                        continue;
  885|      0|                    }
  886|      0|                }
  887|       |
  888|      0|                if (filteredMapSize <= numEntries) {
  ------------------
  |  Branch (888:21): [True: 0, False: 0]
  ------------------
  889|      0|                    filteredMapSize += MAP_INCREMENT_SIZE;
  ------------------
  |  |  824|      0|#define MAP_INCREMENT_SIZE 8
  ------------------
  890|      0|                    int32_t* tmp = static_cast<int32_t*>(uprv_realloc(filteredMap, filteredMapSize * sizeof(int32_t)));
  ------------------
  |  | 1536|      0|#define uprv_realloc U_ICU_ENTRY_POINT_RENAME(uprv_realloc)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  891|      0|                    if (tmp == nullptr) {
  ------------------
  |  Branch (891:25): [True: 0, False: 0]
  ------------------
  892|      0|                        ec = U_MEMORY_ALLOCATION_ERROR;
  893|      0|                        break;
  894|      0|                    } else {
  895|      0|                        filteredMap = tmp;
  896|      0|                    }
  897|      0|                }
  898|       |
  899|      0|                filteredMap[numEntries++] = zidx;
  900|      0|            }
  901|       |
  902|      0|            if (U_FAILURE(ec)) {
  ------------------
  |  Branch (902:17): [True: 0, False: 0]
  ------------------
  903|      0|                uprv_free(filteredMap);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  904|      0|                filteredMap = nullptr;
  905|      0|            }
  906|       |
  907|      0|            ures_close(res);
  ------------------
  |  | 1652|      0|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  908|      0|        }
  909|       |
  910|    707|        TZEnumeration *result = nullptr;
  911|    707|        if (U_SUCCESS(ec)) {
  ------------------
  |  Branch (911:13): [True: 707, False: 0]
  ------------------
  912|       |            // Finally, create a new enumeration instance
  913|    707|            if (filteredMap == nullptr) {
  ------------------
  |  Branch (913:17): [True: 707, False: 0]
  ------------------
  914|    707|                result = new TZEnumeration(baseMap, baseLen, false);
  915|    707|            } else {
  916|      0|                result = new TZEnumeration(filteredMap, numEntries, true);
  917|      0|                filteredMap = nullptr;
  918|      0|            }
  919|    707|            if (result == nullptr) {
  ------------------
  |  Branch (919:17): [True: 0, False: 707]
  ------------------
  920|      0|                ec = U_MEMORY_ALLOCATION_ERROR;
  921|      0|            }
  922|    707|        }
  923|       |
  924|    707|        if (filteredMap != nullptr) {
  ------------------
  |  Branch (924:13): [True: 0, False: 707]
  ------------------
  925|      0|            uprv_free(filteredMap);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  926|      0|        }
  927|       |
  928|    707|        return result;
  929|    707|    }
_ZN6icu_7813TZEnumeration6getMapE19USystemTimeZoneTypeRiR10UErrorCode:
  790|    707|    static int32_t* getMap(USystemTimeZoneType type, int32_t& len, UErrorCode& ec) {
  791|    707|        len = 0;
  792|    707|        if (U_FAILURE(ec)) {
  ------------------
  |  Branch (792:13): [True: 0, False: 707]
  ------------------
  793|      0|            return nullptr;
  794|      0|        }
  795|    707|        int32_t* m = nullptr;
  796|    707|        switch (type) {
  797|    420|        case UCAL_ZONE_TYPE_ANY:
  ------------------
  |  Branch (797:9): [True: 420, False: 287]
  ------------------
  798|    420|            umtx_initOnce(gSystemZonesInitOnce, &initMap, type, ec);
  799|    420|            m = MAP_SYSTEM_ZONES;
  800|    420|            len = LEN_SYSTEM_ZONES;
  801|    420|            break;
  802|    287|        case UCAL_ZONE_TYPE_CANONICAL:
  ------------------
  |  Branch (802:9): [True: 287, False: 420]
  ------------------
  803|    287|            umtx_initOnce(gCanonicalZonesInitOnce, &initMap, type, ec);
  804|    287|            m = MAP_CANONICAL_SYSTEM_ZONES;
  805|    287|            len = LEN_CANONICAL_SYSTEM_ZONES;
  806|    287|            break;
  807|      0|        case UCAL_ZONE_TYPE_CANONICAL_LOCATION:
  ------------------
  |  Branch (807:9): [True: 0, False: 707]
  ------------------
  808|      0|            umtx_initOnce(gCanonicalLocationZonesInitOnce, &initMap, type, ec);
  809|      0|            m = MAP_CANONICAL_SYSTEM_LOCATION_ZONES;
  810|      0|            len = LEN_CANONICAL_SYSTEM_LOCATION_ZONES;
  811|      0|            break;
  812|      0|        default:
  ------------------
  |  Branch (812:9): [True: 0, False: 707]
  ------------------
  813|      0|            ec = U_ILLEGAL_ARGUMENT_ERROR;
  814|      0|            m = nullptr;
  815|      0|            len = 0;
  816|      0|            break;
  817|    707|        }
  818|    707|        return m;
  819|    707|    }
timezone.cpp:_ZN6icu_78L7initMapE19USystemTimeZoneTypeR10UErrorCode:
  626|      2|static void U_CALLCONV initMap(USystemTimeZoneType type, UErrorCode& ec) {
  627|      2|    ucln_i18n_registerCleanup(UCLN_I18N_TIMEZONE, timeZone_cleanup);
  ------------------
  |  |  618|      2|#define ucln_i18n_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_i18n_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      2|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      2|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      2|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  628|       |
  629|      2|    UResourceBundle *res = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  | 1693|      2|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|      2|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      2|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      2|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  UResourceBundle *res = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  |   92|      2|#define kZONEINFO "zoneinfo64"
  ------------------
  630|      2|    res = ures_getByKey(res, kNAMES, res, &ec); // dereference Zones section
  ------------------
  |  | 1661|      2|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      2|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      2|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      2|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  res = ures_getByKey(res, kNAMES, res, &ec); // dereference Zones section
  ------------------
  |  |   96|      2|#define kNAMES    "Names"
  ------------------
  631|      2|    if (U_SUCCESS(ec)) {
  ------------------
  |  Branch (631:9): [True: 2, False: 0]
  ------------------
  632|      2|        int32_t size = ures_getSize(res);
  ------------------
  |  | 1674|      2|#define ures_getSize U_ICU_ENTRY_POINT_RENAME(ures_getSize)
  |  |  ------------------
  |  |  |  |  123|      2|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      2|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      2|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  633|      2|        int32_t* m = static_cast<int32_t*>(uprv_malloc(size * sizeof(int32_t)));
  ------------------
  |  | 1524|      2|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|      2|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      2|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      2|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  634|      2|        if (m == nullptr) {
  ------------------
  |  Branch (634:13): [True: 0, False: 2]
  ------------------
  635|      0|            ec = U_MEMORY_ALLOCATION_ERROR;
  636|      2|        } else {
  637|      2|            int32_t numEntries = 0;
  638|  1.28k|            for (int32_t i = 0; i < size; i++) {
  ------------------
  |  Branch (638:33): [True: 1.27k, False: 2]
  ------------------
  639|  1.27k|                UnicodeString id = ures_getUnicodeStringByIndex(res, i, &ec);
  640|  1.27k|                if (U_FAILURE(ec)) {
  ------------------
  |  Branch (640:21): [True: 0, False: 1.27k]
  ------------------
  641|      0|                    break;
  642|      0|                }
  643|  1.27k|                if (0 == id.compare(UNKNOWN_ZONE_ID, UNKNOWN_ZONE_ID_LENGTH)) {
  ------------------
  |  Branch (643:21): [True: 2, False: 1.27k]
  ------------------
  644|       |                    // exclude Etc/Unknown
  645|      2|                    continue;
  646|      2|                }
  647|  1.27k|                if (type == UCAL_ZONE_TYPE_CANONICAL || type == UCAL_ZONE_TYPE_CANONICAL_LOCATION) {
  ------------------
  |  Branch (647:21): [True: 638, False: 638]
  |  Branch (647:57): [True: 0, False: 638]
  ------------------
  648|    638|                    UnicodeString canonicalID;
  649|    638|                    ZoneMeta::getCanonicalCLDRID(id, canonicalID, ec);
  650|    638|                    if (U_FAILURE(ec)) {
  ------------------
  |  Branch (650:25): [True: 0, False: 638]
  ------------------
  651|      0|                        break;
  652|      0|                    }
  653|    638|                    if (canonicalID != id) {
  ------------------
  |  Branch (653:25): [True: 179, False: 459]
  ------------------
  654|       |                        // exclude aliases
  655|    179|                        continue;
  656|    179|                    }
  657|    638|                }
  658|  1.09k|                if (type == UCAL_ZONE_TYPE_CANONICAL_LOCATION) {
  ------------------
  |  Branch (658:21): [True: 0, False: 1.09k]
  ------------------
  659|      0|                    const char16_t *region = TimeZone::getRegion(id, ec);
  660|      0|                    if (U_FAILURE(ec)) {
  ------------------
  |  Branch (660:25): [True: 0, False: 0]
  ------------------
  661|      0|                        break;
  662|      0|                    }
  663|      0|                    if (u_strcmp(region, WORLD) == 0) {
  ------------------
  |  |  387|      0|#define u_strcmp U_ICU_ENTRY_POINT_RENAME(u_strcmp)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (663:25): [True: 0, False: 0]
  ------------------
  664|       |                       // exclude non-location ("001")
  665|      0|                        continue;
  666|      0|                    }
  667|      0|                }
  668|  1.09k|                m[numEntries++] = i;
  669|  1.09k|            }
  670|      2|            if (U_SUCCESS(ec)) {
  ------------------
  |  Branch (670:17): [True: 2, False: 0]
  ------------------
  671|      2|                int32_t *tmp = m;
  672|      2|                m = static_cast<int32_t*>(uprv_realloc(tmp, numEntries * sizeof(int32_t)));
  ------------------
  |  | 1536|      2|#define uprv_realloc U_ICU_ENTRY_POINT_RENAME(uprv_realloc)
  |  |  ------------------
  |  |  |  |  123|      2|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      2|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      2|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  673|      2|                if (m == nullptr) {
  ------------------
  |  Branch (673:21): [True: 0, False: 2]
  ------------------
  674|       |                    // realloc failed.. use the original one even it has unused
  675|       |                    // area at the end
  676|      0|                    m = tmp;
  677|      0|                }
  678|       |
  679|      2|                switch(type) {
  ------------------
  |  Branch (679:24): [True: 0, False: 2]
  ------------------
  680|      1|                case UCAL_ZONE_TYPE_ANY:
  ------------------
  |  Branch (680:17): [True: 1, False: 1]
  ------------------
  681|      1|                    U_ASSERT(MAP_SYSTEM_ZONES == nullptr);
  ------------------
  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  ------------------
  682|      1|                    MAP_SYSTEM_ZONES = m;
  683|      1|                    LEN_SYSTEM_ZONES = numEntries;
  684|      1|                    break;
  685|      1|                case UCAL_ZONE_TYPE_CANONICAL:
  ------------------
  |  Branch (685:17): [True: 1, False: 1]
  ------------------
  686|      1|                    U_ASSERT(MAP_CANONICAL_SYSTEM_ZONES == nullptr);
  ------------------
  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  ------------------
  687|      1|                    MAP_CANONICAL_SYSTEM_ZONES = m;
  688|      1|                    LEN_CANONICAL_SYSTEM_ZONES = numEntries;
  689|      1|                    break;
  690|      0|                case UCAL_ZONE_TYPE_CANONICAL_LOCATION:
  ------------------
  |  Branch (690:17): [True: 0, False: 2]
  ------------------
  691|      0|                    U_ASSERT(MAP_CANONICAL_SYSTEM_LOCATION_ZONES == nullptr);
  ------------------
  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  ------------------
  692|      0|                    MAP_CANONICAL_SYSTEM_LOCATION_ZONES = m;
  693|      0|                    LEN_CANONICAL_SYSTEM_LOCATION_ZONES = numEntries;
  694|      0|                    break;
  695|      2|                }
  696|      2|            }
  697|      2|        }
  698|      2|    }
  699|      2|    ures_close(res);
  ------------------
  |  | 1652|      2|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|      2|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      2|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      2|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  700|      2|}
_ZN6icu_7813TZEnumerationC2EPiia:
  768|    707|    TZEnumeration(int32_t* mapData, int32_t mapLen, UBool adoptMapData) : pos(0) {
  769|    707|        map = mapData;
  770|    707|        localMap = adoptMapData ? mapData : nullptr;
  ------------------
  |  Branch (770:20): [True: 0, False: 707]
  ------------------
  771|    707|        len = mapLen;
  772|    707|    }
timezone.cpp:_ZN6icu_78L17openOlsonResourceERKNS_13UnicodeStringER15UResourceBundleR10UErrorCode:
  281|      1|{
  282|       |#ifdef U_DEBUG_TZ
  283|       |    char buf[128];
  284|       |    id.extract(0, sizeof(buf)-1, buf, sizeof(buf), "");
  285|       |#endif
  286|      1|    UResourceBundle *top = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  | 1693|      1|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  UResourceBundle *top = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  |   92|      1|#define kZONEINFO "zoneinfo64"
  ------------------
  287|      1|    U_DEBUG_TZ_MSG(("pre: res sz=%d\n", ures_getSize(&res)));
  288|      1|    /* &res = */ getZoneByName(top, id, &res, ec);
  289|       |    // Dereference if this is an alias.  Docs say result should be 1
  290|       |    // but it is 0 in 2.8 (?).
  291|      1|    U_DEBUG_TZ_MSG(("Loading zone '%s' (%s, size %d) - %s\n", buf, ures_getKey((UResourceBundle*)&res), ures_getSize(&res), u_errorName(ec)));
  292|      1|    if (ures_getType(&res) == URES_INT) {
  ------------------
  |  | 1679|      1|#define ures_getType U_ICU_ENTRY_POINT_RENAME(ures_getType)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (292:9): [True: 0, False: 1]
  ------------------
  293|      0|        int32_t deref = ures_getInt(&res, &ec) + 0;
  ------------------
  |  | 1664|      0|#define ures_getInt U_ICU_ENTRY_POINT_RENAME(ures_getInt)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  294|      0|        U_DEBUG_TZ_MSG(("getInt: %s - type is %d\n", u_errorName(ec), ures_getType(&res)));
  295|      0|        UResourceBundle *ares = ures_getByKey(top, kZONES, nullptr, &ec); // dereference Zones section
  ------------------
  |  | 1661|      0|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      UResourceBundle *ares = ures_getByKey(top, kZONES, nullptr, &ec); // dereference Zones section
  ------------------
  |  |   94|      0|#define kZONES    "Zones"
  ------------------
  296|      0|        ures_getByIndex(ares, deref, &res, &ec);
  ------------------
  |  | 1660|      0|#define ures_getByIndex U_ICU_ENTRY_POINT_RENAME(ures_getByIndex)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|      0|        ures_close(ares);
  ------------------
  |  | 1652|      0|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  298|      0|        U_DEBUG_TZ_MSG(("alias to #%d (%s) - %s\n", deref, "??", u_errorName(ec)));
  299|      1|    } else {
  300|      1|        U_DEBUG_TZ_MSG(("not an alias - size %d\n", ures_getSize(&res)));
  301|      1|    }
  302|      1|    U_DEBUG_TZ_MSG(("%s - final status is %s\n", buf, u_errorName(ec)));
  303|      1|    return top;
  304|      1|}
timezone.cpp:_ZN6icu_78L13getZoneByNameEPK15UResourceBundleRKNS_13UnicodeStringEPS0_R10UErrorCode:
  230|      1|static UResourceBundle* getZoneByName(const UResourceBundle* top, const UnicodeString& id, UResourceBundle *oldbundle, UErrorCode& status) {
  231|       |    // load the Rules object
  232|      1|    UResourceBundle *tmp = ures_getByKey(top, kNAMES, nullptr, &status);
  ------------------
  |  | 1661|      1|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  UResourceBundle *tmp = ures_getByKey(top, kNAMES, nullptr, &status);
  ------------------
  |  |   96|      1|#define kNAMES    "Names"
  ------------------
  233|       |
  234|       |    // search for the string
  235|      1|    int32_t idx = findInStringArray(tmp, id, status);
  236|       |
  237|      1|    if((idx == -1) && U_SUCCESS(status)) {
  ------------------
  |  Branch (237:8): [True: 0, False: 1]
  |  Branch (237:23): [True: 0, False: 0]
  ------------------
  238|       |        // not found
  239|      0|        status = U_MISSING_RESOURCE_ERROR;
  240|       |        //ures_close(oldbundle);
  241|       |        //oldbundle = nullptr;
  242|      1|    } else {
  243|      1|        U_DEBUG_TZ_MSG(("gzbn: oldbundle= size %d, type %d, %s\n", ures_getSize(tmp), ures_getType(tmp), u_errorName(status)));
  244|      1|        tmp = ures_getByKey(top, kZONES, tmp, &status); // get Zones object from top
  ------------------
  |  | 1661|      1|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      tmp = ures_getByKey(top, kZONES, tmp, &status); // get Zones object from top
  ------------------
  |  |   94|      1|#define kZONES    "Zones"
  ------------------
  245|      1|        U_DEBUG_TZ_MSG(("gzbn: loaded ZONES, size %d, type %d, path %s %s\n", ures_getSize(tmp), ures_getType(tmp), ures_getPath(tmp), u_errorName(status)));
  246|      1|        oldbundle = ures_getByIndex(tmp, idx, oldbundle, &status); // get nth Zone object
  ------------------
  |  | 1660|      1|#define ures_getByIndex U_ICU_ENTRY_POINT_RENAME(ures_getByIndex)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  247|      1|        U_DEBUG_TZ_MSG(("gzbn: loaded z#%d, size %d, type %d, path %s, %s\n", idx, ures_getSize(oldbundle), ures_getType(oldbundle), ures_getPath(oldbundle),  u_errorName(status)));
  248|      1|    }
  249|      1|    ures_close(tmp);
  ------------------
  |  | 1652|      1|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|      1|    if(U_FAILURE(status)) {
  ------------------
  |  Branch (250:8): [True: 0, False: 1]
  ------------------
  251|       |        //ures_close(oldbundle);
  252|      0|        return nullptr;
  253|      1|    } else {
  254|      1|        return oldbundle;
  255|      1|    }
  256|      1|}
timezone.cpp:_ZN6icu_78L17findInStringArrayEP15UResourceBundleRKNS_13UnicodeStringER10UErrorCode:
  183|   184k|{
  184|   184k|    UnicodeString copy;
  185|   184k|    const char16_t *u;
  186|   184k|    int32_t len;
  187|       |
  188|   184k|    int32_t start = 0;
  189|   184k|    int32_t limit = ures_getSize(array);
  ------------------
  |  | 1674|   184k|#define ures_getSize U_ICU_ENTRY_POINT_RENAME(ures_getSize)
  |  |  ------------------
  |  |  |  |  123|   184k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   184k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   184k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|   184k|    int32_t mid;
  191|   184k|    int32_t lastMid = INT32_MAX;
  192|   184k|    if(U_FAILURE(status) || (limit < 1)) {
  ------------------
  |  Branch (192:8): [True: 0, False: 184k]
  |  Branch (192:29): [True: 0, False: 184k]
  ------------------
  193|      0|        return -1;
  194|      0|    }
  195|   184k|    U_DEBUG_TZ_MSG(("fisa: Looking for %s, between %d and %d\n", U_DEBUG_TZ_STR(UnicodeString(id).getTerminatedBuffer()), start, limit));
  196|       |
  197|  1.55M|    for (;;) {
  198|  1.55M|        mid = static_cast<int32_t>((start + limit) / 2);
  199|  1.55M|        if (lastMid == mid) {   /* Have we moved? */
  ------------------
  |  Branch (199:13): [True: 0, False: 1.55M]
  ------------------
  200|      0|            break;  /* We haven't moved, and it wasn't found. */
  201|      0|        }
  202|  1.55M|        lastMid = mid;
  203|  1.55M|        u = ures_getStringByIndex(array, mid, &len, &status);
  ------------------
  |  | 1676|  1.55M|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  123|  1.55M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.55M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.55M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  204|  1.55M|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (204:13): [True: 0, False: 1.55M]
  ------------------
  205|      0|            break;
  206|      0|        }
  207|  1.55M|        U_DEBUG_TZ_MSG(("tz: compare to %s, %d .. [%d] .. %d\n", U_DEBUG_TZ_STR(u), start, mid, limit));
  208|  1.55M|        copy.setTo(true, u, len);
  209|  1.55M|        int r = id.compare(copy);
  210|  1.55M|        if(r==0) {
  ------------------
  |  Branch (210:12): [True: 184k, False: 1.36M]
  ------------------
  211|   184k|            U_DEBUG_TZ_MSG(("fisa: found at %d\n", mid));
  212|   184k|            return mid;
  213|  1.36M|        } else if(r<0) {
  ------------------
  |  Branch (213:19): [True: 647k, False: 720k]
  ------------------
  214|   647k|            limit = mid;
  215|   720k|        } else {
  216|   720k|            start = mid;
  217|   720k|        }
  218|  1.55M|    }
  219|      0|    U_DEBUG_TZ_MSG(("fisa: not found\n"));
  220|      0|    return -1;
  221|   184k|}
_ZNK6icu_7813TZEnumeration5countER10UErrorCode:
  958|    420|    virtual int32_t count(UErrorCode& status) const override {
  959|    420|        return U_FAILURE(status) ? 0 : len;
  ------------------
  |  Branch (959:16): [True: 0, False: 420]
  ------------------
  960|    420|    }
_ZN6icu_7813TZEnumeration5snextER10UErrorCode:
  962|   400k|    virtual const UnicodeString* snext(UErrorCode& status) override {
  963|   400k|        if (U_SUCCESS(status) && map != nullptr && pos < len) {
  ------------------
  |  Branch (963:13): [True: 400k, False: 0]
  |  Branch (963:34): [True: 400k, False: 0]
  |  Branch (963:52): [True: 399k, False: 707]
  ------------------
  964|   399k|            getID(map[pos], status);
  965|   399k|            ++pos;
  966|   399k|            return &unistr;
  967|   399k|        }
  968|    707|        return nullptr;
  969|   400k|    }
_ZN6icu_7813TZEnumeration5getIDEiR10UErrorCode:
  774|   399k|    UBool getID(int32_t i, UErrorCode& ec) {
  775|   399k|        int32_t idLen = 0;
  776|   399k|        const char16_t* id = nullptr;
  777|   399k|        UResourceBundle *top = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  | 1693|   399k|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|   399k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   399k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   399k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      UResourceBundle *top = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  |   92|   399k|#define kZONEINFO "zoneinfo64"
  ------------------
  778|   399k|        top = ures_getByKey(top, kNAMES, top, &ec); // dereference Zones section
  ------------------
  |  | 1661|   399k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|   399k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   399k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   399k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      top = ures_getByKey(top, kNAMES, top, &ec); // dereference Zones section
  ------------------
  |  |   96|   399k|#define kNAMES    "Names"
  ------------------
  779|   399k|        id = ures_getStringByIndex(top, i, &idLen, &ec);
  ------------------
  |  | 1676|   399k|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  123|   399k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   399k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   399k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  780|   399k|        if(U_FAILURE(ec)) {
  ------------------
  |  Branch (780:12): [True: 0, False: 399k]
  ------------------
  781|      0|            unistr.truncate(0);
  782|      0|        }
  783|   399k|        else {
  784|   399k|            unistr.fastCopyFrom(UnicodeString(true, id, idLen));
  785|   399k|        }
  786|   399k|        ures_close(top);
  ------------------
  |  | 1652|   399k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|   399k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   399k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   399k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  787|   399k|        return U_SUCCESS(ec);
  788|   399k|    }

_ZN6icu_7821TimeZoneNamesDelegateC2ERKNS_6LocaleER10UErrorCode:
  138|    420|TimeZoneNamesDelegate::TimeZoneNamesDelegate(const Locale& locale, UErrorCode& status) {
  139|    420|    Mutex lock(&gTimeZoneNamesLock);
  140|    420|    if (!gTimeZoneNamesCacheInitialized) {
  ------------------
  |  Branch (140:9): [True: 1, False: 419]
  ------------------
  141|       |        // Create empty hashtable if it is not already initialized.
  142|      1|        gTimeZoneNamesCache = uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &status);
  ------------------
  |  | 1030|      1|#define uhash_open U_ICU_ENTRY_POINT_RENAME(uhash_open)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      gTimeZoneNamesCache = uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &status);
  ------------------
  |  | 1011|      1|#define uhash_hashChars U_ICU_ENTRY_POINT_RENAME(uhash_hashChars)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      gTimeZoneNamesCache = uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &status);
  ------------------
  |  |  993|      1|#define uhash_compareChars U_ICU_ENTRY_POINT_RENAME(uhash_compareChars)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  143|      1|        if (U_SUCCESS(status)) {
  ------------------
  |  Branch (143:13): [True: 1, False: 0]
  ------------------
  144|      1|            uhash_setKeyDeleter(gTimeZoneNamesCache, uprv_free);
  ------------------
  |  | 1040|      1|#define uhash_setKeyDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setKeyDeleter)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          uhash_setKeyDeleter(gTimeZoneNamesCache, uprv_free);
  ------------------
  |  | 1503|      1|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  145|      1|            uhash_setValueDeleter(gTimeZoneNamesCache, deleteTimeZoneNamesCacheEntry);
  ------------------
  |  | 1044|      1|#define uhash_setValueDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setValueDeleter)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  146|      1|            gTimeZoneNamesCacheInitialized = true;
  147|      1|            ucln_i18n_registerCleanup(UCLN_I18N_TIMEZONENAMES, timeZoneNames_cleanup);
  ------------------
  |  |  618|      1|#define ucln_i18n_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_i18n_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  148|      1|        }
  149|      1|    }
  150|       |
  151|    420|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (151:9): [True: 0, False: 420]
  ------------------
  152|      0|        return;
  153|      0|    }
  154|       |
  155|       |    // Check the cache, if not available, create new one and cache
  156|    420|    TimeZoneNamesCacheEntry *cacheEntry = nullptr;
  157|       |
  158|    420|    const char *key = locale.getName();
  159|    420|    cacheEntry = static_cast<TimeZoneNamesCacheEntry*>(uhash_get(gTimeZoneNamesCache, key));
  ------------------
  |  | 1007|    420|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  160|    420|    if (cacheEntry == nullptr) {
  ------------------
  |  Branch (160:9): [True: 287, False: 133]
  ------------------
  161|    287|        TimeZoneNames *tznames = nullptr;
  162|    287|        char *newKey = nullptr;
  163|       |
  164|    287|        tznames = new TimeZoneNamesImpl(locale, status);
  165|    287|        if (tznames == nullptr) {
  ------------------
  |  Branch (165:13): [True: 0, False: 287]
  ------------------
  166|      0|            status = U_MEMORY_ALLOCATION_ERROR;
  167|      0|        }
  168|    287|        if (U_SUCCESS(status)) {
  ------------------
  |  Branch (168:13): [True: 287, False: 0]
  ------------------
  169|    287|            newKey = static_cast<char*>(uprv_malloc(uprv_strlen(key) + 1));
  ------------------
  |  | 1524|    287|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          newKey = static_cast<char*>(uprv_malloc(uprv_strlen(key) + 1));
  ------------------
  |  |   37|    287|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|    287|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  170|    287|            if (newKey == nullptr) {
  ------------------
  |  Branch (170:17): [True: 0, False: 287]
  ------------------
  171|      0|                status = U_MEMORY_ALLOCATION_ERROR;
  172|    287|            } else {
  173|    287|                uprv_strcpy(newKey, key);
  ------------------
  |  |   36|    287|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|    287|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  174|    287|            }
  175|    287|        }
  176|    287|        if (U_SUCCESS(status)) {
  ------------------
  |  Branch (176:13): [True: 287, False: 0]
  ------------------
  177|    287|            cacheEntry = static_cast<TimeZoneNamesCacheEntry*>(uprv_malloc(sizeof(TimeZoneNamesCacheEntry)));
  ------------------
  |  | 1524|    287|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  178|    287|            if (cacheEntry == nullptr) {
  ------------------
  |  Branch (178:17): [True: 0, False: 287]
  ------------------
  179|      0|                status = U_MEMORY_ALLOCATION_ERROR;
  180|    287|            } else {
  181|    287|                cacheEntry->names = tznames;
  182|       |                // The initial refCount is 2 because the entry is referenced both
  183|       |                // by this TimeZoneDelegate and by the gTimeZoneNamesCache
  184|    287|                cacheEntry->refCount = 2;
  185|    287|                cacheEntry->lastAccess = static_cast<double>(uprv_getUTCtime());
  ------------------
  |  | 1512|    287|#define uprv_getUTCtime U_ICU_ENTRY_POINT_RENAME(uprv_getUTCtime)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  186|       |
  187|    287|                uhash_put(gTimeZoneNamesCache, newKey, cacheEntry, &status);
  ------------------
  |  | 1032|    287|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|    287|            }
  189|    287|        }
  190|    287|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (190:13): [True: 0, False: 287]
  ------------------
  191|      0|            delete tznames;
  192|      0|            if (newKey != nullptr) {
  ------------------
  |  Branch (192:17): [True: 0, False: 0]
  ------------------
  193|      0|                uprv_free(newKey);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  194|      0|            }
  195|      0|            if (cacheEntry != nullptr) {
  ------------------
  |  Branch (195:17): [True: 0, False: 0]
  ------------------
  196|      0|                uprv_free(cacheEntry);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|      0|            }
  198|      0|            cacheEntry = nullptr;
  199|      0|        }
  200|    287|    } else {
  201|       |        // Update the reference count
  202|    133|        cacheEntry->refCount++;
  203|    133|        cacheEntry->lastAccess = static_cast<double>(uprv_getUTCtime());
  ------------------
  |  | 1512|    133|#define uprv_getUTCtime U_ICU_ENTRY_POINT_RENAME(uprv_getUTCtime)
  |  |  ------------------
  |  |  |  |  123|    133|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    133|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    133|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  204|    133|    }
  205|    420|    gAccessCount++;
  206|    420|    if (gAccessCount >= SWEEP_INTERVAL) {
  ------------------
  |  |   41|    420|#define SWEEP_INTERVAL 100
  ------------------
  |  Branch (206:9): [True: 4, False: 416]
  ------------------
  207|       |        // sweep
  208|      4|        sweepCache();
  209|      4|        gAccessCount = 0;
  210|      4|    }
  211|    420|    fTZnamesCacheEntry = cacheEntry;
  212|    420|}
_ZN6icu_7821TimeZoneNamesDelegateD2Ev:
  214|    420|TimeZoneNamesDelegate::~TimeZoneNamesDelegate() {
  215|    420|    umtx_lock(&gTimeZoneNamesLock);
  ------------------
  |  | 1250|    420|#define umtx_lock U_ICU_ENTRY_POINT_RENAME(umtx_lock)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  216|    420|    {
  217|    420|        if (fTZnamesCacheEntry) {
  ------------------
  |  Branch (217:13): [True: 420, False: 0]
  ------------------
  218|    420|            if (fTZnamesCacheEntry->refCount <= 1) {
  ------------------
  |  Branch (218:17): [True: 0, False: 420]
  ------------------
  219|      0|                delete fTZnamesCacheEntry->names;
  220|      0|                uprv_free(fTZnamesCacheEntry);
  ------------------
  |  | 1503|      0|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  221|    420|            } else {
  222|       |                // Just decrement the reference count
  223|    420|                fTZnamesCacheEntry->refCount--;
  224|    420|            }
  225|    420|        }
  226|    420|    }
  227|    420|    umtx_unlock(&gTimeZoneNamesLock);
  ------------------
  |  | 1251|    420|#define umtx_unlock U_ICU_ENTRY_POINT_RENAME(umtx_unlock)
  |  |  ------------------
  |  |  |  |  123|    420|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    420|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    420|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  228|    420|}
_ZN6icu_7821TimeZoneNamesDelegate19loadAllDisplayNamesER10UErrorCode:
  295|    420|TimeZoneNamesDelegate::loadAllDisplayNames(UErrorCode& status) {
  296|    420|    fTZnamesCacheEntry->names->loadAllDisplayNames(status);
  297|    420|}
_ZNK6icu_7821TimeZoneNamesDelegate15getDisplayNamesERKNS_13UnicodeStringEPK17UTimeZoneNameTypeidPS1_R10UErrorCode:
  300|   267k|TimeZoneNamesDelegate::getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[], UErrorCode& status) const {
  301|   267k|    fTZnamesCacheEntry->names->getDisplayNames(tzID, types, numTypes, date, dest, status);
  302|   267k|}
_ZN6icu_7813TimeZoneNamesD2Ev:
  312|    420|TimeZoneNames::~TimeZoneNames() {
  313|    420|}
_ZN6icu_7813TimeZoneNames14createInstanceERKNS_6LocaleER10UErrorCode:
  316|    420|TimeZoneNames::createInstance(const Locale& locale, UErrorCode& status) {
  317|    420|    TimeZoneNames *instance = nullptr;
  318|    420|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (318:9): [True: 420, False: 0]
  ------------------
  319|    420|        instance = new TimeZoneNamesDelegate(locale, status);
  320|    420|        if (instance == nullptr && U_SUCCESS(status)) {
  ------------------
  |  Branch (320:13): [True: 0, False: 420]
  |  Branch (320:36): [True: 0, False: 0]
  ------------------
  321|      0|            status = U_MEMORY_ALLOCATION_ERROR;
  322|      0|        }
  323|    420|    }
  324|    420|    return instance;
  325|    420|}
tznames.cpp:_ZN6icu_78L10sweepCacheEv:
   89|      4|static void sweepCache() {
   90|      4|    int32_t pos = UHASH_FIRST;
  ------------------
  |  |  610|      4|#define UHASH_FIRST (-1)
  ------------------
   91|      4|    const UHashElement* elem;
   92|      4|    double now = static_cast<double>(uprv_getUTCtime());
  ------------------
  |  | 1512|      4|#define uprv_getUTCtime U_ICU_ENTRY_POINT_RENAME(uprv_getUTCtime)
  |  |  ------------------
  |  |  |  |  123|      4|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      4|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      4|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   93|       |
   94|    828|    while ((elem = uhash_nextElement(gTimeZoneNamesCache, &pos)) != nullptr) {
  ------------------
  |  | 1029|    828|#define uhash_nextElement U_ICU_ENTRY_POINT_RENAME(uhash_nextElement)
  |  |  ------------------
  |  |  |  |  123|    828|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    828|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    828|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (94:12): [True: 824, False: 4]
  ------------------
   95|    824|        TimeZoneNamesCacheEntry* entry = static_cast<TimeZoneNamesCacheEntry*>(elem->value.pointer);
   96|    824|        if (entry->refCount <= 0 && (now - entry->lastAccess) > CACHE_EXPIRATION) {
  ------------------
  |  |   47|      0|#define CACHE_EXPIRATION 180000.0
  ------------------
  |  Branch (96:13): [True: 0, False: 824]
  |  Branch (96:37): [True: 0, False: 0]
  ------------------
   97|       |            // delete this entry
   98|      0|            uhash_removeElement(gTimeZoneNamesCache, elem);
  ------------------
  |  | 1037|      0|#define uhash_removeElement U_ICU_ENTRY_POINT_RENAME(uhash_removeElement)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   99|      0|        }
  100|    824|    }
  101|      4|}

_ZN6icu_7811TextTrieMapC2EaPFvPvE:
  190|    287|: fIgnoreCase(ignoreCase), fNodes(nullptr), fNodesCapacity(0), fNodesCount(0), 
  191|    287|  fLazyContents(nullptr), fIsEmpty(true), fValueDeleter(valueDeleter) {
  192|    287|}
_ZN6icu_786ZNames12ZNamesLoaderD2Ev:
  856|   233k|ZNames::ZNamesLoader::~ZNamesLoader() {}
_ZN6icu_7822MetaZoneIDsEnumerationC2Ev:
  883|  12.0k|: fLen(0), fPos(0), fMetaZoneIDs(nullptr), fLocalVector(nullptr) {
  884|  12.0k|}
_ZN6icu_7822MetaZoneIDsEnumerationC2ENS_12LocalPointerINS_7UVectorEEE:
  892|  60.9k|: fLen(0), fPos(0), fMetaZoneIDs(nullptr), fLocalVector(std::move(mzIDs)) {
  893|  60.9k|    fMetaZoneIDs = fLocalVector.getAlias();
  894|  60.9k|    if (fMetaZoneIDs) {
  ------------------
  |  Branch (894:9): [True: 60.9k, False: 0]
  ------------------
  895|  60.9k|        fLen = fMetaZoneIDs->size();
  896|  60.9k|    }
  897|  60.9k|}
_ZN6icu_7822MetaZoneIDsEnumeration5snextER10UErrorCode:
  900|   154k|MetaZoneIDsEnumeration::snext(UErrorCode& status) {
  901|   154k|    if (U_SUCCESS(status) && fMetaZoneIDs != nullptr && fPos < fLen) {
  ------------------
  |  Branch (901:9): [True: 154k, False: 0]
  |  Branch (901:30): [True: 142k, False: 12.0k]
  |  Branch (901:57): [True: 81.5k, False: 60.9k]
  ------------------
  902|  81.5k|        unistr.setTo(static_cast<const char16_t*>(fMetaZoneIDs->elementAt(fPos++)), -1);
  903|  81.5k|        return &unistr;
  904|  81.5k|    }
  905|  73.0k|    return nullptr;
  906|   154k|}
_ZN6icu_7822MetaZoneIDsEnumerationD2Ev:
  918|  73.0k|MetaZoneIDsEnumeration::~MetaZoneIDsEnumeration() {
  919|  73.0k|}
_ZN6icu_7817TimeZoneNamesImplC2ERKNS_6LocaleER10UErrorCode:
 1026|    287|: fLocale(locale),
 1027|    287|  fZoneStrings(nullptr),
 1028|    287|  fTZNamesMap(nullptr),
 1029|    287|  fMZNamesMap(nullptr),
 1030|    287|  fNamesTrieFullyLoaded(false),
 1031|    287|  fNamesFullyLoaded(false),
 1032|    287|  fNamesTrie(true, deleteZNameInfo) {
 1033|    287|    initialize(locale, status);
 1034|    287|}
_ZN6icu_7817TimeZoneNamesImpl10initializeERKNS_6LocaleER10UErrorCode:
 1037|    287|TimeZoneNamesImpl::initialize(const Locale& locale, UErrorCode& status) {
 1038|    287|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1038:9): [True: 0, False: 287]
  ------------------
 1039|      0|        return;
 1040|      0|    }
 1041|       |
 1042|       |    // Load zoneStrings bundle
 1043|    287|    UErrorCode tmpsts = U_ZERO_ERROR;   // OK with fallback warning..
 1044|    287|    fZoneStrings = ures_open(U_ICUDATA_ZONE, locale.getName(), &tmpsts);
  ------------------
  |  | 1691|    287|#define ures_open U_ICU_ENTRY_POINT_RENAME(ures_open)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  fZoneStrings = ures_open(U_ICUDATA_ZONE, locale.getName(), &tmpsts);
  ------------------
  |  |   22|    287|#define U_ICUDATA_ZONE U_ICUDATA_NAME U_TREE_SEPARATOR_STRING "zone"
  |  |  ------------------
  |  |  |  |  154|    287|#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER
  |  |  ------------------
  ------------------
 1045|    287|    fZoneStrings = ures_getByKeyWithFallback(fZoneStrings, gZoneStrings, fZoneStrings, &tmpsts);
  ------------------
  |  | 1662|    287|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1046|    287|    if (U_FAILURE(tmpsts)) {
  ------------------
  |  Branch (1046:9): [True: 0, False: 287]
  ------------------
 1047|      0|        status = tmpsts;
 1048|      0|        cleanup();
 1049|      0|        return;
 1050|      0|    }
 1051|       |
 1052|       |    // Initialize hashtables holding time zone/meta zone names
 1053|    287|    fMZNamesMap = uhash_open(uhash_hashUChars, uhash_compareUChars, nullptr, &status);
  ------------------
  |  | 1030|    287|#define uhash_open U_ICU_ENTRY_POINT_RENAME(uhash_open)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  fMZNamesMap = uhash_open(uhash_hashUChars, uhash_compareUChars, nullptr, &status);
  ------------------
  |  | 1016|    287|#define uhash_hashUChars U_ICU_ENTRY_POINT_RENAME(uhash_hashUChars)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  fMZNamesMap = uhash_open(uhash_hashUChars, uhash_compareUChars, nullptr, &status);
  ------------------
  |  |  998|    287|#define uhash_compareUChars U_ICU_ENTRY_POINT_RENAME(uhash_compareUChars)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1054|    287|    fTZNamesMap = uhash_open(uhash_hashUChars, uhash_compareUChars, nullptr, &status);
  ------------------
  |  | 1030|    287|#define uhash_open U_ICU_ENTRY_POINT_RENAME(uhash_open)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  fTZNamesMap = uhash_open(uhash_hashUChars, uhash_compareUChars, nullptr, &status);
  ------------------
  |  | 1016|    287|#define uhash_hashUChars U_ICU_ENTRY_POINT_RENAME(uhash_hashUChars)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  fTZNamesMap = uhash_open(uhash_hashUChars, uhash_compareUChars, nullptr, &status);
  ------------------
  |  |  998|    287|#define uhash_compareUChars U_ICU_ENTRY_POINT_RENAME(uhash_compareUChars)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1055|    287|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1055:9): [True: 0, False: 287]
  ------------------
 1056|      0|        cleanup();
 1057|      0|        return;
 1058|      0|    }
 1059|       |
 1060|    287|    uhash_setValueDeleter(fMZNamesMap, deleteZNames);
  ------------------
  |  | 1044|    287|#define uhash_setValueDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setValueDeleter)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1061|    287|    uhash_setValueDeleter(fTZNamesMap, deleteZNames);
  ------------------
  |  | 1044|    287|#define uhash_setValueDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setValueDeleter)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1062|       |    // no key deleters for name maps
 1063|       |
 1064|       |    // preload zone strings for the default zone
 1065|    287|    TimeZone *tz = TimeZone::createDefault();
 1066|    287|    const char16_t *tzID = ZoneMeta::getCanonicalCLDRID(*tz);
 1067|    287|    if (tzID != nullptr) {
  ------------------
  |  Branch (1067:9): [True: 287, False: 0]
  ------------------
 1068|    287|        loadStrings(UnicodeString(tzID), status);
 1069|    287|    }
 1070|    287|    delete tz;
 1071|    287|}
_ZN6icu_7817TimeZoneNamesImpl11loadStringsERKNS_13UnicodeStringER10UErrorCode:
 1078|  73.0k|TimeZoneNamesImpl::loadStrings(const UnicodeString& tzCanonicalID, UErrorCode& status) {
 1079|  73.0k|    loadTimeZoneNames(tzCanonicalID, status);
 1080|  73.0k|    LocalPointer<StringEnumeration> mzIDs(getAvailableMetaZoneIDs(tzCanonicalID, status));
 1081|  73.0k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1081:9): [True: 0, False: 73.0k]
  ------------------
 1082|  73.0k|    U_ASSERT(!mzIDs.isNull());
  ------------------
  |  |   35|  73.0k|#   define U_ASSERT(exp) (void)0
  ------------------
 1083|       |
 1084|  73.0k|    const UnicodeString *mzID;
 1085|   154k|    while (((mzID = mzIDs->snext(status)) != nullptr) && U_SUCCESS(status)) {
  ------------------
  |  Branch (1085:12): [True: 81.5k, False: 73.0k]
  |  Branch (1085:58): [True: 81.5k, False: 0]
  ------------------
 1086|  81.5k|        loadMetaZoneNames(*mzID, status);
 1087|  81.5k|    }
 1088|  73.0k|}
_ZNK6icu_7817TimeZoneNamesImpl23getAvailableMetaZoneIDsERKNS_13UnicodeStringER10UErrorCode:
 1144|  73.0k|TimeZoneNamesImpl::getAvailableMetaZoneIDs(const UnicodeString& tzID, UErrorCode& status) const {
 1145|  73.0k|    return TimeZoneNamesImpl::_getAvailableMetaZoneIDs(tzID, status);
 1146|  73.0k|}
_ZN6icu_7817TimeZoneNamesImpl24_getAvailableMetaZoneIDsERKNS_13UnicodeStringER10UErrorCode:
 1150|  73.0k|TimeZoneNamesImpl::_getAvailableMetaZoneIDs(const UnicodeString& tzID, UErrorCode& status) {
 1151|  73.0k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1151:9): [True: 0, False: 73.0k]
  ------------------
 1152|      0|        return nullptr;
 1153|      0|    }
 1154|  73.0k|    const UVector* mappings = ZoneMeta::getMetazoneMappings(tzID);
 1155|  73.0k|    if (mappings == nullptr) {
  ------------------
  |  Branch (1155:9): [True: 12.0k, False: 60.9k]
  ------------------
 1156|  12.0k|        return new MetaZoneIDsEnumeration();
 1157|  12.0k|    }
 1158|       |
 1159|  60.9k|    LocalPointer<MetaZoneIDsEnumeration> senum;
 1160|  60.9k|    LocalPointer<UVector> mzIDs(new UVector(nullptr, uhash_compareUChars, status), status);
  ------------------
  |  |  998|  60.9k|#define uhash_compareUChars U_ICU_ENTRY_POINT_RENAME(uhash_compareUChars)
  |  |  ------------------
  |  |  |  |  123|  60.9k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  60.9k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  60.9k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1161|  60.9k|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (1161:9): [True: 60.9k, False: 0]
  ------------------
 1162|  60.9k|        U_ASSERT(mzIDs.isValid());
  ------------------
  |  |   35|  60.9k|#   define U_ASSERT(exp) (void)0
  ------------------
 1163|   158k|        for (int32_t i = 0; U_SUCCESS(status) && i < mappings->size(); i++) {
  ------------------
  |  Branch (1163:29): [True: 158k, False: 0]
  |  Branch (1163:50): [True: 97.3k, False: 60.9k]
  ------------------
 1164|       |
 1165|  97.3k|            OlsonToMetaMappingEntry* map = static_cast<OlsonToMetaMappingEntry*>(mappings->elementAt(i));
 1166|  97.3k|            const char16_t *mzID = map->mzid;
 1167|  97.3k|            if (!mzIDs->contains((void *)mzID)) {
  ------------------
  |  Branch (1167:17): [True: 81.5k, False: 15.8k]
  ------------------
 1168|  81.5k|                mzIDs->addElement((void *)mzID, status);
 1169|  81.5k|            }
 1170|  97.3k|        }
 1171|  60.9k|        if (U_SUCCESS(status)) {
  ------------------
  |  Branch (1171:13): [True: 60.9k, False: 0]
  ------------------
 1172|  60.9k|            senum.adoptInsteadAndCheckErrorCode(new MetaZoneIDsEnumeration(std::move(mzIDs)), status);
 1173|  60.9k|        }
 1174|  60.9k|    }
 1175|  60.9k|    return U_SUCCESS(status) ? senum.orphan() : nullptr;
  ------------------
  |  Branch (1175:12): [True: 60.9k, False: 0]
  ------------------
 1176|  73.0k|}
_ZNK6icu_7817TimeZoneNamesImpl13getMetaZoneIDERKNS_13UnicodeStringEdRS1_:
 1179|   267k|TimeZoneNamesImpl::getMetaZoneID(const UnicodeString& tzID, UDate date, UnicodeString& mzID) const {
 1180|   267k|    return TimeZoneNamesImpl::_getMetaZoneID(tzID, date, mzID);
 1181|   267k|}
_ZN6icu_7817TimeZoneNamesImpl14_getMetaZoneIDERKNS_13UnicodeStringEdRS1_:
 1185|   267k|TimeZoneNamesImpl::_getMetaZoneID(const UnicodeString& tzID, UDate date, UnicodeString& mzID) {
 1186|   267k|    ZoneMeta::getMetazoneID(tzID, date, mzID);
 1187|   267k|    return mzID;
 1188|   267k|}
_ZN6icu_7817TimeZoneNamesImpl17loadMetaZoneNamesERKNS_13UnicodeStringER10UErrorCode:
 1312|   322k|TimeZoneNamesImpl::loadMetaZoneNames(const UnicodeString& mzID, UErrorCode& status) {
 1313|   322k|    if (U_FAILURE(status)) { return nullptr; }
  ------------------
  |  Branch (1313:9): [True: 0, False: 322k]
  ------------------
 1314|   322k|    if (mzID.length() > ZID_KEY_MAX - MZ_PREFIX_LEN) {
  ------------------
  |  |   42|   322k|#define ZID_KEY_MAX  128
  ------------------
                  if (mzID.length() > ZID_KEY_MAX - MZ_PREFIX_LEN) {
  ------------------
  |  |   43|   322k|#define MZ_PREFIX_LEN 5
  ------------------
  |  Branch (1314:9): [True: 0, False: 322k]
  ------------------
 1315|      0|        status = U_INTERNAL_PROGRAM_ERROR;
 1316|      0|        return nullptr;
 1317|      0|    }
 1318|       |
 1319|   322k|    char16_t mzIDKey[ZID_KEY_MAX + 1];
 1320|   322k|    mzID.extract(mzIDKey, ZID_KEY_MAX, status);
  ------------------
  |  |   42|   322k|#define ZID_KEY_MAX  128
  ------------------
 1321|   322k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1321:9): [True: 0, False: 322k]
  ------------------
 1322|      0|        return nullptr;
 1323|      0|    }
 1324|   322k|    mzIDKey[mzID.length()] = 0;
 1325|       |
 1326|   322k|    void* mznames = uhash_get(fMZNamesMap, mzIDKey);
  ------------------
  |  | 1007|   322k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|   322k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   322k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   322k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1327|   322k|    if (mznames == nullptr) {
  ------------------
  |  Branch (1327:9): [True: 17.4k, False: 305k]
  ------------------
 1328|  17.4k|        ZNames::ZNamesLoader loader;
 1329|  17.4k|        loader.loadMetaZone(fZoneStrings, mzID, status);
 1330|  17.4k|        mznames = ZNames::createMetaZoneAndPutInCache(fMZNamesMap, loader.getNames(), mzID, status);
 1331|  17.4k|        if (U_FAILURE(status)) { return nullptr; }
  ------------------
  |  Branch (1331:13): [True: 0, False: 17.4k]
  ------------------
 1332|  17.4k|    }
 1333|       |
 1334|   322k|    if (mznames != EMPTY) {
  ------------------
  |  Branch (1334:9): [True: 232k, False: 89.6k]
  ------------------
 1335|   232k|        return static_cast<ZNames*>(mznames);
 1336|   232k|    } else {
 1337|  89.6k|        return nullptr;
 1338|  89.6k|    }
 1339|   322k|}
_ZN6icu_7817TimeZoneNamesImpl17loadTimeZoneNamesERKNS_13UnicodeStringER10UErrorCode:
 1345|   340k|TimeZoneNamesImpl::loadTimeZoneNames(const UnicodeString& tzID, UErrorCode& status) {
 1346|   340k|    if (U_FAILURE(status)) { return nullptr; }
  ------------------
  |  Branch (1346:9): [True: 0, False: 340k]
  ------------------
 1347|   340k|    if (tzID.length() > ZID_KEY_MAX) {
  ------------------
  |  |   42|   340k|#define ZID_KEY_MAX  128
  ------------------
  |  Branch (1347:9): [True: 0, False: 340k]
  ------------------
 1348|      0|        status = U_INTERNAL_PROGRAM_ERROR;
 1349|      0|        return nullptr;
 1350|      0|    }
 1351|       |
 1352|   340k|    char16_t tzIDKey[ZID_KEY_MAX + 1];
 1353|   340k|    int32_t tzIDKeyLen = tzID.extract(tzIDKey, ZID_KEY_MAX, status);
  ------------------
  |  |   42|   340k|#define ZID_KEY_MAX  128
  ------------------
 1354|   340k|    U_ASSERT(U_SUCCESS(status));   // already checked length above
  ------------------
  |  |   35|   340k|#   define U_ASSERT(exp) (void)0
  ------------------
 1355|   340k|    tzIDKey[tzIDKeyLen] = 0;
 1356|       |
 1357|   340k|    void *tznames = uhash_get(fTZNamesMap, tzIDKey);
  ------------------
  |  | 1007|   340k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|   340k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   340k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   340k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1358|   340k|    if (tznames == nullptr) {
  ------------------
  |  Branch (1358:9): [True: 124k, False: 216k]
  ------------------
 1359|   124k|        ZNames::ZNamesLoader loader;
 1360|   124k|        loader.loadTimeZone(fZoneStrings, tzID, status);
 1361|   124k|        tznames = ZNames::createTimeZoneAndPutInCache(fTZNamesMap, loader.getNames(), tzID, status);
 1362|   124k|        if (U_FAILURE(status)) { return nullptr; }
  ------------------
  |  Branch (1362:13): [True: 0, False: 124k]
  ------------------
 1363|   124k|    }
 1364|       |
 1365|       |    // tznames is never EMPTY
 1366|   340k|    return static_cast<ZNames*>(tznames);
 1367|   340k|}
_ZN6icu_7817TimeZoneNamesImpl17ZoneStringsLoaderD2Ev:
 1597|    287|TimeZoneNamesImpl::ZoneStringsLoader::~ZoneStringsLoader() {
 1598|    287|    uhash_close(keyToLoader);
  ------------------
  |  |  991|    287|#define uhash_close U_ICU_ENTRY_POINT_RENAME(uhash_close)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1599|    287|}
_ZN6icu_7817TimeZoneNamesImpl19loadAllDisplayNamesER10UErrorCode:
 1601|    420|void TimeZoneNamesImpl::loadAllDisplayNames(UErrorCode& status) {
 1602|    420|    if (U_FAILURE(status)) return;
  ------------------
  |  Branch (1602:9): [True: 0, False: 420]
  ------------------
 1603|       |
 1604|    420|    {
 1605|    420|        Mutex lock(&gDataMutex);
 1606|    420|        internalLoadAllDisplayNames(status);
 1607|    420|    }
 1608|    420|}
_ZNK6icu_7817TimeZoneNamesImpl15getDisplayNamesERKNS_13UnicodeStringEPK17UTimeZoneNameTypeidPS1_R10UErrorCode:
 1612|   267k|        UDate date, UnicodeString dest[], UErrorCode& status) const {
 1613|   267k|    if (U_FAILURE(status)) return;
  ------------------
  |  Branch (1613:9): [True: 0, False: 267k]
  ------------------
 1614|       |
 1615|   267k|    if (tzID.isEmpty()) { return; }
  ------------------
  |  Branch (1615:9): [True: 0, False: 267k]
  ------------------
 1616|   267k|    void* tznames = nullptr;
 1617|   267k|    void* mznames = nullptr;
 1618|   267k|    TimeZoneNamesImpl *nonConstThis = const_cast<TimeZoneNamesImpl*>(this);
 1619|       |
 1620|       |    // Load the time zone strings
 1621|   267k|    {
 1622|   267k|        Mutex lock(&gDataMutex);
 1623|   267k|        tznames = (void*) nonConstThis->loadTimeZoneNames(tzID, status);
 1624|   267k|        if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1624:13): [True: 0, False: 267k]
  ------------------
 1625|   267k|    }
 1626|   267k|    U_ASSERT(tznames != nullptr);
  ------------------
  |  |   35|   267k|#   define U_ASSERT(exp) (void)0
  ------------------
 1627|       |
 1628|       |    // Load the values into the dest array
 1629|  1.33M|    for (int i = 0; i < numTypes; i++) {
  ------------------
  |  Branch (1629:21): [True: 1.07M, False: 267k]
  ------------------
 1630|  1.07M|        UTimeZoneNameType type = types[i];
 1631|  1.07M|        const char16_t* name = static_cast<ZNames*>(tznames)->getName(type);
 1632|  1.07M|        if (name == nullptr) {
  ------------------
  |  Branch (1632:13): [True: 1.07M, False: 1.47k]
  ------------------
 1633|  1.07M|            if (mznames == nullptr) {
  ------------------
  |  Branch (1633:17): [True: 267k, False: 802k]
  ------------------
 1634|       |                // Load the meta zone name
 1635|   267k|                UnicodeString mzID;
 1636|   267k|                getMetaZoneID(tzID, date, mzID);
 1637|   267k|                if (mzID.isEmpty()) {
  ------------------
  |  Branch (1637:21): [True: 26.8k, False: 241k]
  ------------------
 1638|  26.8k|                    mznames = (void*) EMPTY;
 1639|   241k|                } else {
 1640|       |                    // Load the meta zone strings
 1641|       |                    // Mutex is scoped to the "else" statement
 1642|   241k|                    Mutex lock(&gDataMutex);
 1643|   241k|                    mznames = (void*) nonConstThis->loadMetaZoneNames(mzID, status);
 1644|   241k|                    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1644:25): [True: 0, False: 241k]
  ------------------
 1645|       |                    // Note: when the metazone doesn't exist, in Java, loadMetaZoneNames returns
 1646|       |                    // a dummy object instead of nullptr.
 1647|   241k|                    if (mznames == nullptr) {
  ------------------
  |  Branch (1647:25): [True: 55.2k, False: 185k]
  ------------------
 1648|  55.2k|                        mznames = (void*) EMPTY;
 1649|  55.2k|                    }
 1650|   241k|                }
 1651|   267k|            }
 1652|  1.07M|            U_ASSERT(mznames != nullptr);
  ------------------
  |  |   35|  1.07M|#   define U_ASSERT(exp) (void)0
  ------------------
 1653|  1.07M|            if (mznames != EMPTY) {
  ------------------
  |  Branch (1653:17): [True: 742k, False: 327k]
  ------------------
 1654|   742k|                name = static_cast<ZNames*>(mznames)->getName(type);
 1655|   742k|            }
 1656|  1.07M|        }
 1657|  1.07M|        if (name != nullptr) {
  ------------------
  |  Branch (1657:13): [True: 349k, False: 722k]
  ------------------
 1658|   349k|            dest[i].setTo(true, name, -1);
 1659|   722k|        } else {
 1660|   722k|            dest[i].setToBogus();
 1661|   722k|        }
 1662|  1.07M|    }
 1663|   267k|}
_ZN6icu_7817TimeZoneNamesImpl27internalLoadAllDisplayNamesER10UErrorCode:
 1666|    420|void TimeZoneNamesImpl::internalLoadAllDisplayNames(UErrorCode& status) {
 1667|    420|    if (!fNamesFullyLoaded) {
  ------------------
  |  Branch (1667:9): [True: 287, False: 133]
  ------------------
 1668|    287|        fNamesFullyLoaded = true;
 1669|       |
 1670|    287|        ZoneStringsLoader loader(*this, status);
 1671|    287|        loader.load(status);
 1672|    287|        if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1672:13): [True: 0, False: 287]
  ------------------
 1673|       |
 1674|    287|        const UnicodeString *id;
 1675|       |
 1676|       |        // load strings for all zones
 1677|    287|        StringEnumeration *tzIDs = TimeZone::createTimeZoneIDEnumeration(
 1678|    287|            UCAL_ZONE_TYPE_CANONICAL, nullptr, nullptr, status);
 1679|    287|        if (U_SUCCESS(status)) {
  ------------------
  |  Branch (1679:13): [True: 287, False: 0]
  ------------------
 1680|   132k|            while ((id = tzIDs->snext(status)) != nullptr) {
  ------------------
  |  Branch (1680:20): [True: 131k, False: 287]
  ------------------
 1681|   131k|                if (U_FAILURE(status)) {
  ------------------
  |  Branch (1681:21): [True: 0, False: 131k]
  ------------------
 1682|      0|                    break;
 1683|      0|                }
 1684|   131k|                UnicodeString copy(*id);
 1685|   131k|                void* value = uhash_get(fTZNamesMap, copy.getTerminatedBuffer());
  ------------------
  |  | 1007|   131k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|   131k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   131k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   131k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1686|   131k|                if (value == nullptr) {
  ------------------
  |  Branch (1686:21): [True: 72.7k, False: 59.0k]
  ------------------
 1687|       |                    // loadStrings also loads related metazone strings
 1688|  72.7k|                    loadStrings(*id, status);
 1689|  72.7k|                }
 1690|   131k|            }
 1691|    287|        }
 1692|    287|        delete tzIDs;
 1693|    287|    }
 1694|    420|}
_ZN6icu_7817TimeZoneNamesImpl30getDefaultExemplarLocationNameERKNS_13UnicodeStringERS1_:
 1706|   124k|TimeZoneNamesImpl::getDefaultExemplarLocationName(const UnicodeString& tzID, UnicodeString& name) {
 1707|   124k|    if (tzID.isEmpty() || tzID.startsWith(gEtcPrefix, gEtcPrefixLen)
  ------------------
  |  Branch (1707:9): [True: 0, False: 124k]
  |  Branch (1707:9): [True: 13.7k, False: 110k]
  |  Branch (1707:27): [True: 10.0k, False: 114k]
  ------------------
 1708|   124k|        || tzID.startsWith(gSystemVPrefix, gSystemVPrefixLen) || tzID.indexOf(gRiyadh8, gRiyadh8Len, 0) > 0) {
  ------------------
  |  Branch (1708:12): [True: 3.73k, False: 110k]
  |  Branch (1708:66): [True: 0, False: 110k]
  ------------------
 1709|  13.7k|        name.setToBogus();
 1710|  13.7k|        return name;
 1711|  13.7k|    }
 1712|       |
 1713|   110k|    int32_t sep = tzID.lastIndexOf(static_cast<char16_t>(0x2F) /* '/' */);
 1714|   110k|    if (sep > 0 && sep + 1 < tzID.length()) {
  ------------------
  |  Branch (1714:9): [True: 90.7k, False: 20.0k]
  |  Branch (1714:20): [True: 90.7k, False: 0]
  ------------------
 1715|  90.7k|        name.setTo(tzID, sep + 1);
 1716|  90.7k|        name.findAndReplace(UnicodeString(static_cast<char16_t>(0x5f) /* _ */),
 1717|  90.7k|                            UnicodeString(static_cast<char16_t>(0x20) /* space */));
 1718|  90.7k|    } else {
 1719|  20.0k|        name.setToBogus();
 1720|  20.0k|    }
 1721|   110k|    return name;
 1722|   124k|}
_ZNK6icu_786ZNames7getNameE17UTimeZoneNameType:
  697|  1.81M|    const char16_t* getName(UTimeZoneNameType type) const {
  698|  1.81M|        UTimeZoneNameTypeIndex index = getTZNameTypeIndex(type);
  699|  1.81M|        return index >= 0 ? fNames[index] : nullptr;
  ------------------
  |  Branch (699:16): [True: 1.81M, False: 0]
  ------------------
  700|  1.81M|    }
_ZN6icu_786ZNames18getTZNameTypeIndexE17UTimeZoneNameType:
  584|  1.81M|    static UTimeZoneNameTypeIndex getTZNameTypeIndex(UTimeZoneNameType type) {
  585|  1.81M|        switch(type) {
  586|      0|        case UTZNM_EXEMPLAR_LOCATION: return UTZNM_INDEX_EXEMPLAR_LOCATION;
  ------------------
  |  Branch (586:9): [True: 0, False: 1.81M]
  ------------------
  587|      0|        case UTZNM_LONG_GENERIC: return UTZNM_INDEX_LONG_GENERIC;
  ------------------
  |  Branch (587:9): [True: 0, False: 1.81M]
  ------------------
  588|   453k|        case UTZNM_LONG_STANDARD: return UTZNM_INDEX_LONG_STANDARD;
  ------------------
  |  Branch (588:9): [True: 453k, False: 1.36M]
  ------------------
  589|   453k|        case UTZNM_LONG_DAYLIGHT: return UTZNM_INDEX_LONG_DAYLIGHT;
  ------------------
  |  Branch (589:9): [True: 453k, False: 1.36M]
  ------------------
  590|      0|        case UTZNM_SHORT_GENERIC: return UTZNM_INDEX_SHORT_GENERIC;
  ------------------
  |  Branch (590:9): [True: 0, False: 1.81M]
  ------------------
  591|   453k|        case UTZNM_SHORT_STANDARD: return UTZNM_INDEX_SHORT_STANDARD;
  ------------------
  |  Branch (591:9): [True: 453k, False: 1.36M]
  ------------------
  592|   453k|        case UTZNM_SHORT_DAYLIGHT: return UTZNM_INDEX_SHORT_DAYLIGHT;
  ------------------
  |  Branch (592:9): [True: 453k, False: 1.36M]
  ------------------
  593|      0|        default: return UTZNM_INDEX_UNKNOWN;
  ------------------
  |  Branch (593:9): [True: 0, False: 1.81M]
  ------------------
  594|  1.81M|        }
  595|  1.81M|    }
_ZN6icu_786ZNames12ZNamesLoaderC2Ev:
  741|   233k|    ZNamesLoader() {
  742|   233k|        clear();
  743|   233k|    }
_ZN6icu_786ZNames12ZNamesLoader5clearEv:
  747|   375k|    void clear() {
  748|   375k|        uprv_memcpy(names, EMPTY_NAMES, sizeof(names));
  ------------------
  |  |   42|   375k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|   375k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|   375k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|   375k|    _Pragma("clang diagnostic push") \
  |  |   45|   375k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|   375k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|   375k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|   375k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|   375k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|   375k|    _Pragma("clang diagnostic pop") \
  |  |   49|   375k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|   375k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|   375k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|   375k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  749|   375k|    }
_ZN6icu_786ZNames12ZNamesLoader12loadMetaZoneEPK15UResourceBundleRKNS_13UnicodeStringER10UErrorCode:
  751|  17.4k|    void loadMetaZone(const UResourceBundle* zoneStrings, const UnicodeString& mzID, UErrorCode& errorCode) {
  752|  17.4k|        if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (752:13): [True: 0, False: 17.4k]
  ------------------
  753|       |
  754|  17.4k|        char key[ZID_KEY_MAX + 1];
  755|  17.4k|        mergeTimeZoneKey(mzID, key, sizeof(key), errorCode);
  756|       |
  757|  17.4k|        loadNames(zoneStrings, key, errorCode);
  758|  17.4k|    }
_ZN6icu_786ZNames12ZNamesLoader9loadNamesEPK15UResourceBundlePKcR10UErrorCode:
  779|   141k|    void loadNames(const UResourceBundle* zoneStrings, const char* key, UErrorCode& errorCode) {
  780|   141k|        U_ASSERT(zoneStrings != nullptr);
  ------------------
  |  |   35|   141k|#   define U_ASSERT(exp) (void)0
  ------------------
  781|   141k|        U_ASSERT(key != nullptr);
  ------------------
  |  |   35|   141k|#   define U_ASSERT(exp) (void)0
  ------------------
  782|   141k|        U_ASSERT(key[0] != '\0');
  ------------------
  |  |   35|   141k|#   define U_ASSERT(exp) (void)0
  ------------------
  783|       |
  784|   141k|        UErrorCode localStatus = U_ZERO_ERROR;
  785|   141k|        clear();
  786|   141k|        ures_getAllItemsWithFallback(zoneStrings, key, *this, localStatus);
  ------------------
  |  | 1658|   141k|#define ures_getAllItemsWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllItemsWithFallback)
  |  |  ------------------
  |  |  |  |  123|   141k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   141k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   141k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  787|       |
  788|       |        // Ignore errors, but propagate possible warnings.
  789|   141k|        if (U_SUCCESS(localStatus)) {
  ------------------
  |  Branch (789:13): [True: 287, False: 141k]
  ------------------
  790|    287|            errorCode = localStatus;
  791|    287|        }
  792|   141k|    }
_ZN6icu_786ZNames27createMetaZoneAndPutInCacheEP10UHashtablePPKDsRKNS_13UnicodeStringER10UErrorCode:
  638|  50.1k|            const UnicodeString& mzID, UErrorCode& status) {
  639|  50.1k|        if (U_FAILURE(status)) { return nullptr; }
  ------------------
  |  Branch (639:13): [True: 0, False: 50.1k]
  ------------------
  640|  50.1k|        U_ASSERT(names != nullptr);
  ------------------
  |  |   35|  50.1k|#   define U_ASSERT(exp) (void)0
  ------------------
  641|       |
  642|       |        // Use the persistent ID as the resource key, so we can
  643|       |        // avoid duplications.
  644|       |        // TODO: Is there a more efficient way, like intern() in Java?
  645|  50.1k|        void* key = (void*) ZoneMeta::findMetaZoneID(mzID);
  646|  50.1k|        void* value;
  647|  50.1k|        if (uprv_memcmp(names, EMPTY_NAMES, sizeof(EMPTY_NAMES)) == 0) {
  ------------------
  |  |  101|  50.1k|#define uprv_memcmp(buffer1, buffer2, size) U_STANDARD_CPP_NAMESPACE memcmp(buffer1, buffer2,size)
  |  |  ------------------
  |  |  |  |  393|  50.1k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (647:13): [True: 17.4k, False: 32.6k]
  ------------------
  648|  17.4k|            value = (void*) EMPTY;
  649|  32.6k|        } else {
  650|  32.6k|            value = (void*) (new ZNames(names, nullptr));
  651|  32.6k|            if (value == nullptr) {
  ------------------
  |  Branch (651:17): [True: 0, False: 32.6k]
  ------------------
  652|      0|                status = U_MEMORY_ALLOCATION_ERROR;
  653|      0|                return nullptr;
  654|      0|            }
  655|  32.6k|        }
  656|  50.1k|        uhash_put(cache, key, value, &status);
  ------------------
  |  | 1032|  50.1k|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|  50.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  50.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  50.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  657|  50.1k|        return value;
  658|  50.1k|    }
_ZN6icu_786ZNamesC2EPPKDsS2_:
  617|   215k|            : fDidAddIntoTrie(false) {
  618|   215k|        uprv_memcpy(fNames, names, sizeof(fNames));
  ------------------
  |  |   42|   215k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|   215k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|   215k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|   215k|    _Pragma("clang diagnostic push") \
  |  |   45|   215k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|   215k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|   215k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|   215k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|   215k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|   215k|    _Pragma("clang diagnostic pop") \
  |  |   49|   215k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|   215k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|   215k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|   215k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  619|   215k|        if (locationName != nullptr) {
  ------------------
  |  Branch (619:13): [True: 90.7k, False: 125k]
  ------------------
  620|  90.7k|            fOwnsLocationName = true;
  621|  90.7k|            fNames[UTZNM_INDEX_EXEMPLAR_LOCATION] = locationName;
  622|   125k|        } else {
  623|   125k|            fOwnsLocationName = false;
  624|   125k|        }
  625|   215k|    }
_ZN6icu_786ZNames12ZNamesLoader8getNamesEv:
  845|   233k|    const char16_t** getNames() {
  846|       |        // Remove 'NO_NAME' references in the array and replace with 'nullptr'
  847|  1.86M|        for (int32_t i = 0; i < UTZNM_INDEX_COUNT; ++i) {
  ------------------
  |  Branch (847:29): [True: 1.63M, False: 233k]
  ------------------
  848|  1.63M|            if (names[i] == NO_NAME) {
  ------------------
  |  Branch (848:17): [True: 578, False: 1.63M]
  ------------------
  849|    578|                names[i] = nullptr;
  850|    578|            }
  851|  1.63M|        }
  852|   233k|        return names;
  853|   233k|    }
_ZN6icu_786ZNames12ZNamesLoader12loadTimeZoneEPK15UResourceBundleRKNS_13UnicodeStringER10UErrorCode:
  760|   124k|    void loadTimeZone(const UResourceBundle* zoneStrings, const UnicodeString& tzID, UErrorCode& errorCode) {
  761|       |        // Replace "/" with ":".
  762|   124k|        UnicodeString uKey(tzID);
  763|  1.72M|        for (int32_t i = 0; i < uKey.length(); i++) {
  ------------------
  |  Branch (763:29): [True: 1.60M, False: 124k]
  ------------------
  764|  1.60M|            if (uKey.charAt(i) == static_cast<char16_t>(0x2F)) {
  ------------------
  |  Branch (764:17): [True: 107k, False: 1.49M]
  ------------------
  765|   107k|                uKey.setCharAt(i, static_cast<char16_t>(0x3A));
  766|   107k|            }
  767|  1.60M|        }
  768|       |
  769|   124k|        char key[ZID_KEY_MAX + 1];
  770|   124k|        if (uKey.length() > ZID_KEY_MAX) {
  ------------------
  |  |   42|   124k|#define ZID_KEY_MAX  128
  ------------------
  |  Branch (770:13): [True: 0, False: 124k]
  ------------------
  771|      0|            errorCode = U_INTERNAL_PROGRAM_ERROR;
  772|      0|            return;
  773|      0|        }
  774|   124k|        uKey.extract(0, uKey.length(), key, sizeof(key), US_INV);
  ------------------
  |  |   98|   124k|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  775|       |
  776|   124k|        loadNames(zoneStrings, key, errorCode);
  777|   124k|    }
_ZN6icu_786ZNames27createTimeZoneAndPutInCacheEP10UHashtablePPKDsRKNS_13UnicodeStringER10UErrorCode:
  661|   183k|            const UnicodeString& tzID, UErrorCode& status) {
  662|   183k|        if (U_FAILURE(status)) { return nullptr; }
  ------------------
  |  Branch (662:13): [True: 0, False: 183k]
  ------------------
  663|   183k|        U_ASSERT(names != nullptr);
  ------------------
  |  |   35|   183k|#   define U_ASSERT(exp) (void)0
  ------------------
  664|       |
  665|       |        // If necessary, compute the location name from the time zone name.
  666|   183k|        char16_t* locationName = nullptr;
  667|   183k|        if (names[UTZNM_INDEX_EXEMPLAR_LOCATION] == nullptr) {
  ------------------
  |  Branch (667:13): [True: 124k, False: 58.7k]
  ------------------
  668|   124k|            UnicodeString locationNameUniStr;
  669|   124k|            TimeZoneNamesImpl::getDefaultExemplarLocationName(tzID, locationNameUniStr);
  670|       |
  671|       |            // Copy the computed location name to the heap
  672|   124k|            if (locationNameUniStr.length() > 0) {
  ------------------
  |  Branch (672:17): [True: 90.7k, False: 33.8k]
  ------------------
  673|  90.7k|                const char16_t* buff = locationNameUniStr.getTerminatedBuffer();
  674|  90.7k|                int32_t len = sizeof(char16_t) * (locationNameUniStr.length() + 1);
  675|  90.7k|                locationName = static_cast<char16_t*>(uprv_malloc(len));
  ------------------
  |  | 1524|  90.7k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  90.7k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  90.7k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  90.7k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  676|  90.7k|                if (locationName == nullptr) {
  ------------------
  |  Branch (676:21): [True: 0, False: 90.7k]
  ------------------
  677|      0|                    status = U_MEMORY_ALLOCATION_ERROR;
  678|      0|                    return nullptr;
  679|      0|                }
  680|  90.7k|                uprv_memcpy(locationName, buff, len);
  ------------------
  |  |   42|  90.7k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  90.7k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  90.7k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  90.7k|    _Pragma("clang diagnostic push") \
  |  |   45|  90.7k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  90.7k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  90.7k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  90.7k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  90.7k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  90.7k|    _Pragma("clang diagnostic pop") \
  |  |   49|  90.7k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  90.7k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  90.7k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  90.7k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  681|  90.7k|            }
  682|   124k|        }
  683|       |
  684|       |        // Use the persistent ID as the resource key, so we can
  685|       |        // avoid duplications.
  686|       |        // TODO: Is there a more efficient way, like intern() in Java?
  687|   183k|        void* key = (void*) ZoneMeta::findTimeZoneID(tzID);
  688|   183k|        void* value = (void*) (new ZNames(names, locationName));
  689|   183k|        if (value == nullptr) {
  ------------------
  |  Branch (689:13): [True: 0, False: 183k]
  ------------------
  690|      0|            status = U_MEMORY_ALLOCATION_ERROR;
  691|      0|            return nullptr;
  692|      0|        }
  693|   183k|        uhash_put(cache, key, value, &status);
  ------------------
  |  | 1032|   183k|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|   183k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   183k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   183k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  694|   183k|        return value;
  695|   183k|    }
_ZN6icu_7817TimeZoneNamesImpl17ZoneStringsLoaderC2ERS0_R10UErrorCode:
 1468|    287|            : tzn(_tzn) {
 1469|    287|        keyToLoader = uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &status);
  ------------------
  |  | 1030|    287|#define uhash_open U_ICU_ENTRY_POINT_RENAME(uhash_open)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      keyToLoader = uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &status);
  ------------------
  |  | 1011|    287|#define uhash_hashChars U_ICU_ENTRY_POINT_RENAME(uhash_hashChars)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      keyToLoader = uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &status);
  ------------------
  |  |  993|    287|#define uhash_compareChars U_ICU_ENTRY_POINT_RENAME(uhash_compareChars)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1470|    287|        if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1470:13): [True: 0, False: 287]
  ------------------
 1471|    287|        uhash_setKeyDeleter(keyToLoader, uprv_free);
  ------------------
  |  | 1040|    287|#define uhash_setKeyDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setKeyDeleter)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      uhash_setKeyDeleter(keyToLoader, uprv_free);
  ------------------
  |  | 1503|    287|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1472|    287|        uhash_setValueDeleter(keyToLoader, deleteZNamesLoader);
  ------------------
  |  | 1044|    287|#define uhash_setValueDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setValueDeleter)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1473|    287|    }
tznames_impl.cpp:_ZN6icu_78L18deleteZNamesLoaderEPv:
 1456|  91.8k|deleteZNamesLoader(void* obj) {
 1457|  91.8k|    if (obj == DUMMY_LOADER) { return; }
  ------------------
  |  Branch (1457:9): [True: 287, False: 91.5k]
  ------------------
 1458|  91.5k|    const ZNames::ZNamesLoader* loader = (const ZNames::ZNamesLoader*) obj;
 1459|  91.5k|    delete loader;
 1460|  91.5k|}
_ZN6icu_7817TimeZoneNamesImpl17ZoneStringsLoader4loadER10UErrorCode:
 1507|    287|    void load(UErrorCode& status) {
 1508|    287|        ures_getAllItemsWithFallback(tzn.fZoneStrings, "", *this, status);
  ------------------
  |  | 1658|    287|#define ures_getAllItemsWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllItemsWithFallback)
  |  |  ------------------
  |  |  |  |  123|    287|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    287|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    287|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1509|    287|        if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1509:13): [True: 0, False: 287]
  ------------------
 1510|       |
 1511|    287|        int32_t pos = UHASH_FIRST;
  ------------------
  |  |  610|    287|#define UHASH_FIRST (-1)
  ------------------
 1512|    287|        const UHashElement* element;
 1513|  92.1k|        while ((element = uhash_nextElement(keyToLoader, &pos)) != nullptr) {
  ------------------
  |  | 1029|  92.1k|#define uhash_nextElement U_ICU_ENTRY_POINT_RENAME(uhash_nextElement)
  |  |  ------------------
  |  |  |  |  123|  92.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  92.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  92.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1513:16): [True: 91.8k, False: 287]
  ------------------
 1514|  91.8k|            if (element->value.pointer == DUMMY_LOADER) { continue; }
  ------------------
  |  Branch (1514:17): [True: 287, False: 91.5k]
  ------------------
 1515|  91.5k|            ZNames::ZNamesLoader* loader = static_cast<ZNames::ZNamesLoader*>(element->value.pointer);
 1516|  91.5k|            char* key = static_cast<char*>(element->key.pointer);
 1517|       |
 1518|  91.5k|            if (isMetaZone(key)) {
  ------------------
  |  Branch (1518:17): [True: 32.6k, False: 58.9k]
  ------------------
 1519|  32.6k|                UnicodeString mzID = mzIDFromKey(key);
 1520|  32.6k|                ZNames::createMetaZoneAndPutInCache(tzn.fMZNamesMap, loader->getNames(), mzID, status);
 1521|  58.9k|            } else {
 1522|  58.9k|                UnicodeString tzID = tzIDFromKey(key);
 1523|  58.9k|                ZNames::createTimeZoneAndPutInCache(tzn.fTZNamesMap, loader->getNames(), tzID, status);
 1524|  58.9k|            }
 1525|  91.5k|            if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1525:17): [True: 0, False: 91.5k]
  ------------------
 1526|  91.5k|        }
 1527|    287|    }
_ZN6icu_7817TimeZoneNamesImpl17ZoneStringsLoader10isMetaZoneEPKc:
 1488|   183k|    UBool isMetaZone(const char* key) {
 1489|   183k|        return (uprv_strlen(key) >= MZ_PREFIX_LEN && uprv_memcmp(key, gMZPrefix, MZ_PREFIX_LEN) == 0);
  ------------------
  |  |   37|   183k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|   183k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
                      return (uprv_strlen(key) >= MZ_PREFIX_LEN && uprv_memcmp(key, gMZPrefix, MZ_PREFIX_LEN) == 0);
  ------------------
  |  |   43|   366k|#define MZ_PREFIX_LEN 5
  ------------------
                      return (uprv_strlen(key) >= MZ_PREFIX_LEN && uprv_memcmp(key, gMZPrefix, MZ_PREFIX_LEN) == 0);
  ------------------
  |  |  101|   183k|#define uprv_memcmp(buffer1, buffer2, size) U_STANDARD_CPP_NAMESPACE memcmp(buffer1, buffer2,size)
  |  |  ------------------
  |  |  |  |  393|   183k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1489:17): [True: 183k, False: 0]
  |  Branch (1489:54): [True: 65.2k, False: 118k]
  ------------------
 1490|   183k|    }
_ZN6icu_7817TimeZoneNamesImpl17ZoneStringsLoader11mzIDFromKeyEPKc:
 1492|  65.2k|    UnicodeString mzIDFromKey(const char* key) {
 1493|  65.2k|        return UnicodeString(key + MZ_PREFIX_LEN, static_cast<int32_t>(uprv_strlen(key)) - MZ_PREFIX_LEN, US_INV);
  ------------------
  |  |   43|  65.2k|#define MZ_PREFIX_LEN 5
  ------------------
                      return UnicodeString(key + MZ_PREFIX_LEN, static_cast<int32_t>(uprv_strlen(key)) - MZ_PREFIX_LEN, US_INV);
  ------------------
  |  |   37|  65.2k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  65.2k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
                      return UnicodeString(key + MZ_PREFIX_LEN, static_cast<int32_t>(uprv_strlen(key)) - MZ_PREFIX_LEN, US_INV);
  ------------------
  |  |   43|  65.2k|#define MZ_PREFIX_LEN 5
  ------------------
                      return UnicodeString(key + MZ_PREFIX_LEN, static_cast<int32_t>(uprv_strlen(key)) - MZ_PREFIX_LEN, US_INV);
  ------------------
  |  |   98|  65.2k|#define US_INV icu::UnicodeString::kInvariant
  ------------------
 1494|  65.2k|    }
_ZN6icu_7817TimeZoneNamesImpl17ZoneStringsLoader11tzIDFromKeyEPKc:
 1496|   118k|    UnicodeString tzIDFromKey(const char* key) {
 1497|   118k|        UnicodeString tzID(key, -1, US_INV);
  ------------------
  |  |   98|   118k|#define US_INV icu::UnicodeString::kInvariant
  ------------------
 1498|       |        // Replace all colons ':' with slashes '/'
 1499|  1.96M|        for (int i=0; i<tzID.length(); i++) {
  ------------------
  |  Branch (1499:23): [True: 1.84M, False: 118k]
  ------------------
 1500|  1.84M|            if (tzID.charAt(i) == 0x003A) {
  ------------------
  |  Branch (1500:17): [True: 126k, False: 1.71M]
  ------------------
 1501|   126k|                tzID.setCharAt(i, 0x002F);
 1502|   126k|            }
 1503|  1.84M|        }
 1504|   118k|        return tzID;
 1505|   118k|    }
tznames_impl.cpp:_ZN6icu_78L16mergeTimeZoneKeyERKNS_13UnicodeStringEPcmR10UErrorCode:
 1283|  17.4k|                             UErrorCode& status) {
 1284|  17.4k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1284:9): [True: 0, False: 17.4k]
  ------------------
 1285|      0|        return;
 1286|      0|    }
 1287|  17.4k|    if (mzID.isEmpty()) {
  ------------------
  |  Branch (1287:9): [True: 0, False: 17.4k]
  ------------------
 1288|      0|        result[0] = '\0';
 1289|      0|        return;
 1290|      0|    }
 1291|       |
 1292|  17.4k|    if (MZ_PREFIX_LEN + 1 > capacity) {
  ------------------
  |  |   43|  17.4k|#define MZ_PREFIX_LEN 5
  ------------------
  |  Branch (1292:9): [True: 0, False: 17.4k]
  ------------------
 1293|      0|        result[0] = '\0';
 1294|      0|        status = U_INTERNAL_PROGRAM_ERROR;
 1295|      0|        return;
 1296|      0|    }
 1297|  17.4k|    uprv_memcpy((void *)result, (void *)gMZPrefix, MZ_PREFIX_LEN);
  ------------------
  |  |   42|  17.4k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  17.4k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  17.4k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  17.4k|    _Pragma("clang diagnostic push") \
  |  |   45|  17.4k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  17.4k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  17.4k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  17.4k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  17.4k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  17.4k|    _Pragma("clang diagnostic pop") \
  |  |   49|  17.4k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  17.4k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  17.4k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  17.4k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1298|  17.4k|    if (static_cast<size_t>(MZ_PREFIX_LEN +  mzID.length() + 1) > capacity) {
  ------------------
  |  |   43|  17.4k|#define MZ_PREFIX_LEN 5
  ------------------
  |  Branch (1298:9): [True: 0, False: 17.4k]
  ------------------
 1299|      0|        result[0] = '\0';
 1300|      0|        status = U_INTERNAL_PROGRAM_ERROR;
 1301|      0|        return;
 1302|      0|    }
 1303|  17.4k|    int32_t keyLen = mzID.extract(0, mzID.length(), result + MZ_PREFIX_LEN,
  ------------------
  |  |   43|  17.4k|#define MZ_PREFIX_LEN 5
  ------------------
 1304|  17.4k|                                  static_cast<int32_t>(capacity - MZ_PREFIX_LEN), US_INV);
  ------------------
  |  |   43|  17.4k|#define MZ_PREFIX_LEN 5
  ------------------
                                                static_cast<int32_t>(capacity - MZ_PREFIX_LEN), US_INV);
  ------------------
  |  |   98|  17.4k|#define US_INV icu::UnicodeString::kInvariant
  ------------------
 1305|  17.4k|    result[keyLen + MZ_PREFIX_LEN] = '\0';
  ------------------
  |  |   43|  17.4k|#define MZ_PREFIX_LEN 5
  ------------------
 1306|  17.4k|}
_ZN6icu_786ZNames12ZNamesLoader3putEPKcRNS_13ResourceValueEaR10UErrorCode:
  806|   104k|            UErrorCode &errorCode) override {
  807|   104k|        ResourceTable namesTable = value.getTable(errorCode);
  808|   104k|        if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (808:13): [True: 0, False: 104k]
  ------------------
  809|   248k|        for (int32_t i = 0; namesTable.getKeyAndValue(i, key, value); ++i) {
  ------------------
  |  Branch (809:29): [True: 143k, False: 104k]
  ------------------
  810|   143k|            if (value.isNoInheritanceMarker()) {
  ------------------
  |  Branch (810:17): [True: 580, False: 143k]
  ------------------
  811|    580|                setNameIfEmpty(key, nullptr, errorCode);
  812|   143k|            } else {
  813|   143k|                setNameIfEmpty(key, &value, errorCode);
  814|   143k|            }
  815|   143k|        }
  816|   104k|    }
_ZN6icu_786ZNames12ZNamesLoader14setNameIfEmptyEPKcPKNS_13ResourceValueER10UErrorCode:
  794|   143k|    void setNameIfEmpty(const char* key, const ResourceValue* value, UErrorCode& errorCode) {
  795|   143k|        UTimeZoneNameTypeIndex type = nameTypeFromKey(key);
  796|   143k|        if (type == UTZNM_INDEX_UNKNOWN) { return; }
  ------------------
  |  Branch (796:13): [True: 4, False: 143k]
  ------------------
  797|   143k|        if (names[type] == nullptr) {
  ------------------
  |  Branch (797:13): [True: 129k, False: 14.1k]
  ------------------
  798|   129k|            int32_t length;
  799|       |            // 'NO_NAME' indicates internally that this field should remain empty.  It will be
  800|       |            // replaced by 'nullptr' in getNames()
  801|   129k|            names[type] = (value == nullptr) ? NO_NAME : value->getString(length, errorCode);
  ------------------
  |  Branch (801:27): [True: 578, False: 129k]
  ------------------
  802|   129k|        }
  803|   143k|    }
_ZN6icu_786ZNames12ZNamesLoader15nameTypeFromKeyEPKc:
  818|   143k|    static UTimeZoneNameTypeIndex nameTypeFromKey(const char *key) {
  819|   143k|        char c0, c1;
  820|   143k|        if ((c0 = key[0]) == 0 || (c1 = key[1]) == 0 || key[2] != 0) {
  ------------------
  |  Branch (820:13): [True: 0, False: 143k]
  |  Branch (820:35): [True: 0, False: 143k]
  |  Branch (820:57): [True: 4, False: 143k]
  ------------------
  821|      4|            return UTZNM_INDEX_UNKNOWN;
  822|      4|        }
  823|   143k|        if (c0 == 'l') {
  ------------------
  |  Branch (823:13): [True: 72.1k, False: 71.8k]
  ------------------
  824|  72.1k|            return c1 == 'g' ? UTZNM_INDEX_LONG_GENERIC :
  ------------------
  |  Branch (824:20): [True: 18.6k, False: 53.5k]
  ------------------
  825|  72.1k|                    c1 == 's' ? UTZNM_INDEX_LONG_STANDARD :
  ------------------
  |  Branch (825:21): [True: 34.4k, False: 19.0k]
  ------------------
  826|  53.5k|                        c1 == 'd' ? UTZNM_INDEX_LONG_DAYLIGHT : UTZNM_INDEX_UNKNOWN;
  ------------------
  |  Branch (826:25): [True: 19.0k, False: 0]
  ------------------
  827|  72.1k|        } else if (c0 == 's') {
  ------------------
  |  Branch (827:20): [True: 3.01k, False: 68.8k]
  ------------------
  828|  3.01k|            return c1 == 'g' ? UTZNM_INDEX_SHORT_GENERIC :
  ------------------
  |  Branch (828:20): [True: 853, False: 2.16k]
  ------------------
  829|  3.01k|                    c1 == 's' ? UTZNM_INDEX_SHORT_STANDARD :
  ------------------
  |  Branch (829:21): [True: 1.30k, False: 858]
  ------------------
  830|  2.16k|                        c1 == 'd' ? UTZNM_INDEX_SHORT_DAYLIGHT : UTZNM_INDEX_UNKNOWN;
  ------------------
  |  Branch (830:25): [True: 858, False: 0]
  ------------------
  831|  68.8k|        } else if (c0 == 'e' && c1 == 'c') {
  ------------------
  |  Branch (831:20): [True: 68.8k, False: 0]
  |  Branch (831:33): [True: 68.8k, False: 0]
  ------------------
  832|  68.8k|            return UTZNM_INDEX_EXEMPLAR_LOCATION;
  833|  68.8k|        }
  834|      0|        return UTZNM_INDEX_UNKNOWN;
  835|   143k|    }
_ZN6icu_7817TimeZoneNamesImpl17ZoneStringsLoader3putEPKcRNS_13ResourceValueEaR10UErrorCode:
 1580|    618|            UErrorCode &status) override {
 1581|    618|        ResourceTable timeZonesTable = value.getTable(status);
 1582|    618|        if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1582:13): [True: 0, False: 618]
  ------------------
 1583|   107k|        for (int32_t i = 0; timeZonesTable.getKeyAndValue(i, key, value); ++i) {
  ------------------
  |  Branch (1583:29): [True: 107k, False: 618]
  ------------------
 1584|   107k|            U_ASSERT(!value.isNoInheritanceMarker());
  ------------------
  |  |   35|   107k|#   define U_ASSERT(exp) (void)0
  ------------------
 1585|   107k|            if (value.getType() == URES_TABLE) {
  ------------------
  |  Branch (1585:17): [True: 104k, False: 3.24k]
  ------------------
 1586|   104k|                consumeNamesTable(key, value, noFallback, status);
 1587|   104k|            } else {
 1588|       |                // Ignore fields that aren't tables (e.g., fallbackFormat and regionFormatStandard).
 1589|       |                // All time zone fields are tables.
 1590|  3.24k|            }
 1591|   107k|            if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1591:17): [True: 0, False: 107k]
  ------------------
 1592|   107k|        }
 1593|    618|    }
_ZN6icu_7817TimeZoneNamesImpl17ZoneStringsLoader17consumeNamesTableEPKcRNS_13ResourceValueEaR10UErrorCode:
 1530|   104k|            UErrorCode &status) {
 1531|   104k|        if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1531:13): [True: 0, False: 104k]
  ------------------
 1532|       |
 1533|   104k|        void* loader = uhash_get(keyToLoader, key);
  ------------------
  |  | 1007|   104k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|   104k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   104k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   104k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1534|   104k|        if (loader == nullptr) {
  ------------------
  |  Branch (1534:13): [True: 91.8k, False: 12.2k]
  ------------------
 1535|  91.8k|            if (isMetaZone(key)) {
  ------------------
  |  Branch (1535:17): [True: 32.6k, False: 59.2k]
  ------------------
 1536|  32.6k|                UnicodeString mzID = mzIDFromKey(key);
 1537|  32.6k|                void* cacheVal = uhash_get(tzn.fMZNamesMap, mzID.getTerminatedBuffer());
  ------------------
  |  | 1007|  32.6k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|  32.6k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  32.6k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  32.6k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1538|  32.6k|                if (cacheVal != nullptr) {
  ------------------
  |  Branch (1538:21): [True: 0, False: 32.6k]
  ------------------
 1539|       |                    // We have already loaded the names for this meta zone.
 1540|      0|                    loader = (void*) DUMMY_LOADER;
 1541|  32.6k|                } else {
 1542|  32.6k|                    loader = (void*) new ZNames::ZNamesLoader();
 1543|  32.6k|                    if (loader == nullptr) {
  ------------------
  |  Branch (1543:25): [True: 0, False: 32.6k]
  ------------------
 1544|      0|                        status = U_MEMORY_ALLOCATION_ERROR;
 1545|      0|                        return;
 1546|      0|                    }
 1547|  32.6k|                }
 1548|  59.2k|            } else {
 1549|  59.2k|                UnicodeString tzID = tzIDFromKey(key);
 1550|  59.2k|                void* cacheVal = uhash_get(tzn.fTZNamesMap, tzID.getTerminatedBuffer());
  ------------------
  |  | 1007|  59.2k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|  59.2k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  59.2k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  59.2k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1551|  59.2k|                if (cacheVal != nullptr) {
  ------------------
  |  Branch (1551:21): [True: 287, False: 58.9k]
  ------------------
 1552|       |                    // We have already loaded the names for this time zone.
 1553|    287|                    loader = (void*) DUMMY_LOADER;
 1554|  58.9k|                } else {
 1555|  58.9k|                    loader = (void*) new ZNames::ZNamesLoader();
 1556|  58.9k|                    if (loader == nullptr) {
  ------------------
  |  Branch (1556:25): [True: 0, False: 58.9k]
  ------------------
 1557|      0|                        status = U_MEMORY_ALLOCATION_ERROR;
 1558|      0|                        return;
 1559|      0|                    }
 1560|  58.9k|                }
 1561|  59.2k|            }
 1562|       |
 1563|  91.8k|            void* newKey = createKey(key, status);
 1564|  91.8k|            if (U_FAILURE(status)) {
  ------------------
  |  Branch (1564:17): [True: 0, False: 91.8k]
  ------------------
 1565|      0|                deleteZNamesLoader(loader);
 1566|      0|                return;
 1567|      0|            }
 1568|       |
 1569|  91.8k|            uhash_put(keyToLoader, newKey, loader, &status);
  ------------------
  |  | 1032|  91.8k|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|  91.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  91.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  91.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1570|  91.8k|            if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1570:17): [True: 0, False: 91.8k]
  ------------------
 1571|  91.8k|        }
 1572|       |
 1573|   104k|        if (loader != DUMMY_LOADER) {
  ------------------
  |  Branch (1573:13): [True: 103k, False: 520]
  ------------------
 1574|       |            // Let the ZNamesLoader consume the names table.
 1575|   103k|            static_cast<ZNames::ZNamesLoader*>(loader)->put(key, value, noFallback, status);
 1576|   103k|        }
 1577|   104k|    }
_ZN6icu_7817TimeZoneNamesImpl17ZoneStringsLoader9createKeyEPKcR10UErrorCode:
 1476|  91.8k|    void* createKey(const char* key, UErrorCode& status) {
 1477|  91.8k|        int32_t len = sizeof(char) * (static_cast<int32_t>(uprv_strlen(key)) + 1);
  ------------------
  |  |   37|  91.8k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  91.8k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1478|  91.8k|        char* newKey = static_cast<char*>(uprv_malloc(len));
  ------------------
  |  | 1524|  91.8k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  91.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  91.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  91.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1479|  91.8k|        if (newKey == nullptr) {
  ------------------
  |  Branch (1479:13): [True: 0, False: 91.8k]
  ------------------
 1480|      0|            status = U_MEMORY_ALLOCATION_ERROR;
 1481|      0|            return nullptr;
 1482|      0|        }
 1483|  91.8k|        uprv_memcpy(newKey, key, len);
  ------------------
  |  |   42|  91.8k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  91.8k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  91.8k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  91.8k|    _Pragma("clang diagnostic push") \
  |  |   45|  91.8k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  91.8k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  91.8k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  91.8k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  91.8k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  91.8k|    _Pragma("clang diagnostic pop") \
  |  |   49|  91.8k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  91.8k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  91.8k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  91.8k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1484|  91.8k|        newKey[len-1] = '\0';
 1485|  91.8k|        return (void*) newKey;
 1486|  91.8k|    }

ucln_i18n_registerCleanup_78:
   52|      7|                               cleanupFunc *func) {
   53|      7|    U_ASSERT(UCLN_I18N_START < type && type < UCLN_I18N_COUNT);
  ------------------
  |  |   35|      7|#   define U_ASSERT(exp) (void)0
  ------------------
   54|      7|    {
   55|      7|        icu::Mutex m;   // See ticket 10295 for discussion.
   56|      7|        ucln_registerCleanup(UCLN_I18N, i18n_cleanup);
  ------------------
  |  |  621|      7|#define ucln_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      7|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      7|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      7|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   57|      7|        if (UCLN_I18N_START < type && type < UCLN_I18N_COUNT) {
  ------------------
  |  Branch (57:13): [True: 7, False: 0]
  |  Branch (57:39): [True: 7, False: 0]
  ------------------
   58|      7|            gCleanupFunctions[type] = func;
   59|      7|        }
   60|      7|    }
   61|       |#if !UCLN_NO_AUTO_CLEANUP && (defined(UCLN_AUTO_ATEXIT) || defined(UCLN_AUTO_LOCAL))
   62|       |    ucln_registerAutomaticCleanup();
   63|       |#endif
   64|      7|}

_ZN6icu_788ZoneMeta18getCanonicalCLDRIDERKNS_13UnicodeStringER10UErrorCode:
  229|  34.7k|ZoneMeta::getCanonicalCLDRID(const UnicodeString &tzid, UErrorCode& status) {
  230|  34.7k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (230:9): [True: 0, False: 34.7k]
  ------------------
  231|      0|        return nullptr;
  232|      0|    }
  233|       |
  234|  34.7k|    if (tzid.isBogus() || tzid.length() > ZID_KEY_MAX) {
  ------------------
  |  |  113|  34.7k|#define ZID_KEY_MAX 128
  ------------------
  |  Branch (234:9): [True: 0, False: 34.7k]
  |  Branch (234:27): [True: 0, False: 34.7k]
  ------------------
  235|      0|        status = U_ILLEGAL_ARGUMENT_ERROR;
  236|      0|        return nullptr;
  237|      0|    }
  238|       |
  239|       |    // Checking the cached results
  240|  34.7k|    umtx_initOnce(gCanonicalIDCacheInitOnce, &initCanonicalIDCache, status);
  241|  34.7k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (241:9): [True: 0, False: 34.7k]
  ------------------
  242|      0|        return nullptr;
  243|      0|    }
  244|       |
  245|  34.7k|    const char16_t *canonicalID = nullptr;
  246|       |
  247|  34.7k|    UErrorCode tmpStatus = U_ZERO_ERROR;
  248|  34.7k|    char16_t utzid[ZID_KEY_MAX + 1];
  249|  34.7k|    tzid.extract(utzid, ZID_KEY_MAX + 1, tmpStatus);
  ------------------
  |  |  113|  34.7k|#define ZID_KEY_MAX 128
  ------------------
  250|  34.7k|    U_ASSERT(tmpStatus == U_ZERO_ERROR);    // we checked the length of tzid already
  ------------------
  |  |   35|  34.7k|#   define U_ASSERT(exp) (void)0
  ------------------
  251|       |
  252|  34.7k|    if (!uprv_isInvariantUString(utzid, -1)) {
  ------------------
  |  | 1518|  34.7k|#define uprv_isInvariantUString U_ICU_ENTRY_POINT_RENAME(uprv_isInvariantUString)
  |  |  ------------------
  |  |  |  |  123|  34.7k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  34.7k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  34.7k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (252:9): [True: 0, False: 34.7k]
  ------------------
  253|       |        // All of known tz IDs are only containing ASCII invariant characters.
  254|      0|        status = U_ILLEGAL_ARGUMENT_ERROR;
  255|      0|        return nullptr;
  256|      0|    }
  257|       |
  258|       |    // Check if it was already cached
  259|  34.7k|    umtx_lock(&gZoneMetaLock);
  ------------------
  |  | 1250|  34.7k|#define umtx_lock U_ICU_ENTRY_POINT_RENAME(umtx_lock)
  |  |  ------------------
  |  |  |  |  123|  34.7k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  34.7k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  34.7k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  260|  34.7k|    {
  261|  34.7k|        canonicalID = static_cast<const char16_t*>(uhash_get(gCanonicalIDCache, utzid));
  ------------------
  |  | 1007|  34.7k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|  34.7k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  34.7k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  34.7k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  262|  34.7k|    }
  263|  34.7k|    umtx_unlock(&gZoneMetaLock);
  ------------------
  |  | 1251|  34.7k|#define umtx_unlock U_ICU_ENTRY_POINT_RENAME(umtx_unlock)
  |  |  ------------------
  |  |  |  |  123|  34.7k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  34.7k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  34.7k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  264|       |
  265|  34.7k|    if (canonicalID != nullptr) {
  ------------------
  |  Branch (265:9): [True: 34.0k, False: 631]
  ------------------
  266|  34.0k|        return canonicalID;
  267|  34.0k|    }
  268|       |
  269|       |    // If not, resolve CLDR canonical ID with resource data
  270|    631|    UBool isInputCanonical = false;
  271|    631|    char id[ZID_KEY_MAX + 1];
  272|    631|    tzid.extract(0, 0x7fffffff, id, UPRV_LENGTHOF(id), US_INV);
  ------------------
  |  |   99|    631|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
                  tzid.extract(0, 0x7fffffff, id, UPRV_LENGTHOF(id), US_INV);
  ------------------
  |  |   98|    631|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  273|       |
  274|       |    // replace '/' with ':'
  275|    631|    char *p = id;
  276|  9.32k|    while (*p++) {
  ------------------
  |  Branch (276:12): [True: 8.69k, False: 631]
  ------------------
  277|  8.69k|        if (*p == '/') {
  ------------------
  |  Branch (277:13): [True: 587, False: 8.10k]
  ------------------
  278|    587|            *p = ':';
  279|    587|        }
  280|  8.69k|    }
  281|       |
  282|    631|    UResourceBundle *top = ures_openDirect(nullptr, gKeyTypeData, &tmpStatus);
  ------------------
  |  | 1693|    631|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|    631|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    631|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    631|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  283|    631|    UResourceBundle *rb = ures_getByKey(top, gTypeMapTag, nullptr, &tmpStatus);
  ------------------
  |  | 1661|    631|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|    631|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    631|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    631|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|    631|    ures_getByKey(rb, gTimezoneTag, rb, &tmpStatus);
  ------------------
  |  | 1661|    631|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|    631|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    631|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    631|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  285|    631|    ures_getByKey(rb, id, rb, &tmpStatus);
  ------------------
  |  | 1661|    631|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|    631|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    631|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    631|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  286|    631|    if (U_SUCCESS(tmpStatus)) {
  ------------------
  |  Branch (286:9): [True: 439, False: 192]
  ------------------
  287|       |        // type entry (canonical) found
  288|       |        // the input is the canonical ID. resolve to const char16_t*
  289|    439|        canonicalID = TimeZone::findID(tzid);
  290|    439|        isInputCanonical = true;
  291|    439|    }
  292|       |
  293|    631|    if (canonicalID == nullptr) {
  ------------------
  |  Branch (293:9): [True: 192, False: 439]
  ------------------
  294|       |        // If a map element not found, then look for an alias
  295|    192|        tmpStatus = U_ZERO_ERROR;
  296|    192|        ures_getByKey(top, gTypeAliasTag, rb, &tmpStatus);
  ------------------
  |  | 1661|    192|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|    192|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    192|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    192|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|    192|        ures_getByKey(rb, gTimezoneTag, rb, &tmpStatus);
  ------------------
  |  | 1661|    192|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|    192|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    192|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    192|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  298|    192|        const char16_t *canonical = ures_getStringByKey(rb,id,nullptr,&tmpStatus);
  ------------------
  |  | 1677|    192|#define ures_getStringByKey U_ICU_ENTRY_POINT_RENAME(ures_getStringByKey)
  |  |  ------------------
  |  |  |  |  123|    192|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    192|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    192|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  299|    192|        if (U_SUCCESS(tmpStatus)) {
  ------------------
  |  Branch (299:13): [True: 154, False: 38]
  ------------------
  300|       |            // canonical map found
  301|    154|            canonicalID = canonical;
  302|    154|        }
  303|       |
  304|    192|        if (canonicalID == nullptr) {
  ------------------
  |  Branch (304:13): [True: 38, False: 154]
  ------------------
  305|       |            // Dereference the input ID using the tz data
  306|     38|            const char16_t *derefer = TimeZone::dereferOlsonLink(tzid);
  307|     38|            if (derefer == nullptr) {
  ------------------
  |  Branch (307:17): [True: 0, False: 38]
  ------------------
  308|      0|                status = U_ILLEGAL_ARGUMENT_ERROR;
  309|     38|            } else {
  310|     38|                int32_t len = u_strlen(derefer);
  ------------------
  |  |  393|     38|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|     38|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     38|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     38|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  311|     38|                u_UCharsToChars(derefer,id,len);
  ------------------
  |  |  211|     38|#define u_UCharsToChars U_ICU_ENTRY_POINT_RENAME(u_UCharsToChars)
  |  |  ------------------
  |  |  |  |  123|     38|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     38|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     38|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  312|     38|                id[len] = static_cast<char>(0); // Make sure it is null terminated.
  313|       |
  314|       |                // replace '/' with ':'
  315|     38|                char *q = id;
  316|    604|                while (*q++) {
  ------------------
  |  Branch (316:24): [True: 566, False: 38]
  ------------------
  317|    566|                    if (*q == '/') {
  ------------------
  |  Branch (317:25): [True: 40, False: 526]
  ------------------
  318|     40|                        *q = ':';
  319|     40|                    }
  320|    566|                }
  321|       |
  322|       |                // If a dereference turned something up then look for an alias.
  323|       |                // rb still points to the alias table, so we don't have to go looking
  324|       |                // for it.
  325|     38|                tmpStatus = U_ZERO_ERROR;
  326|     38|                canonical = ures_getStringByKey(rb,id,nullptr,&tmpStatus);
  ------------------
  |  | 1677|     38|#define ures_getStringByKey U_ICU_ENTRY_POINT_RENAME(ures_getStringByKey)
  |  |  ------------------
  |  |  |  |  123|     38|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     38|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     38|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  327|     38|                if (U_SUCCESS(tmpStatus)) {
  ------------------
  |  Branch (327:21): [True: 4, False: 34]
  ------------------
  328|       |                    // canonical map for the dereferenced ID found
  329|      4|                    canonicalID = canonical;
  330|     34|                } else {
  331|     34|                    canonicalID = derefer;
  332|     34|                    isInputCanonical = true;
  333|     34|                }
  334|     38|            }
  335|     38|        }
  336|    192|    }
  337|    631|    ures_close(rb);
  ------------------
  |  | 1652|    631|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|    631|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    631|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    631|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  338|    631|    ures_close(top);
  ------------------
  |  | 1652|    631|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|    631|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    631|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    631|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  339|       |
  340|    631|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (340:9): [True: 631, False: 0]
  ------------------
  341|    631|        U_ASSERT(canonicalID != nullptr);  // canocanilD must be non-nullptr here
  ------------------
  |  |   35|    631|#   define U_ASSERT(exp) (void)0
  ------------------
  342|       |
  343|       |        // Put the resolved canonical ID to the cache
  344|    631|        umtx_lock(&gZoneMetaLock);
  ------------------
  |  | 1250|    631|#define umtx_lock U_ICU_ENTRY_POINT_RENAME(umtx_lock)
  |  |  ------------------
  |  |  |  |  123|    631|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    631|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    631|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  345|    631|        {
  346|    631|            const char16_t* idInCache = static_cast<const char16_t*>(uhash_get(gCanonicalIDCache, utzid));
  ------------------
  |  | 1007|    631|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|    631|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    631|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    631|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  347|    631|            if (idInCache == nullptr) {
  ------------------
  |  Branch (347:17): [True: 631, False: 0]
  ------------------
  348|    631|                const char16_t* key = ZoneMeta::findTimeZoneID(tzid);
  349|    631|                U_ASSERT(key != nullptr);
  ------------------
  |  |   35|    631|#   define U_ASSERT(exp) (void)0
  ------------------
  350|    631|                if (key != nullptr) {
  ------------------
  |  Branch (350:21): [True: 631, False: 0]
  ------------------
  351|    631|                    idInCache = static_cast<const char16_t*>(uhash_put(gCanonicalIDCache, const_cast<char16_t*>(key), const_cast<char16_t*>(canonicalID), &status));
  ------------------
  |  | 1032|    631|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|    631|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    631|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    631|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  352|    631|                    U_ASSERT(idInCache == nullptr);
  ------------------
  |  |   35|    631|#   define U_ASSERT(exp) (void)0
  ------------------
  353|    631|                }
  354|    631|            }
  355|    631|            if (U_SUCCESS(status) && isInputCanonical) {
  ------------------
  |  Branch (355:17): [True: 631, False: 0]
  |  Branch (355:38): [True: 473, False: 158]
  ------------------
  356|       |                // Also put canonical ID itself into the cache if not exist
  357|    473|                const char16_t* canonicalInCache = static_cast<const char16_t*>(uhash_get(gCanonicalIDCache, canonicalID));
  ------------------
  |  | 1007|    473|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|    473|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    473|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    473|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  358|    473|                if (canonicalInCache == nullptr) {
  ------------------
  |  Branch (358:21): [True: 7, False: 466]
  ------------------
  359|      7|                    canonicalInCache = static_cast<const char16_t*>(uhash_put(gCanonicalIDCache, const_cast<char16_t*>(canonicalID), const_cast<char16_t*>(canonicalID), &status));
  ------------------
  |  | 1032|      7|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|      7|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      7|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      7|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  360|      7|                    U_ASSERT(canonicalInCache == nullptr);
  ------------------
  |  |   35|      7|#   define U_ASSERT(exp) (void)0
  ------------------
  361|      7|                }
  362|    473|            }
  363|    631|        }
  364|    631|        umtx_unlock(&gZoneMetaLock);
  ------------------
  |  | 1251|    631|#define umtx_unlock U_ICU_ENTRY_POINT_RENAME(umtx_unlock)
  |  |  ------------------
  |  |  |  |  123|    631|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    631|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    631|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  365|    631|    }
  366|       |
  367|    631|    return canonicalID;
  368|  34.7k|}
_ZN6icu_788ZoneMeta18getCanonicalCLDRIDERKNS_13UnicodeStringERS1_R10UErrorCode:
  371|  34.7k|ZoneMeta::getCanonicalCLDRID(const UnicodeString &tzid, UnicodeString &systemID, UErrorCode& status) {
  372|  34.7k|    const char16_t *canonicalID = getCanonicalCLDRID(tzid, status);
  373|  34.7k|    if (U_FAILURE(status) || canonicalID == nullptr) {
  ------------------
  |  Branch (373:9): [True: 0, False: 34.7k]
  |  Branch (373:30): [True: 0, False: 34.7k]
  ------------------
  374|      0|        systemID.setToBogus();
  375|      0|        return systemID;
  376|      0|    }
  377|  34.7k|    systemID.setTo(true, canonicalID, -1);
  378|  34.7k|    return systemID;
  379|  34.7k|}
_ZN6icu_788ZoneMeta18getCanonicalCLDRIDERKNS_8TimeZoneE:
  382|    287|ZoneMeta::getCanonicalCLDRID(const TimeZone& tz) {
  383|    287|    if (dynamic_cast<const OlsonTimeZone *>(&tz) != nullptr) {
  ------------------
  |  Branch (383:9): [True: 287, False: 0]
  ------------------
  384|       |        // short cut for OlsonTimeZone
  385|    287|        const OlsonTimeZone *otz = (const OlsonTimeZone*)&tz;
  386|    287|        return otz->getCanonicalID();
  387|    287|    }
  388|      0|    UErrorCode status = U_ZERO_ERROR;
  389|      0|    UnicodeString tzID;
  390|      0|    return getCanonicalCLDRID(tz.getID(tzID), status);
  391|    287|}
_ZN6icu_788ZoneMeta13getMetazoneIDERKNS_13UnicodeStringEdRS1_:
  548|   267k|ZoneMeta::getMetazoneID(const UnicodeString &tzid, UDate date, UnicodeString &result) {
  549|   267k|    UBool isSet = false;
  550|   267k|    const UVector *mappings = getMetazoneMappings(tzid);
  551|   267k|    if (mappings != nullptr) {
  ------------------
  |  Branch (551:9): [True: 246k, False: 21.4k]
  ------------------
  552|   388k|        for (int32_t i = 0; i < mappings->size(); i++) {
  ------------------
  |  Branch (552:29): [True: 383k, False: 5.46k]
  ------------------
  553|   383k|            OlsonToMetaMappingEntry* mzm = static_cast<OlsonToMetaMappingEntry*>(mappings->elementAt(i));
  554|   383k|            if (mzm->from <= date && mzm->to > date) {
  ------------------
  |  Branch (554:17): [True: 383k, False: 0]
  |  Branch (554:38): [True: 241k, False: 141k]
  ------------------
  555|   241k|                result.setTo(mzm->mzid, -1);
  556|   241k|                isSet = true;
  557|   241k|                break;
  558|   241k|            }
  559|   383k|        }
  560|   246k|    }
  561|   267k|    if (!isSet) {
  ------------------
  |  Branch (561:9): [True: 26.8k, False: 241k]
  ------------------
  562|  26.8k|        result.setToBogus();
  563|  26.8k|    }
  564|   267k|    return result;
  565|   267k|}
_ZN6icu_788ZoneMeta19getMetazoneMappingsERKNS_13UnicodeStringE:
  581|   340k|ZoneMeta::getMetazoneMappings(const UnicodeString &tzid) {
  582|   340k|    UErrorCode status = U_ZERO_ERROR;
  583|   340k|    char16_t tzidUChars[ZID_KEY_MAX + 1];
  584|   340k|    tzid.extract(tzidUChars, ZID_KEY_MAX + 1, status);
  ------------------
  |  |  113|   340k|#define ZID_KEY_MAX 128
  ------------------
  585|   340k|    if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING) {
  ------------------
  |  Branch (585:9): [True: 0, False: 340k]
  |  Branch (585:30): [True: 0, False: 340k]
  ------------------
  586|      0|        return nullptr;
  587|      0|    }
  588|       |
  589|   340k|    umtx_initOnce(gOlsonToMetaInitOnce, &olsonToMetaInit, status);
  590|   340k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (590:9): [True: 0, False: 340k]
  ------------------
  591|      0|        return nullptr;
  592|      0|    }
  593|       |
  594|       |    // get the mapping from cache
  595|   340k|    const UVector *result = nullptr;
  596|       |
  597|   340k|    umtx_lock(&gZoneMetaLock);
  ------------------
  |  | 1250|   340k|#define umtx_lock U_ICU_ENTRY_POINT_RENAME(umtx_lock)
  |  |  ------------------
  |  |  |  |  123|   340k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   340k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   340k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  598|   340k|    {
  599|   340k|        result = static_cast<UVector*>(uhash_get(gOlsonToMeta, tzidUChars));
  ------------------
  |  | 1007|   340k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|   340k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   340k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   340k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  600|   340k|    }
  601|   340k|    umtx_unlock(&gZoneMetaLock);
  ------------------
  |  | 1251|   340k|#define umtx_unlock U_ICU_ENTRY_POINT_RENAME(umtx_unlock)
  |  |  ------------------
  |  |  |  |  123|   340k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   340k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   340k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  602|       |
  603|   340k|    if (result != nullptr) {
  ------------------
  |  Branch (603:9): [True: 306k, False: 34.0k]
  ------------------
  604|   306k|        return result;
  605|   306k|    }
  606|       |
  607|       |    // miss the cache - create new one
  608|  34.0k|    UVector *tmpResult = createMetazoneMappings(tzid);
  609|  34.0k|    if (tmpResult == nullptr) {
  ------------------
  |  Branch (609:9): [True: 33.4k, False: 587]
  ------------------
  610|       |        // not available
  611|  33.4k|        return nullptr;
  612|  33.4k|    }
  613|       |
  614|       |    // put the new one into the cache
  615|    587|    umtx_lock(&gZoneMetaLock);
  ------------------
  |  | 1250|    587|#define umtx_lock U_ICU_ENTRY_POINT_RENAME(umtx_lock)
  |  |  ------------------
  |  |  |  |  123|    587|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    587|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    587|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  616|    587|    {
  617|       |        // make sure it's already created
  618|    587|        result = static_cast<UVector*>(uhash_get(gOlsonToMeta, tzidUChars));
  ------------------
  |  | 1007|    587|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|    587|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    587|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    587|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  619|    587|        if (result == nullptr) {
  ------------------
  |  Branch (619:13): [True: 587, False: 0]
  ------------------
  620|       |            // add the one just created
  621|    587|            int32_t tzidLen = tzid.length() + 1;
  622|    587|            char16_t* key = static_cast<char16_t*>(uprv_malloc(tzidLen * sizeof(char16_t)));
  ------------------
  |  | 1524|    587|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|    587|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    587|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    587|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  623|    587|            if (key == nullptr) {
  ------------------
  |  Branch (623:17): [True: 0, False: 587]
  ------------------
  624|       |                // memory allocation error..  just return nullptr
  625|      0|                result = nullptr;
  626|      0|                delete tmpResult;
  627|    587|            } else {
  628|    587|                tzid.extract(key, tzidLen, status);
  629|    587|                uhash_put(gOlsonToMeta, key, tmpResult, &status);
  ------------------
  |  | 1032|    587|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|    587|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    587|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    587|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  630|    587|                if (U_FAILURE(status)) {
  ------------------
  |  Branch (630:21): [True: 0, False: 587]
  ------------------
  631|       |                    // delete the mapping
  632|      0|                    result = nullptr;
  633|      0|                    delete tmpResult;
  634|    587|                } else {
  635|    587|                    result = tmpResult;
  636|    587|                }
  637|    587|            }
  638|    587|        } else {
  639|       |            // another thread already put the one
  640|      0|            delete tmpResult;
  641|      0|        }
  642|    587|    }
  643|    587|    umtx_unlock(&gZoneMetaLock);
  ------------------
  |  | 1251|    587|#define umtx_unlock U_ICU_ENTRY_POINT_RENAME(umtx_unlock)
  |  |  ------------------
  |  |  |  |  123|    587|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    587|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    587|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  644|       |
  645|    587|    return result;
  646|  34.0k|}
_ZN6icu_788ZoneMeta22createMetazoneMappingsERKNS_13UnicodeStringE:
  649|  34.0k|ZoneMeta::createMetazoneMappings(const UnicodeString &tzid) {
  650|  34.0k|    LocalPointer <UVector> mzMappings;
  651|  34.0k|    UErrorCode status = U_ZERO_ERROR;
  652|       |
  653|  34.0k|    UnicodeString canonicalID;
  654|  34.0k|    UResourceBundle *rb = ures_openDirect(nullptr, gMetaZones, &status);
  ------------------
  |  | 1693|  34.0k|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|  34.0k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  34.0k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  34.0k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  655|  34.0k|    ures_getByKey(rb, gMetazoneInfo, rb, &status);
  ------------------
  |  | 1661|  34.0k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  34.0k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  34.0k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  34.0k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  656|  34.0k|    getCanonicalCLDRID(tzid, canonicalID, status);
  657|       |
  658|  34.0k|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (658:9): [True: 34.0k, False: 0]
  ------------------
  659|  34.0k|        char tzKey[ZID_KEY_MAX + 1];
  660|  34.0k|        int32_t tzKeyLen = canonicalID.extract(0, canonicalID.length(), tzKey, sizeof(tzKey), US_INV);
  ------------------
  |  |   98|  34.0k|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  661|  34.0k|        tzKey[tzKeyLen] = 0;
  662|       |
  663|       |        // tzid keys are using ':' as separators
  664|  34.0k|        char *p = tzKey;
  665|   388k|        while (*p) {
  ------------------
  |  Branch (665:16): [True: 354k, False: 34.0k]
  ------------------
  666|   354k|            if (*p == '/') {
  ------------------
  |  Branch (666:17): [True: 34.0k, False: 320k]
  ------------------
  667|  34.0k|                *p = ':';
  668|  34.0k|            }
  669|   354k|            p++;
  670|   354k|        }
  671|       |
  672|  34.0k|        ures_getByKey(rb, tzKey, rb, &status);
  ------------------
  |  | 1661|  34.0k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  34.0k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  34.0k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  34.0k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  673|       |
  674|  34.0k|        if (U_SUCCESS(status)) {
  ------------------
  |  Branch (674:13): [True: 587, False: 33.4k]
  ------------------
  675|    587|            UResourceBundle *mz = nullptr;
  676|  1.49k|            while (ures_hasNext(rb)) {
  ------------------
  |  | 1689|  1.49k|#define ures_hasNext U_ICU_ENTRY_POINT_RENAME(ures_hasNext)
  |  |  ------------------
  |  |  |  |  123|  1.49k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.49k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.49k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (676:20): [True: 912, False: 587]
  ------------------
  677|    912|                mz = ures_getNextResource(rb, mz, &status);
  ------------------
  |  | 1672|    912|#define ures_getNextResource U_ICU_ENTRY_POINT_RENAME(ures_getNextResource)
  |  |  ------------------
  |  |  |  |  123|    912|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    912|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    912|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  678|       |
  679|    912|                const char16_t *mz_name = ures_getStringByIndex(mz, 0, nullptr, &status);
  ------------------
  |  | 1676|    912|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  123|    912|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    912|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    912|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  680|    912|                const char16_t *mz_from = gDefaultFrom;
  681|    912|                const char16_t *mz_to = gDefaultTo;
  682|       |
  683|    912|                if (ures_getSize(mz) == 3) {
  ------------------
  |  | 1674|    912|#define ures_getSize U_ICU_ENTRY_POINT_RENAME(ures_getSize)
  |  |  ------------------
  |  |  |  |  123|    912|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    912|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    912|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (683:21): [True: 516, False: 396]
  ------------------
  684|    516|                    mz_from = ures_getStringByIndex(mz, 1, nullptr, &status);
  ------------------
  |  | 1676|    516|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  123|    516|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    516|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    516|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  685|    516|                    mz_to   = ures_getStringByIndex(mz, 2, nullptr, &status);
  ------------------
  |  | 1676|    516|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  123|    516|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    516|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    516|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  686|    516|                }
  687|       |
  688|    912|                if(U_FAILURE(status)){
  ------------------
  |  Branch (688:20): [True: 0, False: 912]
  ------------------
  689|      0|                    status = U_ZERO_ERROR;
  690|      0|                    continue;
  691|      0|                }
  692|       |                // We do not want to use SimpleDateformat to parse boundary dates,
  693|       |                // because this code could be triggered by the initialization code
  694|       |                // used by SimpleDateFormat.
  695|    912|                UDate from = parseDate(mz_from, status);
  696|    912|                UDate to = parseDate(mz_to, status);
  697|    912|                if (U_FAILURE(status)) {
  ------------------
  |  Branch (697:21): [True: 0, False: 912]
  ------------------
  698|      0|                    status = U_ZERO_ERROR;
  699|      0|                    continue;
  700|      0|                }
  701|       |
  702|    912|                LocalPointer<OlsonToMetaMappingEntry> entry(new OlsonToMetaMappingEntry, status);
  703|    912|                if (U_FAILURE(status)) {
  ------------------
  |  Branch (703:21): [True: 0, False: 912]
  ------------------
  704|      0|                    break;
  705|      0|                }
  706|    912|                entry->mzid = mz_name;
  707|    912|                entry->from = from;
  708|    912|                entry->to = to;
  709|       |
  710|    912|                if (mzMappings.isNull()) {
  ------------------
  |  Branch (710:21): [True: 587, False: 325]
  ------------------
  711|    587|                    mzMappings.adoptInsteadAndCheckErrorCode(
  712|    587|                        new UVector(deleteOlsonToMetaMappingEntry, nullptr, status), status);
  713|    587|                    if (U_FAILURE(status)) {
  ------------------
  |  Branch (713:25): [True: 0, False: 587]
  ------------------
  714|      0|                        break;
  715|      0|                    }
  716|    587|                }
  717|       |
  718|    912|                mzMappings->adoptElement(entry.orphan(), status);
  719|    912|                if (U_FAILURE(status)) {
  ------------------
  |  Branch (719:21): [True: 0, False: 912]
  ------------------
  720|      0|                    break;
  721|      0|                }
  722|    912|            }
  723|    587|            ures_close(mz);
  ------------------
  |  | 1652|    587|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|    587|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    587|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    587|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  724|    587|        }
  725|  34.0k|    }
  726|  34.0k|    ures_close(rb);
  ------------------
  |  | 1652|  34.0k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|  34.0k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  34.0k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  34.0k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  727|  34.0k|    return U_SUCCESS(status) ? mzMappings.orphan() : nullptr;
  ------------------
  |  Branch (727:12): [True: 587, False: 33.4k]
  ------------------
  728|  34.0k|}
_ZN6icu_788ZoneMeta14findMetaZoneIDERKNS_13UnicodeStringE:
  845|  50.1k|ZoneMeta::findMetaZoneID(const UnicodeString& mzid) {
  846|  50.1k|    umtx_initOnce(gMetaZoneIDsInitOnce, &initAvailableMetaZoneIDs);
  847|  50.1k|    if (gMetaZoneIDTable == nullptr) {
  ------------------
  |  Branch (847:9): [True: 0, False: 50.1k]
  ------------------
  848|      0|        return nullptr;
  849|      0|    }
  850|  50.1k|    return static_cast<const char16_t*>(uhash_get(gMetaZoneIDTable, &mzid));
  ------------------
  |  | 1007|  50.1k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|  50.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  50.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  50.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  851|  50.1k|}
_ZN6icu_788ZoneMeta14findTimeZoneIDERKNS_13UnicodeStringE:
  854|   183k|ZoneMeta::findTimeZoneID(const UnicodeString& tzid) {
  855|   183k|    return TimeZone::findID(tzid);
  856|   183k|}
zonemeta.cpp:_ZN6icu_78L20initCanonicalIDCacheER10UErrorCode:
  215|      1|static void U_CALLCONV initCanonicalIDCache(UErrorCode &status) {
  216|      1|    gCanonicalIDCache = uhash_open(uhash_hashUChars, uhash_compareUChars, nullptr, &status);
  ------------------
  |  | 1030|      1|#define uhash_open U_ICU_ENTRY_POINT_RENAME(uhash_open)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  gCanonicalIDCache = uhash_open(uhash_hashUChars, uhash_compareUChars, nullptr, &status);
  ------------------
  |  | 1016|      1|#define uhash_hashUChars U_ICU_ENTRY_POINT_RENAME(uhash_hashUChars)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  gCanonicalIDCache = uhash_open(uhash_hashUChars, uhash_compareUChars, nullptr, &status);
  ------------------
  |  |  998|      1|#define uhash_compareUChars U_ICU_ENTRY_POINT_RENAME(uhash_compareUChars)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  217|      1|    if (gCanonicalIDCache == nullptr) {
  ------------------
  |  Branch (217:9): [True: 0, False: 1]
  ------------------
  218|      0|        status = U_MEMORY_ALLOCATION_ERROR;
  219|      0|    }
  220|      1|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (220:9): [True: 0, False: 1]
  ------------------
  221|      0|        gCanonicalIDCache = nullptr;
  222|      0|    }
  223|       |    // No key/value deleters - keys/values are from a resource bundle
  224|      1|    ucln_i18n_registerCleanup(UCLN_I18N_ZONEMETA, zoneMeta_cleanup);
  ------------------
  |  |  618|      1|#define ucln_i18n_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_i18n_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  225|      1|}
zonemeta.cpp:_ZN6icu_78L15olsonToMetaInitER10UErrorCode:
  567|      1|static void U_CALLCONV olsonToMetaInit(UErrorCode &status) {
  568|      1|    U_ASSERT(gOlsonToMeta == nullptr);
  ------------------
  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  ------------------
  569|      1|    ucln_i18n_registerCleanup(UCLN_I18N_ZONEMETA, zoneMeta_cleanup);
  ------------------
  |  |  618|      1|#define ucln_i18n_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_i18n_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  570|      1|    gOlsonToMeta = uhash_open(uhash_hashUChars, uhash_compareUChars, nullptr, &status);
  ------------------
  |  | 1030|      1|#define uhash_open U_ICU_ENTRY_POINT_RENAME(uhash_open)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  gOlsonToMeta = uhash_open(uhash_hashUChars, uhash_compareUChars, nullptr, &status);
  ------------------
  |  | 1016|      1|#define uhash_hashUChars U_ICU_ENTRY_POINT_RENAME(uhash_hashUChars)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  gOlsonToMeta = uhash_open(uhash_hashUChars, uhash_compareUChars, nullptr, &status);
  ------------------
  |  |  998|      1|#define uhash_compareUChars U_ICU_ENTRY_POINT_RENAME(uhash_compareUChars)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  571|      1|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (571:9): [True: 0, False: 1]
  ------------------
  572|      0|        gOlsonToMeta = nullptr;
  573|      1|    } else {
  574|      1|        uhash_setKeyDeleter(gOlsonToMeta, deleteUCharString);
  ------------------
  |  | 1040|      1|#define uhash_setKeyDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setKeyDeleter)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  575|      1|        uhash_setValueDeleter(gOlsonToMeta, uprv_deleteUObject);
  ------------------
  |  | 1044|      1|#define uhash_setValueDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setValueDeleter)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      uhash_setValueDeleter(gOlsonToMeta, uprv_deleteUObject);
  ------------------
  |  | 1489|      1|#define uprv_deleteUObject U_ICU_ENTRY_POINT_RENAME(uprv_deleteUObject)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  576|      1|    }
  577|      1|}
zonemeta.cpp:_ZN6icu_78L9parseDateEPKDsR10UErrorCode:
  145|  1.82k|parseDate (const char16_t *text, UErrorCode &status) {
  146|  1.82k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (146:9): [True: 0, False: 1.82k]
  ------------------
  147|      0|        return 0;
  148|      0|    }
  149|  1.82k|    int32_t len = u_strlen(text);
  ------------------
  |  |  393|  1.82k|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|  1.82k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.82k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.82k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  150|  1.82k|    if (len != 16 && len != 10) {
  ------------------
  |  Branch (150:9): [True: 0, False: 1.82k]
  |  Branch (150:22): [True: 0, False: 0]
  ------------------
  151|       |        // It must be yyyy-MM-dd HH:mm (length 16) or yyyy-MM-dd (length 10)
  152|      0|        status = U_INVALID_FORMAT_ERROR;
  153|      0|        return 0;
  154|      0|    }
  155|       |
  156|  1.82k|    int32_t year = 0, month = 0, day = 0, hour = 0, min = 0, n;
  157|  1.82k|    int32_t idx;
  158|       |
  159|       |    // "yyyy" (0 - 3)
  160|  9.12k|    for (idx = 0; idx <= 3 && U_SUCCESS(status); idx++) {
  ------------------
  |  Branch (160:19): [True: 7.29k, False: 1.82k]
  |  Branch (160:31): [True: 7.29k, False: 0]
  ------------------
  161|  7.29k|        n = ASCII_DIGIT((int32_t)text[idx]);
  ------------------
  |  |  138|  7.29k|#define ASCII_DIGIT(c) (((c)>=0x30 && (c)<=0x39) ? (c)-0x30 : -1)
  |  |  ------------------
  |  |  |  Branch (138:26): [True: 7.29k, False: 0]
  |  |  |  Branch (138:39): [True: 7.29k, False: 0]
  |  |  ------------------
  ------------------
  162|  7.29k|        if (n >= 0) {
  ------------------
  |  Branch (162:13): [True: 7.29k, False: 0]
  ------------------
  163|  7.29k|            year = 10*year + n;
  164|  7.29k|        } else {
  165|      0|            status = U_INVALID_FORMAT_ERROR;
  166|      0|        }
  167|  7.29k|    }
  168|       |    // "MM" (5 - 6)
  169|  5.47k|    for (idx = 5; idx <= 6 && U_SUCCESS(status); idx++) {
  ------------------
  |  Branch (169:19): [True: 3.64k, False: 1.82k]
  |  Branch (169:31): [True: 3.64k, False: 0]
  ------------------
  170|  3.64k|        n = ASCII_DIGIT((int32_t)text[idx]);
  ------------------
  |  |  138|  3.64k|#define ASCII_DIGIT(c) (((c)>=0x30 && (c)<=0x39) ? (c)-0x30 : -1)
  |  |  ------------------
  |  |  |  Branch (138:26): [True: 3.64k, False: 0]
  |  |  |  Branch (138:39): [True: 3.64k, False: 0]
  |  |  ------------------
  ------------------
  171|  3.64k|        if (n >= 0) {
  ------------------
  |  Branch (171:13): [True: 3.64k, False: 0]
  ------------------
  172|  3.64k|            month = 10*month + n;
  173|  3.64k|        } else {
  174|      0|            status = U_INVALID_FORMAT_ERROR;
  175|      0|        }
  176|  3.64k|    }
  177|       |    // "dd" (8 - 9)
  178|  5.47k|    for (idx = 8; idx <= 9 && U_SUCCESS(status); idx++) {
  ------------------
  |  Branch (178:19): [True: 3.64k, False: 1.82k]
  |  Branch (178:31): [True: 3.64k, False: 0]
  ------------------
  179|  3.64k|        n = ASCII_DIGIT((int32_t)text[idx]);
  ------------------
  |  |  138|  3.64k|#define ASCII_DIGIT(c) (((c)>=0x30 && (c)<=0x39) ? (c)-0x30 : -1)
  |  |  ------------------
  |  |  |  Branch (138:26): [True: 3.64k, False: 0]
  |  |  |  Branch (138:39): [True: 3.64k, False: 0]
  |  |  ------------------
  ------------------
  180|  3.64k|        if (n >= 0) {
  ------------------
  |  Branch (180:13): [True: 3.64k, False: 0]
  ------------------
  181|  3.64k|            day = 10*day + n;
  182|  3.64k|        } else {
  183|      0|            status = U_INVALID_FORMAT_ERROR;
  184|      0|        }
  185|  3.64k|    }
  186|  1.82k|    if (len == 16) {
  ------------------
  |  Branch (186:9): [True: 1.82k, False: 0]
  ------------------
  187|       |        // "HH" (11 - 12)
  188|  5.47k|        for (idx = 11; idx <= 12 && U_SUCCESS(status); idx++) {
  ------------------
  |  Branch (188:24): [True: 3.64k, False: 1.82k]
  |  Branch (188:37): [True: 3.64k, False: 0]
  ------------------
  189|  3.64k|            n = ASCII_DIGIT((int32_t)text[idx]);
  ------------------
  |  |  138|  3.64k|#define ASCII_DIGIT(c) (((c)>=0x30 && (c)<=0x39) ? (c)-0x30 : -1)
  |  |  ------------------
  |  |  |  Branch (138:26): [True: 3.64k, False: 0]
  |  |  |  Branch (138:39): [True: 3.64k, False: 0]
  |  |  ------------------
  ------------------
  190|  3.64k|            if (n >= 0) {
  ------------------
  |  Branch (190:17): [True: 3.64k, False: 0]
  ------------------
  191|  3.64k|                hour = 10*hour + n;
  192|  3.64k|            } else {
  193|      0|                status = U_INVALID_FORMAT_ERROR;
  194|      0|            }
  195|  3.64k|        }
  196|       |        // "mm" (14 - 15)
  197|  5.47k|        for (idx = 14; idx <= 15 && U_SUCCESS(status); idx++) {
  ------------------
  |  Branch (197:24): [True: 3.64k, False: 1.82k]
  |  Branch (197:37): [True: 3.64k, False: 0]
  ------------------
  198|  3.64k|            n = ASCII_DIGIT((int32_t)text[idx]);
  ------------------
  |  |  138|  3.64k|#define ASCII_DIGIT(c) (((c)>=0x30 && (c)<=0x39) ? (c)-0x30 : -1)
  |  |  ------------------
  |  |  |  Branch (138:26): [True: 3.64k, False: 0]
  |  |  |  Branch (138:39): [True: 3.64k, False: 0]
  |  |  ------------------
  ------------------
  199|  3.64k|            if (n >= 0) {
  ------------------
  |  Branch (199:17): [True: 3.64k, False: 0]
  ------------------
  200|  3.64k|                min = 10*min + n;
  201|  3.64k|            } else {
  202|      0|                status = U_INVALID_FORMAT_ERROR;
  203|      0|            }
  204|  3.64k|        }
  205|  1.82k|    }
  206|       |
  207|  1.82k|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (207:9): [True: 1.82k, False: 0]
  ------------------
  208|  1.82k|        UDate date = Grego::fieldsToDay(year, month - 1, day) * U_MILLIS_PER_DAY
  ------------------
  |  |  227|  1.82k|#define U_MILLIS_PER_DAY       (86400000)
  ------------------
  209|  1.82k|            + hour * U_MILLIS_PER_HOUR + min * U_MILLIS_PER_MINUTE;
  ------------------
  |  |  225|  1.82k|#define U_MILLIS_PER_HOUR       (3600000)
  ------------------
                          + hour * U_MILLIS_PER_HOUR + min * U_MILLIS_PER_MINUTE;
  ------------------
  |  |  223|  1.82k|#define U_MILLIS_PER_MINUTE       (60000)
  ------------------
  210|  1.82k|        return date;
  211|  1.82k|    }
  212|      0|    return 0;
  213|  1.82k|}
zonemeta.cpp:_ZN6icu_78L24initAvailableMetaZoneIDsEv:
  776|      1|static void U_CALLCONV initAvailableMetaZoneIDs () {
  777|      1|    U_ASSERT(gMetaZoneIDs == nullptr);
  ------------------
  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  ------------------
  778|      1|    U_ASSERT(gMetaZoneIDTable == nullptr);
  ------------------
  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  ------------------
  779|      1|    ucln_i18n_registerCleanup(UCLN_I18N_ZONEMETA, zoneMeta_cleanup);
  ------------------
  |  |  618|      1|#define ucln_i18n_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_i18n_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  780|       |
  781|      1|    UErrorCode status = U_ZERO_ERROR;
  782|      1|    gMetaZoneIDTable = uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, nullptr, &status);
  ------------------
  |  | 1030|      1|#define uhash_open U_ICU_ENTRY_POINT_RENAME(uhash_open)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  gMetaZoneIDTable = uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, nullptr, &status);
  ------------------
  |  | 1017|      1|#define uhash_hashUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_hashUnicodeString)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  gMetaZoneIDTable = uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, nullptr, &status);
  ------------------
  |  |  999|      1|#define uhash_compareUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_compareUnicodeString)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  783|      1|    if (U_FAILURE(status) || gMetaZoneIDTable == nullptr) {
  ------------------
  |  Branch (783:9): [True: 0, False: 1]
  |  Branch (783:30): [True: 0, False: 1]
  ------------------
  784|      0|        gMetaZoneIDTable = nullptr;
  785|      0|        return;
  786|      0|    }
  787|      1|    uhash_setKeyDeleter(gMetaZoneIDTable, uprv_deleteUObject);
  ------------------
  |  | 1040|      1|#define uhash_setKeyDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setKeyDeleter)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  uhash_setKeyDeleter(gMetaZoneIDTable, uprv_deleteUObject);
  ------------------
  |  | 1489|      1|#define uprv_deleteUObject U_ICU_ENTRY_POINT_RENAME(uprv_deleteUObject)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  788|       |    // No valueDeleter, because the vector maintain the value objects
  789|      1|    gMetaZoneIDs = new UVector(nullptr, uhash_compareUChars, status);
  ------------------
  |  |  998|      1|#define uhash_compareUChars U_ICU_ENTRY_POINT_RENAME(uhash_compareUChars)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  790|      1|    if (U_FAILURE(status) || gMetaZoneIDs == nullptr) {
  ------------------
  |  Branch (790:9): [True: 0, False: 1]
  |  Branch (790:30): [True: 0, False: 1]
  ------------------
  791|      0|        delete gMetaZoneIDs;
  792|      0|        gMetaZoneIDs = nullptr;
  793|      0|        uhash_close(gMetaZoneIDTable);
  ------------------
  |  |  991|      0|#define uhash_close U_ICU_ENTRY_POINT_RENAME(uhash_close)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  794|      0|        gMetaZoneIDTable = nullptr;
  795|      0|        return;
  796|      0|    }
  797|      1|    gMetaZoneIDs->setDeleter(uprv_free);
  ------------------
  |  | 1503|      1|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  798|       |
  799|      1|    UResourceBundle *rb = ures_openDirect(nullptr, gMetaZones, &status);
  ------------------
  |  | 1693|      1|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  800|      1|    UResourceBundle *bundle = ures_getByKey(rb, gMapTimezonesTag, nullptr, &status);
  ------------------
  |  | 1661|      1|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  801|      1|    StackUResourceBundle res;
  802|    191|    while (U_SUCCESS(status) && ures_hasNext(bundle)) {
  ------------------
  |  | 1689|    191|#define ures_hasNext U_ICU_ENTRY_POINT_RENAME(ures_hasNext)
  |  |  ------------------
  |  |  |  |  123|    191|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    191|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    191|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (802:12): [True: 191, False: 0]
  |  Branch (802:33): [True: 190, False: 1]
  ------------------
  803|    190|        ures_getNextResource(bundle, res.getAlias(), &status);
  ------------------
  |  | 1672|    190|#define ures_getNextResource U_ICU_ENTRY_POINT_RENAME(ures_getNextResource)
  |  |  ------------------
  |  |  |  |  123|    190|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    190|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    190|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  804|    190|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (804:13): [True: 0, False: 190]
  ------------------
  805|      0|            break;
  806|      0|        }
  807|    190|        const char *mzID = ures_getKey(res.getAlias());
  ------------------
  |  | 1666|    190|#define ures_getKey U_ICU_ENTRY_POINT_RENAME(ures_getKey)
  |  |  ------------------
  |  |  |  |  123|    190|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    190|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    190|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  808|    190|        int32_t len = static_cast<int32_t>(uprv_strlen(mzID));
  ------------------
  |  |   37|    190|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|    190|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  809|    190|        LocalMemory<char16_t> uMzID(static_cast<char16_t*>(uprv_malloc(sizeof(char16_t) * (len + 1))));
  ------------------
  |  | 1524|    190|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|    190|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    190|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    190|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  810|    190|        if (uMzID.isNull()) {
  ------------------
  |  Branch (810:13): [True: 0, False: 190]
  ------------------
  811|      0|            status = U_MEMORY_ALLOCATION_ERROR;
  812|      0|            break;
  813|      0|        }
  814|    190|        u_charsToUChars(mzID, uMzID.getAlias(), len);
  ------------------
  |  |  226|    190|#define u_charsToUChars U_ICU_ENTRY_POINT_RENAME(u_charsToUChars)
  |  |  ------------------
  |  |  |  |  123|    190|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    190|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    190|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  815|    190|        uMzID[len] = 0;
  816|    190|        LocalPointer<UnicodeString> usMzID(new UnicodeString(uMzID.getAlias()), status);
  817|    190|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (817:13): [True: 0, False: 190]
  ------------------
  818|      0|            break;
  819|      0|        }
  820|    190|        if (uhash_get(gMetaZoneIDTable, usMzID.getAlias()) == nullptr) {
  ------------------
  |  | 1007|    190|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|    190|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    190|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    190|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (820:13): [True: 190, False: 0]
  ------------------
  821|       |            // Note: gMetaZoneIDTable adopts its keys, but not its values.
  822|       |            //       gMetaZoneIDs adopts its values.
  823|    190|            uhash_put(gMetaZoneIDTable, usMzID.orphan(), uMzID.getAlias(), &status);
  ------------------
  |  | 1032|    190|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|    190|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    190|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    190|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  824|    190|            gMetaZoneIDs->adoptElement(uMzID.orphan(), status);
  825|    190|        }
  826|    190|    }
  827|      1|    ures_close(bundle);
  ------------------
  |  | 1652|      1|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  828|      1|    ures_close(rb);
  ------------------
  |  | 1652|      1|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|      1|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      1|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      1|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  829|       |
  830|      1|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (830:9): [True: 0, False: 1]
  ------------------
  831|      0|        uhash_close(gMetaZoneIDTable);
  ------------------
  |  |  991|      0|#define uhash_close U_ICU_ENTRY_POINT_RENAME(uhash_close)
  |  |  ------------------
  |  |  |  |  123|      0|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      0|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      0|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  832|      0|        delete gMetaZoneIDs;
  833|      0|        gMetaZoneIDTable = nullptr;
  834|      0|        gMetaZoneIDs = nullptr;
  835|      0|    }
  836|      1|}

LLVMFuzzerTestOneInput:
   13|    426|extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
   14|    426|    uint16_t rnd;
   15|    426|    icu::DateFormatSymbols::DtContextType context;
   16|    426|    icu::DateFormatSymbols::DtWidthType width;
   17|    426|    if (size < sizeof(rnd) + sizeof(context) + sizeof(width)) return 0;
  ------------------
  |  Branch (17:9): [True: 6, False: 420]
  ------------------
   18|    420|    icu::StringPiece fuzzData(reinterpret_cast<const char *>(data), size);
   19|       |
   20|    420|    std::memcpy(&rnd, fuzzData.data(), sizeof(rnd));
   21|    420|    icu::Locale locale = GetRandomLocale(rnd);
   22|    420|    fuzzData.remove_prefix(sizeof(rnd));
   23|       |
   24|    420|    std::memcpy(&context, fuzzData.data(), sizeof(context));
   25|    420|    fuzzData.remove_prefix(sizeof(context));
   26|    420|    icu::DateFormatSymbols::DtContextType context_mod =
   27|    420|        static_cast<icu::DateFormatSymbols::DtContextType>(
   28|    420|            context % icu::DateFormatSymbols::DtContextType::DT_CONTEXT_COUNT);
   29|    420|;
   30|    420|    std::memcpy(&width, fuzzData.data(), sizeof(width));
   31|    420|    fuzzData.remove_prefix(sizeof(width));
   32|    420|    icu::DateFormatSymbols::DtWidthType width_mod =
   33|    420|        static_cast<icu::DateFormatSymbols::DtWidthType>(
   34|    420|            width % icu::DateFormatSymbols::DtWidthType::DT_WIDTH_COUNT);
   35|       |
   36|    420|    size_t len = fuzzData.size() / sizeof(char16_t);
   37|    420|    icu::UnicodeString text(false, reinterpret_cast<const char16_t*>(fuzzData.data()), len);
   38|    420|    const icu::UnicodeString items[] = { text, text, text, text };
   39|       |
   40|    420|    UErrorCode status = U_ZERO_ERROR;
   41|    420|    std::unique_ptr<icu::DateFormatSymbols> dfs(
   42|    420|        new icu::DateFormatSymbols(locale, status));
   43|    420|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (43:9): [True: 0, False: 420]
  ------------------
   44|      0|        return EXIT_SUCCESS;
   45|      0|    }
   46|       |
   47|    420|    int32_t count;
   48|    420|    dfs->getEras(count);
   49|    420|    dfs->getEraNames(count);
   50|    420|    dfs->getNarrowEras(count);
   51|    420|    dfs->getMonths(count);
   52|    420|    dfs->getShortMonths(count);
   53|    420|    dfs->getMonths(count, context, width);
   54|    420|    dfs->getMonths(count, context_mod, width_mod);
   55|    420|    dfs->getWeekdays(count);
   56|    420|    dfs->getShortWeekdays(count);
   57|    420|    dfs->getWeekdays(count, context, width);
   58|    420|    dfs->getWeekdays(count, context_mod, width_mod);
   59|    420|    dfs->getShortWeekdays(count);
   60|    420|    dfs->getQuarters(count, context_mod, width_mod);
   61|    420|    dfs->getAmPmStrings(count);
   62|       |
   63|    420|    icu::UnicodeString output;
   64|    420|    dfs->getTimeSeparatorString(output);
   65|    420|    dfs->getYearNames(count, context, width);
   66|    420|    dfs->getYearNames(count, context_mod, width_mod);
   67|    420|    dfs->getZodiacNames(count, context, width);
   68|    420|    dfs->getZodiacNames(count, context_mod, width_mod);
   69|    420|    dfs->getLeapMonthPatterns(count);
   70|    420|    int32_t count2;
   71|    420|    dfs->getZoneStrings(count, count2);
   72|    420|    dfs->getLocalPatternChars(output);
   73|       |
   74|    420|    return EXIT_SUCCESS;
   75|    420|}

_Z15GetRandomLocalet:
   19|    420|const icu::Locale& GetRandomLocale(uint16_t rnd) {
   20|    420|  int32_t num_locales = 0;
   21|    420|  const icu::Locale* locales = icu::Locale::getAvailableLocales(num_locales);
   22|    420|  assert(num_locales > 0);
   23|    420|  return locales[rnd % num_locales];
   24|    420|}

