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

locid.cpp:_ZN6icu_7812ByteSinkUtil28viaByteSinkToTerminatedCharsIZZNS_6Locale4initENS_11StringPieceEaENK3$_0clENSt3__117basic_string_viewIcNS5_11char_traitsIcEEEEPciR10UErrorCodeEUlRNS_8ByteSinkESC_E_vEEiSA_iOT_SC_:
  112|  71.2k|                                                UErrorCode& status) {
  113|  71.2k|        if (U_FAILURE(status)) { return 0; }
  ------------------
  |  Branch (113:13): [True: 0, False: 71.2k]
  ------------------
  114|  71.2k|        CheckedArrayByteSink sink(buffer, capacity);
  115|  71.2k|        lambda(sink, status);
  116|  71.2k|        if (U_FAILURE(status)) { return 0; }
  ------------------
  |  Branch (116:13): [True: 414, False: 70.8k]
  ------------------
  117|       |
  118|  70.8k|        int32_t reslen = sink.NumberOfBytesAppended();
  119|       |
  120|  70.8k|        if (sink.Overflowed()) {
  ------------------
  |  Branch (120:13): [True: 2.32k, False: 68.4k]
  ------------------
  121|  2.32k|            status = U_BUFFER_OVERFLOW_ERROR;
  122|  2.32k|            return reslen;
  123|  2.32k|        }
  124|       |
  125|  68.4k|        return u_terminateChars(buffer, capacity, reslen, &status);
  ------------------
  |  |  406|  68.4k|#define u_terminateChars U_ICU_ENTRY_POINT_RENAME(u_terminateChars)
  |  |  ------------------
  |  |  |  |  123|  68.4k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  68.4k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  68.4k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  126|  70.8k|    }
loclikely.cpp:_ZN6icu_7812ByteSinkUtil23viaByteSinkToCharStringIZ27ulocimp_addLikelySubtags_78PKcR10UErrorCodeE3$_0vEENS_10CharStringEOT_S5_:
  141|  20.0k|    static CharString viaByteSinkToCharString(F&& lambda, UErrorCode& status) {
  142|  20.0k|        if (U_FAILURE(status)) { return {}; }
  ------------------
  |  Branch (142:13): [True: 0, False: 20.0k]
  ------------------
  143|  20.0k|        CharString result;
  144|  20.0k|        CharStringByteSink sink(&result);
  145|  20.0k|        lambda(sink, status);
  146|  20.0k|        return result;
  147|  20.0k|    }
loclikely.cpp:_ZN6icu_7812ByteSinkUtil23viaByteSinkToCharStringIZ26ulocimp_minimizeSubtags_78PKcbR10UErrorCodeE3$_0vEENS_10CharStringEOT_S5_:
  141|  7.16k|    static CharString viaByteSinkToCharString(F&& lambda, UErrorCode& status) {
  142|  7.16k|        if (U_FAILURE(status)) { return {}; }
  ------------------
  |  Branch (142:13): [True: 0, False: 7.16k]
  ------------------
  143|  7.16k|        CharString result;
  144|  7.16k|        CharStringByteSink sink(&result);
  145|  7.16k|        lambda(sink, status);
  146|  7.16k|        return result;
  147|  7.16k|    }
uloc.cpp:_ZN6icu_7812ByteSinkUtil28viaByteSinkToTerminatedCharsIZ23uloc_getKeywordValue_78E3$_0vEEiPciOT_R10UErrorCode:
  112|  40.9k|                                                UErrorCode& status) {
  113|  40.9k|        if (U_FAILURE(status)) { return 0; }
  ------------------
  |  Branch (113:13): [True: 0, False: 40.9k]
  ------------------
  114|  40.9k|        CheckedArrayByteSink sink(buffer, capacity);
  115|  40.9k|        lambda(sink, status);
  116|  40.9k|        if (U_FAILURE(status)) { return 0; }
  ------------------
  |  Branch (116:13): [True: 87, False: 40.8k]
  ------------------
  117|       |
  118|  40.8k|        int32_t reslen = sink.NumberOfBytesAppended();
  119|       |
  120|  40.8k|        if (sink.Overflowed()) {
  ------------------
  |  Branch (120:13): [True: 6, False: 40.8k]
  ------------------
  121|      6|            status = U_BUFFER_OVERFLOW_ERROR;
  122|      6|            return reslen;
  123|      6|        }
  124|       |
  125|  40.8k|        return u_terminateChars(buffer, capacity, reslen, &status);
  ------------------
  |  |  406|  40.8k|#define u_terminateChars U_ICU_ENTRY_POINT_RENAME(u_terminateChars)
  |  |  ------------------
  |  |  |  |  123|  40.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  40.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  40.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  126|  40.8k|    }
uloc.cpp:_ZN6icu_7812ByteSinkUtil23viaByteSinkToCharStringIZ26ulocimp_getKeywordValue_78PKcNSt3__117basic_string_viewIcNS4_11char_traitsIcEEEER10UErrorCodeE3$_0vEENS_10CharStringEOT_SA_:
  141|   124k|    static CharString viaByteSinkToCharString(F&& lambda, UErrorCode& status) {
  142|   124k|        if (U_FAILURE(status)) { return {}; }
  ------------------
  |  Branch (142:13): [True: 0, False: 124k]
  ------------------
  143|   124k|        CharString result;
  144|   124k|        CharStringByteSink sink(&result);
  145|   124k|        lambda(sink, status);
  146|   124k|        return result;
  147|   124k|    }
uloc.cpp:_ZN6icu_7812ByteSinkUtil23viaByteSinkToCharStringIZ20ulocimp_getRegion_78NSt3__117basic_string_viewIcNS2_11char_traitsIcEEEER10UErrorCodeE3$_0vEENS_10CharStringEOT_S8_:
  141|  48.2k|    static CharString viaByteSinkToCharString(F&& lambda, UErrorCode& status) {
  142|  48.2k|        if (U_FAILURE(status)) { return {}; }
  ------------------
  |  Branch (142:13): [True: 0, False: 48.2k]
  ------------------
  143|  48.2k|        CharString result;
  144|  48.2k|        CharStringByteSink sink(&result);
  145|  48.2k|        lambda(sink, status);
  146|  48.2k|        return result;
  147|  48.2k|    }
uloc.cpp:_ZN6icu_7812ByteSinkUtil23viaByteSinkToCharStringIZ20ulocimp_getParent_78PKcR10UErrorCodeE3$_0vEENS_10CharStringEOT_S5_:
  141|   175k|    static CharString viaByteSinkToCharString(F&& lambda, UErrorCode& status) {
  142|   175k|        if (U_FAILURE(status)) { return {}; }
  ------------------
  |  Branch (142:13): [True: 0, False: 175k]
  ------------------
  143|   175k|        CharString result;
  144|   175k|        CharStringByteSink sink(&result);
  145|   175k|        lambda(sink, status);
  146|   175k|        return result;
  147|   175k|    }
uloc.cpp:_ZN6icu_7812ByteSinkUtil23viaByteSinkToCharStringIZ18ulocimp_getName_78NSt3__117basic_string_viewIcNS2_11char_traitsIcEEEER10UErrorCodeE3$_0vEENS_10CharStringEOT_S8_:
  141|  5.54k|    static CharString viaByteSinkToCharString(F&& lambda, UErrorCode& status) {
  142|  5.54k|        if (U_FAILURE(status)) { return {}; }
  ------------------
  |  Branch (142:13): [True: 0, False: 5.54k]
  ------------------
  143|  5.54k|        CharString result;
  144|  5.54k|        CharStringByteSink sink(&result);
  145|  5.54k|        lambda(sink, status);
  146|  5.54k|        return result;
  147|  5.54k|    }
uloc.cpp:_ZN6icu_7812ByteSinkUtil23viaByteSinkToCharStringIZ22ulocimp_getBaseName_78NSt3__117basic_string_viewIcNS2_11char_traitsIcEEEER10UErrorCodeE3$_0vEENS_10CharStringEOT_S8_:
  141|   346k|    static CharString viaByteSinkToCharString(F&& lambda, UErrorCode& status) {
  142|   346k|        if (U_FAILURE(status)) { return {}; }
  ------------------
  |  Branch (142:13): [True: 748, False: 345k]
  ------------------
  143|   345k|        CharString result;
  144|   345k|        CharStringByteSink sink(&result);
  145|   345k|        lambda(sink, status);
  146|   345k|        return result;
  147|   346k|    }
uloc.cpp:_ZN6icu_7812ByteSinkUtil23viaByteSinkToCharStringIZ23ulocimp_canonicalize_78NSt3__117basic_string_viewIcNS2_11char_traitsIcEEEER10UErrorCodeE3$_0vEENS_10CharStringEOT_S8_:
  141|  34.3k|    static CharString viaByteSinkToCharString(F&& lambda, UErrorCode& status) {
  142|  34.3k|        if (U_FAILURE(status)) { return {}; }
  ------------------
  |  Branch (142:13): [True: 0, False: 34.3k]
  ------------------
  143|  34.3k|        CharString result;
  144|  34.3k|        CharStringByteSink sink(&result);
  145|  34.3k|        lambda(sink, status);
  146|  34.3k|        return result;
  147|  34.3k|    }
uloc_tag.cpp:_ZN6icu_7812ByteSinkUtil23viaByteSinkToCharStringIZ25ulocimp_forLanguageTag_78PKciPiR10UErrorCodeE3$_0vEENS_10CharStringEOT_S6_:
  141|   143k|    static CharString viaByteSinkToCharString(F&& lambda, UErrorCode& status) {
  142|   143k|        if (U_FAILURE(status)) { return {}; }
  ------------------
  |  Branch (142:13): [True: 0, False: 143k]
  ------------------
  143|   143k|        CharString result;
  144|   143k|        CharStringByteSink sink(&result);
  145|   143k|        lambda(sink, status);
  146|   143k|        return result;
  147|   143k|    }

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

_ZN6icu_789BytesTrieD2Ev:
   26|  32.9k|BytesTrie::~BytesTrie() {
   27|  32.9k|    uprv_free(ownedArray_);
  ------------------
  |  | 1503|  32.9k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  32.9k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  32.9k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  32.9k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   28|  32.9k|}
_ZN6icu_789BytesTrie9readValueEPKhi:
   32|  32.9k|BytesTrie::readValue(const uint8_t *pos, int32_t leadByte) {
   33|  32.9k|    int32_t value;
   34|  32.9k|    if(leadByte<kMinTwoByteValueLead) {
  ------------------
  |  Branch (34:8): [True: 77, False: 32.8k]
  ------------------
   35|     77|        value=leadByte-kMinOneByteValueLead;
   36|  32.8k|    } else if(leadByte<kMinThreeByteValueLead) {
  ------------------
  |  Branch (36:15): [True: 32.3k, False: 454]
  ------------------
   37|  32.3k|        value=((leadByte-kMinTwoByteValueLead)<<8)|*pos;
   38|  32.3k|    } else if(leadByte<kFourByteValueLead) {
  ------------------
  |  Branch (38:15): [True: 454, False: 0]
  ------------------
   39|    454|        value=((leadByte-kMinThreeByteValueLead)<<16)|(pos[0]<<8)|pos[1];
   40|    454|    } else if(leadByte==kFourByteValueLead) {
  ------------------
  |  Branch (40:15): [True: 0, False: 0]
  ------------------
   41|      0|        value=(pos[0]<<16)|(pos[1]<<8)|pos[2];
   42|      0|    } else {
   43|      0|        value=(pos[0]<<24)|(pos[1]<<16)|(pos[2]<<8)|pos[3];
   44|      0|    }
   45|  32.9k|    return value;
   46|  32.9k|}
_ZN6icu_789BytesTrie11jumpByDeltaEPKh:
   49|   145k|BytesTrie::jumpByDelta(const uint8_t *pos) {
   50|   145k|    int32_t delta=*pos++;
   51|   145k|    if(delta<kMinTwoByteDeltaLead) {
  ------------------
  |  Branch (51:8): [True: 37.1k, False: 108k]
  ------------------
   52|       |        // nothing to do
   53|   108k|    } else if(delta<kMinThreeByteDeltaLead) {
  ------------------
  |  Branch (53:15): [True: 99.5k, False: 9.10k]
  ------------------
   54|  99.5k|        delta=((delta-kMinTwoByteDeltaLead)<<8)|*pos++;
   55|  99.5k|    } else if(delta<kFourByteDeltaLead) {
  ------------------
  |  Branch (55:15): [True: 9.10k, False: 0]
  ------------------
   56|  9.10k|        delta=((delta-kMinThreeByteDeltaLead)<<16)|(pos[0]<<8)|pos[1];
   57|  9.10k|        pos+=2;
   58|  9.10k|    } else if(delta==kFourByteDeltaLead) {
  ------------------
  |  Branch (58:15): [True: 0, False: 0]
  ------------------
   59|      0|        delta=(pos[0]<<16)|(pos[1]<<8)|pos[2];
   60|      0|        pos+=3;
   61|      0|    } else {
   62|      0|        delta=(pos[0]<<24)|(pos[1]<<16)|(pos[2]<<8)|pos[3];
   63|      0|        pos+=4;
   64|      0|    }
   65|   145k|    return pos+delta;
   66|   145k|}
_ZN6icu_789BytesTrie10branchNextEPKhii:
   81|  80.7k|BytesTrie::branchNext(const uint8_t *pos, int32_t length, int32_t inByte) {
   82|       |    // Branch according to the current byte.
   83|  80.7k|    if(length==0) {
  ------------------
  |  Branch (83:8): [True: 67.7k, False: 12.9k]
  ------------------
   84|  67.7k|        length=*pos++;
   85|  67.7k|    }
   86|  80.7k|    ++length;
   87|       |    // The length of the branch is the number of bytes to select from.
   88|       |    // The data structure encodes a binary search.
   89|   288k|    while(length>kMaxBranchLinearSubNodeLength) {
  ------------------
  |  Branch (89:11): [True: 207k, False: 80.7k]
  ------------------
   90|   207k|        if(inByte<*pos++) {
  ------------------
  |  Branch (90:12): [True: 145k, False: 61.6k]
  ------------------
   91|   145k|            length>>=1;
   92|   145k|            pos=jumpByDelta(pos);
   93|   145k|        } else {
   94|  61.6k|            length=length-(length>>1);
   95|  61.6k|            pos=skipDelta(pos);
   96|  61.6k|        }
   97|   207k|    }
   98|       |    // Drop down to linear search for the last few bytes.
   99|       |    // length>=2 because the loop body above sees length>kMaxBranchLinearSubNodeLength>=3
  100|       |    // and divides length by 2.
  101|   134k|    do {
  102|   134k|        if(inByte==*pos++) {
  ------------------
  |  Branch (102:12): [True: 60.7k, False: 73.3k]
  ------------------
  103|  60.7k|            UStringTrieResult result;
  104|  60.7k|            int32_t node=*pos;
  105|  60.7k|            U_ASSERT(node>=kMinValueLead);
  ------------------
  |  |   35|  60.7k|#   define U_ASSERT(exp) (void)0
  ------------------
  106|  60.7k|            if(node&kValueIsFinal) {
  ------------------
  |  Branch (106:16): [True: 28.4k, False: 32.2k]
  ------------------
  107|       |                // Leave the final value for getValue() to read.
  108|  28.4k|                result=USTRINGTRIE_FINAL_VALUE;
  109|  32.2k|            } else {
  110|       |                // Use the non-final value as the jump delta.
  111|  32.2k|                ++pos;
  112|       |                // int32_t delta=readValue(pos, node>>1);
  113|  32.2k|                node>>=1;
  114|  32.2k|                int32_t delta;
  115|  32.2k|                if(node<kMinTwoByteValueLead) {
  ------------------
  |  Branch (115:20): [True: 5.03k, False: 27.2k]
  ------------------
  116|  5.03k|                    delta=node-kMinOneByteValueLead;
  117|  27.2k|                } else if(node<kMinThreeByteValueLead) {
  ------------------
  |  Branch (117:27): [True: 27.0k, False: 215]
  ------------------
  118|  27.0k|                    delta=((node-kMinTwoByteValueLead)<<8)|*pos++;
  119|  27.0k|                } else if(node<kFourByteValueLead) {
  ------------------
  |  Branch (119:27): [True: 215, False: 0]
  ------------------
  120|    215|                    delta=((node-kMinThreeByteValueLead)<<16)|(pos[0]<<8)|pos[1];
  121|    215|                    pos+=2;
  122|    215|                } else if(node==kFourByteValueLead) {
  ------------------
  |  Branch (122:27): [True: 0, False: 0]
  ------------------
  123|      0|                    delta=(pos[0]<<16)|(pos[1]<<8)|pos[2];
  124|      0|                    pos+=3;
  125|      0|                } else {
  126|      0|                    delta=(pos[0]<<24)|(pos[1]<<16)|(pos[2]<<8)|pos[3];
  127|      0|                    pos+=4;
  128|      0|                }
  129|       |                // end readValue()
  130|  32.2k|                pos+=delta;
  131|  32.2k|                node=*pos;
  132|  32.2k|                result= node>=kMinValueLead ? valueResult(node) : USTRINGTRIE_NO_VALUE;
  ------------------
  |  Branch (132:25): [True: 295, False: 31.9k]
  ------------------
  133|  32.2k|            }
  134|  60.7k|            pos_=pos;
  135|  60.7k|            return result;
  136|  60.7k|        }
  137|  73.3k|        --length;
  138|  73.3k|        pos=skipValue(pos);
  139|  73.3k|    } while(length>1);
  ------------------
  |  Branch (139:13): [True: 53.3k, False: 19.9k]
  ------------------
  140|  19.9k|    if(inByte==*pos++) {
  ------------------
  |  Branch (140:8): [True: 11.4k, False: 8.50k]
  ------------------
  141|  11.4k|        pos_=pos;
  142|  11.4k|        int32_t node=*pos;
  143|  11.4k|        return node>=kMinValueLead ? valueResult(node) : USTRINGTRIE_NO_VALUE;
  ------------------
  |  Branch (143:16): [True: 4.12k, False: 7.33k]
  ------------------
  144|  11.4k|    } else {
  145|  8.50k|        stop();
  146|  8.50k|        return USTRINGTRIE_NO_MATCH;
  147|  8.50k|    }
  148|  19.9k|}
_ZN6icu_789BytesTrie8nextImplEPKhi:
  151|  81.7k|BytesTrie::nextImpl(const uint8_t *pos, int32_t inByte) {
  152|  82.2k|    for(;;) {
  153|  82.2k|        int32_t node=*pos++;
  154|  82.2k|        if(node<kMinLinearMatch) {
  ------------------
  |  Branch (154:12): [True: 80.7k, False: 1.55k]
  ------------------
  155|  80.7k|            return branchNext(pos, node, inByte);
  156|  80.7k|        } else if(node<kMinValueLead) {
  ------------------
  |  Branch (156:19): [True: 1.00k, False: 551]
  ------------------
  157|       |            // Match the first of length+1 bytes.
  158|  1.00k|            int32_t length=node-kMinLinearMatch;  // Actual match length minus 1.
  159|  1.00k|            if(inByte==*pos++) {
  ------------------
  |  Branch (159:16): [True: 742, False: 261]
  ------------------
  160|    742|                remainingMatchLength_=--length;
  161|    742|                pos_=pos;
  162|    742|                return (length<0 && (node=*pos)>=kMinValueLead) ?
  ------------------
  |  Branch (162:25): [True: 293, False: 449]
  |  Branch (162:37): [True: 206, False: 87]
  ------------------
  163|    536|                        valueResult(node) : USTRINGTRIE_NO_VALUE;
  164|    742|            } else {
  165|       |                // No match.
  166|    261|                break;
  167|    261|            }
  168|  1.00k|        } else if(node&kValueIsFinal) {
  ------------------
  |  Branch (168:19): [True: 0, False: 551]
  ------------------
  169|       |            // No further matching bytes.
  170|      0|            break;
  171|    551|        } else {
  172|       |            // Skip intermediate value.
  173|    551|            pos=skipValue(pos, node);
  174|       |            // The next node must not also be a value node.
  175|    551|            U_ASSERT(*pos<kMinValueLead);
  ------------------
  |  |   35|    551|#   define U_ASSERT(exp) (void)0
  ------------------
  176|    551|        }
  177|  82.2k|    }
  178|    261|    stop();
  179|    261|    return USTRINGTRIE_NO_MATCH;
  180|  81.7k|}
_ZN6icu_789BytesTrie4nextEi:
  183|  82.4k|BytesTrie::next(int32_t inByte) {
  184|  82.4k|    const uint8_t *pos=pos_;
  185|  82.4k|    if(pos==nullptr) {
  ------------------
  |  Branch (185:8): [True: 0, False: 82.4k]
  ------------------
  186|      0|        return USTRINGTRIE_NO_MATCH;
  187|      0|    }
  188|  82.4k|    if(inByte<0) {
  ------------------
  |  Branch (188:8): [True: 0, False: 82.4k]
  ------------------
  189|      0|        inByte+=0x100;
  190|      0|    }
  191|  82.4k|    int32_t length=remainingMatchLength_;  // Actual remaining match length minus 1.
  192|  82.4k|    if(length>=0) {
  ------------------
  |  Branch (192:8): [True: 715, False: 81.7k]
  ------------------
  193|       |        // Remaining part of a linear-match node.
  194|    715|        if(inByte==*pos++) {
  ------------------
  |  Branch (194:12): [True: 615, False: 100]
  ------------------
  195|    615|            remainingMatchLength_=--length;
  196|    615|            pos_=pos;
  197|    615|            int32_t node;
  198|    615|            return (length<0 && (node=*pos)>=kMinValueLead) ?
  ------------------
  |  Branch (198:21): [True: 349, False: 266]
  |  Branch (198:33): [True: 230, False: 119]
  ------------------
  199|    385|                    valueResult(node) : USTRINGTRIE_NO_VALUE;
  200|    615|        } else {
  201|    100|            stop();
  202|    100|            return USTRINGTRIE_NO_MATCH;
  203|    100|        }
  204|    715|    }
  205|  81.7k|    return nextImpl(pos, inByte);
  206|  82.4k|}

_ZN6icu_7810CharStringC2EOS0_:
   30|   165k|        : buffer(std::move(src.buffer)), len(src.len) {
   31|   165k|    src.len = 0;  // not strictly necessary because we make no guarantees on the source string
   32|   165k|}
_ZN6icu_7810CharStringaSEOS0_:
   34|   431k|CharString& CharString::operator=(CharString&& src) noexcept {
   35|   431k|    buffer = std::move(src.buffer);
   36|   431k|    len = src.len;
   37|   431k|    src.len = 0;  // not strictly necessary because we make no guarantees on the source string
   38|   431k|    return *this;
   39|   431k|}
_ZNK6icu_7810CharString9cloneDataER10UErrorCode:
   41|  38.5k|char *CharString::cloneData(UErrorCode &errorCode) const {
   42|  38.5k|    if (U_FAILURE(errorCode)) { return nullptr; }
  ------------------
  |  Branch (42:9): [True: 0, False: 38.5k]
  ------------------
   43|  38.5k|    char *p = static_cast<char *>(uprv_malloc(len + 1));
  ------------------
  |  | 1524|  38.5k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  38.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  38.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  38.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   44|  38.5k|    if (p == nullptr) {
  ------------------
  |  Branch (44:9): [True: 0, False: 38.5k]
  ------------------
   45|      0|        errorCode = U_MEMORY_ALLOCATION_ERROR;
   46|      0|        return nullptr;
   47|      0|    }
   48|  38.5k|    uprv_memcpy(p, buffer.getAlias(), len + 1);
  ------------------
  |  |   42|  38.5k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  38.5k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  38.5k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  38.5k|    _Pragma("clang diagnostic push") \
  |  |   45|  38.5k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  38.5k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  38.5k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  38.5k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  38.5k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  38.5k|    _Pragma("clang diagnostic pop") \
  |  |   49|  38.5k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  38.5k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  38.5k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  38.5k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   49|  38.5k|    return p;
   50|  38.5k|}
_ZNK6icu_7810CharString7extractEPciR10UErrorCode:
   52|  26.9k|int32_t CharString::extract(char *dest, int32_t capacity, UErrorCode &errorCode) const {
   53|  26.9k|    if (U_FAILURE(errorCode)) { return len; }
  ------------------
  |  Branch (53:9): [True: 0, False: 26.9k]
  ------------------
   54|  26.9k|    if (capacity < 0 || (capacity > 0 && dest == nullptr)) {
  ------------------
  |  Branch (54:9): [True: 0, False: 26.9k]
  |  Branch (54:26): [True: 26.9k, False: 0]
  |  Branch (54:42): [True: 0, False: 26.9k]
  ------------------
   55|      0|        errorCode = U_ILLEGAL_ARGUMENT_ERROR;
   56|      0|        return len;
   57|      0|    }
   58|  26.9k|    const char *src = buffer.getAlias();
   59|  26.9k|    if (0 < len && len <= capacity && src != dest) {
  ------------------
  |  Branch (59:9): [True: 26.9k, False: 0]
  |  Branch (59:20): [True: 26.9k, False: 6]
  |  Branch (59:39): [True: 26.9k, False: 0]
  ------------------
   60|  26.9k|        uprv_memcpy(dest, src, len);
  ------------------
  |  |   42|  26.9k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  26.9k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  26.9k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  26.9k|    _Pragma("clang diagnostic push") \
  |  |   45|  26.9k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  26.9k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  26.9k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  26.9k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  26.9k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  26.9k|    _Pragma("clang diagnostic pop") \
  |  |   49|  26.9k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  26.9k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  26.9k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  26.9k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   61|  26.9k|    }
   62|  26.9k|    return u_terminateChars(dest, capacity, len, &errorCode);
  ------------------
  |  |  406|  26.9k|#define u_terminateChars U_ICU_ENTRY_POINT_RENAME(u_terminateChars)
  |  |  ------------------
  |  |  |  |  123|  26.9k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  26.9k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  26.9k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   63|  26.9k|}
_ZN6icu_7810CharString8copyFromERKS0_R10UErrorCode:
   65|  1.11M|CharString &CharString::copyFrom(const CharString &s, UErrorCode &errorCode) {
   66|  1.11M|    if(U_SUCCESS(errorCode) && this!=&s && ensureCapacity(s.len+1, 0, errorCode)) {
  ------------------
  |  Branch (66:8): [True: 1.11M, False: 1.49k]
  |  Branch (66:32): [True: 1.11M, False: 0]
  |  Branch (66:44): [True: 1.11M, False: 0]
  ------------------
   67|  1.11M|        len=s.len;
   68|  1.11M|        uprv_memcpy(buffer.getAlias(), s.buffer.getAlias(), len+1);
  ------------------
  |  |   42|  1.11M|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  1.11M|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  1.11M|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  1.11M|    _Pragma("clang diagnostic push") \
  |  |   45|  1.11M|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  1.11M|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.11M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  1.11M|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.11M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  1.11M|    _Pragma("clang diagnostic pop") \
  |  |   49|  1.11M|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  1.11M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  1.11M|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  1.11M|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   69|  1.11M|    }
   70|  1.11M|    return *this;
   71|  1.11M|}
_ZN6icu_7810CharString6appendEcR10UErrorCode:
  113|  2.07M|CharString &CharString::append(char c, UErrorCode &errorCode) {
  114|  2.07M|    if(ensureCapacity(len+2, 0, errorCode)) {
  ------------------
  |  Branch (114:8): [True: 2.07M, False: 83]
  ------------------
  115|  2.07M|        buffer[len++]=c;
  116|  2.07M|        buffer[len]=0;
  117|  2.07M|    }
  118|  2.07M|    return *this;
  119|  2.07M|}
_ZN6icu_7810CharString6appendEPKciR10UErrorCode:
  121|  53.3M|CharString &CharString::append(const char *s, int32_t sLength, UErrorCode &errorCode) {
  122|  53.3M|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (122:8): [True: 181, False: 53.3M]
  ------------------
  123|    181|        return *this;
  124|    181|    }
  125|  53.3M|    if(sLength<-1 || (s==nullptr && sLength!=0)) {
  ------------------
  |  Branch (125:8): [True: 0, False: 53.3M]
  |  Branch (125:23): [True: 1.06M, False: 52.3M]
  |  Branch (125:37): [True: 0, False: 1.06M]
  ------------------
  126|      0|        errorCode=U_ILLEGAL_ARGUMENT_ERROR;
  127|      0|        return *this;
  128|      0|    }
  129|  53.3M|    if(sLength<0) {
  ------------------
  |  Branch (129:8): [True: 28.5k, False: 53.3M]
  ------------------
  130|  28.5k|        sLength= static_cast<int32_t>(uprv_strlen(s));
  ------------------
  |  |   37|  28.5k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  28.5k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  131|  28.5k|    }
  132|  53.3M|    if(sLength>0) {
  ------------------
  |  Branch (132:8): [True: 52.1M, False: 1.20M]
  ------------------
  133|  52.1M|        if(s==(buffer.getAlias()+len)) {
  ------------------
  |  Branch (133:12): [True: 1.17M, False: 51.0M]
  ------------------
  134|       |            // The caller wrote into the getAppendBuffer().
  135|  1.17M|            if(sLength>=(buffer.getCapacity()-len)) {
  ------------------
  |  Branch (135:16): [True: 0, False: 1.17M]
  ------------------
  136|       |                // The caller wrote too much.
  137|      0|                errorCode=U_INTERNAL_PROGRAM_ERROR;
  138|  1.17M|            } else {
  139|  1.17M|                buffer[len+=sLength]=0;
  140|  1.17M|            }
  141|  51.0M|        } else if(buffer.getAlias()<=s && s<(buffer.getAlias()+len) &&
  ------------------
  |  Branch (141:19): [True: 35.9M, False: 15.0M]
  |  Branch (141:43): [True: 0, False: 35.9M]
  ------------------
  142|  51.0M|                  sLength>=(buffer.getCapacity()-len)
  ------------------
  |  Branch (142:19): [True: 0, False: 0]
  ------------------
  143|  51.0M|        ) {
  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|  51.0M|        } else if(ensureCapacity(len+sLength+1, 0, errorCode)) {
  ------------------
  |  Branch (147:19): [True: 51.0M, False: 0]
  ------------------
  148|  51.0M|            uprv_memcpy(buffer.getAlias()+len, s, sLength);
  ------------------
  |  |   42|  51.0M|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  51.0M|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  51.0M|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  51.0M|    _Pragma("clang diagnostic push") \
  |  |   45|  51.0M|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  51.0M|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  51.0M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  51.0M|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  51.0M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  51.0M|    _Pragma("clang diagnostic pop") \
  |  |   49|  51.0M|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  51.0M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  51.0M|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  51.0M|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|  51.0M|            buffer[len+=sLength]=0;
  150|  51.0M|        }
  151|  52.1M|    }
  152|  53.3M|    return *this;
  153|  53.3M|}
_ZN6icu_7810CharString15getAppendBufferEiiRiR10UErrorCode:
  190|  1.23M|                                  UErrorCode &errorCode) {
  191|  1.23M|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (191:8): [True: 0, False: 1.23M]
  ------------------
  192|      0|        resultCapacity=0;
  193|      0|        return nullptr;
  194|      0|    }
  195|  1.23M|    int32_t appendCapacity=buffer.getCapacity()-len-1;  // -1 for NUL
  196|  1.23M|    if(appendCapacity>=minCapacity) {
  ------------------
  |  Branch (196:8): [True: 1.22M, False: 7.65k]
  ------------------
  197|  1.22M|        resultCapacity=appendCapacity;
  198|  1.22M|        return buffer.getAlias()+len;
  199|  1.22M|    }
  200|  7.65k|    if(ensureCapacity(len+minCapacity+1, len+desiredCapacityHint+1, errorCode)) {
  ------------------
  |  Branch (200:8): [True: 7.65k, False: 0]
  ------------------
  201|  7.65k|        resultCapacity=buffer.getCapacity()-len-1;
  202|  7.65k|        return buffer.getAlias()+len;
  203|  7.65k|    }
  204|      0|    resultCapacity=0;
  205|      0|    return nullptr;
  206|  7.65k|}
_ZN6icu_7810CharString20appendInvariantCharsERKNS_13UnicodeStringER10UErrorCode:
  208|    501|CharString &CharString::appendInvariantChars(const UnicodeString &s, UErrorCode &errorCode) {
  209|    501|    return appendInvariantChars(s.getBuffer(), s.length(), errorCode);
  210|    501|}
_ZN6icu_7810CharString20appendInvariantCharsEPKDsiR10UErrorCode:
  212|  1.00M|CharString &CharString::appendInvariantChars(const char16_t* uchars, int32_t ucharsLen, UErrorCode &errorCode) {
  213|  1.00M|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (213:8): [True: 0, False: 1.00M]
  ------------------
  214|      0|        return *this;
  215|      0|    }
  216|  1.00M|    if (!uprv_isInvariantUString(uchars, ucharsLen)) {
  ------------------
  |  | 1518|  1.00M|#define uprv_isInvariantUString U_ICU_ENTRY_POINT_RENAME(uprv_isInvariantUString)
  |  |  ------------------
  |  |  |  |  123|  1.00M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.00M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.00M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (216:9): [True: 0, False: 1.00M]
  ------------------
  217|      0|        errorCode = U_INVARIANT_CONVERSION_ERROR;
  218|      0|        return *this;
  219|      0|    }
  220|  1.00M|    if(ensureCapacity(len+ucharsLen+1, 0, errorCode)) {
  ------------------
  |  Branch (220:8): [True: 1.00M, False: 0]
  ------------------
  221|  1.00M|        u_UCharsToChars(uchars, buffer.getAlias()+len, ucharsLen);
  ------------------
  |  |  211|  1.00M|#define u_UCharsToChars U_ICU_ENTRY_POINT_RENAME(u_UCharsToChars)
  |  |  ------------------
  |  |  |  |  123|  1.00M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.00M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.00M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|  1.00M|        len += ucharsLen;
  223|  1.00M|        buffer[len] = 0;
  224|  1.00M|    }
  225|  1.00M|    return *this;
  226|  1.00M|}
_ZN6icu_7810CharString14ensureCapacityEiiR10UErrorCode:
  230|  55.2M|                                 UErrorCode &errorCode) {
  231|  55.2M|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (231:8): [True: 83, False: 55.2M]
  ------------------
  232|     83|        return false;
  233|     83|    }
  234|  55.2M|    if(capacity>buffer.getCapacity()) {
  ------------------
  |  Branch (234:8): [True: 191k, False: 55.0M]
  ------------------
  235|   191k|        if(desiredCapacityHint==0) {
  ------------------
  |  Branch (235:12): [True: 183k, False: 7.65k]
  ------------------
  236|   183k|            desiredCapacityHint=capacity+buffer.getCapacity();
  237|   183k|        }
  238|   191k|        if( (desiredCapacityHint<=capacity || buffer.resize(desiredCapacityHint, len+1)==nullptr) &&
  ------------------
  |  Branch (238:14): [True: 7.65k, False: 183k]
  |  Branch (238:47): [True: 0, False: 183k]
  ------------------
  239|   191k|            buffer.resize(capacity, len+1)==nullptr
  ------------------
  |  Branch (239:13): [True: 0, False: 7.65k]
  ------------------
  240|   191k|        ) {
  241|      0|            errorCode=U_MEMORY_ALLOCATION_ERROR;
  242|      0|            return false;
  243|      0|        }
  244|   191k|    }
  245|  55.2M|    return true;
  246|  55.2M|}

_ZN6icu_7810CharString4dataEv:
   85|  9.77M|    char *data() { return buffer.getAlias(); }
_ZN6icu_7810CharStringD2Ev:
   56|  11.8M|    ~CharString() {}
_ZN6icu_7810CharStringC2Ev:
   43|  8.33M|    CharString() : len(0) { buffer[0]=0; }
_ZN6icu_7810CharString5clearEv:
  127|   864k|    CharString &clear() { len=0; buffer[0]=0; return *this; }
_ZN6icu_7810CharString6appendENS_11StringPieceER10UErrorCode:
  131|  3.39M|    CharString &append(StringPiece s, UErrorCode &errorCode) {
  132|  3.39M|        return append(s.data(), s.length(), errorCode);
  133|  3.39M|    }
_ZN6icu_7810CharString6appendERKS0_R10UErrorCode:
  134|   817k|    CharString &append(const CharString &s, UErrorCode &errorCode) {
  135|   817k|        return append(s.data(), s.length(), errorCode);
  136|   817k|    }
_ZNK6icu_7810CharString4dataEv:
   84|  1.24M|    const char *data() const { return buffer.getAlias(); }
_ZNK6icu_7810CharString6lengthEv:
   80|  2.41M|    int32_t length() const { return len; }
_ZN6icu_7810CharStringC2ENS_11StringPieceER10UErrorCode:
   44|  1.09M|    CharString(StringPiece s, UErrorCode &errorCode) : len(0) {
   45|  1.09M|        buffer[0]=0;
   46|  1.09M|        append(s, errorCode);
   47|  1.09M|    }
_ZN6icu_7810CharStringC2EPKciR10UErrorCode:
   52|  2.21M|    CharString(const char *s, int32_t sLength, UErrorCode &errorCode) : len(0) {
   53|  2.21M|        buffer[0]=0;
   54|  2.21M|        append(s, sLength, errorCode);
   55|  2.21M|    }
_ZNK6icu_7810CharString7isEmptyEv:
   79|  3.30M|    UBool isEmpty() const { return len==0; }
_ZNK6icu_7810CharStringixEi:
   81|   952k|    char operator[](int32_t index) const { return buffer[index]; }
_ZNK6icu_7810CharString13toStringPieceEv:
   82|   124k|    StringPiece toStringPiece() const { return StringPiece(buffer.getAlias(), len); }
_ZNK6icu_7810CharStringeqERKS0_:
  108|   221k|    bool operator==(const CharString& other) const {
  109|   221k|        return len == other.length() && (len == 0 || uprv_memcmp(data(), other.data(), len) == 0);
  ------------------
  |  |  101|   154k|#define uprv_memcmp(buffer1, buffer2, size) U_STANDARD_CPP_NAMESPACE memcmp(buffer1, buffer2,size)
  |  |  ------------------
  |  |  |  |  393|   154k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (109:16): [True: 154k, False: 66.8k]
  |  Branch (109:42): [True: 171, False: 154k]
  |  Branch (109:54): [True: 136k, False: 17.4k]
  ------------------
  110|   221k|    }
_ZNK6icu_7810CharStringneERKS0_:
  111|  93.7k|    bool operator!=(const CharString& other) const {
  112|  93.7k|        return !operator==(other);
  113|  93.7k|    }
_ZNK6icu_7810CharStringeqENS_11StringPieceE:
  115|   446k|    bool operator==(StringPiece other) const {
  116|   446k|        return len == other.length() && (len == 0 || uprv_memcmp(data(), other.data(), len) == 0);
  ------------------
  |  |  101|  12.5k|#define uprv_memcmp(buffer1, buffer2, size) U_STANDARD_CPP_NAMESPACE memcmp(buffer1, buffer2,size)
  |  |  ------------------
  |  |  |  |  393|  12.5k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (116:16): [True: 12.5k, False: 433k]
  |  Branch (116:42): [True: 0, False: 12.5k]
  |  Branch (116:54): [True: 225, False: 12.2k]
  ------------------
  117|   446k|    }
_ZNK6icu_7810CharStringneENS_11StringPieceE:
  118|  65.4k|    bool operator!=(StringPiece other) const {
  119|  65.4k|        return !operator==(other);
  120|  65.4k|    }

_ZN6icu_7813CharStringMapD2Ev:
   33|     14|    ~CharStringMap() {
   34|     14|        uhash_close(map);
  ------------------
  |  |  991|     14|#define uhash_close U_ICU_ENTRY_POINT_RENAME(uhash_close)
  |  |  ------------------
  |  |  |  |  123|     14|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     14|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     14|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   35|     14|    }
_ZN6icu_7813CharStringMapC2EiR10UErrorCode:
   25|      7|    CharStringMap(int32_t size, UErrorCode &errorCode) {
   26|      7|        map = uhash_openSize(uhash_hashChars, uhash_compareChars, uhash_compareChars,
  ------------------
  |  | 1031|      7|#define uhash_openSize U_ICU_ENTRY_POINT_RENAME(uhash_openSize)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      map = uhash_openSize(uhash_hashChars, uhash_compareChars, uhash_compareChars,
  ------------------
  |  | 1011|      7|#define uhash_hashChars U_ICU_ENTRY_POINT_RENAME(uhash_hashChars)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      map = uhash_openSize(uhash_hashChars, uhash_compareChars, uhash_compareChars,
  ------------------
  |  |  993|      7|#define uhash_compareChars U_ICU_ENTRY_POINT_RENAME(uhash_compareChars)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      map = uhash_openSize(uhash_hashChars, uhash_compareChars, uhash_compareChars,
  ------------------
  |  |  993|      7|#define uhash_compareChars U_ICU_ENTRY_POINT_RENAME(uhash_compareChars)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   27|      7|                             size, &errorCode);
   28|      7|    }
_ZN6icu_7813CharStringMap3putEPKcS2_R10UErrorCode:
   45|  1.57k|    void put(const char *key, const char *value, UErrorCode &errorCode) {
   46|  1.57k|        uhash_put(map, const_cast<char *>(key), const_cast<char *>(value), &errorCode);
  ------------------
  |  | 1032|  1.57k|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|  1.57k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.57k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.57k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   47|  1.57k|    }
_ZN6icu_7813CharStringMapC2EOS0_:
   29|     12|    CharStringMap(CharStringMap &&other) noexcept : map(other.map) {
   30|     12|        other.map = nullptr;
   31|     12|    }
_ZNK6icu_7813CharStringMap3getEPKc:
   44|  39.6k|    const char *get(const char *key) const { return static_cast<const char *>(uhash_get(map, key)); }
  ------------------
  |  | 1007|  39.6k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|  39.6k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  39.6k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  39.6k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
_ZN6icu_7813CharStringMapC2Ev:
   24|      2|    CharStringMap() : map(nullptr) {}
_ZN6icu_7813CharStringMapaSEOS0_:
   37|      2|    CharStringMap &operator=(CharStringMap &&other) noexcept {
   38|      2|        map = other.map;
   39|      2|        other.map = nullptr;
   40|      2|        return *this;
   41|      2|    }

uprv_malloc_78:
   45|  8.46M|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|  8.46M|    if (s > 0) {
  ------------------
  |  Branch (54:9): [True: 8.46M, False: 0]
  ------------------
   55|  8.46M|        if (pAlloc) {
  ------------------
  |  Branch (55:13): [True: 0, False: 8.46M]
  ------------------
   56|      0|            return (*pAlloc)(pContext, s);
   57|  8.46M|        } else {
   58|  8.46M|            return uprv_default_malloc(s);
  ------------------
  |  |  615|  8.46M|# define uprv_default_malloc(x) malloc(x)
  ------------------
   59|  8.46M|        }
   60|  8.46M|    } else {
   61|      0|        return (void *)zeroMem;
   62|      0|    }
   63|  8.46M|}
uprv_realloc_78:
   66|     54|uprv_realloc(void * buffer, size_t size) {
   67|       |#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
   68|       |  putchar('~');
   69|       |  fflush(stdout);
   70|       |#endif
   71|     54|    if (buffer == zeroMem) {
  ------------------
  |  Branch (71:9): [True: 0, False: 54]
  ------------------
   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|     54|    } else if (size == 0) {
  ------------------
  |  Branch (73:16): [True: 0, False: 54]
  ------------------
   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|     54|    } else {
   81|     54|        if (pRealloc) {
  ------------------
  |  Branch (81:13): [True: 0, False: 54]
  ------------------
   82|      0|            return (*pRealloc)(pContext, buffer, size);
   83|     54|        } else {
   84|     54|            return uprv_default_realloc(buffer, size);
  ------------------
  |  |  616|     54|# define uprv_default_realloc(x,y) realloc(x,y)
  ------------------
   85|     54|        }
   86|     54|    }
   87|     54|}
uprv_free_78:
   90|  8.47M|uprv_free(void *buffer) {
   91|       |#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
   92|       |  putchar('<');
   93|       |  fflush(stdout);
   94|       |#endif
   95|  8.47M|    if (buffer != zeroMem) {
  ------------------
  |  Branch (95:9): [True: 8.47M, False: 0]
  ------------------
   96|  8.47M|        if (pFree) {
  ------------------
  |  Branch (96:13): [True: 0, False: 8.47M]
  ------------------
   97|      0|            (*pFree)(pContext, buffer);
   98|  8.47M|        } else {
   99|  8.47M|            uprv_default_free(buffer);
  ------------------
  |  |  617|  8.47M|# define uprv_default_free(x) free(x)
  ------------------
  100|  8.47M|        }
  101|  8.47M|    }
  102|  8.47M|}

_ZN6icu_7815MaybeStackArrayIcLi40EEC2Ev:
  344|  11.6M|    MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(false) {}
_ZN6icu_7815MaybeStackArrayIcLi40EED2Ev:
  363|  11.8M|    ~MaybeStackArray() { releaseArray(); }
_ZN6icu_7815MaybeStackArrayIcLi40EEC2EOS1_:
  479|   165k|        : ptr(src.ptr), capacity(src.capacity), needToRelease(src.needToRelease) {
  480|   165k|    if (src.ptr == src.stackArray) {
  ------------------
  |  Branch (480:9): [True: 165k, False: 0]
  ------------------
  481|   165k|        ptr = stackArray;
  482|   165k|        uprv_memcpy(stackArray, src.stackArray, sizeof(T) * src.capacity);
  ------------------
  |  |   42|   165k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|   165k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|   165k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|   165k|    _Pragma("clang diagnostic push") \
  |  |   45|   165k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|   165k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|   165k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|   165k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|   165k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|   165k|    _Pragma("clang diagnostic pop") \
  |  |   49|   165k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|   165k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|   165k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|   165k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  483|   165k|    } else {
  484|      0|        src.resetToStackArray();  // take ownership away from src
  485|      0|    }
  486|   165k|}
_ZN6icu_7815MaybeStackArrayIcLi40EEaSEOS1_:
  490|   431k|MaybeStackArray<T, stackCapacity>::operator=(MaybeStackArray <T, stackCapacity>&& src) noexcept {
  491|   431k|    releaseArray();  // in case this instance had its own memory allocated
  492|   431k|    capacity = src.capacity;
  493|   431k|    needToRelease = src.needToRelease;
  494|   431k|    if (src.ptr == src.stackArray) {
  ------------------
  |  Branch (494:9): [True: 403k, False: 27.3k]
  ------------------
  495|   403k|        ptr = stackArray;
  496|   403k|        uprv_memcpy(stackArray, src.stackArray, sizeof(T) * src.capacity);
  ------------------
  |  |   42|   403k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|   403k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|   403k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|   403k|    _Pragma("clang diagnostic push") \
  |  |   45|   403k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|   403k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|   403k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|   403k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|   403k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|   403k|    _Pragma("clang diagnostic pop") \
  |  |   49|   403k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|   403k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|   403k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|   403k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  497|   403k|    } else {
  498|  27.3k|        ptr = src.ptr;
  499|  27.3k|        src.resetToStackArray();  // take ownership away from src
  500|  27.3k|    }
  501|   431k|    return *this;
  502|   431k|}
_ZNK6icu_7815MaybeStackArrayIcLi40EE11getCapacityEv:
  376|  57.7M|    int32_t getCapacity() const { return capacity; }
_ZNK6icu_7815MaybeStackArrayIcLi40EE8getAliasEv:
  381|   205M|    T *getAlias() const { return ptr; }
_ZNK6icu_7815MaybeStackArrayIcLi40EEixEl:
  395|   952k|    const T &operator[](ptrdiff_t i) const { return ptr[i]; }
_ZN6icu_7815MaybeStackArrayIcLi40EEixEl:
  402|  69.8M|    T &operator[](ptrdiff_t i) { return ptr[i]; }
_ZN6icu_7815MaybeStackArrayIcLi40EE6resizeEii:
  505|   191k|inline T *MaybeStackArray<T, stackCapacity>::resize(int32_t newCapacity, int32_t length) {
  506|   191k|    if(newCapacity>0) {
  ------------------
  |  Branch (506:8): [True: 191k, 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|   191k|        T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
  ------------------
  |  | 1524|   191k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|   191k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   191k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   191k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|   191k|        if(p!=nullptr) {
  ------------------
  |  Branch (511:12): [True: 191k, False: 0]
  ------------------
  512|   191k|            if(length>0) {
  ------------------
  |  Branch (512:16): [True: 191k, False: 0]
  ------------------
  513|   191k|                if(length>capacity) {
  ------------------
  |  Branch (513:20): [True: 0, False: 191k]
  ------------------
  514|      0|                    length=capacity;
  515|      0|                }
  516|   191k|                if(length>newCapacity) {
  ------------------
  |  Branch (516:20): [True: 0, False: 191k]
  ------------------
  517|      0|                    length=newCapacity;
  518|      0|                }
  519|   191k|                uprv_memcpy(p, ptr, (size_t)length*sizeof(T));
  ------------------
  |  |   42|   191k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|   191k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|   191k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|   191k|    _Pragma("clang diagnostic push") \
  |  |   45|   191k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|   191k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|   191k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|   191k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|   191k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|   191k|    _Pragma("clang diagnostic pop") \
  |  |   49|   191k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|   191k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|   191k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|   191k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|   191k|            }
  521|   191k|            releaseArray();
  522|   191k|            ptr=p;
  523|   191k|            capacity=newCapacity;
  524|   191k|            needToRelease=true;
  525|   191k|        }
  526|   191k|        return p;
  527|   191k|    } else {
  528|      0|        return nullptr;
  529|      0|    }
  530|   191k|}
_ZN6icu_7815MaybeStackArrayIcLi40EE12releaseArrayEv:
  458|  12.4M|    void releaseArray() {
  459|  12.4M|        if(needToRelease) {
  ------------------
  |  Branch (459:12): [True: 191k, False: 12.2M]
  ------------------
  460|   191k|            uprv_free(ptr);
  ------------------
  |  | 1503|   191k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|   191k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   191k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   191k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  461|   191k|        }
  462|  12.4M|    }
_ZN6icu_7815MaybeStackArrayIcLi40EE17resetToStackArrayEv:
  463|  27.3k|    void resetToStackArray() {
  464|  27.3k|        ptr=stackArray;
  465|  27.3k|        capacity=stackCapacity;
  466|  27.3k|        needToRelease=false;
  467|  27.3k|    }
_ZN6icu_7811LocalMemoryIiEC2EPi:
  195|    286|    explicit LocalMemory(T *p=nullptr) : LocalPointerBase<T>(p) {}
_ZN6icu_7811LocalMemoryIiE23allocateInsteadAndResetEi:
  278|    276|inline T *LocalMemory<T>::allocateInsteadAndReset(int32_t newCapacity) {
  279|    276|    if(newCapacity>0) {
  ------------------
  |  Branch (279:8): [True: 276, False: 0]
  ------------------
  280|    276|        T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
  ------------------
  |  | 1524|    276|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|    276|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    276|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    276|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  281|    276|        if(p!=nullptr) {
  ------------------
  |  Branch (281:12): [True: 276, False: 0]
  ------------------
  282|    276|            uprv_memset(p, 0, newCapacity*sizeof(T));
  ------------------
  |  |  100|    276|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|    276|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  283|    276|            uprv_free(LocalPointerBase<T>::ptr);
  ------------------
  |  | 1503|    276|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|    276|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    276|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    276|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|    276|            LocalPointerBase<T>::ptr=p;
  285|    276|        }
  286|    276|        return p;
  287|    276|    } else {
  288|      0|        return nullptr;
  289|      0|    }
  290|    276|}
_ZNK6icu_7811LocalMemoryIiEixEl:
  274|  25.8k|    T &operator[](ptrdiff_t i) const { return LocalPointerBase<T>::ptr[i]; }
_ZN6icu_7811LocalMemoryIiED2Ev:
  206|    286|    ~LocalMemory() {
  207|    286|        uprv_free(LocalPointerBase<T>::ptr);
  ------------------
  |  | 1503|    286|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|    286|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    286|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    286|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  208|    286|    }
_ZN6icu_7810MemoryPoolINS_13UnicodeStringELi8EEC2Ev:
  760|      2|    MemoryPool() : fCount(0), fPool() {}
_ZN6icu_7815MaybeStackArrayIPNS_13UnicodeStringELi8EEC2Ev:
  344|      2|    MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(false) {}
_ZN6icu_7810MemoryPoolINS_13UnicodeStringELi8EED2Ev:
  762|      2|    ~MemoryPool() {
  763|  7.36k|        for (int32_t i = 0; i < fCount; ++i) {
  ------------------
  |  Branch (763:29): [True: 7.36k, False: 2]
  ------------------
  764|  7.36k|            delete fPool[i];
  765|  7.36k|        }
  766|      2|    }
_ZN6icu_7815MaybeStackArrayIPNS_13UnicodeStringELi8EEixEl:
  402|  14.7k|    T &operator[](ptrdiff_t i) { return ptr[i]; }
_ZN6icu_7815MaybeStackArrayIPNS_13UnicodeStringELi8EED2Ev:
  363|      2|    ~MaybeStackArray() { releaseArray(); }
_ZN6icu_7815MaybeStackArrayIPNS_13UnicodeStringELi8EE12releaseArrayEv:
  458|     11|    void releaseArray() {
  459|     11|        if(needToRelease) {
  ------------------
  |  Branch (459:12): [True: 9, False: 2]
  ------------------
  460|      9|            uprv_free(ptr);
  ------------------
  |  | 1503|      9|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|      9|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      9|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      9|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  461|      9|        }
  462|     11|    }
_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|     10|inline T *LocalMemory<T>::allocateInsteadAndCopy(int32_t newCapacity, int32_t length) {
  295|     10|    if(newCapacity>0) {
  ------------------
  |  Branch (295:8): [True: 10, False: 0]
  ------------------
  296|     10|        T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
  ------------------
  |  | 1524|     10|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|     10|        if(p!=nullptr) {
  ------------------
  |  Branch (297:12): [True: 10, False: 0]
  ------------------
  298|     10|            if(length>0) {
  ------------------
  |  Branch (298:16): [True: 0, False: 10]
  ------------------
  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|     10|            uprv_free(LocalPointerBase<T>::ptr);
  ------------------
  |  | 1503|     10|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  305|     10|            LocalPointerBase<T>::ptr=p;
  306|     10|        }
  307|     10|        return p;
  308|     10|    } else {
  309|      0|        return nullptr;
  310|      0|    }
  311|     10|}
_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|    }
_ZN6icu_7810MemoryPoolINS_13UnicodeStringELi8EE6createIJRS1_EEEPS1_DpOT_:
  796|  7.36k|    T* create(Args&&... args) {
  797|  7.36k|        int32_t capacity = fPool.getCapacity();
  798|  7.36k|        if (fCount == capacity &&
  ------------------
  |  Branch (798:13): [True: 9, False: 7.35k]
  ------------------
  799|  7.36k|            fPool.resize(capacity == stackCapacity ? 4 * capacity : 2 * capacity,
  ------------------
  |  Branch (799:13): [True: 0, False: 9]
  |  Branch (799:26): [True: 1, False: 8]
  ------------------
  800|      9|                         capacity) == nullptr) {
  801|      0|            return nullptr;
  802|      0|        }
  803|  7.36k|        return fPool[fCount++] = new T(std::forward<Args>(args)...);
  804|  7.36k|    }
_ZNK6icu_7815MaybeStackArrayIPNS_13UnicodeStringELi8EE11getCapacityEv:
  376|  7.36k|    int32_t getCapacity() const { return capacity; }
_ZN6icu_7815MaybeStackArrayIPNS_13UnicodeStringELi8EE6resizeEii:
  505|      9|inline T *MaybeStackArray<T, stackCapacity>::resize(int32_t newCapacity, int32_t length) {
  506|      9|    if(newCapacity>0) {
  ------------------
  |  Branch (506:8): [True: 9, 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|      9|        T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
  ------------------
  |  | 1524|      9|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|      9|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|      9|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|      9|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|      9|        if(p!=nullptr) {
  ------------------
  |  Branch (511:12): [True: 9, False: 0]
  ------------------
  512|      9|            if(length>0) {
  ------------------
  |  Branch (512:16): [True: 9, False: 0]
  ------------------
  513|      9|                if(length>capacity) {
  ------------------
  |  Branch (513:20): [True: 0, False: 9]
  ------------------
  514|      0|                    length=capacity;
  515|      0|                }
  516|      9|                if(length>newCapacity) {
  ------------------
  |  Branch (516:20): [True: 0, False: 9]
  ------------------
  517|      0|                    length=newCapacity;
  518|      0|                }
  519|      9|                uprv_memcpy(p, ptr, (size_t)length*sizeof(T));
  ------------------
  |  |   42|      9|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|      9|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|      9|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|      9|    _Pragma("clang diagnostic push") \
  |  |   45|      9|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|      9|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|      9|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|      9|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|      9|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|      9|    _Pragma("clang diagnostic pop") \
  |  |   49|      9|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|      9|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|      9|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|      9|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|      9|            }
  521|      9|            releaseArray();
  522|      9|            ptr=p;
  523|      9|            capacity=newCapacity;
  524|      9|            needToRelease=true;
  525|      9|        }
  526|      9|        return p;
  527|      9|    } else {
  528|      0|        return nullptr;
  529|      0|    }
  530|      9|}
_ZN6icu_7815MaybeStackArrayI11max_align_tLi7EEC2Ev:
  344|  3.48k|    MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(false) {}
_ZNK6icu_7815MaybeStackArrayI11max_align_tLi7EE11getCapacityEv:
  376|  3.48k|    int32_t getCapacity() const { return capacity; }
_ZN6icu_7815MaybeStackArrayI11max_align_tLi7EE12releaseArrayEv:
  458|  3.48k|    void releaseArray() {
  459|  3.48k|        if(needToRelease) {
  ------------------
  |  Branch (459:12): [True: 0, False: 3.48k]
  ------------------
  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|  3.48k|    }
_ZNK6icu_7815MaybeStackArrayI11max_align_tLi7EE8getAliasEv:
  381|  3.48k|    T *getAlias() const { return ptr; }
_ZN6icu_7815MaybeStackArrayI11max_align_tLi7EED2Ev:
  363|  3.48k|    ~MaybeStackArray() { releaseArray(); }
_ZN6icu_7815MaybeStackArrayI11max_align_tLi14EEC2Ev:
  344|  1.47k|    MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(false) {}
_ZNK6icu_7815MaybeStackArrayI11max_align_tLi14EE11getCapacityEv:
  376|  1.47k|    int32_t getCapacity() const { return capacity; }
_ZN6icu_7815MaybeStackArrayI11max_align_tLi14EE12releaseArrayEv:
  458|  1.47k|    void releaseArray() {
  459|  1.47k|        if(needToRelease) {
  ------------------
  |  Branch (459:12): [True: 0, False: 1.47k]
  ------------------
  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.47k|    }
_ZNK6icu_7815MaybeStackArrayI11max_align_tLi14EE8getAliasEv:
  381|  2.94k|    T *getAlias() const { return ptr; }
_ZN6icu_7815MaybeStackArrayI11max_align_tLi14EED2Ev:
  363|  1.47k|    ~MaybeStackArray() { releaseArray(); }
_ZN6icu_7815MaybeStackArrayIP13LocExtKeyDataLi8EEixEl:
  402|     37|    T &operator[](ptrdiff_t i) { return ptr[i]; }
_ZN6icu_7815MaybeStackArrayIP13LocExtKeyDataLi8EE12releaseArrayEv:
  458|      2|    void releaseArray() {
  459|      2|        if(needToRelease) {
  ------------------
  |  Branch (459:12): [True: 1, False: 1]
  ------------------
  460|      1|            uprv_free(ptr);
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  461|      1|        }
  462|      2|    }
_ZN6icu_7815MaybeStackArrayIP10LocExtTypeLi8EEixEl:
  402|  1.05k|    T &operator[](ptrdiff_t i) { return ptr[i]; }
_ZN6icu_7815MaybeStackArrayIP10LocExtTypeLi8EE12releaseArrayEv:
  458|      7|    void releaseArray() {
  459|      7|        if(needToRelease) {
  ------------------
  |  Branch (459:12): [True: 6, False: 1]
  ------------------
  460|      6|            uprv_free(ptr);
  ------------------
  |  | 1503|      6|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  461|      6|        }
  462|      7|    }
_ZN6icu_7815MaybeStackArrayIP9TypeAliasLi8EEixEl:
  402|    178|    T &operator[](ptrdiff_t i) { return ptr[i]; }
_ZN6icu_7815MaybeStackArrayIP9TypeAliasLi8EE12releaseArrayEv:
  458|      4|    void releaseArray() {
  459|      4|        if(needToRelease) {
  ------------------
  |  Branch (459:12): [True: 3, False: 1]
  ------------------
  460|      3|            uprv_free(ptr);
  ------------------
  |  | 1503|      3|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  461|      3|        }
  462|      4|    }
_ZN6icu_7810MemoryPoolINS_10CharStringELi8EED2Ev:
  762|  33.2k|    ~MemoryPool() {
  763|  2.22M|        for (int32_t i = 0; i < fCount; ++i) {
  ------------------
  |  Branch (763:29): [True: 2.18M, False: 33.2k]
  ------------------
  764|  2.18M|            delete fPool[i];
  765|  2.18M|        }
  766|  33.2k|    }
_ZN6icu_7815MaybeStackArrayIPNS_10CharStringELi8EEixEl:
  402|  4.38M|    T &operator[](ptrdiff_t i) { return ptr[i]; }
_ZN6icu_7815MaybeStackArrayIPNS_10CharStringELi8EED2Ev:
  363|  33.2k|    ~MaybeStackArray() { releaseArray(); }
_ZN6icu_7815MaybeStackArrayIPNS_10CharStringELi8EE12releaseArrayEv:
  458|  36.7k|    void releaseArray() {
  459|  36.7k|        if(needToRelease) {
  ------------------
  |  Branch (459:12): [True: 3.57k, False: 33.2k]
  ------------------
  460|  3.57k|            uprv_free(ptr);
  ------------------
  |  | 1503|  3.57k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  3.57k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  3.57k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  3.57k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  461|  3.57k|        }
  462|  36.7k|    }
_ZN6icu_7810MemoryPoolINS_10CharStringELi8EEC2Ev:
  760|  33.2k|    MemoryPool() : fCount(0), fPool() {}
_ZN6icu_7815MaybeStackArrayIPNS_10CharStringELi8EEC2Ev:
  344|  33.2k|    MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(false) {}
_ZN6icu_7810MemoryPoolI13LocExtKeyDataLi8EEC2Ev:
  760|      1|    MemoryPool() : fCount(0), fPool() {}
_ZN6icu_7815MaybeStackArrayIP13LocExtKeyDataLi8EEC2Ev:
  344|      1|    MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(false) {}
_ZN6icu_7810MemoryPoolI10LocExtTypeLi8EEC2Ev:
  760|      1|    MemoryPool() : fCount(0), fPool() {}
_ZN6icu_7815MaybeStackArrayIP10LocExtTypeLi8EEC2Ev:
  344|      1|    MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(false) {}
_ZN6icu_7810MemoryPoolI9TypeAliasLi8EEC2Ev:
  760|      1|    MemoryPool() : fCount(0), fPool() {}
_ZN6icu_7815MaybeStackArrayIP9TypeAliasLi8EEC2Ev:
  344|      1|    MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(false) {}
_ZN6icu_7810MemoryPoolINS_10CharStringELi8EE6createIJEEEPS1_DpOT_:
  796|  4.98k|    T* create(Args&&... args) {
  797|  4.98k|        int32_t capacity = fPool.getCapacity();
  798|  4.98k|        if (fCount == capacity &&
  ------------------
  |  Branch (798:13): [True: 5, False: 4.97k]
  ------------------
  799|  4.98k|            fPool.resize(capacity == stackCapacity ? 4 * capacity : 2 * capacity,
  ------------------
  |  Branch (799:13): [True: 0, False: 5]
  |  Branch (799:26): [True: 1, False: 4]
  ------------------
  800|      5|                         capacity) == nullptr) {
  801|      0|            return nullptr;
  802|      0|        }
  803|  4.98k|        return fPool[fCount++] = new T(std::forward<Args>(args)...);
  804|  4.98k|    }
_ZNK6icu_7815MaybeStackArrayIPNS_10CharStringELi8EE11getCapacityEv:
  376|  2.19M|    int32_t getCapacity() const { return capacity; }
_ZN6icu_7815MaybeStackArrayIPNS_10CharStringELi8EE6resizeEii:
  505|  3.57k|inline T *MaybeStackArray<T, stackCapacity>::resize(int32_t newCapacity, int32_t length) {
  506|  3.57k|    if(newCapacity>0) {
  ------------------
  |  Branch (506:8): [True: 3.57k, 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|  3.57k|        T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
  ------------------
  |  | 1524|  3.57k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  3.57k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  3.57k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  3.57k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|  3.57k|        if(p!=nullptr) {
  ------------------
  |  Branch (511:12): [True: 3.57k, False: 0]
  ------------------
  512|  3.57k|            if(length>0) {
  ------------------
  |  Branch (512:16): [True: 3.57k, False: 0]
  ------------------
  513|  3.57k|                if(length>capacity) {
  ------------------
  |  Branch (513:20): [True: 0, False: 3.57k]
  ------------------
  514|      0|                    length=capacity;
  515|      0|                }
  516|  3.57k|                if(length>newCapacity) {
  ------------------
  |  Branch (516:20): [True: 0, False: 3.57k]
  ------------------
  517|      0|                    length=newCapacity;
  518|      0|                }
  519|  3.57k|                uprv_memcpy(p, ptr, (size_t)length*sizeof(T));
  ------------------
  |  |   42|  3.57k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  3.57k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  3.57k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  3.57k|    _Pragma("clang diagnostic push") \
  |  |   45|  3.57k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  3.57k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  3.57k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  3.57k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  3.57k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  3.57k|    _Pragma("clang diagnostic pop") \
  |  |   49|  3.57k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  3.57k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  3.57k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  3.57k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|  3.57k|            }
  521|  3.57k|            releaseArray();
  522|  3.57k|            ptr=p;
  523|  3.57k|            capacity=newCapacity;
  524|  3.57k|            needToRelease=true;
  525|  3.57k|        }
  526|  3.57k|        return p;
  527|  3.57k|    } else {
  528|      0|        return nullptr;
  529|      0|    }
  530|  3.57k|}
_ZN6icu_7810MemoryPoolINS_10CharStringELi8EE6createIJRPKcR10UErrorCodeEEEPS1_DpOT_:
  796|    556|    T* create(Args&&... args) {
  797|    556|        int32_t capacity = fPool.getCapacity();
  798|    556|        if (fCount == capacity &&
  ------------------
  |  Branch (798:13): [True: 2, False: 554]
  ------------------
  799|    556|            fPool.resize(capacity == stackCapacity ? 4 * capacity : 2 * capacity,
  ------------------
  |  Branch (799:13): [True: 0, False: 2]
  |  Branch (799:26): [True: 0, False: 2]
  ------------------
  800|      2|                         capacity) == nullptr) {
  801|      0|            return nullptr;
  802|      0|        }
  803|    556|        return fPool[fCount++] = new T(std::forward<Args>(args)...);
  804|    556|    }
_ZN6icu_7810MemoryPoolI10LocExtTypeLi8EE6createIJEEEPS1_DpOT_:
  796|  1.05k|    T* create(Args&&... args) {
  797|  1.05k|        int32_t capacity = fPool.getCapacity();
  798|  1.05k|        if (fCount == capacity &&
  ------------------
  |  Branch (798:13): [True: 7, False: 1.04k]
  ------------------
  799|  1.05k|            fPool.resize(capacity == stackCapacity ? 4 * capacity : 2 * capacity,
  ------------------
  |  Branch (799:13): [True: 0, False: 7]
  |  Branch (799:26): [True: 1, False: 6]
  ------------------
  800|      7|                         capacity) == nullptr) {
  801|      0|            return nullptr;
  802|      0|        }
  803|  1.05k|        return fPool[fCount++] = new T(std::forward<Args>(args)...);
  804|  1.05k|    }
_ZNK6icu_7815MaybeStackArrayIP10LocExtTypeLi8EE11getCapacityEv:
  376|  1.05k|    int32_t getCapacity() const { return capacity; }
_ZN6icu_7815MaybeStackArrayIP10LocExtTypeLi8EE6resizeEii:
  505|      7|inline T *MaybeStackArray<T, stackCapacity>::resize(int32_t newCapacity, int32_t length) {
  506|      7|    if(newCapacity>0) {
  ------------------
  |  Branch (506:8): [True: 7, 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|      7|        T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
  ------------------
  |  | 1524|      7|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|      7|        if(p!=nullptr) {
  ------------------
  |  Branch (511:12): [True: 7, False: 0]
  ------------------
  512|      7|            if(length>0) {
  ------------------
  |  Branch (512:16): [True: 7, False: 0]
  ------------------
  513|      7|                if(length>capacity) {
  ------------------
  |  Branch (513:20): [True: 0, False: 7]
  ------------------
  514|      0|                    length=capacity;
  515|      0|                }
  516|      7|                if(length>newCapacity) {
  ------------------
  |  Branch (516:20): [True: 0, False: 7]
  ------------------
  517|      0|                    length=newCapacity;
  518|      0|                }
  519|      7|                uprv_memcpy(p, ptr, (size_t)length*sizeof(T));
  ------------------
  |  |   42|      7|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|      7|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|      7|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|      7|    _Pragma("clang diagnostic push") \
  |  |   45|      7|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|      7|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|      7|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|      7|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|      7|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|      7|    _Pragma("clang diagnostic pop") \
  |  |   49|      7|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|      7|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|      7|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|      7|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|      7|            }
  521|      7|            releaseArray();
  522|      7|            ptr=p;
  523|      7|            capacity=newCapacity;
  524|      7|            needToRelease=true;
  525|      7|        }
  526|      7|        return p;
  527|      7|    } else {
  528|      0|        return nullptr;
  529|      0|    }
  530|      7|}
_ZN6icu_7810MemoryPoolI9TypeAliasLi8EE6createIJS1_EEEPS1_DpOT_:
  796|    178|    T* create(Args&&... args) {
  797|    178|        int32_t capacity = fPool.getCapacity();
  798|    178|        if (fCount == capacity &&
  ------------------
  |  Branch (798:13): [True: 4, False: 174]
  ------------------
  799|    178|            fPool.resize(capacity == stackCapacity ? 4 * capacity : 2 * capacity,
  ------------------
  |  Branch (799:13): [True: 0, False: 4]
  |  Branch (799:26): [True: 1, False: 3]
  ------------------
  800|      4|                         capacity) == nullptr) {
  801|      0|            return nullptr;
  802|      0|        }
  803|    178|        return fPool[fCount++] = new T(std::forward<Args>(args)...);
  804|    178|    }
_ZNK6icu_7815MaybeStackArrayIP9TypeAliasLi8EE11getCapacityEv:
  376|    178|    int32_t getCapacity() const { return capacity; }
_ZN6icu_7815MaybeStackArrayIP9TypeAliasLi8EE6resizeEii:
  505|      4|inline T *MaybeStackArray<T, stackCapacity>::resize(int32_t newCapacity, int32_t length) {
  506|      4|    if(newCapacity>0) {
  ------------------
  |  Branch (506:8): [True: 4, 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|      4|        T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
  ------------------
  |  | 1524|      4|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|      4|        if(p!=nullptr) {
  ------------------
  |  Branch (511:12): [True: 4, False: 0]
  ------------------
  512|      4|            if(length>0) {
  ------------------
  |  Branch (512:16): [True: 4, False: 0]
  ------------------
  513|      4|                if(length>capacity) {
  ------------------
  |  Branch (513:20): [True: 0, False: 4]
  ------------------
  514|      0|                    length=capacity;
  515|      0|                }
  516|      4|                if(length>newCapacity) {
  ------------------
  |  Branch (516:20): [True: 0, False: 4]
  ------------------
  517|      0|                    length=newCapacity;
  518|      0|                }
  519|      4|                uprv_memcpy(p, ptr, (size_t)length*sizeof(T));
  ------------------
  |  |   42|      4|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|      4|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|      4|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|      4|    _Pragma("clang diagnostic push") \
  |  |   45|      4|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|      4|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|      4|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|      4|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|      4|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|      4|    _Pragma("clang diagnostic pop") \
  |  |   49|      4|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|      4|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|      4|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|      4|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|      4|            }
  521|      4|            releaseArray();
  522|      4|            ptr=p;
  523|      4|            capacity=newCapacity;
  524|      4|            needToRelease=true;
  525|      4|        }
  526|      4|        return p;
  527|      4|    } else {
  528|      0|        return nullptr;
  529|      0|    }
  530|      4|}
_ZN6icu_7810MemoryPoolI13LocExtKeyDataLi8EE6createIJEEEPS1_DpOT_:
  796|     37|    T* create(Args&&... args) {
  797|     37|        int32_t capacity = fPool.getCapacity();
  798|     37|        if (fCount == capacity &&
  ------------------
  |  Branch (798:13): [True: 2, False: 35]
  ------------------
  799|     37|            fPool.resize(capacity == stackCapacity ? 4 * capacity : 2 * capacity,
  ------------------
  |  Branch (799:13): [True: 0, False: 2]
  |  Branch (799:26): [True: 1, False: 1]
  ------------------
  800|      2|                         capacity) == nullptr) {
  801|      0|            return nullptr;
  802|      0|        }
  803|     37|        return fPool[fCount++] = new T(std::forward<Args>(args)...);
  804|     37|    }
_ZNK6icu_7815MaybeStackArrayIP13LocExtKeyDataLi8EE11getCapacityEv:
  376|     37|    int32_t getCapacity() const { return capacity; }
_ZN6icu_7815MaybeStackArrayIP13LocExtKeyDataLi8EE6resizeEii:
  505|      2|inline T *MaybeStackArray<T, stackCapacity>::resize(int32_t newCapacity, int32_t length) {
  506|      2|    if(newCapacity>0) {
  ------------------
  |  Branch (506:8): [True: 2, 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|      2|        T *p=(T *)uprv_malloc(newCapacity*sizeof(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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|      2|        if(p!=nullptr) {
  ------------------
  |  Branch (511:12): [True: 2, False: 0]
  ------------------
  512|      2|            if(length>0) {
  ------------------
  |  Branch (512:16): [True: 2, False: 0]
  ------------------
  513|      2|                if(length>capacity) {
  ------------------
  |  Branch (513:20): [True: 0, False: 2]
  ------------------
  514|      0|                    length=capacity;
  515|      0|                }
  516|      2|                if(length>newCapacity) {
  ------------------
  |  Branch (516:20): [True: 0, False: 2]
  ------------------
  517|      0|                    length=newCapacity;
  518|      0|                }
  519|      2|                uprv_memcpy(p, ptr, (size_t)length*sizeof(T));
  ------------------
  |  |   42|      2|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|      2|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|      2|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|      2|    _Pragma("clang diagnostic push") \
  |  |   45|      2|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|      2|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|      2|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|      2|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|      2|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|      2|    _Pragma("clang diagnostic pop") \
  |  |   49|      2|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|      2|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|      2|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|      2|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|      2|            }
  521|      2|            releaseArray();
  522|      2|            ptr=p;
  523|      2|            capacity=newCapacity;
  524|      2|            needToRelease=true;
  525|      2|        }
  526|      2|        return p;
  527|      2|    } else {
  528|      0|        return nullptr;
  529|      0|    }
  530|      2|}
uloc_tag.cpp:_ZN6icu_7810MemoryPoolIN12_GLOBAL__N_118AttributeListEntryELi8EEC2Ev:
  760|  14.8k|    MemoryPool() : fCount(0), fPool() {}
uloc_tag.cpp:_ZN6icu_7815MaybeStackArrayIPN12_GLOBAL__N_118AttributeListEntryELi8EEC2Ev:
  344|  14.8k|    MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(false) {}
uloc_tag.cpp:_ZN6icu_7810MemoryPoolIN12_GLOBAL__N_118ExtensionListEntryELi8EEC2Ev:
  760|  18.3k|    MemoryPool() : fCount(0), fPool() {}
uloc_tag.cpp:_ZN6icu_7815MaybeStackArrayIPN12_GLOBAL__N_118ExtensionListEntryELi8EEC2Ev:
  344|  18.3k|    MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(false) {}
uloc_tag.cpp:_ZN6icu_7810MemoryPoolIN12_GLOBAL__N_118AttributeListEntryELi8EE6createIJEEEPS2_DpOT_:
  796|   850k|    T* create(Args&&... args) {
  797|   850k|        int32_t capacity = fPool.getCapacity();
  798|   850k|        if (fCount == capacity &&
  ------------------
  |  Branch (798:13): [True: 1.26k, False: 848k]
  ------------------
  799|   850k|            fPool.resize(capacity == stackCapacity ? 4 * capacity : 2 * capacity,
  ------------------
  |  Branch (799:13): [True: 0, False: 1.26k]
  |  Branch (799:26): [True: 738, False: 530]
  ------------------
  800|  1.26k|                         capacity) == nullptr) {
  801|      0|            return nullptr;
  802|      0|        }
  803|   850k|        return fPool[fCount++] = new T(std::forward<Args>(args)...);
  804|   850k|    }
uloc_tag.cpp:_ZNK6icu_7815MaybeStackArrayIPN12_GLOBAL__N_118AttributeListEntryELi8EE11getCapacityEv:
  376|   850k|    int32_t getCapacity() const { return capacity; }
uloc_tag.cpp:_ZN6icu_7815MaybeStackArrayIPN12_GLOBAL__N_118AttributeListEntryELi8EE6resizeEii:
  505|  1.26k|inline T *MaybeStackArray<T, stackCapacity>::resize(int32_t newCapacity, int32_t length) {
  506|  1.26k|    if(newCapacity>0) {
  ------------------
  |  Branch (506:8): [True: 1.26k, 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.26k|        T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
  ------------------
  |  | 1524|  1.26k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  1.26k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.26k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.26k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|  1.26k|        if(p!=nullptr) {
  ------------------
  |  Branch (511:12): [True: 1.26k, False: 0]
  ------------------
  512|  1.26k|            if(length>0) {
  ------------------
  |  Branch (512:16): [True: 1.26k, False: 0]
  ------------------
  513|  1.26k|                if(length>capacity) {
  ------------------
  |  Branch (513:20): [True: 0, False: 1.26k]
  ------------------
  514|      0|                    length=capacity;
  515|      0|                }
  516|  1.26k|                if(length>newCapacity) {
  ------------------
  |  Branch (516:20): [True: 0, False: 1.26k]
  ------------------
  517|      0|                    length=newCapacity;
  518|      0|                }
  519|  1.26k|                uprv_memcpy(p, ptr, (size_t)length*sizeof(T));
  ------------------
  |  |   42|  1.26k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  1.26k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  1.26k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  1.26k|    _Pragma("clang diagnostic push") \
  |  |   45|  1.26k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  1.26k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.26k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  1.26k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.26k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  1.26k|    _Pragma("clang diagnostic pop") \
  |  |   49|  1.26k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  1.26k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  1.26k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  1.26k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|  1.26k|            }
  521|  1.26k|            releaseArray();
  522|  1.26k|            ptr=p;
  523|  1.26k|            capacity=newCapacity;
  524|  1.26k|            needToRelease=true;
  525|  1.26k|        }
  526|  1.26k|        return p;
  527|  1.26k|    } else {
  528|      0|        return nullptr;
  529|      0|    }
  530|  1.26k|}
uloc_tag.cpp:_ZN6icu_7815MaybeStackArrayIPN12_GLOBAL__N_118AttributeListEntryELi8EE12releaseArrayEv:
  458|  16.0k|    void releaseArray() {
  459|  16.0k|        if(needToRelease) {
  ------------------
  |  Branch (459:12): [True: 1.26k, False: 14.8k]
  ------------------
  460|  1.26k|            uprv_free(ptr);
  ------------------
  |  | 1503|  1.26k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  1.26k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.26k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.26k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  461|  1.26k|        }
  462|  16.0k|    }
uloc_tag.cpp:_ZN6icu_7815MaybeStackArrayIPN12_GLOBAL__N_118AttributeListEntryELi8EEixEl:
  402|  1.70M|    T &operator[](ptrdiff_t i) { return ptr[i]; }
uloc_tag.cpp:_ZN6icu_7810MemoryPoolIN12_GLOBAL__N_118ExtensionListEntryELi8EE6createIJEEEPS2_DpOT_:
  796|  1.41M|    T* create(Args&&... args) {
  797|  1.41M|        int32_t capacity = fPool.getCapacity();
  798|  1.41M|        if (fCount == capacity &&
  ------------------
  |  Branch (798:13): [True: 3.58k, False: 1.41M]
  ------------------
  799|  1.41M|            fPool.resize(capacity == stackCapacity ? 4 * capacity : 2 * capacity,
  ------------------
  |  Branch (799:13): [True: 0, False: 3.58k]
  |  Branch (799:26): [True: 2.60k, False: 983]
  ------------------
  800|  3.58k|                         capacity) == nullptr) {
  801|      0|            return nullptr;
  802|      0|        }
  803|  1.41M|        return fPool[fCount++] = new T(std::forward<Args>(args)...);
  804|  1.41M|    }
uloc_tag.cpp:_ZNK6icu_7815MaybeStackArrayIPN12_GLOBAL__N_118ExtensionListEntryELi8EE11getCapacityEv:
  376|  1.41M|    int32_t getCapacity() const { return capacity; }
uloc_tag.cpp:_ZN6icu_7815MaybeStackArrayIPN12_GLOBAL__N_118ExtensionListEntryELi8EE6resizeEii:
  505|  3.58k|inline T *MaybeStackArray<T, stackCapacity>::resize(int32_t newCapacity, int32_t length) {
  506|  3.58k|    if(newCapacity>0) {
  ------------------
  |  Branch (506:8): [True: 3.58k, 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|  3.58k|        T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
  ------------------
  |  | 1524|  3.58k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  3.58k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  3.58k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  3.58k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|  3.58k|        if(p!=nullptr) {
  ------------------
  |  Branch (511:12): [True: 3.58k, False: 0]
  ------------------
  512|  3.58k|            if(length>0) {
  ------------------
  |  Branch (512:16): [True: 3.58k, False: 0]
  ------------------
  513|  3.58k|                if(length>capacity) {
  ------------------
  |  Branch (513:20): [True: 0, False: 3.58k]
  ------------------
  514|      0|                    length=capacity;
  515|      0|                }
  516|  3.58k|                if(length>newCapacity) {
  ------------------
  |  Branch (516:20): [True: 0, False: 3.58k]
  ------------------
  517|      0|                    length=newCapacity;
  518|      0|                }
  519|  3.58k|                uprv_memcpy(p, ptr, (size_t)length*sizeof(T));
  ------------------
  |  |   42|  3.58k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  3.58k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  3.58k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  3.58k|    _Pragma("clang diagnostic push") \
  |  |   45|  3.58k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  3.58k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  3.58k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  3.58k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  3.58k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  3.58k|    _Pragma("clang diagnostic pop") \
  |  |   49|  3.58k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  3.58k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  3.58k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  3.58k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|  3.58k|            }
  521|  3.58k|            releaseArray();
  522|  3.58k|            ptr=p;
  523|  3.58k|            capacity=newCapacity;
  524|  3.58k|            needToRelease=true;
  525|  3.58k|        }
  526|  3.58k|        return p;
  527|  3.58k|    } else {
  528|      0|        return nullptr;
  529|      0|    }
  530|  3.58k|}
uloc_tag.cpp:_ZN6icu_7815MaybeStackArrayIPN12_GLOBAL__N_118ExtensionListEntryELi8EE12releaseArrayEv:
  458|  21.9k|    void releaseArray() {
  459|  21.9k|        if(needToRelease) {
  ------------------
  |  Branch (459:12): [True: 3.58k, False: 18.3k]
  ------------------
  460|  3.58k|            uprv_free(ptr);
  ------------------
  |  | 1503|  3.58k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  3.58k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  3.58k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  3.58k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  461|  3.58k|        }
  462|  21.9k|    }
uloc_tag.cpp:_ZN6icu_7815MaybeStackArrayIPN12_GLOBAL__N_118ExtensionListEntryELi8EEixEl:
  402|  2.83M|    T &operator[](ptrdiff_t i) { return ptr[i]; }
uloc_tag.cpp:_ZN6icu_7810MemoryPoolIN12_GLOBAL__N_118ExtensionListEntryELi8EED2Ev:
  762|  18.3k|    ~MemoryPool() {
  763|  1.43M|        for (int32_t i = 0; i < fCount; ++i) {
  ------------------
  |  Branch (763:29): [True: 1.41M, False: 18.3k]
  ------------------
  764|  1.41M|            delete fPool[i];
  765|  1.41M|        }
  766|  18.3k|    }
uloc_tag.cpp:_ZN6icu_7815MaybeStackArrayIPN12_GLOBAL__N_118ExtensionListEntryELi8EED2Ev:
  363|  18.3k|    ~MaybeStackArray() { releaseArray(); }
uloc_tag.cpp:_ZN6icu_7810MemoryPoolIN12_GLOBAL__N_118AttributeListEntryELi8EED2Ev:
  762|  14.8k|    ~MemoryPool() {
  763|   864k|        for (int32_t i = 0; i < fCount; ++i) {
  ------------------
  |  Branch (763:29): [True: 850k, False: 14.8k]
  ------------------
  764|   850k|            delete fPool[i];
  765|   850k|        }
  766|  14.8k|    }
uloc_tag.cpp:_ZN6icu_7815MaybeStackArrayIPN12_GLOBAL__N_118AttributeListEntryELi8EED2Ev:
  363|  14.8k|    ~MaybeStackArray() { releaseArray(); }
_ZN6icu_7810MemoryPoolINS_10CharStringELi8EE6createIJRPKcRiR10UErrorCodeEEEPS1_DpOT_:
  796|  2.18M|    T* create(Args&&... args) {
  797|  2.18M|        int32_t capacity = fPool.getCapacity();
  798|  2.18M|        if (fCount == capacity &&
  ------------------
  |  Branch (798:13): [True: 3.56k, False: 2.18M]
  ------------------
  799|  2.18M|            fPool.resize(capacity == stackCapacity ? 4 * capacity : 2 * capacity,
  ------------------
  |  Branch (799:13): [True: 0, False: 3.56k]
  |  Branch (799:26): [True: 2.58k, False: 979]
  ------------------
  800|  3.56k|                         capacity) == nullptr) {
  801|      0|            return nullptr;
  802|      0|        }
  803|  2.18M|        return fPool[fCount++] = new T(std::forward<Args>(args)...);
  804|  2.18M|    }
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();} ()
unifiedcache.cpp:_ZZN6icu_78L9cacheInitER10UErrorCodeENK3$_0clEv:
  144|      1|#define STATIC_NEW(type) [] () { \
  145|      1|    alignas(type) static char storage[sizeof(type)]; \
  146|      1|    return new(storage) type();} ()
unifiedcache.cpp:_ZZN6icu_78L9cacheInitER10UErrorCodeENK3$_1clEv:
  144|      1|#define STATIC_NEW(type) [] () { \
  145|      1|    alignas(type) static char storage[sizeof(type)]; \
  146|      1|    return new(storage) type();} ()

uprv_isASCIILetter_78:
   52|  61.3M|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|  61.3M|    return ('a'<=c && c<='z') || ('A'<=c && c<='Z');
  ------------------
  |  Branch (58:13): [True: 52.2M, False: 9.15M]
  |  Branch (58:23): [True: 52.2M, False: 1.79k]
  |  Branch (58:35): [True: 8.60M, False: 550k]
  |  Branch (58:45): [True: 6.59M, False: 2.00M]
  ------------------
   59|  61.3M|#endif
   60|  61.3M|}
uprv_toupper_78:
   63|  4.17M|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.17M|    if('a'<=c && c<='z') {
  ------------------
  |  Branch (69:8): [True: 42.4k, False: 4.13M]
  |  Branch (69:18): [True: 23.8k, False: 18.5k]
  ------------------
   70|  23.8k|        c=(char)(c+('A'-'a'));
   71|  23.8k|    }
   72|  4.17M|#endif
   73|  4.17M|    return c;
   74|  4.17M|}
uprv_asciitolower_78:
  103|  36.8M|uprv_asciitolower(char c) {
  104|  36.8M|    if(0x41<=c && c<=0x5a) {
  ------------------
  |  Branch (104:8): [True: 30.2M, False: 6.55M]
  |  Branch (104:19): [True: 3.32M, False: 26.9M]
  ------------------
  105|  3.32M|        c=(char)(c+0x20);
  106|  3.32M|    }
  107|  36.8M|    return c;
  108|  36.8M|}
T_CString_toLowerCase_78:
  124|  1.42M|{
  125|  1.42M|    char* origPtr = str;
  126|       |
  127|  1.42M|    if (str) {
  ------------------
  |  Branch (127:9): [True: 1.42M, False: 0]
  ------------------
  128|  1.42M|        do
  129|  18.5M|            *str = uprv_tolower(*str);
  ------------------
  |  |   68|  18.5M|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|  18.5M|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  18.5M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|  18.5M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|  18.5M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  130|  18.5M|        while (*(str++));
  ------------------
  |  Branch (130:16): [True: 17.1M, False: 1.42M]
  ------------------
  131|  1.42M|    }
  132|       |
  133|  1.42M|    return origPtr;
  134|  1.42M|}
T_CString_toUpperCase_78:
  138|  32.5k|{
  139|  32.5k|    char* origPtr = str;
  140|       |
  141|  32.5k|    if (str) {
  ------------------
  |  Branch (141:9): [True: 32.5k, False: 0]
  ------------------
  142|  32.5k|        do
  143|   111k|            *str = uprv_toupper(*str);
  ------------------
  |  | 1547|   111k|#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper)
  |  |  ------------------
  |  |  |  |  123|   111k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   111k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   111k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  144|   111k|        while (*(str++));
  ------------------
  |  Branch (144:16): [True: 78.9k, False: 32.5k]
  ------------------
  145|  32.5k|    }
  146|       |
  147|  32.5k|    return origPtr;
  148|  32.5k|}
T_CString_integerToString_78:
  158|   114k|{
  159|   114k|    char      tbuf[30];
  160|   114k|    int32_t   tbx    = sizeof(tbuf);
  161|   114k|    uint8_t   digit;
  162|   114k|    int32_t   length = 0;
  163|   114k|    uint32_t  uval;
  164|       |    
  165|   114k|    U_ASSERT(radix>=2 && radix<=16);
  ------------------
  |  |   35|   114k|#   define U_ASSERT(exp) (void)0
  ------------------
  166|   114k|    uval = (uint32_t) v;
  167|   114k|    if(v<0 && radix == 10) {
  ------------------
  |  Branch (167:8): [True: 0, False: 114k]
  |  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|   114k|    tbx = sizeof(tbuf)-1;
  174|   114k|    tbuf[tbx] = 0;   /* We are generating the digits backwards.  Null term the end. */
  175|   115k|    do {
  176|   115k|        digit = (uint8_t)(uval % radix);
  177|   115k|        tbuf[--tbx] = (char)(T_CString_itosOffset(digit));
  ------------------
  |  |   81|   115k|#define T_CString_itosOffset(a) ((a)<=9?('0'+(a)):('A'+(a)-10))
  |  |  ------------------
  |  |  |  Branch (81:34): [True: 115k, False: 0]
  |  |  ------------------
  ------------------
  178|   115k|        uval  = uval / radix;
  179|   115k|    } while (uval != 0);
  ------------------
  |  Branch (179:14): [True: 693, False: 114k]
  ------------------
  180|       |    
  181|       |    /* copy converted number into user buffer  */
  182|   114k|    uprv_strcpy(buffer+length, tbuf+tbx);
  ------------------
  |  |   36|   114k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|   114k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  183|   114k|    length += sizeof(tbuf) - tbx -1;
  184|   114k|    return length;
  185|   114k|}
uprv_stricmp_78:
  235|   136k|uprv_stricmp(const char *str1, const char *str2) {
  236|   136k|    if(str1==nullptr) {
  ------------------
  |  Branch (236:8): [True: 0, False: 136k]
  ------------------
  237|      0|        if(str2==nullptr) {
  ------------------
  |  Branch (237:12): [True: 0, False: 0]
  ------------------
  238|      0|            return 0;
  239|      0|        } else {
  240|      0|            return -1;
  241|      0|        }
  242|   136k|    } else if(str2==nullptr) {
  ------------------
  |  Branch (242:15): [True: 0, False: 136k]
  ------------------
  243|      0|        return 1;
  244|   136k|    } else {
  245|       |        /* compare non-nullptr strings lexically with lowercase */
  246|   136k|        int rc;
  247|   136k|        unsigned char c1, c2;
  248|       |
  249|   200k|        for(;;) {
  250|   200k|            c1=(unsigned char)*str1;
  251|   200k|            c2=(unsigned char)*str2;
  252|   200k|            if(c1==0) {
  ------------------
  |  Branch (252:16): [True: 126k, False: 74.8k]
  ------------------
  253|   126k|                if(c2==0) {
  ------------------
  |  Branch (253:20): [True: 7.04k, False: 119k]
  ------------------
  254|  7.04k|                    return 0;
  255|   119k|                } else {
  256|   119k|                    return -1;
  257|   119k|                }
  258|   126k|            } else if(c2==0) {
  ------------------
  |  Branch (258:23): [True: 45, False: 74.7k]
  ------------------
  259|     45|                return 1;
  260|  74.7k|            } else {
  261|       |                /* compare non-zero characters with lowercase */
  262|  74.7k|                rc=(int)(unsigned char)uprv_tolower(c1)-(int)(unsigned char)uprv_tolower(c2);
  ------------------
  |  |   68|  74.7k|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|  74.7k|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  74.7k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|  74.7k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|  74.7k|#       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|  74.7k|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|  74.7k|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  74.7k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|  74.7k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|  74.7k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  263|  74.7k|                if(rc!=0) {
  ------------------
  |  Branch (263:20): [True: 10.1k, False: 64.5k]
  ------------------
  264|  10.1k|                    return rc;
  265|  10.1k|                }
  266|  74.7k|            }
  267|  64.5k|            ++str1;
  268|  64.5k|            ++str2;
  269|  64.5k|        }
  270|   136k|    }
  271|   136k|}
uprv_strnicmp_78:
  274|  4.97M|uprv_strnicmp(const char *str1, const char *str2, uint32_t n) {
  275|  4.97M|    if(str1==nullptr) {
  ------------------
  |  Branch (275:8): [True: 0, False: 4.97M]
  ------------------
  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|  4.97M|    } else if(str2==nullptr) {
  ------------------
  |  Branch (281:15): [True: 0, False: 4.97M]
  ------------------
  282|      0|        return 1;
  283|  4.97M|    } else {
  284|       |        /* compare non-nullptr strings lexically with lowercase */
  285|  4.97M|        int rc;
  286|  4.97M|        unsigned char c1, c2;
  287|       |
  288|  5.77M|        for(; n--;) {
  ------------------
  |  Branch (288:15): [True: 5.68M, False: 90.4k]
  ------------------
  289|  5.68M|            c1=(unsigned char)*str1;
  290|  5.68M|            c2=(unsigned char)*str2;
  291|  5.68M|            if(c1==0) {
  ------------------
  |  Branch (291:16): [True: 0, False: 5.68M]
  ------------------
  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|  5.68M|            } else if(c2==0) {
  ------------------
  |  Branch (297:23): [True: 0, False: 5.68M]
  ------------------
  298|      0|                return 1;
  299|  5.68M|            } else {
  300|       |                /* compare non-zero characters with lowercase */
  301|  5.68M|                rc=(int)(unsigned char)uprv_tolower(c1)-(int)(unsigned char)uprv_tolower(c2);
  ------------------
  |  |   68|  5.68M|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|  5.68M|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  5.68M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|  5.68M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|  5.68M|#       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|  5.68M|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|  5.68M|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  5.68M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|  5.68M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|  5.68M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  302|  5.68M|                if(rc!=0) {
  ------------------
  |  Branch (302:20): [True: 4.88M, False: 799k]
  ------------------
  303|  4.88M|                    return rc;
  304|  4.88M|                }
  305|  5.68M|            }
  306|   799k|            ++str1;
  307|   799k|            ++str2;
  308|   799k|        }
  309|  4.97M|    }
  310|       |
  311|  90.4k|    return 0;
  312|  4.97M|}
uprv_strdup_78:
  315|  39.0k|uprv_strdup(const char *src) {
  316|  39.0k|    size_t len = uprv_strlen(src) + 1;
  ------------------
  |  |   37|  39.0k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  39.0k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  317|  39.0k|    char *dup = (char *) uprv_malloc(len);
  ------------------
  |  | 1524|  39.0k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  39.0k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  39.0k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  39.0k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  318|       |
  319|  39.0k|    if (dup) {
  ------------------
  |  Branch (319:9): [True: 39.0k, False: 0]
  ------------------
  320|  39.0k|        uprv_memcpy(dup, src, len);
  ------------------
  |  |   42|  39.0k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  39.0k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  39.0k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  39.0k|    _Pragma("clang diagnostic push") \
  |  |   45|  39.0k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  39.0k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  39.0k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  39.0k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  39.0k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  39.0k|    _Pragma("clang diagnostic pop") \
  |  |   49|  39.0k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  39.0k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  39.0k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  39.0k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  321|  39.0k|    }
  322|       |
  323|  39.0k|    return dup;
  324|  39.0k|}

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

_ZN6icu_789HashtableD2Ev:
  190|  13.5k|inline Hashtable::~Hashtable() {
  191|  13.5k|    if (hash != nullptr) {
  ------------------
  |  Branch (191:9): [True: 13.5k, False: 0]
  ------------------
  192|  13.5k|        uhash_close(hash);
  ------------------
  |  |  991|  13.5k|#define uhash_close U_ICU_ENTRY_POINT_RENAME(uhash_close)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  193|  13.5k|    }
  194|  13.5k|}
_ZN6icu_789HashtableC2EaR10UErrorCode:
  156|  13.5k| : hash(nullptr)
  157|  13.5k|{
  158|  13.5k|    init(ignoreKeyCase ? uhash_hashCaselessUnicodeString
  ------------------
  |  | 1010|  13.5k|#define uhash_hashCaselessUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_hashCaselessUnicodeString)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (158:10): [True: 0, False: 13.5k]
  ------------------
  159|  13.5k|                        : uhash_hashUnicodeString,
  ------------------
  |  | 1017|  13.5k|#define uhash_hashUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_hashUnicodeString)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  160|  13.5k|            ignoreKeyCase ? uhash_compareCaselessUnicodeString
  ------------------
  |  |  992|  13.5k|#define uhash_compareCaselessUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_compareCaselessUnicodeString)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (160:13): [True: 0, False: 13.5k]
  ------------------
  161|  13.5k|                        : uhash_compareUnicodeString,
  ------------------
  |  |  999|  13.5k|#define uhash_compareUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_compareUnicodeString)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  162|  13.5k|            nullptr,
  163|  13.5k|            status);
  164|  13.5k|}
_ZN6icu_789Hashtable4initEPFi8UElementEPFaS1_S1_ES5_R10UErrorCode:
  127|  13.5k|                            UValueComparator *valueComp, UErrorCode& status) {
  128|  13.5k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (128:9): [True: 0, False: 13.5k]
  ------------------
  129|      0|        return;
  130|      0|    }
  131|  13.5k|    uhash_init(&hashObj, keyHash, keyComp, valueComp, &status);
  ------------------
  |  | 1022|  13.5k|#define uhash_init U_ICU_ENTRY_POINT_RENAME(uhash_init)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|  13.5k|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (132:9): [True: 13.5k, False: 0]
  ------------------
  133|  13.5k|        hash = &hashObj;
  134|  13.5k|        uhash_setKeyDeleter(hash, uprv_deleteUObject);
  ------------------
  |  | 1040|  13.5k|#define uhash_setKeyDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setKeyDeleter)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      uhash_setKeyDeleter(hash, uprv_deleteUObject);
  ------------------
  |  | 1489|  13.5k|#define uprv_deleteUObject U_ICU_ENTRY_POINT_RENAME(uprv_deleteUObject)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  135|  13.5k|    }
  136|  13.5k|}
_ZN6icu_789Hashtable4putiERKNS_13UnicodeStringEiR10UErrorCode:
  208|   649k|inline int32_t Hashtable::puti(const UnicodeString& key, int32_t value, UErrorCode& status) {
  209|   649k|    return uhash_puti(hash, new UnicodeString(key), value, &status);
  ------------------
  |  | 1033|   649k|#define uhash_puti U_ICU_ENTRY_POINT_RENAME(uhash_puti)
  |  |  ------------------
  |  |  |  |  123|   649k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   649k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   649k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|   649k|}
_ZNK6icu_789Hashtable4getiERKNS_13UnicodeStringE:
  221|  1.09M|inline int32_t Hashtable::geti(const UnicodeString& key) const {
  222|  1.09M|    return uhash_geti(hash, &key);
  ------------------
  |  | 1008|  1.09M|#define uhash_geti U_ICU_ENTRY_POINT_RENAME(uhash_geti)
  |  |  ------------------
  |  |  |  |  123|  1.09M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.09M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.09M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|  1.09M|}

_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|  7.38k|{
   80|  7.38k|    umtx_initOnce(gInitOnceLocale, &locale_available_init);
   81|  7.38k|    count = availableLocaleListCount;
   82|  7.38k|    return availableLocaleList;
   83|  7.38k|}
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|  20.4k|void LocaleBased::setLocaleIDs(const char* validID, const char* actualID, UErrorCode& status) {
   47|  20.4k|    setValidLocaleID(validID, status);
   48|  20.4k|    setActualLocaleID(actualID,status);
   49|  20.4k|}
_ZN6icu_7811LocaleBased11setLocaleIDEPKcRPNS_10CharStringER10UErrorCode:
   51|  40.9k|void LocaleBased::setLocaleID(const char* id, CharString*& dest, UErrorCode& status) {
   52|  40.9k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (52:9): [True: 0, False: 40.9k]
  ------------------
   53|  40.9k|    if (id == nullptr || *id == 0) {
  ------------------
  |  Branch (53:9): [True: 0, False: 40.9k]
  |  Branch (53:26): [True: 0, False: 40.9k]
  ------------------
   54|      0|        delete dest;
   55|      0|        dest = nullptr;
   56|  40.9k|    } else {
   57|  40.9k|        if (dest == nullptr) {
  ------------------
  |  Branch (57:13): [True: 40.9k, False: 0]
  ------------------
   58|  40.9k|            dest = new CharString(id, status);
   59|  40.9k|            if (dest == nullptr) {
  ------------------
  |  Branch (59:17): [True: 0, False: 40.9k]
  ------------------
   60|      0|                status = U_MEMORY_ALLOCATION_ERROR;
   61|      0|                return;
   62|      0|            }
   63|  40.9k|        } else {
   64|      0|            dest->copyFrom(id, status);
   65|      0|        }
   66|  40.9k|    }
   67|  40.9k|}

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

_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|   465k|{
  231|   465k|    U_NAMESPACE_USE
  ------------------
  |  |  112|   465k|#   define U_NAMESPACE_USE using namespace U_ICU_NAMESPACE;
  ------------------
  232|   465k|    return Locale::getDefault().getName();
  233|   465k|}
_ZN6icu_786LocaleD2Ev:
  247|   118k|{
  248|   118k|    if ((baseName != fullName) && (baseName != fullNameBuffer)) {
  ------------------
  |  Branch (248:9): [True: 20.5k, False: 98.3k]
  |  Branch (248:35): [True: 20.5k, False: 0]
  ------------------
  249|  20.5k|        uprv_free(baseName);
  ------------------
  |  | 1503|  20.5k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  20.5k|    }
  251|   118k|    baseName = nullptr;
  252|       |    /*if fullName is on the heap, we free it*/
  253|   118k|    if (fullName != fullNameBuffer)
  ------------------
  |  Branch (253:9): [True: 3.49k, False: 115k]
  ------------------
  254|  3.49k|    {
  255|  3.49k|        uprv_free(fullName);
  ------------------
  |  | 1503|  3.49k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  3.49k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  3.49k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  3.49k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|  3.49k|        fullName = nullptr;
  257|  3.49k|    }
  258|   118k|}
_ZN6icu_786LocaleC2Ev:
  261|  43.2k|    : UObject(), fullName(fullNameBuffer), baseName(nullptr)
  262|  43.2k|{
  263|  43.2k|    init(nullptr, false);
  264|  43.2k|}
_ZN6icu_786LocaleC2ENS0_11ELocaleTypeE:
  272|      1|    : UObject(), fullName(fullNameBuffer), baseName(nullptr)
  273|      1|{
  274|      1|    setToBogus();
  275|      1|}
_ZN6icu_786LocaleC2EPKcS2_S2_S2_:
  282|  30.7k|    : UObject(), fullName(fullNameBuffer), baseName(nullptr)
  283|  30.7k|{
  284|  30.7k|    if( (newLanguage==nullptr) && (newCountry == nullptr) && (newVariant == nullptr) )
  ------------------
  |  Branch (284:9): [True: 0, False: 30.7k]
  |  Branch (284:35): [True: 0, False: 0]
  |  Branch (284:62): [True: 0, False: 0]
  ------------------
  285|      0|    {
  286|      0|        init(nullptr, false); /* shortcut */
  287|      0|    }
  288|  30.7k|    else
  289|  30.7k|    {
  290|  30.7k|        UErrorCode status = U_ZERO_ERROR;
  291|  30.7k|        int32_t lsize = 0;
  292|  30.7k|        int32_t csize = 0;
  293|  30.7k|        int32_t vsize = 0;
  294|  30.7k|        int32_t ksize = 0;
  295|       |
  296|       |        // Check the sizes of the input strings.
  297|       |
  298|       |        // Language
  299|  30.7k|        if ( newLanguage != nullptr )
  ------------------
  |  Branch (299:14): [True: 30.7k, False: 0]
  ------------------
  300|  30.7k|        {
  301|  30.7k|            lsize = static_cast<int32_t>(uprv_strlen(newLanguage));
  ------------------
  |  |   37|  30.7k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  30.7k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  302|  30.7k|            if ( lsize < 0 || lsize > ULOC_STRING_LIMIT ) { // int32 wrap
  ------------------
  |  |   76|  30.7k|#define ULOC_STRING_LIMIT 357913941
  ------------------
  |  Branch (302:18): [True: 0, False: 30.7k]
  |  Branch (302:31): [True: 0, False: 30.7k]
  ------------------
  303|      0|                setToBogus();
  304|      0|                return;
  305|      0|            }
  306|  30.7k|        }
  307|       |
  308|  30.7k|        CharString togo(newLanguage, lsize, status); // start with newLanguage
  309|       |
  310|       |        // _Country
  311|  30.7k|        if ( newCountry != nullptr )
  ------------------
  |  Branch (311:14): [True: 4.50k, False: 26.2k]
  ------------------
  312|  4.50k|        {
  313|  4.50k|            csize = static_cast<int32_t>(uprv_strlen(newCountry));
  ------------------
  |  |   37|  4.50k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  4.50k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  314|  4.50k|            if ( csize < 0 || csize > ULOC_STRING_LIMIT ) { // int32 wrap
  ------------------
  |  |   76|  4.50k|#define ULOC_STRING_LIMIT 357913941
  ------------------
  |  Branch (314:18): [True: 0, False: 4.50k]
  |  Branch (314:31): [True: 0, False: 4.50k]
  ------------------
  315|      0|                setToBogus();
  316|      0|                return;
  317|      0|            }
  318|  4.50k|        }
  319|       |
  320|       |        // _Variant
  321|  30.7k|        if ( newVariant != nullptr )
  ------------------
  |  Branch (321:14): [True: 0, False: 30.7k]
  ------------------
  322|      0|        {
  323|       |            // remove leading _'s
  324|      0|            while(newVariant[0] == SEP_CHAR)
  ------------------
  |  |  243|      0|#define SEP_CHAR '_'
  ------------------
  |  Branch (324:19): [True: 0, False: 0]
  ------------------
  325|      0|            {
  326|      0|                newVariant++;
  327|      0|            }
  328|       |
  329|       |            // remove trailing _'s
  330|      0|            vsize = static_cast<int32_t>(uprv_strlen(newVariant));
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  331|      0|            if ( vsize < 0 || vsize > ULOC_STRING_LIMIT ) { // int32 wrap
  ------------------
  |  |   76|      0|#define ULOC_STRING_LIMIT 357913941
  ------------------
  |  Branch (331:18): [True: 0, False: 0]
  |  Branch (331:31): [True: 0, False: 0]
  ------------------
  332|      0|                setToBogus();
  333|      0|                return;
  334|      0|            }
  335|      0|            while( (vsize>1) && (newVariant[vsize-1] == SEP_CHAR) )
  ------------------
  |  |  243|      0|#define SEP_CHAR '_'
  ------------------
  |  Branch (335:20): [True: 0, False: 0]
  |  Branch (335:33): [True: 0, False: 0]
  ------------------
  336|      0|            {
  337|      0|                vsize--;
  338|      0|            }
  339|      0|        }
  340|       |
  341|  30.7k|        if ( newKeywords != nullptr)
  ------------------
  |  Branch (341:14): [True: 0, False: 30.7k]
  ------------------
  342|      0|        {
  343|      0|            ksize = static_cast<int32_t>(uprv_strlen(newKeywords));
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  344|      0|            if ( ksize < 0 || ksize > ULOC_STRING_LIMIT ) {
  ------------------
  |  |   76|      0|#define ULOC_STRING_LIMIT 357913941
  ------------------
  |  Branch (344:18): [True: 0, False: 0]
  |  Branch (344:31): [True: 0, False: 0]
  ------------------
  345|      0|              setToBogus();
  346|      0|              return;
  347|      0|            }
  348|      0|        }
  349|       |
  350|       |        // We've checked the input sizes, now build up the full locale string..
  351|       |
  352|       |        // newLanguage is already copied
  353|       |
  354|  30.7k|        if ( ( vsize != 0 ) || (csize != 0) )  // at least:  __v
  ------------------
  |  Branch (354:14): [True: 0, False: 30.7k]
  |  Branch (354:32): [True: 3.08k, False: 27.7k]
  ------------------
  355|  3.08k|        {                                      //            ^
  356|  3.08k|            togo.append(SEP_CHAR, status);
  ------------------
  |  |  243|  3.08k|#define SEP_CHAR '_'
  ------------------
  357|  3.08k|        }
  358|       |
  359|  30.7k|        if ( csize != 0 )
  ------------------
  |  Branch (359:14): [True: 3.08k, False: 27.7k]
  ------------------
  360|  3.08k|        {
  361|  3.08k|            togo.append(newCountry, status);
  362|  3.08k|        }
  363|       |
  364|  30.7k|        if ( vsize != 0)
  ------------------
  |  Branch (364:14): [True: 0, False: 30.7k]
  ------------------
  365|      0|        {
  366|      0|            togo.append(SEP_CHAR, status)
  ------------------
  |  |  243|      0|#define SEP_CHAR '_'
  ------------------
  367|      0|                .append(newVariant, vsize, status);
  368|      0|        }
  369|       |
  370|  30.7k|        if ( ksize != 0)
  ------------------
  |  Branch (370:14): [True: 0, False: 30.7k]
  ------------------
  371|      0|        {
  372|      0|            if (uprv_strchr(newKeywords, '=')) {
  ------------------
  |  |   40|      0|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |  |  Branch (40:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  373|      0|                togo.append('@', status); /* keyword parsing */
  374|      0|            }
  375|      0|            else {
  376|      0|                togo.append('_', status); /* Variant parsing with a script */
  377|      0|                if ( vsize == 0) {
  ------------------
  |  Branch (377:22): [True: 0, False: 0]
  ------------------
  378|      0|                    togo.append('_', status); /* No country found */
  379|      0|                }
  380|      0|            }
  381|      0|            togo.append(newKeywords, status);
  382|      0|        }
  383|       |
  384|  30.7k|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (384:13): [True: 0, False: 30.7k]
  ------------------
  385|       |            // Something went wrong with appending, etc.
  386|      0|            setToBogus();
  387|      0|            return;
  388|      0|        }
  389|       |        // Parse it, because for example 'language' might really be a complete
  390|       |        // string.
  391|  30.7k|        init(togo.data(), false);
  392|  30.7k|    }
  393|  30.7k|}
_ZN6icu_786LocaleC2ERKS0_:
  396|  46.7k|    : UObject(other), fullName(fullNameBuffer), baseName(nullptr)
  397|  46.7k|{
  398|  46.7k|    *this = other;
  399|  46.7k|}
_ZN6icu_786LocaleaSERKS0_:
  406|  99.9k|Locale& Locale::operator=(const Locale& other) {
  407|  99.9k|    if (this == &other) {
  ------------------
  |  Branch (407:9): [True: 0, False: 99.9k]
  ------------------
  408|      0|        return *this;
  409|      0|    }
  410|       |
  411|  99.9k|    setToBogus();
  412|       |
  413|  99.9k|    if (other.fullName == other.fullNameBuffer) {
  ------------------
  |  Branch (413:9): [True: 97.6k, False: 2.27k]
  ------------------
  414|  97.6k|        uprv_strcpy(fullNameBuffer, other.fullNameBuffer);
  ------------------
  |  |   36|  97.6k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  97.6k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  415|  97.6k|    } else if (other.fullName == nullptr) {
  ------------------
  |  Branch (415:16): [True: 0, False: 2.27k]
  ------------------
  416|      0|        fullName = nullptr;
  417|  2.27k|    } else {
  418|  2.27k|        fullName = uprv_strdup(other.fullName);
  ------------------
  |  | 1541|  2.27k|#define uprv_strdup U_ICU_ENTRY_POINT_RENAME(uprv_strdup)
  |  |  ------------------
  |  |  |  |  123|  2.27k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.27k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.27k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  419|  2.27k|        if (fullName == nullptr) return *this;
  ------------------
  |  Branch (419:13): [True: 0, False: 2.27k]
  ------------------
  420|  2.27k|    }
  421|       |
  422|  99.9k|    if (other.baseName == other.fullName) {
  ------------------
  |  Branch (422:9): [True: 88.0k, False: 11.8k]
  ------------------
  423|  88.0k|        baseName = fullName;
  424|  88.0k|    } else if (other.baseName != nullptr) {
  ------------------
  |  Branch (424:16): [True: 11.8k, False: 0]
  ------------------
  425|  11.8k|        baseName = uprv_strdup(other.baseName);
  ------------------
  |  | 1541|  11.8k|#define uprv_strdup U_ICU_ENTRY_POINT_RENAME(uprv_strdup)
  |  |  ------------------
  |  |  |  |  123|  11.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  11.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  11.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  426|  11.8k|        if (baseName == nullptr) return *this;
  ------------------
  |  Branch (426:13): [True: 0, False: 11.8k]
  ------------------
  427|  11.8k|    }
  428|       |
  429|  99.9k|    uprv_strcpy(language, other.language);
  ------------------
  |  |   36|  99.9k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  99.9k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  430|  99.9k|    uprv_strcpy(script, other.script);
  ------------------
  |  |   36|  99.9k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  99.9k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  431|  99.9k|    uprv_strcpy(country, other.country);
  ------------------
  |  |   36|  99.9k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  99.9k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  432|       |
  433|  99.9k|    variantBegin = other.variantBegin;
  434|  99.9k|    fIsBogus = other.fIsBogus;
  435|       |
  436|  99.9k|    return *this;
  437|  99.9k|}
_ZN6icu_786LocaleaSEOS0_:
  439|  4.50k|Locale& Locale::operator=(Locale&& other) noexcept {
  440|  4.50k|    if ((baseName != fullName) && (baseName != fullNameBuffer)) 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (440:9): [True: 0, False: 4.50k]
  |  Branch (440:35): [True: 0, False: 0]
  ------------------
  441|  4.50k|    if (fullName != fullNameBuffer) 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (441:9): [True: 0, False: 4.50k]
  ------------------
  442|       |
  443|  4.50k|    if (other.fullName == other.fullNameBuffer || other.baseName == other.fullNameBuffer) {
  ------------------
  |  Branch (443:9): [True: 4.50k, False: 0]
  |  Branch (443:51): [True: 0, False: 0]
  ------------------
  444|  4.50k|        uprv_strcpy(fullNameBuffer, other.fullNameBuffer);
  ------------------
  |  |   36|  4.50k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  4.50k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  445|  4.50k|    }
  446|  4.50k|    if (other.fullName == other.fullNameBuffer) {
  ------------------
  |  Branch (446:9): [True: 4.50k, False: 0]
  ------------------
  447|  4.50k|        fullName = fullNameBuffer;
  448|  4.50k|    } else {
  449|      0|        fullName = other.fullName;
  450|      0|    }
  451|       |
  452|  4.50k|    if (other.baseName == other.fullNameBuffer) {
  ------------------
  |  Branch (452:9): [True: 4.49k, False: 13]
  ------------------
  453|  4.49k|        baseName = fullNameBuffer;
  454|  4.49k|    } else if (other.baseName == other.fullName) {
  ------------------
  |  Branch (454:16): [True: 0, False: 13]
  ------------------
  455|      0|        baseName = fullName;
  456|     13|    } else {
  457|     13|        baseName = other.baseName;
  458|     13|    }
  459|       |
  460|  4.50k|    uprv_strcpy(language, other.language);
  ------------------
  |  |   36|  4.50k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  4.50k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  461|  4.50k|    uprv_strcpy(script, other.script);
  ------------------
  |  |   36|  4.50k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  4.50k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  462|  4.50k|    uprv_strcpy(country, other.country);
  ------------------
  |  |   36|  4.50k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  4.50k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  463|       |
  464|  4.50k|    variantBegin = other.variantBegin;
  465|  4.50k|    fIsBogus = other.fIsBogus;
  466|       |
  467|  4.50k|    other.baseName = other.fullName = other.fullNameBuffer;
  468|       |
  469|  4.50k|    return *this;
  470|  4.50k|}
_ZNK6icu_786LocaleeqERKS0_:
  479|  25.4k|{
  480|  25.4k|    return (uprv_strcmp(other.fullName, fullName) == 0);
  ------------------
  |  |   38|  25.4k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  25.4k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  481|  25.4k|}
_ZN6icu_786Locale4initEPKca:
 1832|   112k|{
 1833|   112k|    return localeID == nullptr ? *this = getDefault() : init(StringPiece{localeID}, canonicalize);
  ------------------
  |  Branch (1833:12): [True: 43.2k, False: 68.7k]
  ------------------
 1834|   112k|}
_ZN6icu_786Locale4initENS_11StringPieceEa:
 1838|  68.7k|{
 1839|  68.7k|    fIsBogus = false;
 1840|       |    /* Free our current storage */
 1841|  68.7k|    if ((baseName != fullName) && (baseName != fullNameBuffer)) {
  ------------------
  |  Branch (1841:9): [True: 35.3k, False: 33.3k]
  |  Branch (1841:35): [True: 35.3k, False: 0]
  ------------------
 1842|  35.3k|        uprv_free(baseName);
  ------------------
  |  | 1503|  35.3k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  35.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  35.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  35.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1843|  35.3k|    }
 1844|  68.7k|    baseName = nullptr;
 1845|  68.7k|    if(fullName != fullNameBuffer) {
  ------------------
  |  Branch (1845:8): [True: 928, False: 67.8k]
  ------------------
 1846|    928|        uprv_free(fullName);
  ------------------
  |  | 1503|    928|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|    928|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    928|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    928|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1847|    928|        fullName = fullNameBuffer;
 1848|    928|    }
 1849|       |
 1850|       |    // not a loop:
 1851|       |    // just an easy way to have a common error-exit
 1852|       |    // without goto and without another function
 1853|  68.7k|    do {
 1854|  68.7k|        char *separator;
 1855|  68.7k|        char *field[5] = {nullptr};
 1856|  68.7k|        int32_t fieldLen[5] = {0};
 1857|  68.7k|        int32_t fieldIdx;
 1858|  68.7k|        int32_t variantField;
 1859|  68.7k|        int32_t length;
 1860|  68.7k|        UErrorCode err;
 1861|       |
 1862|       |        /* preset all fields to empty */
 1863|  68.7k|        language[0] = script[0] = country[0] = 0;
 1864|       |
 1865|  68.7k|        const auto parse = [canonicalize](std::string_view localeID,
 1866|  68.7k|                                          char* name,
 1867|  68.7k|                                          int32_t nameCapacity,
 1868|  68.7k|                                          UErrorCode& status) {
 1869|  68.7k|            return ByteSinkUtil::viaByteSinkToTerminatedChars(
 1870|  68.7k|                name, nameCapacity,
 1871|  68.7k|                [&](ByteSink& sink, UErrorCode& status) {
 1872|  68.7k|                    if (canonicalize) {
 1873|  68.7k|                        ulocimp_canonicalize(localeID, sink, status);
 1874|  68.7k|                    } else {
 1875|  68.7k|                        ulocimp_getName(localeID, sink, status);
 1876|  68.7k|                    }
 1877|  68.7k|                },
 1878|  68.7k|                status);
 1879|  68.7k|        };
 1880|       |
 1881|       |        // "canonicalize" the locale ID to ICU/Java format
 1882|  68.7k|        err = U_ZERO_ERROR;
 1883|  68.7k|        length = parse(localeID, fullName, sizeof fullNameBuffer, err);
 1884|       |
 1885|  68.7k|        if (err == U_BUFFER_OVERFLOW_ERROR || length >= static_cast<int32_t>(sizeof(fullNameBuffer))) {
  ------------------
  |  Branch (1885:13): [True: 2.32k, False: 66.4k]
  |  Branch (1885:47): [True: 135, False: 66.2k]
  ------------------
 1886|  2.46k|            U_ASSERT(baseName == nullptr);
  ------------------
  |  |   35|  2.46k|#   define U_ASSERT(exp) (void)0
  ------------------
 1887|       |            /*Go to heap for the fullName if necessary*/
 1888|  2.46k|            char* newFullName = static_cast<char*>(uprv_malloc(sizeof(char) * (length + 1)));
  ------------------
  |  | 1524|  2.46k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  2.46k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.46k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.46k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1889|  2.46k|            if (newFullName == nullptr) {
  ------------------
  |  Branch (1889:17): [True: 0, False: 2.46k]
  ------------------
 1890|      0|                break; // error: out of memory
 1891|      0|            }
 1892|  2.46k|            fullName = newFullName;
 1893|  2.46k|            err = U_ZERO_ERROR;
 1894|  2.46k|            length = parse(localeID, fullName, length + 1, err);
 1895|  2.46k|        }
 1896|  68.7k|        if(U_FAILURE(err) || err == U_STRING_NOT_TERMINATED_WARNING) {
  ------------------
  |  Branch (1896:12): [True: 414, False: 68.3k]
  |  Branch (1896:30): [True: 0, False: 68.3k]
  ------------------
 1897|       |            /* should never occur */
 1898|    414|            break;
 1899|    414|        }
 1900|       |
 1901|  68.3k|        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|  68.3k|        separator = field[0] = fullName;
 1906|  68.3k|        fieldIdx = 1;
 1907|  68.3k|        char* at = uprv_strchr(fullName, '@');
  ------------------
  |  |   40|  68.3k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  68.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1908|   120k|        while ((separator = uprv_strchr(field[fieldIdx-1], SEP_CHAR)) != nullptr &&
  ------------------
  |  |   40|   120k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|   120k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1908:16): [True: 60.5k, False: 59.8k]
  ------------------
 1909|   120k|               fieldIdx < UPRV_LENGTHOF(field)-1 &&
  ------------------
  |  |   99|  60.5k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (1909:16): [True: 53.3k, False: 7.21k]
  ------------------
 1910|   120k|               (at == nullptr || separator < at)) {
  ------------------
  |  Branch (1910:17): [True: 37.0k, False: 16.3k]
  |  Branch (1910:34): [True: 15.0k, False: 1.29k]
  ------------------
 1911|  52.0k|            field[fieldIdx] = separator + 1;
 1912|  52.0k|            fieldLen[fieldIdx - 1] = static_cast<int32_t>(separator - field[fieldIdx - 1]);
 1913|  52.0k|            fieldIdx++;
 1914|  52.0k|        }
 1915|       |        // variant may contain @foo or .foo POSIX cruft; remove it
 1916|  68.3k|        separator = uprv_strchr(field[fieldIdx-1], '@');
  ------------------
  |  |   40|  68.3k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  68.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1917|  68.3k|        char* sep2 = uprv_strchr(field[fieldIdx-1], '.');
  ------------------
  |  |   40|  68.3k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  68.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1918|  68.3k|        if (separator!=nullptr || sep2!=nullptr) {
  ------------------
  |  Branch (1918:13): [True: 13.7k, False: 54.6k]
  |  Branch (1918:35): [True: 157, False: 54.4k]
  ------------------
 1919|  13.8k|            if (separator==nullptr || (sep2!=nullptr && separator > sep2)) {
  ------------------
  |  Branch (1919:17): [True: 157, False: 13.7k]
  |  Branch (1919:40): [True: 625, False: 13.1k]
  |  Branch (1919:57): [True: 66, False: 559]
  ------------------
 1920|    223|                separator = sep2;
 1921|    223|            }
 1922|  13.8k|            fieldLen[fieldIdx - 1] = static_cast<int32_t>(separator - field[fieldIdx - 1]);
 1923|  54.4k|        } else {
 1924|  54.4k|            fieldLen[fieldIdx - 1] = length - static_cast<int32_t>(field[fieldIdx - 1] - fullName);
 1925|  54.4k|        }
 1926|       |
 1927|  68.3k|        if (fieldLen[0] >= static_cast<int32_t>(sizeof(language)))
  ------------------
  |  Branch (1927:13): [True: 6, False: 68.3k]
  ------------------
 1928|      6|        {
 1929|      6|            break; // error: the language field is too long
 1930|      6|        }
 1931|       |
 1932|  68.3k|        variantField = 1; /* Usually the 2nd one, except when a script or country is also used. */
 1933|  68.3k|        if (fieldLen[0] > 0) {
  ------------------
  |  Branch (1933:13): [True: 40.3k, False: 27.9k]
  ------------------
 1934|       |            /* We have a language */
 1935|  40.3k|            uprv_memcpy(language, fullName, fieldLen[0]);
  ------------------
  |  |   42|  40.3k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  40.3k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  40.3k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  40.3k|    _Pragma("clang diagnostic push") \
  |  |   45|  40.3k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  40.3k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  40.3k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  40.3k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  40.3k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  40.3k|    _Pragma("clang diagnostic pop") \
  |  |   49|  40.3k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  40.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  40.3k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  40.3k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1936|  40.3k|            language[fieldLen[0]] = 0;
 1937|  40.3k|        }
 1938|  68.3k|        if (fieldLen[1] == 4 && uprv_isASCIILetter(field[1][0]) &&
  ------------------
  |  | 1514|  10.4k|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1938:13): [True: 10.4k, False: 57.8k]
  |  Branch (1938:33): [True: 10.4k, False: 14]
  ------------------
 1939|  68.3k|                uprv_isASCIILetter(field[1][1]) && uprv_isASCIILetter(field[1][2]) &&
  ------------------
  |  | 1514|  10.4k|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                              uprv_isASCIILetter(field[1][1]) && uprv_isASCIILetter(field[1][2]) &&
  ------------------
  |  | 1514|  10.4k|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1939:17): [True: 10.4k, False: 5]
  |  Branch (1939:52): [True: 10.4k, False: 3]
  ------------------
 1940|  68.3k|                uprv_isASCIILetter(field[1][3])) {
  ------------------
  |  | 1514|  10.4k|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1940:17): [True: 10.4k, False: 5]
  ------------------
 1941|       |            /* We have at least a script */
 1942|  10.4k|            uprv_memcpy(script, field[1], fieldLen[1]);
  ------------------
  |  |   42|  10.4k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  10.4k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  10.4k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  10.4k|    _Pragma("clang diagnostic push") \
  |  |   45|  10.4k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  10.4k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  10.4k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  10.4k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  10.4k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  10.4k|    _Pragma("clang diagnostic pop") \
  |  |   49|  10.4k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  10.4k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  10.4k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  10.4k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1943|  10.4k|            script[fieldLen[1]] = 0;
 1944|  10.4k|            variantField++;
 1945|  10.4k|        }
 1946|       |
 1947|  68.3k|        if (fieldLen[variantField] == 2 || fieldLen[variantField] == 3) {
  ------------------
  |  Branch (1947:13): [True: 14.9k, False: 53.3k]
  |  Branch (1947:44): [True: 700, False: 52.6k]
  ------------------
 1948|       |            /* We have a country */
 1949|  15.6k|            uprv_memcpy(country, field[variantField], fieldLen[variantField]);
  ------------------
  |  |   42|  15.6k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  15.6k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  15.6k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  15.6k|    _Pragma("clang diagnostic push") \
  |  |   45|  15.6k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  15.6k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  15.6k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  15.6k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  15.6k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  15.6k|    _Pragma("clang diagnostic pop") \
  |  |   49|  15.6k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  15.6k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  15.6k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  15.6k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1950|  15.6k|            country[fieldLen[variantField]] = 0;
 1951|  15.6k|            variantField++;
 1952|  52.6k|        } else if (fieldLen[variantField] == 0) {
  ------------------
  |  Branch (1952:20): [True: 52.6k, False: 57]
  ------------------
 1953|  52.6k|            variantField++; /* script or country empty but variant in next field (i.e. en__POSIX) */
 1954|  52.6k|        }
 1955|       |
 1956|  68.3k|        if (fieldLen[variantField] > 0) {
  ------------------
  |  Branch (1956:13): [True: 9.46k, False: 58.8k]
  ------------------
 1957|       |            /* We have a variant */
 1958|  9.46k|            variantBegin = static_cast<int32_t>(field[variantField] - fullName);
 1959|  9.46k|        }
 1960|       |
 1961|  68.3k|        err = U_ZERO_ERROR;
 1962|  68.3k|        initBaseName(err);
 1963|  68.3k|        if (U_FAILURE(err)) {
  ------------------
  |  Branch (1963:13): [True: 0, False: 68.3k]
  ------------------
 1964|      0|            break;
 1965|      0|        }
 1966|       |
 1967|  68.3k|        if (canonicalize) {
  ------------------
  |  Branch (1967:13): [True: 885, False: 67.4k]
  ------------------
 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|  68.3k|        return *this;
 1984|  68.3k|    } 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|    420|    setToBogus();
 1988|       |
 1989|    420|    return *this;
 1990|  68.7k|}
_ZN6icu_786Locale12initBaseNameER10UErrorCode:
 1999|  68.3k|Locale::initBaseName(UErrorCode &status) {
 2000|  68.3k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (2000:9): [True: 0, False: 68.3k]
  ------------------
 2001|      0|        return;
 2002|      0|    }
 2003|  68.3k|    U_ASSERT(baseName==nullptr || baseName==fullName);
  ------------------
  |  |   35|  68.3k|#   define U_ASSERT(exp) (void)0
  ------------------
 2004|  68.3k|    const char *atPtr = uprv_strchr(fullName, '@');
  ------------------
  |  |   40|  68.3k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  68.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2005|  68.3k|    const char *eqPtr = uprv_strchr(fullName, '=');
  ------------------
  |  |   40|  68.3k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  68.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2006|  68.3k|    if (atPtr && eqPtr && atPtr < eqPtr) {
  ------------------
  |  Branch (2006:9): [True: 13.7k, False: 54.6k]
  |  Branch (2006:18): [True: 13.5k, False: 223]
  |  Branch (2006:27): [True: 13.3k, False: 135]
  ------------------
 2007|       |        // Key words exist.
 2008|  13.3k|        int32_t baseNameLength = static_cast<int32_t>(atPtr - fullName);
 2009|  13.3k|        char* newBaseName = static_cast<char*>(uprv_malloc(baseNameLength + 1));
  ------------------
  |  | 1524|  13.3k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  13.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2010|  13.3k|        if (newBaseName == nullptr) {
  ------------------
  |  Branch (2010:13): [True: 0, False: 13.3k]
  ------------------
 2011|      0|            status = U_MEMORY_ALLOCATION_ERROR;
 2012|      0|            return;
 2013|      0|        }
 2014|  13.3k|        baseName = newBaseName;
 2015|  13.3k|        uprv_strncpy(baseName, fullName, baseNameLength);
  ------------------
  |  |   43|  13.3k|#define uprv_strncpy(dst, src, size) U_STANDARD_CPP_NAMESPACE strncpy(dst, src, size)
  |  |  ------------------
  |  |  |  |  393|  13.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2016|  13.3k|        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|  13.3k|        if (variantBegin > baseNameLength) {
  ------------------
  |  Branch (2021:13): [True: 10.7k, False: 2.61k]
  ------------------
 2022|  10.7k|            variantBegin = baseNameLength;
 2023|  10.7k|        }
 2024|  54.9k|    } else {
 2025|  54.9k|        baseName = fullName;
 2026|  54.9k|    }
 2027|  68.3k|}
_ZNK6icu_786Locale8hashCodeEv:
 2032|  27.8k|{
 2033|  27.8k|    return ustr_hashCharsN(fullName, static_cast<int32_t>(uprv_strlen(fullName)));
  ------------------
  |  | 1878|  27.8k|#define ustr_hashCharsN U_ICU_ENTRY_POINT_RENAME(ustr_hashCharsN)
  |  |  ------------------
  |  |  |  |  123|  27.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  27.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  27.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return ustr_hashCharsN(fullName, static_cast<int32_t>(uprv_strlen(fullName)));
  ------------------
  |  |   37|  27.8k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  27.8k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2034|  27.8k|}
_ZN6icu_786Locale10setToBogusEv:
 2037|   100k|Locale::setToBogus() {
 2038|       |    /* Free our current storage */
 2039|   100k|    if((baseName != fullName) && (baseName != fullNameBuffer)) {
  ------------------
  |  Branch (2039:8): [True: 90.4k, False: 9.91k]
  |  Branch (2039:34): [True: 90.4k, False: 0]
  ------------------
 2040|  90.4k|        uprv_free(baseName);
  ------------------
  |  | 1503|  90.4k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  90.4k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  90.4k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  90.4k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2041|  90.4k|    }
 2042|   100k|    baseName = nullptr;
 2043|   100k|    if(fullName != fullNameBuffer) {
  ------------------
  |  Branch (2043:8): [True: 1, False: 100k]
  ------------------
 2044|      1|        uprv_free(fullName);
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2045|      1|        fullName = fullNameBuffer;
 2046|      1|    }
 2047|   100k|    *fullNameBuffer = 0;
 2048|   100k|    *language = 0;
 2049|   100k|    *script = 0;
 2050|   100k|    *country = 0;
 2051|   100k|    fIsBogus = true;
 2052|   100k|    variantBegin = 0;
 2053|   100k|}
_ZN6icu_786Locale10getDefaultEv:
 2057|   508k|{
 2058|   508k|    {
 2059|   508k|        Mutex lock(&gDefaultLocaleMutex);
 2060|   508k|        if (gDefaultLocale != nullptr) {
  ------------------
  |  Branch (2060:13): [True: 508k, False: 1]
  ------------------
 2061|   508k|            return *gDefaultLocale;
 2062|   508k|        }
 2063|   508k|    }
 2064|      1|    UErrorCode status = U_ZERO_ERROR;
 2065|      1|    return *locale_set_default_internal(nullptr, status);
 2066|   508k|}
_ZN6icu_786Locale16addLikelySubtagsER10UErrorCode:
 2086|  11.7k|Locale::addLikelySubtags(UErrorCode& status) {
 2087|  11.7k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (2087:9): [True: 0, False: 11.7k]
  ------------------
 2088|      0|        return;
 2089|      0|    }
 2090|       |
 2091|  11.7k|    CharString maximizedLocaleID = ulocimp_addLikelySubtags(fullName, status);
  ------------------
  |  | 1196|  11.7k|#define ulocimp_addLikelySubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_addLikelySubtags)
  |  |  ------------------
  |  |  |  |  123|  11.7k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  11.7k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  11.7k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2092|       |
 2093|  11.7k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (2093:9): [True: 606, False: 11.1k]
  ------------------
 2094|    606|        return;
 2095|    606|    }
 2096|       |
 2097|  11.1k|    init(maximizedLocaleID.data(), /*canonicalize=*/false);
 2098|  11.1k|    if (isBogus()) {
  ------------------
  |  Branch (2098:9): [True: 11, False: 11.1k]
  ------------------
 2099|     11|        status = U_ILLEGAL_ARGUMENT_ERROR;
 2100|     11|    }
 2101|  11.1k|}
_ZN6icu_786Locale15minimizeSubtagsER10UErrorCode:
 2104|  7.16k|Locale::minimizeSubtags(UErrorCode& status) {
 2105|  7.16k|    Locale::minimizeSubtags(false, status);
 2106|  7.16k|}
_ZN6icu_786Locale15minimizeSubtagsEbR10UErrorCode:
 2108|  7.16k|Locale::minimizeSubtags(bool favorScript, UErrorCode& status) {
 2109|  7.16k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (2109:9): [True: 0, False: 7.16k]
  ------------------
 2110|      0|        return;
 2111|      0|    }
 2112|       |
 2113|  7.16k|    CharString minimizedLocaleID = ulocimp_minimizeSubtags(fullName, favorScript, status);
  ------------------
  |  | 1212|  7.16k|#define ulocimp_minimizeSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_minimizeSubtags)
  |  |  ------------------
  |  |  |  |  123|  7.16k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.16k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.16k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2114|       |
 2115|  7.16k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (2115:9): [True: 157, False: 7.00k]
  ------------------
 2116|    157|        return;
 2117|    157|    }
 2118|       |
 2119|  7.00k|    init(minimizedLocaleID.data(), /*canonicalize=*/false);
 2120|  7.00k|    if (isBogus()) {
  ------------------
  |  Branch (2120:9): [True: 3, False: 7.00k]
  ------------------
 2121|      3|        status = U_ILLEGAL_ARGUMENT_ERROR;
 2122|      3|    }
 2123|  7.00k|}
_ZN6icu_786Locale14createFromNameEPKc:
 2204|  18.9k|{
 2205|  18.9k|    if (name) {
  ------------------
  |  Branch (2205:9): [True: 18.9k, False: 0]
  ------------------
 2206|  18.9k|        Locale l("");
 2207|  18.9k|        l.init(name, false);
 2208|  18.9k|        return l;
 2209|  18.9k|    }
 2210|      0|    else {
 2211|      0|        return getDefault();
 2212|      0|    }
 2213|  18.9k|}
_ZN6icu_786Locale14setFromPOSIXIDEPKc:
 2267|    885|{
 2268|    885|    init(posixID, true);
 2269|    885|}
_ZNK6icu_786Locale15getKeywordValueEPKcPciR10UErrorCode:
 2606|  41.0k|{
 2607|  41.0k|    return uloc_getKeywordValue(fullName, keywordName, buffer, bufLen, &status);
  ------------------
  |  | 1130|  41.0k|#define uloc_getKeywordValue U_ICU_ENTRY_POINT_RENAME(uloc_getKeywordValue)
  |  |  ------------------
  |  |  |  |  123|  41.0k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  41.0k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  41.0k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2608|  41.0k|}
_ZNK6icu_786Locale11getBaseNameEv:
 2748|  49.4k|Locale::getBaseName() const {
 2749|  49.4k|    return baseName;
 2750|  49.4k|}
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|  71.2k|                                          UErrorCode& status) {
 1869|  71.2k|            return ByteSinkUtil::viaByteSinkToTerminatedChars(
 1870|  71.2k|                name, nameCapacity,
 1871|  71.2k|                [&](ByteSink& sink, UErrorCode& status) {
 1872|  71.2k|                    if (canonicalize) {
 1873|  71.2k|                        ulocimp_canonicalize(localeID, sink, status);
 1874|  71.2k|                    } else {
 1875|  71.2k|                        ulocimp_getName(localeID, sink, status);
 1876|  71.2k|                    }
 1877|  71.2k|                },
 1878|  71.2k|                status);
 1879|  71.2k|        };
locid.cpp:_ZZZN6icu_786Locale4initENS_11StringPieceEaENK3$_0clENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEPciR10UErrorCodeENKUlRNS_8ByteSinkESA_E_clESC_SA_:
 1871|  71.2k|                [&](ByteSink& sink, UErrorCode& status) {
 1872|  71.2k|                    if (canonicalize) {
  ------------------
  |  Branch (1872:25): [True: 885, False: 70.3k]
  ------------------
 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|  70.3k|                    } else {
 1875|  70.3k|                        ulocimp_getName(localeID, sink, status);
  ------------------
  |  | 1204|  70.3k|#define ulocimp_getName U_ICU_ENTRY_POINT_RENAME(ulocimp_getName)
  |  |  ------------------
  |  |  |  |  123|  70.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  70.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  70.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1876|  70.3k|                    }
 1877|  71.2k|                },
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|}

_Z27ulocimp_addLikelySubtags_78PKcR10UErrorCode:
  290|  20.0k|                         UErrorCode& status) {
  291|  20.0k|    return icu::ByteSinkUtil::viaByteSinkToCharString(
  292|  20.0k|        [&](icu::ByteSink& sink, UErrorCode& status) {
  293|  20.0k|            ulocimp_addLikelySubtags(localeID, sink, status);
  294|  20.0k|        },
  295|  20.0k|        status);
  296|  20.0k|}
_Z27ulocimp_addLikelySubtags_78PKcRN6icu_788ByteSinkER10UErrorCode:
  301|  20.0k|                         UErrorCode& status) {
  302|  20.0k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (302:9): [True: 0, False: 20.0k]
  ------------------
  303|  20.0k|    if (localeID == nullptr) {
  ------------------
  |  Branch (303:9): [True: 0, False: 20.0k]
  ------------------
  304|      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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  305|      0|    }
  306|  20.0k|    icu::CharString localeBuffer = ulocimp_canonicalize(localeID, status);
  ------------------
  |  | 1197|  20.0k|#define ulocimp_canonicalize U_ICU_ENTRY_POINT_RENAME(ulocimp_canonicalize)
  |  |  ------------------
  |  |  |  |  123|  20.0k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  20.0k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  20.0k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  307|  20.0k|    _uloc_addLikelySubtags(localeBuffer.data(), sink, status);
  308|  20.0k|}
_Z26ulocimp_minimizeSubtags_78PKcbR10UErrorCode:
  326|  7.16k|                        UErrorCode& status) {
  327|  7.16k|    return icu::ByteSinkUtil::viaByteSinkToCharString(
  328|  7.16k|        [&](icu::ByteSink& sink, UErrorCode& status) {
  329|  7.16k|            ulocimp_minimizeSubtags(localeID, sink, favorScript, status);
  330|  7.16k|        },
  331|  7.16k|        status);
  332|  7.16k|}
_Z26ulocimp_minimizeSubtags_78PKcRN6icu_788ByteSinkEbR10UErrorCode:
  338|  7.16k|                        UErrorCode& status) {
  339|  7.16k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (339:9): [True: 0, False: 7.16k]
  ------------------
  340|  7.16k|    if (localeID == nullptr) {
  ------------------
  |  Branch (340:9): [True: 0, False: 7.16k]
  ------------------
  341|      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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  342|      0|    }
  343|  7.16k|    icu::CharString localeBuffer = ulocimp_canonicalize(localeID, status);
  ------------------
  |  | 1197|  7.16k|#define ulocimp_canonicalize U_ICU_ENTRY_POINT_RENAME(ulocimp_canonicalize)
  |  |  ------------------
  |  |  |  |  123|  7.16k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.16k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.16k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  344|  7.16k|    _uloc_minimizeSubtags(localeBuffer.data(), sink, favorScript, status);
  345|  7.16k|}
_Z39ulocimp_getRegionForSupplementalData_78PKcbR10UErrorCode:
  434|  40.8k|                                     UErrorCode& status) {
  435|  40.8k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (435:9): [True: 0, False: 40.8k]
  ------------------
  436|      0|        return {};
  437|      0|    }
  438|  40.8k|    icu::CharString rgBuf = GetRegionFromKey(localeID, "rg", status);
  439|  40.8k|    if (U_SUCCESS(status) && rgBuf.isEmpty()) {
  ------------------
  |  Branch (439:9): [True: 40.5k, False: 322]
  |  Branch (439:30): [True: 40.4k, False: 71]
  ------------------
  440|       |        // No valid rg keyword value, try for unicode_region_subtag
  441|  40.4k|        rgBuf = ulocimp_getRegion(localeID == nullptr ? uloc_getDefault() : localeID, status);
  ------------------
  |  | 1206|  40.4k|#define ulocimp_getRegion U_ICU_ENTRY_POINT_RENAME(ulocimp_getRegion)
  |  |  ------------------
  |  |  |  |  123|  40.4k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  40.4k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  40.4k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      rgBuf = ulocimp_getRegion(localeID == nullptr ? uloc_getDefault() : localeID, status);
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (441:35): [True: 0, False: 40.4k]
  ------------------
  442|  40.4k|        if (U_SUCCESS(status) && rgBuf.isEmpty() && inferRegion) {
  ------------------
  |  Branch (442:13): [True: 40.4k, False: 0]
  |  Branch (442:34): [True: 22.1k, False: 18.3k]
  |  Branch (442:53): [True: 8.45k, False: 13.6k]
  ------------------
  443|       |            // Second check for sd keyword value
  444|  8.45k|            rgBuf = GetRegionFromKey(localeID, "sd", status);
  445|  8.45k|            if (U_SUCCESS(status) && rgBuf.isEmpty()) {
  ------------------
  |  Branch (445:17): [True: 8.37k, False: 85]
  |  Branch (445:38): [True: 8.29k, False: 77]
  ------------------
  446|       |                // no unicode_region_subtag but inferRegion true, try likely subtags
  447|  8.29k|                UErrorCode rgStatus = U_ZERO_ERROR;
  448|  8.29k|                icu::CharString locBuf = ulocimp_addLikelySubtags(localeID, rgStatus);
  ------------------
  |  | 1196|  8.29k|#define ulocimp_addLikelySubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_addLikelySubtags)
  |  |  ------------------
  |  |  |  |  123|  8.29k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  8.29k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  8.29k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  449|  8.29k|                if (U_SUCCESS(rgStatus)) {
  ------------------
  |  Branch (449:21): [True: 7.74k, False: 547]
  ------------------
  450|  7.74k|                    rgBuf = ulocimp_getRegion(locBuf.toStringPiece(), status);
  ------------------
  |  | 1206|  7.74k|#define ulocimp_getRegion U_ICU_ENTRY_POINT_RENAME(ulocimp_getRegion)
  |  |  ------------------
  |  |  |  |  123|  7.74k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.74k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.74k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  451|  7.74k|                }
  452|  8.29k|            }
  453|  8.45k|        }
  454|  40.4k|    }
  455|       |
  456|  40.8k|    return rgBuf;
  457|  40.8k|}
_ZN6icu_7817RegionValidateMapC2Ev:
  476|      1|RegionValidateMap::RegionValidateMap() {
  477|      1|    uprv_memcpy(map, gValidRegionMap, sizeof(map));
  ------------------
  |  |   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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  478|      1|}
_ZN6icu_7817RegionValidateMapD2Ev:
  480|      1|RegionValidateMap::~RegionValidateMap() {
  481|      1|}
_ZNK6icu_7817RegionValidateMap5isSetEPKc:
  483|    179|bool RegionValidateMap::isSet(const char* region) const {
  484|    179|    int32_t index = value(region);
  485|    179|    if (index < 0) {
  ------------------
  |  Branch (485:9): [True: 0, False: 179]
  ------------------
  486|      0|        return false;
  487|      0|    }
  488|    179|    return 0 != (map[index / 32] & (1L << (index % 32)));
  489|    179|}
_ZNK6icu_7817RegionValidateMap5valueEPKc:
  500|    179|int32_t RegionValidateMap::value(const char* region) const {
  501|    179|    if (uprv_isASCIILetter(region[0]) && uprv_isASCIILetter(region[1]) &&
  ------------------
  |  | 1514|    179|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  123|    179|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    179|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    179|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (uprv_isASCIILetter(region[0]) && uprv_isASCIILetter(region[1]) &&
  ------------------
  |  | 1514|    179|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  123|    179|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    179|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    179|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (501:9): [True: 179, False: 0]
  |  Branch (501:42): [True: 179, False: 0]
  ------------------
  502|    179|        region[2] == '\0') {
  ------------------
  |  Branch (502:9): [True: 179, False: 0]
  ------------------
  503|    179|        return (uprv_toupper(region[0])-'A') * 26 +
  ------------------
  |  | 1547|    179|#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper)
  |  |  ------------------
  |  |  |  |  123|    179|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    179|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    179|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  504|    179|               (uprv_toupper(region[1])-'A');
  ------------------
  |  | 1547|    179|#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper)
  |  |  ------------------
  |  |  |  |  123|    179|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    179|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    179|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  505|    179|    }
  506|      0|    return -1;
  507|    179|}
loclikely.cpp:_ZN12_GLOBAL__N_122_uloc_addLikelySubtagsEPKcRN6icu_788ByteSinkER10UErrorCode:
  136|  20.0k|                       UErrorCode& err) {
  137|  20.0k|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (137:9): [True: 0, False: 20.0k]
  ------------------
  138|      0|        return;
  139|      0|    }
  140|       |
  141|  20.0k|    if (localeID == nullptr) {
  ------------------
  |  Branch (141:9): [True: 0, False: 20.0k]
  ------------------
  142|      0|        err = U_ILLEGAL_ARGUMENT_ERROR;
  143|      0|        return;
  144|      0|    }
  145|       |
  146|  20.0k|    icu::CharString lang;
  147|  20.0k|    icu::CharString script;
  148|  20.0k|    icu::CharString region;
  149|  20.0k|    icu::CharString variant;
  150|  20.0k|    const char* trailing = nullptr;
  151|  20.0k|    ulocimp_getSubtags(localeID, &lang, &script, &region, &variant, &trailing, err);
  ------------------
  |  | 1209|  20.0k|#define ulocimp_getSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_getSubtags)
  |  |  ------------------
  |  |  |  |  123|  20.0k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  20.0k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  20.0k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  152|  20.0k|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (152:9): [True: 0, False: 20.0k]
  ------------------
  153|      0|        return;
  154|      0|    }
  155|       |
  156|  20.0k|    if (!CHECK_TRAILING_VARIANT_SIZE(variant.data(), variant.length())) {
  ------------------
  |  Branch (156:9): [True: 461, False: 19.5k]
  ------------------
  157|    461|        err = U_ILLEGAL_ARGUMENT_ERROR;
  158|    461|        return;
  159|    461|    }
  160|       |
  161|  19.5k|    if (lang.length() == 4) {
  ------------------
  |  Branch (161:9): [True: 425, False: 19.1k]
  ------------------
  162|    425|        if (script.isEmpty()) {
  ------------------
  |  Branch (162:13): [True: 392, False: 33]
  ------------------
  163|    392|            script = std::move(lang);
  164|    392|            lang.clear();
  165|    392|        } else {
  166|     33|            err = U_ILLEGAL_ARGUMENT_ERROR;
  167|     33|            return;
  168|     33|        }
  169|  19.1k|    } else if (lang.length() > 8) {
  ------------------
  |  Branch (169:16): [True: 659, False: 18.5k]
  ------------------
  170|    659|        err = U_ILLEGAL_ARGUMENT_ERROR;
  171|    659|        return;
  172|    659|    }
  173|       |
  174|  18.9k|    int32_t trailingLength = static_cast<int32_t>(uprv_strlen(trailing));
  ------------------
  |  |   37|  18.9k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  18.9k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  175|       |
  176|  18.9k|    const icu::LikelySubtags* likelySubtags = icu::LikelySubtags::getSingleton(err);
  177|  18.9k|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (177:9): [True: 0, False: 18.9k]
  ------------------
  178|      0|        return;
  179|      0|    }
  180|       |    // We need to keep l on the stack because lsr may point into internal
  181|       |    // memory of l.
  182|  18.9k|    icu::Locale l = icu::Locale::createFromName(localeID);
  183|  18.9k|    if (l.isBogus()) {
  ------------------
  |  Branch (183:9): [True: 0, False: 18.9k]
  ------------------
  184|      0|        err = U_ILLEGAL_ARGUMENT_ERROR;
  185|      0|        return;
  186|      0|    }
  187|  18.9k|    icu::LSR lsr = likelySubtags->makeMaximizedLsrFrom(l, true, err);
  188|  18.9k|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (188:9): [True: 0, False: 18.9k]
  ------------------
  189|      0|        return;
  190|      0|    }
  191|  18.9k|    const char* language = lsr.language;
  192|  18.9k|    if (uprv_strcmp(language, "und") == 0) {
  ------------------
  |  |   38|  18.9k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  18.9k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (192:9): [True: 16, False: 18.8k]
  ------------------
  193|     16|        language = "";
  194|     16|    }
  195|  18.9k|    createTagStringWithAlternates(
  196|  18.9k|        language,
  197|  18.9k|        static_cast<int32_t>(uprv_strlen(language)),
  ------------------
  |  |   37|  18.9k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  18.9k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  198|  18.9k|        lsr.script,
  199|  18.9k|        static_cast<int32_t>(uprv_strlen(lsr.script)),
  ------------------
  |  |   37|  18.9k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  18.9k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  200|  18.9k|        lsr.region,
  201|  18.9k|        static_cast<int32_t>(uprv_strlen(lsr.region)),
  ------------------
  |  |   37|  18.9k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  18.9k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  202|  18.9k|        variant.data(),
  203|  18.9k|        variant.length(),
  204|  18.9k|        trailing,
  205|  18.9k|        trailingLength,
  206|  18.9k|        sink,
  207|  18.9k|        err);
  208|  18.9k|}
loclikely.cpp:_ZN12_GLOBAL__N_127CHECK_TRAILING_VARIANT_SIZEEPKci:
  119|  27.2k|bool CHECK_TRAILING_VARIANT_SIZE(const char* variant, int32_t variantLength) {
  120|  27.2k|    int32_t count = 0;
  121|   169k|    for (int32_t i = 0; i < variantLength; i++) {
  ------------------
  |  Branch (121:25): [True: 142k, False: 26.6k]
  ------------------
  122|   142k|        if (_isIDSeparator(variant[i])) {
  ------------------
  |  Branch (122:13): [True: 75.0k, False: 67.6k]
  ------------------
  123|  75.0k|            count = 0;
  124|  75.0k|        } else if (count == 8) {
  ------------------
  |  Branch (124:20): [True: 617, False: 67.0k]
  ------------------
  125|    617|            return false;
  126|  67.0k|        } else {
  127|  67.0k|            count++;
  128|  67.0k|        }
  129|   142k|    }
  130|  26.6k|    return true;
  131|  27.2k|}
loclikely.cpp:_ZN12_GLOBAL__N_129createTagStringWithAlternatesEPKciS1_iS1_iS1_iS1_iRN6icu_788ByteSinkER10UErrorCode:
   76|  25.9k|    UErrorCode& err) {
   77|  25.9k|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (77:9): [True: 0, False: 25.9k]
  ------------------
   78|      0|        return;
   79|      0|    }
   80|       |
   81|  25.9k|    if (langLength >= ULOC_LANG_CAPACITY ||
  ------------------
  |  |  251|  51.8k|#define ULOC_LANG_CAPACITY 12
  ------------------
  |  Branch (81:9): [True: 0, False: 25.9k]
  ------------------
   82|  25.9k|            scriptLength >= ULOC_SCRIPT_CAPACITY ||
  ------------------
  |  |  271|  51.8k|#define ULOC_SCRIPT_CAPACITY 6
  ------------------
  |  Branch (82:13): [True: 0, False: 25.9k]
  ------------------
   83|  25.9k|            regionLength >= ULOC_COUNTRY_CAPACITY) {
  ------------------
  |  |  258|  25.9k|#define ULOC_COUNTRY_CAPACITY 4
  ------------------
  |  Branch (83:13): [True: 0, False: 25.9k]
  ------------------
   84|      0|        err = U_ILLEGAL_ARGUMENT_ERROR;
   85|      0|        return;
   86|      0|    }
   87|       |
   88|  25.9k|    if (langLength > 0) {
  ------------------
  |  Branch (88:9): [True: 25.8k, False: 24]
  ------------------
   89|  25.8k|        sink.Append(lang, langLength);
   90|  25.8k|    }
   91|       |
   92|  25.9k|    if (scriptLength > 0) {
  ------------------
  |  Branch (92:9): [True: 14.0k, False: 11.8k]
  ------------------
   93|  14.0k|        sink.Append("_", 1);
   94|  14.0k|        sink.Append(script, scriptLength);
   95|  14.0k|    }
   96|       |
   97|  25.9k|    if (regionLength > 0) {
  ------------------
  |  Branch (97:9): [True: 15.8k, False: 10.0k]
  ------------------
   98|  15.8k|        sink.Append("_", 1);
   99|  15.8k|        sink.Append(region, regionLength);
  100|  15.8k|    }
  101|       |
  102|  25.9k|    if (variantLength > 0) {
  ------------------
  |  Branch (102:9): [True: 7.21k, False: 18.7k]
  ------------------
  103|  7.21k|        if (regionLength == 0) {
  ------------------
  |  Branch (103:13): [True: 2.33k, False: 4.87k]
  ------------------
  104|       |            /* extra separator is required */
  105|  2.33k|            sink.Append("_", 1);
  106|  2.33k|        }
  107|  7.21k|        sink.Append("_", 1);
  108|  7.21k|        sink.Append(variant, variantLength);
  109|  7.21k|    }
  110|       |
  111|  25.9k|    if (trailingLength > 0) {
  ------------------
  |  Branch (111:9): [True: 7.28k, False: 18.6k]
  ------------------
  112|       |        /*
  113|       |         * Copy the trailing data into the supplied buffer.
  114|       |         */
  115|  7.28k|        sink.Append(trailing, trailingLength);
  116|  7.28k|    }
  117|  25.9k|}
loclikely.cpp:_ZN12_GLOBAL__N_121_uloc_minimizeSubtagsEPKcRN6icu_788ByteSinkEbR10UErrorCode:
  214|  7.16k|                      UErrorCode& err) {
  215|  7.16k|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (215:9): [True: 1, False: 7.16k]
  ------------------
  216|      1|        return;
  217|      1|    }
  218|       |
  219|  7.16k|    if (localeID == nullptr) {
  ------------------
  |  Branch (219:9): [True: 0, False: 7.16k]
  ------------------
  220|      0|        err = U_ILLEGAL_ARGUMENT_ERROR;
  221|      0|        return;
  222|      0|    }
  223|       |
  224|  7.16k|    icu::CharString lang;
  225|  7.16k|    icu::CharString script;
  226|  7.16k|    icu::CharString region;
  227|  7.16k|    icu::CharString variant;
  228|  7.16k|    const char* trailing = nullptr;
  229|  7.16k|    ulocimp_getSubtags(localeID, &lang, &script, &region, &variant, &trailing, err);
  ------------------
  |  | 1209|  7.16k|#define ulocimp_getSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_getSubtags)
  |  |  ------------------
  |  |  |  |  123|  7.16k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.16k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.16k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  230|  7.16k|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (230:9): [True: 0, False: 7.16k]
  ------------------
  231|      0|        return;
  232|      0|    }
  233|       |
  234|  7.16k|    if (!CHECK_TRAILING_VARIANT_SIZE(variant.data(), variant.length())) {
  ------------------
  |  Branch (234:9): [True: 156, False: 7.00k]
  ------------------
  235|    156|        err = U_ILLEGAL_ARGUMENT_ERROR;
  236|    156|        return;
  237|    156|    }
  238|       |
  239|  7.00k|    int32_t trailingLength = static_cast<int32_t>(uprv_strlen(trailing));
  ------------------
  |  |   37|  7.00k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  7.00k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  240|       |
  241|  7.00k|    const icu::LikelySubtags* likelySubtags = icu::LikelySubtags::getSingleton(err);
  242|  7.00k|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (242:9): [True: 0, False: 7.00k]
  ------------------
  243|      0|        return;
  244|      0|    }
  245|  7.00k|    icu::LSR lsr = likelySubtags->minimizeSubtags(
  246|  7.00k|        lang.toStringPiece(),
  247|  7.00k|        script.toStringPiece(),
  248|  7.00k|        region.toStringPiece(),
  249|  7.00k|        favorScript,
  250|  7.00k|        err);
  251|  7.00k|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (251:9): [True: 0, False: 7.00k]
  ------------------
  252|      0|        return;
  253|      0|    }
  254|  7.00k|    const char* language = lsr.language;
  255|  7.00k|    if (uprv_strcmp(language, "und") == 0) {
  ------------------
  |  |   38|  7.00k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  7.00k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (255:9): [True: 8, False: 7.00k]
  ------------------
  256|      8|        language = "";
  257|      8|    }
  258|  7.00k|    createTagStringWithAlternates(
  259|  7.00k|        language,
  260|  7.00k|        static_cast<int32_t>(uprv_strlen(language)),
  ------------------
  |  |   37|  7.00k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  7.00k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  261|  7.00k|        lsr.script,
  262|  7.00k|        static_cast<int32_t>(uprv_strlen(lsr.script)),
  ------------------
  |  |   37|  7.00k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  7.00k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  263|  7.00k|        lsr.region,
  264|  7.00k|        static_cast<int32_t>(uprv_strlen(lsr.region)),
  ------------------
  |  |   37|  7.00k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  7.00k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  265|  7.00k|        variant.data(),
  266|  7.00k|        variant.length(),
  267|  7.00k|        trailing,
  268|  7.00k|        trailingLength,
  269|  7.00k|        sink,
  270|  7.00k|        err);
  271|  7.00k|}
loclikely.cpp:_ZN12_GLOBAL__N_116GetRegionFromKeyEPKcNSt3__117basic_string_viewIcNS2_11char_traitsIcEEEER10UErrorCode:
  400|  49.3k|GetRegionFromKey(const char* localeID, std::string_view key, UErrorCode& status) {
  401|  49.3k|    icu::CharString result;
  402|       |    // First check for keyword value
  403|  49.3k|    icu::CharString kw = ulocimp_getKeywordValue(localeID, key, status);
  ------------------
  |  | 1200|  49.3k|#define ulocimp_getKeywordValue U_ICU_ENTRY_POINT_RENAME(ulocimp_getKeywordValue)
  |  |  ------------------
  |  |  |  |  123|  49.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  49.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  49.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  404|  49.3k|    int32_t len = kw.length();
  405|       |    // In UTS35
  406|       |    //   type = alphanum{3,8} (sep alphanum{3,8})* ;
  407|       |    // so we know the subdivision must fit the type already.
  408|       |    //
  409|       |    //   unicode_subdivision_id = unicode_region_subtag unicode_subdivision_suffix ;
  410|       |    //   unicode_region_subtag = (alpha{2} | digit{3}) ;
  411|       |    //   unicode_subdivision_suffix = alphanum{1,4} ;
  412|       |    // But we also know there are no id in start with digit{3} in
  413|       |    // https://github.com/unicode-org/cldr/blob/main/common/validity/subdivision.xml
  414|       |    // Therefore we can simplify as
  415|       |    // unicode_subdivision_id = alpha{2} alphanum{1,4}
  416|       |    //
  417|       |    // and only need to accept/reject the code based on the alpha{2} and the length.
  418|  49.3k|    if (U_SUCCESS(status) && len >= 3 && len <= 6 &&
  ------------------
  |  Branch (418:9): [True: 48.9k, False: 407]
  |  Branch (418:30): [True: 468, False: 48.4k]
  |  Branch (418:42): [True: 212, False: 256]
  ------------------
  419|  49.3k|        uprv_isASCIILetter(kw[0]) && uprv_isASCIILetter(kw[1])) {
  ------------------
  |  | 1514|    212|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  123|    212|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    212|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    212|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      uprv_isASCIILetter(kw[0]) && uprv_isASCIILetter(kw[1])) {
  ------------------
  |  | 1514|    190|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  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 (419:9): [True: 190, False: 22]
  |  Branch (419:38): [True: 179, False: 11]
  ------------------
  420|       |        // Additional Check
  421|    179|        static icu::RegionValidateMap valid;
  422|    179|        const char region[] = {kw[0], kw[1], '\0'};
  423|    179|        if (valid.isSet(region)) {
  ------------------
  |  Branch (423:13): [True: 148, False: 31]
  ------------------
  424|    148|            result.append(uprv_toupper(kw[0]), status);
  ------------------
  |  | 1547|    148|#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper)
  |  |  ------------------
  |  |  |  |  123|    148|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    148|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    148|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  425|    148|            result.append(uprv_toupper(kw[1]), status);
  ------------------
  |  | 1547|    148|#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper)
  |  |  ------------------
  |  |  |  |  123|    148|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    148|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    148|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  426|    148|        }
  427|    179|    }
  428|  49.3k|    return result;
  429|  49.3k|}
loclikely.cpp:_ZZ27ulocimp_addLikelySubtags_78PKcR10UErrorCodeENK3$_0clERN6icu_788ByteSinkES2_:
  292|  20.0k|        [&](icu::ByteSink& sink, UErrorCode& status) {
  293|  20.0k|            ulocimp_addLikelySubtags(localeID, sink, status);
  ------------------
  |  | 1196|  20.0k|#define ulocimp_addLikelySubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_addLikelySubtags)
  |  |  ------------------
  |  |  |  |  123|  20.0k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  20.0k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  20.0k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  294|  20.0k|        },
loclikely.cpp:_ZZ26ulocimp_minimizeSubtags_78PKcbR10UErrorCodeENK3$_0clERN6icu_788ByteSinkES2_:
  328|  7.16k|        [&](icu::ByteSink& sink, UErrorCode& status) {
  329|  7.16k|            ulocimp_minimizeSubtags(localeID, sink, favorScript, status);
  ------------------
  |  | 1212|  7.16k|#define ulocimp_minimizeSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_minimizeSubtags)
  |  |  ------------------
  |  |  |  |  123|  7.16k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.16k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.16k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  330|  7.16k|        },

_ZN6icu_7818LocaleDistanceDataC2EOS0_:
   40|      1|        distanceTrieBytes(data.distanceTrieBytes),
   41|      1|        regionToPartitions(data.regionToPartitions),
   42|      1|        partitions(data.partitions),
   43|      1|        paradigms(data.paradigms), paradigmsLength(data.paradigmsLength),
   44|      1|        distances(data.distances) {
   45|      1|    data.partitions = nullptr;
   46|      1|    data.paradigms = nullptr;
   47|      1|}
_ZN6icu_7818LocaleDistanceDataD2Ev:
   49|      1|LocaleDistanceData::~LocaleDistanceData() {
   50|      1|    uprv_free(partitions);
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   51|      1|    delete[] paradigms;
   52|      1|}
_ZN6icu_7813LikelySubtags17initLikelySubtagsER10UErrorCode:
  451|      1|void U_CALLCONV LikelySubtags::initLikelySubtags(UErrorCode &errorCode) {
  452|       |    // This function is invoked only via umtx_initOnce().
  453|      1|    U_ASSERT(gLikelySubtags == nullptr);
  ------------------
  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  ------------------
  454|      1|    LikelySubtagsData data(errorCode);
  455|      1|    data.load(errorCode);
  456|      1|    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (456:9): [True: 0, False: 1]
  ------------------
  457|      1|    gLikelySubtags = new LikelySubtags(data);
  458|      1|    gMacroregions = getStaticMacroregions(errorCode);
  459|       |#if U_DEBUG
  460|       |    auto macroregionsFromData = loadMacroregions(errorCode);
  461|       |    U_ASSERT((*gMacroregions) == (*macroregionsFromData));
  462|       |    delete macroregionsFromData;
  463|       |#endif
  464|      1|    if (U_FAILURE(errorCode) || gLikelySubtags == nullptr || gMacroregions == nullptr) {
  ------------------
  |  Branch (464:9): [True: 0, False: 1]
  |  Branch (464:33): [True: 0, False: 1]
  |  Branch (464:62): [True: 0, False: 1]
  ------------------
  465|      0|        delete gLikelySubtags;
  466|      0|        delete gMacroregions;
  467|      0|        errorCode = U_MEMORY_ALLOCATION_ERROR;
  468|      0|        return;
  469|      0|    }
  470|       |
  471|      1|    ucln_common_registerCleanup(UCLN_COMMON_LIKELY_SUBTAGS, 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  472|      1|}
_ZN6icu_7813LikelySubtags12getSingletonER10UErrorCode:
  474|  25.9k|const LikelySubtags *LikelySubtags::getSingleton(UErrorCode &errorCode) {
  475|  25.9k|    if (U_FAILURE(errorCode)) { return nullptr; }
  ------------------
  |  Branch (475:9): [True: 0, False: 25.9k]
  ------------------
  476|  25.9k|    umtx_initOnce(gInitOnce, &LikelySubtags::initLikelySubtags, errorCode);
  477|  25.9k|    return gLikelySubtags;
  478|  25.9k|}
_ZN6icu_7813LikelySubtagsC2ERNS_17LikelySubtagsDataE:
  481|      1|        langInfoBundle(data.langInfoBundle),
  482|      1|        strings(data.strings.orphanCharStrings()),
  483|      1|        languageAliases(std::move(data.languageAliases)),
  484|      1|        regionAliases(std::move(data.regionAliases)),
  485|      1|        trie(data.trieBytes),
  486|      1|        lsrs(data.lsrs),
  487|       |#if U_DEBUG
  488|       |        lsrsLength(data.lsrsLength),
  489|       |#endif // U_DEBUG
  490|      1|        distanceData(std::move(data.distanceData)) {
  491|      1|    data.langInfoBundle = nullptr;
  492|      1|    data.lsrs = nullptr;
  493|       |
  494|       |    // Cache the result of looking up language="und" encoded as "*", and "und-Zzzz" ("**").
  495|      1|    UStringTrieResult result = trie.next(u'*');
  496|      1|    U_ASSERT(USTRINGTRIE_HAS_NEXT(result));
  ------------------
  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  ------------------
  497|      1|    trieUndState = trie.getState64();
  498|      1|    result = trie.next(u'*');
  499|      1|    U_ASSERT(USTRINGTRIE_HAS_NEXT(result));
  ------------------
  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  ------------------
  500|      1|    trieUndZzzzState = trie.getState64();
  501|      1|    result = trie.next(u'*');
  502|      1|    U_ASSERT(USTRINGTRIE_HAS_VALUE(result));
  ------------------
  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  ------------------
  503|      1|    defaultLsrIndex = trie.getValue();
  504|      1|    trie.reset();
  505|       |
  506|     27|    for (char16_t c = u'a'; c <= u'z'; ++c) {
  ------------------
  |  Branch (506:29): [True: 26, False: 1]
  ------------------
  507|     26|        result = trie.next(c);
  508|     26|        if (result == USTRINGTRIE_NO_VALUE) {
  ------------------
  |  Branch (508:13): [True: 26, False: 0]
  ------------------
  509|     26|            trieFirstLetterStates[c - u'a'] = trie.getState64();
  510|     26|        }
  511|     26|        trie.reset();
  512|     26|    }
  513|      1|}
_ZNK6icu_7813LikelySubtags20makeMaximizedLsrFromERKNS_6LocaleEbR10UErrorCode:
  523|  18.9k|                                         UErrorCode &errorCode) const {
  524|  18.9k|    if (U_FAILURE(errorCode)) { return {}; }
  ------------------
  |  Branch (524:9): [True: 0, False: 18.9k]
  ------------------
  525|  18.9k|    if (locale.isBogus()) {
  ------------------
  |  Branch (525:9): [True: 0, False: 18.9k]
  ------------------
  526|      0|        errorCode = U_ILLEGAL_ARGUMENT_ERROR;
  527|      0|        return {};
  528|      0|    }
  529|  18.9k|    const char *name = locale.getName();
  530|  18.9k|    if (!returnInputIfUnmatch && uprv_isAtSign(name[0]) && name[1] == 'x' && name[2] == '=') {  // name.startsWith("@x=")
  ------------------
  |  |  133|  18.9k|#   define uprv_isAtSign(c) ((c)=='@')
  |  |  ------------------
  |  |  |  Branch (133:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (530:9): [True: 0, False: 18.9k]
  |  Branch (530:60): [True: 0, False: 0]
  |  Branch (530:78): [True: 0, False: 0]
  ------------------
  531|       |        // Private use language tag x-subtag-subtag... which CLDR changes to
  532|       |        // und-x-subtag-subtag...
  533|      0|        return LSR(name, "", "", LSR::EXPLICIT_LSR);
  534|      0|    }
  535|  18.9k|    LSR max = makeMaximizedLsr(locale.getLanguage(), locale.getScript(), locale.getCountry(),
  536|  18.9k|                            locale.getVariant(), returnInputIfUnmatch, errorCode);
  537|       |
  538|  18.9k|    if (uprv_strlen(max.language) == 0 &&
  ------------------
  |  |   37|  18.9k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  18.9k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (538:9): [True: 5.19k, False: 13.7k]
  ------------------
  539|  18.9k|        uprv_strlen(max.script) == 0 &&
  ------------------
  |  |   37|  5.19k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  5.19k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (539:9): [True: 5.19k, False: 0]
  ------------------
  540|  18.9k|        uprv_strlen(max.region) == 0) {
  ------------------
  |  |   37|  5.19k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  5.19k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (540:9): [True: 5.19k, False: 0]
  ------------------
  541|       |        // No match. ICU API mandate us to
  542|       |        // If the provided ULocale instance is already in the maximal form, or
  543|       |        // there is no data available available for maximization, it will be
  544|       |        // returned.
  545|  5.19k|        return LSR(locale.getLanguage(), locale.getScript(), locale.getCountry(), LSR::EXPLICIT_LSR, errorCode);
  546|  5.19k|    }
  547|  13.7k|    return max;
  548|  18.9k|}
_ZNK6icu_7813LikelySubtags16makeMaximizedLsrEPKcS2_S2_S2_bR10UErrorCode:
  562|  18.9k|                                     UErrorCode &errorCode) const {
  563|  18.9k|    if (U_FAILURE(errorCode)) { return {}; }
  ------------------
  |  Branch (563:9): [True: 0, False: 18.9k]
  ------------------
  564|       |    // Handle pseudolocales like en-XA, ar-XB, fr-PSCRACK.
  565|       |    // They should match only themselves,
  566|       |    // not other locales with what looks like the same language and script subtags.
  567|  18.9k|    if (!returnInputIfUnmatch) {
  ------------------
  |  Branch (567:9): [True: 0, False: 18.9k]
  ------------------
  568|      0|        char c1;
  569|      0|        if (region[0] == 'X' && (c1 = region[1]) != 0 && region[2] == 0) {
  ------------------
  |  Branch (569:13): [True: 0, False: 0]
  |  Branch (569:33): [True: 0, False: 0]
  |  Branch (569:58): [True: 0, False: 0]
  ------------------
  570|      0|            switch (c1) {
  571|      0|            case 'A':
  ------------------
  |  Branch (571:13): [True: 0, False: 0]
  ------------------
  572|      0|                return LSR(PSEUDO_ACCENTS_PREFIX, language, script, region,
  573|      0|                           LSR::EXPLICIT_LSR, errorCode);
  574|      0|            case 'B':
  ------------------
  |  Branch (574:13): [True: 0, False: 0]
  ------------------
  575|      0|                return LSR(PSEUDO_BIDI_PREFIX, language, script, region,
  576|      0|                           LSR::EXPLICIT_LSR, errorCode);
  577|      0|            case 'C':
  ------------------
  |  Branch (577:13): [True: 0, False: 0]
  ------------------
  578|      0|                return LSR(PSEUDO_CRACKED_PREFIX, language, script, region,
  579|      0|                           LSR::EXPLICIT_LSR, errorCode);
  580|      0|            default:  // normal locale
  ------------------
  |  Branch (580:13): [True: 0, False: 0]
  ------------------
  581|      0|                break;
  582|      0|            }
  583|      0|        }
  584|       |
  585|      0|        if (variant[0] == 'P' && variant[1] == 'S') {
  ------------------
  |  Branch (585:13): [True: 0, False: 0]
  |  Branch (585:34): [True: 0, False: 0]
  ------------------
  586|      0|            int32_t lsrFlags = *region == 0 ?
  ------------------
  |  Branch (586:32): [True: 0, False: 0]
  ------------------
  587|      0|                LSR::EXPLICIT_LANGUAGE | LSR::EXPLICIT_SCRIPT : LSR::EXPLICIT_LSR;
  588|      0|            if (uprv_strcmp(variant, "PSACCENT") == 0) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (588:17): [True: 0, False: 0]
  ------------------
  589|      0|                return LSR(PSEUDO_ACCENTS_PREFIX, language, script,
  590|      0|                           *region == 0 ? "XA" : region, lsrFlags, errorCode);
  ------------------
  |  Branch (590:28): [True: 0, False: 0]
  ------------------
  591|      0|            } else if (uprv_strcmp(variant, "PSBIDI") == 0) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (591:24): [True: 0, False: 0]
  ------------------
  592|      0|                return LSR(PSEUDO_BIDI_PREFIX, language, script,
  593|      0|                           *region == 0 ? "XB" : region, lsrFlags, errorCode);
  ------------------
  |  Branch (593:28): [True: 0, False: 0]
  ------------------
  594|      0|            } else if (uprv_strcmp(variant, "PSCRACK") == 0) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (594:24): [True: 0, False: 0]
  ------------------
  595|      0|                return LSR(PSEUDO_CRACKED_PREFIX, language, script,
  596|      0|                           *region == 0 ? "XC" : region, lsrFlags, errorCode);
  ------------------
  |  Branch (596:28): [True: 0, False: 0]
  ------------------
  597|      0|            }
  598|       |            // else normal locale
  599|      0|        }
  600|      0|    } // end of if (!returnInputIfUnmatch)
  601|       |
  602|  18.9k|    language = getCanonical(languageAliases, language);
  603|       |    // (We have no script mappings.)
  604|  18.9k|    region = getCanonical(regionAliases, region);
  605|  18.9k|    return maximize(language, script, region, returnInputIfUnmatch, errorCode);
  606|  18.9k|}
_ZNK6icu_7813LikelySubtags8maximizeEPKcS2_S2_bR10UErrorCode:
  610|  26.3k|                             UErrorCode &errorCode) const {
  611|  26.3k|    if (U_FAILURE(errorCode)) { return {}; }
  ------------------
  |  Branch (611:9): [True: 0, False: 26.3k]
  ------------------
  612|  26.3k|    return maximize({language, static_cast<int32_t>(uprv_strlen(language))},
  ------------------
  |  |   37|  26.3k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  26.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  613|  26.3k|                    {script, static_cast<int32_t>(uprv_strlen(script))},
  ------------------
  |  |   37|  26.3k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  26.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  614|  26.3k|                    {region, static_cast<int32_t>(uprv_strlen(region))},
  ------------------
  |  |   37|  26.3k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  26.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  615|  26.3k|                    returnInputIfUnmatch,
  616|  26.3k|                    errorCode);
  617|  26.3k|}
_ZNK6icu_7813LikelySubtags13isMacroregionERNS_11StringPieceER10UErrorCode:
  619|    470|bool LikelySubtags::isMacroregion(StringPiece& region, UErrorCode& errorCode) const {
  620|    470|    if (U_FAILURE(errorCode)) { return false; }
  ------------------
  |  Branch (620:9): [True: 0, False: 470]
  ------------------
  621|       |    // In Java, we use Region class. In C++, since Region is under i18n,
  622|       |    // we read the same data used by Region into gMacroregions avoid dependency
  623|       |    // from common to i18n/region.cpp
  624|    470|    umtx_initOnce(gInitOnce, &LikelySubtags::initLikelySubtags, errorCode);
  625|    470|    if (U_FAILURE(errorCode)) { return false; }
  ------------------
  |  Branch (625:9): [True: 0, False: 470]
  ------------------
  626|    470|    UnicodeString str(UnicodeString::fromUTF8(region));
  627|    470|    return gMacroregions->contains((void *)&str);
  628|    470|}
_ZNK6icu_7813LikelySubtags8maximizeENS_11StringPieceES1_S1_bR10UErrorCode:
  632|  33.3k|                             UErrorCode &errorCode) const {
  633|  33.3k|    if (U_FAILURE(errorCode)) { return {}; }
  ------------------
  |  Branch (633:9): [True: 0, False: 33.3k]
  ------------------
  634|  33.3k|    if (language.compare("und") == 0) {
  ------------------
  |  Branch (634:9): [True: 24, False: 33.3k]
  ------------------
  635|     24|        language = "";
  636|     24|    }
  637|  33.3k|    if (script.compare("Zzzz") == 0) {
  ------------------
  |  Branch (637:9): [True: 22, False: 33.3k]
  ------------------
  638|     22|        script = "";
  639|     22|    }
  640|  33.3k|    if (region.compare("ZZ") == 0) {
  ------------------
  |  Branch (640:9): [True: 27, False: 33.3k]
  ------------------
  641|     27|        region = "";
  642|     27|    }
  643|  33.3k|    if (!script.empty() && !region.empty() && !language.empty()) {
  ------------------
  |  Branch (643:9): [True: 2.47k, False: 30.8k]
  |  Branch (643:28): [True: 492, False: 1.98k]
  |  Branch (643:47): [True: 412, False: 80]
  ------------------
  644|    412|        return LSR(language, script, region, LSR::EXPLICIT_LSR, errorCode);  // already maximized
  645|    412|    }
  646|  32.9k|    bool retainLanguage = false;
  647|  32.9k|    bool retainScript = false;
  648|  32.9k|    bool retainRegion = false;
  649|       |
  650|  32.9k|    BytesTrie iter(trie);
  651|  32.9k|    uint64_t state;
  652|  32.9k|    int32_t value;
  653|       |    // Small optimization: Array lookup for first language letter.
  654|  32.9k|    int32_t c0;
  655|  32.9k|    if (0 <= (c0 = uprv_lowerOrdinal(language.data()[0])) && c0 <= 25 &&
  ------------------
  |  Branch (655:9): [True: 23.3k, False: 9.61k]
  |  Branch (655:62): [True: 23.2k, False: 58]
  ------------------
  656|  32.9k|            language.length() >= 2 &&
  ------------------
  |  Branch (656:13): [True: 21.6k, False: 1.55k]
  ------------------
  657|  32.9k|            (state = trieFirstLetterStates[c0]) != 0) {
  ------------------
  |  Branch (657:13): [True: 21.6k, False: 0]
  ------------------
  658|  21.6k|        value = trieNext(iter.resetToState64(state), language, 1);
  659|  21.6k|    } else {
  660|  11.2k|        value = trieNext(iter, language, 0);
  661|  11.2k|    }
  662|  32.9k|    bool matchLanguage = (value >= 0);
  663|  32.9k|    bool matchScript = false;
  664|  32.9k|    if (value >= 0) {
  ------------------
  |  Branch (664:9): [True: 25.9k, False: 6.93k]
  ------------------
  665|  25.9k|        retainLanguage = !language.empty();
  666|  25.9k|        state = iter.getState64();
  667|  25.9k|    } else {
  668|  6.93k|        retainLanguage = true;
  669|  6.93k|        iter.resetToState64(trieUndState);  // "und" ("*")
  670|  6.93k|        state = 0;
  671|  6.93k|    }
  672|       |
  673|  32.9k|    if (value >= 0 && !script.empty()) {
  ------------------
  |  Branch (673:9): [True: 25.9k, False: 6.93k]
  |  Branch (673:23): [True: 1.98k, False: 24.0k]
  ------------------
  674|  1.98k|        matchScript = true;
  675|  1.98k|    }
  676|  32.9k|    if (value > 0) {
  ------------------
  |  Branch (676:9): [True: 12.4k, False: 20.4k]
  ------------------
  677|       |        // Intermediate or final value from just language.
  678|  12.4k|        if (value == SKIP_SCRIPT) {
  ------------------
  |  Branch (678:13): [True: 400, False: 12.0k]
  ------------------
  679|    400|            value = 0;
  680|    400|        }
  681|  12.4k|        retainScript = !script.empty();
  682|  20.4k|    } else {
  683|  20.4k|        value = trieNext(iter, script, 0);
  684|  20.4k|        if (value >= 0) {
  ------------------
  |  Branch (684:13): [True: 19.7k, False: 719]
  ------------------
  685|  19.7k|            retainScript = !script.empty();
  686|  19.7k|            state = iter.getState64();
  687|  19.7k|        } else {
  688|    719|            retainScript = true;
  689|    719|            if (state == 0) {
  ------------------
  |  Branch (689:17): [True: 69, False: 650]
  ------------------
  690|     69|                iter.resetToState64(trieUndZzzzState);  // "und-Zzzz" ("**")
  691|    650|            } else {
  692|    650|                iter.resetToState64(state);
  693|    650|                value = trieNext(iter, "", 0);
  694|    650|                U_ASSERT(value >= 0);
  ------------------
  |  |   35|    650|#   define U_ASSERT(exp) (void)0
  ------------------
  695|    650|                state = iter.getState64();
  696|    650|            }
  697|    719|        }
  698|  20.4k|    }
  699|       |
  700|  32.9k|    bool matchRegion = false;
  701|  32.9k|    if (value > 0) {
  ------------------
  |  Branch (701:9): [True: 15.8k, False: 17.0k]
  ------------------
  702|       |        // Final value from just language or language+script.
  703|  15.8k|        retainRegion = !region.empty();
  704|  17.0k|    } else {
  705|  17.0k|        value = trieNext(iter, region, 0);
  706|  17.0k|        if (value >= 0) {
  ------------------
  |  Branch (706:13): [True: 15.9k, False: 1.11k]
  ------------------
  707|  15.9k|            if (!region.empty() && !isMacroregion(region, errorCode)) {
  ------------------
  |  Branch (707:17): [True: 470, False: 15.4k]
  |  Branch (707:36): [True: 463, False: 7]
  ------------------
  708|    463|                retainRegion = true;
  709|    463|                matchRegion = true;
  710|    463|            }
  711|  15.9k|        } else {
  712|  1.11k|            retainRegion = true;
  713|  1.11k|            if (state == 0) {
  ------------------
  |  Branch (713:17): [True: 0, False: 1.11k]
  ------------------
  714|      0|                value = defaultLsrIndex;
  715|  1.11k|            } else {
  716|  1.11k|                iter.resetToState64(state);
  717|  1.11k|                value = trieNext(iter, "", 0);
  718|  1.11k|                U_ASSERT(value != 0);
  ------------------
  |  |   35|  1.11k|#   define U_ASSERT(exp) (void)0
  ------------------
  719|       |                // For the case of und_Latn
  720|  1.11k|                if (value < 0) {
  ------------------
  |  Branch (720:21): [True: 76, False: 1.04k]
  ------------------
  721|     76|                    retainLanguage = !language.empty();
  722|     76|                    retainScript = !script.empty();
  723|     76|                    retainRegion = !region.empty();
  724|       |                    // Fallback to und_$region =>
  725|     76|                    iter.resetToState64(trieUndState);  // "und" ("*")
  726|     76|                    value = trieNext(iter, "", 0);
  727|     76|                    U_ASSERT(value == 0);
  ------------------
  |  |   35|     76|#   define U_ASSERT(exp) (void)0
  ------------------
  728|     76|                    int64_t trieUndEmptyState = iter.getState64();
  729|     76|                    value = trieNext(iter, region, 0);
  730|       |                    // Fallback to und =>
  731|     76|                    if (value < 0) {
  ------------------
  |  Branch (731:25): [True: 33, False: 43]
  ------------------
  732|     33|                        iter.resetToState64(trieUndEmptyState);
  733|     33|                        value = trieNext(iter, "", 0);
  734|     33|                        U_ASSERT(value > 0);
  ------------------
  |  |   35|     33|#   define U_ASSERT(exp) (void)0
  ------------------
  735|     33|                    }
  736|     76|                }
  737|  1.11k|            }
  738|  1.11k|        }
  739|  17.0k|    }
  740|  32.9k|    U_ASSERT(value < lsrsLength);
  ------------------
  |  |   35|  32.9k|#   define U_ASSERT(exp) (void)0
  ------------------
  741|  32.9k|    if (returnInputIfUnmatch &&
  ------------------
  |  Branch (741:9): [True: 32.9k, False: 0]
  ------------------
  742|  32.9k|        (!(matchLanguage || matchScript || (matchRegion && language.empty())))) {
  ------------------
  |  Branch (742:12): [True: 25.9k, False: 6.93k]
  |  Branch (742:29): [True: 0, False: 6.93k]
  |  Branch (742:45): [True: 128, False: 6.80k]
  |  Branch (742:60): [True: 0, False: 128]
  ------------------
  743|  6.93k|      return LSR("", "", "", LSR::EXPLICIT_LSR, errorCode);  // no matching.
  744|  6.93k|    }
  745|  25.9k|    if (language.empty()) {
  ------------------
  |  Branch (745:9): [True: 8.17k, False: 17.8k]
  ------------------
  746|  8.17k|        language = StringPiece("und");
  747|  8.17k|    }
  748|       |
  749|  25.9k|    if (!(retainLanguage || retainScript || retainRegion)) {
  ------------------
  |  Branch (749:11): [True: 17.8k, False: 8.17k]
  |  Branch (749:29): [True: 675, False: 7.50k]
  |  Branch (749:45): [True: 505, False: 6.99k]
  ------------------
  750|  6.99k|        U_ASSERT(value >= 0);
  ------------------
  |  |   35|  6.99k|#   define U_ASSERT(exp) (void)0
  ------------------
  751|       |        // Quickly return a copy of the lookup-result LSR
  752|       |        // without new allocation of the subtags.
  753|  6.99k|        const LSR &matched = lsrs[value];
  754|  6.99k|        return LSR(matched.language, matched.script, matched.region, matched.flags);
  755|  6.99k|    }
  756|  18.9k|    if (!retainLanguage) {
  ------------------
  |  Branch (756:9): [True: 1.18k, False: 17.8k]
  ------------------
  757|  1.18k|        U_ASSERT(value >= 0);
  ------------------
  |  |   35|  1.18k|#   define U_ASSERT(exp) (void)0
  ------------------
  758|  1.18k|        language = lsrs[value].language;
  759|  1.18k|    }
  760|  18.9k|    if (!retainScript) {
  ------------------
  |  Branch (760:9): [True: 17.0k, False: 1.98k]
  ------------------
  761|  17.0k|        U_ASSERT(value >= 0);
  ------------------
  |  |   35|  17.0k|#   define U_ASSERT(exp) (void)0
  ------------------
  762|  17.0k|        script = lsrs[value].script;
  763|  17.0k|    }
  764|  18.9k|    if (!retainRegion) {
  ------------------
  |  Branch (764:9): [True: 14.7k, False: 4.28k]
  ------------------
  765|  14.7k|        U_ASSERT(value >= 0);
  ------------------
  |  |   35|  14.7k|#   define U_ASSERT(exp) (void)0
  ------------------
  766|  14.7k|        region = lsrs[value].region;
  767|  14.7k|    }
  768|  18.9k|    int32_t retainMask = (retainLanguage ? 4 : 0) + (retainScript ? 2 : 0) + (retainRegion ? 1 : 0);
  ------------------
  |  Branch (768:27): [True: 17.8k, False: 1.18k]
  |  Branch (768:54): [True: 1.98k, False: 17.0k]
  |  Branch (768:79): [True: 4.28k, False: 14.7k]
  ------------------
  769|       |    // retainOldMask flags = LSR explicit-subtag flags
  770|  18.9k|    return LSR(language, script, region, retainMask, errorCode);
  771|  25.9k|}
_ZN6icu_7813LikelySubtags8trieNextERNS_9BytesTrieEPKci:
  873|  1.87k|int32_t LikelySubtags::trieNext(BytesTrie &iter, const char *s, int32_t i) {
  874|  1.87k|    UStringTrieResult result;
  875|  1.87k|    uint8_t c;
  876|  1.87k|    if ((c = s[i]) == 0) {
  ------------------
  |  Branch (876:9): [True: 1.87k, False: 0]
  ------------------
  877|  1.87k|        result = iter.next(u'*');
  878|  1.87k|    } else {
  879|      0|        for (;;) {
  880|      0|            c = uprv_invCharToAscii(c);
  ------------------
  |  |  173|      0|#   define uprv_invCharToAscii(c) (c)
  ------------------
  881|       |            // EBCDIC: If s[i] is not an invariant character,
  882|       |            // then c is now 0 and will simply not match anything, which is harmless.
  883|      0|            uint8_t next = s[++i];
  884|      0|            if (next != 0) {
  ------------------
  |  Branch (884:17): [True: 0, False: 0]
  ------------------
  885|      0|                if (!USTRINGTRIE_HAS_NEXT(iter.next(c))) {
  ------------------
  |  |   95|      0|#define USTRINGTRIE_HAS_NEXT(result) ((result)&1)
  ------------------
  |  Branch (885:21): [True: 0, False: 0]
  ------------------
  886|      0|                    return -1;
  887|      0|                }
  888|      0|            } else {
  889|       |                // last character of this subtag
  890|      0|                result = iter.next(c | 0x80);
  891|      0|                break;
  892|      0|            }
  893|      0|            c = next;
  894|      0|        }
  895|      0|    }
  896|  1.87k|    switch (result) {
  897|     76|    case USTRINGTRIE_NO_MATCH: return -1;
  ------------------
  |  Branch (897:5): [True: 76, False: 1.80k]
  ------------------
  898|    642|    case USTRINGTRIE_NO_VALUE: return 0;
  ------------------
  |  Branch (898:5): [True: 642, False: 1.23k]
  ------------------
  899|      0|    case USTRINGTRIE_INTERMEDIATE_VALUE:
  ------------------
  |  Branch (899:5): [True: 0, False: 1.87k]
  ------------------
  900|      0|        U_ASSERT(iter.getValue() == SKIP_SCRIPT);
  ------------------
  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  ------------------
  901|      0|        return SKIP_SCRIPT;
  902|  1.15k|    case USTRINGTRIE_FINAL_VALUE: return iter.getValue();
  ------------------
  |  Branch (902:5): [True: 1.15k, False: 718]
  ------------------
  903|      0|    default: return -1;
  ------------------
  |  Branch (903:5): [True: 0, False: 1.87k]
  ------------------
  904|  1.87k|    }
  905|  1.87k|}
_ZN6icu_7813LikelySubtags8trieNextERNS_9BytesTrieENS_11StringPieceEi:
  906|  70.4k|int32_t LikelySubtags::trieNext(BytesTrie &iter, StringPiece s, int32_t i) {
  907|  70.4k|    UStringTrieResult result;
  908|  70.4k|    uint8_t c;
  909|  70.4k|    if (s.length() == i) {
  ------------------
  |  Branch (909:9): [True: 42.7k, False: 27.7k]
  ------------------
  910|  42.7k|        result = iter.next(u'*');
  911|  42.7k|    } else {
  912|  27.7k|        c = s.data()[i];
  913|  37.8k|        for (;;) {
  914|  37.8k|            c = uprv_invCharToAscii(c);
  ------------------
  |  |  173|  37.8k|#   define uprv_invCharToAscii(c) (c)
  ------------------
  915|       |            // EBCDIC: If s[i] is not an invariant character,
  916|       |            // then c is now 0 and will simply not match anything, which is harmless.
  917|  37.8k|            if (i+1 != s.length()) {
  ------------------
  |  Branch (917:17): [True: 13.6k, False: 24.1k]
  ------------------
  918|  13.6k|                if (!USTRINGTRIE_HAS_NEXT(iter.next(c))) {
  ------------------
  |  |   95|  13.6k|#define USTRINGTRIE_HAS_NEXT(result) ((result)&1)
  ------------------
  |  Branch (918:21): [True: 3.61k, False: 10.0k]
  ------------------
  919|  3.61k|                    return -1;
  920|  3.61k|                }
  921|  10.0k|                c = s.data()[++i];
  922|  24.1k|            } else {
  923|       |                // last character of this subtag
  924|  24.1k|                result = iter.next(c | 0x80);
  925|  24.1k|                break;
  926|  24.1k|            }
  927|  37.8k|        }
  928|  27.7k|    }
  929|  66.8k|    switch (result) {
  930|  5.18k|    case USTRINGTRIE_NO_MATCH: return -1;
  ------------------
  |  Branch (930:5): [True: 5.18k, False: 61.6k]
  ------------------
  931|  29.5k|    case USTRINGTRIE_NO_VALUE: return 0;
  ------------------
  |  Branch (931:5): [True: 29.5k, False: 37.3k]
  ------------------
  932|    400|    case USTRINGTRIE_INTERMEDIATE_VALUE:
  ------------------
  |  Branch (932:5): [True: 400, False: 66.4k]
  ------------------
  933|    400|        U_ASSERT(iter.getValue() == SKIP_SCRIPT);
  ------------------
  |  |   35|    400|#   define U_ASSERT(exp) (void)0
  ------------------
  934|    400|        return SKIP_SCRIPT;
  935|  31.7k|    case USTRINGTRIE_FINAL_VALUE: return iter.getValue();
  ------------------
  |  Branch (935:5): [True: 31.7k, False: 35.1k]
  ------------------
  936|      0|    default: return -1;
  ------------------
  |  Branch (936:5): [True: 0, False: 66.8k]
  ------------------
  937|  66.8k|    }
  938|  66.8k|}
_ZNK6icu_7813LikelySubtags15minimizeSubtagsENS_11StringPieceES1_S1_bR10UErrorCode:
  943|  7.00k|                                    UErrorCode &errorCode) const {
  944|  7.00k|    if (U_FAILURE(errorCode)) { return {}; }
  ------------------
  |  Branch (944:9): [True: 0, False: 7.00k]
  ------------------
  945|  7.00k|    LSR max = maximize(language, script, region, true, errorCode);
  946|  7.00k|    if (U_FAILURE(errorCode)) { return {}; }
  ------------------
  |  Branch (946:9): [True: 0, False: 7.00k]
  ------------------
  947|       |    // If no match, return it.
  948|  7.00k|    if (uprv_strlen(max.language) == 0 &&
  ------------------
  |  |   37|  7.00k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  7.00k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (948:9): [True: 1.71k, False: 5.28k]
  ------------------
  949|  7.00k|        uprv_strlen(max.script) == 0 &&
  ------------------
  |  |   37|  1.71k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  1.71k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (949:9): [True: 1.71k, False: 0]
  ------------------
  950|  7.00k|        uprv_strlen(max.region) == 0) {
  ------------------
  |  |   37|  1.71k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  1.71k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (950:9): [True: 1.71k, False: 0]
  ------------------
  951|       |        // No match. ICU API mandate us to
  952|       |        // "If this Locale is already in the minimal form, or not valid, or
  953|       |        // there is no data available for minimization, the Locale will be
  954|       |        // unchanged."
  955|  1.71k|        return LSR(language, script, region, LSR::EXPLICIT_LSR, errorCode);
  956|  1.71k|    }
  957|       |    // try language
  958|  5.28k|    LSR test = maximize(max.language, "", "", true, errorCode);
  959|  5.28k|    if (U_FAILURE(errorCode)) { return {}; }
  ------------------
  |  Branch (959:9): [True: 0, False: 5.28k]
  ------------------
  960|  5.28k|    if (test.isEquivalentTo(max)) {
  ------------------
  |  Branch (960:9): [True: 3.43k, False: 1.85k]
  ------------------
  961|  3.43k|        return LSR(max.language, "", "", LSR::DONT_CARE_FLAGS, errorCode);
  962|  3.43k|    }
  963|       |
  964|  1.85k|    if (!favorScript) {
  ------------------
  |  Branch (964:9): [True: 1.85k, False: 0]
  ------------------
  965|       |        // favor Region
  966|       |        // try language and region
  967|  1.85k|        test = maximize(max.language, "", max.region, true, errorCode);
  968|  1.85k|        if (U_FAILURE(errorCode)) { return {}; }
  ------------------
  |  Branch (968:13): [True: 0, False: 1.85k]
  ------------------
  969|  1.85k|        if (test.isEquivalentTo(max)) {
  ------------------
  |  Branch (969:13): [True: 1.58k, False: 269]
  ------------------
  970|  1.58k|            return LSR(max.language, "", max.region, LSR::DONT_CARE_FLAGS, errorCode);
  971|  1.58k|        }
  972|  1.85k|    }
  973|       |    // try language and script
  974|    269|    test = maximize(max.language, max.script, "", true, errorCode);
  975|    269|    if (U_FAILURE(errorCode)) { return {}; }
  ------------------
  |  Branch (975:9): [True: 0, False: 269]
  ------------------
  976|    269|    if (test.isEquivalentTo(max)) {
  ------------------
  |  Branch (976:9): [True: 165, False: 104]
  ------------------
  977|    165|        return LSR(max.language, max.script, "", LSR::DONT_CARE_FLAGS, errorCode);
  978|    165|    }
  979|    104|    if (favorScript) {
  ------------------
  |  Branch (979:9): [True: 0, False: 104]
  ------------------
  980|       |        // try language and region
  981|      0|        test = maximize(max.language, "", max.region, true, errorCode);
  982|      0|        if (U_FAILURE(errorCode)) { return {}; }
  ------------------
  |  Branch (982:13): [True: 0, False: 0]
  ------------------
  983|      0|        if (test.isEquivalentTo(max)) {
  ------------------
  |  Branch (983:13): [True: 0, False: 0]
  ------------------
  984|      0|            return LSR(max.language, "", max.region, LSR::DONT_CARE_FLAGS, errorCode);
  985|      0|        }
  986|      0|    }
  987|    104|    return LSR(max.language, max.script, max.region, LSR::DONT_CARE_FLAGS, errorCode);
  988|    104|}
_ZN6icu_7817LikelySubtagsDataC2ER10UErrorCode:
   65|      1|    LikelySubtagsData(UErrorCode &errorCode) : strings(errorCode) {}
_ZN6icu_7817LikelySubtagsData4loadER10UErrorCode:
   72|      1|    void load(UErrorCode &errorCode) {
   73|      1|        if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (73:13): [True: 0, False: 1]
  ------------------
   74|      1|        langInfoBundle = ures_openDirect(nullptr, "langInfo", &errorCode);
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   75|      1|        if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (75:13): [True: 0, False: 1]
  ------------------
   76|      1|        StackUResourceBundle stackTempBundle;
   77|      1|        ResourceDataValue value;
   78|      1|        ures_getValueWithFallback(langInfoBundle, "likely", stackTempBundle.getAlias(),
  ------------------
  |  | 1684|      1|#define ures_getValueWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getValueWithFallback)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   79|      1|                                  value, errorCode);
   80|      1|        ResourceTable likelyTable = value.getTable(errorCode);
   81|      1|        if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (81:13): [True: 0, False: 1]
  ------------------
   82|       |
   83|       |        // Read all strings in the resource bundle and convert them to invariant char *.
   84|      1|        LocalMemory<int32_t> languageIndexes, regionIndexes, lsrSubtagIndexes;
   85|      1|        int32_t languagesLength = 0, regionsLength = 0, lsrSubtagsLength = 0;
   86|      1|        ResourceArray m49Array;
   87|      1|        if (likelyTable.findValue("m49", value)) {
  ------------------
  |  Branch (87:13): [True: 1, False: 0]
  ------------------
   88|      1|            m49Array = value.getArray(errorCode);
   89|      1|        } else {
   90|      0|            errorCode = U_MISSING_RESOURCE_ERROR;
   91|      0|            return;
   92|      0|        }
   93|      1|        if (!readStrings(likelyTable, "languageAliases", value,
  ------------------
  |  Branch (93:13): [True: 0, False: 1]
  ------------------
   94|      1|                         languageIndexes, languagesLength, errorCode) ||
   95|      1|                !readStrings(likelyTable, "regionAliases", value,
  ------------------
  |  Branch (95:17): [True: 0, False: 1]
  ------------------
   96|      1|                             regionIndexes, regionsLength, errorCode) ||
   97|      1|                !readLSREncodedStrings(likelyTable, "lsrnum", value, m49Array,
  ------------------
  |  Branch (97:17): [True: 0, False: 1]
  ------------------
   98|      1|                             lsrSubtagIndexes,lsrSubtagsLength, errorCode)) {
   99|      0|            return;
  100|      0|        }
  101|      1|        if ((languagesLength & 1) != 0 ||
  ------------------
  |  Branch (101:13): [True: 0, False: 1]
  ------------------
  102|      1|                (regionsLength & 1) != 0 ||
  ------------------
  |  Branch (102:17): [True: 0, False: 1]
  ------------------
  103|      1|                (lsrSubtagsLength % 3) != 0) {
  ------------------
  |  Branch (103:17): [True: 0, False: 1]
  ------------------
  104|      0|            errorCode = U_INVALID_FORMAT_ERROR;
  105|      0|            return;
  106|      0|        }
  107|      1|        if (lsrSubtagsLength == 0) {
  ------------------
  |  Branch (107:13): [True: 0, False: 1]
  ------------------
  108|      0|            errorCode = U_MISSING_RESOURCE_ERROR;
  109|      0|            return;
  110|      0|        }
  111|       |
  112|      1|        if (!likelyTable.findValue("trie", value)) {
  ------------------
  |  Branch (112:13): [True: 0, False: 1]
  ------------------
  113|      0|            errorCode = U_MISSING_RESOURCE_ERROR;
  114|      0|            return;
  115|      0|        }
  116|      1|        int32_t length;
  117|      1|        trieBytes = value.getBinary(length, errorCode);
  118|      1|        if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (118:13): [True: 0, False: 1]
  ------------------
  119|       |
  120|       |        // Also read distance/matcher data if available,
  121|       |        // to open & keep only one resource bundle pointer
  122|       |        // and to use one single UniqueCharStrings.
  123|      1|        UErrorCode matchErrorCode = U_ZERO_ERROR;
  124|      1|        ures_getValueWithFallback(langInfoBundle, "match", stackTempBundle.getAlias(),
  ------------------
  |  | 1684|      1|#define ures_getValueWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getValueWithFallback)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  125|      1|                                  value, matchErrorCode);
  126|      1|        LocalMemory<int32_t> partitionIndexes, paradigmSubtagIndexes;
  127|      1|        int32_t partitionsLength = 0, paradigmSubtagsLength = 0;
  128|      1|        if (U_SUCCESS(matchErrorCode)) {
  ------------------
  |  Branch (128:13): [True: 1, False: 0]
  ------------------
  129|      1|            ResourceTable matchTable = value.getTable(errorCode);
  130|      1|            if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (130:17): [True: 0, False: 1]
  ------------------
  131|       |
  132|      1|            if (matchTable.findValue("trie", value)) {
  ------------------
  |  Branch (132:17): [True: 1, False: 0]
  ------------------
  133|      1|                distanceData.distanceTrieBytes = value.getBinary(length, errorCode);
  134|      1|                if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (134:21): [True: 0, False: 1]
  ------------------
  135|      1|            }
  136|       |
  137|      1|            if (matchTable.findValue("regionToPartitions", value)) {
  ------------------
  |  Branch (137:17): [True: 1, False: 0]
  ------------------
  138|      1|                distanceData.regionToPartitions = value.getBinary(length, errorCode);
  139|      1|                if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (139:21): [True: 0, False: 1]
  ------------------
  140|      1|                if (length < LSR::REGION_INDEX_LIMIT) {
  ------------------
  |  Branch (140:21): [True: 0, False: 1]
  ------------------
  141|      0|                    errorCode = U_INVALID_FORMAT_ERROR;
  142|      0|                    return;
  143|      0|                }
  144|      1|            }
  145|       |
  146|      1|            if (!readStrings(matchTable, "partitions", value,
  ------------------
  |  Branch (146:17): [True: 0, False: 1]
  ------------------
  147|      1|                             partitionIndexes, partitionsLength, errorCode) ||
  148|      1|                    !readLSREncodedStrings(matchTable, "paradigmnum", value, m49Array,
  ------------------
  |  Branch (148:21): [True: 0, False: 1]
  ------------------
  149|      1|                                 paradigmSubtagIndexes, paradigmSubtagsLength, errorCode)) {
  150|      0|                return;
  151|      0|            }
  152|      1|            if ((paradigmSubtagsLength % 3) != 0) {
  ------------------
  |  Branch (152:17): [True: 0, False: 1]
  ------------------
  153|      0|                errorCode = U_INVALID_FORMAT_ERROR;
  154|      0|                return;
  155|      0|            }
  156|       |
  157|      1|            if (matchTable.findValue("distances", value)) {
  ------------------
  |  Branch (157:17): [True: 1, False: 0]
  ------------------
  158|      1|                distanceData.distances = value.getIntVector(length, errorCode);
  159|      1|                if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (159:21): [True: 0, False: 1]
  ------------------
  160|      1|                if (length < 4) {  // LocaleDistance IX_LIMIT
  ------------------
  |  Branch (160:21): [True: 0, False: 1]
  ------------------
  161|      0|                    errorCode = U_INVALID_FORMAT_ERROR;
  162|      0|                    return;
  163|      0|                }
  164|      1|            }
  165|      1|        } else if (matchErrorCode == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (165:20): [True: 0, False: 0]
  ------------------
  166|       |            // ok for likely subtags
  167|      0|        } else {  // error other than missing resource
  168|      0|            errorCode = matchErrorCode;
  169|      0|            return;
  170|      0|        }
  171|       |
  172|       |        // Fetch & store invariant-character versions of strings
  173|       |        // only after we have collected and de-duplicated all of them.
  174|      1|        strings.freeze();
  175|       |
  176|      1|        languageAliases = CharStringMap(languagesLength / 2, errorCode);
  177|    244|        for (int32_t i = 0; i < languagesLength; i += 2) {
  ------------------
  |  Branch (177:29): [True: 243, False: 1]
  ------------------
  178|    243|            languageAliases.put(strings.get(languageIndexes[i]),
  179|    243|                                strings.get(languageIndexes[i + 1]), errorCode);
  180|    243|        }
  181|       |
  182|      1|        regionAliases = CharStringMap(regionsLength / 2, errorCode);
  183|     39|        for (int32_t i = 0; i < regionsLength; i += 2) {
  ------------------
  |  Branch (183:29): [True: 38, False: 1]
  ------------------
  184|     38|            regionAliases.put(strings.get(regionIndexes[i]),
  185|     38|                              strings.get(regionIndexes[i + 1]), errorCode);
  186|     38|        }
  187|      1|        if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (187:13): [True: 0, False: 1]
  ------------------
  188|       |
  189|      1|        lsrsLength = lsrSubtagsLength / 3;
  190|      1|        lsrs = new LSR[lsrsLength];
  191|      1|        if (lsrs == nullptr) {
  ------------------
  |  Branch (191:13): [True: 0, False: 1]
  ------------------
  192|      0|            errorCode = U_MEMORY_ALLOCATION_ERROR;
  193|      0|            return;
  194|      0|        }
  195|  7.50k|        for (int32_t i = 0, j = 0; i < lsrSubtagsLength; i += 3, ++j) {
  ------------------
  |  Branch (195:36): [True: 7.49k, False: 1]
  ------------------
  196|  7.49k|            lsrs[j] = LSR(strings.get(lsrSubtagIndexes[i]),
  197|  7.49k|                          strings.get(lsrSubtagIndexes[i + 1]),
  198|  7.49k|                          strings.get(lsrSubtagIndexes[i + 2]),
  199|  7.49k|                          LSR::IMPLICIT_LSR);
  200|  7.49k|        }
  201|       |
  202|      1|        if (partitionsLength > 0) {
  ------------------
  |  Branch (202:13): [True: 1, False: 0]
  ------------------
  203|      1|            distanceData.partitions = static_cast<const char **>(
  204|      1|                uprv_malloc(partitionsLength * sizeof(const char *)));
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|      1|            if (distanceData.partitions == nullptr) {
  ------------------
  |  Branch (205:17): [True: 0, False: 1]
  ------------------
  206|      0|                errorCode = U_MEMORY_ALLOCATION_ERROR;
  207|      0|                return;
  208|      0|            }
  209|     17|            for (int32_t i = 0; i < partitionsLength; ++i) {
  ------------------
  |  Branch (209:33): [True: 16, False: 1]
  ------------------
  210|     16|                distanceData.partitions[i] = strings.get(partitionIndexes[i]);
  211|     16|            }
  212|      1|        }
  213|       |
  214|      1|        if (paradigmSubtagsLength > 0) {
  ------------------
  |  Branch (214:13): [True: 1, False: 0]
  ------------------
  215|      1|            distanceData.paradigmsLength = paradigmSubtagsLength / 3;
  216|      1|            LSR *paradigms = new LSR[distanceData.paradigmsLength];
  217|      1|            if (paradigms == nullptr) {
  ------------------
  |  Branch (217:17): [True: 0, False: 1]
  ------------------
  218|      0|                errorCode = U_MEMORY_ALLOCATION_ERROR;
  219|      0|                return;
  220|      0|            }
  221|      7|            for (int32_t i = 0, j = 0; i < paradigmSubtagsLength; i += 3, ++j) {
  ------------------
  |  Branch (221:40): [True: 6, False: 1]
  ------------------
  222|      6|                paradigms[j] = LSR(strings.get(paradigmSubtagIndexes[i]),
  223|      6|                                   strings.get(paradigmSubtagIndexes[i + 1]),
  224|      6|                                   strings.get(paradigmSubtagIndexes[i + 2]),
  225|      6|                                   LSR::DONT_CARE_FLAGS);
  226|      6|            }
  227|      1|            distanceData.paradigms = paradigms;
  228|      1|        }
  229|      1|    }
_ZN6icu_7817LikelySubtagsData11readStringsERKNS_13ResourceTableEPKcRNS_13ResourceValueERNS_11LocalMemoryIiEERiR10UErrorCode:
  233|      3|                     LocalMemory<int32_t> &indexes, int32_t &length, UErrorCode &errorCode) {
  234|      3|        if (U_FAILURE(errorCode)) { return false; }
  ------------------
  |  Branch (234:13): [True: 0, False: 3]
  ------------------
  235|      3|        if (table.findValue(key, value)) {
  ------------------
  |  Branch (235:13): [True: 3, False: 0]
  ------------------
  236|      3|            ResourceArray stringArray = value.getArray(errorCode);
  237|      3|            if (U_FAILURE(errorCode)) { return false; }
  ------------------
  |  Branch (237:17): [True: 0, False: 3]
  ------------------
  238|      3|            length = stringArray.getSize();
  239|      3|            if (length == 0) { return true; }
  ------------------
  |  Branch (239:17): [True: 0, False: 3]
  ------------------
  240|      3|            int32_t *rawIndexes = indexes.allocateInsteadAndCopy(length);
  241|      3|            if (rawIndexes == nullptr) {
  ------------------
  |  Branch (241:17): [True: 0, False: 3]
  ------------------
  242|      0|                errorCode = U_MEMORY_ALLOCATION_ERROR;
  243|      0|                return false;
  244|      0|            }
  245|    581|            for (int i = 0; i < length; ++i) {
  ------------------
  |  Branch (245:29): [True: 578, False: 3]
  ------------------
  246|    578|                if (stringArray.getValue(i, value)) {  // returns true because i < length
  ------------------
  |  Branch (246:21): [True: 578, False: 0]
  ------------------
  247|    578|                    int32_t strLength = 0;
  248|    578|                    rawIndexes[i] = strings.add(value.getString(strLength, errorCode), errorCode);
  249|    578|                    if (U_FAILURE(errorCode)) { return false; }
  ------------------
  |  Branch (249:25): [True: 0, False: 578]
  ------------------
  250|    578|                }
  251|    578|            }
  252|      3|        }
  253|      3|        return true;
  254|      3|    }
_ZN6icu_7817LikelySubtagsData21readLSREncodedStringsERKNS_13ResourceTableEPKcRNS_13ResourceValueERKNS_13ResourceArrayERNS_11LocalMemoryIiEERiR10UErrorCode:
  318|      2|                     LocalMemory<int32_t> &indexes, int32_t &length, UErrorCode &errorCode) {
  319|      2|        if (U_FAILURE(errorCode)) { return false; }
  ------------------
  |  Branch (319:13): [True: 0, False: 2]
  ------------------
  320|      2|        if (table.findValue(key, value)) {
  ------------------
  |  Branch (320:13): [True: 2, False: 0]
  ------------------
  321|      2|            const int32_t* vectors = value.getIntVector(length, errorCode);
  322|      2|            if (U_FAILURE(errorCode)) { return false; }
  ------------------
  |  Branch (322:17): [True: 0, False: 2]
  ------------------
  323|      2|            if (length == 0) { return true; }
  ------------------
  |  Branch (323:17): [True: 0, False: 2]
  ------------------
  324|      2|            int32_t *rawIndexes = indexes.allocateInsteadAndCopy(length * 3);
  325|      2|            if (rawIndexes == nullptr) {
  ------------------
  |  Branch (325:17): [True: 0, False: 2]
  ------------------
  326|      0|                errorCode = U_MEMORY_ALLOCATION_ERROR;
  327|      0|                return false;
  328|      0|            }
  329|  7.50k|            for (int i = 0; i < length; ++i) {
  ------------------
  |  Branch (329:29): [True: 7.50k, False: 2]
  ------------------
  330|  7.50k|                rawIndexes[i*3] = strings.addByValue(toLanguage(vectors[i]), errorCode);
  331|  7.50k|                rawIndexes[i*3+1] = strings.addByValue(toScript(vectors[i]), errorCode);
  332|  7.50k|                rawIndexes[i*3+2] = strings.addByValue(
  333|  7.50k|                    toRegion(m49Array, value, vectors[i], errorCode), errorCode);
  334|  7.50k|                if (U_FAILURE(errorCode)) { return false; }
  ------------------
  |  Branch (334:21): [True: 0, False: 7.50k]
  ------------------
  335|  7.50k|            }
  336|      2|            length *= 3;
  337|      2|        }
  338|      2|        return true;
  339|      2|    }
_ZN6icu_7817LikelySubtagsData10toLanguageEi:
  255|  7.50k|    UnicodeString toLanguage(int encoded) {
  256|  7.50k|        if (encoded == 0) {
  ------------------
  |  Branch (256:13): [True: 1, False: 7.50k]
  ------------------
  257|      1|            return UNICODE_STRING_SIMPLE("");
  ------------------
  |  |  135|      1|#define UNICODE_STRING_SIMPLE(cs) UNICODE_STRING(cs, -1)
  |  |  ------------------
  |  |  |  |  121|      1|# define UNICODE_STRING(cs, _length) icu::UnicodeString(true, u ## cs, _length)
  |  |  ------------------
  ------------------
  258|      1|        }
  259|  7.50k|        if (encoded == 1) {
  ------------------
  |  Branch (259:13): [True: 1, False: 7.50k]
  ------------------
  260|      1|            return UNICODE_STRING_SIMPLE("skip");
  ------------------
  |  |  135|      1|#define UNICODE_STRING_SIMPLE(cs) UNICODE_STRING(cs, -1)
  |  |  ------------------
  |  |  |  |  121|      1|# define UNICODE_STRING(cs, _length) icu::UnicodeString(true, u ## cs, _length)
  |  |  ------------------
  ------------------
  261|      1|        }
  262|  7.50k|        encoded &= 0x00ffffff;
  263|  7.50k|        encoded %= 27*27*27;
  264|  7.50k|        char lang[3];
  265|  7.50k|        lang[0] = 'a' + ((encoded % 27) - 1);
  266|  7.50k|        lang[1] = 'a' + (((encoded / 27 ) % 27) - 1);
  267|  7.50k|        if (encoded / (27 * 27) == 0) {
  ------------------
  |  Branch (267:13): [True: 438, False: 7.06k]
  ------------------
  268|    438|            return UnicodeString(lang, 2, US_INV);
  ------------------
  |  |   98|    438|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  269|    438|        }
  270|  7.06k|        lang[2] = 'a' + ((encoded / (27 * 27)) - 1);
  271|  7.06k|        return UnicodeString(lang, 3, US_INV);
  ------------------
  |  |   98|  7.06k|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  272|  7.50k|    }
_ZN6icu_7817LikelySubtagsData8toScriptEi:
  273|  7.50k|    UnicodeString toScript(int encoded) {
  274|  7.50k|        if (encoded == 0) {
  ------------------
  |  Branch (274:13): [True: 1, False: 7.50k]
  ------------------
  275|      1|            return UNICODE_STRING_SIMPLE("");
  ------------------
  |  |  135|      1|#define UNICODE_STRING_SIMPLE(cs) UNICODE_STRING(cs, -1)
  |  |  ------------------
  |  |  |  |  121|      1|# define UNICODE_STRING(cs, _length) icu::UnicodeString(true, u ## cs, _length)
  |  |  ------------------
  ------------------
  276|      1|        }
  277|  7.50k|        if (encoded == 1) {
  ------------------
  |  Branch (277:13): [True: 1, False: 7.50k]
  ------------------
  278|      1|            return UNICODE_STRING_SIMPLE("script");
  ------------------
  |  |  135|      1|#define UNICODE_STRING_SIMPLE(cs) UNICODE_STRING(cs, -1)
  |  |  ------------------
  |  |  |  |  121|      1|# define UNICODE_STRING(cs, _length) icu::UnicodeString(true, u ## cs, _length)
  |  |  ------------------
  ------------------
  279|      1|        }
  280|  7.50k|        encoded = (encoded >> 24) & 0x000000ff;
  281|  7.50k|        const char* script = uscript_getShortName(static_cast<UScriptCode>(encoded));
  ------------------
  |  | 1708|  7.50k|#define uscript_getShortName U_ICU_ENTRY_POINT_RENAME(uscript_getShortName)
  |  |  ------------------
  |  |  |  |  123|  7.50k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.50k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.50k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  282|  7.50k|        if (script == nullptr) {
  ------------------
  |  Branch (282:13): [True: 0, False: 7.50k]
  ------------------
  283|      0|            return UNICODE_STRING_SIMPLE("");
  ------------------
  |  |  135|      0|#define UNICODE_STRING_SIMPLE(cs) UNICODE_STRING(cs, -1)
  |  |  ------------------
  |  |  |  |  121|      0|# define UNICODE_STRING(cs, _length) icu::UnicodeString(true, u ## cs, _length)
  |  |  ------------------
  ------------------
  284|      0|        }
  285|  7.50k|        U_ASSERT(uprv_strlen(script) == 4);
  ------------------
  |  |   35|  7.50k|#   define U_ASSERT(exp) (void)0
  ------------------
  286|  7.50k|        return UnicodeString(script, 4, US_INV);
  ------------------
  |  |   98|  7.50k|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  287|  7.50k|    }
_ZN6icu_7817LikelySubtagsData8toRegionERKNS_13ResourceArrayERNS_13ResourceValueEiR10UErrorCode:
  300|  7.50k|    UnicodeString toRegion(const ResourceArray& m49Array, ResourceValue &value, int encoded, UErrorCode &errorCode) {
  301|  7.50k|        if (U_FAILURE(errorCode) || encoded == 0 || encoded == 1) {
  ------------------
  |  Branch (301:13): [True: 0, False: 7.50k]
  |  Branch (301:37): [True: 1, False: 7.50k]
  |  Branch (301:53): [True: 1, False: 7.50k]
  ------------------
  302|      2|            return UNICODE_STRING_SIMPLE("");
  ------------------
  |  |  135|      2|#define UNICODE_STRING_SIMPLE(cs) UNICODE_STRING(cs, -1)
  |  |  ------------------
  |  |  |  |  121|      2|# define UNICODE_STRING(cs, _length) icu::UnicodeString(true, u ## cs, _length)
  |  |  ------------------
  ------------------
  303|      2|        }
  304|  7.50k|        encoded &= 0x00ffffff;
  305|  7.50k|        encoded /= 27 * 27 * 27;
  306|  7.50k|        encoded %= 27 * 27;
  307|  7.50k|        if (encoded < 27) {
  ------------------
  |  Branch (307:13): [True: 19, False: 7.48k]
  ------------------
  308|       |            // Selected M49 code index, find the code from "m49" resource.
  309|     19|            return  m49IndexToCode(m49Array, value, encoded, errorCode);
  310|     19|        }
  311|  7.48k|        char region[2];
  312|  7.48k|        region[0] = 'A' + ((encoded % 27) - 1);
  313|  7.48k|        region[1] = 'A' + (((encoded / 27) % 27) - 1);
  314|  7.48k|        return UnicodeString(region, 2, US_INV);
  ------------------
  |  |   98|  7.48k|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  315|  7.50k|    }
_ZN6icu_7817LikelySubtagsData14m49IndexToCodeERKNS_13ResourceArrayERNS_13ResourceValueEiR10UErrorCode:
  288|     19|    UnicodeString m49IndexToCode(const ResourceArray &m49Array, ResourceValue &value, int index, UErrorCode &errorCode) {
  289|     19|        if (U_FAILURE(errorCode)) {
  ------------------
  |  Branch (289:13): [True: 0, False: 19]
  ------------------
  290|      0|            return UNICODE_STRING_SIMPLE("");
  ------------------
  |  |  135|      0|#define UNICODE_STRING_SIMPLE(cs) UNICODE_STRING(cs, -1)
  |  |  ------------------
  |  |  |  |  121|      0|# define UNICODE_STRING(cs, _length) icu::UnicodeString(true, u ## cs, _length)
  |  |  ------------------
  ------------------
  291|      0|        }
  292|     19|        if (m49Array.getValue(index, value)) {
  ------------------
  |  Branch (292:13): [True: 19, False: 0]
  ------------------
  293|     19|            return value.getUnicodeString(errorCode);
  294|     19|        }
  295|       |        // "m49" does not include the index.
  296|      0|        errorCode = U_MISSING_RESOURCE_ERROR;
  297|      0|        return UNICODE_STRING_SIMPLE("");
  ------------------
  |  |  135|      0|#define UNICODE_STRING_SIMPLE(cs) UNICODE_STRING(cs, -1)
  |  |  ------------------
  |  |  |  |  121|      0|# define UNICODE_STRING(cs, _length) icu::UnicodeString(true, u ## cs, _length)
  |  |  ------------------
  ------------------
  298|     19|    }
loclikelysubtags.cpp:_ZN6icu_7812_GLOBAL__N_121getStaticMacroregionsER10UErrorCode:
  430|      1|UVector* getStaticMacroregions(UErrorCode &status) {
  431|      1|    if (U_FAILURE(status)) { return nullptr; }
  ------------------
  |  Branch (431:9): [True: 0, False: 1]
  ------------------
  432|      1|    LocalPointer<UVector> newMacroRegions(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status);
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  LocalPointer<UVector> newMacroRegions(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  433|       |
  434|      1|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (434:9): [True: 0, False: 1]
  ------------------
  435|      0|        return nullptr;
  436|      0|    }
  437|       |
  438|     24|    for (const auto *region : MACROREGION_HARDCODE) {
  ------------------
  |  Branch (438:29): [True: 24, False: 1]
  ------------------
  439|     24|        UnicodeString regionName(region);
  440|     24|        processMacroregionRange(regionName, newMacroRegions.getAlias(), status);
  441|     24|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (441:13): [True: 0, False: 24]
  ------------------
  442|      0|            return nullptr;
  443|      0|        }
  444|     24|    }
  445|       |
  446|      1|    return newMacroRegions.orphan();
  447|      1|}
loclikelysubtags.cpp:_ZN6icu_7812_GLOBAL__N_123processMacroregionRangeERKNS_13UnicodeStringEPNS_7UVectorER10UErrorCode:
  385|     24|void processMacroregionRange(const UnicodeString& regionName, UVector* newMacroRegions, UErrorCode& status) {
  386|     24|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (386:9): [True: 0, False: 24]
  ------------------
  387|     24|    int32_t rangeMarkerLocation = regionName.indexOf(RANGE_MARKER);
  388|     24|    char16_t buf[6];
  389|     24|    regionName.extract(buf,6,status);
  390|     24|    if ( rangeMarkerLocation > 0 ) {
  ------------------
  |  Branch (390:10): [True: 8, False: 16]
  ------------------
  391|      8|        char16_t endRange = regionName.charAt(rangeMarkerLocation+1);
  392|      8|        buf[rangeMarkerLocation] = 0;
  393|     27|        while ( buf[rangeMarkerLocation-1] <= endRange && U_SUCCESS(status)) {
  ------------------
  |  Branch (393:17): [True: 19, False: 8]
  |  Branch (393:59): [True: 19, False: 0]
  ------------------
  394|     19|            LocalPointer<UnicodeString> newRegion(new UnicodeString(buf), status);
  395|     19|            newMacroRegions->adoptElement(newRegion.orphan(),status);
  396|     19|            buf[rangeMarkerLocation-1]++;
  397|     19|        }
  398|     16|    } else {
  399|     16|        LocalPointer<UnicodeString> newRegion(new UnicodeString(regionName), status);
  400|     16|        newMacroRegions->adoptElement(newRegion.orphan(),status);
  401|     16|    }
  402|     24|}
_ZN6icu_7817LikelySubtagsDataD2Ev:
   67|      1|    ~LikelySubtagsData() {
   68|      1|        ures_close(langInfoBundle);
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   69|      1|        delete[] lsrs;
   70|      1|    }
loclikelysubtags.cpp:_ZN6icu_7812_GLOBAL__N_112getCanonicalERKNS_13CharStringMapEPKc:
  552|  37.8k|const char *getCanonical(const CharStringMap &aliases, const char *alias) {
  553|  37.8k|    const char *canonical = aliases.get(alias);
  554|  37.8k|    return canonical == nullptr ? alias : canonical;
  ------------------
  |  Branch (554:12): [True: 37.6k, False: 146]
  ------------------
  555|  37.8k|}

_ZN6icu_7818LocaleDistanceDataC2Ev:
   25|      1|    LocaleDistanceData() = default;

_ZN6icu_783LSRC2ENS_11StringPieceES1_S1_iR10UErrorCode:
   36|  38.5k|        language(nullptr), script(nullptr), region(nullptr),
   37|  38.5k|        regionIndex(indexForRegion(r.data())), flags(f) {
   38|  38.5k|    if (U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (38:9): [True: 38.5k, False: 0]
  ------------------
   39|  38.5k|        CharString data;
   40|  38.5k|        data.append(lang, errorCode).append('\0', errorCode);
   41|  38.5k|        int32_t scriptOffset = data.length();
   42|  38.5k|        data.append(scr, errorCode).append('\0', errorCode);
   43|  38.5k|        int32_t regionOffset = data.length();
   44|  38.5k|        data.append(r, errorCode);
   45|  38.5k|        owned = data.cloneData(errorCode);
   46|  38.5k|        if (U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (46:13): [True: 38.5k, False: 0]
  ------------------
   47|  38.5k|            language = owned;
   48|  38.5k|            script = owned + scriptOffset;
   49|  38.5k|            region = owned + regionOffset;
   50|  38.5k|        }
   51|  38.5k|    }
   52|  38.5k|}
_ZN6icu_783LSRC2EOS0_:
   55|  13.7k|        language(other.language), script(other.script), region(other.region), owned(other.owned),
   56|  13.7k|        regionIndex(other.regionIndex), flags(other.flags),
   57|  13.7k|        hashCode(other.hashCode) {
   58|  13.7k|    if (owned != nullptr) {
  ------------------
  |  Branch (58:9): [True: 8.11k, False: 5.59k]
  ------------------
   59|  8.11k|        other.language = other.script = "";
   60|  8.11k|        other.owned = nullptr;
   61|  8.11k|        other.hashCode = 0;
   62|  8.11k|    }
   63|  13.7k|}
_ZN6icu_783LSR11deleteOwnedEv:
   65|  38.5k|void LSR::deleteOwned() {
   66|  38.5k|    uprv_free(owned);
  ------------------
  |  | 1503|  38.5k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  38.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  38.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  38.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   67|  38.5k|}
_ZN6icu_783LSRaSEOS0_:
   69|  9.63k|LSR &LSR::operator=(LSR &&other) noexcept {
   70|  9.63k|    this->~LSR();
   71|  9.63k|    language = other.language;
   72|  9.63k|    script = other.script;
   73|  9.63k|    region = other.region;
   74|  9.63k|    regionIndex = other.regionIndex;
   75|  9.63k|    flags = other.flags;
   76|  9.63k|    owned = other.owned;
   77|  9.63k|    hashCode = other.hashCode;
   78|  9.63k|    if (owned != nullptr) {
  ------------------
  |  Branch (78:9): [True: 2.12k, False: 7.50k]
  ------------------
   79|  2.12k|        other.language = other.script = "";
   80|  2.12k|        other.owned = nullptr;
   81|  2.12k|        other.hashCode = 0;
   82|  2.12k|    }
   83|  9.63k|    return *this;
   84|  9.63k|}
_ZNK6icu_783LSR14isEquivalentToERKS0_:
   86|  7.41k|UBool LSR::isEquivalentTo(const LSR &other) const {
   87|  7.41k|    return
   88|  7.41k|        uprv_strcmp(language, other.language) == 0 &&
  ------------------
  |  |   38|  7.41k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  7.41k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (88:9): [True: 7.38k, False: 31]
  ------------------
   89|  7.41k|        uprv_strcmp(script, other.script) == 0 &&
  ------------------
  |  |   38|  7.38k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  7.38k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (89:9): [True: 6.76k, False: 623]
  ------------------
   90|  7.41k|        regionIndex == other.regionIndex &&
  ------------------
  |  Branch (90:9): [True: 5.18k, False: 1.57k]
  ------------------
   91|       |        // Compare regions if both are ill-formed (and their indexes are 0).
   92|  7.41k|        (regionIndex > 0 || uprv_strcmp(region, other.region) == 0);
  ------------------
  |  |   38|    246|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    246|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (92:10): [True: 4.93k, False: 246]
  |  Branch (92:29): [True: 246, False: 0]
  ------------------
   93|  7.41k|}
_ZN6icu_783LSR14indexForRegionEPKc:
  105|  53.0k|int32_t LSR::indexForRegion(const char *region) {
  106|  53.0k|    int32_t c = region[0];
  107|  53.0k|    int32_t a = c - '0';
  108|  53.0k|    if (0 <= a && a <= 9) {  // digits: "419"
  ------------------
  |  Branch (108:9): [True: 35.8k, False: 17.2k]
  |  Branch (108:19): [True: 424, False: 35.3k]
  ------------------
  109|    424|        int32_t b = region[1] - '0';
  110|    424|        if (b < 0 || 9 < b) { return 0; }
  ------------------
  |  Branch (110:13): [True: 43, False: 381]
  |  Branch (110:22): [True: 44, False: 337]
  ------------------
  111|    337|        c = region[2] - '0';
  112|    337|        if (c < 0 || 9 < c || region[3] != 0) { return 0; }
  ------------------
  |  Branch (112:13): [True: 75, False: 262]
  |  Branch (112:22): [True: 37, False: 225]
  |  Branch (112:31): [True: 0, False: 225]
  ------------------
  113|    225|        return (10 * a + b) * 10 + c + 1;
  114|  52.6k|    } else {  // letters: "DE"
  115|  52.6k|        a = uprv_upperOrdinal(c);
  116|  52.6k|        if (a < 0 || 25 < a) { return 0; }
  ------------------
  |  Branch (116:13): [True: 17.2k, False: 35.3k]
  |  Branch (116:22): [True: 64, False: 35.2k]
  ------------------
  117|  35.2k|        int32_t b = uprv_upperOrdinal(region[1]);
  118|  35.2k|        if (b < 0 || 25 < b || region[2] != 0) { return 0; }
  ------------------
  |  Branch (118:13): [True: 233, False: 35.0k]
  |  Branch (118:22): [True: 23, False: 35.0k]
  |  Branch (118:32): [True: 377, False: 34.6k]
  ------------------
  119|  34.6k|        return 26 * a + b + 1001;
  120|  35.2k|    }
  121|      0|    return 0;
  122|  53.0k|}

_ZN6icu_783LSRD2Ev:
   53|  76.3k|    inline ~LSR() {
   54|       |        // Pure inline code for almost all instances.
   55|  76.3k|        if (owned != nullptr) {
  ------------------
  |  Branch (55:13): [True: 38.5k, False: 37.8k]
  ------------------
   56|  38.5k|            deleteOwned();
   57|  38.5k|        }
   58|  76.3k|    }
_ZN6icu_783LSRC2Ev:
   37|  7.50k|    LSR() : language("und"), script(""), region("") {}
_ZN6icu_783LSRC2EPKcS2_S2_i:
   41|  14.5k|            language(lang),  script(scr), region(r),
   42|  14.5k|            regionIndex(indexForRegion(region)), flags(f) {}

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

_ZN6icu_7812PropNameData12findPropertyEi:
  148|  7.50k|int32_t PropNameData::findProperty(int32_t property) {
  149|  7.50k|    int32_t i=1;  // valueMaps index, initially after numRanges
  150|  15.0k|    for(int32_t numRanges=valueMaps[0]; numRanges>0; --numRanges) {
  ------------------
  |  Branch (150:41): [True: 15.0k, False: 0]
  ------------------
  151|       |        // Read and skip the start and limit of this range.
  152|  15.0k|        int32_t start=valueMaps[i];
  153|  15.0k|        int32_t limit=valueMaps[i+1];
  154|  15.0k|        i+=2;
  155|  15.0k|        if(property<start) {
  ------------------
  |  Branch (155:12): [True: 0, False: 15.0k]
  ------------------
  156|      0|            break;
  157|      0|        }
  158|  15.0k|        if(property<limit) {
  ------------------
  |  Branch (158:12): [True: 7.50k, False: 7.50k]
  ------------------
  159|  7.50k|            return i+(property-start)*2;
  160|  7.50k|        }
  161|  7.50k|        i+=(limit-start)*2;  // Skip all entries for this range.
  162|  7.50k|    }
  163|      0|    return 0;
  164|  7.50k|}
_ZN6icu_7812PropNameData26findPropertyValueNameGroupEii:
  166|  7.50k|int32_t PropNameData::findPropertyValueNameGroup(int32_t valueMapIndex, int32_t value) {
  167|  7.50k|    if(valueMapIndex==0) {
  ------------------
  |  Branch (167:8): [True: 0, False: 7.50k]
  ------------------
  168|      0|        return 0;  // The property does not have named values.
  169|      0|    }
  170|  7.50k|    ++valueMapIndex;  // Skip the BytesTrie offset.
  171|  7.50k|    int32_t numRanges=valueMaps[valueMapIndex++];
  172|  7.50k|    if(numRanges<0x10) {
  ------------------
  |  Branch (172:8): [True: 7.50k, False: 0]
  ------------------
  173|       |        // Ranges of values.
  174|  7.50k|        for(; numRanges>0; --numRanges) {
  ------------------
  |  Branch (174:15): [True: 7.50k, False: 0]
  ------------------
  175|       |            // Read and skip the start and limit of this range.
  176|  7.50k|            int32_t start=valueMaps[valueMapIndex];
  177|  7.50k|            int32_t limit=valueMaps[valueMapIndex+1];
  178|  7.50k|            valueMapIndex+=2;
  179|  7.50k|            if(value<start) {
  ------------------
  |  Branch (179:16): [True: 0, False: 7.50k]
  ------------------
  180|      0|                break;
  181|      0|            }
  182|  7.50k|            if(value<limit) {
  ------------------
  |  Branch (182:16): [True: 7.50k, False: 0]
  ------------------
  183|  7.50k|                return valueMaps[valueMapIndex+value-start];
  184|  7.50k|            }
  185|      0|            valueMapIndex+=limit-start;  // Skip all entries for this range.
  186|      0|        }
  187|  7.50k|    } else {
  188|       |        // List of values.
  189|      0|        int32_t valuesStart=valueMapIndex;
  190|      0|        int32_t nameGroupOffsetsStart=valueMapIndex+numRanges-0x10;
  191|      0|        do {
  192|      0|            int32_t v=valueMaps[valueMapIndex];
  193|      0|            if(value<v) {
  ------------------
  |  Branch (193:16): [True: 0, False: 0]
  ------------------
  194|      0|                break;
  195|      0|            }
  196|      0|            if(value==v) {
  ------------------
  |  Branch (196:16): [True: 0, False: 0]
  ------------------
  197|      0|                return valueMaps[nameGroupOffsetsStart+valueMapIndex-valuesStart];
  198|      0|            }
  199|      0|        } while(++valueMapIndex<nameGroupOffsetsStart);
  ------------------
  |  Branch (199:17): [True: 0, False: 0]
  ------------------
  200|      0|    }
  201|      0|    return 0;
  202|  7.50k|}
_ZN6icu_7812PropNameData7getNameEPKci:
  204|  7.50k|const char *PropNameData::getName(const char *nameGroup, int32_t nameIndex) {
  205|  7.50k|    int32_t numNames=*nameGroup++;
  206|  7.50k|    if(nameIndex<0 || numNames<=nameIndex) {
  ------------------
  |  Branch (206:8): [True: 0, False: 7.50k]
  |  Branch (206:23): [True: 0, False: 7.50k]
  ------------------
  207|      0|        return nullptr;
  208|      0|    }
  209|       |    // Skip nameIndex names.
  210|  7.50k|    for(; nameIndex>0; --nameIndex) {
  ------------------
  |  Branch (210:11): [True: 0, False: 7.50k]
  ------------------
  211|      0|        nameGroup=uprv_strchr(nameGroup, 0)+1;
  ------------------
  |  |   40|      0|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  212|      0|    }
  213|  7.50k|    if(*nameGroup==0) {
  ------------------
  |  Branch (213:8): [True: 0, False: 7.50k]
  ------------------
  214|      0|        return nullptr;  // no name (Property[Value]Aliases.txt has "n/a")
  215|      0|    }
  216|  7.50k|    return nameGroup;
  217|  7.50k|}
_ZN6icu_7812PropNameData20getPropertyValueNameEiii:
  247|  7.50k|const char *PropNameData::getPropertyValueName(int32_t property, int32_t value, int32_t nameChoice) {
  248|  7.50k|    int32_t valueMapIndex=findProperty(property);
  249|  7.50k|    if(valueMapIndex==0) {
  ------------------
  |  Branch (249:8): [True: 0, False: 7.50k]
  ------------------
  250|      0|        return nullptr;  // Not a known property.
  251|      0|    }
  252|  7.50k|    int32_t nameGroupOffset=findPropertyValueNameGroup(valueMaps[valueMapIndex+1], value);
  253|  7.50k|    if(nameGroupOffset==0) {
  ------------------
  |  Branch (253:8): [True: 0, False: 7.50k]
  ------------------
  254|      0|        return nullptr;
  255|      0|    }
  256|  7.50k|    return getName(nameGroups+nameGroupOffset, nameChoice);
  257|  7.50k|}
u_getPropertyValueName_78:
  309|  7.50k|                       UPropertyNameChoice nameChoice) UPRV_NO_SANITIZE_UNDEFINED {
  310|       |    // The nameChoice is really an integer with a couple of named constants.
  311|       |    // Unicode allows for names other than short and long ones.
  312|       |    // If present, these will be returned for U_LONG_PROPERTY_NAME + i, where i=1, 2,...
  313|  7.50k|    U_NAMESPACE_USE
  ------------------
  |  |  112|  7.50k|#   define U_NAMESPACE_USE using namespace U_ICU_NAMESPACE;
  ------------------
  314|  7.50k|    return PropNameData::getPropertyValueName(property, value, nameChoice);
  315|  7.50k|}
uscript_getShortName_78:
  331|  7.50k|uscript_getShortName(UScriptCode scriptCode){
  332|  7.50k|    return u_getPropertyValueName(UCHAR_SCRIPT, scriptCode,
  ------------------
  |  |  286|  7.50k|#define u_getPropertyValueName U_ICU_ENTRY_POINT_RENAME(u_getPropertyValueName)
  |  |  ------------------
  |  |  |  |  123|  7.50k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.50k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.50k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  333|  7.50k|                                  U_SHORT_PROPERTY_NAME);
  334|  7.50k|}

uprv_getUTCtime_78:
  296|  7.05k|{
  297|       |#if defined(U_DEBUG_FAKETIME)
  298|       |    return getUTCtime_fake(); /* Hook for overriding the clock */
  299|       |#else
  300|  7.05k|    return uprv_getRawUTCtime();
  ------------------
  |  | 1510|  7.05k|#define uprv_getRawUTCtime U_ICU_ENTRY_POINT_RENAME(uprv_getRawUTCtime)
  |  |  ------------------
  |  |  |  |  123|  7.05k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.05k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.05k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  301|  7.05k|#endif
  302|  7.05k|}
uprv_getRawUTCtime_78:
  307|  7.05k|{
  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|  7.05k|#if HAVE_GETTIMEOFDAY
  316|  7.05k|    struct timeval posixTime;
  317|  7.05k|    gettimeofday(&posixTime, nullptr);
  318|  7.05k|    return (UDate)(((int64_t)posixTime.tv_sec * U_MILLIS_PER_SECOND) + (posixTime.tv_usec/1000));
  ------------------
  |  |  221|  7.05k|#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|  7.05k|#endif
  326|  7.05k|}
uprv_isNaN_78:
  340|  7.05k|{
  341|  7.05k|#if IEEE_754
  342|  7.05k|    BitPatternConversion convertedNumber;
  343|  7.05k|    convertedNumber.d64 = number;
  344|       |    /* Infinity is 0x7FF0000000000000U. Anything greater than that is a NaN */
  345|  7.05k|    return (convertedNumber.i64 & U_INT64_MAX) > gInf.i64;
  ------------------
  |  |  249|  7.05k|#     define U_INT64_MAX       ((int64_t)(INT64_C(9223372036854775807)))
  ------------------
  346|       |
  347|       |#elif U_PLATFORM == U_PF_OS390
  348|       |    uint32_t highBits = *(uint32_t*)u_topNBytesOfDouble(&number,
  349|       |                        sizeof(uint32_t));
  350|       |    uint32_t lowBits  = *(uint32_t*)u_bottomNBytesOfDouble(&number,
  351|       |                        sizeof(uint32_t));
  352|       |
  353|       |    return ((highBits & 0x7F080000L) == 0x7F080000L) &&
  354|       |      (lowBits == 0x00000000L);
  355|       |
  356|       |#else
  357|       |    /* If your platform doesn't support IEEE 754 but *does* have an NaN value,*/
  358|       |    /* you'll need to replace this default implementation with what's correct*/
  359|       |    /* for your platform.*/
  360|       |    return number != number;
  361|       |#endif
  362|  7.05k|}
uprv_add32_overflow_78:
  524|  31.0k|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|  31.0k|    auto a64 = static_cast<int64_t>(a);
  528|  31.0k|    auto b64 = static_cast<int64_t>(b);
  529|  31.0k|    int64_t res64 = a64 + b64;
  530|  31.0k|    *res = static_cast<int32_t>(res64);
  531|  31.0k|    return res64 != *res;
  532|  31.0k|}
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|  24.9k|{
 1356|  24.9k|  if(!path || !*path) {
  ------------------
  |  Branch (1356:6): [True: 0, False: 24.9k]
  |  Branch (1356:15): [True: 0, False: 24.9k]
  ------------------
 1357|      0|    return false;
 1358|      0|  }
 1359|       |
 1360|  24.9k|  if(*path == U_FILE_SEP_CHAR) {
  ------------------
  |  |  130|  24.9k|#   define U_FILE_SEP_CHAR '/'
  ------------------
  |  Branch (1360:6): [True: 0, False: 24.9k]
  ------------------
 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|  24.9k|  return false;
 1379|  24.9k|}
u_getDataDirectory_78:
 1499|  53.8k|u_getDataDirectory() {
 1500|  53.8k|    umtx_initOnce(gDataDirInitOnce, &dataDirectoryInitFn);
 1501|  53.8k|    return gDataDirectory;
 1502|  53.8k|}
u_getTimeZoneFilesDirectory_78:
 1575|      2|u_getTimeZoneFilesDirectory(UErrorCode *status) {
 1576|      2|    umtx_initOnce(gTimeZoneFilesInitOnce, &TimeZoneDataDirInitFn, *status);
  ------------------
  |  |  122|      2|#define gTimeZoneFilesInitOnce U_ICU_ENTRY_POINT_RENAME(gTimeZoneFilesInitOnce)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1577|      2|    return U_SUCCESS(*status) ? gTimeZoneFilesDirectory->data() : "";
  ------------------
  |  Branch (1577:12): [True: 2, False: 0]
  ------------------
 1578|      2|}
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|   663k|ResourceValue::~ResourceValue() {}
_ZN6icu_7812ResourceSinkD2Ev:
   20|   107k|ResourceSink::~ResourceSink() {}

_ZN6icu_7812ResourceSinkC2Ev:
  266|   107k|    ResourceSink() {}
_ZNK6icu_7813ResourceValue16getUnicodeStringER10UErrorCode:
  141|  2.62M|    inline UnicodeString getUnicodeString(UErrorCode &errorCode) const {
  142|  2.62M|        int32_t len = 0;
  143|  2.62M|        const char16_t *r = getString(len, errorCode);
  144|  2.62M|        return UnicodeString(true, r, len);
  145|  2.62M|    }
_ZNK6icu_7813ResourceArray7getSizeEv:
   59|    265|    int32_t getSize() const { return length; }
_ZN6icu_7813ResourceArrayC2Ev:
   48|      1|    ResourceArray() : items16(nullptr), items32(nullptr), length(0) {}
_ZN6icu_7813ResourceArrayC2EPKtPKjiRKNS_14ResourceTracerE:
   53|    266|            items16(i16), items32(i32), length(len),
   54|    266|            fTraceInfo(traceInfo) {}
_ZN6icu_7813ResourceTableC2EPKtPKiS2_PKjiRKNS_14ResourceTracerE:
   89|  1.72M|            keys16(k16), keys32(k32), items16(i16), items32(i32), length(len),
   90|  1.72M|            fTraceInfo(traceInfo) {}
_ZNK6icu_7813ResourceTable7getSizeEv:
   95|      2|    int32_t getSize() const { return length; }
_ZN6icu_7813ResourceValueC2Ev:
  254|   663k|    ResourceValue() {}

_ZN6icu_7814ResourceTracerC2Ev:
  116|   663k|    ResourceTracer() {}
_ZN6icu_7814ResourceTracerC2EPKv:
  118|  4.82M|    ResourceTracer(const void*) {}
_ZN6icu_7814ResourceTracerC2EPKvPKc:
  120|  48.0k|    ResourceTracer(const void*, const char*) {}
_ZN6icu_7814ResourceTracerC2EPKvi:
  122|  71.0k|    ResourceTracer(const void*, int32_t) {}
_ZN6icu_7814ResourceTracerC2ERKS0_PKc:
  124|  4.74M|    ResourceTracer(const ResourceTracer&, const char*) {}
_ZN6icu_7814ResourceTracerC2ERKS0_i:
  126|  1.45k|    ResourceTracer(const ResourceTracer&, int32_t) {}
_ZNK6icu_7814ResourceTracer5traceEPKc:
  128|  4.54M|    void trace(const char*) const {}
_ZNK6icu_7814ResourceTracer9traceOpenEv:
  130|   352k|    void traceOpen() const {}
_ZNK6icu_7814ResourceTracer10maybeTraceEPKc:
  132|   951k|    void maybeTrace(const char*) const {}
_ZN6icu_7810FileTracer9traceOpenEPKcS2_S2_:
  140|  53.8k|    static void traceOpen(const char*, const char*, const char*) {}

_ZN6icu_7812SharedObjectD2Ev:
   18|  6.16k|SharedObject::~SharedObject() {}
_ZNK6icu_7812SharedObject6addRefEv:
   23|  20.6k|SharedObject::addRef() const {
   24|  20.6k|    umtx_atomic_inc(&hardRefCount);
   25|  20.6k|}
_ZNK6icu_7812SharedObject9removeRefEv:
   36|  27.0k|SharedObject::removeRef() const {
   37|  27.0k|    const UnifiedCacheBase *cache = this->cachePtr;
   38|  27.0k|    int32_t updatedRefCount = umtx_atomic_dec(&hardRefCount);
   39|  27.0k|    U_ASSERT(updatedRefCount >= 0);
  ------------------
  |  |   35|  27.0k|#   define U_ASSERT(exp) (void)0
  ------------------
   40|  27.0k|    if (updatedRefCount == 0) {
  ------------------
  |  Branch (40:9): [True: 13.5k, False: 13.5k]
  ------------------
   41|  13.5k|        if (cache) {
  ------------------
  |  Branch (41:13): [True: 13.5k, False: 0]
  ------------------
   42|  13.5k|            cache->handleUnreferencedObject();
   43|  13.5k|        } else {
   44|      0|            delete this;
   45|      0|        }
   46|  13.5k|    }
   47|  27.0k|}
_ZNK6icu_7812SharedObject11getRefCountEv:
   51|  12.3k|SharedObject::getRefCount() const {
   52|  12.3k|    return umtx_loadAcquire(hardRefCount);
   53|  12.3k|}

_ZN6icu_7812SharedObjectC2Ev:
   58|  7.16k|            softRefCount(0),
   59|  7.16k|            hardRefCount(0),
   60|  7.16k|            cachePtr(nullptr) {}
_ZN6icu_7812SharedObject7copyPtrINS_14SharedCalendarEEEvPKT_RS5_:
  144|  13.5k|    static void copyPtr(const T *src, const T *&dest) {
  145|  13.5k|        if(src != dest) {
  ------------------
  |  Branch (145:12): [True: 13.5k, False: 0]
  ------------------
  146|  13.5k|            if(dest != nullptr) { dest->removeRef(); }
  ------------------
  |  Branch (146:16): [True: 0, False: 13.5k]
  ------------------
  147|  13.5k|            dest = src;
  148|  13.5k|            if(src != nullptr) { src->addRef(); }
  ------------------
  |  Branch (148:16): [True: 13.5k, False: 0]
  ------------------
  149|  13.5k|        }
  150|  13.5k|    }
_ZN6icu_7812SharedObject8clearPtrINS_14SharedCalendarEEEvRPKT_:
  156|  13.5k|    static void clearPtr(const T *&ptr) {
  157|  13.5k|        if (ptr != nullptr) {
  ------------------
  |  Branch (157:13): [True: 13.5k, False: 0]
  ------------------
  158|  13.5k|            ptr->removeRef();
  159|  13.5k|            ptr = nullptr;
  160|  13.5k|        }
  161|  13.5k|    }
_ZN6icu_7816UnifiedCacheBaseC2Ev:
   30|      1|    UnifiedCacheBase() { }
_ZNK6icu_7812SharedObject16noHardReferencesEv:
   96|  12.3k|    inline UBool noHardReferences() const { return getRefCount() == 0; }

_ZN6icu_7815SimpleFormatterD2Ev:
   61|    598|SimpleFormatter::~SimpleFormatter() {}
_ZN6icu_7815SimpleFormatter27applyPatternMinMaxArgumentsERKNS_13UnicodeStringEiiR10UErrorCode:
   66|    598|        UErrorCode &errorCode) {
   67|    598|    if (U_FAILURE(errorCode)) {
  ------------------
  |  Branch (67:9): [True: 0, False: 598]
  ------------------
   68|      0|        return false;
   69|      0|    }
   70|       |    // Parse consistent with MessagePattern, but
   71|       |    // - support only simple numbered arguments
   72|       |    // - build a simple binary structure into the result string
   73|    598|    const char16_t *patternBuffer = pattern.getBuffer();
   74|    598|    int32_t patternLength = pattern.length();
   75|       |    // Reserve the first char for the number of arguments.
   76|    598|    compiledPattern.setTo(static_cast<char16_t>(0));
   77|    598|    int32_t textLength = 0;
   78|    598|    int32_t maxArg = -1;
   79|    598|    UBool inQuote = false;
   80|  3.52k|    for (int32_t i = 0; i < patternLength;) {
  ------------------
  |  Branch (80:25): [True: 2.92k, False: 598]
  ------------------
   81|  2.92k|        char16_t c = patternBuffer[i++];
   82|  2.92k|        if (c == APOS) {
  ------------------
  |  Branch (82:13): [True: 32, False: 2.89k]
  ------------------
   83|     32|            if (i < patternLength && (c = patternBuffer[i]) == APOS) {
  ------------------
  |  Branch (83:17): [True: 31, False: 1]
  |  Branch (83:38): [True: 0, False: 31]
  ------------------
   84|       |                // double apostrophe, skip the second one
   85|      0|                ++i;
   86|     32|            } else if (inQuote) {
  ------------------
  |  Branch (86:24): [True: 0, False: 32]
  ------------------
   87|       |                // skip the quote-ending apostrophe
   88|      0|                inQuote = false;
   89|      0|                continue;
   90|     32|            } else if (c == OPEN_BRACE || c == CLOSE_BRACE) {
  ------------------
  |  Branch (90:24): [True: 0, False: 32]
  |  Branch (90:43): [True: 0, False: 32]
  ------------------
   91|       |                // Skip the quote-starting apostrophe, find the end of the quoted literal text.
   92|      0|                ++i;
   93|      0|                inQuote = true;
   94|     32|            } else {
   95|       |                // The apostrophe is part of literal text.
   96|     32|                c = APOS;
   97|     32|            }
   98|  2.89k|        } else if (!inQuote && c == OPEN_BRACE) {
  ------------------
  |  Branch (98:20): [True: 2.89k, False: 0]
  |  Branch (98:32): [True: 1.36k, False: 1.52k]
  ------------------
   99|  1.36k|            if (textLength > 0) {
  ------------------
  |  Branch (99:17): [True: 764, False: 602]
  ------------------
  100|    764|                compiledPattern.setCharAt(compiledPattern.length() - textLength - 1,
  101|    764|                                          static_cast<char16_t>(ARG_NUM_LIMIT + textLength));
  102|    764|                textLength = 0;
  103|    764|            }
  104|  1.36k|            int32_t argNumber;
  105|  1.36k|            if ((i + 1) < patternLength &&
  ------------------
  |  Branch (105:17): [True: 1.36k, False: 0]
  ------------------
  106|  1.36k|                    0 <= (argNumber = patternBuffer[i] - DIGIT_ZERO) && argNumber <= 9 &&
  ------------------
  |  Branch (106:21): [True: 1.36k, False: 0]
  |  Branch (106:73): [True: 1.36k, False: 0]
  ------------------
  107|  1.36k|                    patternBuffer[i + 1] == CLOSE_BRACE) {
  ------------------
  |  Branch (107:21): [True: 1.36k, False: 0]
  ------------------
  108|  1.36k|                i += 2;
  109|  1.36k|            } else {
  110|       |                // Multi-digit argument number (no leading zero) or syntax error.
  111|       |                // MessagePattern permits PatternProps.skipWhiteSpace(pattern, index)
  112|       |                // around the number, but this class does not.
  113|      0|                argNumber = -1;
  114|      0|                if (i < patternLength && DIGIT_ONE <= (c = patternBuffer[i++]) && c <= DIGIT_NINE) {
  ------------------
  |  Branch (114:21): [True: 0, False: 0]
  |  Branch (114:42): [True: 0, False: 0]
  |  Branch (114:83): [True: 0, False: 0]
  ------------------
  115|      0|                    argNumber = c - DIGIT_ZERO;
  116|      0|                    while (i < patternLength &&
  ------------------
  |  Branch (116:28): [True: 0, False: 0]
  ------------------
  117|      0|                            DIGIT_ZERO <= (c = patternBuffer[i++]) && c <= DIGIT_NINE) {
  ------------------
  |  Branch (117:29): [True: 0, False: 0]
  |  Branch (117:71): [True: 0, False: 0]
  ------------------
  118|      0|                        argNumber = argNumber * 10 + (c - DIGIT_ZERO);
  119|      0|                        if (argNumber >= ARG_NUM_LIMIT) {
  ------------------
  |  Branch (119:29): [True: 0, False: 0]
  ------------------
  120|      0|                            break;
  121|      0|                        }
  122|      0|                    }
  123|      0|                }
  124|      0|                if (argNumber < 0 || c != CLOSE_BRACE) {
  ------------------
  |  Branch (124:21): [True: 0, False: 0]
  |  Branch (124:38): [True: 0, False: 0]
  ------------------
  125|      0|                    errorCode = U_ILLEGAL_ARGUMENT_ERROR;
  126|      0|                    return false;
  127|      0|                }
  128|      0|            }
  129|  1.36k|            if (argNumber > maxArg) {
  ------------------
  |  Branch (129:17): [True: 885, False: 481]
  ------------------
  130|    885|                maxArg = argNumber;
  131|    885|            }
  132|  1.36k|            compiledPattern.append(static_cast<char16_t>(argNumber));
  133|  1.36k|            continue;
  134|  1.36k|        }  // else: c is part of literal text
  135|       |        // Append c and track the literal-text segment length.
  136|  1.56k|        if (textLength == 0) {
  ------------------
  |  Branch (136:13): [True: 944, False: 616]
  ------------------
  137|       |            // Reserve a char for the length of a new text segment, preset the maximum length.
  138|    944|            compiledPattern.append(SEGMENT_LENGTH_PLACEHOLDER_CHAR);
  139|    944|        }
  140|  1.56k|        compiledPattern.append(c);
  141|  1.56k|        if (++textLength == MAX_SEGMENT_LENGTH) {
  ------------------
  |  Branch (141:13): [True: 0, False: 1.56k]
  ------------------
  142|      0|            textLength = 0;
  143|      0|        }
  144|  1.56k|    }
  145|    598|    if (textLength > 0) {
  ------------------
  |  Branch (145:9): [True: 180, False: 418]
  ------------------
  146|    180|        compiledPattern.setCharAt(compiledPattern.length() - textLength - 1,
  147|    180|                                  static_cast<char16_t>(ARG_NUM_LIMIT + textLength));
  148|    180|    }
  149|    598|    int32_t argCount = maxArg + 1;
  150|    598|    if (argCount < min || max < argCount) {
  ------------------
  |  Branch (150:9): [True: 0, False: 598]
  |  Branch (150:27): [True: 0, False: 598]
  ------------------
  151|      0|        errorCode = U_ILLEGAL_ARGUMENT_ERROR;
  152|      0|        return false;
  153|      0|    }
  154|    598|    compiledPattern.setCharAt(0, static_cast<char16_t>(argCount));
  155|    598|    return true;
  156|    598|}
_ZNK6icu_7815SimpleFormatter6formatERKNS_13UnicodeStringES3_RS1_R10UErrorCode:
  168|    281|        UnicodeString &appendTo, UErrorCode &errorCode) const {
  169|    281|    const UnicodeString *values[] = { &value0, &value1 };
  170|    281|    return formatAndAppend(values, 2, appendTo, nullptr, 0, errorCode);
  171|    281|}
_ZNK6icu_7815SimpleFormatter15formatAndAppendEPKPKNS_13UnicodeStringEiRS1_PiiR10UErrorCode:
  185|    281|        int32_t *offsets, int32_t offsetsLength, UErrorCode &errorCode) const {
  186|    281|    if (U_FAILURE(errorCode)) {
  ------------------
  |  Branch (186:9): [True: 0, False: 281]
  ------------------
  187|      0|        return appendTo;
  188|      0|    }
  189|    281|    if (isInvalidArray(values, valuesLength) || isInvalidArray(offsets, offsetsLength) ||
  ------------------
  |  Branch (189:9): [True: 0, False: 281]
  |  Branch (189:49): [True: 0, False: 281]
  ------------------
  190|    281|            valuesLength < getArgumentLimit()) {
  ------------------
  |  Branch (190:13): [True: 0, False: 281]
  ------------------
  191|      0|        errorCode = U_ILLEGAL_ARGUMENT_ERROR;
  192|      0|        return appendTo;
  193|      0|    }
  194|    281|    return format(compiledPattern.getBuffer(), compiledPattern.length(), values,
  195|    281|                  appendTo, nullptr, true,
  196|    281|                  offsets, offsetsLength, errorCode);
  197|    281|}
_ZNK6icu_7815SimpleFormatter16formatAndReplaceEPKPKNS_13UnicodeStringEiRS1_PiiR10UErrorCode:
  202|    317|        int32_t *offsets, int32_t offsetsLength, UErrorCode &errorCode) const {
  203|    317|    if (U_FAILURE(errorCode)) {
  ------------------
  |  Branch (203:9): [True: 0, False: 317]
  ------------------
  204|      0|        return result;
  205|      0|    }
  206|    317|    if (isInvalidArray(values, valuesLength) || isInvalidArray(offsets, offsetsLength)) {
  ------------------
  |  Branch (206:9): [True: 0, False: 317]
  |  Branch (206:49): [True: 0, False: 317]
  ------------------
  207|      0|        errorCode = U_ILLEGAL_ARGUMENT_ERROR;
  208|      0|        return result;
  209|      0|    }
  210|    317|    const char16_t *cp = compiledPattern.getBuffer();
  211|    317|    int32_t cpLength = compiledPattern.length();
  212|    317|    if (valuesLength < getArgumentLimit(cp, cpLength)) {
  ------------------
  |  Branch (212:9): [True: 0, False: 317]
  ------------------
  213|      0|        errorCode = U_ILLEGAL_ARGUMENT_ERROR;
  214|      0|        return result;
  215|      0|    }
  216|       |
  217|       |    // If the pattern starts with an argument whose value is the same object
  218|       |    // as the result, then we keep the result contents and append to it.
  219|       |    // Otherwise we replace its contents.
  220|    317|    int32_t firstArg = -1;
  221|       |    // If any non-initial argument value is the same object as the result,
  222|       |    // then we first copy its contents and use that instead while formatting.
  223|    317|    UnicodeString resultCopy;
  224|    317|    if (getArgumentLimit(cp, cpLength) > 0) {
  ------------------
  |  Branch (224:9): [True: 317, False: 0]
  ------------------
  225|  1.77k|        for (int32_t i = 1; i < cpLength;) {
  ------------------
  |  Branch (225:29): [True: 1.45k, False: 317]
  ------------------
  226|  1.45k|            int32_t n = cp[i++];
  227|  1.45k|            if (n < ARG_NUM_LIMIT) {
  ------------------
  |  Branch (227:17): [True: 804, False: 655]
  ------------------
  228|    804|                if (values[n] == &result) {
  ------------------
  |  Branch (228:21): [True: 317, False: 487]
  ------------------
  229|    317|                    if (i == 2) {
  ------------------
  |  Branch (229:25): [True: 285, False: 32]
  ------------------
  230|    285|                        firstArg = n;
  231|    285|                    } else if (resultCopy.isEmpty() && !result.isEmpty()) {
  ------------------
  |  Branch (231:32): [True: 32, False: 0]
  |  Branch (231:56): [True: 31, False: 1]
  ------------------
  232|     31|                        resultCopy = result;
  233|     31|                    }
  234|    317|                }
  235|    804|            } else {
  236|    655|                i += n - ARG_NUM_LIMIT;
  237|    655|            }
  238|  1.45k|        }
  239|    317|    }
  240|    317|    if (firstArg < 0) {
  ------------------
  |  Branch (240:9): [True: 32, False: 285]
  ------------------
  241|     32|        result.remove();
  242|     32|    }
  243|    317|    return format(cp, cpLength, values,
  244|    317|                  result, &resultCopy, false,
  245|    317|                  offsets, offsetsLength, errorCode);
  246|    317|}
_ZN6icu_7815SimpleFormatter6formatEPKDsiPKPKNS_13UnicodeStringERS3_S5_aPiiR10UErrorCode:
  279|    598|        UErrorCode &errorCode) {
  280|    598|    if (U_FAILURE(errorCode)) {
  ------------------
  |  Branch (280:9): [True: 0, False: 598]
  ------------------
  281|      0|        return result;
  282|      0|    }
  283|    598|    for (int32_t i = 0; i < offsetsLength; i++) {
  ------------------
  |  Branch (283:25): [True: 0, False: 598]
  ------------------
  284|      0|        offsets[i] = -1;
  285|      0|    }
  286|  2.90k|    for (int32_t i = 1; i < compiledPatternLength;) {
  ------------------
  |  Branch (286:25): [True: 2.31k, False: 598]
  ------------------
  287|  2.31k|        int32_t n = compiledPattern[i++];
  288|  2.31k|        if (n < ARG_NUM_LIMIT) {
  ------------------
  |  Branch (288:13): [True: 1.36k, False: 944]
  ------------------
  289|  1.36k|            const UnicodeString *value = values[n];
  290|  1.36k|            if (value == nullptr) {
  ------------------
  |  Branch (290:17): [True: 0, False: 1.36k]
  ------------------
  291|      0|                errorCode = U_ILLEGAL_ARGUMENT_ERROR;
  292|      0|                return result;
  293|      0|            }
  294|  1.36k|            if (value == &result) {
  ------------------
  |  Branch (294:17): [True: 317, False: 1.04k]
  ------------------
  295|    317|                if (forbidResultAsValue) {
  ------------------
  |  Branch (295:21): [True: 0, False: 317]
  ------------------
  296|      0|                    errorCode = U_ILLEGAL_ARGUMENT_ERROR;
  297|      0|                    return result;
  298|      0|                }
  299|    317|                if (i == 2) {
  ------------------
  |  Branch (299:21): [True: 285, False: 32]
  ------------------
  300|       |                    // We are appending to result which is also the first value object.
  301|    285|                    if (n < offsetsLength) {
  ------------------
  |  Branch (301:25): [True: 0, False: 285]
  ------------------
  302|      0|                        offsets[n] = 0;
  303|      0|                    }
  304|    285|                } else {
  305|     32|                    if (n < offsetsLength) {
  ------------------
  |  Branch (305:25): [True: 0, False: 32]
  ------------------
  306|      0|                        offsets[n] = result.length();
  307|      0|                    }
  308|     32|                    result.append(*resultCopy);
  309|     32|                }
  310|  1.04k|            } else {
  311|  1.04k|                if (n < offsetsLength) {
  ------------------
  |  Branch (311:21): [True: 0, False: 1.04k]
  ------------------
  312|      0|                    offsets[n] = result.length();
  313|      0|                }
  314|  1.04k|                result.append(*value);
  315|  1.04k|            }
  316|  1.36k|        } else {
  317|    944|            int32_t length = n - ARG_NUM_LIMIT;
  318|    944|            result.append(compiledPattern + i, length);
  319|    944|            i += length;
  320|    944|        }
  321|  2.31k|    }
  322|    598|    return result;
  323|    598|}
simpleformatter.cpp:_ZN6icu_7812_GLOBAL__N_114isInvalidArrayEPKvi:
   47|  1.19k|inline UBool isInvalidArray(const void *array, int32_t length) {
   48|  1.19k|   return (length < 0 || (array == nullptr && length != 0));
  ------------------
  |  Branch (48:12): [True: 0, False: 1.19k]
  |  Branch (48:27): [True: 598, False: 598]
  |  Branch (48:47): [True: 0, False: 598]
  ------------------
   49|  1.19k|}

_ZN6icu_7811StringPieceC2EPKc:
   19|  3.93M|    : ptr_(str), length_((str == nullptr) ? 0 : static_cast<int32_t>(uprv_strlen(str))) { }
  ------------------
  |  |   37|  3.93M|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  3.93M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (19:26): [True: 0, False: 3.93M]
  ------------------
_ZN6icu_7811StringPiece7compareES0_:
   73|  99.9k|int32_t StringPiece::compare(StringPiece other) {
   74|  99.9k|  int32_t i = 0;
   75|   101k|  for (; i < length(); i++) {
  ------------------
  |  Branch (75:10): [True: 34.0k, False: 67.2k]
  ------------------
   76|  34.0k|    if (i == other.length()) {
  ------------------
  |  Branch (76:9): [True: 112, False: 33.9k]
  ------------------
   77|       |      // this is longer
   78|    112|      return 1;
   79|    112|    }
   80|  33.9k|    char a = data()[i];
   81|  33.9k|    char b = other.data()[i];
   82|  33.9k|    if (a < b) {
  ------------------
  |  Branch (82:9): [True: 28.9k, False: 4.97k]
  ------------------
   83|  28.9k|      return -1;
   84|  28.9k|    } else if (a > b) {
  ------------------
  |  Branch (84:16): [True: 3.60k, False: 1.36k]
  ------------------
   85|  3.60k|      return 1;
   86|  3.60k|    }
   87|  33.9k|  }
   88|  67.2k|  if (i < other.length()) {
  ------------------
  |  Branch (88:7): [True: 67.2k, False: 73]
  ------------------
   89|       |    // other is longer
   90|  67.2k|    return -1;
   91|  67.2k|  }
   92|     73|  return 0;
   93|  67.2k|}

uprv_stableBinarySearch_78:
   76|  26.2k|                        UComparator *cmp, const void *context) {
   77|  26.2k|    int32_t start=0;
   78|  26.2k|    UBool found=false;
   79|       |
   80|       |    /* Binary search until we get down to a tiny sub-array. */
   81|  26.2k|    while((limit-start)>=MIN_QSORT) {
  ------------------
  |  Branch (81:11): [True: 0, False: 26.2k]
  ------------------
   82|      0|        int32_t i=(start+limit)/2;
   83|      0|        int32_t diff=cmp(context, item, array+i*itemSize);
   84|      0|        if(diff==0) {
  ------------------
  |  Branch (84:12): [True: 0, False: 0]
  ------------------
   85|       |            /*
   86|       |             * Found the item. We look for the *last* occurrence of such
   87|       |             * an item, for stable sorting.
   88|       |             * If we knew that there will be only few equal items,
   89|       |             * we could break now and enter the linear search.
   90|       |             * However, if there are many equal items, then it should be
   91|       |             * faster to continue with the binary search.
   92|       |             * It seems likely that we either have all unique items
   93|       |             * (where found will never become true in the insertion sort)
   94|       |             * or potentially many duplicates.
   95|       |             */
   96|      0|            found=true;
   97|      0|            start=i+1;
   98|      0|        } else if(diff<0) {
  ------------------
  |  Branch (98:19): [True: 0, False: 0]
  ------------------
   99|      0|            limit=i;
  100|      0|        } else {
  101|      0|            start=i;
  102|      0|        }
  103|      0|    }
  104|       |
  105|       |    /* Linear search over the remaining tiny sub-array. */
  106|   106k|    while(start<limit) {
  ------------------
  |  Branch (106:11): [True: 81.3k, False: 24.8k]
  ------------------
  107|  81.3k|        int32_t diff=cmp(context, item, array+start*itemSize);
  108|  81.3k|        if(diff==0) {
  ------------------
  |  Branch (108:12): [True: 0, False: 81.3k]
  ------------------
  109|      0|            found=true;
  110|  81.3k|        } else if(diff<0) {
  ------------------
  |  Branch (110:19): [True: 1.34k, False: 79.9k]
  ------------------
  111|  1.34k|            break;
  112|  1.34k|        }
  113|  79.9k|        ++start;
  114|  79.9k|    }
  115|  26.2k|    return found ? (start-1) : ~start;
  ------------------
  |  Branch (115:12): [True: 0, False: 26.2k]
  ------------------
  116|  26.2k|}
uprv_sortArray_78:
  258|  26.6k|               UBool sortStable, UErrorCode *pErrorCode) {
  259|  26.6k|    if(pErrorCode==nullptr || U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (259:8): [True: 0, False: 26.6k]
  |  Branch (259:31): [True: 0, False: 26.6k]
  ------------------
  260|      0|        return;
  261|      0|    }
  262|  26.6k|    if((length>0 && array==nullptr) || length<0 || itemSize<=0 || cmp==nullptr) {
  ------------------
  |  Branch (262:9): [True: 25.9k, False: 716]
  |  Branch (262:21): [True: 0, False: 25.9k]
  |  Branch (262:40): [True: 0, False: 26.6k]
  |  Branch (262:52): [True: 0, False: 26.6k]
  |  Branch (262:67): [True: 0, False: 26.6k]
  ------------------
  263|      0|        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
  264|      0|        return;
  265|      0|    }
  266|       |
  267|  26.6k|    if(length<=1) {
  ------------------
  |  Branch (267:8): [True: 21.6k, False: 4.95k]
  ------------------
  268|  21.6k|        return;
  269|  21.6k|    } else if(length<MIN_QSORT || sortStable) {
  ------------------
  |  Branch (269:15): [True: 3.48k, False: 1.47k]
  |  Branch (269:35): [True: 0, False: 1.47k]
  ------------------
  270|  3.48k|        insertionSort((char *)array, length, itemSize, cmp, context, pErrorCode);
  271|  3.48k|    } else {
  272|  1.47k|        quickSort((char *)array, length, itemSize, cmp, context, pErrorCode);
  273|  1.47k|    }
  274|  26.6k|}
uarrsort.cpp:_ZL13insertionSortPciiPFiPKvS1_S1_ES1_P10UErrorCode:
  142|  3.48k|              UComparator *cmp, const void *context, UErrorCode *pErrorCode) {
  143|       |
  144|  3.48k|    icu::MaybeStackArray<std::max_align_t, sizeInMaxAlignTs(STACK_ITEM_SIZE)> v;
  145|  3.48k|    if (sizeInMaxAlignTs(itemSize) > v.getCapacity() &&
  ------------------
  |  Branch (145:9): [True: 0, False: 3.48k]
  ------------------
  146|  3.48k|            v.resize(sizeInMaxAlignTs(itemSize)) == nullptr) {
  ------------------
  |  Branch (146:13): [True: 0, False: 0]
  ------------------
  147|      0|        *pErrorCode = U_MEMORY_ALLOCATION_ERROR;
  148|      0|        return;
  149|      0|    }
  150|       |
  151|  3.48k|    doInsertionSort(array, length, itemSize, cmp, context, v.getAlias());
  152|  3.48k|}
uarrsort.cpp:_ZL16sizeInMaxAlignTsi:
   39|  6.42k|static constexpr int32_t sizeInMaxAlignTs(int32_t sizeInBytes) {
   40|  6.42k|    return (sizeInBytes + sizeof(std::max_align_t) - 1) / sizeof(std::max_align_t);
   41|  6.42k|}
uarrsort.cpp:_ZL15doInsertionSortPciiPFiPKvS1_S1_ES1_Pv:
  120|  6.58k|                UComparator *cmp, const void *context, void *pv) {
  121|  6.58k|    int32_t j;
  122|       |
  123|  32.8k|    for(j=1; j<length; ++j) {
  ------------------
  |  Branch (123:14): [True: 26.2k, False: 6.58k]
  ------------------
  124|  26.2k|        char *item=array+j*itemSize;
  125|  26.2k|        int32_t insertionPoint=uprv_stableBinarySearch(array, j, item, itemSize, cmp, context);
  ------------------
  |  | 1539|  26.2k|#define uprv_stableBinarySearch U_ICU_ENTRY_POINT_RENAME(uprv_stableBinarySearch)
  |  |  ------------------
  |  |  |  |  123|  26.2k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  26.2k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  26.2k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  126|  26.2k|        if(insertionPoint<0) {
  ------------------
  |  Branch (126:12): [True: 26.2k, False: 0]
  ------------------
  127|  26.2k|            insertionPoint=~insertionPoint;
  128|  26.2k|        } else {
  129|      0|            ++insertionPoint;  /* one past the last equal item */
  130|      0|        }
  131|  26.2k|        if(insertionPoint<j) {
  ------------------
  |  Branch (131:12): [True: 1.34k, False: 24.8k]
  ------------------
  132|  1.34k|            char *dest=array+insertionPoint*itemSize;
  133|  1.34k|            uprv_memcpy(pv, item, itemSize);  /* v=array[j] */
  ------------------
  |  |   42|  1.34k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  1.34k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  1.34k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  1.34k|    _Pragma("clang diagnostic push") \
  |  |   45|  1.34k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  1.34k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.34k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  1.34k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.34k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  1.34k|    _Pragma("clang diagnostic pop") \
  |  |   49|  1.34k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  1.34k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  1.34k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  1.34k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  134|  1.34k|            uprv_memmove(dest+itemSize, dest, (j-insertionPoint)*(size_t)itemSize);
  ------------------
  |  |   51|  1.34k|#define uprv_memmove(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  1.34k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   52|  1.34k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   53|  1.34k|    _Pragma("clang diagnostic push") \
  |  |   54|  1.34k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   55|  1.34k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.34k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   56|  1.34k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.34k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   57|  1.34k|    _Pragma("clang diagnostic pop") \
  |  |   58|  1.34k|    U_STANDARD_CPP_NAMESPACE memmove(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  1.34k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   59|  1.34k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  1.34k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  135|  1.34k|            uprv_memcpy(dest, pv, itemSize);  /* array[insertionPoint]=v */
  ------------------
  |  |   42|  1.34k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  1.34k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  1.34k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  1.34k|    _Pragma("clang diagnostic push") \
  |  |   45|  1.34k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  1.34k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.34k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  1.34k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.34k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  1.34k|    _Pragma("clang diagnostic pop") \
  |  |   49|  1.34k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  1.34k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  1.34k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  1.34k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  136|  1.34k|        }
  137|  26.2k|    }
  138|  6.58k|}
uarrsort.cpp:_ZL9quickSortPciiPFiPKvS1_S1_ES1_P10UErrorCode:
  236|  1.47k|            UComparator *cmp, const void *context, UErrorCode *pErrorCode) {
  237|       |    /* allocate two intermediate item variables (x and w) */
  238|  1.47k|    icu::MaybeStackArray<std::max_align_t, sizeInMaxAlignTs(STACK_ITEM_SIZE) * 2> xw;
  239|  1.47k|    if(sizeInMaxAlignTs(itemSize)*2 > xw.getCapacity() &&
  ------------------
  |  Branch (239:8): [True: 0, False: 1.47k]
  ------------------
  240|  1.47k|            xw.resize(sizeInMaxAlignTs(itemSize) * 2) == nullptr) {
  ------------------
  |  Branch (240:13): [True: 0, False: 0]
  ------------------
  241|      0|        *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
  242|      0|        return;
  243|      0|    }
  244|       |
  245|  1.47k|    subQuickSort(array, 0, length, itemSize, cmp, context,
  246|  1.47k|                 xw.getAlias(), xw.getAlias() + sizeInMaxAlignTs(itemSize));
  247|  1.47k|}
uarrsort.cpp:_ZL12subQuickSortPciiiPFiPKvS1_S1_ES1_PvS4_:
  171|  3.09k|             void *px, void *pw) {
  172|  3.09k|    int32_t left, right;
  173|       |
  174|       |    /* start and left are inclusive, limit and right are exclusive */
  175|  4.78k|    do {
  176|  4.78k|        if((start+MIN_QSORT)>=limit) {
  ------------------
  |  Branch (176:12): [True: 3.09k, False: 1.68k]
  ------------------
  177|  3.09k|            doInsertionSort(array+start*itemSize, limit-start, itemSize, cmp, context, px);
  178|  3.09k|            break;
  179|  3.09k|        }
  180|       |
  181|  1.68k|        left=start;
  182|  1.68k|        right=limit;
  183|       |
  184|       |        /* x=array[middle] */
  185|  1.68k|        uprv_memcpy(px, array+(size_t)((start+limit)/2)*itemSize, itemSize);
  ------------------
  |  |   42|  1.68k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  1.68k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  1.68k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  1.68k|    _Pragma("clang diagnostic push") \
  |  |   45|  1.68k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  1.68k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.68k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  1.68k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.68k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  1.68k|    _Pragma("clang diagnostic pop") \
  |  |   49|  1.68k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  1.68k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  1.68k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  1.68k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  186|       |
  187|  2.30k|        do {
  188|  2.30k|            while(/* array[left]<x */
  189|  13.1k|                  cmp(context, array+left*itemSize, px)<0
  ------------------
  |  Branch (189:19): [True: 10.8k, False: 2.30k]
  ------------------
  190|  10.8k|            ) {
  191|  10.8k|                ++left;
  192|  10.8k|            }
  193|  2.30k|            while(/* x<array[right-1] */
  194|  12.5k|                  cmp(context, px, array+(right-1)*itemSize)<0
  ------------------
  |  Branch (194:19): [True: 10.2k, False: 2.30k]
  ------------------
  195|  10.2k|            ) {
  196|  10.2k|                --right;
  197|  10.2k|            }
  198|       |
  199|       |            /* swap array[left] and array[right-1] via w; ++left; --right */
  200|  2.30k|            if(left<right) {
  ------------------
  |  Branch (200:16): [True: 2.07k, False: 236]
  ------------------
  201|  2.07k|                --right;
  202|       |
  203|  2.07k|                if(left<right) {
  ------------------
  |  Branch (203:20): [True: 632, False: 1.44k]
  ------------------
  204|    632|                    uprv_memcpy(pw, array+(size_t)left*itemSize, itemSize);
  ------------------
  |  |   42|    632|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|    632|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|    632|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|    632|    _Pragma("clang diagnostic push") \
  |  |   45|    632|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|    632|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|    632|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|    632|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|    632|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|    632|    _Pragma("clang diagnostic pop") \
  |  |   49|    632|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|    632|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|    632|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|    632|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|    632|                    uprv_memcpy(array+(size_t)left*itemSize, array+(size_t)right*itemSize, itemSize);
  ------------------
  |  |   42|    632|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|    632|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|    632|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|    632|    _Pragma("clang diagnostic push") \
  |  |   45|    632|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|    632|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|    632|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|    632|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|    632|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|    632|    _Pragma("clang diagnostic pop") \
  |  |   49|    632|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|    632|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|    632|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|    632|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  206|    632|                    uprv_memcpy(array+(size_t)right*itemSize, pw, itemSize);
  ------------------
  |  |   42|    632|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|    632|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|    632|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|    632|    _Pragma("clang diagnostic push") \
  |  |   45|    632|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|    632|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|    632|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|    632|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|    632|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|    632|    _Pragma("clang diagnostic pop") \
  |  |   49|    632|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|    632|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|    632|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|    632|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  207|    632|                }
  208|       |
  209|  2.07k|                ++left;
  210|  2.07k|            }
  211|  2.30k|        } while(left<right);
  ------------------
  |  Branch (211:17): [True: 624, False: 1.68k]
  ------------------
  212|       |
  213|       |        /* sort sub-arrays */
  214|  1.68k|        if((right-start)<(limit-left)) {
  ------------------
  |  Branch (214:12): [True: 151, False: 1.53k]
  ------------------
  215|       |            /* sort [start..right[ */
  216|    151|            if(start<(right-1)) {
  ------------------
  |  Branch (216:16): [True: 120, False: 31]
  ------------------
  217|    120|                subQuickSort(array, start, right, itemSize, cmp, context, px, pw);
  218|    120|            }
  219|       |
  220|       |            /* sort [left..limit[ */
  221|    151|            start=left;
  222|  1.53k|        } else {
  223|       |            /* sort [left..limit[ */
  224|  1.53k|            if(left<(limit-1)) {
  ------------------
  |  Branch (224:16): [True: 1.50k, False: 27]
  ------------------
  225|  1.50k|                subQuickSort(array, left, limit, itemSize, cmp, context, px, pw);
  226|  1.50k|            }
  227|       |
  228|       |            /* sort [start..right[ */
  229|  1.53k|            limit=right;
  230|  1.53k|        }
  231|  1.68k|    } while(start<(limit-1));
  ------------------
  |  Branch (231:13): [True: 1.68k, False: 0]
  ------------------
  232|  3.09k|}

ucase_toFullFolding_78:
 1540|    532|                    uint32_t options) {
 1541|       |    // The sign of the result has meaning, input must be non-negative so that it can be returned as is.
 1542|    532|    U_ASSERT(c >= 0);
  ------------------
  |  |   35|    532|#   define U_ASSERT(exp) (void)0
  ------------------
 1543|    532|    UChar32 result=c;
 1544|       |    // Reset the output pointer in case it was uninitialized.
 1545|    532|    *pString=nullptr;
 1546|    532|    uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c);
  ------------------
  |  |  360|    532|#define UTRIE2_GET16(trie, c) _UTRIE2_GET((trie), index, (trie)->indexLength, (c))
  |  |  ------------------
  |  |  |  |  871|    532|    (trie)->data[_UTRIE2_INDEX_FROM_CP(trie, asciiOffset, c)]
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|    532|    ((uint32_t)(c)<0xd800 ? \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (845:6): [True: 532, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  846|    532|        _UTRIE2_INDEX_RAW(0, (trie)->index, c) : \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  815|    532|    (((int32_t)((trieIndex)[(offset)+((c)>>UTRIE2_SHIFT_2)]) \
  |  |  |  |  |  |  |  |  816|    532|    <<UTRIE2_INDEX_SHIFT)+ \
  |  |  |  |  |  |  |  |  817|    532|    ((c)&UTRIE2_DATA_MASK))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  847|    532|        (uint32_t)(c)<=0xffff ? \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (847:9): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  848|      0|            _UTRIE2_INDEX_RAW( \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  815|      0|    (((int32_t)((trieIndex)[(offset)+((c)>>UTRIE2_SHIFT_2)]) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (815:30): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  816|      0|    <<UTRIE2_INDEX_SHIFT)+ \
  |  |  |  |  |  |  |  |  817|      0|    ((c)&UTRIE2_DATA_MASK))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  849|      0|                (c)<=0xdbff ? UTRIE2_LSCP_INDEX_2_OFFSET-(0xd800>>UTRIE2_SHIFT_2) : 0, \
  |  |  |  |  |  |  850|      0|                (trie)->index, c) : \
  |  |  |  |  |  |  851|      0|            (uint32_t)(c)>0x10ffff ? \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (851:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  852|      0|                (asciiOffset)+UTRIE2_BAD_UTF8_DATA_OFFSET : \
  |  |  |  |  |  |  853|      0|                (c)>=(trie)->highStart ? \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (853:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|                    (trie)->highValueIndex : \
  |  |  |  |  |  |  855|      0|                    _UTRIE2_INDEX_FROM_SUPP((trie)->index, c))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  833|      0|    (((int32_t)((trieIndex)[ \
  |  |  |  |  |  |  |  |  834|      0|        (trieIndex)[(UTRIE2_INDEX_1_OFFSET-UTRIE2_OMITTED_BMP_INDEX_1_LENGTH)+ \
  |  |  |  |  |  |  |  |  835|      0|                      ((c)>>UTRIE2_SHIFT_1)]+ \
  |  |  |  |  |  |  |  |  836|      0|        (((c)>>UTRIE2_SHIFT_2)&UTRIE2_INDEX_2_MASK)]) \
  |  |  |  |  |  |  |  |  837|      0|    <<UTRIE2_INDEX_SHIFT)+ \
  |  |  |  |  |  |  |  |  838|      0|    ((c)&UTRIE2_DATA_MASK))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1547|    532|    if(!UCASE_HAS_EXCEPTION(props)) {
  ------------------
  |  |  380|    532|#define UCASE_HAS_EXCEPTION(props) ((props)&UCASE_EXCEPTION)
  |  |  ------------------
  |  |  |  |  377|    532|#define UCASE_EXCEPTION         8
  |  |  ------------------
  ------------------
  |  Branch (1547:8): [True: 525, False: 7]
  ------------------
 1548|    525|        if(UCASE_IS_UPPER_OR_TITLE(props)) {
  ------------------
  |  |  374|    525|#define UCASE_IS_UPPER_OR_TITLE(props) ((props)&2)
  |  |  ------------------
  |  |  |  Branch (374:40): [True: 241, False: 284]
  |  |  ------------------
  ------------------
 1549|    241|            result=c+UCASE_GET_DELTA(props);
  ------------------
  |  |  397|    241|#   define UCASE_GET_DELTA(props) ((int16_t)(props)>>UCASE_DELTA_SHIFT)
  |  |  ------------------
  |  |  |  |  391|    241|#define UCASE_DELTA_SHIFT   7
  |  |  ------------------
  ------------------
 1550|    241|        }
 1551|    525|    } else {
 1552|      7|        const uint16_t *pe=GET_EXCEPTIONS(&ucase_props_singleton, props), *pe2;
  ------------------
  |  |   79|      7|#define GET_EXCEPTIONS(csp, props) ((csp)->exceptions+((props)>>UCASE_EXC_SHIFT))
  |  |  ------------------
  |  |  |  |  403|      7|#define UCASE_EXC_SHIFT     4
  |  |  ------------------
  ------------------
 1553|      7|        uint16_t excWord=*pe++;
 1554|      7|        int32_t full, idx;
 1555|       |
 1556|      7|        pe2=pe;
 1557|       |
 1558|      7|        if(excWord&UCASE_EXC_CONDITIONAL_FOLD) {
  ------------------
  |  |  445|      7|#define UCASE_EXC_CONDITIONAL_FOLD      0x8000
  ------------------
  |  Branch (1558:12): [True: 1, False: 6]
  ------------------
 1559|       |            /* use hardcoded conditions and mappings */
 1560|      1|            if((options&_FOLD_CASE_OPTIONS_MASK)==U_FOLD_CASE_DEFAULT) {
  ------------------
  |  |   83|      1|#define _FOLD_CASE_OPTIONS_MASK 7
  ------------------
                          if((options&_FOLD_CASE_OPTIONS_MASK)==U_FOLD_CASE_DEFAULT) {
  ------------------
  |  |   22|      1|#define U_FOLD_CASE_DEFAULT 0
  ------------------
  |  Branch (1560:16): [True: 1, False: 0]
  ------------------
 1561|       |                /* default mappings */
 1562|      1|                if(c==0x49) {
  ------------------
  |  Branch (1562:20): [True: 1, False: 0]
  ------------------
 1563|       |                    /* 0049; C; 0069; # LATIN CAPITAL LETTER I */
 1564|      1|                    return 0x69;
 1565|      1|                } else if(c==0x130) {
  ------------------
  |  Branch (1565:27): [True: 0, False: 0]
  ------------------
 1566|       |                    /* 0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE */
 1567|      0|                    *pString=iDot;
 1568|      0|                    return 2;
 1569|      0|                }
 1570|      1|            } else {
 1571|       |                /* Turkic mappings */
 1572|      0|                if(c==0x49) {
  ------------------
  |  Branch (1572:20): [True: 0, False: 0]
  ------------------
 1573|       |                    /* 0049; T; 0131; # LATIN CAPITAL LETTER I */
 1574|      0|                    return 0x131;
 1575|      0|                } else if(c==0x130) {
  ------------------
  |  Branch (1575:27): [True: 0, False: 0]
  ------------------
 1576|       |                    /* 0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE */
 1577|      0|                    return 0x69;
 1578|      0|                }
 1579|      0|            }
 1580|      6|        } else if(HAS_SLOT(excWord, UCASE_EXC_FULL_MAPPINGS)) {
  ------------------
  |  |  101|      6|#define HAS_SLOT(flags, idx) ((flags)&(1<<(idx)))
  |  |  ------------------
  |  |  |  Branch (101:30): [True: 0, False: 6]
  |  |  ------------------
  ------------------
 1581|      0|            GET_SLOT_VALUE(excWord, UCASE_EXC_FULL_MAPPINGS, pe, full);
  ------------------
  |  |  113|      0|#define GET_SLOT_VALUE(excWord, idx, pExc16, value) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|      0|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |  114|      0|    if(((excWord)&UCASE_EXC_DOUBLE_SLOTS)==0) { \
  |  |  ------------------
  |  |  |  |  423|      0|#define UCASE_EXC_DOUBLE_SLOTS      0x100
  |  |  ------------------
  |  |  |  Branch (114:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  115|      0|        (pExc16)+=SLOT_OFFSET(excWord, idx); \
  |  |  ------------------
  |  |  |  |  102|      0|#define SLOT_OFFSET(flags, idx) flagsOffset[(flags)&((1<<(idx))-1)]
  |  |  ------------------
  |  |  116|      0|        (value)=*pExc16; \
  |  |  117|      0|    } else { \
  |  |  118|      0|        (pExc16)+=2*SLOT_OFFSET(excWord, idx); \
  |  |  ------------------
  |  |  |  |  102|      0|#define SLOT_OFFSET(flags, idx) flagsOffset[(flags)&((1<<(idx))-1)]
  |  |  ------------------
  |  |  119|      0|        (value)=*pExc16++; \
  |  |  120|      0|        (value)=((value)<<16)|*pExc16; \
  |  |  121|      0|    } \
  |  |  122|      0|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|      0|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1582|       |
 1583|       |            /* start of full case mapping strings */
 1584|      0|            ++pe;
 1585|       |
 1586|       |            /* skip the lowercase result string */
 1587|      0|            pe+=full&UCASE_FULL_LOWER;
  ------------------
  |  |  448|      0|#define UCASE_FULL_LOWER    0xf
  ------------------
 1588|      0|            full=(full>>4)&0xf;
 1589|       |
 1590|      0|            if(full!=0) {
  ------------------
  |  Branch (1590:16): [True: 0, False: 0]
  ------------------
 1591|       |                /* set the output pointer to the result string */
 1592|      0|                *pString=reinterpret_cast<const char16_t *>(pe);
 1593|       |
 1594|       |                /* return the string length */
 1595|      0|                return full;
 1596|      0|            }
 1597|      0|        }
 1598|       |
 1599|      6|        if((excWord&UCASE_EXC_NO_SIMPLE_CASE_FOLDING)!=0) {
  ------------------
  |  Branch (1599:12): [True: 0, False: 6]
  ------------------
 1600|      0|            return ~c;
 1601|      0|        }
 1602|      6|        if(HAS_SLOT(excWord, UCASE_EXC_DELTA) && UCASE_IS_UPPER_OR_TITLE(props)) {
  ------------------
  |  |  101|     12|#define HAS_SLOT(flags, idx) ((flags)&(1<<(idx)))
  |  |  ------------------
  |  |  |  Branch (101:30): [True: 3, False: 3]
  |  |  ------------------
  ------------------
                      if(HAS_SLOT(excWord, UCASE_EXC_DELTA) && UCASE_IS_UPPER_OR_TITLE(props)) {
  ------------------
  |  |  374|      3|#define UCASE_IS_UPPER_OR_TITLE(props) ((props)&2)
  |  |  ------------------
  |  |  |  Branch (374:40): [True: 1, False: 2]
  |  |  ------------------
  ------------------
 1603|      1|            int32_t delta;
 1604|      1|            GET_SLOT_VALUE(excWord, UCASE_EXC_DELTA, pe2, delta);
  ------------------
  |  |  113|      1|#define GET_SLOT_VALUE(excWord, idx, pExc16, value) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|      1|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |  114|      1|    if(((excWord)&UCASE_EXC_DOUBLE_SLOTS)==0) { \
  |  |  ------------------
  |  |  |  |  423|      1|#define UCASE_EXC_DOUBLE_SLOTS      0x100
  |  |  ------------------
  |  |  |  Branch (114:8): [True: 1, False: 0]
  |  |  ------------------
  |  |  115|      1|        (pExc16)+=SLOT_OFFSET(excWord, idx); \
  |  |  ------------------
  |  |  |  |  102|      1|#define SLOT_OFFSET(flags, idx) flagsOffset[(flags)&((1<<(idx))-1)]
  |  |  ------------------
  |  |  116|      1|        (value)=*pExc16; \
  |  |  117|      1|    } else { \
  |  |  118|      0|        (pExc16)+=2*SLOT_OFFSET(excWord, idx); \
  |  |  ------------------
  |  |  |  |  102|      0|#define SLOT_OFFSET(flags, idx) flagsOffset[(flags)&((1<<(idx))-1)]
  |  |  ------------------
  |  |  119|      0|        (value)=*pExc16++; \
  |  |  120|      0|        (value)=((value)<<16)|*pExc16; \
  |  |  121|      0|    } \
  |  |  122|      1|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|      1|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1605|      1|            return (excWord&UCASE_EXC_DELTA_IS_NEGATIVE)==0 ? c+delta : c-delta;
  ------------------
  |  Branch (1605:20): [True: 1, False: 0]
  ------------------
 1606|      1|        }
 1607|      5|        if(HAS_SLOT(excWord, UCASE_EXC_FOLD)) {
  ------------------
  |  |  101|      5|#define HAS_SLOT(flags, idx) ((flags)&(1<<(idx)))
  |  |  ------------------
  |  |  |  Branch (101:30): [True: 0, False: 5]
  |  |  ------------------
  ------------------
 1608|      0|            idx=UCASE_EXC_FOLD;
 1609|      5|        } else if(HAS_SLOT(excWord, UCASE_EXC_LOWER)) {
  ------------------
  |  |  101|      5|#define HAS_SLOT(flags, idx) ((flags)&(1<<(idx)))
  |  |  ------------------
  |  |  |  Branch (101:30): [True: 1, False: 4]
  |  |  ------------------
  ------------------
 1610|      1|            idx=UCASE_EXC_LOWER;
 1611|      4|        } else {
 1612|      4|            return ~c;
 1613|      4|        }
 1614|      5|        GET_SLOT_VALUE(excWord, idx, pe2, result);
  ------------------
  |  |  113|      1|#define GET_SLOT_VALUE(excWord, idx, pExc16, value) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|      1|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |  114|      1|    if(((excWord)&UCASE_EXC_DOUBLE_SLOTS)==0) { \
  |  |  ------------------
  |  |  |  |  423|      1|#define UCASE_EXC_DOUBLE_SLOTS      0x100
  |  |  ------------------
  |  |  |  Branch (114:8): [True: 1, False: 0]
  |  |  ------------------
  |  |  115|      1|        (pExc16)+=SLOT_OFFSET(excWord, idx); \
  |  |  ------------------
  |  |  |  |  102|      1|#define SLOT_OFFSET(flags, idx) flagsOffset[(flags)&((1<<(idx))-1)]
  |  |  ------------------
  |  |  116|      1|        (value)=*pExc16; \
  |  |  117|      1|    } else { \
  |  |  118|      0|        (pExc16)+=2*SLOT_OFFSET(excWord, idx); \
  |  |  ------------------
  |  |  |  |  102|      0|#define SLOT_OFFSET(flags, idx) flagsOffset[(flags)&((1<<(idx))-1)]
  |  |  ------------------
  |  |  119|      0|        (value)=*pExc16++; \
  |  |  120|      0|        (value)=((value)<<16)|*pExc16; \
  |  |  121|      0|    } \
  |  |  122|      5|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|      5|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1615|      1|    }
 1616|       |
 1617|    526|    return (result==c) ? ~result : result;
  ------------------
  |  Branch (1617:12): [True: 284, False: 242]
  ------------------
 1618|    532|}

u_charDigitValue_78:
  343|    679|u_charDigitValue(UChar32 c) {
  344|    679|    uint32_t props;
  345|    679|    int32_t value;
  346|    679|    GET_PROPS(c, props);
  ------------------
  |  |   44|    679|#define GET_PROPS(c, result) ((result)=UTRIE2_GET16(&propsTrie, c))
  |  |  ------------------
  |  |  |  |  360|    679|#define UTRIE2_GET16(trie, c) _UTRIE2_GET((trie), index, (trie)->indexLength, (c))
  |  |  |  |  ------------------
  |  |  |  |  |  |  871|    679|    (trie)->data[_UTRIE2_INDEX_FROM_CP(trie, asciiOffset, c)]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  845|    679|    ((uint32_t)(c)<0xd800 ? \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (845:6): [True: 679, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  846|    679|        _UTRIE2_INDEX_RAW(0, (trie)->index, c) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  815|    679|    (((int32_t)((trieIndex)[(offset)+((c)>>UTRIE2_SHIFT_2)]) \
  |  |  |  |  |  |  |  |  |  |  816|    679|    <<UTRIE2_INDEX_SHIFT)+ \
  |  |  |  |  |  |  |  |  |  |  817|    679|    ((c)&UTRIE2_DATA_MASK))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  847|    679|        (uint32_t)(c)<=0xffff ? \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (847:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  848|      0|            _UTRIE2_INDEX_RAW( \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  815|      0|    (((int32_t)((trieIndex)[(offset)+((c)>>UTRIE2_SHIFT_2)]) \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (815:30): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  816|      0|    <<UTRIE2_INDEX_SHIFT)+ \
  |  |  |  |  |  |  |  |  |  |  817|      0|    ((c)&UTRIE2_DATA_MASK))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  849|      0|                (c)<=0xdbff ? UTRIE2_LSCP_INDEX_2_OFFSET-(0xd800>>UTRIE2_SHIFT_2) : 0, \
  |  |  |  |  |  |  |  |  850|      0|                (trie)->index, c) : \
  |  |  |  |  |  |  |  |  851|      0|            (uint32_t)(c)>0x10ffff ? \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (851:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  852|      0|                (asciiOffset)+UTRIE2_BAD_UTF8_DATA_OFFSET : \
  |  |  |  |  |  |  |  |  853|      0|                (c)>=(trie)->highStart ? \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (853:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|                    (trie)->highValueIndex : \
  |  |  |  |  |  |  |  |  855|      0|                    _UTRIE2_INDEX_FROM_SUPP((trie)->index, c))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  833|      0|    (((int32_t)((trieIndex)[ \
  |  |  |  |  |  |  |  |  |  |  834|      0|        (trieIndex)[(UTRIE2_INDEX_1_OFFSET-UTRIE2_OMITTED_BMP_INDEX_1_LENGTH)+ \
  |  |  |  |  |  |  |  |  |  |  835|      0|                      ((c)>>UTRIE2_SHIFT_1)]+ \
  |  |  |  |  |  |  |  |  |  |  836|      0|        (((c)>>UTRIE2_SHIFT_2)&UTRIE2_INDEX_2_MASK)]) \
  |  |  |  |  |  |  |  |  |  |  837|      0|    <<UTRIE2_INDEX_SHIFT)+ \
  |  |  |  |  |  |  |  |  |  |  838|      0|    ((c)&UTRIE2_DATA_MASK))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  347|    679|    value=(int32_t)GET_NUMERIC_TYPE_VALUE(props)-UPROPS_NTV_DECIMAL_START;
  ------------------
  |  |   68|    679|#define GET_NUMERIC_TYPE_VALUE(props) ((props)>>UPROPS_NUMERIC_TYPE_VALUE_SHIFT)
  ------------------
  348|    679|    if(value<=9) {
  ------------------
  |  Branch (348:8): [True: 679, False: 0]
  ------------------
  349|    679|        return value;
  350|    679|    } else {
  351|      0|        return -1;
  352|      0|    }
  353|    679|}
u_digit_78:
  449|    679|u_digit(UChar32 ch, int8_t radix) {
  450|    679|    int8_t value;
  451|    679|    if((uint8_t)(radix-2)<=(36-2)) {
  ------------------
  |  Branch (451:8): [True: 679, False: 0]
  ------------------
  452|    679|        value=(int8_t)u_charDigitValue(ch);
  ------------------
  |  |  220|    679|#define u_charDigitValue U_ICU_ENTRY_POINT_RENAME(u_charDigitValue)
  |  |  ------------------
  |  |  |  |  123|    679|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    679|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    679|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  453|    679|        if(value<0) {
  ------------------
  |  Branch (453:12): [True: 25, False: 654]
  ------------------
  454|       |            /* ch is not a decimal digit, try latin letters */
  455|     25|            if(ch>=0x61 && ch<=0x7A) {
  ------------------
  |  Branch (455:16): [True: 17, False: 8]
  |  Branch (455:28): [True: 17, False: 0]
  ------------------
  456|     17|                value=(int8_t)(ch-0x57);  /* ch - 'a' + 10 */
  457|     17|            } else if(ch>=0x41 && ch<=0x5A) {
  ------------------
  |  Branch (457:23): [True: 6, False: 2]
  |  Branch (457:35): [True: 5, False: 1]
  ------------------
  458|      5|                value=(int8_t)(ch-0x37);  /* ch - 'A' + 10 */
  459|      5|            } else if(ch>=0xFF41 && ch<=0xFF5A) {
  ------------------
  |  Branch (459:23): [True: 0, False: 3]
  |  Branch (459:37): [True: 0, False: 0]
  ------------------
  460|      0|                value=(int8_t)(ch-0xFF37);  /* fullwidth ASCII a-z */
  461|      3|            } else if(ch>=0xFF21 && ch<=0xFF3A) {
  ------------------
  |  Branch (461:23): [True: 0, False: 3]
  |  Branch (461:37): [True: 0, False: 0]
  ------------------
  462|      0|                value=(int8_t)(ch-0xFF17);  /* fullwidth ASCII A-Z */
  463|      0|            }
  464|     25|        }
  465|    679|    } else {
  466|      0|        value=-1;   /* invalid radix */
  467|      0|    }
  468|    679|    return (int8_t)((value<radix) ? value : -1);
  ------------------
  |  Branch (468:21): [True: 657, False: 22]
  ------------------
  469|    679|}

ucln_common_registerCleanup_78:
   67|  13.1k|{
   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|  13.1k|    U_ASSERT(UCLN_COMMON_START < type && type < UCLN_COMMON_COUNT);
  ------------------
  |  |   35|  13.1k|#   define U_ASSERT(exp) (void)0
  ------------------
   79|  13.1k|    if (type == UCLN_COMMON_MUTEX) {
  ------------------
  |  Branch (79:9): [True: 1, False: 13.1k]
  ------------------
   80|      1|        gCommonCleanupFunctions[type] = func;
   81|  13.1k|    } else if (UCLN_COMMON_START < type && type < UCLN_COMMON_COUNT)  {
  ------------------
  |  Branch (81:16): [True: 13.1k, False: 0]
  |  Branch (81:44): [True: 13.1k, False: 0]
  ------------------
   82|  13.1k|        icu::Mutex m;     // See ticket 10295 for discussion.
   83|  13.1k|        gCommonCleanupFunctions[type] = func;
   84|  13.1k|    }
   85|       |#if !UCLN_NO_AUTO_CLEANUP && (defined(UCLN_AUTO_ATEXIT) || defined(UCLN_AUTO_LOCAL))
   86|       |    ucln_registerAutomaticCleanup();
   87|       |#endif
   88|  13.1k|}
ucln_registerCleanup_78:
   97|      5|{
   98|      5|    U_ASSERT(UCLN_START < type && type < UCLN_COMMON);
  ------------------
  |  |   35|      5|#   define U_ASSERT(exp) (void)0
  ------------------
   99|      5|    if (UCLN_START < type && type < UCLN_COMMON)
  ------------------
  |  Branch (99:9): [True: 5, False: 0]
  |  Branch (99:30): [True: 5, False: 0]
  ------------------
  100|      5|    {
  101|      5|        gLibCleanupFunctions[type] = func;
  102|      5|    }
  103|      5|}

udata_getHeaderSize_78:
   36|  1.49k|udata_getHeaderSize(const DataHeader *udh) {
   37|  1.49k|    if(udh==nullptr) {
  ------------------
  |  Branch (37:8): [True: 0, False: 1.49k]
  ------------------
   38|      0|        return 0;
   39|  1.49k|    } else if(udh->info.isBigEndian==U_IS_BIG_ENDIAN) {
  ------------------
  |  |  353|  1.49k|#   define U_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
  ------------------
  |  Branch (39:15): [True: 1.49k, False: 0]
  ------------------
   40|       |        /* same endianness */
   41|  1.49k|        return udh->dataHeader.headerSize;
   42|  1.49k|    } else {
   43|       |        /* opposite endianness */
   44|      0|        uint16_t x=udh->dataHeader.headerSize;
   45|      0|        return (uint16_t)((x<<8)|(x>>8));
   46|      0|    }
   47|  1.49k|}
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|  53.8k|                  UErrorCode *pErrorCode) {
  230|  53.8k|    (void)pErrorCode;
  231|  53.8k|    const UDataOffsetTOC  *toc = (UDataOffsetTOC *)pData->toc;
  232|  53.8k|    if(toc!=nullptr) {
  ------------------
  |  Branch (232:8): [True: 53.8k, False: 0]
  ------------------
  233|  53.8k|        const char *base=(const char *)toc;
  234|  53.8k|        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|  53.8k|        number=offsetTOCPrefixBinarySearch(tocEntryName, base, toc->entry, count);
  244|  53.8k|        if(number>=0) {
  ------------------
  |  Branch (244:12): [True: 1.49k, False: 52.3k]
  ------------------
  245|       |            /* found it */
  246|  1.49k|            const UDataOffsetTOCEntry *entry=toc->entry+number;
  247|       |#ifdef UDATA_DEBUG
  248|       |            fprintf(stderr, "%s: Found.\n", tocEntryName);
  249|       |#endif
  250|  1.49k|            if((number+1) < count) {
  ------------------
  |  Branch (250:16): [True: 1.48k, False: 1]
  ------------------
  251|  1.48k|                *pLength = (int32_t)(entry[1].dataOffset - entry->dataOffset);
  252|  1.48k|            } else {
  253|      1|                *pLength = -1;
  254|      1|            }
  255|  1.49k|            return (const DataHeader *)(base+entry->dataOffset);
  256|  52.3k|        } else {
  257|       |#ifdef UDATA_DEBUG
  258|       |            fprintf(stderr, "%s: Not found.\n", tocEntryName);
  259|       |#endif
  260|  52.3k|            return nullptr;
  261|  52.3k|        }
  262|  53.8k|    } else {
  263|       |#ifdef UDATA_DEBUG
  264|       |        fprintf(stderr, "returning header\n");
  265|       |#endif
  266|       |
  267|      0|        return pData->pHeader;
  268|      0|    }
  269|  53.8k|}
ucmndata.cpp:_ZL27offsetTOCPrefixBinarySearchPKcS0_PK19UDataOffsetTOCEntryi:
  125|  53.8k|                            const UDataOffsetTOCEntry *toc, int32_t count) {
  126|  53.8k|    int32_t start=0;
  127|  53.8k|    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|  53.8k|    int32_t startPrefixLength=0;
  134|  53.8k|    int32_t limitPrefixLength=0;
  135|  53.8k|    if(count==0) {
  ------------------
  |  Branch (135:8): [True: 0, False: 53.8k]
  ------------------
  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|  53.8k|    if(0==strcmpAfterPrefix(s, names+toc[0].nameOffset, &startPrefixLength)) {
  ------------------
  |  Branch (144:8): [True: 1, False: 53.8k]
  ------------------
  145|      1|        return 0;
  146|      1|    }
  147|  53.8k|    ++start;
  148|  53.8k|    --limit;
  149|  53.8k|    if(0==strcmpAfterPrefix(s, names+toc[limit].nameOffset, &limitPrefixLength)) {
  ------------------
  |  Branch (149:8): [True: 1, False: 53.8k]
  ------------------
  150|      1|        return limit;
  151|      1|    }
  152|   709k|    while(start<limit) {
  ------------------
  |  Branch (152:11): [True: 657k, False: 52.3k]
  ------------------
  153|   657k|        int32_t i=(start+limit)/2;
  154|   657k|        int32_t prefixLength=MIN(startPrefixLength, limitPrefixLength);
  ------------------
  |  |   97|   657k|#define MIN(a,b) (((a)<(b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (97:19): [True: 149k, False: 507k]
  |  |  ------------------
  ------------------
  155|   657k|        int32_t cmp=strcmpAfterPrefix(s, names+toc[i].nameOffset, &prefixLength);
  156|   657k|        if(cmp<0) {
  ------------------
  |  Branch (156:12): [True: 406k, False: 250k]
  ------------------
  157|   406k|            limit=i;
  158|   406k|            limitPrefixLength=prefixLength;
  159|   406k|        } else if(cmp==0) {
  ------------------
  |  Branch (159:19): [True: 1.48k, False: 249k]
  ------------------
  160|  1.48k|            return i;
  161|   249k|        } else {
  162|   249k|            start=i+1;
  163|   249k|            startPrefixLength=prefixLength;
  164|   249k|        }
  165|   657k|    }
  166|  52.3k|    return -1;
  167|  53.8k|}
ucmndata.cpp:_ZL17strcmpAfterPrefixPKcS0_Pi:
  105|   764k|strcmpAfterPrefix(const char *s1, const char *s2, int32_t *pPrefixLength) {
  106|   764k|    int32_t pl=*pPrefixLength;
  107|   764k|    int32_t cmp=0;
  108|   764k|    s1+=pl;
  109|   764k|    s2+=pl;
  110|  2.35M|    for(;;) {
  111|  2.35M|        int32_t c1 = static_cast<uint8_t>(*s1++);
  112|  2.35M|        int32_t c2 = static_cast<uint8_t>(*s2++);
  113|  2.35M|        cmp=c1-c2;
  114|  2.35M|        if(cmp!=0 || c1==0) {  /* different or done */
  ------------------
  |  Branch (114:12): [True: 763k, False: 1.59M]
  |  Branch (114:22): [True: 1.49k, False: 1.58M]
  ------------------
  115|   764k|            break;
  116|   764k|        }
  117|  1.58M|        ++pl;  /* increment shared same-prefix length */
  118|  1.58M|    }
  119|   764k|    *pPrefixLength=pl;
  120|   764k|    return cmp;
  121|   764k|}

ucurr_forLocale_78:
  505|  13.3k|                UErrorCode* ec) {
  506|  13.3k|    if (U_FAILURE(*ec)) { return 0; }
  ------------------
  |  Branch (506:9): [True: 0, False: 13.3k]
  ------------------
  507|  13.3k|    if (buffCapacity < 0 || (buff == nullptr && buffCapacity > 0)) {
  ------------------
  |  Branch (507:9): [True: 0, False: 13.3k]
  |  Branch (507:30): [True: 0, False: 13.3k]
  |  Branch (507:49): [True: 0, False: 0]
  ------------------
  508|      0|        *ec = U_ILLEGAL_ARGUMENT_ERROR;
  509|      0|        return 0;
  510|      0|    }
  511|       |
  512|  13.3k|    UErrorCode localStatus = U_ZERO_ERROR;
  513|  13.3k|    CharString currency = ulocimp_getKeywordValue(locale, "currency", localStatus);
  ------------------
  |  | 1200|  13.3k|#define ulocimp_getKeywordValue U_ICU_ENTRY_POINT_RENAME(ulocimp_getKeywordValue)
  |  |  ------------------
  |  |  |  |  123|  13.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  514|  13.3k|    int32_t resLen = currency.length();
  515|       |
  516|  13.3k|    if (U_SUCCESS(localStatus) && resLen == 3 && uprv_isInvariantString(currency.data(), resLen)) {
  ------------------
  |  | 1517|     68|#define uprv_isInvariantString U_ICU_ENTRY_POINT_RENAME(uprv_isInvariantString)
  |  |  ------------------
  |  |  |  |  123|     68|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     68|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     68|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (516:9): [True: 13.2k, False: 41]
  |  Branch (516:35): [True: 68, False: 13.2k]
  |  Branch (516:50): [True: 68, False: 0]
  ------------------
  517|     68|        if (resLen < buffCapacity) {
  ------------------
  |  Branch (517:13): [True: 68, False: 0]
  ------------------
  518|     68|            T_CString_toUpperCase(currency.data());
  ------------------
  |  |   70|     68|#define T_CString_toUpperCase U_ICU_ENTRY_POINT_RENAME(T_CString_toUpperCase)
  |  |  ------------------
  |  |  |  |  123|     68|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     68|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     68|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  519|     68|            u_charsToUChars(currency.data(), buff, resLen);
  ------------------
  |  |  226|     68|#define u_charsToUChars U_ICU_ENTRY_POINT_RENAME(u_charsToUChars)
  |  |  ------------------
  |  |  |  |  123|     68|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     68|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     68|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|     68|        }
  521|     68|        return u_terminateUChars(buff, buffCapacity, resLen, ec);
  ------------------
  |  |  408|     68|#define u_terminateUChars U_ICU_ENTRY_POINT_RENAME(u_terminateUChars)
  |  |  ------------------
  |  |  |  |  123|     68|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     68|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     68|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  522|     68|    }
  523|       |
  524|       |    // get country or country_variant in `id'
  525|  13.2k|    CharString id = idForLocale(locale, ec);
  526|  13.2k|    if (U_FAILURE(*ec)) {
  ------------------
  |  Branch (526:9): [True: 81, False: 13.1k]
  ------------------
  527|     81|        return 0;
  528|     81|    }
  529|       |
  530|  13.1k|#if !UCONFIG_NO_SERVICE
  531|  13.1k|    const char16_t* result = CReg::get(id.data());
  532|  13.1k|    if (result) {
  ------------------
  |  Branch (532:9): [True: 0, False: 13.1k]
  ------------------
  533|      0|        if(buffCapacity > u_strlen(result)) {
  ------------------
  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (533:12): [True: 0, False: 0]
  ------------------
  534|      0|            u_strcpy(buff, result);
  ------------------
  |  |  390|      0|#define u_strcpy U_ICU_ENTRY_POINT_RENAME(u_strcpy)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  535|      0|        }
  536|      0|        resLen = u_strlen(result);
  ------------------
  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|      0|        return u_terminateUChars(buff, buffCapacity, resLen, ec);
  ------------------
  |  |  408|      0|#define u_terminateUChars U_ICU_ENTRY_POINT_RENAME(u_terminateUChars)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  538|      0|    }
  539|  13.1k|#endif
  540|       |    // Remove variants, which is only needed for registration.
  541|  13.1k|    char *idDelim = uprv_strchr(id.data(), VAR_DELIM);
  ------------------
  |  |   40|  13.1k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  13.1k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  542|  13.1k|    if (idDelim) {
  ------------------
  |  Branch (542:9): [True: 0, False: 13.1k]
  ------------------
  543|      0|        id.truncate(idDelim - id.data());
  544|      0|    }
  545|       |
  546|  13.1k|    const char16_t* s = nullptr;  // Currency code from data file.
  547|  13.1k|    if (id.isEmpty()) {
  ------------------
  |  Branch (547:9): [True: 6.79k, False: 6.36k]
  ------------------
  548|       |        // No point looking in the data for an empty string.
  549|       |        // This is what we would get.
  550|  6.79k|        localStatus = U_MISSING_RESOURCE_ERROR;
  551|  6.79k|    } else {
  552|       |        // Look up the CurrencyMap element in the root bundle.
  553|  6.36k|        localStatus = U_ZERO_ERROR;
  554|  6.36k|        UResourceBundle *rb = ures_openDirect(U_ICUDATA_CURR, CURRENCY_DATA, &localStatus);
  ------------------
  |  | 1693|  6.36k|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|  6.36k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  6.36k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  6.36k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      UResourceBundle *rb = ures_openDirect(U_ICUDATA_CURR, CURRENCY_DATA, &localStatus);
  ------------------
  |  |   21|  6.36k|#define U_ICUDATA_CURR U_ICUDATA_NAME U_TREE_SEPARATOR_STRING "curr"
  |  |  ------------------
  |  |  |  |  154|  6.36k|#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER
  |  |  ------------------
  ------------------
  555|  6.36k|        UResourceBundle *cm = ures_getByKey(rb, CURRENCY_MAP, rb, &localStatus);
  ------------------
  |  | 1661|  6.36k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  6.36k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  6.36k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  6.36k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  556|  6.36k|        LocalUResourceBundlePointer countryArray(ures_getByKey(rb, id.data(), cm, &localStatus));
  ------------------
  |  | 1661|  6.36k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  6.36k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  6.36k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  6.36k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  557|       |        // https://unicode-org.atlassian.net/browse/ICU-21997
  558|       |        // Prefer to use currencies that are legal tender.
  559|  6.36k|        if (U_SUCCESS(localStatus)) {
  ------------------
  |  Branch (559:13): [True: 5.47k, False: 889]
  ------------------
  560|  5.47k|            int32_t arrayLength = ures_getSize(countryArray.getAlias());
  ------------------
  |  | 1674|  5.47k|#define ures_getSize U_ICU_ENTRY_POINT_RENAME(ures_getSize)
  |  |  ------------------
  |  |  |  |  123|  5.47k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.47k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.47k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  561|  5.71k|            for (int32_t i = 0; i < arrayLength; ++i) {
  ------------------
  |  Branch (561:33): [True: 5.69k, False: 18]
  ------------------
  562|  5.69k|                LocalUResourceBundlePointer currencyReq(
  563|  5.69k|                    ures_getByIndex(countryArray.getAlias(), i, nullptr, &localStatus));
  ------------------
  |  | 1660|  5.69k|#define ures_getByIndex U_ICU_ENTRY_POINT_RENAME(ures_getByIndex)
  |  |  ------------------
  |  |  |  |  123|  5.69k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.69k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.69k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  564|       |                // The currency is legal tender if it is *not* marked with tender{"false"}.
  565|  5.69k|                UErrorCode tenderStatus = localStatus;
  566|  5.69k|                const char16_t *tender =
  567|  5.69k|                    ures_getStringByKey(currencyReq.getAlias(), "tender", nullptr, &tenderStatus);
  ------------------
  |  | 1677|  5.69k|#define ures_getStringByKey U_ICU_ENTRY_POINT_RENAME(ures_getStringByKey)
  |  |  ------------------
  |  |  |  |  123|  5.69k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.69k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.69k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|  5.69k|                bool isTender = U_FAILURE(tenderStatus) || u_strcmp(tender, u"false") != 0;
  ------------------
  |  |  387|    243|#define u_strcmp U_ICU_ENTRY_POINT_RENAME(u_strcmp)
  |  |  ------------------
  |  |  |  |  123|    243|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    243|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    243|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (568:33): [True: 5.45k, False: 243]
  |  Branch (568:60): [True: 0, False: 243]
  ------------------
  569|  5.69k|                if (!isTender && s != nullptr) {
  ------------------
  |  Branch (569:21): [True: 243, False: 5.45k]
  |  Branch (569:34): [True: 225, False: 18]
  ------------------
  570|       |                    // We already have a non-tender currency. Ignore all following non-tender ones.
  571|    225|                    continue;
  572|    225|                }
  573|       |                // Fetch the currency code.
  574|  5.47k|                s = ures_getStringByKey(currencyReq.getAlias(), "id", &resLen, &localStatus);
  ------------------
  |  | 1677|  5.47k|#define ures_getStringByKey U_ICU_ENTRY_POINT_RENAME(ures_getStringByKey)
  |  |  ------------------
  |  |  |  |  123|  5.47k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.47k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.47k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  575|  5.47k|                if (isTender) {
  ------------------
  |  Branch (575:21): [True: 5.45k, False: 18]
  ------------------
  576|  5.45k|                    break;
  577|  5.45k|                }
  578|  5.47k|            }
  579|  5.47k|            if (U_SUCCESS(localStatus) && s == nullptr) {
  ------------------
  |  Branch (579:17): [True: 5.47k, False: 0]
  |  Branch (579:43): [True: 0, False: 5.47k]
  ------------------
  580|      0|                localStatus = U_MISSING_RESOURCE_ERROR;
  581|      0|            }
  582|  5.47k|        }
  583|  6.36k|    }
  584|       |
  585|  13.1k|    if ((U_FAILURE(localStatus)) && strchr(id.data(), '_') != nullptr) {
  ------------------
  |  Branch (585:9): [True: 7.68k, False: 5.47k]
  |  Branch (585:37): [True: 0, False: 7.68k]
  ------------------
  586|       |        // We don't know about it.  Check to see if we support the variant.
  587|      0|        CharString parent = ulocimp_getParent(locale, *ec);
  ------------------
  |  | 1205|      0|#define ulocimp_getParent U_ICU_ENTRY_POINT_RENAME(ulocimp_getParent)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  588|      0|        *ec = U_USING_FALLBACK_WARNING;
  589|       |        // TODO: Loop over the parent rather than recursing and
  590|       |        // looking again for a currency keyword.
  591|      0|        return ucurr_forLocale(parent.data(), buff, buffCapacity, ec);
  ------------------
  |  |  832|      0|#define ucurr_forLocale U_ICU_ENTRY_POINT_RENAME(ucurr_forLocale)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  592|      0|    }
  593|  13.1k|    if (*ec == U_ZERO_ERROR || localStatus != U_ZERO_ERROR) {
  ------------------
  |  Branch (593:9): [True: 13.1k, False: 0]
  |  Branch (593:32): [True: 0, False: 0]
  ------------------
  594|       |        // There is nothing to fallback to. Report the failure/warning if possible.
  595|  13.1k|        *ec = localStatus;
  596|  13.1k|    }
  597|  13.1k|    if (U_SUCCESS(*ec)) {
  ------------------
  |  Branch (597:9): [True: 5.47k, False: 7.68k]
  ------------------
  598|  5.47k|        if(buffCapacity > resLen) {
  ------------------
  |  Branch (598:12): [True: 5.47k, False: 0]
  ------------------
  599|  5.47k|            u_strcpy(buff, s);
  ------------------
  |  |  390|  5.47k|#define u_strcpy U_ICU_ENTRY_POINT_RENAME(u_strcpy)
  |  |  ------------------
  |  |  |  |  123|  5.47k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.47k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.47k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  600|  5.47k|        }
  601|  5.47k|    }
  602|  13.1k|    return u_terminateUChars(buff, buffCapacity, resLen, ec);
  ------------------
  |  |  408|  13.1k|#define u_terminateUChars U_ICU_ENTRY_POINT_RENAME(u_terminateUChars)
  |  |  ------------------
  |  |  |  |  123|  13.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  603|  13.1k|}
ucurr_getName_78:
  645|  5.54k|              UErrorCode* ec) {
  646|       |
  647|       |    // Look up the Currencies resource for the given locale.  The
  648|       |    // Currencies locale data looks like this:
  649|       |    //|en {
  650|       |    //|  Currencies {
  651|       |    //|    USD { "US$", "US Dollar" }
  652|       |    //|    CHF { "Sw F", "Swiss Franc" }
  653|       |    //|    INR { "=0#Rs|1#Re|1<Rs", "=0#Rupees|1#Rupee|1<Rupees" }
  654|       |    //|    //...
  655|       |    //|  }
  656|       |    //|}
  657|       |
  658|  5.54k|    if (U_FAILURE(*ec)) {
  ------------------
  |  Branch (658:9): [True: 0, False: 5.54k]
  ------------------
  659|      0|        return nullptr;
  660|      0|    }
  661|       |
  662|  5.54k|    int32_t choice = (int32_t) nameStyle;
  663|  5.54k|    if (choice < 0 || choice > 4) {
  ------------------
  |  Branch (663:9): [True: 0, False: 5.54k]
  |  Branch (663:23): [True: 0, False: 5.54k]
  ------------------
  664|      0|        *ec = U_ILLEGAL_ARGUMENT_ERROR;
  665|      0|        return nullptr;
  666|      0|    }
  667|       |
  668|       |    // In the future, resource bundles may implement multi-level
  669|       |    // fallback.  That is, if a currency is not found in the en_US
  670|       |    // Currencies data, then the en Currencies data will be searched.
  671|       |    // Currently, if a Currencies datum exists in en_US and en, the
  672|       |    // en_US entry hides that in en.
  673|       |
  674|       |    // We want multi-level fallback for this resource, so we implement
  675|       |    // it manually.
  676|       |
  677|       |    // Use a separate UErrorCode here that does not propagate out of
  678|       |    // this function.
  679|  5.54k|    UErrorCode ec2 = U_ZERO_ERROR;
  680|       |
  681|  5.54k|    if (locale == nullptr) {
  ------------------
  |  Branch (681:9): [True: 0, False: 5.54k]
  ------------------
  682|      0|        locale = 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  683|      0|    }
  684|  5.54k|    CharString loc = ulocimp_getName(locale, ec2);
  ------------------
  |  | 1204|  5.54k|#define ulocimp_getName U_ICU_ENTRY_POINT_RENAME(ulocimp_getName)
  |  |  ------------------
  |  |  |  |  123|  5.54k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.54k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.54k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  685|  5.54k|    if (U_FAILURE(ec2)) {
  ------------------
  |  Branch (685:9): [True: 2, False: 5.53k]
  ------------------
  686|      2|        *ec = U_ILLEGAL_ARGUMENT_ERROR;
  687|      2|        return nullptr;
  688|      2|    }
  689|       |
  690|  5.53k|    char buf[ISO_CURRENCY_CODE_LENGTH+1];
  691|  5.53k|    myUCharsToChars(buf, currency);
  692|       |    
  693|       |    /* Normalize the keyword value to uppercase */
  694|  5.53k|    T_CString_toUpperCase(buf);
  ------------------
  |  |   70|  5.53k|#define T_CString_toUpperCase U_ICU_ENTRY_POINT_RENAME(T_CString_toUpperCase)
  |  |  ------------------
  |  |  |  |  123|  5.53k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.53k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.53k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  695|       |    
  696|  5.53k|    const char16_t* s = nullptr;
  697|  5.53k|    ec2 = U_ZERO_ERROR;
  698|  5.53k|    LocalUResourceBundlePointer rb(ures_open(U_ICUDATA_CURR, loc.data(), &ec2));
  ------------------
  |  | 1691|  5.53k|#define ures_open U_ICU_ENTRY_POINT_RENAME(ures_open)
  |  |  ------------------
  |  |  |  |  123|  5.53k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.53k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.53k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  LocalUResourceBundlePointer rb(ures_open(U_ICUDATA_CURR, loc.data(), &ec2));
  ------------------
  |  |   21|  5.53k|#define U_ICUDATA_CURR U_ICUDATA_NAME U_TREE_SEPARATOR_STRING "curr"
  |  |  ------------------
  |  |  |  |  154|  5.53k|#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER
  |  |  ------------------
  ------------------
  699|       |
  700|  5.53k|    if (nameStyle == UCURR_NARROW_SYMBOL_NAME || nameStyle == UCURR_FORMAL_SYMBOL_NAME || nameStyle == UCURR_VARIANT_SYMBOL_NAME) {
  ------------------
  |  Branch (700:9): [True: 0, False: 5.53k]
  |  Branch (700:50): [True: 0, False: 5.53k]
  |  Branch (700:91): [True: 0, False: 5.53k]
  ------------------
  701|      0|        CharString key;
  702|      0|        switch (nameStyle) {
  703|      0|        case UCURR_NARROW_SYMBOL_NAME:
  ------------------
  |  Branch (703:9): [True: 0, False: 0]
  ------------------
  704|      0|            key.append(CURRENCIES_NARROW, ec2);
  705|      0|            break;
  706|      0|        case UCURR_FORMAL_SYMBOL_NAME:
  ------------------
  |  Branch (706:9): [True: 0, False: 0]
  ------------------
  707|      0|            key.append(CURRENCIES_FORMAL, ec2);
  708|      0|            break;
  709|      0|        case UCURR_VARIANT_SYMBOL_NAME:
  ------------------
  |  Branch (709:9): [True: 0, False: 0]
  ------------------
  710|      0|            key.append(CURRENCIES_VARIANT, ec2);
  711|      0|            break;
  712|      0|        default:
  ------------------
  |  Branch (712:9): [True: 0, False: 0]
  ------------------
  713|      0|            *ec = U_UNSUPPORTED_ERROR;
  714|      0|            return nullptr;
  715|      0|        }
  716|      0|        key.append("/", ec2);
  717|      0|        key.append(buf, ec2);
  718|      0|        s = ures_getStringByKeyWithFallback(rb.getAlias(), key.data(), len, &ec2);
  ------------------
  |  | 1678|      0|#define ures_getStringByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getStringByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  719|      0|        if (ec2 == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (719:13): [True: 0, False: 0]
  ------------------
  720|      0|            *ec = U_USING_FALLBACK_WARNING;
  721|      0|            ec2 = U_ZERO_ERROR;
  722|      0|            choice = UCURR_SYMBOL_NAME;
  723|      0|        }
  724|      0|    }
  725|  5.53k|    if (s == nullptr) {
  ------------------
  |  Branch (725:9): [True: 5.53k, False: 0]
  ------------------
  726|  5.53k|        ures_getByKey(rb.getAlias(), CURRENCIES, rb.getAlias(), &ec2);
  ------------------
  |  | 1661|  5.53k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  5.53k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.53k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.53k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  727|  5.53k|        ures_getByKeyWithFallback(rb.getAlias(), buf, rb.getAlias(), &ec2);
  ------------------
  |  | 1662|  5.53k|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|  5.53k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.53k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.53k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  728|  5.53k|        s = ures_getStringByIndex(rb.getAlias(), choice, len, &ec2);
  ------------------
  |  | 1676|  5.53k|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  123|  5.53k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.53k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.53k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  729|  5.53k|    }
  730|       |
  731|       |    // If we've succeeded we're done.  Otherwise, try to fallback.
  732|       |    // If that fails (because we are already at root) then exit.
  733|  5.53k|    if (U_SUCCESS(ec2)) {
  ------------------
  |  Branch (733:9): [True: 5.28k, False: 250]
  ------------------
  734|  5.28k|        if (ec2 == U_USING_DEFAULT_WARNING
  ------------------
  |  Branch (734:13): [True: 404, False: 4.88k]
  ------------------
  735|  5.28k|            || (ec2 == U_USING_FALLBACK_WARNING && *ec != U_USING_DEFAULT_WARNING)) {
  ------------------
  |  Branch (735:17): [True: 3.59k, False: 1.29k]
  |  Branch (735:52): [True: 2.66k, False: 927]
  ------------------
  736|  3.07k|            *ec = ec2;
  737|  3.07k|        }
  738|  5.28k|    }
  739|       |
  740|       |    // We no longer support choice format data in names.  Data should not contain
  741|       |    // choice patterns.
  742|  5.53k|    if (isChoiceFormat != nullptr) {
  ------------------
  |  Branch (742:9): [True: 0, False: 5.53k]
  ------------------
  743|      0|        *isChoiceFormat = false;
  744|      0|    }
  745|  5.53k|    if (U_SUCCESS(ec2)) {
  ------------------
  |  Branch (745:9): [True: 5.28k, False: 250]
  ------------------
  746|  5.28k|        U_ASSERT(s != nullptr);
  ------------------
  |  |   35|  5.28k|#   define U_ASSERT(exp) (void)0
  ------------------
  747|  5.28k|        return s;
  748|  5.28k|    }
  749|       |
  750|       |    // If we fail to find a match, use the ISO 4217 code
  751|    250|    *len = u_strlen(currency); // Should == ISO_CURRENCY_CODE_LENGTH, but maybe not...?
  ------------------
  |  |  393|    250|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|    250|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    250|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    250|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  752|    250|    *ec = U_USING_DEFAULT_WARNING;
  753|    250|    return currency;
  754|  5.53k|}
uprv_getStaticCurrencyName_78:
 1633|  5.54k|{
 1634|  5.54k|    U_NAMESPACE_USE
  ------------------
  |  |  112|  5.54k|#   define U_NAMESPACE_USE using namespace U_ICU_NAMESPACE;
  ------------------
 1635|       |
 1636|  5.54k|    int32_t len;
 1637|  5.54k|    const char16_t* currname = ucurr_getName(iso, loc, UCURR_SYMBOL_NAME,
  ------------------
  |  |  837|  5.54k|#define ucurr_getName U_ICU_ENTRY_POINT_RENAME(ucurr_getName)
  |  |  ------------------
  |  |  |  |  123|  5.54k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.54k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.54k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1638|  5.54k|                                          nullptr /* isChoiceFormat */, &len, &ec);
 1639|  5.54k|    if (U_SUCCESS(ec)) {
  ------------------
  |  Branch (1639:9): [True: 5.53k, False: 2]
  ------------------
 1640|  5.53k|        result.setTo(currname, len);
 1641|  5.53k|    }
 1642|  5.54k|}
ucurr.cpp:_ZL11idForLocalePKcP10UErrorCode:
  345|  13.2k|{
  346|  13.2k|    return ulocimp_getRegionForSupplementalData(locale, false, *ec);
  ------------------
  |  | 1207|  13.2k|#define ulocimp_getRegionForSupplementalData U_ICU_ENTRY_POINT_RENAME(ulocimp_getRegionForSupplementalData)
  |  |  ------------------
  |  |  |  |  123|  13.2k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.2k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.2k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  347|  13.2k|}
_ZN4CReg3getEPKc:
  420|  13.1k|    static const char16_t* get(const char* id) {
  421|  13.1k|        const char16_t* result = nullptr;
  422|  13.1k|        umtx_lock(&gCRegLock);
  ------------------
  |  | 1250|  13.1k|#define umtx_lock U_ICU_ENTRY_POINT_RENAME(umtx_lock)
  |  |  ------------------
  |  |  |  |  123|  13.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  423|  13.1k|        CReg* p = gCRegHead;
  424|       |
  425|       |        /* register cleanup of the mutex */
  426|  13.1k|        ucln_common_registerCleanup(UCLN_COMMON_CURRENCY, currency_cleanup);
  ------------------
  |  |  617|  13.1k|#define ucln_common_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_common_registerCleanup)
  |  |  ------------------
  |  |  |  |  123|  13.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  427|  13.1k|        while (p) {
  ------------------
  |  Branch (427:16): [True: 0, False: 13.1k]
  ------------------
  428|      0|            if (uprv_strcmp(id, p->id) == 0) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (428:17): [True: 0, False: 0]
  ------------------
  429|      0|                result = p->iso;
  430|      0|                break;
  431|      0|            }
  432|      0|            p = p->next;
  433|      0|        }
  434|  13.1k|        umtx_unlock(&gCRegLock);
  ------------------
  |  | 1251|  13.1k|#define umtx_unlock U_ICU_ENTRY_POINT_RENAME(umtx_unlock)
  |  |  ------------------
  |  |  |  |  123|  13.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  435|  13.1k|        return result;
  436|  13.1k|    }
ucurr.cpp:_ZL15myUCharsToCharsPcPKDs:
  281|  5.53k|myUCharsToChars(char* resultOfLen4, const char16_t* currency) {
  282|  5.53k|    u_UCharsToChars(currency, resultOfLen4, ISO_CURRENCY_CODE_LENGTH);
  ------------------
  |  |  211|  5.53k|#define u_UCharsToChars U_ICU_ENTRY_POINT_RENAME(u_UCharsToChars)
  |  |  ------------------
  |  |  |  |  123|  5.53k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.53k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.53k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  u_UCharsToChars(currency, resultOfLen4, ISO_CURRENCY_CODE_LENGTH);
  ------------------
  |  |   74|  5.53k|#define ISO_CURRENCY_CODE_LENGTH 3
  ------------------
  283|  5.53k|    resultOfLen4[ISO_CURRENCY_CODE_LENGTH] = 0;
  ------------------
  |  |   74|  5.53k|#define ISO_CURRENCY_CODE_LENGTH 3
  ------------------
  284|  5.53k|    return resultOfLen4;
  285|  5.53k|}

_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|  53.8k|                 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|  53.8k|    if(pErrorCode==nullptr || U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (1411:8): [True: 0, False: 53.8k]
  |  Branch (1411:31): [True: 0, False: 53.8k]
  ------------------
 1412|      0|        return nullptr;
 1413|  53.8k|    } else if(name==nullptr || *name==0 || isAcceptable==nullptr) {
  ------------------
  |  Branch (1413:15): [True: 0, False: 53.8k]
  |  Branch (1413:32): [True: 0, False: 53.8k]
  |  Branch (1413:44): [True: 0, False: 53.8k]
  ------------------
 1414|      0|        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
 1415|      0|        return nullptr;
 1416|  53.8k|    } else {
 1417|  53.8k|        return doOpenChoice(path, type, name, isAcceptable, context, pErrorCode);
 1418|  53.8k|    }
 1419|  53.8k|}
udata.cpp:_ZL12findBasenamePKc:
  225|  52.3k|findBasename(const char *path) {
  226|  52.3k|    const char *basename=uprv_strrchr(path, U_FILE_SEP_CHAR);
  ------------------
  |  |   42|  52.3k|#define uprv_strrchr(s, c) U_STANDARD_CPP_NAMESPACE strrchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  52.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  227|  52.3k|    if(basename==nullptr) {
  ------------------
  |  Branch (227:8): [True: 52.3k, False: 0]
  ------------------
  228|  52.3k|        return path;
  229|  52.3k|    } else {
  230|      0|        return basename+1;
  231|      0|    }
  232|  52.3k|}
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|  52.3k|static UHashtable *udata_getHashTable(UErrorCode &err) {
  299|  52.3k|    umtx_initOnce(gCommonDataCacheInitOnce, &udata_initHashTable, err);
  300|  52.3k|    return gCommonDataCache;
  301|  52.3k|}
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|  53.8k|{
 1152|  53.8k|    UDataMemory         *retVal = nullptr;
 1153|       |
 1154|  53.8k|    const char         *dataPath;
 1155|       |
 1156|  53.8k|    int32_t             tocEntrySuffixIndex;
 1157|  53.8k|    const char         *tocEntryPathSuffix;
 1158|  53.8k|    UErrorCode          subErrorCode=U_ZERO_ERROR;
 1159|  53.8k|    const char         *treeChar;
 1160|       |
 1161|  53.8k|    UBool               isICUData = false;
 1162|       |
 1163|       |
 1164|  53.8k|    FileTracer::traceOpen(path, type, name);
 1165|       |
 1166|       |
 1167|       |    /* Is this path ICU data? */
 1168|  53.8k|    if(path == nullptr ||
  ------------------
  |  Branch (1168:8): [True: 28.9k, False: 24.9k]
  ------------------
 1169|  53.8k|       !strcmp(path, U_ICUDATA_ALIAS) ||  /* "ICUDATA" */
  ------------------
  |  |   74|  24.9k|#define U_ICUDATA_ALIAS "ICUDATA"
  ------------------
  |  Branch (1169:8): [True: 0, False: 24.9k]
  ------------------
 1170|  53.8k|       !uprv_strncmp(path, U_ICUDATA_NAME U_TREE_SEPARATOR_STRING, /* "icudt26e-" */
  ------------------
  |  |   44|  24.9k|#define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n)
  |  |  ------------------
  |  |  |  |  393|  24.9k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1170:8): [True: 24.9k, False: 0]
  ------------------
 1171|  53.8k|                     uprv_strlen(U_ICUDATA_NAME U_TREE_SEPARATOR_STRING)) ||  
 1172|  53.8k|       !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|  53.8k|                     uprv_strlen(U_ICUDATA_ALIAS U_TREE_SEPARATOR_STRING))) {
 1174|  53.8k|      isICUData = true;
 1175|  53.8k|    }
 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|  53.8k|    CharString tocEntryName; /* entry name in tree format. ex:  'icudt28b/coll/ar.res' */
 1196|  53.8k|    CharString tocEntryPath; /* entry name in path format. ex:  'icudt28b\\coll\\ar.res' */
 1197|       |
 1198|  53.8k|    CharString pkgName;
 1199|  53.8k|    CharString treeName;
 1200|       |
 1201|       |    /* ======= Set up strings */
 1202|  53.8k|    if(path==nullptr) {
  ------------------
  |  Branch (1202:8): [True: 28.9k, False: 24.9k]
  ------------------
 1203|  28.9k|        pkgName.append(U_ICUDATA_NAME, *pErrorCode);
  ------------------
  |  |  154|  28.9k|#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER
  |  |  ------------------
  |  |  |  |  144|  28.9k|#     define U_ICUDATA_TYPE_LETTER "l"
  |  |  ------------------
  ------------------
 1204|  28.9k|    } else {
 1205|  24.9k|        const char *pkg;
 1206|  24.9k|        const char *first;
 1207|  24.9k|        pkg = uprv_strrchr(path, U_FILE_SEP_CHAR);
  ------------------
  |  |   42|  24.9k|#define uprv_strrchr(s, c) U_STANDARD_CPP_NAMESPACE strrchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  24.9k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1208|  24.9k|        first = uprv_strchr(path, U_FILE_SEP_CHAR);
  ------------------
  |  |   40|  24.9k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  24.9k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1209|  24.9k|        if(uprv_pathIsAbsolute(path) || (pkg != first)) { /* more than one slash in the path- not a tree name */
  ------------------
  |  | 1533|  24.9k|#define uprv_pathIsAbsolute U_ICU_ENTRY_POINT_RENAME(uprv_pathIsAbsolute)
  |  |  ------------------
  |  |  |  |  123|  24.9k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  24.9k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  24.9k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1209:12): [True: 0, False: 24.9k]
  |  Branch (1209:41): [True: 0, False: 24.9k]
  ------------------
 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|  24.9k|        } else {
 1217|  24.9k|            treeChar = uprv_strchr(path, U_TREE_SEPARATOR);
  ------------------
  |  |   40|  24.9k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  24.9k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1218|  24.9k|            if(treeChar) { 
  ------------------
  |  Branch (1218:16): [True: 24.9k, False: 0]
  ------------------
 1219|  24.9k|                treeName.append(treeChar+1, *pErrorCode); /* following '-' */
 1220|  24.9k|                if(isICUData) {
  ------------------
  |  Branch (1220:20): [True: 24.9k, False: 0]
  ------------------
 1221|  24.9k|                    pkgName.append(U_ICUDATA_NAME, *pErrorCode);
  ------------------
  |  |  154|  24.9k|#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER
  |  |  ------------------
  |  |  |  |  144|  24.9k|#     define U_ICUDATA_TYPE_LETTER "l"
  |  |  ------------------
  ------------------
 1222|  24.9k|                } 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|  24.9k|            } 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|  24.9k|        }
 1240|  24.9k|    }
 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|  53.8k|    tocEntryName.append(pkgName, *pErrorCode);
 1253|  53.8k|    tocEntryPath.append(pkgName, *pErrorCode);
 1254|  53.8k|    tocEntrySuffixIndex = tocEntryName.length();
 1255|       |
 1256|  53.8k|    if(!treeName.isEmpty()) {
  ------------------
  |  Branch (1256:8): [True: 24.9k, False: 28.9k]
  ------------------
 1257|  24.9k|        tocEntryName.append(U_TREE_ENTRY_SEP_CHAR, *pErrorCode).append(treeName, *pErrorCode);
  ------------------
  |  |   62|  24.9k|#define U_TREE_ENTRY_SEP_CHAR '/'
  ------------------
 1258|  24.9k|        tocEntryPath.append(U_FILE_SEP_CHAR, *pErrorCode).append(treeName, *pErrorCode);
  ------------------
  |  |  130|  24.9k|#   define U_FILE_SEP_CHAR '/'
  ------------------
 1259|  24.9k|    }
 1260|       |
 1261|  53.8k|    tocEntryName.append(U_TREE_ENTRY_SEP_CHAR, *pErrorCode).append(name, *pErrorCode);
  ------------------
  |  |   62|  53.8k|#define U_TREE_ENTRY_SEP_CHAR '/'
  ------------------
 1262|  53.8k|    tocEntryPath.append(U_FILE_SEP_CHAR, *pErrorCode).append(name, *pErrorCode);
  ------------------
  |  |  130|  53.8k|#   define U_FILE_SEP_CHAR '/'
  ------------------
 1263|  53.8k|    if(type!=nullptr && *type!=0) {
  ------------------
  |  Branch (1263:8): [True: 53.8k, False: 0]
  |  Branch (1263:25): [True: 53.8k, False: 0]
  ------------------
 1264|  53.8k|        tocEntryName.append(".", *pErrorCode).append(type, *pErrorCode);
 1265|  53.8k|        tocEntryPath.append(".", *pErrorCode).append(type, *pErrorCode);
 1266|  53.8k|    }
 1267|       |    // The +1 is for the U_FILE_SEP_CHAR that is always appended above.
 1268|  53.8k|    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|  53.8k|#if !defined(ICU_DATA_DIR_WINDOWS)
 1276|  53.8k|    if(path == nullptr) {
  ------------------
  |  Branch (1276:8): [True: 28.9k, False: 24.9k]
  ------------------
 1277|  28.9k|        path = COMMON_DATA_NAME; /* "icudt26e" */
  ------------------
  |  |   34|  28.9k|#define COMMON_DATA_NAME U_ICUDATA_NAME
  |  |  ------------------
  |  |  |  |  154|  28.9k|#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  28.9k|#     define U_ICUDATA_TYPE_LETTER "l"
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1278|  28.9k|    }
 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|  53.8k|    dataPath = u_getDataDirectory();
  ------------------
  |  |  271|  53.8k|#define u_getDataDirectory U_ICU_ENTRY_POINT_RENAME(u_getDataDirectory)
  |  |  ------------------
  |  |  |  |  123|  53.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  53.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  53.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1291|       |
 1292|       |    /****    Time zone individual files override  */
 1293|  53.8k|    if (isICUData && isTimeZoneFile(name, type)) {
  ------------------
  |  Branch (1293:9): [True: 53.8k, False: 0]
  |  Branch (1293:22): [True: 2, False: 53.8k]
  ------------------
 1294|      2|        const char *tzFilesDir = u_getTimeZoneFilesDirectory(pErrorCode);
  ------------------
  |  |  287|      2|#define u_getTimeZoneFilesDirectory U_ICU_ENTRY_POINT_RENAME(u_getTimeZoneFilesDirectory)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1295|      2|        if (tzFilesDir[0] != 0) {
  ------------------
  |  Branch (1295:13): [True: 0, False: 2]
  ------------------
 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|      2|    }
 1306|       |
 1307|       |    /****    COMMON PACKAGE  - only if packages are first. */
 1308|  53.8k|    if(gDataFileAccess == UDATA_PACKAGES_FIRST) {
  ------------------
  |  Branch (1308:8): [True: 0, False: 53.8k]
  ------------------
 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|  53.8k|    if((gDataFileAccess==UDATA_PACKAGES_FIRST) ||
  ------------------
  |  Branch (1322:8): [True: 0, False: 53.8k]
  ------------------
 1323|  53.8k|       (gDataFileAccess==UDATA_FILES_FIRST)) {
  ------------------
  |  Branch (1323:8): [True: 53.8k, 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|  53.8k|        if ((dataPath && *dataPath) || !isICUData) {
  ------------------
  |  Branch (1328:14): [True: 53.8k, False: 0]
  |  Branch (1328:26): [True: 0, False: 53.8k]
  |  Branch (1328:40): [True: 0, False: 53.8k]
  ------------------
 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|  53.8k|    }
 1336|       |
 1337|       |    /****    COMMON PACKAGE  */
 1338|  53.8k|    if((gDataFileAccess==UDATA_ONLY_PACKAGES) || 
  ------------------
  |  Branch (1338:8): [True: 0, False: 53.8k]
  ------------------
 1339|  53.8k|       (gDataFileAccess==UDATA_FILES_FIRST)) {
  ------------------
  |  Branch (1339:8): [True: 53.8k, False: 0]
  ------------------
 1340|       |#ifdef UDATA_DEBUG
 1341|       |        fprintf(stderr, "Trying packages (UDATA_ONLY_PACKAGES || UDATA_FILES_FIRST)\n");
 1342|       |#endif
 1343|  53.8k|        retVal = doLoadFromCommonData(isICUData,
 1344|  53.8k|                            pkgName.data(), dataPath, tocEntryPathSuffix, tocEntryName.data(),
 1345|  53.8k|                            path, type, name, isAcceptable, context, &subErrorCode, pErrorCode);
 1346|  53.8k|        if((retVal != nullptr) || U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (1346:12): [True: 1.49k, False: 52.3k]
  |  Branch (1346:35): [True: 0, False: 52.3k]
  ------------------
 1347|  1.49k|            return retVal;
 1348|  1.49k|        }
 1349|  53.8k|    }
 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|  52.3k|    if(gDataFileAccess==UDATA_NO_FILES) {
  ------------------
  |  Branch (1354:8): [True: 0, False: 52.3k]
  ------------------
 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|  52.3k|    if(U_SUCCESS(*pErrorCode)) {
  ------------------
  |  Branch (1367:8): [True: 52.3k, False: 0]
  ------------------
 1368|  52.3k|        if(U_SUCCESS(subErrorCode)) {
  ------------------
  |  Branch (1368:12): [True: 52.3k, False: 1]
  ------------------
 1369|       |            /* file not found */
 1370|  52.3k|            *pErrorCode=U_FILE_ACCESS_ERROR;
 1371|  52.3k|        } else {
 1372|       |            /* entry point not found or rejected */
 1373|      1|            *pErrorCode=subErrorCode;
 1374|      1|        }
 1375|  52.3k|    }
 1376|  52.3k|    return retVal;
 1377|  52.3k|}
udata.cpp:_ZL14isTimeZoneFilePKcS0_:
 1107|  53.8k|static UBool isTimeZoneFile(const char *name, const char *type) {
 1108|  53.8k|    return ((uprv_strcmp(type, "res") == 0) &&
  ------------------
  |  |   38|  53.8k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  53.8k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1108:13): [True: 53.8k, False: 0]
  ------------------
 1109|  53.8k|            (uprv_strcmp(name, "zoneinfo64") == 0 ||
  ------------------
  |  |   38|  53.8k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  53.8k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1109:14): [True: 1, False: 53.8k]
  ------------------
 1110|  53.8k|             uprv_strcmp(name, "timezoneTypes") == 0 ||
  ------------------
  |  |   38|  53.8k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  53.8k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1110:14): [True: 1, False: 53.8k]
  ------------------
 1111|  53.8k|             uprv_strcmp(name, "windowsZones") == 0 ||
  ------------------
  |  |   38|  53.8k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  53.8k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1111:14): [True: 0, False: 53.8k]
  ------------------
 1112|  53.8k|             uprv_strcmp(name, "metaZones") == 0));
  ------------------
  |  |   38|  53.8k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  53.8k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1112:14): [True: 0, False: 53.8k]
  ------------------
 1113|  53.8k|}
udata.cpp:_ZL13checkDataItemPK10DataHeaderPFaPvPKcS4_PK9UDataInfoES2_S4_S4_P10UErrorCodeSB_:
  949|  1.49k|{
  950|  1.49k|    UDataMemory  *rDataMem = nullptr;          /* the new UDataMemory, to be returned.        */
  951|       |
  952|  1.49k|    if (U_FAILURE(*fatalErr)) {
  ------------------
  |  Branch (952:9): [True: 0, False: 1.49k]
  ------------------
  953|      0|        return nullptr;
  954|      0|    }
  955|       |
  956|  1.49k|    if(pHeader->dataHeader.magic1==0xda &&
  ------------------
  |  Branch (956:8): [True: 1.49k, False: 0]
  ------------------
  957|  1.49k|        pHeader->dataHeader.magic2==0x27 &&
  ------------------
  |  Branch (957:9): [True: 1.49k, False: 0]
  ------------------
  958|  1.49k|        (isAcceptable==nullptr || isAcceptable(context, type, name, &pHeader->info))
  ------------------
  |  Branch (958:10): [True: 0, False: 1.49k]
  |  Branch (958:35): [True: 1.49k, False: 0]
  ------------------
  959|  1.49k|    ) {
  960|  1.49k|        rDataMem=UDataMemory_createNewInstance(fatalErr);
  ------------------
  |  |   79|  1.49k|#define UDataMemory_createNewInstance U_ICU_ENTRY_POINT_RENAME(UDataMemory_createNewInstance)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  961|  1.49k|        if (U_FAILURE(*fatalErr)) {
  ------------------
  |  Branch (961:13): [True: 0, False: 1.49k]
  ------------------
  962|      0|            return nullptr;
  963|      0|        }
  964|  1.49k|        rDataMem->pHeader = pHeader;
  965|  1.49k|    } 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|  1.49k|    return rDataMem;
  972|  1.49k|}
udata.cpp:_ZL20doLoadFromCommonDataaPKcS0_S0_S0_S0_S0_S0_PFaPvS0_S0_PK9UDataInfoES1_P10UErrorCodeS8_:
 1042|  53.8k|{
 1043|  53.8k|    UDataMemory        *pEntryData;
 1044|  53.8k|    const DataHeader   *pHeader;
 1045|  53.8k|    UDataMemory        *pCommonData;
 1046|  53.8k|    int32_t            commonDataIndex;
 1047|  53.8k|    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|   106k|    for (commonDataIndex = isICUData ? 0 : -1;;) {
  ------------------
  |  Branch (1057:28): [True: 53.8k, False: 0]
  ------------------
 1058|   106k|        pCommonData=openCommonData(path, commonDataIndex, subErrorCode); /** search for pkg **/
 1059|       |
 1060|   106k|        if(U_SUCCESS(*subErrorCode) && pCommonData!=nullptr) {
  ------------------
  |  Branch (1060:12): [True: 106k, False: 0]
  |  Branch (1060:40): [True: 53.8k, False: 52.3k]
  ------------------
 1061|  53.8k|            int32_t length;
 1062|       |
 1063|       |            /* look up the data piece in the common data */
 1064|  53.8k|            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|  53.8k|            if(pHeader!=nullptr) {
  ------------------
  |  Branch (1069:16): [True: 1.49k, False: 52.3k]
  ------------------
 1070|  1.49k|                pEntryData = checkDataItem(pHeader, isAcceptable, context, type, name, subErrorCode, pErrorCode);
 1071|       |#ifdef UDATA_DEBUG
 1072|       |                fprintf(stderr, "pEntryData=%p\n", (void*) pEntryData);
 1073|       |#endif
 1074|  1.49k|                if (U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (1074:21): [True: 0, False: 1.49k]
  ------------------
 1075|      0|                    return nullptr;
 1076|      0|                }
 1077|  1.49k|                if (pEntryData != nullptr) {
  ------------------
  |  Branch (1077:21): [True: 1.49k, False: 0]
  ------------------
 1078|  1.49k|                    pEntryData->length = length;
 1079|  1.49k|                    return pEntryData;
 1080|  1.49k|                }
 1081|  1.49k|            }
 1082|  53.8k|        }
 1083|       |        // If we failed due to being out-of-memory, then stop early and report the error.
 1084|   104k|        if (*subErrorCode == U_MEMORY_ALLOCATION_ERROR) {
  ------------------
  |  Branch (1084:13): [True: 0, False: 104k]
  ------------------
 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|   104k|        if (!isICUData) {
  ------------------
  |  Branch (1091:13): [True: 0, False: 104k]
  ------------------
 1092|      0|            return nullptr;
 1093|   104k|        } else if (pCommonData != nullptr) {
  ------------------
  |  Branch (1093:20): [True: 52.3k, False: 52.3k]
  ------------------
 1094|  52.3k|            ++commonDataIndex;  /* try the next data package */
 1095|  52.3k|        } else if ((!checkedExtendedICUData) && extendICUData(subErrorCode)) {
  ------------------
  |  Branch (1095:20): [True: 52.3k, False: 0]
  |  Branch (1095:49): [True: 0, False: 52.3k]
  ------------------
 1096|      0|            checkedExtendedICUData = true;
 1097|       |            /* try this data package slot again: it changed from nullptr to non-nullptr */
 1098|  52.3k|        } else {
 1099|  52.3k|            return nullptr;
 1100|  52.3k|        }
 1101|   104k|    }
 1102|  53.8k|}
udata.cpp:_ZL14openCommonDataPKciP10UErrorCode:
  673|   106k|{
  674|   106k|    UDataMemory tData;
  675|   106k|    const char *pathBuffer;
  676|   106k|    const char *inBasename;
  677|       |
  678|   106k|    if (U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (678:9): [True: 0, False: 106k]
  ------------------
  679|      0|        return nullptr;
  680|      0|    }
  681|       |
  682|   106k|    UDataMemory_init(&tData);
  ------------------
  |  |   80|   106k|#define UDataMemory_init U_ICU_ENTRY_POINT_RENAME(UDataMemory_init)
  |  |  ------------------
  |  |  |  |  123|   106k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   106k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   106k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  683|       |
  684|       |    /* ??????? TODO revisit this */ 
  685|   106k|    if (commonDataIndex >= 0) {
  ------------------
  |  Branch (685:9): [True: 106k, False: 1]
  ------------------
  686|       |        /* "mini-cache" for common ICU data */
  687|   106k|        if(commonDataIndex >= UPRV_LENGTHOF(gCommonICUDataArray)) {
  ------------------
  |  |   99|   106k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (687:12): [True: 0, False: 106k]
  ------------------
  688|      0|            return nullptr;
  689|      0|        }
  690|   106k|        {
  691|   106k|            Mutex lock;
  692|   106k|            if(gCommonICUDataArray[commonDataIndex] != nullptr) {
  ------------------
  |  Branch (692:16): [True: 53.8k, False: 52.3k]
  ------------------
  693|  53.8k|                return gCommonICUDataArray[commonDataIndex];
  694|  53.8k|            }
  695|  52.3k|#if !defined(ICU_DATA_DIR_WINDOWS)
  696|       |// When using the Windows system data, we expect only a single data file.
  697|  52.3k|            int32_t i;
  698|  52.3k|            for(i = 0; i < commonDataIndex; ++i) {
  ------------------
  |  Branch (698:24): [True: 52.3k, False: 1]
  ------------------
  699|  52.3k|                if(gCommonICUDataArray[i]->pHeader == &U_ICUDATA_ENTRY_POINT) {
  ------------------
  |  |  171|  52.3k|#define U_ICUDATA_ENTRY_POINT  U_DEF2_ICUDATA_ENTRY_POINT(U_ICU_VERSION_MAJOR_NUM,U_LIB_SUFFIX_C_NAME)
  |  |  ------------------
  |  |  |  |  178|  52.3k|#define U_DEF2_ICUDATA_ENTRY_POINT(major,suff) U_DEF_ICUDATA_ENTRY_POINT(major,suff)
  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  52.3k|#define U_DEF_ICUDATA_ENTRY_POINT(major, suff) icudt##major##_dat
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (699:20): [True: 52.3k, False: 0]
  ------------------
  700|       |                    /* The linked-in data is already in the list. */
  701|  52.3k|                    return nullptr;
  702|  52.3k|                }
  703|  52.3k|            }
  704|  52.3k|#endif
  705|  52.3k|        }
  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|  52.3k|        }
  727|  52.3k|#endif
  728|  52.3k|    }
  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|  52.3k|{
  307|  52.3k|    UHashtable        *htable;
  308|  52.3k|    UDataMemory       *retVal = nullptr;
  309|  52.3k|    DataCacheElement  *el;
  310|  52.3k|    const char        *baseName;
  311|       |
  312|  52.3k|    htable = udata_getHashTable(err);
  313|  52.3k|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (313:9): [True: 1, False: 52.3k]
  ------------------
  314|      1|        return nullptr;
  315|      1|    }
  316|       |
  317|  52.3k|    baseName = findBasename(path);   /* Cache remembers only the base name, not the full path. */
  318|  52.3k|    umtx_lock(nullptr);
  ------------------
  |  | 1250|  52.3k|#define umtx_lock U_ICU_ENTRY_POINT_RENAME(umtx_lock)
  |  |  ------------------
  |  |  |  |  123|  52.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  52.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  52.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  319|  52.3k|    el = static_cast<DataCacheElement*>(uhash_get(htable, baseName));
  ------------------
  |  | 1007|  52.3k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|  52.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  52.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  52.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  320|  52.3k|    umtx_unlock(nullptr);
  ------------------
  |  | 1251|  52.3k|#define umtx_unlock U_ICU_ENTRY_POINT_RENAME(umtx_unlock)
  |  |  ------------------
  |  |  |  |  123|  52.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  52.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  52.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  321|  52.3k|    if (el != nullptr) {
  ------------------
  |  Branch (321:9): [True: 0, False: 52.3k]
  ------------------
  322|      0|        retVal = el->item;
  323|      0|    }
  324|       |#ifdef UDATA_DEBUG
  325|       |    fprintf(stderr, "Cache: [%s] -> %p\n", baseName, (void*) retVal);
  326|       |#endif
  327|  52.3k|    return retVal;
  328|  52.3k|}
udata.cpp:_ZL13extendICUDataP10UErrorCode:
  811|  52.3k|{
  812|  52.3k|    UDataMemory   *pData;
  813|  52.3k|    UDataMemory   copyPData;
  814|  52.3k|    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|  52.3k|    if(!umtx_loadAcquire(gHaveTriedToLoadCommonData)) {
  ------------------
  |  Branch (830:8): [True: 1, False: 52.3k]
  ------------------
  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|  52.3k|    didUpdate = findCommonICUDataByName(U_ICUDATA_NAME, *pErr);  /* Return 'true' when a racing writes out the extended                 */
  ------------------
  |  |  154|  52.3k|#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER
  |  |  ------------------
  |  |  |  |  144|  52.3k|#     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|  52.3k|    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|  52.3k|}
udata.cpp:_ZL23findCommonICUDataByNamePKcR10UErrorCode:
  144|  52.3k|{
  145|  52.3k|    UBool found = false;
  146|  52.3k|    int32_t i;
  147|       |
  148|  52.3k|    UDataMemory  *pData = udata_findCachedData(inBasename, err);
  149|  52.3k|    if (U_FAILURE(err) || pData == nullptr)
  ------------------
  |  Branch (149:9): [True: 1, False: 52.3k]
  |  Branch (149:27): [True: 52.3k, False: 0]
  ------------------
  150|  52.3k|        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|  52.3k|}

UDataMemory_init_78:
   28|   107k|U_CFUNC void UDataMemory_init(UDataMemory *This) {
   29|   107k|    uprv_memset(This, 0, sizeof(UDataMemory));
  ------------------
  |  |  100|   107k|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|   107k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
   30|   107k|    This->length=-1;
   31|   107k|}
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|  1.49k|U_CFUNC UDataMemory *UDataMemory_createNewInstance(UErrorCode *pErr) {
   42|  1.49k|    UDataMemory *This;
   43|       |
   44|  1.49k|    if (U_FAILURE(*pErr)) {
  ------------------
  |  Branch (44:9): [True: 0, False: 1.49k]
  ------------------
   45|      0|        return nullptr;
   46|      0|    }
   47|  1.49k|    This = (UDataMemory *)uprv_malloc(sizeof(UDataMemory));
  ------------------
  |  | 1524|  1.49k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   48|  1.49k|    if (This == nullptr) {
  ------------------
  |  Branch (48:9): [True: 0, False: 1.49k]
  ------------------
   49|      0|        *pErr = U_MEMORY_ALLOCATION_ERROR; }
   50|  1.49k|    else {
   51|  1.49k|        UDataMemory_init(This);
  ------------------
  |  |   80|  1.49k|#define UDataMemory_init U_ICU_ENTRY_POINT_RENAME(UDataMemory_init)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   52|  1.49k|        This->heapAllocated = true;
   53|  1.49k|    }
   54|  1.49k|    return This;
   55|  1.49k|}
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|  1.49k|udata_getMemory(UDataMemory *pData) {
  105|  1.49k|    if(pData!=nullptr && pData->pHeader!=nullptr) {
  ------------------
  |  Branch (105:8): [True: 1.49k, False: 0]
  |  Branch (105:26): [True: 1.49k, False: 0]
  ------------------
  106|  1.49k|        return (char *)(pData->pHeader)+udata_getHeaderSize(pData->pHeader);
  ------------------
  |  |  887|  1.49k|#define udata_getHeaderSize U_ICU_ENTRY_POINT_RENAME(udata_getHeaderSize)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|  1.49k|    } else {
  108|      0|        return nullptr;
  109|      0|    }
  110|  1.49k|}
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|     48|           UErrorCode *status) {
  548|       |
  549|     48|    return _uhash_create(keyHash, keyComp, valueComp, DEFAULT_PRIME_INDEX, status);
  ------------------
  |  |   91|     48|#define DEFAULT_PRIME_INDEX 4
  ------------------
  550|     48|}
uhash_openSize_78:
  557|      7|               UErrorCode *status) {
  558|       |
  559|       |    /* Find the smallest index i for which PRIMES[i] >= size. */
  560|      7|    int32_t i = 0;
  561|     28|    while (i<(PRIMES_LENGTH-1) && PRIMES[i]<size) {
  ------------------
  |  |   90|     28|#define PRIMES_LENGTH UPRV_LENGTHOF(PRIMES)
  |  |  ------------------
  |  |  |  |   99|     28|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  |  |  ------------------
  ------------------
  |  Branch (561:12): [True: 28, False: 0]
  |  Branch (561:35): [True: 21, False: 7]
  ------------------
  562|     21|        ++i;
  563|     21|    }
  564|       |
  565|      7|    return _uhash_create(keyHash, keyComp, valueComp, i, status);
  566|      7|}
uhash_init_78:
  573|  13.5k|           UErrorCode *status) {
  574|       |
  575|  13.5k|    return _uhash_init(fillinResult, keyHash, keyComp, valueComp, DEFAULT_PRIME_INDEX, status);
  ------------------
  |  |   91|  13.5k|#define DEFAULT_PRIME_INDEX 4
  ------------------
  576|  13.5k|}
uhash_close_78:
  595|  13.5k|uhash_close(UHashtable *hash) {
  596|  13.5k|    if (hash == nullptr) {
  ------------------
  |  Branch (596:9): [True: 14, False: 13.5k]
  ------------------
  597|     14|        return;
  598|     14|    }
  599|  13.5k|    if (hash->elements != nullptr) {
  ------------------
  |  Branch (599:9): [True: 13.5k, False: 0]
  ------------------
  600|  13.5k|        if (hash->keyDeleter != nullptr || hash->valueDeleter != nullptr) {
  ------------------
  |  Branch (600:13): [True: 13.5k, False: 2]
  |  Branch (600:44): [True: 0, False: 2]
  ------------------
  601|  13.5k|            int32_t pos=UHASH_FIRST;
  ------------------
  |  |  610|  13.5k|#define UHASH_FIRST (-1)
  ------------------
  602|  13.5k|            UHashElement *e;
  603|   662k|            while ((e = (UHashElement*) uhash_nextElement(hash, &pos)) != nullptr) {
  ------------------
  |  | 1029|   662k|#define uhash_nextElement U_ICU_ENTRY_POINT_RENAME(uhash_nextElement)
  |  |  ------------------
  |  |  |  |  123|   662k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   662k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   662k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (603:20): [True: 649k, False: 13.5k]
  ------------------
  604|   649k|                HASH_DELETE_KEY_VALUE(hash, e->key.pointer, e->value.pointer);
  ------------------
  |  |  124|   649k|#define HASH_DELETE_KEY_VALUE(hash, keypointer, valuepointer) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|   649k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |  125|   649k|    if (hash->keyDeleter != nullptr && keypointer != nullptr) { \
  |  |  ------------------
  |  |  |  Branch (125:9): [True: 649k, False: 0]
  |  |  |  Branch (125:40): [True: 649k, False: 0]
  |  |  ------------------
  |  |  126|   649k|        (*hash->keyDeleter)(keypointer); \
  |  |  127|   649k|    } \
  |  |  128|   649k|    if (hash->valueDeleter != nullptr && valuepointer != nullptr) { \
  |  |  ------------------
  |  |  |  Branch (128:9): [True: 0, False: 649k]
  |  |  |  Branch (128:42): [True: 0, False: 0]
  |  |  ------------------
  |  |  129|      0|        (*hash->valueDeleter)(valuepointer); \
  |  |  130|      0|    } \
  |  |  131|   649k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|   649k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  605|   649k|            }
  606|  13.5k|        }
  607|  13.5k|        uprv_free(hash->elements);
  ------------------
  |  | 1503|  13.5k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  608|  13.5k|        hash->elements = nullptr;
  609|  13.5k|    }
  610|  13.5k|    if (hash->allocated) {
  ------------------
  |  Branch (610:9): [True: 0, False: 13.5k]
  ------------------
  611|      0|        uprv_free(hash);
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  612|      0|    }
  613|  13.5k|}
uhash_setKeyDeleter_78:
  636|  13.5k|uhash_setKeyDeleter(UHashtable *hash, UObjectDeleter *fn) {
  637|  13.5k|    UObjectDeleter *result = hash->keyDeleter;
  638|  13.5k|    hash->keyDeleter = fn;
  639|  13.5k|    return result;
  640|  13.5k|}
uhash_setValueDeleter_78:
  643|      4|uhash_setValueDeleter(UHashtable *hash, UObjectDeleter *fn) {
  644|      4|    UObjectDeleter *result = hash->valueDeleter;
  645|      4|    hash->valueDeleter = fn;
  646|      4|    return result;
  647|      4|}
uhash_count_78:
  659|  20.6k|uhash_count(const UHashtable *hash) {
  660|  20.6k|    return hash->count;
  661|  20.6k|}
uhash_get_78:
  665|  3.29M|          const void* key) {
  666|  3.29M|    UHashTok keyholder;
  667|  3.29M|    keyholder.pointer = (void*) key;
  668|  3.29M|    return _uhash_find(hash, keyholder, hash->keyHasher(keyholder))->value.pointer;
  669|  3.29M|}
uhash_geti_78:
  681|  1.12M|           const void* key) {
  682|  1.12M|    UHashTok keyholder;
  683|  1.12M|    keyholder.pointer = (void*) key;
  684|  1.12M|    return _uhash_find(hash, keyholder, hash->keyHasher(keyholder))->value.integer;
  685|  1.12M|}
uhash_put_78:
  721|  65.8k|          UErrorCode *status) {
  722|  65.8k|    UHashTok keyholder, valueholder;
  723|  65.8k|    keyholder.pointer = key;
  724|  65.8k|    valueholder.pointer = value;
  725|  65.8k|    return _uhash_put(hash, keyholder, valueholder,
  726|  65.8k|                      HINT_KEY_POINTER | HINT_VALUE_POINTER,
  ------------------
  |  |  139|  65.8k|#define HINT_KEY_POINTER   (1)
  ------------------
                                    HINT_KEY_POINTER | HINT_VALUE_POINTER,
  ------------------
  |  |  140|  65.8k|#define HINT_VALUE_POINTER (2)
  ------------------
  727|  65.8k|                      status).pointer;
  728|  65.8k|}
uhash_iput_78:
  734|    338|           UErrorCode *status) {
  735|    338|    UHashTok keyholder, valueholder;
  736|    338|    keyholder.integer = key;
  737|    338|    valueholder.pointer = value;
  738|    338|    return _uhash_put(hash, keyholder, valueholder,
  739|    338|                      HINT_VALUE_POINTER,
  ------------------
  |  |  140|    338|#define HINT_VALUE_POINTER (2)
  ------------------
  740|    338|                      status).pointer;
  741|    338|}
uhash_puti_78:
  747|   658k|           UErrorCode *status) {
  748|   658k|    UHashTok keyholder, valueholder;
  749|   658k|    keyholder.pointer = key;
  750|   658k|    valueholder.integer = value;
  751|   658k|    return _uhash_put(hash, keyholder, valueholder,
  752|   658k|                      HINT_KEY_POINTER,
  ------------------
  |  |  139|   658k|#define HINT_KEY_POINTER   (1)
  ------------------
  753|   658k|                      status).integer;
  754|   658k|}
uhash_find_78:
  866|  20.6k|uhash_find(const UHashtable *hash, const void* key) {
  867|  20.6k|    UHashTok keyholder;
  868|  20.6k|    const UHashElement *e;
  869|  20.6k|    keyholder.pointer = (void*) key;
  870|  20.6k|    e = _uhash_find(hash, keyholder, hash->keyHasher(keyholder));
  871|  20.6k|    return IS_EMPTY_OR_DELETED(e->hashcode) ? nullptr : e;
  ------------------
  |  |  120|  20.6k|#define IS_EMPTY_OR_DELETED(x) ((x) < 0)
  |  |  ------------------
  |  |  |  Branch (120:32): [True: 7.16k, False: 13.5k]
  |  |  ------------------
  ------------------
  872|  20.6k|}
uhash_nextElement_78:
  875|   669k|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|   669k|    int32_t i;
  880|   669k|    U_ASSERT(hash != nullptr);
  ------------------
  |  |   35|   669k|#   define U_ASSERT(exp) (void)0
  ------------------
  881|  1.73M|    for (i = *pos + 1; i < hash->length; ++i) {
  ------------------
  |  Branch (881:24): [True: 1.72M, False: 13.5k]
  ------------------
  882|  1.72M|        if (!IS_EMPTY_OR_DELETED(hash->elements[i].hashcode)) {
  ------------------
  |  |  120|  1.72M|#define IS_EMPTY_OR_DELETED(x) ((x) < 0)
  ------------------
  |  Branch (882:13): [True: 656k, False: 1.06M]
  ------------------
  883|   656k|            *pos = i;
  884|   656k|            return &(hash->elements[i]);
  885|   656k|        }
  886|  1.72M|    }
  887|       |
  888|       |    /* No more elements */
  889|  13.5k|    return nullptr;
  890|   669k|}
uhash_removeElement_78:
  893|  6.16k|uhash_removeElement(UHashtable *hash, const UHashElement* e) {
  894|  6.16k|    U_ASSERT(hash != nullptr);
  ------------------
  |  |   35|  6.16k|#   define U_ASSERT(exp) (void)0
  ------------------
  895|  6.16k|    U_ASSERT(e != nullptr);
  ------------------
  |  |   35|  6.16k|#   define U_ASSERT(exp) (void)0
  ------------------
  896|  6.16k|    if (!IS_EMPTY_OR_DELETED(e->hashcode)) {
  ------------------
  |  |  120|  6.16k|#define IS_EMPTY_OR_DELETED(x) ((x) < 0)
  ------------------
  |  Branch (896:9): [True: 6.16k, False: 0]
  ------------------
  897|  6.16k|        UHashElement *nce = (UHashElement *)e;
  898|  6.16k|        return _uhash_internalRemoveElement(hash, nce).pointer;
  899|  6.16k|    }
  900|      0|    return nullptr;
  901|  6.16k|}
uhash_hashUChars_78:
  932|  40.5k|uhash_hashUChars(const UHashTok key) {
  933|  40.5k|    const char16_t *s = (const char16_t *)key.pointer;
  934|  40.5k|    return s == nullptr ? 0 : ustr_hashUCharsN(s, u_strlen(s));
  ------------------
  |  | 1880|  40.5k|#define ustr_hashUCharsN U_ICU_ENTRY_POINT_RENAME(ustr_hashUCharsN)
  |  |  ------------------
  |  |  |  |  123|  40.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  40.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  40.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return s == nullptr ? 0 : ustr_hashUCharsN(s, u_strlen(s));
  ------------------
  |  |  393|  40.5k|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|  40.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  40.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  40.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (934:12): [True: 0, False: 40.5k]
  ------------------
  935|  40.5k|}
uhash_hashChars_78:
  938|  3.70M|uhash_hashChars(const UHashTok key) {
  939|  3.70M|    const char *s = (const char *)key.pointer;
  940|  3.70M|    return s == nullptr ? 0 : static_cast<int32_t>(ustr_hashCharsN(s, static_cast<int32_t>(uprv_strlen(s))));
  ------------------
  |  | 1878|  2.07M|#define ustr_hashCharsN U_ICU_ENTRY_POINT_RENAME(ustr_hashCharsN)
  |  |  ------------------
  |  |  |  |  123|  2.07M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.07M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.07M|#       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|  2.07M|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  2.07M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (940:12): [True: 1.63M, False: 2.07M]
  ------------------
  941|  3.70M|}
uhash_hashIStringView_78:
  950|  1.43M|uhash_hashIStringView(const UHashTok key) {
  951|  1.43M|    const std::string_view* s = static_cast<std::string_view*>(key.pointer);
  952|  1.43M|    return s == nullptr ? 0 : ustr_hashICharsN(s->data(), static_cast<int32_t>(s->size()));
  ------------------
  |  | 1879|  1.43M|#define ustr_hashICharsN U_ICU_ENTRY_POINT_RENAME(ustr_hashICharsN)
  |  |  ------------------
  |  |  |  |  123|  1.43M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.43M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.43M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (952:12): [True: 0, False: 1.43M]
  ------------------
  953|  1.43M|}
uhash_compareUChars_78:
 1012|  15.6k|uhash_compareUChars(const UHashTok key1, const UHashTok key2) {
 1013|  15.6k|    const char16_t *p1 = (const char16_t*) key1.pointer;
 1014|  15.6k|    const char16_t *p2 = (const char16_t*) key2.pointer;
 1015|  15.6k|    if (p1 == p2) {
  ------------------
  |  Branch (1015:9): [True: 519, False: 15.1k]
  ------------------
 1016|    519|        return true;
 1017|    519|    }
 1018|  15.1k|    if (p1 == nullptr || p2 == nullptr) {
  ------------------
  |  Branch (1018:9): [True: 0, False: 15.1k]
  |  Branch (1018:26): [True: 0, False: 15.1k]
  ------------------
 1019|      0|        return false;
 1020|      0|    }
 1021|  60.4k|    while (*p1 != 0 && *p1 == *p2) {
  ------------------
  |  Branch (1021:12): [True: 45.2k, False: 15.1k]
  |  Branch (1021:24): [True: 45.2k, False: 0]
  ------------------
 1022|  45.2k|        ++p1;
 1023|  45.2k|        ++p2;
 1024|  45.2k|    }
 1025|  15.1k|    return *p1 == *p2;
 1026|  15.1k|}
uhash_compareChars_78:
 1029|  3.51M|uhash_compareChars(const UHashTok key1, const UHashTok key2) {
 1030|  3.51M|    const char *p1 = (const char*) key1.pointer;
 1031|  3.51M|    const char *p2 = (const char*) key2.pointer;
 1032|  3.51M|    if (p1 == p2) {
  ------------------
  |  Branch (1032:9): [True: 1.54M, False: 1.96M]
  ------------------
 1033|  1.54M|        return true;
 1034|  1.54M|    }
 1035|  1.96M|    if (p1 == nullptr || p2 == nullptr) {
  ------------------
  |  Branch (1035:9): [True: 0, False: 1.96M]
  |  Branch (1035:26): [True: 0, False: 1.96M]
  ------------------
 1036|      0|        return false;
 1037|      0|    }
 1038|  51.8M|    while (*p1 != 0 && *p1 == *p2) {
  ------------------
  |  Branch (1038:12): [True: 49.9M, False: 1.84M]
  |  Branch (1038:24): [True: 49.8M, False: 113k]
  ------------------
 1039|  49.8M|        ++p1;
 1040|  49.8M|        ++p2;
 1041|  49.8M|    }
 1042|  1.96M|    return *p1 == *p2;
 1043|  1.96M|}
uhash_compareIStringView_78:
 1063|  98.1k|uhash_compareIStringView(const UHashTok key1, const UHashTok key2) {
 1064|  98.1k|    const std::string_view* p1 = static_cast<std::string_view*>(key1.pointer);
 1065|  98.1k|    const std::string_view* p2 = static_cast<std::string_view*>(key2.pointer);
 1066|  98.1k|    if (p1 == p2) {
  ------------------
  |  Branch (1066:9): [True: 0, False: 98.1k]
  ------------------
 1067|      0|        return true;
 1068|      0|    }
 1069|  98.1k|    if (p1 == nullptr || p2 == nullptr) {
  ------------------
  |  Branch (1069:9): [True: 0, False: 98.1k]
  |  Branch (1069:26): [True: 0, False: 98.1k]
  ------------------
 1070|      0|        return false;
 1071|      0|    }
 1072|  98.1k|    const std::string_view& v1 = *p1;
 1073|  98.1k|    const std::string_view& v2 = *p2;
 1074|  98.1k|    if (v1.size() != v2.size()) {
  ------------------
  |  Branch (1074:9): [True: 77, False: 98.0k]
  ------------------
 1075|     77|        return false;
 1076|     77|    }
 1077|   320k|    for (size_t i = 0; i < v1.size(); ++i) {
  ------------------
  |  Branch (1077:24): [True: 223k, False: 97.1k]
  ------------------
 1078|   223k|        if (uprv_tolower(v1[i]) != uprv_tolower(v2[i])) {
  ------------------
  |  |   68|   223k|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|   223k|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|   223k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|   223k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|   223k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (uprv_tolower(v1[i]) != uprv_tolower(v2[i])) {
  ------------------
  |  |   68|   223k|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|   223k|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|   223k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|   223k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|   223k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1078:13): [True: 969, False: 222k]
  ------------------
 1079|    969|            return false;
 1080|    969|        }
 1081|   223k|    }
 1082|  97.1k|    return true;
 1083|  98.0k|}
uhash_hashLong_78:
 1090|    338|uhash_hashLong(const UHashTok key) {
 1091|    338|    return key.integer;
 1092|    338|}
uhash_compareLong_78:
 1095|      5|uhash_compareLong(const UHashTok key1, const UHashTok key2) {
 1096|      5|    return key1.integer == key2.integer;
 1097|      5|}
uhash.cpp:_ZL13_uhash_createPFi8UElementEPFaS_S_ES3_iP10UErrorCode:
  287|     55|              UErrorCode *status) {
  288|     55|    UHashtable *result;
  289|       |
  290|     55|    if (U_FAILURE(*status)) return nullptr;
  ------------------
  |  Branch (290:9): [True: 0, False: 55]
  ------------------
  291|       |
  292|     55|    result = static_cast<UHashtable*>(uprv_malloc(sizeof(UHashtable)));
  ------------------
  |  | 1524|     55|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  293|     55|    if (result == nullptr) {
  ------------------
  |  Branch (293:9): [True: 0, False: 55]
  ------------------
  294|      0|        *status = U_MEMORY_ALLOCATION_ERROR;
  295|      0|        return nullptr;
  296|      0|    }
  297|       |
  298|     55|    _uhash_init(result, keyHash, keyComp, valueComp, primeIndex, status);
  299|     55|    result->allocated       = true;
  300|       |
  301|     55|    if (U_FAILURE(*status)) {
  ------------------
  |  Branch (301:9): [True: 0, False: 55]
  ------------------
  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|     55|    return result;
  307|     55|}
uhash.cpp:_ZL11_uhash_initP10UHashtablePFi8UElementEPFaS1_S1_ES5_iP10UErrorCode:
  260|  13.5k|{
  261|  13.5k|    if (U_FAILURE(*status)) return nullptr;
  ------------------
  |  Branch (261:9): [True: 0, False: 13.5k]
  ------------------
  262|  13.5k|    U_ASSERT(keyHash != nullptr);
  ------------------
  |  |   35|  13.5k|#   define U_ASSERT(exp) (void)0
  ------------------
  263|  13.5k|    U_ASSERT(keyComp != nullptr);
  ------------------
  |  |   35|  13.5k|#   define U_ASSERT(exp) (void)0
  ------------------
  264|       |
  265|  13.5k|    result->keyHasher       = keyHash;
  266|  13.5k|    result->keyComparator   = keyComp;
  267|  13.5k|    result->valueComparator = valueComp;
  268|  13.5k|    result->keyDeleter      = nullptr;
  269|  13.5k|    result->valueDeleter    = nullptr;
  270|  13.5k|    result->allocated       = false;
  271|  13.5k|    _uhash_internalSetResizePolicy(result, U_GROW);
  272|       |
  273|  13.5k|    _uhash_allocate(result, primeIndex, status);
  274|       |
  275|  13.5k|    if (U_FAILURE(*status)) {
  ------------------
  |  Branch (275:9): [True: 0, False: 13.5k]
  ------------------
  276|      0|        return nullptr;
  277|      0|    }
  278|       |
  279|  13.5k|    return result;
  280|  13.5k|}
uhash.cpp:_ZL15_uhash_allocateP10UHashtableiP10UErrorCode:
  217|  13.6k|                UErrorCode *status) {
  218|       |
  219|  13.6k|    UHashElement *p, *limit;
  220|  13.6k|    UHashTok emptytok;
  221|       |
  222|  13.6k|    if (U_FAILURE(*status)) return;
  ------------------
  |  Branch (222:9): [True: 0, False: 13.6k]
  ------------------
  223|       |
  224|  13.6k|    U_ASSERT(primeIndex >= 0 && primeIndex < PRIMES_LENGTH);
  ------------------
  |  |   35|  13.6k|#   define U_ASSERT(exp) (void)0
  ------------------
  225|       |
  226|  13.6k|    hash->primeIndex = static_cast<int8_t>(primeIndex);
  227|  13.6k|    hash->length = PRIMES[primeIndex];
  228|       |
  229|  13.6k|    p = hash->elements = static_cast<UHashElement*>(
  230|  13.6k|        uprv_malloc(sizeof(UHashElement) * hash->length));
  ------------------
  |  | 1524|  13.6k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  13.6k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.6k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.6k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|       |
  232|  13.6k|    if (hash->elements == nullptr) {
  ------------------
  |  Branch (232:9): [True: 0, False: 13.6k]
  ------------------
  233|      0|        *status = U_MEMORY_ALLOCATION_ERROR;
  234|      0|        return;
  235|      0|    }
  236|       |
  237|  13.6k|    emptytok.pointer = nullptr; /* Only one of these two is needed */
  238|  13.6k|    emptytok.integer = 0;    /* but we don't know which one. */
  239|       |
  240|  13.6k|    limit = p + hash->length;
  241|  2.06M|    while (p < limit) {
  ------------------
  |  Branch (241:12): [True: 2.05M, False: 13.6k]
  ------------------
  242|  2.05M|        p->key = emptytok;
  243|  2.05M|        p->value = emptytok;
  244|  2.05M|        p->hashcode = HASH_EMPTY;
  ------------------
  |  |  118|  2.05M|#define HASH_EMPTY      ((int32_t) HASH_DELETED + 1)
  |  |  ------------------
  |  |  |  |  117|  2.05M|#define HASH_DELETED    ((int32_t) 0x80000000)
  |  |  ------------------
  ------------------
  245|  2.05M|        ++p;
  246|  2.05M|    }
  247|       |
  248|  13.6k|    hash->count = 0;
  249|  13.6k|    hash->lowWaterMark = static_cast<int32_t>(hash->length * hash->lowWaterRatio);
  250|  13.6k|    hash->highWaterMark = static_cast<int32_t>(hash->length * hash->highWaterRatio);
  251|  13.6k|}
uhash.cpp:_ZL30_uhash_internalSetResizePolicyP10UHashtable17UHashResizePolicy:
  197|  13.5k|_uhash_internalSetResizePolicy(UHashtable *hash, enum UHashResizePolicy policy) {
  198|  13.5k|    U_ASSERT(hash != nullptr);
  ------------------
  |  |   35|  13.5k|#   define U_ASSERT(exp) (void)0
  ------------------
  199|  13.5k|    U_ASSERT(((int32_t)policy) >= 0);
  ------------------
  |  |   35|  13.5k|#   define U_ASSERT(exp) (void)0
  ------------------
  200|  13.5k|    U_ASSERT(((int32_t)policy) < 3);
  ------------------
  |  |   35|  13.5k|#   define U_ASSERT(exp) (void)0
  ------------------
  201|  13.5k|    hash->lowWaterRatio  = RESIZE_POLICY_RATIO_TABLE[policy * 2];
  202|  13.5k|    hash->highWaterRatio = RESIZE_POLICY_RATIO_TABLE[policy * 2 + 1];
  203|  13.5k|}
uhash.cpp:_ZL13_uhash_rehashP10UHashtableP10UErrorCode:
  399|     59|_uhash_rehash(UHashtable *hash, UErrorCode *status) {
  400|       |
  401|     59|    UHashElement *old = hash->elements;
  402|     59|    int32_t oldLength = hash->length;
  403|     59|    int32_t newPrimeIndex = hash->primeIndex;
  404|     59|    int32_t i;
  405|       |
  406|     59|    if (hash->count > hash->highWaterMark) {
  ------------------
  |  Branch (406:9): [True: 59, False: 0]
  ------------------
  407|     59|        if (++newPrimeIndex >= PRIMES_LENGTH) {
  ------------------
  |  |   90|     59|#define PRIMES_LENGTH UPRV_LENGTHOF(PRIMES)
  |  |  ------------------
  |  |  |  |   99|     59|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  |  |  ------------------
  ------------------
  |  Branch (407:13): [True: 0, False: 59]
  ------------------
  408|      0|            return;
  409|      0|        }
  410|     59|    } 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|     59|    _uhash_allocate(hash, newPrimeIndex, status);
  419|       |
  420|     59|    if (U_FAILURE(*status)) {
  ------------------
  |  Branch (420:9): [True: 0, False: 59]
  ------------------
  421|      0|        hash->elements = old;
  422|      0|        hash->length = oldLength;
  423|      0|        return;
  424|      0|    }
  425|       |
  426|   163k|    for (i = oldLength - 1; i >= 0; --i) {
  ------------------
  |  Branch (426:29): [True: 163k, False: 59]
  ------------------
  427|   163k|        if (!IS_EMPTY_OR_DELETED(old[i].hashcode)) {
  ------------------
  |  |  120|   163k|#define IS_EMPTY_OR_DELETED(x) ((x) < 0)
  ------------------
  |  Branch (427:13): [True: 81.6k, False: 81.5k]
  ------------------
  428|  81.6k|            UHashElement *e = _uhash_find(hash, old[i].key, old[i].hashcode);
  429|  81.6k|            U_ASSERT(e != nullptr);
  ------------------
  |  |   35|  81.6k|#   define U_ASSERT(exp) (void)0
  ------------------
  430|  81.6k|            U_ASSERT(e->hashcode == HASH_EMPTY);
  ------------------
  |  |   35|  81.6k|#   define U_ASSERT(exp) (void)0
  ------------------
  431|  81.6k|            e->key = old[i].key;
  432|  81.6k|            e->value = old[i].value;
  433|  81.6k|            e->hashcode = old[i].hashcode;
  434|  81.6k|            ++hash->count;
  435|  81.6k|        }
  436|   163k|    }
  437|       |
  438|     59|    uprv_free(old);
  ------------------
  |  | 1503|     59|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|     59|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     59|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     59|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  439|     59|}
uhash.cpp:_ZL11_uhash_findPK10UHashtable8UElementi:
  339|  5.25M|            int32_t hashcode) {
  340|       |
  341|  5.25M|    int32_t firstDeleted = -1;  /* assume invalid index */
  342|  5.25M|    int32_t theIndex, startIndex;
  343|  5.25M|    int32_t jump = 0; /* lazy evaluate */
  344|  5.25M|    int32_t tableHash;
  345|  5.25M|    UHashElement *elements = hash->elements;
  346|       |
  347|  5.25M|    hashcode &= 0x7FFFFFFF; /* must be positive */
  348|  5.25M|    startIndex = theIndex = (hashcode ^ 0x4000000) % hash->length;
  349|       |
  350|  8.58M|    do {
  351|  8.58M|        tableHash = elements[theIndex].hashcode;
  352|  8.58M|        if (tableHash == hashcode) {          /* quick check */
  ------------------
  |  Branch (352:13): [True: 2.46M, False: 6.11M]
  ------------------
  353|  2.46M|            if ((*hash->keyComparator)(key, elements[theIndex].key)) {
  ------------------
  |  Branch (353:17): [True: 2.22M, False: 246k]
  ------------------
  354|  2.22M|                return &(elements[theIndex]);
  355|  2.22M|            }
  356|  6.11M|        } else if (!IS_EMPTY_OR_DELETED(tableHash)) {
  ------------------
  |  |  120|  6.11M|#define IS_EMPTY_OR_DELETED(x) ((x) < 0)
  ------------------
  |  Branch (356:20): [True: 2.87M, False: 3.24M]
  ------------------
  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|  3.24M|        } else if (tableHash == HASH_EMPTY) { /* empty, end o' the line */
  ------------------
  |  |  118|  3.24M|#define HASH_EMPTY      ((int32_t) HASH_DELETED + 1)
  |  |  ------------------
  |  |  |  |  117|  3.24M|#define HASH_DELETED    ((int32_t) 0x80000000)
  |  |  ------------------
  ------------------
  |  Branch (361:20): [True: 3.03M, False: 213k]
  ------------------
  362|  3.03M|            break;
  363|  3.03M|        } else if (firstDeleted < 0) { /* remember first deleted */
  ------------------
  |  Branch (363:20): [True: 10.9k, False: 202k]
  ------------------
  364|  10.9k|            firstDeleted = theIndex;
  365|  10.9k|        }
  366|  3.33M|        if (jump == 0) { /* lazy compute jump */
  ------------------
  |  Branch (366:13): [True: 1.42M, False: 1.91M]
  ------------------
  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|  1.42M|            jump = (hashcode % (hash->length - 1)) + 1;
  372|  1.42M|        }
  373|  3.33M|        theIndex = (theIndex + jump) % hash->length;
  374|  3.33M|    } while (theIndex != startIndex);
  ------------------
  |  Branch (374:14): [True: 3.33M, False: 0]
  ------------------
  375|       |
  376|  3.03M|    if (firstDeleted >= 0) {
  ------------------
  |  Branch (376:9): [True: 10.2k, False: 3.02M]
  ------------------
  377|  10.2k|        theIndex = firstDeleted; /* reset if had deleted slot */
  378|  3.02M|    } else if (tableHash != HASH_EMPTY) {
  ------------------
  |  |  118|  3.02M|#define HASH_EMPTY      ((int32_t) HASH_DELETED + 1)
  |  |  ------------------
  |  |  |  |  117|  3.02M|#define HASH_DELETED    ((int32_t) 0x80000000)
  |  |  ------------------
  ------------------
  |  Branch (378:16): [True: 0, False: 3.02M]
  ------------------
  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|  3.03M|    return &(elements[theIndex]);
  387|  3.03M|}
uhash.cpp:_ZL10_uhash_putP10UHashtable8UElementS1_aP10UErrorCode:
  471|   724k|           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|   724k|    int32_t hashcode;
  479|   724k|    UHashElement* e;
  480|   724k|    UHashTok emptytok;
  481|       |
  482|   724k|    if (U_FAILURE(*status)) {
  ------------------
  |  Branch (482:9): [True: 0, False: 724k]
  ------------------
  483|      0|        goto err;
  484|      0|    }
  485|   724k|    U_ASSERT(hash != nullptr);
  ------------------
  |  |   35|   724k|#   define U_ASSERT(exp) (void)0
  ------------------
  486|   724k|    if ((hint & HINT_VALUE_POINTER) ?
  ------------------
  |  |  140|   724k|#define HINT_VALUE_POINTER (2)
  ------------------
  |  Branch (486:9): [True: 66.2k, False: 658k]
  |  Branch (486:9): [True: 0, False: 724k]
  ------------------
  487|  66.2k|            value.pointer == nullptr :
  488|   724k|            value.integer == 0 && (hint & HINT_ALLOW_ZERO) == 0) {
  ------------------
  |  |  141|      0|#define HINT_ALLOW_ZERO    (4)
  ------------------
  |  Branch (488:13): [True: 0, False: 658k]
  |  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|   724k|    if (hash->count > hash->highWaterMark) {
  ------------------
  |  Branch (494:9): [True: 59, False: 724k]
  ------------------
  495|     59|        _uhash_rehash(hash, status);
  496|     59|        if (U_FAILURE(*status)) {
  ------------------
  |  Branch (496:13): [True: 0, False: 59]
  ------------------
  497|      0|            goto err;
  498|      0|        }
  499|     59|    }
  500|       |
  501|   724k|    hashcode = (*hash->keyHasher)(key);
  502|   724k|    e = _uhash_find(hash, key, hashcode);
  503|   724k|    U_ASSERT(e != nullptr);
  ------------------
  |  |   35|   724k|#   define U_ASSERT(exp) (void)0
  ------------------
  504|       |
  505|   724k|    if (IS_EMPTY_OR_DELETED(e->hashcode)) {
  ------------------
  |  |  120|   724k|#define IS_EMPTY_OR_DELETED(x) ((x) < 0)
  |  |  ------------------
  |  |  |  Branch (120:32): [True: 724k, False: 263]
  |  |  ------------------
  ------------------
  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|   724k|        ++hash->count;
  514|   724k|        if (hash->count == hash->length) {
  ------------------
  |  Branch (514:13): [True: 0, False: 724k]
  ------------------
  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|   724k|    }
  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|   724k|    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|   724k|}
uhash.cpp:_ZL17_uhash_setElementP10UHashtableP12UHashElementi8UElementS3_a:
  150|   730k|                  UHashTok key, UHashTok value, int8_t hint) {
  151|       |
  152|   730k|    UHashTok oldValue = e->value;
  153|   730k|    if (hash->keyDeleter != nullptr && e->key.pointer != nullptr &&
  ------------------
  |  Branch (153:9): [True: 663k, False: 67.1k]
  |  Branch (153:40): [True: 6.41k, False: 657k]
  ------------------
  154|   730k|        e->key.pointer != key.pointer) { /* Avoid double deletion */
  ------------------
  |  Branch (154:9): [True: 6.41k, False: 0]
  ------------------
  155|  6.41k|        (*hash->keyDeleter)(e->key.pointer);
  156|  6.41k|    }
  157|   730k|    if (hash->valueDeleter != nullptr) {
  ------------------
  |  Branch (157:9): [True: 669, False: 730k]
  ------------------
  158|    669|        if (oldValue.pointer != nullptr &&
  ------------------
  |  Branch (158:13): [True: 0, False: 669]
  ------------------
  159|    669|            oldValue.pointer != value.pointer) { /* Avoid double deletion */
  ------------------
  |  Branch (159:13): [True: 0, False: 0]
  ------------------
  160|      0|            (*hash->valueDeleter)(oldValue.pointer);
  161|      0|        }
  162|    669|        oldValue.pointer = nullptr;
  163|    669|    }
  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|   730k|    if (hint & HINT_KEY_POINTER) {
  ------------------
  |  |  139|   730k|#define HINT_KEY_POINTER   (1)
  ------------------
  |  Branch (170:9): [True: 724k, False: 6.50k]
  ------------------
  171|   724k|        e->key.pointer = key.pointer;
  172|   724k|    } else {
  173|  6.50k|        e->key = key;
  174|  6.50k|    }
  175|   730k|    if (hint & HINT_VALUE_POINTER) {
  ------------------
  |  |  140|   730k|#define HINT_VALUE_POINTER (2)
  ------------------
  |  Branch (175:9): [True: 66.2k, False: 664k]
  ------------------
  176|  66.2k|        e->value.pointer = value.pointer;
  177|   664k|    } else {
  178|   664k|        e->value = value;
  179|   664k|    }
  180|   730k|    e->hashcode = hashcode;
  181|   730k|    return oldValue;
  182|   730k|}
uhash.cpp:_ZL28_uhash_internalRemoveElementP10UHashtableP12UHashElement:
  188|  6.16k|_uhash_internalRemoveElement(UHashtable *hash, UHashElement* e) {
  189|  6.16k|    UHashTok empty;
  190|  6.16k|    U_ASSERT(!IS_EMPTY_OR_DELETED(e->hashcode));
  ------------------
  |  |   35|  6.16k|#   define U_ASSERT(exp) (void)0
  ------------------
  191|  6.16k|    --hash->count;
  192|  6.16k|    empty.pointer = nullptr; empty.integer = 0;
  193|  6.16k|    return _uhash_setElement(hash, e, HASH_DELETED, empty, empty, 0);
  ------------------
  |  |  117|  6.16k|#define HASH_DELETED    ((int32_t) 0x80000000)
  ------------------
  194|  6.16k|}

u_charsToUChars_78:
  185|  1.12M|u_charsToUChars(const char *cs, char16_t *us, int32_t length) {
  186|  1.12M|    char16_t u;
  187|  1.12M|    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|  4.98M|    while(length>0) {
  ------------------
  |  Branch (194:11): [True: 3.86M, False: 1.12M]
  ------------------
  195|  3.86M|        c=(uint8_t)(*cs++);
  196|  3.86M|        u=(char16_t)CHAR_TO_UCHAR(c);
  ------------------
  |  |  174|  3.86M|#define CHAR_TO_UCHAR(c) c
  ------------------
  197|  3.86M|        U_ASSERT((u!=0 || c==0)); /* only invariant chars converted? */
  ------------------
  |  |   35|  3.86M|#   define U_ASSERT(exp) (void)0
  ------------------
  198|  3.86M|        *us++=u;
  199|  3.86M|        --length;
  200|  3.86M|    }
  201|  1.12M|}
u_UCharsToChars_78:
  204|  1.02M|u_UCharsToChars(const char16_t *us, char *cs, int32_t length) {
  205|  1.02M|    char16_t u;
  206|       |
  207|  22.6M|    while(length>0) {
  ------------------
  |  Branch (207:11): [True: 21.6M, False: 1.02M]
  ------------------
  208|  21.6M|        u=*us++;
  209|  21.6M|        if(!UCHAR_IS_INVARIANT(u)) {
  ------------------
  |  |  168|  21.6M|#define UCHAR_IS_INVARIANT(c) (((c)<=0x7f) && (invariantChars[(c)>>5]&((uint32_t)1<<((c)&0x1f)))!=0)
  |  |  ------------------
  |  |  |  Branch (168:32): [True: 21.6M, False: 0]
  |  |  |  Branch (168:47): [True: 21.6M, 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|  21.6M|        *cs++=(char)UCHAR_TO_CHAR(u);
  ------------------
  |  |  175|  21.6M|#define UCHAR_TO_CHAR(c) c
  ------------------
  214|  21.6M|        --length;
  215|  21.6M|    }
  216|  1.02M|}
uprv_isInvariantString_78:
  219|     68|uprv_isInvariantString(const char *s, int32_t length) {
  220|     68|    uint8_t c;
  221|       |
  222|    272|    for(;;) {
  223|    272|        if(length<0) {
  ------------------
  |  Branch (223:12): [True: 0, False: 272]
  ------------------
  224|       |            /* NUL-terminated */
  225|      0|            c=(uint8_t)*s++;
  226|      0|            if(c==0) {
  ------------------
  |  Branch (226:16): [True: 0, False: 0]
  ------------------
  227|      0|                break;
  228|      0|            }
  229|    272|        } else {
  230|       |            /* count length */
  231|    272|            if(length==0) {
  ------------------
  |  Branch (231:16): [True: 68, False: 204]
  ------------------
  232|     68|                break;
  233|     68|            }
  234|    204|            --length;
  235|    204|            c=(uint8_t)*s++;
  236|    204|            if(c==0) {
  ------------------
  |  Branch (236:16): [True: 0, False: 204]
  ------------------
  237|      0|                continue; /* NUL is invariant */
  238|      0|            }
  239|    204|        }
  240|       |        /* c!=0 now, one branch below checks c==0 for variant characters */
  241|       |
  242|       |        /*
  243|       |         * no assertions here because these functions are legitimately called
  244|       |         * for strings with variant characters
  245|       |         */
  246|    204|#if U_CHARSET_FAMILY==U_ASCII_FAMILY
  247|    204|        if(!UCHAR_IS_INVARIANT(c)) {
  ------------------
  |  |  168|    204|#define UCHAR_IS_INVARIANT(c) (((c)<=0x7f) && (invariantChars[(c)>>5]&((uint32_t)1<<((c)&0x1f)))!=0)
  |  |  ------------------
  |  |  |  Branch (168:32): [True: 204, False: 0]
  |  |  |  Branch (168:47): [True: 204, False: 0]
  |  |  ------------------
  ------------------
  248|      0|            return false; /* found a variant char */
  249|      0|        }
  250|       |#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY
  251|       |        c=CHAR_TO_UCHAR(c);
  252|       |        if(c==0 || !UCHAR_IS_INVARIANT(c)) {
  253|       |            return false; /* found a variant char */
  254|       |        }
  255|       |#else
  256|       |#   error U_CHARSET_FAMILY is not valid
  257|       |#endif
  258|    204|    }
  259|     68|    return true;
  260|     68|}
uprv_isInvariantUString_78:
  263|  1.00M|uprv_isInvariantUString(const char16_t *s, int32_t length) {
  264|  1.00M|    char16_t c;
  265|       |
  266|  22.5M|    for(;;) {
  267|  22.5M|        if(length<0) {
  ------------------
  |  Branch (267:12): [True: 301, False: 22.5M]
  ------------------
  268|       |            /* NUL-terminated */
  269|    301|            c=*s++;
  270|    301|            if(c==0) {
  ------------------
  |  Branch (270:16): [True: 36, False: 265]
  ------------------
  271|     36|                break;
  272|     36|            }
  273|  22.5M|        } else {
  274|       |            /* count length */
  275|  22.5M|            if(length==0) {
  ------------------
  |  Branch (275:16): [True: 1.00M, False: 21.5M]
  ------------------
  276|  1.00M|                break;
  277|  1.00M|            }
  278|  21.5M|            --length;
  279|  21.5M|            c=*s++;
  280|  21.5M|        }
  281|       |
  282|       |        /*
  283|       |         * no assertions here because these functions are legitimately called
  284|       |         * for strings with variant characters
  285|       |         */
  286|  21.5M|        if(!UCHAR_IS_INVARIANT(c)) {
  ------------------
  |  |  168|  21.5M|#define UCHAR_IS_INVARIANT(c) (((c)<=0x7f) && (invariantChars[(c)>>5]&((uint32_t)1<<((c)&0x1f)))!=0)
  |  |  ------------------
  |  |  |  Branch (168:32): [True: 21.5M, False: 0]
  |  |  |  Branch (168:47): [True: 21.5M, False: 0]
  |  |  ------------------
  ------------------
  287|      0|            return false; /* found a variant char */
  288|      0|        }
  289|  21.5M|    }
  290|  1.00M|    return true;
  291|  1.00M|}
uprv_compareInvAscii_78:
  460|  78.6k|                     const char16_t *localString, int32_t localLength) {
  461|  78.6k|    (void)ds;
  462|  78.6k|    int32_t minLength;
  463|  78.6k|    UChar32 c1, c2;
  464|  78.6k|    uint8_t c;
  465|       |
  466|  78.6k|    if(outString==nullptr || outLength<-1 || localString==nullptr || localLength<-1) {
  ------------------
  |  Branch (466:8): [True: 0, False: 78.6k]
  |  Branch (466:30): [True: 0, False: 78.6k]
  |  Branch (466:46): [True: 0, False: 78.6k]
  |  Branch (466:70): [True: 0, False: 78.6k]
  ------------------
  467|      0|        return 0;
  468|      0|    }
  469|       |
  470|  78.6k|    if(outLength<0) {
  ------------------
  |  Branch (470:8): [True: 0, False: 78.6k]
  ------------------
  471|      0|        outLength=(int32_t)uprv_strlen(outString);
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  472|      0|    }
  473|  78.6k|    if(localLength<0) {
  ------------------
  |  Branch (473:8): [True: 0, False: 78.6k]
  ------------------
  474|      0|        localLength=u_strlen(localString);
  ------------------
  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  475|      0|    }
  476|       |
  477|  78.6k|    minLength= outLength<localLength ? outLength : localLength;
  ------------------
  |  Branch (477:16): [True: 30.1k, False: 48.5k]
  ------------------
  478|       |
  479|   204k|    while(minLength>0) {
  ------------------
  |  Branch (479:11): [True: 203k, False: 413]
  ------------------
  480|   203k|        c=(uint8_t)*outString++;
  481|   203k|        if(UCHAR_IS_INVARIANT(c)) {
  ------------------
  |  |  168|   203k|#define UCHAR_IS_INVARIANT(c) (((c)<=0x7f) && (invariantChars[(c)>>5]&((uint32_t)1<<((c)&0x1f)))!=0)
  |  |  ------------------
  |  |  |  Branch (168:32): [True: 203k, False: 0]
  |  |  |  Branch (168:47): [True: 203k, False: 0]
  |  |  ------------------
  ------------------
  482|   203k|            c1=c;
  483|   203k|        } else {
  484|      0|            c1=-1;
  485|      0|        }
  486|       |
  487|   203k|        c2=*localString++;
  488|   203k|        if(!UCHAR_IS_INVARIANT(c2)) {
  ------------------
  |  |  168|   203k|#define UCHAR_IS_INVARIANT(c) (((c)<=0x7f) && (invariantChars[(c)>>5]&((uint32_t)1<<((c)&0x1f)))!=0)
  |  |  ------------------
  |  |  |  Branch (168:32): [True: 203k, False: 0]
  |  |  |  Branch (168:47): [True: 203k, False: 0]
  |  |  ------------------
  ------------------
  489|      0|            c2=-2;
  490|      0|        }
  491|       |
  492|   203k|        if((c1-=c2)!=0) {
  ------------------
  |  Branch (492:12): [True: 78.2k, False: 125k]
  ------------------
  493|  78.2k|            return c1;
  494|  78.2k|        }
  495|       |
  496|   125k|        --minLength;
  497|   125k|    }
  498|       |
  499|       |    /* strings start with same prefix, compare lengths */
  500|    413|    return outLength-localLength;
  501|  78.6k|}

_ZN6icu_7817uprv_upperOrdinalEi:
   79|  87.9k|inline int32_t uprv_upperOrdinal(int32_t c) {
   80|  87.9k|#if U_CHARSET_FAMILY==U_ASCII_FAMILY
   81|  87.9k|    return c - 'A';
   82|       |#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY
   83|       |    // EBCDIC: A-Z (26 letters) is split into three ranges A-I (9 letters), J-R (9), S-Z (8).
   84|       |    // https://en.wikipedia.org/wiki/EBCDIC_037#Codepage_layout
   85|       |    if (c <= 'I') { return c - 'A'; }  // A-I --> 0-8
   86|       |    if (c < 'J') { return -1; }
   87|       |    if (c <= 'R') { return c - 'J' + 9; }  // J-R --> 9..17
   88|       |    if (c < 'S') { return -1; }
   89|       |    return c - 'S' + 18;  // S-Z --> 18..25
   90|       |#else
   91|       |#   error Unknown charset family!
   92|       |#endif
   93|  87.9k|}
_ZN6icu_7817uprv_lowerOrdinalEi:
   97|  32.9k|inline int32_t uprv_lowerOrdinal(int32_t c) {
   98|  32.9k|#if U_CHARSET_FAMILY==U_ASCII_FAMILY
   99|  32.9k|    return c - 'a';
  100|       |#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY
  101|       |    // EBCDIC: a-z (26 letters) is split into three ranges a-i (9 letters), j-r (9), s-z (8).
  102|       |    // https://en.wikipedia.org/wiki/EBCDIC_037#Codepage_layout
  103|       |    if (c <= 'i') { return c - 'a'; }  // a-i --> 0-8
  104|       |    if (c < 'j') { return -1; }
  105|       |    if (c <= 'r') { return c - 'j' + 9; }  // j-r --> 9..17
  106|       |    if (c < 's') { return -1; }
  107|       |    return c - 's' + 18;  // s-z --> 18..25
  108|       |#else
  109|       |#   error Unknown charset family!
  110|       |#endif
  111|  32.9k|}

locale_getKeywordsStart_78:
  526|   622k|locale_getKeywordsStart(std::string_view localeID) {
  527|   622k|    if (size_t pos = localeID.find('@'); pos != std::string_view::npos) {
  ------------------
  |  Branch (527:42): [True: 108k, False: 514k]
  ------------------
  528|   108k|        return localeID.data() + pos;
  529|   108k|    }
  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|   514k|    return nullptr;
  546|   622k|}
_Z22ulocimp_getKeywords_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEEcRN6icu_788ByteSinkEbR10UErrorCode:
  614|  26.1k|{
  615|  26.1k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (615:9): [True: 0, False: 26.1k]
  ------------------
  616|       |
  617|  26.1k|    KeywordStruct keywordList[ULOC_MAX_NO_KEYWORDS];
  618|       |
  619|  26.1k|    int32_t maxKeywords = ULOC_MAX_NO_KEYWORDS;
  ------------------
  |  |  523|  26.1k|#define ULOC_MAX_NO_KEYWORDS 25
  ------------------
  620|  26.1k|    int32_t numKeywords = 0;
  621|  26.1k|    size_t equalSign = std::string_view::npos;
  622|  26.1k|    size_t semicolon = std::string_view::npos;
  623|  26.1k|    int32_t i = 0, j, n;
  624|       |
  625|  26.1k|    if(prev == '@') { /* start of keyword definition */
  ------------------
  |  Branch (625:8): [True: 26.1k, False: 0]
  ------------------
  626|       |        /* we will grab pairs, trim spaces, lowercase keywords, sort and return */
  627|  57.2k|        do {
  628|  57.2k|            bool duplicate = false;
  629|       |            /* skip leading spaces */
  630|  58.1k|            while (localeID.front() == ' ') {
  ------------------
  |  Branch (630:20): [True: 953, False: 57.2k]
  ------------------
  631|    953|                localeID.remove_prefix(1);
  632|    953|            }
  633|  57.2k|            if (localeID.empty()) { /* handle trailing "; " */
  ------------------
  |  Branch (633:17): [True: 8, False: 57.2k]
  ------------------
  634|      8|                break;
  635|      8|            }
  636|  57.2k|            if(numKeywords == maxKeywords) {
  ------------------
  |  Branch (636:16): [True: 42, False: 57.1k]
  ------------------
  637|     42|                status = U_INTERNAL_PROGRAM_ERROR;
  638|     42|                return;
  639|     42|            }
  640|  57.1k|            equalSign = localeID.find('=');
  641|  57.1k|            semicolon = localeID.find(';');
  642|       |            /* lack of '=' [foo@currency] is illegal */
  643|       |            /* ';' before '=' [foo@currency;collation=pinyin] is illegal */
  644|  57.1k|            if (equalSign == std::string_view::npos ||
  ------------------
  |  Branch (644:17): [True: 30, False: 57.1k]
  ------------------
  645|  57.1k|                (semicolon != std::string_view::npos && semicolon < equalSign)) {
  ------------------
  |  Branch (645:18): [True: 31.1k, False: 25.9k]
  |  Branch (645:57): [True: 1, False: 31.1k]
  ------------------
  646|     31|                status = U_INVALID_FORMAT_ERROR;
  647|     31|                return;
  648|     31|            }
  649|       |            /* zero-length keyword is an error. */
  650|  57.1k|            if (equalSign == 0) {
  ------------------
  |  Branch (650:17): [True: 39, False: 57.1k]
  ------------------
  651|     39|                status = U_INVALID_FORMAT_ERROR;
  652|     39|                return;
  653|     39|            }
  654|       |            /* need to normalize both keyword and keyword name */
  655|  57.1k|            if (equalSign >= ULOC_KEYWORD_BUFFER_LEN) {
  ------------------
  |  |  522|  57.1k|#define ULOC_KEYWORD_BUFFER_LEN 25
  ------------------
  |  Branch (655:17): [True: 52, False: 57.0k]
  ------------------
  656|       |                /* keyword name too long for internal buffer */
  657|     52|                status = U_INTERNAL_PROGRAM_ERROR;
  658|     52|                return;
  659|     52|            }
  660|   301k|            for (i = 0, n = 0; static_cast<size_t>(i) < equalSign; ++i) {
  ------------------
  |  Branch (660:32): [True: 244k, False: 57.0k]
  ------------------
  661|   244k|                if (localeID[i] != ' ') {
  ------------------
  |  Branch (661:21): [True: 243k, False: 291]
  ------------------
  662|   243k|                    keywordList[numKeywords].keyword[n++] = uprv_tolower(localeID[i]);
  ------------------
  |  |   68|   243k|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|   243k|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|   243k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|   243k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|   243k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  663|   243k|                }
  664|   244k|            }
  665|       |
  666|  57.0k|            keywordList[numKeywords].keyword[n] = 0;
  667|  57.0k|            keywordList[numKeywords].keywordLen = n;
  668|       |            /* now grab the value part. First we skip the '=' */
  669|  57.0k|            equalSign++;
  670|       |            /* then we leading spaces */
  671|  2.27M|            while (equalSign < localeID.length() && localeID[equalSign] == ' ') {
  ------------------
  |  Branch (671:20): [True: 2.27M, False: 27]
  |  Branch (671:53): [True: 2.21M, False: 57.0k]
  ------------------
  672|  2.21M|                equalSign++;
  673|  2.21M|            }
  674|       |
  675|       |            /* Premature end or zero-length value */
  676|  57.0k|            if (equalSign == localeID.length() || equalSign == semicolon) {
  ------------------
  |  Branch (676:17): [True: 27, False: 57.0k]
  |  Branch (676:51): [True: 1, False: 57.0k]
  ------------------
  677|     28|                status = U_INVALID_FORMAT_ERROR;
  678|     28|                return;
  679|     28|            }
  680|       |
  681|  57.0k|            keywordList[numKeywords].valueStart = localeID.data() + equalSign;
  682|       |
  683|  57.0k|            std::string_view value = localeID;
  684|  57.0k|            if (semicolon != std::string_view::npos) {
  ------------------
  |  Branch (684:17): [True: 31.1k, False: 25.8k]
  ------------------
  685|  31.1k|                value.remove_suffix(value.length() - semicolon);
  686|  31.1k|                localeID.remove_prefix(semicolon + 1);
  687|  31.1k|            } else {
  688|  25.8k|                localeID = {};
  689|  25.8k|            }
  690|  57.0k|            value.remove_prefix(equalSign);
  691|  57.0k|            if (size_t last = value.find_last_not_of(' '); last != std::string_view::npos) {
  ------------------
  |  Branch (691:60): [True: 57.0k, False: 0]
  ------------------
  692|  57.0k|                value.remove_suffix(value.length() - last - 1);
  693|  57.0k|            }
  694|  57.0k|            keywordList[numKeywords].valueLen = static_cast<int32_t>(value.length());
  695|       |
  696|       |            /* If this is a duplicate keyword, then ignore it */
  697|   249k|            for (j=0; j<numKeywords; ++j) {
  ------------------
  |  Branch (697:23): [True: 193k, False: 56.4k]
  ------------------
  698|   193k|                if (uprv_strcmp(keywordList[j].keyword, keywordList[numKeywords].keyword) == 0) {
  ------------------
  |  |   38|   193k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|   193k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (698:21): [True: 616, False: 192k]
  ------------------
  699|    616|                    duplicate = true;
  700|    616|                    break;
  701|    616|                }
  702|   193k|            }
  703|  57.0k|            if (!duplicate) {
  ------------------
  |  Branch (703:17): [True: 56.4k, False: 616]
  ------------------
  704|  56.4k|                ++numKeywords;
  705|  56.4k|            }
  706|  57.0k|        } while (!localeID.empty());
  ------------------
  |  Branch (706:18): [True: 31.1k, False: 25.9k]
  ------------------
  707|       |
  708|       |        /* now we have a list of keywords */
  709|       |        /* we need to sort it */
  710|  25.9k|        uprv_sortArray(keywordList, numKeywords, sizeof(KeywordStruct), compareKeywordStructs, nullptr, false, &status);
  ------------------
  |  | 1538|  25.9k|#define uprv_sortArray U_ICU_ENTRY_POINT_RENAME(uprv_sortArray)
  |  |  ------------------
  |  |  |  |  123|  25.9k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  25.9k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  25.9k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  711|       |
  712|       |        /* Now construct the keyword part */
  713|  81.2k|        for(i = 0; i < numKeywords; i++) {
  ------------------
  |  Branch (713:20): [True: 55.3k, False: 25.9k]
  ------------------
  714|  55.3k|            sink.Append(keywordList[i].keyword, keywordList[i].keywordLen);
  715|  55.3k|            if(valuesToo) {
  ------------------
  |  Branch (715:16): [True: 55.3k, False: 0]
  ------------------
  716|  55.3k|                sink.Append("=", 1);
  717|  55.3k|                sink.Append(keywordList[i].valueStart, keywordList[i].valueLen);
  718|  55.3k|                if(i < numKeywords - 1) {
  ------------------
  |  Branch (718:20): [True: 29.3k, False: 25.9k]
  ------------------
  719|  29.3k|                    sink.Append(";", 1);
  720|  29.3k|                }
  721|  55.3k|            } else {
  722|      0|                sink.Append("\0", 1);
  723|      0|            }
  724|  55.3k|        }
  725|  25.9k|    }
  726|  26.1k|}
uloc_getKeywordValue_78:
  733|  41.0k|{
  734|  41.0k|    if (U_FAILURE(*status)) { return 0; }
  ------------------
  |  Branch (734:9): [True: 81, False: 40.9k]
  ------------------
  735|  40.9k|    if (keywordName == nullptr || *keywordName == '\0') {
  ------------------
  |  Branch (735:9): [True: 0, False: 40.9k]
  |  Branch (735:35): [True: 0, False: 40.9k]
  ------------------
  736|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
  737|      0|        return 0;
  738|      0|    }
  739|  40.9k|    return ByteSinkUtil::viaByteSinkToTerminatedChars(
  740|  40.9k|        buffer, bufferCapacity,
  741|  40.9k|        [&](ByteSink& sink, UErrorCode& status) {
  742|  40.9k|            ulocimp_getKeywordValue(localeID, keywordName, sink, status);
  743|  40.9k|        },
  744|  40.9k|        *status);
  745|  40.9k|}
_Z26ulocimp_getKeywordValue_78PKcNSt3__117basic_string_viewIcNS1_11char_traitsIcEEEER10UErrorCode:
  751|   124k|{
  752|   124k|    return ByteSinkUtil::viaByteSinkToCharString(
  753|   124k|        [&](ByteSink& sink, UErrorCode& status) {
  754|   124k|            ulocimp_getKeywordValue(localeID, keywordName, sink, status);
  755|   124k|        },
  756|   124k|        status);
  757|   124k|}
_Z26ulocimp_getKeywordValue_78PKcNSt3__117basic_string_viewIcNS1_11char_traitsIcEEEERN6icu_788ByteSinkER10UErrorCode:
  764|   165k|{
  765|   165k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (765:9): [True: 0, False: 165k]
  ------------------
  766|       |
  767|   165k|    if (localeID == nullptr || keywordName.empty()) {
  ------------------
  |  Branch (767:9): [True: 0, False: 165k]
  |  Branch (767:32): [True: 0, False: 165k]
  ------------------
  768|      0|        status = U_ILLEGAL_ARGUMENT_ERROR;
  769|      0|        return;
  770|      0|    }
  771|       |
  772|   165k|    const char* startSearchHere = nullptr;
  773|   165k|    const char* nextSeparator = nullptr;
  774|       |
  775|   165k|    CharString tempBuffer;
  776|   165k|    const char* tmpLocaleID;
  777|       |
  778|   165k|    CharString canonKeywordName = locale_canonKeywordName(keywordName, status);
  779|   165k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (779:9): [True: 0, False: 165k]
  ------------------
  780|      0|      return;
  781|      0|    }
  782|       |
  783|   165k|    if (localeID != nullptr && _hasBCP47Extension(localeID)) {
  ------------------
  |  Branch (783:9): [True: 165k, False: 0]
  |  Branch (783:32): [True: 25.3k, False: 140k]
  ------------------
  784|  25.3k|        tempBuffer = ulocimp_forLanguageTag(localeID, -1, nullptr, status);
  ------------------
  |  | 1198|  25.3k|#define ulocimp_forLanguageTag U_ICU_ENTRY_POINT_RENAME(ulocimp_forLanguageTag)
  |  |  ------------------
  |  |  |  |  123|  25.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  25.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  25.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  785|  25.3k|        tmpLocaleID = U_SUCCESS(status) && !tempBuffer.isEmpty() ? tempBuffer.data() : localeID;
  ------------------
  |  Branch (785:23): [True: 25.3k, False: 0]
  |  Branch (785:44): [True: 538, False: 24.8k]
  ------------------
  786|   140k|    } else {
  787|   140k|        tmpLocaleID=localeID;
  788|   140k|    }
  789|       |
  790|   165k|    startSearchHere = locale_getKeywordsStart(tmpLocaleID);
  ------------------
  |  |  138|   165k|#define locale_getKeywordsStart U_ICU_ENTRY_POINT_RENAME(locale_getKeywordsStart)
  |  |  ------------------
  |  |  |  |  123|   165k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   165k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   165k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  791|   165k|    if(startSearchHere == nullptr) {
  ------------------
  |  Branch (791:8): [True: 111k, False: 54.0k]
  ------------------
  792|       |        /* no keywords, return at once */
  793|   111k|        return;
  794|   111k|    }
  795|       |
  796|       |    /* find the first keyword */
  797|  95.9k|    while(startSearchHere) {
  ------------------
  |  Branch (797:11): [True: 72.9k, False: 22.9k]
  ------------------
  798|  72.9k|        const char* keyValueTail;
  799|       |
  800|  72.9k|        startSearchHere++; /* skip @ or ; */
  801|  72.9k|        nextSeparator = uprv_strchr(startSearchHere, '=');
  ------------------
  |  |   40|  72.9k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  72.9k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  802|  72.9k|        if(!nextSeparator) {
  ------------------
  |  Branch (802:12): [True: 230, False: 72.7k]
  ------------------
  803|    230|            status = U_ILLEGAL_ARGUMENT_ERROR; /* key must have =value */
  804|    230|            return;
  805|    230|        }
  806|       |        /* strip leading & trailing spaces (TC decided to tolerate these) */
  807|  72.7k|        while(*startSearchHere == ' ') {
  ------------------
  |  Branch (807:15): [True: 0, False: 72.7k]
  ------------------
  808|      0|            startSearchHere++;
  809|      0|        }
  810|  72.7k|        keyValueTail = nextSeparator;
  811|  72.7k|        while (keyValueTail > startSearchHere && *(keyValueTail-1) == ' ') {
  ------------------
  |  Branch (811:16): [True: 72.7k, False: 0]
  |  Branch (811:50): [True: 0, False: 72.7k]
  ------------------
  812|      0|            keyValueTail--;
  813|      0|        }
  814|       |        /* now keyValueTail points to first char after the keyName */
  815|       |        /* copy & normalize keyName from locale */
  816|  72.7k|        if (startSearchHere == keyValueTail) {
  ------------------
  |  Branch (816:13): [True: 0, False: 72.7k]
  ------------------
  817|      0|            status = U_ILLEGAL_ARGUMENT_ERROR; /* empty keyword name in passed-in locale */
  818|      0|            return;
  819|      0|        }
  820|  72.7k|        CharString localeKeywordName;
  821|   488k|        while (startSearchHere < keyValueTail) {
  ------------------
  |  Branch (821:16): [True: 416k, False: 72.1k]
  ------------------
  822|   416k|          if (!UPRV_ISALPHANUM(*startSearchHere)) {
  ------------------
  |  Branch (822:15): [True: 572, False: 415k]
  ------------------
  823|    572|            status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed keyword name */
  824|    572|            return;
  825|    572|          }
  826|   415k|          localeKeywordName.append(uprv_tolower(*startSearchHere++), status);
  ------------------
  |  |   68|   415k|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|   415k|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|   415k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|   415k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|   415k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  827|   415k|        }
  828|  72.1k|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (828:13): [True: 0, False: 72.1k]
  ------------------
  829|      0|            return;
  830|      0|        }
  831|       |
  832|  72.1k|        startSearchHere = uprv_strchr(nextSeparator, ';');
  ------------------
  |  |   40|  72.1k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  72.1k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  833|       |
  834|  72.1k|        if (canonKeywordName == localeKeywordName) {
  ------------------
  |  Branch (834:13): [True: 30.2k, False: 41.9k]
  ------------------
  835|       |             /* current entry matches the keyword. */
  836|  30.2k|           nextSeparator++; /* skip '=' */
  837|       |            /* First strip leading & trailing spaces (TC decided to tolerate these) */
  838|  30.2k|            while(*nextSeparator == ' ') {
  ------------------
  |  Branch (838:19): [True: 0, False: 30.2k]
  ------------------
  839|      0|              nextSeparator++;
  840|      0|            }
  841|  30.2k|            keyValueTail = (startSearchHere)? startSearchHere: nextSeparator + uprv_strlen(nextSeparator);
  ------------------
  |  |   37|  29.7k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  29.7k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (841:28): [True: 498, False: 29.7k]
  ------------------
  842|  30.2k|            while(keyValueTail > nextSeparator && *(keyValueTail-1) == ' ') {
  ------------------
  |  Branch (842:19): [True: 30.2k, False: 0]
  |  Branch (842:51): [True: 0, False: 30.2k]
  ------------------
  843|      0|              keyValueTail--;
  844|      0|            }
  845|       |            /* Now copy the value, but check well-formedness */
  846|  30.2k|            if (nextSeparator == keyValueTail) {
  ------------------
  |  Branch (846:17): [True: 0, False: 30.2k]
  ------------------
  847|      0|              status = U_ILLEGAL_ARGUMENT_ERROR; /* empty key value name in passed-in locale */
  848|      0|              return;
  849|      0|            }
  850|  42.2M|            while (nextSeparator < keyValueTail) {
  ------------------
  |  Branch (850:20): [True: 42.1M, False: 29.7k]
  ------------------
  851|  42.1M|              if (!UPRV_ISALPHANUM(*nextSeparator) && !UPRV_OK_VALUE_PUNCTUATION(*nextSeparator)) {
  ------------------
  |  Branch (851:19): [True: 2.25M, False: 39.9M]
  |  Branch (851:55): [True: 481, False: 2.25M]
  ------------------
  852|    481|                status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed key value */
  853|    481|                return;
  854|    481|              }
  855|       |              /* Should we lowercase value to return here? Tests expect as-is. */
  856|  42.1M|              sink.Append(nextSeparator++, 1);
  857|  42.1M|            }
  858|  29.7k|            return;
  859|  30.2k|        }
  860|  72.1k|    }
  861|  54.0k|}
_Z20ulocimp_getRegion_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEER10UErrorCode:
 1475|  48.2k|ulocimp_getRegion(std::string_view localeID, UErrorCode& status) {
 1476|  48.2k|    return ByteSinkUtil::viaByteSinkToCharString(
 1477|  48.2k|        [&](ByteSink& sink, UErrorCode& status) {
 1478|  48.2k|            ulocimp_getSubtags(
 1479|  48.2k|                    localeID,
 1480|  48.2k|                    nullptr,
 1481|  48.2k|                    nullptr,
 1482|  48.2k|                    &sink,
 1483|  48.2k|                    nullptr,
 1484|  48.2k|                    nullptr,
 1485|  48.2k|                    status);
 1486|  48.2k|        },
 1487|  48.2k|        status);
 1488|  48.2k|}
_Z21ulocimp_getSubtags_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEEPN6icu_7810CharStringES6_S6_S6_PPKcR10UErrorCode:
 1514|   731k|        UErrorCode& status) {
 1515|   731k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1515:9): [True: 0, False: 731k]
  ------------------
 1516|       |
 1517|   731k|    std::optional<CharStringByteSink> languageSink;
 1518|   731k|    std::optional<CharStringByteSink> scriptSink;
 1519|   731k|    std::optional<CharStringByteSink> regionSink;
 1520|   731k|    std::optional<CharStringByteSink> variantSink;
 1521|       |
 1522|   731k|    if (language != nullptr) { languageSink.emplace(language); }
  ------------------
  |  Branch (1522:9): [True: 731k, False: 0]
  ------------------
 1523|   731k|    if (script != nullptr) { scriptSink.emplace(script); }
  ------------------
  |  Branch (1523:9): [True: 731k, False: 0]
  ------------------
 1524|   731k|    if (region != nullptr) { regionSink.emplace(region); }
  ------------------
  |  Branch (1524:9): [True: 681k, False: 50.1k]
  ------------------
 1525|   731k|    if (variant != nullptr) { variantSink.emplace(variant); }
  ------------------
  |  Branch (1525:9): [True: 484k, False: 247k]
  ------------------
 1526|       |
 1527|   731k|    ulocimp_getSubtags(
  ------------------
  |  | 1209|   731k|#define ulocimp_getSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_getSubtags)
  |  |  ------------------
  |  |  |  |  123|   731k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   731k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   731k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1528|   731k|            localeID,
 1529|   731k|            languageSink.has_value() ? &*languageSink : nullptr,
  ------------------
  |  Branch (1529:13): [True: 731k, False: 0]
  ------------------
 1530|   731k|            scriptSink.has_value() ? &*scriptSink : nullptr,
  ------------------
  |  Branch (1530:13): [True: 731k, False: 0]
  ------------------
 1531|   731k|            regionSink.has_value() ? &*regionSink : nullptr,
  ------------------
  |  Branch (1531:13): [True: 681k, False: 50.1k]
  ------------------
 1532|   731k|            variantSink.has_value() ? &*variantSink : nullptr,
  ------------------
  |  Branch (1532:13): [True: 484k, False: 247k]
  ------------------
 1533|   731k|            pEnd,
 1534|   731k|            status);
 1535|   731k|}
_Z21ulocimp_getSubtags_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEEPN6icu_788ByteSinkES6_S6_S6_PPKcR10UErrorCode:
 1545|  1.15M|        UErrorCode& status) {
 1546|  1.15M|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1546:9): [True: 0, False: 1.15M]
  ------------------
 1547|       |
 1548|  1.15M|    if (pEnd != nullptr) {
  ------------------
  |  Branch (1548:9): [True: 484k, False: 670k]
  ------------------
 1549|   484k|        *pEnd = localeID.data();
 1550|   670k|    } else if (language == nullptr &&
  ------------------
  |  Branch (1550:16): [True: 423k, False: 247k]
  ------------------
 1551|   670k|               script == nullptr &&
  ------------------
  |  Branch (1551:16): [True: 423k, False: 0]
  ------------------
 1552|   670k|               region == nullptr &&
  ------------------
  |  Branch (1552:16): [True: 375k, False: 48.2k]
  ------------------
 1553|   670k|               variant == nullptr) {
  ------------------
  |  Branch (1553:16): [True: 0, False: 375k]
  ------------------
 1554|      0|        return;
 1555|      0|    }
 1556|       |
 1557|  1.15M|    if (localeID.empty()) { return; }
  ------------------
  |  Branch (1557:9): [True: 57.4k, False: 1.09M]
  ------------------
 1558|       |
 1559|  1.09M|    bool hasRegion = false;
 1560|       |
 1561|  1.09M|    {
 1562|  1.09M|        size_t len = _getLanguage(localeID, language, status);
 1563|  1.09M|        if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1563:13): [True: 73, False: 1.09M]
  ------------------
 1564|  1.09M|        if (len > 0) {
  ------------------
  |  Branch (1564:13): [True: 857k, False: 240k]
  ------------------
 1565|   857k|            localeID.remove_prefix(len);
 1566|   857k|        }
 1567|  1.09M|    }
 1568|       |
 1569|  1.09M|    if (pEnd != nullptr) {
  ------------------
  |  Branch (1569:9): [True: 426k, False: 670k]
  ------------------
 1570|   426k|        *pEnd = localeID.data();
 1571|   670k|    } else if (script == nullptr &&
  ------------------
  |  Branch (1571:16): [True: 423k, False: 247k]
  ------------------
 1572|   670k|               region == nullptr &&
  ------------------
  |  Branch (1572:16): [True: 375k, False: 47.8k]
  ------------------
 1573|   670k|               variant == nullptr) {
  ------------------
  |  Branch (1573:16): [True: 0, False: 375k]
  ------------------
 1574|      0|        return;
 1575|      0|    }
 1576|       |
 1577|  1.09M|    if (localeID.empty()) { return; }
  ------------------
  |  Branch (1577:9): [True: 315k, False: 781k]
  ------------------
 1578|       |
 1579|   781k|    if (_isIDSeparator(localeID.front())) {
  ------------------
  |  Branch (1579:9): [True: 736k, False: 44.8k]
  ------------------
 1580|   736k|        std::string_view sub = localeID;
 1581|   736k|        sub.remove_prefix(1);
 1582|   736k|        size_t len = _getScript(sub, script);
 1583|   736k|        if (len > 0) {
  ------------------
  |  Branch (1583:13): [True: 179k, False: 556k]
  ------------------
 1584|   179k|            localeID.remove_prefix(len + 1);
 1585|   179k|            if (pEnd != nullptr) { *pEnd = localeID.data(); }
  ------------------
  |  Branch (1585:17): [True: 42.5k, False: 137k]
  ------------------
 1586|   179k|        }
 1587|   736k|    }
 1588|       |
 1589|   781k|    if ((region == nullptr && variant == nullptr && pEnd == nullptr) || localeID.empty()) { return; }
  ------------------
  |  Branch (1589:10): [True: 338k, False: 443k]
  |  Branch (1589:31): [True: 50.1k, False: 287k]
  |  Branch (1589:53): [True: 50.1k, False: 0]
  |  Branch (1589:73): [True: 120k, False: 610k]
  ------------------
 1590|       |
 1591|   610k|    if (_isIDSeparator(localeID.front())) {
  ------------------
  |  Branch (1591:9): [True: 564k, False: 45.6k]
  ------------------
 1592|   564k|        std::string_view sub = localeID;
 1593|   564k|        sub.remove_prefix(1);
 1594|   564k|        size_t len = _getRegion(sub, region);
 1595|   564k|        if (len > 0) {
  ------------------
  |  Branch (1595:13): [True: 346k, False: 218k]
  ------------------
 1596|   346k|            hasRegion = true;
 1597|   346k|            localeID.remove_prefix(len + 1);
 1598|   346k|            if (pEnd != nullptr) { *pEnd = localeID.data(); }
  ------------------
  |  Branch (1598:17): [True: 176k, False: 170k]
  ------------------
 1599|   346k|        }
 1600|   564k|    }
 1601|       |
 1602|   610k|    if ((variant == nullptr && pEnd == nullptr) || localeID.empty()) { return; }
  ------------------
  |  Branch (1602:10): [True: 91.3k, False: 519k]
  |  Branch (1602:32): [True: 91.3k, False: 0]
  |  Branch (1602:52): [True: 175k, False: 343k]
  ------------------
 1603|       |
 1604|   343k|    bool hasVariant = false;
 1605|       |
 1606|   343k|    if (_isIDSeparator(localeID.front()) && !_isBCP47Extension(localeID)) {
  ------------------
  |  Branch (1606:9): [True: 287k, False: 56.1k]
  |  Branch (1606:45): [True: 285k, False: 2.68k]
  ------------------
 1607|   285k|        std::string_view sub = localeID;
 1608|       |        /* If there was no country ID, skip a possible extra IDSeparator */
 1609|   285k|        size_t skip = !hasRegion && localeID.size() > 1 && _isIDSeparator(localeID[1]) ? 2 : 1;
  ------------------
  |  Branch (1609:23): [True: 211k, False: 73.0k]
  |  Branch (1609:37): [True: 208k, False: 3.24k]
  |  Branch (1609:60): [True: 206k, False: 2.13k]
  ------------------
 1610|   285k|        sub.remove_prefix(skip);
 1611|   285k|        size_t len = _getVariant(sub, localeID[0], variant, false, status);
 1612|   285k|        if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1612:13): [True: 118, False: 284k]
  ------------------
 1613|   284k|        if (len > 0) {
  ------------------
  |  Branch (1613:13): [True: 280k, False: 4.81k]
  ------------------
 1614|   280k|            hasVariant = true;
 1615|   280k|            localeID.remove_prefix(skip + len);
 1616|   280k|            if (pEnd != nullptr) { *pEnd = localeID.data(); }
  ------------------
  |  Branch (1616:17): [True: 101k, False: 178k]
  ------------------
 1617|   280k|        }
 1618|   284k|    }
 1619|       |
 1620|   343k|    if ((variant == nullptr && pEnd == nullptr) || localeID.empty()) { return; }
  ------------------
  |  Branch (1620:10): [True: 0, False: 343k]
  |  Branch (1620:32): [True: 0, False: 0]
  |  Branch (1620:52): [True: 261k, False: 82.1k]
  ------------------
 1621|       |
 1622|  82.1k|    if (_isBCP47Extension(localeID)) {
  ------------------
  |  Branch (1622:9): [True: 3.40k, False: 78.7k]
  ------------------
 1623|  3.40k|        localeID.remove_prefix(2);
 1624|  3.40k|        constexpr char vaposix[] = "-va-posix";
 1625|  3.40k|        constexpr size_t length = sizeof vaposix - 1;
 1626|   705k|        for (size_t next;; localeID.remove_prefix(next)) {
 1627|   705k|            next = localeID.find('-', 1);
 1628|   705k|            if (next == std::string_view::npos) { break; }
  ------------------
  |  Branch (1628:17): [True: 1.74k, False: 704k]
  ------------------
 1629|   704k|            next = localeID.find('-', next + 1);
 1630|   704k|            bool finished = next == std::string_view::npos;
 1631|   704k|            std::string_view sub = localeID;
 1632|   704k|            if (!finished) { sub.remove_suffix(sub.length() - next); }
  ------------------
  |  Branch (1632:17): [True: 702k, False: 1.66k]
  ------------------
 1633|       |
 1634|   704k|            if (sub.length() == length && uprv_strnicmp(sub.data(), vaposix, length) == 0) {
  ------------------
  |  | 1544|  69.8k|#define uprv_strnicmp U_ICU_ENTRY_POINT_RENAME(uprv_strnicmp)
  |  |  ------------------
  |  |  |  |  123|  69.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  69.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  69.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1634:17): [True: 69.8k, False: 634k]
  |  Branch (1634:43): [True: 34.6k, False: 35.1k]
  ------------------
 1635|  34.6k|                if (variant != nullptr) {
  ------------------
  |  Branch (1635:21): [True: 34.6k, False: 0]
  ------------------
 1636|  34.6k|                    if (hasVariant) { variant->Append("_", 1); }
  ------------------
  |  Branch (1636:25): [True: 31.7k, False: 2.93k]
  ------------------
 1637|  34.6k|                    constexpr char posix[] = "POSIX";
 1638|  34.6k|                    variant->Append(posix, sizeof posix - 1);
 1639|  34.6k|                }
 1640|  34.6k|                if (pEnd != nullptr) { *pEnd = localeID.data() + length; }
  ------------------
  |  Branch (1640:21): [True: 34.6k, False: 0]
  ------------------
 1641|  34.6k|            }
 1642|       |
 1643|   704k|            if (finished) { break; }
  ------------------
  |  Branch (1643:17): [True: 1.66k, False: 702k]
  ------------------
 1644|   704k|        }
 1645|  3.40k|    }
 1646|  82.1k|}
_Z20ulocimp_getParent_78PKcR10UErrorCode:
 2001|   175k|{
 2002|   175k|    return ByteSinkUtil::viaByteSinkToCharString(
 2003|   175k|        [&](ByteSink& sink, UErrorCode& status) {
 2004|   175k|            ulocimp_getParent(localeID, sink, status);
 2005|   175k|        },
 2006|   175k|        err);
 2007|   175k|}
_Z20ulocimp_getParent_78PKcRN6icu_788ByteSinkER10UErrorCode:
 2013|   175k|{
 2014|   175k|    if (U_FAILURE(err)) { return; }
  ------------------
  |  Branch (2014:9): [True: 0, False: 175k]
  ------------------
 2015|       |
 2016|   175k|    const char *lastUnderscore;
 2017|   175k|    int32_t i;
 2018|       |
 2019|   175k|    if (localeID == nullptr)
  ------------------
  |  Branch (2019:9): [True: 0, False: 175k]
  ------------------
 2020|      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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2021|       |
 2022|   175k|    lastUnderscore=uprv_strrchr(localeID, '_');
  ------------------
  |  |   42|   175k|#define uprv_strrchr(s, c) U_STANDARD_CPP_NAMESPACE strrchr(s, c)
  |  |  ------------------
  |  |  |  |  393|   175k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2023|   175k|    if(lastUnderscore!=nullptr) {
  ------------------
  |  Branch (2023:8): [True: 121k, False: 53.7k]
  ------------------
 2024|   121k|        i = static_cast<int32_t>(lastUnderscore - localeID);
 2025|   121k|    } else {
 2026|  53.7k|        i=0;
 2027|  53.7k|    }
 2028|       |
 2029|   175k|    if (i > 0) {
  ------------------
  |  Branch (2029:9): [True: 119k, False: 56.4k]
  ------------------
 2030|   119k|        if (uprv_strnicmp(localeID, "und_", 4) == 0) {
  ------------------
  |  | 1544|   119k|#define uprv_strnicmp U_ICU_ENTRY_POINT_RENAME(uprv_strnicmp)
  |  |  ------------------
  |  |  |  |  123|   119k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   119k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   119k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2030:13): [True: 0, False: 119k]
  ------------------
 2031|      0|            localeID += 3;
 2032|      0|            i -= 3;
 2033|      0|        }
 2034|   119k|        sink.Append(localeID, i);
 2035|   119k|    }
 2036|   175k|}
_Z18ulocimp_getName_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEER10UErrorCode:
 2159|  5.54k|{
 2160|  5.54k|    return ByteSinkUtil::viaByteSinkToCharString(
 2161|  5.54k|        [&](ByteSink& sink, UErrorCode& status) {
 2162|  5.54k|            ulocimp_getName(localeID, sink, status);
 2163|  5.54k|        },
 2164|  5.54k|        err);
 2165|  5.54k|}
_Z18ulocimp_getName_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEERN6icu_788ByteSinkER10UErrorCode:
 2171|  75.8k|{
 2172|  75.8k|    _canonicalize(localeID, sink, 0, err);
 2173|  75.8k|}
_Z22ulocimp_getBaseName_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEER10UErrorCode:
 2195|   346k|{
 2196|   346k|    return ByteSinkUtil::viaByteSinkToCharString(
 2197|   346k|        [&](ByteSink& sink, UErrorCode& status) {
 2198|   346k|            ulocimp_getBaseName(localeID, sink, status);
 2199|   346k|        },
 2200|   346k|        err);
 2201|   346k|}
_Z22ulocimp_getBaseName_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEERN6icu_788ByteSinkER10UErrorCode:
 2207|   345k|{
 2208|   345k|    _canonicalize(localeID, sink, _ULOC_STRIP_KEYWORDS, err);
  ------------------
  |  | 1785|   345k|#define _ULOC_STRIP_KEYWORDS 0x2
  ------------------
 2209|   345k|}
_Z23ulocimp_canonicalize_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEER10UErrorCode:
 2231|  34.3k|{
 2232|  34.3k|    return ByteSinkUtil::viaByteSinkToCharString(
 2233|  34.3k|        [&](ByteSink& sink, UErrorCode& status) {
 2234|  34.3k|            ulocimp_canonicalize(localeID, sink, status);
 2235|  34.3k|        },
 2236|  34.3k|        err);
 2237|  34.3k|}
_Z23ulocimp_canonicalize_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEERN6icu_788ByteSinkER10UErrorCode:
 2243|  35.2k|{
 2244|  35.2k|    _canonicalize(localeID, sink, _ULOC_CANONICALIZE, err);
  ------------------
  |  | 1786|  35.2k|#define _ULOC_CANONICALIZE   0x1
  ------------------
 2245|  35.2k|}
uloc_getDefault_78:
 2336|   465k|{
 2337|   465k|    return locale_get_default();
  ------------------
  |  |  139|   465k|#define locale_get_default U_ICU_ENTRY_POINT_RENAME(locale_get_default)
  |  |  ------------------
  |  |  |  |  123|   465k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   465k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   465k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2338|   465k|}
_Z34ulocimp_toLegacyKeyWithFallback_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEE:
 2456|  1.40M|{
 2457|  1.40M|    std::optional<std::string_view> legacyKey = ulocimp_toLegacyKey(keyword);
  ------------------
  |  | 1219|  1.40M|#define ulocimp_toLegacyKey U_ICU_ENTRY_POINT_RENAME(ulocimp_toLegacyKey)
  |  |  ------------------
  |  |  |  |  123|  1.40M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.40M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.40M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2458|  1.40M|    if (!legacyKey.has_value() && isWellFormedLegacyKey(keyword)) {
  ------------------
  |  Branch (2458:9): [True: 1.31M, False: 90.7k]
  |  Branch (2458:35): [True: 1.31M, False: 0]
  ------------------
 2459|       |        // Checks if the specified locale key is well-formed with the legacy locale syntax.
 2460|       |        //
 2461|       |        // Note:
 2462|       |        //  LDML/CLDR provides some definition of keyword syntax in
 2463|       |        //  * http://www.unicode.org/reports/tr35/#Unicode_locale_identifier and
 2464|       |        //  * http://www.unicode.org/reports/tr35/#Old_Locale_Extension_Syntax
 2465|       |        //  Keys can only consist of [0-9a-zA-Z].
 2466|  1.31M|        return keyword;
 2467|  1.31M|    }
 2468|  90.7k|    return legacyKey;
 2469|  1.40M|}
_Z35ulocimp_toLegacyTypeWithFallback_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEES3_:
 2482|  21.1k|{
 2483|  21.1k|    std::optional<std::string_view> legacyType = ulocimp_toLegacyType(keyword, value);
  ------------------
  |  | 1221|  21.1k|#define ulocimp_toLegacyType U_ICU_ENTRY_POINT_RENAME(ulocimp_toLegacyType)
  |  |  ------------------
  |  |  |  |  123|  21.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  21.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  21.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2484|  21.1k|    if (!legacyType.has_value() && isWellFormedLegacyType(value)) {
  ------------------
  |  Branch (2484:9): [True: 19.6k, False: 1.53k]
  |  Branch (2484:36): [True: 19.6k, False: 0]
  ------------------
 2485|       |        // Checks if the specified locale type is well-formed with the legacy locale syntax.
 2486|       |        //
 2487|       |        // Note:
 2488|       |        //  LDML/CLDR provides some definition of keyword syntax in
 2489|       |        //  * http://www.unicode.org/reports/tr35/#Unicode_locale_identifier and
 2490|       |        //  * http://www.unicode.org/reports/tr35/#Old_Locale_Extension_Syntax
 2491|       |        //  Values (types) can only consist of [0-9a-zA-Z], plus for legacy values
 2492|       |        //  we allow [/_-+] in the middle (e.g. "Etc/GMT+1", "Asia/Tel_Aviv")
 2493|  19.6k|        return value;
 2494|  19.6k|    }
 2495|  1.53k|    return legacyType;
 2496|  21.1k|}
uloc.cpp:_ZN12_GLOBAL__N_121compareKeywordStructsEPKvS1_S1_:
  583|   106k|compareKeywordStructs(const void * /*context*/, const void *left, const void *right) {
  584|   106k|    const char* leftString = static_cast<const KeywordStruct*>(left)->keyword;
  585|   106k|    const char* rightString = static_cast<const KeywordStruct*>(right)->keyword;
  586|   106k|    return uprv_strcmp(leftString, rightString);
  ------------------
  |  |   38|   106k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|   106k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  587|   106k|}
uloc.cpp:_ZN12_GLOBAL__N_123locale_canonKeywordNameENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEER10UErrorCode:
  556|   165k|{
  557|   165k|  if (U_FAILURE(status)) { return {}; }
  ------------------
  |  Branch (557:7): [True: 0, False: 165k]
  ------------------
  558|   165k|  CharString result;
  559|       |
  560|   932k|  for (char c : keywordName) {
  ------------------
  |  Branch (560:15): [True: 932k, False: 165k]
  ------------------
  561|   932k|    if (!UPRV_ISALPHANUM(c)) {
  ------------------
  |  Branch (561:9): [True: 0, False: 932k]
  ------------------
  562|      0|      status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed keyword name */
  563|      0|      return {};
  564|      0|    }
  565|   932k|    result.append(uprv_tolower(c), status);
  ------------------
  |  |   68|   932k|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|   932k|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|   932k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|   932k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|   932k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  566|   932k|  }
  567|   165k|  if (result.isEmpty()) {
  ------------------
  |  Branch (567:7): [True: 0, False: 165k]
  ------------------
  568|      0|    status = U_ILLEGAL_ARGUMENT_ERROR; /* empty keyword name */
  569|      0|    return {};
  570|      0|  }
  571|       |
  572|   165k|  return result;
  573|   165k|}
uloc.cpp:_ZN12_GLOBAL__N_118_hasBCP47ExtensionENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEE:
  510|   622k|inline bool _hasBCP47Extension(std::string_view id) {
  511|   622k|    return id.find('@') == std::string_view::npos && getShortestSubtagLength(id) == 1;
  ------------------
  |  Branch (511:12): [True: 531k, False: 91.1k]
  |  Branch (511:54): [True: 143k, False: 387k]
  ------------------
  512|   622k|}
uloc.cpp:_ZN12_GLOBAL__N_123getShortestSubtagLengthENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEE:
  485|   531k|int32_t getShortestSubtagLength(std::string_view localeID) {
  486|   531k|    int32_t localeIDLength = static_cast<int32_t>(localeID.length());
  487|   531k|    int32_t length = localeIDLength;
  488|   531k|    int32_t tmpLength = 0;
  489|   531k|    int32_t i;
  490|   531k|    bool reset = true;
  491|       |
  492|  79.0M|    for (i = 0; i < localeIDLength; i++) {
  ------------------
  |  Branch (492:17): [True: 78.4M, False: 531k]
  ------------------
  493|  78.4M|        if (localeID[i] != '_' && localeID[i] != '-') {
  ------------------
  |  Branch (493:13): [True: 73.4M, False: 4.99M]
  |  Branch (493:35): [True: 72.2M, False: 1.28M]
  ------------------
  494|  72.2M|            if (reset) {
  ------------------
  |  Branch (494:17): [True: 4.80M, False: 67.4M]
  ------------------
  495|  4.80M|                tmpLength = 0;
  496|  4.80M|                reset = false;
  497|  4.80M|            }
  498|  72.2M|            tmpLength++;
  499|  72.2M|        } else {
  500|  6.27M|            if (tmpLength != 0 && tmpLength < length) {
  ------------------
  |  Branch (500:17): [True: 6.10M, False: 165k]
  |  Branch (500:35): [True: 392k, False: 5.71M]
  ------------------
  501|   392k|                length = tmpLength;
  502|   392k|            }
  503|  6.27M|            reset = true;
  504|  6.27M|        }
  505|  78.4M|    }
  506|       |
  507|   531k|    return length;
  508|   531k|}
uloc.cpp:_ZN12_GLOBAL__N_115UPRV_ISALPHANUMEc:
  516|  48.1M|inline bool UPRV_ISALPHANUM(char c) { return uprv_isASCIILetter(c) || UPRV_ISDIGIT(c); }
  ------------------
  |  | 1514|  48.1M|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  123|  48.1M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  48.1M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  48.1M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (516:46): [True: 45.8M, False: 2.30M]
  |  Branch (516:71): [True: 46.7k, False: 2.25M]
  ------------------
uloc.cpp:_ZN12_GLOBAL__N_112UPRV_ISDIGITEc:
  515|  2.30M|inline bool UPRV_ISDIGIT(char c) { return c >= '0' && c <= '9'; }
  ------------------
  |  Branch (515:43): [True: 2.03M, False: 272k]
  |  Branch (515:55): [True: 46.7k, False: 1.98M]
  ------------------
uloc.cpp:_ZN12_GLOBAL__N_125UPRV_OK_VALUE_PUNCTUATIONEc:
  518|  2.25M|inline bool UPRV_OK_VALUE_PUNCTUATION(char c) { return c == '_' || c == '-' || c == '+' || c == '/'; }
  ------------------
  |  Branch (518:56): [True: 1.98M, False: 272k]
  |  Branch (518:68): [True: 270k, False: 1.84k]
  |  Branch (518:80): [True: 787, False: 1.05k]
  |  Branch (518:92): [True: 574, False: 481]
  ------------------
uloc.cpp:_ZN12_GLOBAL__N_110_findIndexEPKPKcS1_:
 1178|   103k|{
 1179|   103k|    const char* const* anchor = list;
 1180|   103k|    int32_t pass = 0;
 1181|       |
 1182|       |    /* Make two passes through two nullptr-terminated arrays at 'list' */
 1183|   185k|    while (pass++ < 2) {
  ------------------
  |  Branch (1183:12): [True: 144k, False: 40.9k]
  ------------------
 1184|  38.1M|        while (*list) {
  ------------------
  |  Branch (1184:16): [True: 38.1M, False: 82.0k]
  ------------------
 1185|  38.1M|            if (uprv_strcmp(key, *list) == 0) {
  ------------------
  |  |   38|  38.1M|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  38.1M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1185:17): [True: 62.1k, False: 38.0M]
  ------------------
 1186|  62.1k|                return static_cast<int16_t>(list - anchor);
 1187|  62.1k|            }
 1188|  38.0M|            list++;
 1189|  38.0M|        }
 1190|  82.0k|        ++list;     /* skip final nullptr *CWB*/
 1191|  82.0k|    }
 1192|  40.9k|    return std::nullopt;
 1193|   103k|}
uloc.cpp:_ZN12_GLOBAL__N_112_getLanguageENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEEPN6icu_788ByteSinkER10UErrorCode:
 1219|  1.09M|size_t _getLanguage(std::string_view localeID, ByteSink* sink, UErrorCode& status) {
 1220|  1.09M|    size_t skip = 0;
 1221|  1.09M|    if (localeID.size() == 4 && uprv_strnicmp(localeID.data(), "root", 4) == 0) {
  ------------------
  |  | 1544|  25.1k|#define uprv_strnicmp U_ICU_ENTRY_POINT_RENAME(uprv_strnicmp)
  |  |  ------------------
  |  |  |  |  123|  25.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  25.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  25.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1221:9): [True: 25.1k, False: 1.07M]
  |  Branch (1221:33): [True: 2.21k, False: 22.9k]
  ------------------
 1222|  2.21k|        skip = 4;
 1223|  2.21k|        localeID.remove_prefix(skip);
 1224|  1.09M|    } else if (localeID.size() >= 3 && uprv_strnicmp(localeID.data(), "und", 3) == 0 &&
  ------------------
  |  | 1544|   903k|#define uprv_strnicmp U_ICU_ENTRY_POINT_RENAME(uprv_strnicmp)
  |  |  ------------------
  |  |  |  |  123|   903k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   903k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   903k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1224:16): [True: 903k, False: 191k]
  |  Branch (1224:40): [True: 51.7k, False: 852k]
  ------------------
 1225|  1.09M|               (localeID.size() == 3 ||
  ------------------
  |  Branch (1225:17): [True: 43.9k, False: 7.75k]
  ------------------
 1226|  51.7k|                localeID[3] == '-' ||
  ------------------
  |  Branch (1226:17): [True: 26, False: 7.72k]
  ------------------
 1227|  51.7k|                localeID[3] == '_' ||
  ------------------
  |  Branch (1227:17): [True: 887, False: 6.83k]
  ------------------
 1228|  51.7k|                localeID[3] == '@')) {
  ------------------
  |  Branch (1228:17): [True: 730, False: 6.10k]
  ------------------
 1229|  45.6k|        skip = 3;
 1230|  45.6k|        localeID.remove_prefix(skip);
 1231|  45.6k|    }
 1232|       |
 1233|  1.09M|    constexpr int32_t MAXLEN = ULOC_LANG_CAPACITY - 1;  // Minus NUL.
  ------------------
  |  |  251|  1.09M|#define ULOC_LANG_CAPACITY 12
  ------------------
 1234|       |
 1235|       |    /* if it starts with i- or x- then copy that prefix */
 1236|  1.09M|    size_t len = _isIDPrefix(localeID) ? 2 : 0;
  ------------------
  |  Branch (1236:18): [True: 21.7k, False: 1.07M]
  ------------------
 1237|  3.05M|    while (len < localeID.size() && !_isTerminator(localeID[len]) && !_isIDSeparator(localeID[len])) {
  ------------------
  |  Branch (1237:12): [True: 2.73M, False: 315k]
  |  Branch (1237:37): [True: 2.69M, False: 44.8k]
  |  Branch (1237:70): [True: 1.95M, False: 736k]
  ------------------
 1238|  1.95M|        if (len == MAXLEN) {
  ------------------
  |  Branch (1238:13): [True: 73, False: 1.95M]
  ------------------
 1239|     73|            status = U_ILLEGAL_ARGUMENT_ERROR;
 1240|     73|            return 0;
 1241|     73|        }
 1242|  1.95M|        len++;
 1243|  1.95M|    }
 1244|       |
 1245|  1.09M|    if (sink == nullptr || len == 0) { return skip + len; }
  ------------------
  |  Branch (1245:9): [True: 423k, False: 674k]
  |  Branch (1245:28): [True: 126k, False: 547k]
  ------------------
 1246|       |
 1247|   547k|    int32_t minCapacity = uprv_max(static_cast<int32_t>(len), 4);  // Minimum 3 letters plus NUL.
  ------------------
  |  | 1526|   547k|#define uprv_max U_ICU_ENTRY_POINT_RENAME(uprv_max)
  |  |  ------------------
  |  |  |  |  123|   547k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   547k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   547k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1248|   547k|    char scratch[MAXLEN];
 1249|   547k|    int32_t capacity = 0;
 1250|   547k|    char* buffer = sink->GetAppendBuffer(
 1251|   547k|            minCapacity, minCapacity, scratch, UPRV_LENGTHOF(scratch), &capacity);
  ------------------
  |  |   99|   547k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
 1252|       |
 1253|  1.85M|    for (size_t i = 0; i < len; ++i) {
  ------------------
  |  Branch (1253:24): [True: 1.30M, False: 547k]
  ------------------
 1254|  1.30M|        buffer[i] = uprv_tolower(localeID[i]);
  ------------------
  |  |   68|  1.30M|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|  1.30M|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  1.30M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|  1.30M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|  1.30M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1255|  1.30M|    }
 1256|   547k|    if (localeID.size() >= 2 && _isIDSeparator(localeID[1])) {
  ------------------
  |  Branch (1256:9): [True: 508k, False: 38.1k]
  |  Branch (1256:33): [True: 29.5k, False: 479k]
  ------------------
 1257|  29.5k|        buffer[1] = '-';
 1258|  29.5k|    }
 1259|       |
 1260|   547k|    if (len == 3) {
  ------------------
  |  Branch (1260:9): [True: 82.0k, False: 465k]
  ------------------
 1261|       |        /* convert 3 character code to 2 character code if possible *CWB*/
 1262|  82.0k|        U_ASSERT(capacity >= 4);
  ------------------
  |  |   35|  82.0k|#   define U_ASSERT(exp) (void)0
  ------------------
 1263|  82.0k|        buffer[3] = '\0';
 1264|  82.0k|        std::optional<int16_t> offset = _findIndex(LANGUAGES_3, buffer);
 1265|  82.0k|        if (offset.has_value()) {
  ------------------
  |  Branch (1265:13): [True: 62.1k, False: 19.9k]
  ------------------
 1266|  62.1k|            const char* const alias = LANGUAGES[*offset];
 1267|  62.1k|            sink->Append(alias, static_cast<int32_t>(uprv_strlen(alias)));
  ------------------
  |  |   37|  62.1k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  62.1k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1268|  62.1k|            return skip + len;
 1269|  62.1k|        }
 1270|  82.0k|    }
 1271|       |
 1272|   485k|    sink->Append(buffer, static_cast<int32_t>(len));
 1273|   485k|    return skip + len;
 1274|   547k|}
uloc.cpp:_ZN12_GLOBAL__N_111_isIDPrefixENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEE:
 1152|  1.09M|inline bool _isIDPrefix(std::string_view s) {
 1153|  1.09M|    return s.size() >= 2 && _isPrefixLetter(s[0]) && _isIDSeparator(s[1]);
  ------------------
  |  Branch (1153:12): [True: 985k, False: 111k]
  |  Branch (1153:29): [True: 36.6k, False: 948k]
  |  Branch (1153:54): [True: 21.7k, False: 14.9k]
  ------------------
 1154|  1.09M|}
uloc.cpp:_ZN12_GLOBAL__N_115_isPrefixLetterEc:
 1148|   985k|inline bool _isPrefixLetter(char a) { return a == 'x' || a == 'X' || a == 'i' || a == 'I'; }
  ------------------
  |  Branch (1148:46): [True: 22.0k, False: 963k]
  |  Branch (1148:58): [True: 45, False: 963k]
  |  Branch (1148:70): [True: 14.5k, False: 948k]
  |  Branch (1148:82): [True: 18, False: 948k]
  ------------------
uloc.cpp:_ZN12_GLOBAL__N_113_isTerminatorEc:
 1159|  8.64M|inline bool _isTerminator(char a) { return a == '.' || a == '@'; }
  ------------------
  |  Branch (1159:44): [True: 18.6k, False: 8.62M]
  |  Branch (1159:56): [True: 81.9k, False: 8.54M]
  ------------------
uloc.cpp:_ZN12_GLOBAL__N_110_getScriptENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEEPN6icu_788ByteSinkE:
 1276|   736k|size_t _getScript(std::string_view localeID, ByteSink* sink) {
 1277|   736k|    constexpr int32_t LENGTH = 4;
 1278|       |
 1279|   736k|    size_t len = 0;
 1280|  2.12M|    while (len < localeID.size() && !_isTerminator(localeID[len]) && !_isIDSeparator(localeID[len]) &&
  ------------------
  |  Branch (1280:12): [True: 1.78M, False: 339k]
  |  Branch (1280:37): [True: 1.76M, False: 16.2k]
  |  Branch (1280:70): [True: 1.43M, False: 332k]
  ------------------
 1281|  2.12M|            uprv_isASCIILetter(localeID[len])) {
  ------------------
  |  | 1514|  1.43M|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  123|  1.43M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.43M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.43M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1281:13): [True: 1.38M, False: 46.5k]
  ------------------
 1282|  1.38M|        if (len == LENGTH) { return 0; }
  ------------------
  |  Branch (1282:13): [True: 1.03k, False: 1.38M]
  ------------------
 1283|  1.38M|        len++;
 1284|  1.38M|    }
 1285|   735k|    if (len != LENGTH) { return 0; }
  ------------------
  |  Branch (1285:9): [True: 555k, False: 179k]
  ------------------
 1286|       |
 1287|   179k|    if (sink == nullptr) { return len; }
  ------------------
  |  Branch (1287:9): [True: 80.3k, False: 99.5k]
  ------------------
 1288|       |
 1289|  99.5k|    char scratch[LENGTH];
 1290|  99.5k|    int32_t capacity = 0;
 1291|  99.5k|    char* buffer = sink->GetAppendBuffer(
 1292|  99.5k|            LENGTH, LENGTH, scratch, UPRV_LENGTHOF(scratch), &capacity);
  ------------------
  |  |   99|  99.5k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
 1293|       |
 1294|  99.5k|    buffer[0] = uprv_toupper(localeID[0]);
  ------------------
  |  | 1547|  99.5k|#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper)
  |  |  ------------------
  |  |  |  |  123|  99.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  99.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  99.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1295|   398k|    for (int32_t i = 1; i < LENGTH; ++i) {
  ------------------
  |  Branch (1295:25): [True: 298k, False: 99.5k]
  ------------------
 1296|   298k|        buffer[i] = uprv_tolower(localeID[i]);
  ------------------
  |  |   68|   298k|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|   298k|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|   298k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|   298k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|   298k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1297|   298k|    }
 1298|       |
 1299|  99.5k|    sink->Append(buffer, LENGTH);
 1300|  99.5k|    return len;
 1301|   179k|}
uloc.cpp:_ZN12_GLOBAL__N_110_getRegionENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEEPN6icu_788ByteSinkE:
 1303|   564k|size_t _getRegion(std::string_view localeID, ByteSink* sink) {
 1304|   564k|    constexpr int32_t MINLEN = 2;
 1305|   564k|    constexpr int32_t MAXLEN = ULOC_COUNTRY_CAPACITY - 1;  // Minus NUL.
  ------------------
  |  |  258|   564k|#define ULOC_COUNTRY_CAPACITY 4
  ------------------
 1306|       |
 1307|   564k|    size_t len = 0;
 1308|  1.30M|    while (len < localeID.size() && !_isTerminator(localeID[len]) && !_isIDSeparator(localeID[len])) {
  ------------------
  |  Branch (1308:12): [True: 1.05M, False: 247k]
  |  Branch (1308:37): [True: 1.03M, False: 21.6k]
  |  Branch (1308:70): [True: 739k, False: 294k]
  ------------------
 1309|   739k|        if (len == MAXLEN) { return 0; }
  ------------------
  |  Branch (1309:13): [True: 1.43k, False: 738k]
  ------------------
 1310|   738k|        len++;
 1311|   738k|    }
 1312|   563k|    if (len < MINLEN) { return 0; }
  ------------------
  |  Branch (1312:9): [True: 216k, False: 346k]
  ------------------
 1313|       |
 1314|   346k|    if (sink == nullptr) { return len; }
  ------------------
  |  Branch (1314:9): [True: 93.1k, False: 253k]
  ------------------
 1315|       |
 1316|   253k|    char scratch[ULOC_COUNTRY_CAPACITY];
 1317|   253k|    int32_t capacity = 0;
 1318|   253k|    char* buffer = sink->GetAppendBuffer(
 1319|   253k|            ULOC_COUNTRY_CAPACITY,
  ------------------
  |  |  258|   253k|#define ULOC_COUNTRY_CAPACITY 4
  ------------------
 1320|   253k|            ULOC_COUNTRY_CAPACITY,
  ------------------
  |  |  258|   253k|#define ULOC_COUNTRY_CAPACITY 4
  ------------------
 1321|   253k|            scratch,
 1322|   253k|            UPRV_LENGTHOF(scratch),
  ------------------
  |  |   99|   253k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
 1323|   253k|            &capacity);
 1324|       |
 1325|   781k|    for (size_t i = 0; i < len; ++i) {
  ------------------
  |  Branch (1325:24): [True: 527k, False: 253k]
  ------------------
 1326|   527k|        buffer[i] = uprv_toupper(localeID[i]);
  ------------------
  |  | 1547|   527k|#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper)
  |  |  ------------------
  |  |  |  |  123|   527k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   527k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   527k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1327|   527k|    }
 1328|       |
 1329|   253k|    if (len == 3) {
  ------------------
  |  Branch (1329:9): [True: 21.0k, False: 232k]
  ------------------
 1330|       |        /* convert 3 character code to 2 character code if possible *CWB*/
 1331|  21.0k|        U_ASSERT(capacity >= 4);
  ------------------
  |  |   35|  21.0k|#   define U_ASSERT(exp) (void)0
  ------------------
 1332|  21.0k|        buffer[3] = '\0';
 1333|  21.0k|        std::optional<int16_t> offset = _findIndex(COUNTRIES_3, buffer);
 1334|  21.0k|        if (offset.has_value()) {
  ------------------
  |  Branch (1334:13): [True: 8, False: 21.0k]
  ------------------
 1335|      8|            const char* const alias = COUNTRIES[*offset];
 1336|      8|            sink->Append(alias, static_cast<int32_t>(uprv_strlen(alias)));
  ------------------
  |  |   37|      8|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      8|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1337|      8|            return len;
 1338|      8|        }
 1339|  21.0k|    }
 1340|       |
 1341|   253k|    sink->Append(buffer, static_cast<int32_t>(len));
 1342|   253k|    return len;
 1343|   253k|}
uloc.cpp:_ZN12_GLOBAL__N_117_isBCP47ExtensionENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEE:
 1161|  3.41M|inline bool _isBCP47Extension(std::string_view p) {
 1162|  3.41M|    return p.size() >= 3 &&
  ------------------
  |  Branch (1162:12): [True: 3.31M, False: 103k]
  ------------------
 1163|  3.41M|           p[0] == '-' &&
  ------------------
  |  Branch (1163:12): [True: 266k, False: 3.04M]
  ------------------
 1164|  3.41M|           (p[1] == 't' || p[1] == 'T' ||
  ------------------
  |  Branch (1164:13): [True: 237, False: 266k]
  |  Branch (1164:28): [True: 2.32k, False: 264k]
  ------------------
 1165|   266k|            p[1] == 'u' || p[1] == 'U' ||
  ------------------
  |  Branch (1165:13): [True: 360, False: 263k]
  |  Branch (1165:28): [True: 5.34k, False: 258k]
  ------------------
 1166|   266k|            p[1] == 'x' || p[1] == 'X') &&
  ------------------
  |  Branch (1166:13): [True: 157, False: 258k]
  |  Branch (1166:28): [True: 2.01k, False: 256k]
  ------------------
 1167|  3.41M|           p[2] == '-';
  ------------------
  |  Branch (1167:12): [True: 7.63k, False: 2.81k]
  ------------------
 1168|  3.41M|}
uloc.cpp:_ZN12_GLOBAL__N_111_getVariantENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEEcPN6icu_788ByteSinkEbR10UErrorCode:
 1354|   285k|            UErrorCode& status) {
 1355|   285k|    if (U_FAILURE(status) || localeID.empty()) return 0;
  ------------------
  |  Branch (1355:9): [True: 0, False: 285k]
  |  Branch (1355:30): [True: 3.94k, False: 281k]
  ------------------
 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|   281k|    constexpr int32_t MAX_VARIANTS_LENGTH = 179;
 1366|       |
 1367|       |    /* get one or more variant tags and separate them with '_' */
 1368|   281k|    size_t index = 0;
 1369|   281k|    if (_isIDSeparator(prev)) {
  ------------------
  |  Branch (1369:9): [True: 281k, False: 0]
  ------------------
 1370|       |        /* get a variant string after a '-' or '_' */
 1371|  3.32M|        for (std::string_view sub = localeID;;) {
 1372|  3.32M|            size_t next = sub.find_first_of(".@_-");
 1373|       |            // For historical reasons, a trailing separator is included in the variant.
 1374|  3.32M|            bool finished = next == std::string_view::npos || next + 1 == sub.length();
  ------------------
  |  Branch (1374:29): [True: 212k, False: 3.11M]
  |  Branch (1374:63): [True: 48.6k, False: 3.06M]
  ------------------
 1375|  3.32M|            size_t limit = finished ? sub.length() : next;
  ------------------
  |  Branch (1375:28): [True: 261k, False: 3.06M]
  ------------------
 1376|  3.32M|            index += limit;
 1377|  3.32M|            if (index > MAX_VARIANTS_LENGTH) {
  ------------------
  |  Branch (1377:17): [True: 118, False: 3.32M]
  ------------------
 1378|    118|                status = U_ILLEGAL_ARGUMENT_ERROR;
 1379|    118|                return 0;
 1380|    118|            }
 1381|       |
 1382|  3.32M|            if (sink != nullptr) {
  ------------------
  |  Branch (1382:17): [True: 3.32M, False: 0]
  ------------------
 1383|  3.32M|                if (needSeparator) {
  ------------------
  |  Branch (1383:21): [True: 3.04M, False: 281k]
  ------------------
 1384|  3.04M|                    sink->Append("_", 1);
 1385|  3.04M|                } else {
 1386|   281k|                    needSeparator = true;
 1387|   281k|                }
 1388|       |
 1389|  3.32M|                int32_t length = static_cast<int32_t>(limit);
 1390|  3.32M|                int32_t minCapacity = uprv_min(length, MAX_VARIANTS_LENGTH);
  ------------------
  |  | 1529|  3.32M|#define uprv_min U_ICU_ENTRY_POINT_RENAME(uprv_min)
  |  |  ------------------
  |  |  |  |  123|  3.32M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  3.32M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  3.32M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1391|  3.32M|                char scratch[MAX_VARIANTS_LENGTH];
 1392|  3.32M|                int32_t capacity = 0;
 1393|  3.32M|                char* buffer = sink->GetAppendBuffer(
 1394|  3.32M|                        minCapacity, minCapacity, scratch, UPRV_LENGTHOF(scratch), &capacity);
  ------------------
  |  |   99|  3.32M|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
 1395|       |
 1396|  6.70M|                for (size_t i = 0; i < limit; ++i) {
  ------------------
  |  Branch (1396:36): [True: 3.37M, False: 3.32M]
  ------------------
 1397|  3.37M|                    buffer[i] = uprv_toupper(sub[i]);
  ------------------
  |  | 1547|  3.37M|#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper)
  |  |  ------------------
  |  |  |  |  123|  3.37M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  3.37M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  3.37M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1398|  3.37M|                }
 1399|  3.32M|                sink->Append(buffer, length);
 1400|  3.32M|            }
 1401|       |
 1402|  3.32M|            if (finished) { return index; }
  ------------------
  |  Branch (1402:17): [True: 261k, False: 3.06M]
  ------------------
 1403|  3.06M|            sub.remove_prefix(next);
 1404|  3.06M|            if (_isTerminator(sub.front()) || _isBCP47Extension(sub)) { return index; }
  ------------------
  |  Branch (1404:17): [True: 17.8k, False: 3.04M]
  |  Branch (1404:47): [True: 1.54k, False: 3.04M]
  ------------------
 1405|  3.04M|            sub.remove_prefix(1);
 1406|  3.04M|            index++;
 1407|  3.04M|        }
 1408|   281k|    }
 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|   456k|              UErrorCode& err) {
 1807|   456k|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (1807:9): [True: 0, False: 456k]
  ------------------
 1808|      0|        return;
 1809|      0|    }
 1810|       |
 1811|   456k|    int32_t j, fieldCount=0;
 1812|   456k|    CharString tempBuffer;  // if localeID has a BCP47 extension, tmpLocaleID points to this
 1813|   456k|    CharString localeIDWithHyphens;  // if localeID has a BPC47 extension and have _, tmpLocaleID points to this
 1814|   456k|    std::string_view origLocaleID;
 1815|   456k|    std::string_view tmpLocaleID;
 1816|   456k|    size_t keywordAssign = std::string_view::npos;
 1817|   456k|    size_t separatorIndicator = std::string_view::npos;
 1818|       |
 1819|   456k|    if (_hasBCP47Extension(localeID)) {
  ------------------
  |  Branch (1819:9): [True: 118k, False: 338k]
  ------------------
 1820|   118k|        std::string_view localeIDPtr = localeID;
 1821|       |
 1822|       |        // convert all underbars to hyphens, unless the "BCP47 extension" comes at the beginning of the string
 1823|   118k|        if (localeID.size() >= 2 && localeID.find('_') != std::string_view::npos && localeID[1] != '-' && localeID[1] != '_') {
  ------------------
  |  Branch (1823:13): [True: 99.4k, False: 18.8k]
  |  Branch (1823:37): [True: 95.6k, False: 3.80k]
  |  Branch (1823:85): [True: 92.0k, False: 3.58k]
  |  Branch (1823:107): [True: 55.4k, False: 36.6k]
  ------------------
 1824|  55.4k|            localeIDWithHyphens.append(localeID, err);
 1825|  55.4k|            if (U_SUCCESS(err)) {
  ------------------
  |  Branch (1825:17): [True: 55.4k, False: 0]
  ------------------
 1826|  39.9M|                for (char* p = localeIDWithHyphens.data(); *p != '\0'; ++p) {
  ------------------
  |  Branch (1826:60): [True: 39.9M, False: 55.4k]
  ------------------
 1827|  39.9M|                    if (*p == '_') {
  ------------------
  |  Branch (1827:25): [True: 3.64M, False: 36.3M]
  ------------------
 1828|  3.64M|                        *p = '-';
 1829|  3.64M|                    }
 1830|  39.9M|                }
 1831|  55.4k|                localeIDPtr = localeIDWithHyphens.toStringPiece();
 1832|  55.4k|            }
 1833|  55.4k|        }
 1834|       |
 1835|   118k|        tempBuffer = ulocimp_forLanguageTag(localeIDPtr.data(), static_cast<int32_t>(localeIDPtr.size()), nullptr, err);
  ------------------
  |  | 1198|   118k|#define ulocimp_forLanguageTag U_ICU_ENTRY_POINT_RENAME(ulocimp_forLanguageTag)
  |  |  ------------------
  |  |  |  |  123|   118k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   118k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   118k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1836|   118k|        tmpLocaleID = U_SUCCESS(err) && !tempBuffer.isEmpty() ? static_cast<std::string_view>(tempBuffer.toStringPiece()) : localeIDPtr;
  ------------------
  |  Branch (1836:23): [True: 118k, False: 0]
  |  Branch (1836:41): [True: 40.1k, False: 78.0k]
  ------------------
 1837|   338k|    } else {
 1838|   338k|        tmpLocaleID=localeID;
 1839|   338k|    }
 1840|       |
 1841|   456k|    origLocaleID=tmpLocaleID;
 1842|       |
 1843|       |    /* get all pieces, one after another, and separate with '_' */
 1844|   456k|    CharString tag;
 1845|   456k|    CharString script;
 1846|   456k|    CharString country;
 1847|   456k|    CharString variant;
 1848|   456k|    const char* end = nullptr;
 1849|   456k|    ulocimp_getSubtags(
  ------------------
  |  | 1209|   456k|#define ulocimp_getSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_getSubtags)
  |  |  ------------------
  |  |  |  |  123|   456k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   456k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   456k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1850|   456k|            tmpLocaleID,
 1851|   456k|            &tag,
 1852|   456k|            &script,
 1853|   456k|            &country,
 1854|   456k|            &variant,
 1855|   456k|            &end,
 1856|   456k|            err);
 1857|   456k|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (1857:9): [True: 191, False: 456k]
  ------------------
 1858|    191|        return;
 1859|    191|    }
 1860|   456k|    U_ASSERT(end != nullptr);
  ------------------
  |  |   35|   456k|#   define U_ASSERT(exp) (void)0
  ------------------
 1861|   456k|    if (end > tmpLocaleID.data()) {
  ------------------
  |  Branch (1861:9): [True: 384k, False: 72.4k]
  ------------------
 1862|   384k|        tmpLocaleID.remove_prefix(end - tmpLocaleID.data());
 1863|   384k|    }
 1864|       |
 1865|   456k|    if (tag.length() == I_DEFAULT_LENGTH && origLocaleID.length() >= I_DEFAULT_LENGTH &&
  ------------------
  |  Branch (1865:9): [True: 4.03k, False: 452k]
  |  Branch (1865:45): [True: 4.03k, False: 0]
  ------------------
 1866|   456k|            uprv_strncmp(origLocaleID.data(), i_default, I_DEFAULT_LENGTH) == 0) {
  ------------------
  |  |   44|  4.03k|#define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n)
  |  |  ------------------
  |  |  |  |  393|  4.03k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1866:13): [True: 66, False: 3.96k]
  ------------------
 1867|     66|        tag.clear();
 1868|     66|        tag.append(uloc_getDefault(), err);
  ------------------
  |  | 1118|     66|#define uloc_getDefault U_ICU_ENTRY_POINT_RENAME(uloc_getDefault)
  |  |  ------------------
  |  |  |  |  123|     66|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     66|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     66|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1869|   456k|    } else {
 1870|   456k|        if (!script.isEmpty()) {
  ------------------
  |  Branch (1870:13): [True: 40.2k, False: 416k]
  ------------------
 1871|  40.2k|            ++fieldCount;
 1872|  40.2k|            tag.append('_', err);
 1873|  40.2k|            tag.append(script, err);
 1874|  40.2k|        }
 1875|   456k|        if (!country.isEmpty()) {
  ------------------
  |  Branch (1875:13): [True: 173k, False: 283k]
  ------------------
 1876|   173k|            ++fieldCount;
 1877|   173k|            tag.append('_', err);
 1878|   173k|            tag.append(country, err);
 1879|   173k|        }
 1880|   456k|        if (!variant.isEmpty()) {
  ------------------
  |  Branch (1880:13): [True: 93.9k, False: 362k]
  ------------------
 1881|  93.9k|            ++fieldCount;
 1882|  93.9k|            if (country.isEmpty()) {
  ------------------
  |  Branch (1882:17): [True: 62.9k, False: 31.0k]
  ------------------
 1883|  62.9k|                tag.append('_', err);
 1884|  62.9k|            }
 1885|  93.9k|            tag.append('_', err);
 1886|  93.9k|            tag.append(variant, err);
 1887|  93.9k|        }
 1888|   456k|    }
 1889|       |
 1890|       |    /* Copy POSIX-style charset specifier, if any [mr.utf8] */
 1891|   456k|    if (!OPTION_SET(options, _ULOC_CANONICALIZE) && !tmpLocaleID.empty() && tmpLocaleID.front() == '.') {
  ------------------
  |  | 1786|   456k|#define _ULOC_CANONICALIZE   0x1
  ------------------
  |  Branch (1891:9): [True: 421k, False: 35.2k]
  |  Branch (1891:53): [True: 58.2k, False: 363k]
  |  Branch (1891:77): [True: 6.18k, False: 52.0k]
  ------------------
 1892|  6.18k|        tag.append('.', err);
 1893|  6.18k|        tmpLocaleID.remove_prefix(1);
 1894|  6.18k|        size_t length;
 1895|  6.18k|        if (size_t atPos = tmpLocaleID.find('@'); atPos != std::string_view::npos) {
  ------------------
  |  Branch (1895:51): [True: 675, False: 5.51k]
  ------------------
 1896|    675|            length = atPos;
 1897|  5.51k|        } else {
 1898|  5.51k|            length = tmpLocaleID.length();
 1899|  5.51k|        }
 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|  6.18k|        constexpr size_t kMaxCharsetLength = 64;
 1906|  6.18k|        if (length > kMaxCharsetLength) {
  ------------------
  |  Branch (1906:13): [True: 60, False: 6.12k]
  ------------------
 1907|     60|           err = U_ILLEGAL_ARGUMENT_ERROR; /* malformed keyword name */
 1908|     60|           return;
 1909|     60|        }
 1910|  6.12k|        if (length > 0) {
  ------------------
  |  Branch (1910:13): [True: 5.51k, False: 610]
  ------------------
 1911|  5.51k|            tag.append(tmpLocaleID.data(), static_cast<int32_t>(length), err);
 1912|  5.51k|            tmpLocaleID.remove_prefix(length);
 1913|  5.51k|        }
 1914|  6.12k|    }
 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|   456k|    if (const char* start = locale_getKeywordsStart(tmpLocaleID); start != nullptr) {
  ------------------
  |  |  138|   456k|#define locale_getKeywordsStart U_ICU_ENTRY_POINT_RENAME(locale_getKeywordsStart)
  |  |  ------------------
  |  |  |  |  123|   456k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   456k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   456k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1918:67): [True: 54.3k, False: 402k]
  ------------------
 1919|  54.3k|        if (start > tmpLocaleID.data()) {
  ------------------
  |  Branch (1919:13): [True: 405, False: 53.9k]
  ------------------
 1920|    405|            tmpLocaleID.remove_prefix(start - tmpLocaleID.data());
 1921|    405|        }
 1922|  54.3k|        keywordAssign = tmpLocaleID.find('=');
 1923|  54.3k|        separatorIndicator = tmpLocaleID.find(';');
 1924|   402k|    } else {
 1925|   402k|        tmpLocaleID = {};
 1926|   402k|    }
 1927|       |
 1928|       |    /* Copy POSIX-style variant, if any [mr@FOO] */
 1929|   456k|    if (!OPTION_SET(options, _ULOC_CANONICALIZE) &&
  ------------------
  |  | 1786|   456k|#define _ULOC_CANONICALIZE   0x1
  ------------------
  |  Branch (1929:9): [True: 421k, False: 35.2k]
  ------------------
 1930|   456k|        !tmpLocaleID.empty() && keywordAssign == std::string_view::npos) {
  ------------------
  |  Branch (1930:9): [True: 44.6k, False: 376k]
  |  Branch (1930:33): [True: 411, False: 44.2k]
  ------------------
 1931|    411|        tag.append(tmpLocaleID, err);
 1932|    411|        tmpLocaleID = {};
 1933|    411|    }
 1934|       |
 1935|   456k|    if (OPTION_SET(options, _ULOC_CANONICALIZE)) {
  ------------------
  |  | 1786|   456k|#define _ULOC_CANONICALIZE   0x1
  ------------------
  |  Branch (1935:9): [True: 35.2k, False: 421k]
  ------------------
 1936|       |        /* Handle @FOO variant if @ is present and not followed by = */
 1937|  35.2k|        if (!tmpLocaleID.empty() && keywordAssign == std::string_view::npos) {
  ------------------
  |  Branch (1937:13): [True: 9.70k, False: 25.5k]
  |  Branch (1937:37): [True: 0, False: 9.70k]
  ------------------
 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|   387k|        for (j=0; j<UPRV_LENGTHOF(CANONICALIZE_MAP); j++) {
  ------------------
  |  |   99|   387k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (1954:19): [True: 352k, False: 35.2k]
  ------------------
 1955|   352k|            StringPiece id(CANONICALIZE_MAP[j].id);
 1956|   352k|            if (tag == id) {
  ------------------
  |  Branch (1956:17): [True: 28, False: 352k]
  ------------------
 1957|     28|                if (id.empty() && !tmpLocaleID.empty()) {
  ------------------
  |  Branch (1957:21): [True: 0, False: 28]
  |  Branch (1957:35): [True: 0, False: 0]
  ------------------
 1958|      0|                    break; /* Don't remap "" if keywords present */
 1959|      0|                }
 1960|     28|                tag.clear();
 1961|     28|                tag.append(CANONICALIZE_MAP[j].canonicalID, err);
 1962|     28|                break;
 1963|     28|            }
 1964|   352k|        }
 1965|  35.2k|    }
 1966|       |
 1967|   456k|    sink.Append(tag.data(), tag.length());
 1968|       |
 1969|   456k|    if (!OPTION_SET(options, _ULOC_STRIP_KEYWORDS)) {
  ------------------
  |  | 1785|   456k|#define _ULOC_STRIP_KEYWORDS 0x2
  ------------------
  |  Branch (1969:9): [True: 110k, False: 345k]
  ------------------
 1970|   110k|        if (!tmpLocaleID.empty() && keywordAssign != std::string_view::npos &&
  ------------------
  |  Branch (1970:13): [True: 26.2k, False: 84.6k]
  |  Branch (1970:37): [True: 26.2k, False: 0]
  ------------------
 1971|   110k|            (separatorIndicator == std::string_view::npos || separatorIndicator > keywordAssign)) {
  ------------------
  |  Branch (1971:14): [True: 21.0k, False: 5.26k]
  |  Branch (1971:62): [True: 5.11k, False: 153]
  ------------------
 1972|  26.1k|            sink.Append("@", 1);
 1973|  26.1k|            ++fieldCount;
 1974|  26.1k|            tmpLocaleID.remove_prefix(1);
 1975|  26.1k|            ulocimp_getKeywords(tmpLocaleID, '@', sink, true, err);
  ------------------
  |  | 1201|  26.1k|#define ulocimp_getKeywords U_ICU_ENTRY_POINT_RENAME(ulocimp_getKeywords)
  |  |  ------------------
  |  |  |  |  123|  26.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  26.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  26.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1976|  26.1k|        }
 1977|   110k|    }
 1978|   456k|}
uloc.cpp:_ZN12_GLOBAL__N_110OPTION_SETEjj:
 1790|  1.82M|inline bool OPTION_SET(uint32_t options, uint32_t mask) { return (options & mask) != 0; }
uloc.cpp:_ZN12_GLOBAL__N_121isWellFormedLegacyKeyENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEE:
 2421|  1.31M|{
 2422|  1.31M|    return std::all_of(key.begin(), key.end(), UPRV_ISALPHANUM);
 2423|  1.31M|}
uloc.cpp:_ZN12_GLOBAL__N_122isWellFormedLegacyTypeENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEE:
 2427|  19.6k|{
 2428|  19.6k|    int32_t alphaNumLen = 0;
 2429|  2.57M|    for (char c : legacyType) {
  ------------------
  |  Branch (2429:17): [True: 2.57M, False: 19.6k]
  ------------------
 2430|  2.57M|        if (c == '_' || c == '/' || c == '-') {
  ------------------
  |  Branch (2430:13): [True: 0, False: 2.57M]
  |  Branch (2430:25): [True: 0, False: 2.57M]
  |  Branch (2430:37): [True: 605k, False: 1.97M]
  ------------------
 2431|   605k|            if (alphaNumLen == 0) {
  ------------------
  |  Branch (2431:17): [True: 0, False: 605k]
  ------------------
 2432|      0|                return false;
 2433|      0|            }
 2434|   605k|            alphaNumLen = 0;
 2435|  1.97M|        } else if (UPRV_ISALPHANUM(c)) {
  ------------------
  |  Branch (2435:20): [True: 1.97M, False: 0]
  ------------------
 2436|  1.97M|            alphaNumLen++;
 2437|  1.97M|        } else {
 2438|      0|            return false;
 2439|      0|        }
 2440|  2.57M|    }
 2441|  19.6k|    return alphaNumLen != 0;
 2442|  19.6k|}
uloc.cpp:_ZZ23uloc_getKeywordValue_78ENK3$_0clERN6icu_788ByteSinkER10UErrorCode:
  741|  40.9k|        [&](ByteSink& sink, UErrorCode& status) {
  742|  40.9k|            ulocimp_getKeywordValue(localeID, keywordName, sink, status);
  ------------------
  |  | 1200|  40.9k|#define ulocimp_getKeywordValue U_ICU_ENTRY_POINT_RENAME(ulocimp_getKeywordValue)
  |  |  ------------------
  |  |  |  |  123|  40.9k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  40.9k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  40.9k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  743|  40.9k|        },
uloc.cpp:_ZZ26ulocimp_getKeywordValue_78PKcNSt3__117basic_string_viewIcNS1_11char_traitsIcEEEER10UErrorCodeENK3$_0clERN6icu_788ByteSinkES7_:
  753|   124k|        [&](ByteSink& sink, UErrorCode& status) {
  754|   124k|            ulocimp_getKeywordValue(localeID, keywordName, sink, status);
  ------------------
  |  | 1200|   124k|#define ulocimp_getKeywordValue U_ICU_ENTRY_POINT_RENAME(ulocimp_getKeywordValue)
  |  |  ------------------
  |  |  |  |  123|   124k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   124k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   124k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  755|   124k|        },
uloc.cpp:_ZZ20ulocimp_getRegion_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEER10UErrorCodeENK3$_0clERN6icu_788ByteSinkES5_:
 1477|  48.2k|        [&](ByteSink& sink, UErrorCode& status) {
 1478|  48.2k|            ulocimp_getSubtags(
  ------------------
  |  | 1209|  48.2k|#define ulocimp_getSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_getSubtags)
  |  |  ------------------
  |  |  |  |  123|  48.2k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  48.2k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  48.2k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1479|  48.2k|                    localeID,
 1480|  48.2k|                    nullptr,
 1481|  48.2k|                    nullptr,
 1482|  48.2k|                    &sink,
 1483|  48.2k|                    nullptr,
 1484|  48.2k|                    nullptr,
 1485|  48.2k|                    status);
 1486|  48.2k|        },
uloc.cpp:_ZZ20ulocimp_getParent_78PKcR10UErrorCodeENK3$_0clERN6icu_788ByteSinkES2_:
 2003|   175k|        [&](ByteSink& sink, UErrorCode& status) {
 2004|   175k|            ulocimp_getParent(localeID, sink, status);
  ------------------
  |  | 1205|   175k|#define ulocimp_getParent U_ICU_ENTRY_POINT_RENAME(ulocimp_getParent)
  |  |  ------------------
  |  |  |  |  123|   175k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   175k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   175k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2005|   175k|        },
uloc.cpp:_ZZ18ulocimp_getName_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEER10UErrorCodeENK3$_0clERN6icu_788ByteSinkES5_:
 2161|  5.54k|        [&](ByteSink& sink, UErrorCode& status) {
 2162|  5.54k|            ulocimp_getName(localeID, sink, status);
  ------------------
  |  | 1204|  5.54k|#define ulocimp_getName U_ICU_ENTRY_POINT_RENAME(ulocimp_getName)
  |  |  ------------------
  |  |  |  |  123|  5.54k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.54k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.54k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2163|  5.54k|        },
uloc.cpp:_ZZ22ulocimp_getBaseName_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEER10UErrorCodeENK3$_0clERN6icu_788ByteSinkES5_:
 2197|   345k|        [&](ByteSink& sink, UErrorCode& status) {
 2198|   345k|            ulocimp_getBaseName(localeID, sink, status);
  ------------------
  |  | 1199|   345k|#define ulocimp_getBaseName U_ICU_ENTRY_POINT_RENAME(ulocimp_getBaseName)
  |  |  ------------------
  |  |  |  |  123|   345k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   345k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   345k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2199|   345k|        },
uloc.cpp:_ZZ23ulocimp_canonicalize_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEER10UErrorCodeENK3$_0clERN6icu_788ByteSinkES5_:
 2233|  34.3k|        [&](ByteSink& sink, UErrorCode& status) {
 2234|  34.3k|            ulocimp_canonicalize(localeID, sink, status);
  ------------------
  |  | 1197|  34.3k|#define ulocimp_canonicalize U_ICU_ENTRY_POINT_RENAME(ulocimp_canonicalize)
  |  |  ------------------
  |  |  |  |  123|  34.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  34.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  34.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2235|  34.3k|        },

_Z22ulocimp_toLegacyKey_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEE:
  462|  1.40M|ulocimp_toLegacyKey(std::string_view key) {
  463|  1.40M|    if (!init()) {
  ------------------
  |  Branch (463:9): [True: 0, False: 1.40M]
  ------------------
  464|      0|        return std::nullopt;
  465|      0|    }
  466|       |
  467|  1.40M|    LocExtKeyData* keyData = static_cast<LocExtKeyData*>(uhash_get(gLocExtKeyMap, &key));
  ------------------
  |  | 1007|  1.40M|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|  1.40M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.40M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.40M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  468|  1.40M|    if (keyData != nullptr) {
  ------------------
  |  Branch (468:9): [True: 90.7k, False: 1.31M]
  ------------------
  469|  90.7k|        return keyData->legacyId;
  470|  90.7k|    }
  471|       |
  472|  1.31M|    return std::nullopt;
  473|  1.40M|}
_Z23ulocimp_toLegacyType_78NSt3__117basic_string_viewIcNS_11char_traitsIcEEEES3_:
  509|  21.1k|ulocimp_toLegacyType(std::string_view key, std::string_view type) {
  510|  21.1k|    if (!init()) {
  ------------------
  |  Branch (510:9): [True: 0, False: 21.1k]
  ------------------
  511|      0|        return std::nullopt;
  512|      0|    }
  513|       |
  514|  21.1k|    LocExtKeyData* keyData = static_cast<LocExtKeyData*>(uhash_get(gLocExtKeyMap, &key));
  ------------------
  |  | 1007|  21.1k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|  21.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  21.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  21.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  515|  21.1k|    if (keyData != nullptr) {
  ------------------
  |  Branch (515:9): [True: 5.30k, False: 15.8k]
  ------------------
  516|  5.30k|        LocExtType* t = static_cast<LocExtType*>(uhash_get(keyData->typeMap.getAlias(), &type));
  ------------------
  |  | 1007|  5.30k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|  5.30k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.30k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.30k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|  5.30k|        if (t != nullptr) {
  ------------------
  |  Branch (517:13): [True: 1.00k, False: 4.29k]
  ------------------
  518|  1.00k|            return t->legacyId;
  519|  1.00k|        }
  520|  4.29k|        if (keyData->specialTypes != SPECIALTYPE_NONE) {
  ------------------
  |  Branch (520:13): [True: 3.06k, False: 1.23k]
  ------------------
  521|  3.06k|            bool matched = false;
  522|  3.06k|            if (keyData->specialTypes & SPECIALTYPE_CODEPOINTS) {
  ------------------
  |  Branch (522:17): [True: 1.31k, False: 1.75k]
  ------------------
  523|  1.31k|                matched = isSpecialTypeCodepoints(type);
  524|  1.31k|            }
  525|  3.06k|            if (!matched && keyData->specialTypes & SPECIALTYPE_REORDER_CODE) {
  ------------------
  |  Branch (525:17): [True: 2.82k, False: 243]
  |  Branch (525:29): [True: 806, False: 2.01k]
  ------------------
  526|    806|                matched = isSpecialTypeReorderCode(type);
  527|    806|            }
  528|  3.06k|            if (!matched && keyData->specialTypes & SPECIALTYPE_RG_KEY_VALUE) {
  ------------------
  |  Branch (528:17): [True: 2.54k, False: 526]
  |  Branch (528:29): [True: 944, False: 1.59k]
  ------------------
  529|    944|                matched = isSpecialTypeRgKeyValue(type);
  530|    944|            }
  531|  3.06k|            if (matched) {
  ------------------
  |  Branch (531:17): [True: 528, False: 2.54k]
  ------------------
  532|    528|                return type;
  533|    528|            }
  534|  3.06k|        }
  535|  4.29k|    }
  536|       |
  537|  19.6k|    return std::nullopt;
  538|  21.1k|}
uloc_keytype.cpp:_ZN12_GLOBAL__N_14initEv:
  384|  1.42M|init() {
  385|  1.42M|    UErrorCode sts = U_ZERO_ERROR;
  386|  1.42M|    umtx_initOnce(gLocExtKeyMapInitOnce, &initFromResourceBundle, sts);
  387|  1.42M|    if (U_FAILURE(sts)) {
  ------------------
  |  Branch (387:9): [True: 0, False: 1.42M]
  ------------------
  388|      0|        return false;
  389|      0|    }
  390|  1.42M|    return true;
  391|  1.42M|}
uloc_keytype.cpp:_ZN12_GLOBAL__N_122initFromResourceBundleER10UErrorCode:
   91|      1|initFromResourceBundle(UErrorCode& sts) {
   92|      1|    U_NAMESPACE_USE
  ------------------
  |  |  112|      1|#   define U_NAMESPACE_USE using namespace U_ICU_NAMESPACE;
  ------------------
   93|      1|    ucln_common_registerCleanup(UCLN_COMMON_LOCALE_KEY_TYPE, uloc_key_type_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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   94|       |
   95|      1|    gLocExtKeyMap = uhash_open(uhash_hashIStringView, uhash_compareIStringView, nullptr, &sts);
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  gLocExtKeyMap = uhash_open(uhash_hashIStringView, uhash_compareIStringView, nullptr, &sts);
  ------------------
  |  | 1013|      1|#define uhash_hashIStringView U_ICU_ENTRY_POINT_RENAME(uhash_hashIStringView)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  gLocExtKeyMap = uhash_open(uhash_hashIStringView, uhash_compareIStringView, nullptr, &sts);
  ------------------
  |  |  995|      1|#define uhash_compareIStringView U_ICU_ENTRY_POINT_RENAME(uhash_compareIStringView)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|       |
   97|      1|    LocalUResourceBundlePointer keyTypeDataRes(ures_openDirect(nullptr, "keyTypeData", &sts));
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|      1|    LocalUResourceBundlePointer keyMapRes(ures_getByKey(keyTypeDataRes.getAlias(), "keyMap", nullptr, &sts));
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   99|      1|    LocalUResourceBundlePointer typeMapRes(ures_getByKey(keyTypeDataRes.getAlias(), "typeMap", nullptr, &sts));
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  100|       |
  101|      1|    if (U_FAILURE(sts)) {
  ------------------
  |  Branch (101:9): [True: 0, False: 1]
  ------------------
  102|      0|        return;
  103|      0|    }
  104|       |
  105|      1|    UErrorCode tmpSts = U_ZERO_ERROR;
  106|      1|    LocalUResourceBundlePointer typeAliasRes(ures_getByKey(keyTypeDataRes.getAlias(), "typeAlias", nullptr, &tmpSts));
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|      1|    tmpSts = U_ZERO_ERROR;
  108|      1|    LocalUResourceBundlePointer bcpTypeAliasRes(ures_getByKey(keyTypeDataRes.getAlias(), "bcpTypeAlias", nullptr, &tmpSts));
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  109|       |
  110|       |    // initialize pools storing dynamically allocated objects
  111|      1|    gKeyTypeStringPool = new icu::MemoryPool<icu::CharString>;
  112|      1|    if (gKeyTypeStringPool == nullptr) {
  ------------------
  |  Branch (112:9): [True: 0, False: 1]
  ------------------
  113|      0|        sts = U_MEMORY_ALLOCATION_ERROR;
  114|      0|        return;
  115|      0|    }
  116|      1|    gLocExtKeyDataEntries = new icu::MemoryPool<LocExtKeyData>;
  117|      1|    if (gLocExtKeyDataEntries == nullptr) {
  ------------------
  |  Branch (117:9): [True: 0, False: 1]
  ------------------
  118|      0|        sts = U_MEMORY_ALLOCATION_ERROR;
  119|      0|        return;
  120|      0|    }
  121|      1|    gLocExtTypeEntries = new icu::MemoryPool<LocExtType>;
  122|      1|    if (gLocExtTypeEntries == nullptr) {
  ------------------
  |  Branch (122:9): [True: 0, False: 1]
  ------------------
  123|      0|        sts = U_MEMORY_ALLOCATION_ERROR;
  124|      0|        return;
  125|      0|    }
  126|      1|    gTypeAliasEntries = new icu::MemoryPool<TypeAlias>;
  127|      1|    if (gTypeAliasEntries == nullptr) {
  ------------------
  |  Branch (127:9): [True: 0, False: 1]
  ------------------
  128|      0|        sts = U_MEMORY_ALLOCATION_ERROR;
  129|      0|        return;
  130|      0|    }
  131|       |
  132|       |    // iterate through keyMap resource
  133|      1|    LocalUResourceBundlePointer keyMapEntry;
  134|       |
  135|     38|    while (ures_hasNext(keyMapRes.getAlias())) {
  ------------------
  |  | 1689|     38|#define ures_hasNext U_ICU_ENTRY_POINT_RENAME(ures_hasNext)
  |  |  ------------------
  |  |  |  |  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 (135:12): [True: 37, False: 1]
  ------------------
  136|     37|        keyMapEntry.adoptInstead(ures_getNextResource(keyMapRes.getAlias(), keyMapEntry.orphan(), &sts));
  ------------------
  |  | 1672|     37|#define ures_getNextResource U_ICU_ENTRY_POINT_RENAME(ures_getNextResource)
  |  |  ------------------
  |  |  |  |  123|     37|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     37|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     37|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  137|     37|        if (U_FAILURE(sts)) {
  ------------------
  |  Branch (137:13): [True: 0, False: 37]
  ------------------
  138|      0|            break;
  139|      0|        }
  140|     37|        const char* legacyKeyId = ures_getKey(keyMapEntry.getAlias());
  ------------------
  |  | 1666|     37|#define ures_getKey U_ICU_ENTRY_POINT_RENAME(ures_getKey)
  |  |  ------------------
  |  |  |  |  123|     37|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     37|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     37|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  141|     37|        UnicodeString uBcpKeyId = ures_getUnicodeString(keyMapEntry.getAlias(), &sts);
  142|     37|        if (U_FAILURE(sts)) {
  ------------------
  |  Branch (142:13): [True: 0, False: 37]
  ------------------
  143|      0|            break;
  144|      0|        }
  145|       |
  146|       |        // empty value indicates that BCP key is same with the legacy key.
  147|     37|        const char* bcpKeyId = legacyKeyId;
  148|     37|        if (!uBcpKeyId.isEmpty()) {
  ------------------
  |  Branch (148:13): [True: 17, False: 20]
  ------------------
  149|     17|            icu::CharString* bcpKeyIdBuf = gKeyTypeStringPool->create();
  150|     17|            if (bcpKeyIdBuf == nullptr) {
  ------------------
  |  Branch (150:17): [True: 0, False: 17]
  ------------------
  151|      0|                sts = U_MEMORY_ALLOCATION_ERROR;
  152|      0|                break;
  153|      0|            }
  154|     17|            bcpKeyIdBuf->appendInvariantChars(uBcpKeyId, sts);
  155|     17|            if (U_FAILURE(sts)) {
  ------------------
  |  Branch (155:17): [True: 0, False: 17]
  ------------------
  156|      0|                break;
  157|      0|            }
  158|     17|            bcpKeyId = bcpKeyIdBuf->data();
  159|     17|        }
  160|       |
  161|     37|        bool isTZ = uprv_strcmp(legacyKeyId, "timezone") == 0;
  ------------------
  |  |   38|     37|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|     37|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  162|       |
  163|     37|        UHashtable* typeDataMap = uhash_open(uhash_hashIStringView, uhash_compareIStringView, nullptr, &sts);
  ------------------
  |  | 1030|     37|#define uhash_open U_ICU_ENTRY_POINT_RENAME(uhash_open)
  |  |  ------------------
  |  |  |  |  123|     37|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     37|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     37|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      UHashtable* typeDataMap = uhash_open(uhash_hashIStringView, uhash_compareIStringView, nullptr, &sts);
  ------------------
  |  | 1013|     37|#define uhash_hashIStringView U_ICU_ENTRY_POINT_RENAME(uhash_hashIStringView)
  |  |  ------------------
  |  |  |  |  123|     37|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     37|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     37|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      UHashtable* typeDataMap = uhash_open(uhash_hashIStringView, uhash_compareIStringView, nullptr, &sts);
  ------------------
  |  |  995|     37|#define uhash_compareIStringView U_ICU_ENTRY_POINT_RENAME(uhash_compareIStringView)
  |  |  ------------------
  |  |  |  |  123|     37|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     37|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     37|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  164|     37|        if (U_FAILURE(sts)) {
  ------------------
  |  Branch (164:13): [True: 0, False: 37]
  ------------------
  165|      0|            break;
  166|      0|        }
  167|     37|        uint32_t specialTypes = SPECIALTYPE_NONE;
  168|       |
  169|     37|        LocalUResourceBundlePointer typeAliasResByKey;
  170|     37|        LocalUResourceBundlePointer bcpTypeAliasResByKey;
  171|       |
  172|     37|        if (typeAliasRes.isValid()) {
  ------------------
  |  Branch (172:13): [True: 37, False: 0]
  ------------------
  173|     37|            tmpSts = U_ZERO_ERROR;
  174|     37|            typeAliasResByKey.adoptInstead(ures_getByKey(typeAliasRes.getAlias(), legacyKeyId, nullptr, &tmpSts));
  ------------------
  |  | 1661|     37|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     37|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     37|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     37|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|     37|            if (U_FAILURE(tmpSts)) {
  ------------------
  |  Branch (175:17): [True: 35, False: 2]
  ------------------
  176|     35|                typeAliasResByKey.orphan();
  177|     35|            }
  178|     37|        }
  179|     37|        if (bcpTypeAliasRes.isValid()) {
  ------------------
  |  Branch (179:13): [True: 37, False: 0]
  ------------------
  180|     37|            tmpSts = U_ZERO_ERROR;
  181|     37|            bcpTypeAliasResByKey.adoptInstead(ures_getByKey(bcpTypeAliasRes.getAlias(), bcpKeyId, nullptr, &tmpSts));
  ------------------
  |  | 1661|     37|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     37|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     37|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     37|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  182|     37|            if (U_FAILURE(tmpSts)) {
  ------------------
  |  Branch (182:17): [True: 35, False: 2]
  ------------------
  183|     35|                bcpTypeAliasResByKey.orphan();
  184|     35|            }
  185|     37|        }
  186|       |
  187|       |        // look up type map for the key, and walk through the mapping data
  188|     37|        LocalUResourceBundlePointer typeMapResByKey(ures_getByKey(typeMapRes.getAlias(), legacyKeyId, nullptr, &sts));
  ------------------
  |  | 1661|     37|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     37|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     37|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     37|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|     37|        if (U_FAILURE(sts)) {
  ------------------
  |  Branch (189:13): [True: 0, False: 37]
  ------------------
  190|       |            // We fail here if typeMap does not have an entry corresponding to every entry in keyMap (should
  191|       |            // not happen for valid keyTypeData), or if ures_getByKeyfails fails for some other reason
  192|       |            // (e.g. data file cannot be loaded, using stubdata, over-aggressive data filtering has removed
  193|       |            // something like timezoneTypes.res, etc.). Error code is already set. See ICU-21669.
  194|      0|            UPRV_UNREACHABLE_ASSERT;
  ------------------
  |  |   55|      0|#   define UPRV_UNREACHABLE_ASSERT (void)0
  ------------------
  195|     37|        } else {
  196|     37|            LocalUResourceBundlePointer typeMapEntry;
  197|       |
  198|  1.09k|            while (ures_hasNext(typeMapResByKey.getAlias())) {
  ------------------
  |  | 1689|  1.09k|#define ures_hasNext U_ICU_ENTRY_POINT_RENAME(ures_hasNext)
  |  |  ------------------
  |  |  |  |  123|  1.09k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.09k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.09k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (198:20): [True: 1.05k, False: 37]
  ------------------
  199|  1.05k|                typeMapEntry.adoptInstead(ures_getNextResource(typeMapResByKey.getAlias(), typeMapEntry.orphan(), &sts));
  ------------------
  |  | 1672|  1.05k|#define ures_getNextResource U_ICU_ENTRY_POINT_RENAME(ures_getNextResource)
  |  |  ------------------
  |  |  |  |  123|  1.05k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.05k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.05k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  200|  1.05k|                if (U_FAILURE(sts)) {
  ------------------
  |  Branch (200:21): [True: 0, False: 1.05k]
  ------------------
  201|      0|                    break;
  202|      0|                }
  203|  1.05k|                const char* legacyTypeId = ures_getKey(typeMapEntry.getAlias());
  ------------------
  |  | 1666|  1.05k|#define ures_getKey U_ICU_ENTRY_POINT_RENAME(ures_getKey)
  |  |  ------------------
  |  |  |  |  123|  1.05k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.05k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.05k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  204|       |
  205|       |                // special types
  206|  1.05k|                if (uprv_strcmp(legacyTypeId, "CODEPOINTS") == 0) {
  ------------------
  |  |   38|  1.05k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  1.05k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (206:21): [True: 1, False: 1.05k]
  ------------------
  207|      1|                    specialTypes |= SPECIALTYPE_CODEPOINTS;
  208|      1|                    continue;
  209|      1|                }
  210|  1.05k|                if (uprv_strcmp(legacyTypeId, "REORDER_CODE") == 0) {
  ------------------
  |  |   38|  1.05k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  1.05k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (210:21): [True: 1, False: 1.05k]
  ------------------
  211|      1|                    specialTypes |= SPECIALTYPE_REORDER_CODE;
  212|      1|                    continue;
  213|      1|                }
  214|  1.05k|                if (uprv_strcmp(legacyTypeId, "RG_KEY_VALUE") == 0) {
  ------------------
  |  |   38|  1.05k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  1.05k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (214:21): [True: 1, False: 1.05k]
  ------------------
  215|      1|                    specialTypes |= SPECIALTYPE_RG_KEY_VALUE;
  216|      1|                    continue;
  217|      1|                }
  218|       |
  219|  1.05k|                if (isTZ) {
  ------------------
  |  Branch (219:21): [True: 447, False: 604]
  ------------------
  220|       |                    // a timezone key uses a colon instead of a slash in the resource.
  221|       |                    // e.g. America:Los_Angeles
  222|    447|                    if (uprv_strchr(legacyTypeId, ':') != nullptr) {
  ------------------
  |  |   40|    447|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|    447|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (222:25): [True: 447, False: 0]
  ------------------
  223|    447|                        icu::CharString* legacyTypeIdBuf =
  224|    447|                                gKeyTypeStringPool->create(legacyTypeId, sts);
  225|    447|                        if (legacyTypeIdBuf == nullptr) {
  ------------------
  |  Branch (225:29): [True: 0, False: 447]
  ------------------
  226|      0|                            sts = U_MEMORY_ALLOCATION_ERROR;
  227|      0|                            break;
  228|      0|                        }
  229|    447|                        if (U_FAILURE(sts)) {
  ------------------
  |  Branch (229:29): [True: 0, False: 447]
  ------------------
  230|      0|                            break;
  231|      0|                        }
  232|    447|                        std::replace(
  233|    447|                                legacyTypeIdBuf->data(),
  234|    447|                                legacyTypeIdBuf->data() + legacyTypeIdBuf->length(),
  235|    447|                                ':', '/');
  236|    447|                        legacyTypeId = legacyTypeIdBuf->data();
  237|    447|                    }
  238|    447|                }
  239|       |
  240|  1.05k|                UnicodeString uBcpTypeId = ures_getUnicodeString(typeMapEntry.getAlias(), &sts);
  241|  1.05k|                if (U_FAILURE(sts)) {
  ------------------
  |  Branch (241:21): [True: 0, False: 1.05k]
  ------------------
  242|      0|                    break;
  243|      0|                }
  244|       |
  245|       |                // empty value indicates that BCP type is same with the legacy type.
  246|  1.05k|                const char* bcpTypeId = legacyTypeId;
  247|  1.05k|                if (!uBcpTypeId.isEmpty()) {
  ------------------
  |  Branch (247:21): [True: 484, False: 567]
  ------------------
  248|    484|                    icu::CharString* bcpTypeIdBuf = gKeyTypeStringPool->create();
  249|    484|                    if (bcpTypeIdBuf == nullptr) {
  ------------------
  |  Branch (249:25): [True: 0, False: 484]
  ------------------
  250|      0|                        sts = U_MEMORY_ALLOCATION_ERROR;
  251|      0|                        break;
  252|      0|                    }
  253|    484|                    bcpTypeIdBuf->appendInvariantChars(uBcpTypeId, sts);
  254|    484|                    if (U_FAILURE(sts)) {
  ------------------
  |  Branch (254:25): [True: 0, False: 484]
  ------------------
  255|      0|                        break;
  256|      0|                    }
  257|    484|                    bcpTypeId = bcpTypeIdBuf->data();
  258|    484|                }
  259|       |
  260|       |                // Note: legacy type value should never be
  261|       |                // equivalent to bcp type value of a different
  262|       |                // type under the same key. So we use a single
  263|       |                // map for lookup.
  264|  1.05k|                LocExtType* t = gLocExtTypeEntries->create();
  265|  1.05k|                if (t == nullptr) {
  ------------------
  |  Branch (265:21): [True: 0, False: 1.05k]
  ------------------
  266|      0|                    sts = U_MEMORY_ALLOCATION_ERROR;
  267|      0|                    break;
  268|      0|                }
  269|  1.05k|                t->bcpId = bcpTypeId;
  270|  1.05k|                t->legacyId = legacyTypeId;
  271|       |
  272|  1.05k|                uhash_put(typeDataMap, &t->legacyId, t, &sts);
  ------------------
  |  | 1032|  1.05k|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|  1.05k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.05k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.05k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  273|  1.05k|                if (bcpTypeId != legacyTypeId) {
  ------------------
  |  Branch (273:21): [True: 484, False: 567]
  ------------------
  274|       |                    // different type value
  275|    484|                    uhash_put(typeDataMap, &t->bcpId, t, &sts);
  ------------------
  |  | 1032|    484|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|    484|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    484|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    484|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  276|    484|                }
  277|  1.05k|                if (U_FAILURE(sts)) {
  ------------------
  |  Branch (277:21): [True: 0, False: 1.05k]
  ------------------
  278|      0|                    break;
  279|      0|                }
  280|       |
  281|       |                // also put aliases in the map
  282|  1.05k|                if (typeAliasResByKey.isValid()) {
  ------------------
  |  Branch (282:21): [True: 452, False: 599]
  ------------------
  283|    452|                    LocalUResourceBundlePointer typeAliasDataEntry;
  284|       |
  285|    452|                    ures_resetIterator(typeAliasResByKey.getAlias());
  ------------------
  |  | 1698|    452|#define ures_resetIterator U_ICU_ENTRY_POINT_RENAME(ures_resetIterator)
  |  |  ------------------
  |  |  |  |  123|    452|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    452|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    452|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  286|  69.2k|                    while (ures_hasNext(typeAliasResByKey.getAlias()) && U_SUCCESS(sts)) {
  ------------------
  |  | 1689|  69.2k|#define ures_hasNext U_ICU_ENTRY_POINT_RENAME(ures_hasNext)
  |  |  ------------------
  |  |  |  |  123|  69.2k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  69.2k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  69.2k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (286:28): [True: 68.8k, False: 452]
  |  Branch (286:74): [True: 68.8k, False: 0]
  ------------------
  287|  68.8k|                        int32_t toLen;
  288|  68.8k|                        typeAliasDataEntry.adoptInstead(ures_getNextResource(typeAliasResByKey.getAlias(), typeAliasDataEntry.orphan(), &sts));
  ------------------
  |  | 1672|  68.8k|#define ures_getNextResource U_ICU_ENTRY_POINT_RENAME(ures_getNextResource)
  |  |  ------------------
  |  |  |  |  123|  68.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  68.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  68.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  289|  68.8k|                        const char16_t* to = ures_getString(typeAliasDataEntry.getAlias(), &toLen, &sts);
  ------------------
  |  | 1675|  68.8k|#define ures_getString U_ICU_ENTRY_POINT_RENAME(ures_getString)
  |  |  ------------------
  |  |  |  |  123|  68.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  68.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  68.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  290|  68.8k|                        if (U_FAILURE(sts)) {
  ------------------
  |  Branch (290:29): [True: 0, False: 68.8k]
  ------------------
  291|      0|                            break;
  292|      0|                        }
  293|       |                        // check if this is an alias of canonical legacy type
  294|  68.8k|                        if (uprv_compareInvWithUChar(
  ------------------
  |  |  329|  68.8k|#   define uprv_compareInvWithUChar uprv_compareInvAscii
  |  |  ------------------
  |  |  |  | 1402|  68.8k|#define uprv_compareInvAscii U_ICU_ENTRY_POINT_RENAME(uprv_compareInvAscii)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  68.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|  68.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|  68.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (294:29): [True: 155, False: 68.6k]
  ------------------
  295|  68.8k|                                nullptr,
  296|  68.8k|                                t->legacyId.data(),
  297|  68.8k|                                static_cast<int32_t>(t->legacyId.size()),
  298|  68.8k|                                to,
  299|  68.8k|                                toLen) == 0) {
  300|    155|                            const char* from = ures_getKey(typeAliasDataEntry.getAlias());
  ------------------
  |  | 1666|    155|#define ures_getKey U_ICU_ENTRY_POINT_RENAME(ures_getKey)
  |  |  ------------------
  |  |  |  |  123|    155|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    155|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    155|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  301|    155|                            TypeAlias* alias = gTypeAliasEntries->create(TypeAlias{{}, from});
  302|    155|                            if (isTZ) {
  ------------------
  |  Branch (302:33): [True: 154, False: 1]
  ------------------
  303|       |                                // replace colon with slash if necessary
  304|    154|                                if (uprv_strchr(from, ':') != nullptr) {
  ------------------
  |  |   40|    154|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|    154|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (304:37): [True: 109, False: 45]
  ------------------
  305|    109|                                    icu::CharString* fromBuf =
  306|    109|                                            gKeyTypeStringPool->create(from, sts);
  307|    109|                                    if (fromBuf == nullptr) {
  ------------------
  |  Branch (307:41): [True: 0, False: 109]
  ------------------
  308|      0|                                        sts = U_MEMORY_ALLOCATION_ERROR;
  309|      0|                                        break;
  310|      0|                                    }
  311|    109|                                    if (U_FAILURE(sts)) {
  ------------------
  |  Branch (311:41): [True: 0, False: 109]
  ------------------
  312|      0|                                        break;
  313|      0|                                    }
  314|    109|                                    std::replace(
  315|    109|                                            fromBuf->data(),
  316|    109|                                            fromBuf->data() + fromBuf->length(),
  317|    109|                                            ':', '/');
  318|    109|                                    alias->from = fromBuf->toStringPiece();
  319|    109|                                }
  320|    154|                            }
  321|    155|                            uhash_put(typeDataMap, &alias->from, t, &sts);
  ------------------
  |  | 1032|    155|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|    155|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    155|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    155|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  322|    155|                        }
  323|  68.8k|                    }
  324|    452|                    if (U_FAILURE(sts)) {
  ------------------
  |  Branch (324:25): [True: 0, False: 452]
  ------------------
  325|      0|                        break;
  326|      0|                    }
  327|    452|                }
  328|       |
  329|  1.05k|                if (bcpTypeAliasResByKey.isValid()) {
  ------------------
  |  Branch (329:21): [True: 465, False: 586]
  ------------------
  330|    465|                    LocalUResourceBundlePointer bcpTypeAliasDataEntry;
  331|       |
  332|    465|                    ures_resetIterator(bcpTypeAliasResByKey.getAlias());
  ------------------
  |  | 1698|    465|#define ures_resetIterator U_ICU_ENTRY_POINT_RENAME(ures_resetIterator)
  |  |  ------------------
  |  |  |  |  123|    465|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    465|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    465|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  333|  10.3k|                    while (ures_hasNext(bcpTypeAliasResByKey.getAlias()) && U_SUCCESS(sts)) {
  ------------------
  |  | 1689|  10.3k|#define ures_hasNext U_ICU_ENTRY_POINT_RENAME(ures_hasNext)
  |  |  ------------------
  |  |  |  |  123|  10.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  10.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  10.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (333:28): [True: 9.85k, False: 465]
  |  Branch (333:77): [True: 9.85k, False: 0]
  ------------------
  334|  9.85k|                        int32_t toLen;
  335|  9.85k|                        bcpTypeAliasDataEntry.adoptInstead(ures_getNextResource(bcpTypeAliasResByKey.getAlias(), bcpTypeAliasDataEntry.orphan(), &sts));
  ------------------
  |  | 1672|  9.85k|#define ures_getNextResource U_ICU_ENTRY_POINT_RENAME(ures_getNextResource)
  |  |  ------------------
  |  |  |  |  123|  9.85k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  9.85k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  9.85k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  336|  9.85k|                        const char16_t* to = ures_getString(bcpTypeAliasDataEntry.getAlias(), &toLen, &sts);
  ------------------
  |  | 1675|  9.85k|#define ures_getString U_ICU_ENTRY_POINT_RENAME(ures_getString)
  |  |  ------------------
  |  |  |  |  123|  9.85k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  9.85k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  9.85k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  337|  9.85k|                        if (U_FAILURE(sts)) {
  ------------------
  |  Branch (337:29): [True: 0, False: 9.85k]
  ------------------
  338|      0|                            break;
  339|      0|                        }
  340|       |                        // check if this is an alias of bcp type
  341|  9.85k|                        if (uprv_compareInvWithUChar(
  ------------------
  |  |  329|  9.85k|#   define uprv_compareInvWithUChar uprv_compareInvAscii
  |  |  ------------------
  |  |  |  | 1402|  9.85k|#define uprv_compareInvAscii U_ICU_ENTRY_POINT_RENAME(uprv_compareInvAscii)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  9.85k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|  9.85k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|  9.85k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (341:29): [True: 23, False: 9.82k]
  ------------------
  342|  9.85k|                                nullptr,
  343|  9.85k|                                t->bcpId.data(),
  344|  9.85k|                                static_cast<int32_t>(t->bcpId.size()),
  345|  9.85k|                                to,
  346|  9.85k|                                toLen) == 0) {
  347|     23|                            const char* from = ures_getKey(bcpTypeAliasDataEntry.getAlias());
  ------------------
  |  | 1666|     23|#define ures_getKey U_ICU_ENTRY_POINT_RENAME(ures_getKey)
  |  |  ------------------
  |  |  |  |  123|     23|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     23|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     23|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  348|     23|                            TypeAlias* alias = gTypeAliasEntries->create(TypeAlias{{}, from});
  349|     23|                            uhash_put(typeDataMap, &alias->from, t, &sts);
  ------------------
  |  | 1032|     23|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|     23|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     23|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     23|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  350|     23|                        }
  351|  9.85k|                    }
  352|    465|                    if (U_FAILURE(sts)) {
  ------------------
  |  Branch (352:25): [True: 0, False: 465]
  ------------------
  353|      0|                        break;
  354|      0|                    }
  355|    465|                }
  356|  1.05k|            }
  357|     37|        }
  358|     37|        if (U_FAILURE(sts)) {
  ------------------
  |  Branch (358:13): [True: 0, False: 37]
  ------------------
  359|      0|            break;
  360|      0|        }
  361|       |
  362|     37|        LocExtKeyData* keyData = gLocExtKeyDataEntries->create();
  363|     37|        if (keyData == nullptr) {
  ------------------
  |  Branch (363:13): [True: 0, False: 37]
  ------------------
  364|      0|            sts = U_MEMORY_ALLOCATION_ERROR;
  365|      0|            break;
  366|      0|        }
  367|     37|        keyData->bcpId = bcpKeyId;
  368|     37|        keyData->legacyId = legacyKeyId;
  369|     37|        keyData->specialTypes = specialTypes;
  370|     37|        keyData->typeMap.adoptInstead(typeDataMap);
  371|       |
  372|     37|        uhash_put(gLocExtKeyMap, &keyData->legacyId, keyData, &sts);
  ------------------
  |  | 1032|     37|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|     37|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     37|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     37|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  373|     37|        if (legacyKeyId != bcpKeyId) {
  ------------------
  |  Branch (373:13): [True: 17, False: 20]
  ------------------
  374|       |            // different key value
  375|     17|            uhash_put(gLocExtKeyMap, &keyData->bcpId, keyData, &sts);
  ------------------
  |  | 1032|     17|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|     17|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     17|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     17|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  376|     17|        }
  377|     37|        if (U_FAILURE(sts)) {
  ------------------
  |  Branch (377:13): [True: 0, False: 37]
  ------------------
  378|      0|            break;
  379|      0|        }
  380|     37|    }
  381|      1|}
uloc_keytype.cpp:_ZN12_GLOBAL__N_123isSpecialTypeCodepointsENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEE:
  394|  1.31k|isSpecialTypeCodepoints(std::string_view val) {
  395|  1.31k|    int32_t subtagLen = 0;
  396|  6.08k|    for (char c : val) {
  ------------------
  |  Branch (396:17): [True: 6.08k, False: 569]
  ------------------
  397|  6.08k|        if (c == '-') {
  ------------------
  |  Branch (397:13): [True: 699, False: 5.38k]
  ------------------
  398|    699|            if (subtagLen < 4 || subtagLen > 6) {
  ------------------
  |  Branch (398:17): [True: 233, False: 466]
  |  Branch (398:34): [True: 216, False: 250]
  ------------------
  399|    449|                return false;
  400|    449|            }
  401|    250|            subtagLen = 0;
  402|  5.38k|        } else if ((c >= '0' && c <= '9') ||
  ------------------
  |  Branch (402:21): [True: 5.38k, False: 0]
  |  Branch (402:33): [True: 3.34k, False: 2.04k]
  ------------------
  403|  5.38k|                    (c >= 'A' && c <= 'F') || // A-F/a-f are contiguous
  ------------------
  |  Branch (403:22): [True: 2.04k, False: 0]
  |  Branch (403:34): [True: 0, False: 2.04k]
  ------------------
  404|  5.38k|                    (c >= 'a' && c <= 'f')) { // also in EBCDIC
  ------------------
  |  Branch (404:22): [True: 2.04k, False: 0]
  |  Branch (404:34): [True: 1.74k, False: 300]
  ------------------
  405|  5.08k|            subtagLen++;
  406|  5.08k|        } else {
  407|    300|            return false;
  408|    300|        }
  409|  6.08k|    }
  410|    569|    return subtagLen >= 4 && subtagLen <= 6;
  ------------------
  |  Branch (410:12): [True: 259, False: 310]
  |  Branch (410:30): [True: 243, False: 16]
  ------------------
  411|  1.31k|}
uloc_keytype.cpp:_ZN12_GLOBAL__N_124isSpecialTypeReorderCodeENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEE:
  414|    806|isSpecialTypeReorderCode(std::string_view val) {
  415|    806|    int32_t subtagLen = 0;
  416|  3.00k|    for (char c : val) {
  ------------------
  |  Branch (416:17): [True: 3.00k, False: 283]
  ------------------
  417|  3.00k|        if (c == '-') {
  ------------------
  |  Branch (417:13): [True: 267, False: 2.73k]
  ------------------
  418|    267|            if (subtagLen < 3 || subtagLen > 8) {
  ------------------
  |  Branch (418:17): [True: 0, False: 267]
  |  Branch (418:34): [True: 0, False: 267]
  ------------------
  419|      0|                return false;
  420|      0|            }
  421|    267|            subtagLen = 0;
  422|  2.73k|        } else if (uprv_isASCIILetter(c)) {
  ------------------
  |  | 1514|  2.73k|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  123|  2.73k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.73k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.73k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (422:20): [True: 2.21k, False: 523]
  ------------------
  423|  2.21k|            subtagLen++;
  424|  2.21k|        } else {
  425|    523|            return false;
  426|    523|        }
  427|  3.00k|    }
  428|    283|    return subtagLen >= 3 && subtagLen <= 8;
  ------------------
  |  Branch (428:12): [True: 283, False: 0]
  |  Branch (428:30): [True: 283, False: 0]
  ------------------
  429|    806|}
uloc_keytype.cpp:_ZN12_GLOBAL__N_123isSpecialTypeRgKeyValueENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEE:
  432|    944|isSpecialTypeRgKeyValue(std::string_view val) {
  433|    944|    int32_t subtagLen = 0;
  434|  2.87k|    for (char c : val) {
  ------------------
  |  Branch (434:17): [True: 2.87k, False: 359]
  ------------------
  435|  2.87k|        if ((subtagLen < 2 && uprv_isASCIILetter(c)) ||
  ------------------
  |  | 1514|  1.88k|#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (435:14): [True: 1.88k, False: 990]
  |  Branch (435:31): [True: 1.66k, False: 220]
  ------------------
  436|  2.87k|            (subtagLen >= 2 && (c == 'Z' || c == 'z'))) {
  ------------------
  |  Branch (436:14): [True: 990, False: 220]
  |  Branch (436:33): [True: 0, False: 990]
  |  Branch (436:45): [True: 625, False: 365]
  ------------------
  437|  2.28k|            subtagLen++;
  438|  2.28k|        } else {
  439|    585|            return false;
  440|    585|        }
  441|  2.87k|    }
  442|    359|    return subtagLen == 6;
  443|    944|}

_Z25ultag_isLanguageSubtag_78PKci:
  431|   117k|ultag_isLanguageSubtag(const char* s, int32_t len) {
  432|       |    /*
  433|       |     * unicode_language_subtag = alpha{2,3} | alpha{5,8};
  434|       |     * NOTE: Per ICUTC 2019/01/23- accepting alpha 4
  435|       |     * See ICU-20372
  436|       |     */
  437|   117k|    if (len < 0) {
  ------------------
  |  Branch (437:9): [True: 0, False: 117k]
  ------------------
  438|      0|        len = static_cast<int32_t>(uprv_strlen(s));
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  439|      0|    }
  440|   117k|    if (len >= 2 && len <= 8 && _isAlphaString(s, len)) {
  ------------------
  |  Branch (440:9): [True: 101k, False: 16.4k]
  |  Branch (440:21): [True: 60.4k, False: 40.6k]
  |  Branch (440:33): [True: 42.1k, False: 18.3k]
  ------------------
  441|  42.1k|        return true;
  442|  42.1k|    }
  443|  75.4k|    return false;
  444|   117k|}
_Z23ultag_isScriptSubtag_78PKci:
  466|  42.0k|ultag_isScriptSubtag(const char* s, int32_t len) {
  467|       |    /*
  468|       |     * script        = 4ALPHA              ; ISO 15924 code
  469|       |     */
  470|  42.0k|    if (len < 0) {
  ------------------
  |  Branch (470:9): [True: 0, False: 42.0k]
  ------------------
  471|      0|        len = static_cast<int32_t>(uprv_strlen(s));
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  472|      0|    }
  473|  42.0k|    if (len == 4 && _isAlphaString(s, len)) {
  ------------------
  |  Branch (473:9): [True: 3.14k, False: 38.9k]
  |  Branch (473:21): [True: 2.33k, False: 813]
  ------------------
  474|  2.33k|        return true;
  475|  2.33k|    }
  476|  39.7k|    return false;
  477|  42.0k|}
_Z23ultag_isRegionSubtag_78PKci:
  480|  42.0k|ultag_isRegionSubtag(const char* s, int32_t len) {
  481|       |    /*
  482|       |     * region        = 2ALPHA              ; ISO 3166-1 code
  483|       |     *               / 3DIGIT              ; UN M.49 code
  484|       |     */
  485|  42.0k|    if (len < 0) {
  ------------------
  |  Branch (485:9): [True: 0, False: 42.0k]
  ------------------
  486|      0|        len = static_cast<int32_t>(uprv_strlen(s));
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  487|      0|    }
  488|  42.0k|    if (len == 2 && _isAlphaString(s, len)) {
  ------------------
  |  Branch (488:9): [True: 22.3k, False: 19.6k]
  |  Branch (488:21): [True: 21.4k, False: 945]
  ------------------
  489|  21.4k|        return true;
  490|  21.4k|    }
  491|  20.6k|    if (len == 3 && _isNumericString(s, len)) {
  ------------------
  |  Branch (491:9): [True: 2.12k, False: 18.4k]
  |  Branch (491:21): [True: 485, False: 1.63k]
  ------------------
  492|    485|        return true;
  493|    485|    }
  494|  20.1k|    return false;
  495|  20.6k|}
_Z27ultag_isUnicodeLocaleKey_78PKci:
  631|  2.89M|ultag_isUnicodeLocaleKey(const char* s, int32_t len) {
  632|       |    /*
  633|       |     * key = alphanum alpha ;
  634|       |     */
  635|  2.89M|    if (len < 0) {
  ------------------
  |  Branch (635:9): [True: 0, False: 2.89M]
  ------------------
  636|      0|        len = static_cast<int32_t>(uprv_strlen(s));
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  637|      0|    }
  638|  2.89M|    if (len == 2 && (ISALPHA(*s) || ISNUMERIC(*s)) && ISALPHA(s[1])) {
  ------------------
  |  Branch (638:9): [True: 1.47M, False: 1.42M]
  |  Branch (638:22): [True: 1.44M, False: 22.6k]
  |  Branch (638:37): [True: 22.6k, False: 0]
  |  Branch (638:55): [True: 1.41M, False: 53.7k]
  ------------------
  639|  1.41M|        return true;
  640|  1.41M|    }
  641|  1.47M|    return false;
  642|  2.89M|}
_Z25ulocimp_forLanguageTag_78PKciPiR10UErrorCode:
 2675|   143k|                       UErrorCode& status) {
 2676|   143k|    return icu::ByteSinkUtil::viaByteSinkToCharString(
 2677|   143k|        [&](icu::ByteSink& sink, UErrorCode& status) {
 2678|   143k|            ulocimp_forLanguageTag(langtag, tagLen, sink, parsedLength, status);
 2679|   143k|        },
 2680|   143k|        status);
 2681|   143k|}
_Z25ulocimp_forLanguageTag_78PKciRN6icu_788ByteSinkEPiR10UErrorCode:
 2688|   143k|                       UErrorCode& status) {
 2689|   143k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (2689:9): [True: 0, False: 143k]
  ------------------
 2690|       |
 2691|   143k|    bool isEmpty = true;
 2692|   143k|    const char *subtag, *p;
 2693|   143k|    int32_t len;
 2694|   143k|    int32_t i, n;
 2695|   143k|    bool noRegion = true;
 2696|       |
 2697|   143k|    icu::LocalULanguageTagPointer lt(ultag_parse(langtag, tagLen, parsedLength, status));
 2698|   143k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (2698:9): [True: 0, False: 143k]
  ------------------
 2699|      0|        return;
 2700|      0|    }
 2701|       |
 2702|       |    /* language */
 2703|   143k|    subtag = ultag_getExtlangSize(lt.getAlias()) > 0 ? ultag_getExtlang(lt.getAlias(), 0) : ultag_getLanguage(lt.getAlias());
  ------------------
  |  Branch (2703:14): [True: 5.22k, False: 138k]
  ------------------
 2704|   143k|    if (uprv_compareInvCharsAsAscii(subtag, LANG_UND) != 0) {
  ------------------
  |  |  153|   143k|#   define uprv_compareInvCharsAsAscii(s1, s2) uprv_strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |   38|   143k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  |  |  ------------------
  |  |  |  |  |  |  393|   143k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2704:9): [True: 139k, False: 4.42k]
  ------------------
 2705|   139k|        len = static_cast<int32_t>(uprv_strlen(subtag));
  ------------------
  |  |   37|   139k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|   139k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2706|   139k|        if (len > 0) {
  ------------------
  |  Branch (2706:13): [True: 37.6k, False: 101k]
  ------------------
 2707|  37.6k|            sink.Append(subtag, len);
 2708|  37.6k|            isEmpty = false;
 2709|  37.6k|        }
 2710|   139k|    }
 2711|       |
 2712|       |    /* script */
 2713|   143k|    subtag = ultag_getScript(lt.getAlias());
 2714|   143k|    len = static_cast<int32_t>(uprv_strlen(subtag));
  ------------------
  |  |   37|   143k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|   143k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2715|   143k|    if (len > 0) {
  ------------------
  |  Branch (2715:9): [True: 2.33k, False: 141k]
  ------------------
 2716|  2.33k|        sink.Append("_", 1);
 2717|  2.33k|        isEmpty = false;
 2718|       |
 2719|       |        /* write out the script in title case */
 2720|  2.33k|        char c = uprv_toupper(*subtag);
  ------------------
  |  | 1547|  2.33k|#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper)
  |  |  ------------------
  |  |  |  |  123|  2.33k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.33k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.33k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2721|  2.33k|        sink.Append(&c, 1);
 2722|  2.33k|        sink.Append(subtag + 1, len - 1);
 2723|  2.33k|    }
 2724|       |
 2725|       |    /* region */
 2726|   143k|    subtag = ultag_getRegion(lt.getAlias());
 2727|   143k|    len = static_cast<int32_t>(uprv_strlen(subtag));
  ------------------
  |  |   37|   143k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|   143k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2728|   143k|    if (len > 0) {
  ------------------
  |  Branch (2728:9): [True: 21.9k, False: 121k]
  ------------------
 2729|  21.9k|        sink.Append("_", 1);
 2730|  21.9k|        isEmpty = false;
 2731|       |
 2732|       |        /* write out the region in upper case */
 2733|  21.9k|        p = subtag;
 2734|  66.3k|        while (*p) {
  ------------------
  |  Branch (2734:16): [True: 44.3k, False: 21.9k]
  ------------------
 2735|  44.3k|            char c = uprv_toupper(*p);
  ------------------
  |  | 1547|  44.3k|#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper)
  |  |  ------------------
  |  |  |  |  123|  44.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  44.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  44.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2736|  44.3k|            sink.Append(&c, 1);
 2737|  44.3k|            p++;
 2738|  44.3k|        }
 2739|  21.9k|        noRegion = false;
 2740|  21.9k|    }
 2741|       |
 2742|       |    /* variants */
 2743|   143k|    _sortVariants(lt.getAlias()->variants);
 2744|   143k|    n = ultag_getVariantsSize(lt.getAlias());
 2745|   143k|    if (n > 0) {
  ------------------
  |  Branch (2745:9): [True: 2.71k, False: 140k]
  ------------------
 2746|  2.71k|        if (noRegion) {
  ------------------
  |  Branch (2746:13): [True: 1.26k, False: 1.45k]
  ------------------
 2747|  1.26k|            sink.Append("_", 1);
 2748|  1.26k|            isEmpty = false;
 2749|  1.26k|        }
 2750|       |
 2751|  7.24k|        for (i = 0; i < n; i++) {
  ------------------
  |  Branch (2751:21): [True: 4.52k, False: 2.71k]
  ------------------
 2752|  4.52k|            subtag = ultag_getVariant(lt.getAlias(), i);
 2753|  4.52k|            sink.Append("_", 1);
 2754|       |
 2755|       |            /* write out the variant in upper case */
 2756|  4.52k|            p = subtag;
 2757|  20.3k|            while (*p) {
  ------------------
  |  Branch (2757:20): [True: 15.7k, False: 4.52k]
  ------------------
 2758|  15.7k|                char c = uprv_toupper(*p);
  ------------------
  |  | 1547|  15.7k|#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper)
  |  |  ------------------
  |  |  |  |  123|  15.7k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  15.7k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  15.7k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2759|  15.7k|                sink.Append(&c, 1);
 2760|  15.7k|                p++;
 2761|  15.7k|            }
 2762|  4.52k|        }
 2763|  2.71k|    }
 2764|       |
 2765|       |    /* keywords */
 2766|   143k|    n = ultag_getExtensionsSize(lt.getAlias());
 2767|   143k|    subtag = ultag_getPrivateUse(lt.getAlias());
 2768|   143k|    if (n > 0 || uprv_strlen(subtag) > 0) {
  ------------------
  |  |   37|   126k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|   126k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (2768:9): [True: 16.8k, False: 126k]
  |  Branch (2768:18): [True: 1.56k, False: 125k]
  ------------------
 2769|  18.3k|        if (isEmpty && n > 0) {
  ------------------
  |  Branch (2769:13): [True: 2.23k, False: 16.1k]
  |  Branch (2769:24): [True: 1.59k, False: 640]
  ------------------
 2770|       |            /* need a language */
 2771|  1.59k|            sink.Append(LANG_UND, LANG_UND_LEN);
  ------------------
  |  |   87|  1.59k|#define LANG_UND_LEN 3
  ------------------
 2772|  1.59k|        }
 2773|  18.3k|        _appendKeywords(lt.getAlias(), sink, status);
 2774|  18.3k|    }
 2775|   143k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_114_isAlphaStringEPKci:
  385|  94.0k|_isAlphaString(const char* s, int32_t len) {
  386|  94.0k|    int32_t i;
  387|   270k|    for (i = 0; i < len; i++) {
  ------------------
  |  Branch (387:17): [True: 198k, False: 72.4k]
  ------------------
  388|   198k|        if (!ISALPHA(*(s + i))) {
  ------------------
  |  Branch (388:13): [True: 21.5k, False: 176k]
  ------------------
  389|  21.5k|            return false;
  390|  21.5k|        }
  391|   198k|    }
  392|  72.4k|    return true;
  393|  94.0k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_116_isNumericStringEPKci:
  396|  2.12k|_isNumericString(const char* s, int32_t len) {
  397|  2.12k|    int32_t i;
  398|  3.66k|    for (i = 0; i < len; i++) {
  ------------------
  |  Branch (398:17): [True: 3.18k, False: 485]
  ------------------
  399|  3.18k|        if (!ISNUMERIC(*(s + i))) {
  ------------------
  |  Branch (399:13): [True: 1.63k, False: 1.54k]
  ------------------
  400|  1.63k|            return false;
  401|  1.63k|        }
  402|  3.18k|    }
  403|    485|    return true;
  404|  2.12k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_116_isVariantSubtagEPKci:
  500|  48.0k|_isVariantSubtag(const char* s, int32_t len) {
  501|       |    /*
  502|       |     * variant       = 5*8alphanum         ; registered variants
  503|       |     *               / (DIGIT 3alphanum)
  504|       |     */
  505|  48.0k|    if (len < 0) {
  ------------------
  |  Branch (505:9): [True: 0, False: 48.0k]
  ------------------
  506|      0|        len = static_cast<int32_t>(uprv_strlen(s));
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  507|      0|    }
  508|  48.0k|    if (_isAlphaNumericStringLimitedLength(s, len, 5, 8)) {
  ------------------
  |  Branch (508:9): [True: 1.74k, False: 46.3k]
  ------------------
  509|  1.74k|        return true;
  510|  1.74k|    }
  511|  46.3k|    if (len == 4 && ISNUMERIC(*s) && _isAlphaNumericString(s + 1, 3)) {
  ------------------
  |  Branch (511:9): [True: 2.33k, False: 43.9k]
  |  Branch (511:21): [True: 1.85k, False: 484]
  |  Branch (511:38): [True: 1.59k, False: 260]
  ------------------
  512|  1.59k|        return true;
  513|  1.59k|    }
  514|  44.7k|    return false;
  515|  46.3k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_121_isAlphaNumericStringEPKci:
  407|  3.26M|_isAlphaNumericString(const char* s, int32_t len) {
  408|  3.26M|    int32_t i;
  409|  11.8M|    for (i = 0; i < len; i++) {
  ------------------
  |  Branch (409:17): [True: 8.60M, False: 3.26M]
  ------------------
  410|  8.60M|        if (!ISALPHA(*(s + i)) && !ISNUMERIC(*(s + i))) {
  ------------------
  |  Branch (410:13): [True: 93.8k, False: 8.51M]
  |  Branch (410:35): [True: 4.85k, False: 88.9k]
  ------------------
  411|  4.85k|            return false;
  412|  4.85k|        }
  413|  8.60M|    }
  414|  3.26M|    return true;
  415|  3.26M|}
uloc_tag.cpp:_ZN12_GLOBAL__N_118_isExtensionSubtagEPKci:
  586|  3.07M|_isExtensionSubtag(const char* s, int32_t len) {
  587|       |    /*
  588|       |     * extension     = singleton 1*("-" (2*8alphanum))
  589|       |     */
  590|  3.07M|    return _isAlphaNumericStringLimitedLength(s, len, 2, 8);
  591|  3.07M|}
uloc_tag.cpp:_ZN12_GLOBAL__N_124_isPrivateuseValueSubtagEPKci:
  603|   203k|_isPrivateuseValueSubtag(const char* s, int32_t len) {
  604|       |    /*
  605|       |     * privateuse    = "x" 1*("-" (1*8alphanum))
  606|       |     */
  607|   203k|    return _isAlphaNumericStringLimitedLength(s, len, 1, 8);
  608|   203k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_134_isAlphaNumericStringLimitedLengthEPKciii:
  418|  3.33M|_isAlphaNumericStringLimitedLength(const char* s, int32_t len, int32_t min, int32_t max) {
  419|  3.33M|    if (len < 0) {
  ------------------
  |  Branch (419:9): [True: 0, False: 3.33M]
  ------------------
  420|      0|        len = static_cast<int32_t>(uprv_strlen(s));
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  421|      0|    }
  422|  3.33M|    if (len >= min && len <= max && _isAlphaNumericString(s, len)) {
  ------------------
  |  Branch (422:9): [True: 3.27M, False: 59.3k]
  |  Branch (422:23): [True: 3.26M, False: 2.87k]
  |  Branch (422:37): [True: 3.26M, False: 4.59k]
  ------------------
  423|  3.26M|        return true;
  424|  3.26M|    }
  425|  66.7k|    return false;
  426|  3.33M|}
uloc_tag.cpp:_ZN12_GLOBAL__N_19ISNUMERICEc:
   75|   129k|inline bool ISNUMERIC(char c) { return c >= '0' && c <= '9'; }
  ------------------
  |  Branch (75:40): [True: 119k, False: 9.69k]
  |  Branch (75:52): [True: 116k, False: 2.91k]
  ------------------
uloc_tag.cpp:_ZN12_GLOBAL__N_117_addVariantToListEPPNS_16VariantListEntryEN6icu_7812LocalPointerIS0_EE:
  872|  4.99k|_addVariantToList(VariantListEntry **first, icu::LocalPointer<VariantListEntry> var) {
  873|  4.99k|    if (*first == nullptr) {
  ------------------
  |  Branch (873:9): [True: 2.71k, False: 2.28k]
  ------------------
  874|  2.71k|        var->next = nullptr;
  875|  2.71k|        *first = var.orphan();
  876|  2.71k|    } else {
  877|  2.28k|        VariantListEntry *prev, *cur;
  878|  2.28k|        int32_t cmp;
  879|       |
  880|       |        /* variants order should be preserved */
  881|  2.28k|        prev = nullptr;
  882|  2.28k|        cur = *first;
  883|  6.11k|        while (true) {
  ------------------
  |  Branch (883:16): [Folded - Ignored]
  ------------------
  884|  6.11k|            if (cur == nullptr) {
  ------------------
  |  Branch (884:17): [True: 1.81k, False: 4.30k]
  ------------------
  885|  1.81k|                var->next = nullptr;
  886|  1.81k|                prev->next = var.orphan();
  887|  1.81k|                break;
  888|  1.81k|            }
  889|       |
  890|       |            /* Checking for duplicate variant */
  891|  4.30k|            cmp = uprv_compareInvCharsAsAscii(var->variant, cur->variant);
  ------------------
  |  |  153|  4.30k|#   define uprv_compareInvCharsAsAscii(s1, s2) uprv_strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |   38|  4.30k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  |  |  ------------------
  |  |  |  |  |  |  393|  4.30k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  892|  4.30k|            if (cmp == 0) {
  ------------------
  |  Branch (892:17): [True: 471, False: 3.83k]
  ------------------
  893|       |                /* duplicated variant */
  894|    471|                return false;
  895|    471|            }
  896|  3.83k|            prev = cur;
  897|  3.83k|            cur = cur->next;
  898|  3.83k|        }
  899|  2.28k|    }
  900|       |
  901|  4.52k|    return true;
  902|  4.99k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_119_addAttributeToListEPPNS_18AttributeListEntryES1_:
  905|   850k|_addAttributeToList(AttributeListEntry **first, AttributeListEntry *attr) {
  906|   850k|    bool bAdded = true;
  907|       |
  908|   850k|    if (*first == nullptr) {
  ------------------
  |  Branch (908:9): [True: 4.48k, False: 845k]
  ------------------
  909|  4.48k|        attr->next = nullptr;
  910|  4.48k|        *first = attr;
  911|   845k|    } else {
  912|   845k|        AttributeListEntry *prev, *cur;
  913|   845k|        int32_t cmp;
  914|       |
  915|       |        /* reorder variants in alphabetical order */
  916|   845k|        prev = nullptr;
  917|   845k|        cur = *first;
  918|  6.11M|        while (true) {
  ------------------
  |  Branch (918:16): [Folded - Ignored]
  ------------------
  919|  6.11M|            if (cur == nullptr) {
  ------------------
  |  Branch (919:17): [True: 2.99k, False: 6.11M]
  ------------------
  920|  2.99k|                prev->next = attr;
  921|  2.99k|                attr->next = nullptr;
  922|  2.99k|                break;
  923|  2.99k|            }
  924|  6.11M|            cmp = uprv_compareInvCharsAsAscii(attr->attribute, cur->attribute);
  ------------------
  |  |  153|  6.11M|#   define uprv_compareInvCharsAsAscii(s1, s2) uprv_strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |   38|  6.11M|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  |  |  ------------------
  |  |  |  |  |  |  393|  6.11M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  925|  6.11M|            if (cmp < 0) {
  ------------------
  |  Branch (925:17): [True: 5.95k, False: 6.10M]
  ------------------
  926|  5.95k|                if (prev == nullptr) {
  ------------------
  |  Branch (926:21): [True: 1.73k, False: 4.21k]
  ------------------
  927|  1.73k|                    *first = attr;
  928|  4.21k|                } else {
  929|  4.21k|                    prev->next = attr;
  930|  4.21k|                }
  931|  5.95k|                attr->next = cur;
  932|  5.95k|                break;
  933|  5.95k|            }
  934|  6.10M|            if (cmp == 0) {
  ------------------
  |  Branch (934:17): [True: 836k, False: 5.27M]
  ------------------
  935|       |                /* duplicated variant */
  936|   836k|                bAdded = false;
  937|   836k|                break;
  938|   836k|            }
  939|  5.27M|            prev = cur;
  940|  5.27M|            cur = cur->next;
  941|  5.27M|        }
  942|   845k|    }
  943|       |
  944|   850k|    return bAdded;
  945|   850k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_121_isExtensionSingletonEPKci:
  566|  3.09M|_isExtensionSingleton(const char* s, int32_t len) {
  567|       |    /*
  568|       |     * extension     = singleton 1*("-" (2*8alphanum))
  569|       |     *
  570|       |     * singleton     = DIGIT               ; 0 - 9
  571|       |     *               / %x41-57             ; A - W
  572|       |     *               / %x59-5A             ; Y - Z
  573|       |     *               / %x61-77             ; a - w
  574|       |     *               / %x79-7A             ; y - z
  575|       |     */
  576|  3.09M|    if (len < 0) {
  ------------------
  |  Branch (576:9): [True: 0, False: 3.09M]
  ------------------
  577|      0|        len = static_cast<int32_t>(uprv_strlen(s));
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  578|      0|    }
  579|  3.09M|    if (len == 1 && (ISALPHA(*s) || ISNUMERIC(*s)) && (uprv_tolower(*s) != PRIVATEUSE)) {
  ------------------
  |  |   68|  26.2k|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|  26.2k|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  26.2k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|  26.2k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|  26.2k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (len == 1 && (ISALPHA(*s) || ISNUMERIC(*s)) && (uprv_tolower(*s) != PRIVATEUSE)) {
  ------------------
  |  |   66|  26.2k|#define PRIVATEUSE 'x'
  ------------------
  |  Branch (579:9): [True: 31.8k, False: 3.06M]
  |  Branch (579:22): [True: 24.6k, False: 7.15k]
  |  Branch (579:37): [True: 1.52k, False: 5.63k]
  |  Branch (579:55): [True: 22.9k, False: 3.21k]
  ------------------
  580|  22.9k|        return true;
  581|  22.9k|    }
  582|  3.07M|    return false;
  583|  3.09M|}
uloc_tag.cpp:_ZN12_GLOBAL__N_119_addExtensionToListEPPNS_18ExtensionListEntryES1_b:
  948|  1.48M|_addExtensionToList(ExtensionListEntry **first, ExtensionListEntry *ext, bool localeToBCP) {
  949|  1.48M|    bool bAdded = true;
  950|       |
  951|  1.48M|    if (*first == nullptr) {
  ------------------
  |  Branch (951:9): [True: 48.1k, False: 1.43M]
  ------------------
  952|  48.1k|        ext->next = nullptr;
  953|  48.1k|        *first = ext;
  954|  1.43M|    } else {
  955|  1.43M|        ExtensionListEntry *prev, *cur;
  956|  1.43M|        int32_t cmp;
  957|       |
  958|       |        /* reorder variants in alphabetical order */
  959|  1.43M|        prev = nullptr;
  960|  1.43M|        cur = *first;
  961|  25.0M|        while (true) {
  ------------------
  |  Branch (961:16): [Folded - Ignored]
  ------------------
  962|  25.0M|            if (cur == nullptr) {
  ------------------
  |  Branch (962:17): [True: 43.0k, False: 24.9M]
  ------------------
  963|  43.0k|                prev->next = ext;
  964|  43.0k|                ext->next = nullptr;
  965|  43.0k|                break;
  966|  43.0k|            }
  967|  24.9M|            if (localeToBCP) {
  ------------------
  |  Branch (967:17): [True: 0, False: 24.9M]
  ------------------
  968|       |                /* special handling for locale to bcp conversion */
  969|      0|                int32_t len, curlen;
  970|       |
  971|      0|                len = static_cast<int32_t>(uprv_strlen(ext->key));
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  972|      0|                curlen = static_cast<int32_t>(uprv_strlen(cur->key));
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  973|       |
  974|      0|                if (len == 1 && curlen == 1) {
  ------------------
  |  Branch (974:21): [True: 0, False: 0]
  |  Branch (974:33): [True: 0, False: 0]
  ------------------
  975|      0|                    if (*(ext->key) == *(cur->key)) {
  ------------------
  |  Branch (975:25): [True: 0, False: 0]
  ------------------
  976|      0|                        cmp = 0;
  977|      0|                    } else if (*(ext->key) == PRIVATEUSE) {
  ------------------
  |  |   66|      0|#define PRIVATEUSE 'x'
  ------------------
  |  Branch (977:32): [True: 0, False: 0]
  ------------------
  978|      0|                        cmp = 1;
  979|      0|                    } else if (*(cur->key) == PRIVATEUSE) {
  ------------------
  |  |   66|      0|#define PRIVATEUSE 'x'
  ------------------
  |  Branch (979:32): [True: 0, False: 0]
  ------------------
  980|      0|                        cmp = -1;
  981|      0|                    } else {
  982|      0|                        cmp = *(ext->key) - *(cur->key);
  983|      0|                    }
  984|      0|                } else if (len == 1) {
  ------------------
  |  Branch (984:28): [True: 0, False: 0]
  ------------------
  985|      0|                    cmp = *(ext->key) - LDMLEXT; 
  ------------------
  |  |   67|      0|#define LDMLEXT 'u'
  ------------------
  986|      0|                } else if (curlen == 1) {
  ------------------
  |  Branch (986:28): [True: 0, False: 0]
  ------------------
  987|      0|                    cmp = LDMLEXT - *(cur->key);
  ------------------
  |  |   67|      0|#define LDMLEXT 'u'
  ------------------
  988|      0|                } else {
  989|      0|                    cmp = uprv_compareInvCharsAsAscii(ext->key, cur->key);
  ------------------
  |  |  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        ::
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  990|       |                    /* Both are u extension keys - we need special handling for 'attribute' */
  991|      0|                    if (cmp != 0) {
  ------------------
  |  Branch (991:25): [True: 0, False: 0]
  ------------------
  992|      0|                        if (uprv_strcmp(cur->key, LOCALE_ATTRIBUTE_KEY) == 0) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (992:29): [True: 0, False: 0]
  ------------------
  993|      0|                            cmp = 1;
  994|      0|                        } else if (uprv_strcmp(ext->key, LOCALE_ATTRIBUTE_KEY) == 0) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (994:36): [True: 0, False: 0]
  ------------------
  995|      0|                            cmp = -1;
  996|      0|                        }
  997|      0|                    }
  998|      0|                }
  999|  24.9M|            } else {
 1000|  24.9M|                cmp = uprv_compareInvCharsAsAscii(ext->key, cur->key);
  ------------------
  |  |  153|  24.9M|#   define uprv_compareInvCharsAsAscii(s1, s2) uprv_strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |   38|  24.9M|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  |  |  ------------------
  |  |  |  |  |  |  393|  24.9M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1001|  24.9M|            }
 1002|  24.9M|            if (cmp < 0) {
  ------------------
  |  Branch (1002:17): [True: 23.2k, False: 24.9M]
  ------------------
 1003|  23.2k|                if (prev == nullptr) {
  ------------------
  |  Branch (1003:21): [True: 6.03k, False: 17.2k]
  ------------------
 1004|  6.03k|                    *first = ext;
 1005|  17.2k|                } else {
 1006|  17.2k|                    prev->next = ext;
 1007|  17.2k|                }
 1008|  23.2k|                ext->next = cur;
 1009|  23.2k|                break;
 1010|  23.2k|            }
 1011|  24.9M|            if (cmp == 0) {
  ------------------
  |  Branch (1011:17): [True: 1.36M, False: 23.5M]
  ------------------
 1012|       |                /* duplicated extension key */
 1013|  1.36M|                bAdded = false;
 1014|  1.36M|                break;
 1015|  1.36M|            }
 1016|  23.5M|            prev = cur;
 1017|  23.5M|            cur = cur->next;
 1018|  23.5M|        }
 1019|  1.43M|    }
 1020|       |
 1021|  1.48M|    return bAdded;
 1022|  1.48M|}
uloc_tag.cpp:_ZN12_GLOBAL__N_111ultag_parseEPKciPiR10UErrorCode:
 1979|   143k|ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode& status) {
 1980|   143k|    if (U_FAILURE(status)) { return nullptr; }
  ------------------
  |  Branch (1980:9): [True: 0, False: 143k]
  ------------------
 1981|       |
 1982|   143k|    char *tagBuf;
 1983|   143k|    int16_t next;
 1984|   143k|    char *pSubtag, *pNext, *pLastGoodPosition;
 1985|   143k|    int32_t subtagLen;
 1986|   143k|    int32_t extlangIdx;
 1987|   143k|    icu::LocalPointer<ExtensionListEntry> pExtension;
 1988|   143k|    char *pExtValueSubtag, *pExtValueSubtagEnd;
 1989|   143k|    int32_t i;
 1990|   143k|    bool privateuseVar = false;
 1991|   143k|    int32_t legacyLen = 0;
 1992|       |
 1993|   143k|    if (parsedLen != nullptr) {
  ------------------
  |  Branch (1993:9): [True: 0, False: 143k]
  ------------------
 1994|      0|        *parsedLen = 0;
 1995|      0|    }
 1996|       |
 1997|   143k|    if (tagLen < 0) {
  ------------------
  |  Branch (1997:9): [True: 25.3k, False: 118k]
  ------------------
 1998|  25.3k|        tagLen = static_cast<int32_t>(uprv_strlen(tag));
  ------------------
  |  |   37|  25.3k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  25.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1999|  25.3k|    }
 2000|       |
 2001|       |    /* copy the entire string */
 2002|   143k|    tagBuf = static_cast<char*>(uprv_malloc(tagLen + 1));
  ------------------
  |  | 1524|   143k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|   143k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   143k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   143k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2003|   143k|    if (tagBuf == nullptr) {
  ------------------
  |  Branch (2003:9): [True: 0, False: 143k]
  ------------------
 2004|      0|        status = U_MEMORY_ALLOCATION_ERROR;
 2005|      0|        return nullptr;
 2006|      0|    }
 2007|       |    
 2008|   143k|    if (tagLen > 0) {
  ------------------
  |  Branch (2008:9): [True: 143k, False: 0]
  ------------------
 2009|   143k|        uprv_memcpy(tagBuf, tag, tagLen);
  ------------------
  |  |   42|   143k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|   143k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|   143k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|   143k|    _Pragma("clang diagnostic push") \
  |  |   45|   143k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|   143k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|   143k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|   143k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|   143k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|   143k|    _Pragma("clang diagnostic pop") \
  |  |   49|   143k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|   143k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|   143k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|   143k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2010|   143k|    }
 2011|   143k|    *(tagBuf + tagLen) = 0;
 2012|       |
 2013|       |    /* create a ULanguageTag */
 2014|   143k|    icu::LocalULanguageTagPointer t(
 2015|   143k|            static_cast<ULanguageTag*>(uprv_malloc(sizeof(ULanguageTag))));
  ------------------
  |  | 1524|   143k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|   143k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   143k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   143k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2016|   143k|    if (t.isNull()) {
  ------------------
  |  Branch (2016:9): [True: 0, False: 143k]
  ------------------
 2017|      0|        uprv_free(tagBuf);
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2018|      0|        status = U_MEMORY_ALLOCATION_ERROR;
 2019|      0|        return nullptr;
 2020|      0|    }
 2021|   143k|    _initializeULanguageTag(t.getAlias());
 2022|   143k|    t->buf = tagBuf;
 2023|       |
 2024|   143k|    if (tagLen < MINLEN) {
  ------------------
  |  |   64|   143k|#define MINLEN 2
  ------------------
  |  Branch (2024:9): [True: 26.1k, False: 117k]
  ------------------
 2025|       |        /* the input tag is too short - return empty ULanguageTag */
 2026|  26.1k|        return t.orphan();
 2027|  26.1k|    }
 2028|       |
 2029|   117k|    size_t parsedLenDelta = 0;
 2030|       |    // Legacy tag will be consider together. Legacy tag with intervening
 2031|       |    // script and region such as art-DE-lojban or art-Latn-lojban won't be
 2032|       |    // matched.
 2033|       |    /* check if the tag is legacy */
 2034|  3.05M|    for (i = 0; i < UPRV_LENGTHOF(LEGACY); i += 2) {
  ------------------
  |  |   99|  3.05M|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (2034:17): [True: 2.93M, False: 116k]
  ------------------
 2035|  2.93M|        int32_t checkLegacyLen = static_cast<int32_t>(uprv_strlen(LEGACY[i]));
  ------------------
  |  |   37|  2.93M|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  2.93M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2036|  2.93M|        if (tagLen < checkLegacyLen) {
  ------------------
  |  Branch (2036:13): [True: 311k, False: 2.62M]
  ------------------
 2037|   311k|            continue;
 2038|   311k|        }
 2039|  2.62M|        if (tagLen > checkLegacyLen && tagBuf[checkLegacyLen] != '-') {
  ------------------
  |  Branch (2039:13): [True: 2.52M, False: 97.0k]
  |  Branch (2039:40): [True: 1.80M, False: 723k]
  ------------------
 2040|       |            // make sure next char is '-'.
 2041|  1.80M|            continue;
 2042|  1.80M|        }
 2043|   820k|        if (uprv_strnicmp(LEGACY[i], tagBuf, checkLegacyLen) == 0) {
  ------------------
  |  | 1544|   820k|#define uprv_strnicmp U_ICU_ENTRY_POINT_RENAME(uprv_strnicmp)
  |  |  ------------------
  |  |  |  |  123|   820k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   820k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   820k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2043:13): [True: 725, False: 819k]
  ------------------
 2044|    725|            int32_t newTagLength;
 2045|       |
 2046|    725|            legacyLen = checkLegacyLen;  /* back up for output parsedLen */
 2047|    725|            int32_t replacementLen = static_cast<int32_t>(uprv_strlen(LEGACY[i+1]));
  ------------------
  |  |   37|    725|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|    725|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2048|    725|            newTagLength = replacementLen + tagLen - checkLegacyLen;
 2049|    725|            int32_t oldTagLength = tagLen;
 2050|    725|            if (tagLen < newTagLength) {
  ------------------
  |  Branch (2050:17): [True: 496, False: 229]
  ------------------
 2051|    496|                uprv_free(tagBuf);
  ------------------
  |  | 1503|    496|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|    496|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    496|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    496|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2052|       |                // Change t->buf after the free and before return to avoid the second double free in
 2053|       |                // the destructor of t when t is out of scope.
 2054|    496|                t->buf = tagBuf = static_cast<char*>(uprv_malloc(newTagLength + 1));
  ------------------
  |  | 1524|    496|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|    496|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    496|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    496|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2055|    496|                if (tagBuf == nullptr) {
  ------------------
  |  Branch (2055:21): [True: 0, False: 496]
  ------------------
 2056|      0|                    status = U_MEMORY_ALLOCATION_ERROR;
 2057|      0|                    return nullptr;
 2058|      0|                }
 2059|    496|                tagLen = newTagLength;
 2060|    496|            }
 2061|    725|            parsedLenDelta = checkLegacyLen - replacementLen;
 2062|    725|            uprv_strcpy(t->buf, LEGACY[i + 1]);
  ------------------
  |  |   36|    725|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|    725|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2063|    725|            if (checkLegacyLen != tagLen) {
  ------------------
  |  Branch (2063:17): [True: 675, False: 50]
  ------------------
 2064|    675|                uprv_memcpy(t->buf + replacementLen, tag + checkLegacyLen,
  ------------------
  |  |   42|    675|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|    675|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|    675|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|    675|    _Pragma("clang diagnostic push") \
  |  |   45|    675|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|    675|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|    675|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|    675|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|    675|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|    675|    _Pragma("clang diagnostic pop") \
  |  |   49|    675|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|    675|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|    675|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|    675|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2065|    675|                            oldTagLength - checkLegacyLen);
 2066|       |                // NUL-terminate after memcpy().
 2067|    675|                t->buf[replacementLen + oldTagLength - checkLegacyLen] = 0;
 2068|    675|            }
 2069|    725|            break;
 2070|    725|        }
 2071|   820k|    }
 2072|       |
 2073|   117k|    if (legacyLen == 0) {
  ------------------
  |  Branch (2073:9): [True: 116k, False: 725]
  ------------------
 2074|  3.15M|        for (i = 0; i < UPRV_LENGTHOF(REDUNDANT); i += 2) {
  ------------------
  |  |   99|  3.15M|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (2074:21): [True: 3.03M, False: 116k]
  ------------------
 2075|  3.03M|            const char* redundantTag = REDUNDANT[i];
 2076|  3.03M|            size_t redundantTagLen = uprv_strlen(redundantTag);
  ------------------
  |  |   37|  3.03M|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  3.03M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2077|       |            // The preferred tag for a redundant tag is always shorter than redundant
 2078|       |            // tag. A redundant tag may or may not be followed by other subtags.
 2079|       |            // (i.e. "zh-yue" or "zh-yue-u-co-pinyin").
 2080|  3.03M|            if (uprv_strnicmp(redundantTag, tagBuf, static_cast<uint32_t>(redundantTagLen)) == 0) {
  ------------------
  |  | 1544|  3.03M|#define uprv_strnicmp U_ICU_ENTRY_POINT_RENAME(uprv_strnicmp)
  |  |  ------------------
  |  |  |  |  123|  3.03M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  3.03M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  3.03M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2080:17): [True: 1.15k, False: 3.03M]
  ------------------
 2081|  1.15k|                const char* redundantTagEnd = tagBuf + redundantTagLen;
 2082|  1.15k|                if (*redundantTagEnd  == '\0' || *redundantTagEnd == SEP) {
  ------------------
  |  |   65|  1.15k|#define SEP '-'
  ------------------
  |  Branch (2082:21): [True: 0, False: 1.15k]
  |  Branch (2082:50): [True: 471, False: 679]
  ------------------
 2083|    471|                    const char* preferredTag = REDUNDANT[i + 1];
 2084|    471|                    size_t preferredTagLen = uprv_strlen(preferredTag);
  ------------------
  |  |   37|    471|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|    471|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2085|    471|                    uprv_memcpy(t->buf, preferredTag, preferredTagLen);
  ------------------
  |  |   42|    471|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|    471|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|    471|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|    471|    _Pragma("clang diagnostic push") \
  |  |   45|    471|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|    471|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|    471|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|    471|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|    471|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|    471|    _Pragma("clang diagnostic pop") \
  |  |   49|    471|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|    471|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|    471|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|    471|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2086|    471|                    if (*redundantTagEnd == SEP) {
  ------------------
  |  |   65|    471|#define SEP '-'
  ------------------
  |  Branch (2086:25): [True: 471, False: 0]
  ------------------
 2087|    471|                        uprv_memmove(tagBuf + preferredTagLen,
  ------------------
  |  |   51|    471|#define uprv_memmove(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|    471|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   52|    471|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   53|    471|    _Pragma("clang diagnostic push") \
  |  |   54|    471|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   55|    471|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|    471|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   56|    471|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|    471|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   57|    471|    _Pragma("clang diagnostic pop") \
  |  |   58|    471|    U_STANDARD_CPP_NAMESPACE memmove(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|    471|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   59|    471|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|    471|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2088|    471|                                     redundantTagEnd,
 2089|    471|                                     tagLen - redundantTagLen + 1);
 2090|    471|                    } else {
 2091|      0|                        tagBuf[preferredTagLen] = '\0';
 2092|      0|                    }
 2093|       |                    // parsedLen should be the length of the input
 2094|       |                    // before redundantTag is replaced by preferredTag.
 2095|       |                    // Save the delta to add it back later.
 2096|    471|                    parsedLenDelta = redundantTagLen - preferredTagLen;
 2097|    471|                    break;
 2098|    471|                }
 2099|  1.15k|            }
 2100|  3.03M|        }
 2101|   116k|    }
 2102|       |
 2103|       |    /*
 2104|       |     * langtag      =   language
 2105|       |     *                  ["-" script]
 2106|       |     *                  ["-" region]
 2107|       |     *                  *("-" variant)
 2108|       |     *                  *("-" extension)
 2109|       |     *                  ["-" privateuse]
 2110|       |     */
 2111|       |
 2112|   117k|    next = LANG | PRIV;
  ------------------
  |  | 1959|   117k|#define LANG 0x0001
  ------------------
                  next = LANG | PRIV;
  ------------------
  |  | 1966|   117k|#define PRIV 0x0080
  ------------------
 2113|   117k|    pNext = pLastGoodPosition = tagBuf;
 2114|   117k|    extlangIdx = 0;
 2115|   117k|    pExtValueSubtag = nullptr;
 2116|   117k|    pExtValueSubtagEnd = nullptr;
 2117|       |
 2118|  3.28M|    while (pNext) {
  ------------------
  |  Branch (2118:12): [True: 3.27M, False: 8.10k]
  ------------------
 2119|  3.27M|        char *pSep;
 2120|       |
 2121|  3.27M|        pSubtag = pNext;
 2122|       |
 2123|       |        /* locate next separator char */
 2124|  3.27M|        pSep = pSubtag;
 2125|  39.8M|        while (*pSep) {
  ------------------
  |  Branch (2125:16): [True: 39.8M, False: 52.9k]
  ------------------
 2126|  39.8M|            if (*pSep == SEP) {
  ------------------
  |  |   65|  39.8M|#define SEP '-'
  ------------------
  |  Branch (2126:17): [True: 3.22M, False: 36.5M]
  ------------------
 2127|  3.22M|                break;
 2128|  3.22M|            }
 2129|  36.5M|            pSep++;
 2130|  36.5M|        }
 2131|  3.27M|        if (*pSep == 0) {
  ------------------
  |  Branch (2131:13): [True: 52.9k, False: 3.22M]
  ------------------
 2132|       |            /* last subtag */
 2133|  52.9k|            pNext = nullptr;
 2134|  3.22M|        } else {
 2135|  3.22M|            pNext = pSep + 1;
 2136|  3.22M|        }
 2137|  3.27M|        subtagLen = static_cast<int32_t>(pSep - pSubtag);
 2138|       |
 2139|  3.27M|        if (next & LANG) {
  ------------------
  |  | 1959|  3.27M|#define LANG 0x0001
  ------------------
  |  Branch (2139:13): [True: 117k, False: 3.15M]
  ------------------
 2140|   117k|            if (ultag_isLanguageSubtag(pSubtag, subtagLen)) {
  ------------------
  |  | 1225|   117k|#define ultag_isLanguageSubtag U_ICU_ENTRY_POINT_RENAME(ultag_isLanguageSubtag)
  |  |  ------------------
  |  |  |  |  123|   117k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   117k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   117k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2140:17): [True: 42.1k, False: 75.4k]
  ------------------
 2141|  42.1k|                *pSep = 0;  /* terminate */
 2142|       |                // TODO: move deprecated language code handling here.
 2143|  42.1k|                t->language = T_CString_toLowerCase(pSubtag);
  ------------------
  |  |   69|  42.1k|#define T_CString_toLowerCase U_ICU_ENTRY_POINT_RENAME(T_CString_toLowerCase)
  |  |  ------------------
  |  |  |  |  123|  42.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  42.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  42.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2144|       |
 2145|  42.1k|                pLastGoodPosition = pSep;
 2146|  42.1k|                next = SCRT | REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1961|  42.1k|#define SCRT 0x0004
  ------------------
                              next = SCRT | REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1962|  42.1k|#define REGN 0x0008
  ------------------
                              next = SCRT | REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1963|  42.1k|#define VART 0x0010
  ------------------
                              next = SCRT | REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1964|  42.1k|#define EXTS 0x0020
  ------------------
                              next = SCRT | REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1966|  42.1k|#define PRIV 0x0080
  ------------------
 2147|  42.1k|                if (subtagLen <= 3)
  ------------------
  |  Branch (2147:21): [True: 40.0k, False: 2.09k]
  ------------------
 2148|  40.0k|                  next |= EXTL;
  ------------------
  |  | 1960|  40.0k|#define EXTL 0x0002
  ------------------
 2149|  42.1k|                continue;
 2150|  42.1k|            }
 2151|   117k|        }
 2152|  3.23M|        if (next & EXTL) {
  ------------------
  |  | 1960|  3.23M|#define EXTL 0x0002
  ------------------
  |  Branch (2152:13): [True: 45.9k, False: 3.18M]
  ------------------
 2153|  45.9k|            if (_isExtlangSubtag(pSubtag, subtagLen)) {
  ------------------
  |  Branch (2153:17): [True: 6.57k, False: 39.4k]
  ------------------
 2154|  6.57k|                *pSep = 0;
 2155|  6.57k|                t->extlang[extlangIdx++] = T_CString_toLowerCase(pSubtag);
  ------------------
  |  |   69|  6.57k|#define T_CString_toLowerCase U_ICU_ENTRY_POINT_RENAME(T_CString_toLowerCase)
  |  |  ------------------
  |  |  |  |  123|  6.57k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  6.57k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  6.57k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2156|       |
 2157|  6.57k|                pLastGoodPosition = pSep;
 2158|  6.57k|                if (extlangIdx < 3) {
  ------------------
  |  Branch (2158:21): [True: 6.01k, False: 559]
  ------------------
 2159|  6.01k|                    next = EXTL | SCRT | REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1960|  6.01k|#define EXTL 0x0002
  ------------------
                                  next = EXTL | SCRT | REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1961|  6.01k|#define SCRT 0x0004
  ------------------
                                  next = EXTL | SCRT | REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1962|  6.01k|#define REGN 0x0008
  ------------------
                                  next = EXTL | SCRT | REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1963|  6.01k|#define VART 0x0010
  ------------------
                                  next = EXTL | SCRT | REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1964|  6.01k|#define EXTS 0x0020
  ------------------
                                  next = EXTL | SCRT | REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1966|  6.01k|#define PRIV 0x0080
  ------------------
 2160|  6.01k|                } else {
 2161|    559|                    next = SCRT | REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1961|    559|#define SCRT 0x0004
  ------------------
                                  next = SCRT | REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1962|    559|#define REGN 0x0008
  ------------------
                                  next = SCRT | REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1963|    559|#define VART 0x0010
  ------------------
                                  next = SCRT | REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1964|    559|#define EXTS 0x0020
  ------------------
                                  next = SCRT | REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1966|    559|#define PRIV 0x0080
  ------------------
 2162|    559|                }
 2163|  6.57k|                continue;
 2164|  6.57k|            }
 2165|  45.9k|        }
 2166|  3.22M|        if (next & SCRT) {
  ------------------
  |  | 1961|  3.22M|#define SCRT 0x0004
  ------------------
  |  Branch (2166:13): [True: 42.0k, False: 3.18M]
  ------------------
 2167|  42.0k|            if (ultag_isScriptSubtag(pSubtag, subtagLen)) {
  ------------------
  |  | 1228|  42.0k|#define ultag_isScriptSubtag U_ICU_ENTRY_POINT_RENAME(ultag_isScriptSubtag)
  |  |  ------------------
  |  |  |  |  123|  42.0k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  42.0k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  42.0k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2167:17): [True: 2.33k, False: 39.7k]
  ------------------
 2168|  2.33k|                char *p = pSubtag;
 2169|       |
 2170|  2.33k|                *pSep = 0;
 2171|       |
 2172|       |                /* to title case */
 2173|  2.33k|                *p = uprv_toupper(*p);
  ------------------
  |  | 1547|  2.33k|#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper)
  |  |  ------------------
  |  |  |  |  123|  2.33k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.33k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.33k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2174|  2.33k|                p++;
 2175|  9.34k|                for (; *p; p++) {
  ------------------
  |  Branch (2175:24): [True: 7.00k, False: 2.33k]
  ------------------
 2176|  7.00k|                    *p = uprv_tolower(*p);
  ------------------
  |  |   68|  7.00k|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|  7.00k|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  7.00k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|  7.00k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|  7.00k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2177|  7.00k|                }
 2178|       |
 2179|  2.33k|                t->script = pSubtag;
 2180|       |
 2181|  2.33k|                pLastGoodPosition = pSep;
 2182|  2.33k|                next = REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1962|  2.33k|#define REGN 0x0008
  ------------------
                              next = REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1963|  2.33k|#define VART 0x0010
  ------------------
                              next = REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1964|  2.33k|#define EXTS 0x0020
  ------------------
                              next = REGN | VART | EXTS | PRIV;
  ------------------
  |  | 1966|  2.33k|#define PRIV 0x0080
  ------------------
 2183|  2.33k|                continue;
 2184|  2.33k|            }
 2185|  42.0k|        }
 2186|  3.22M|        if (next & REGN) {
  ------------------
  |  | 1962|  3.22M|#define REGN 0x0008
  ------------------
  |  Branch (2186:13): [True: 42.0k, False: 3.18M]
  ------------------
 2187|  42.0k|            if (ultag_isRegionSubtag(pSubtag, subtagLen)) {
  ------------------
  |  | 1227|  42.0k|#define ultag_isRegionSubtag U_ICU_ENTRY_POINT_RENAME(ultag_isRegionSubtag)
  |  |  ------------------
  |  |  |  |  123|  42.0k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  42.0k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  42.0k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2187:17): [True: 21.9k, False: 20.1k]
  ------------------
 2188|  21.9k|                *pSep = 0;
 2189|       |                // TODO: move deprecated region code handling here.
 2190|  21.9k|                t->region = T_CString_toUpperCase(pSubtag);
  ------------------
  |  |   70|  21.9k|#define T_CString_toUpperCase U_ICU_ENTRY_POINT_RENAME(T_CString_toUpperCase)
  |  |  ------------------
  |  |  |  |  123|  21.9k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  21.9k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  21.9k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2191|       |
 2192|  21.9k|                pLastGoodPosition = pSep;
 2193|  21.9k|                next = VART | EXTS | PRIV;
  ------------------
  |  | 1963|  21.9k|#define VART 0x0010
  ------------------
                              next = VART | EXTS | PRIV;
  ------------------
  |  | 1964|  21.9k|#define EXTS 0x0020
  ------------------
                              next = VART | EXTS | PRIV;
  ------------------
  |  | 1966|  21.9k|#define PRIV 0x0080
  ------------------
 2194|  21.9k|                continue;
 2195|  21.9k|            }
 2196|  42.0k|        }
 2197|  3.20M|        if (next & VART) {
  ------------------
  |  | 1963|  3.20M|#define VART 0x0010
  ------------------
  |  Branch (2197:13): [True: 48.0k, False: 3.15M]
  ------------------
 2198|  48.0k|            if (_isVariantSubtag(pSubtag, subtagLen) ||
  ------------------
  |  Branch (2198:17): [True: 3.33k, False: 44.7k]
  ------------------
 2199|  48.0k|               (privateuseVar && _isPrivateuseVariantSubtag(pSubtag, subtagLen))) {
  ------------------
  |  Branch (2199:17): [True: 3.07k, False: 41.6k]
  |  Branch (2199:34): [True: 1.66k, False: 1.41k]
  ------------------
 2200|  4.99k|                icu::LocalPointer<VariantListEntry> var(new VariantListEntry, status);
 2201|  4.99k|                if (U_FAILURE(status)) {
  ------------------
  |  Branch (2201:21): [True: 0, False: 4.99k]
  ------------------
 2202|      0|                    return nullptr;
 2203|      0|                }
 2204|  4.99k|                *pSep = 0;
 2205|  4.99k|                var->variant = T_CString_toUpperCase(pSubtag);
  ------------------
  |  |   70|  4.99k|#define T_CString_toUpperCase U_ICU_ENTRY_POINT_RENAME(T_CString_toUpperCase)
  |  |  ------------------
  |  |  |  |  123|  4.99k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  4.99k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  4.99k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2206|  4.99k|                if (!_addVariantToList(&(t->variants), std::move(var))) {
  ------------------
  |  Branch (2206:21): [True: 471, False: 4.52k]
  ------------------
 2207|       |                    /* duplicated variant entry */
 2208|    471|                    break;
 2209|    471|                }
 2210|  4.52k|                pLastGoodPosition = pSep;
 2211|  4.52k|                next = VART | EXTS | PRIV;
  ------------------
  |  | 1963|  4.52k|#define VART 0x0010
  ------------------
                              next = VART | EXTS | PRIV;
  ------------------
  |  | 1964|  4.52k|#define EXTS 0x0020
  ------------------
                              next = VART | EXTS | PRIV;
  ------------------
  |  | 1966|  4.52k|#define PRIV 0x0080
  ------------------
 2212|  4.52k|                continue;
 2213|  4.99k|            }
 2214|  48.0k|        }
 2215|  3.19M|        if (next & EXTS) {
  ------------------
  |  | 1964|  3.19M|#define EXTS 0x0020
  ------------------
  |  Branch (2215:13): [True: 3.09M, False: 99.2k]
  ------------------
 2216|  3.09M|            if (_isExtensionSingleton(pSubtag, subtagLen)) {
  ------------------
  |  Branch (2216:17): [True: 22.9k, False: 3.07M]
  ------------------
 2217|  22.9k|                if (pExtension.isValid()) {
  ------------------
  |  Branch (2217:21): [True: 3.79k, False: 19.2k]
  ------------------
 2218|  3.79k|                    if (pExtValueSubtag == nullptr || pExtValueSubtagEnd == nullptr) {
  ------------------
  |  Branch (2218:25): [True: 0, False: 3.79k]
  |  Branch (2218:55): [True: 0, False: 3.79k]
  ------------------
 2219|       |                        /* the previous extension is incomplete */
 2220|      0|                        delete pExtension.orphan();
 2221|      0|                        break;
 2222|      0|                    }
 2223|       |
 2224|       |                    /* terminate the previous extension value */
 2225|  3.79k|                    *pExtValueSubtagEnd = 0;
 2226|  3.79k|                    pExtension->value = T_CString_toLowerCase(pExtValueSubtag);
  ------------------
  |  |   69|  3.79k|#define T_CString_toLowerCase U_ICU_ENTRY_POINT_RENAME(T_CString_toLowerCase)
  |  |  ------------------
  |  |  |  |  123|  3.79k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  3.79k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  3.79k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2227|       |
 2228|       |                    /* insert the extension to the list */
 2229|  3.79k|                    if (_addExtensionToList(&(t->extensions), pExtension.getAlias(), false)) {
  ------------------
  |  Branch (2229:25): [True: 3.58k, False: 211]
  ------------------
 2230|  3.58k|                        pExtension.orphan();
 2231|  3.58k|                        pLastGoodPosition = pExtValueSubtagEnd;
 2232|  3.58k|                    } else {
 2233|       |                        /* stop parsing here */
 2234|    211|                        delete pExtension.orphan();
 2235|    211|                        break;
 2236|    211|                    }
 2237|  3.79k|                }
 2238|       |
 2239|       |                /* create a new extension */
 2240|  22.7k|                pExtension.adoptInsteadAndCheckErrorCode(new ExtensionListEntry, status);
 2241|  22.7k|                if (U_FAILURE(status)) {
  ------------------
  |  Branch (2241:21): [True: 0, False: 22.7k]
  ------------------
 2242|      0|                    return nullptr;
 2243|      0|                }
 2244|  22.7k|                *pSep = 0;
 2245|  22.7k|                pExtension->key = T_CString_toLowerCase(pSubtag);
  ------------------
  |  |   69|  22.7k|#define T_CString_toLowerCase U_ICU_ENTRY_POINT_RENAME(T_CString_toLowerCase)
  |  |  ------------------
  |  |  |  |  123|  22.7k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  22.7k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  22.7k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2246|  22.7k|                pExtension->value = nullptr;   /* will be set later */
 2247|       |
 2248|       |                /*
 2249|       |                 * reset the start and the end location of extension value
 2250|       |                 * subtags for this extension
 2251|       |                 */
 2252|  22.7k|                pExtValueSubtag = nullptr;
 2253|  22.7k|                pExtValueSubtagEnd = nullptr;
 2254|       |
 2255|  22.7k|                next = EXTV;
  ------------------
  |  | 1965|  22.7k|#define EXTV 0x0040
  ------------------
 2256|  22.7k|                continue;
 2257|  22.7k|            }
 2258|  3.09M|        }
 2259|  3.17M|        if (next & EXTV) {
  ------------------
  |  | 1965|  3.17M|#define EXTV 0x0040
  ------------------
  |  Branch (2259:13): [True: 3.07M, False: 99.2k]
  ------------------
 2260|  3.07M|            if (_isExtensionSubtag(pSubtag, subtagLen)) {
  ------------------
  |  Branch (2260:17): [True: 3.06M, False: 12.8k]
  ------------------
 2261|  3.06M|                if (pExtValueSubtag == nullptr) {
  ------------------
  |  Branch (2261:21): [True: 19.9k, False: 3.04M]
  ------------------
 2262|       |                    /* if the start position of this extension's value is not yet,
 2263|       |                        this one is the first value subtag */
 2264|  19.9k|                    pExtValueSubtag = pSubtag;
 2265|  19.9k|                }
 2266|       |
 2267|       |                /* Mark the end of this subtag */
 2268|  3.06M|                pExtValueSubtagEnd = pSep;
 2269|  3.06M|                next = EXTS | EXTV | PRIV;
  ------------------
  |  | 1964|  3.06M|#define EXTS 0x0020
  ------------------
                              next = EXTS | EXTV | PRIV;
  ------------------
  |  | 1965|  3.06M|#define EXTV 0x0040
  ------------------
                              next = EXTS | EXTV | PRIV;
  ------------------
  |  | 1966|  3.06M|#define PRIV 0x0080
  ------------------
 2270|       |
 2271|  3.06M|                continue;
 2272|  3.06M|            }
 2273|  3.07M|        }
 2274|   112k|        if (next & PRIV) {
  ------------------
  |  | 1966|   112k|#define PRIV 0x0080
  ------------------
  |  Branch (2274:13): [True: 108k, False: 3.85k]
  ------------------
 2275|   108k|            if (uprv_tolower(*pSubtag) == PRIVATEUSE && subtagLen == 1) {
  ------------------
  |  |   68|   108k|#   define uprv_tolower uprv_asciitolower
  |  |  ------------------
  |  |  |  | 1397|   108k|#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|   108k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  122|   108k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  121|   108k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          if (uprv_tolower(*pSubtag) == PRIVATEUSE && subtagLen == 1) {
  ------------------
  |  |   66|   216k|#define PRIVATEUSE 'x'
  ------------------
  |  Branch (2275:17): [True: 11.7k, False: 96.4k]
  |  Branch (2275:57): [True: 10.8k, False: 905]
  ------------------
 2276|  10.8k|                char *pPrivuseVal;
 2277|       |
 2278|  10.8k|                if (pExtension.isValid()) {
  ------------------
  |  Branch (2278:21): [True: 1.92k, False: 8.91k]
  ------------------
 2279|       |                    /* Process the last extension */
 2280|  1.92k|                    if (pExtValueSubtag == nullptr || pExtValueSubtagEnd == nullptr) {
  ------------------
  |  Branch (2280:25): [True: 0, False: 1.92k]
  |  Branch (2280:55): [True: 0, False: 1.92k]
  ------------------
 2281|       |                        /* the previous extension is incomplete */
 2282|      0|                        delete pExtension.orphan();
 2283|      0|                        break;
 2284|  1.92k|                    } else {
 2285|       |                        /* terminate the previous extension value */
 2286|  1.92k|                        *pExtValueSubtagEnd = 0;
 2287|  1.92k|                        pExtension->value = T_CString_toLowerCase(pExtValueSubtag);
  ------------------
  |  |   69|  1.92k|#define T_CString_toLowerCase U_ICU_ENTRY_POINT_RENAME(T_CString_toLowerCase)
  |  |  ------------------
  |  |  |  |  123|  1.92k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.92k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.92k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2288|       |
 2289|       |                        /* insert the extension to the list */
 2290|  1.92k|                        if (_addExtensionToList(&(t->extensions), pExtension.getAlias(), false)) {
  ------------------
  |  Branch (2290:29): [True: 1.72k, False: 205]
  ------------------
 2291|  1.72k|                            pExtension.orphan();
 2292|  1.72k|                            pLastGoodPosition = pExtValueSubtagEnd;
 2293|  1.72k|                        } else {
 2294|       |                        /* stop parsing here */
 2295|    205|                            delete pExtension.orphan();
 2296|    205|                            break;
 2297|    205|                        }
 2298|  1.92k|                    }
 2299|  1.92k|                }
 2300|       |
 2301|       |                /* The rest of part will be private use value subtags */
 2302|  10.6k|                if (pNext == nullptr) {
  ------------------
  |  Branch (2302:21): [True: 95, False: 10.5k]
  ------------------
 2303|       |                    /* empty private use subtag */
 2304|     95|                    break;
 2305|     95|                }
 2306|       |                /* back up the private use value start position */
 2307|  10.5k|                pPrivuseVal = pNext;
 2308|       |
 2309|       |                /* validate private use value subtags */
 2310|   207k|                while (pNext) {
  ------------------
  |  Branch (2310:24): [True: 206k, False: 959]
  ------------------
 2311|   206k|                    pSubtag = pNext;
 2312|   206k|                    pSep = pSubtag;
 2313|  6.05M|                    while (*pSep) {
  ------------------
  |  Branch (2313:28): [True: 6.04M, False: 6.00k]
  ------------------
 2314|  6.04M|                        if (*pSep == SEP) {
  ------------------
  |  |   65|  6.04M|#define SEP '-'
  ------------------
  |  Branch (2314:29): [True: 200k, False: 5.84M]
  ------------------
 2315|   200k|                            break;
 2316|   200k|                        }
 2317|  5.84M|                        pSep++;
 2318|  5.84M|                    }
 2319|   206k|                    if (*pSep == 0) {
  ------------------
  |  Branch (2319:25): [True: 6.00k, False: 200k]
  ------------------
 2320|       |                        /* last subtag */
 2321|  6.00k|                        pNext = nullptr;
 2322|   200k|                    } else {
 2323|   200k|                        pNext = pSep + 1;
 2324|   200k|                    }
 2325|   206k|                    subtagLen = static_cast<int32_t>(pSep - pSubtag);
 2326|       |
 2327|   206k|                    if (uprv_strncmp(pSubtag, PRIVUSE_VARIANT_PREFIX, uprv_strlen(PRIVUSE_VARIANT_PREFIX)) == 0) {
  ------------------
  |  |   44|   206k|#define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n)
  |  |  ------------------
  |  |  |  |  393|   206k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (2327:25): [True: 3.33k, False: 203k]
  ------------------
 2328|  3.33k|                        *pSep = 0;
 2329|  3.33k|                        next = VART;
  ------------------
  |  | 1963|  3.33k|#define VART 0x0010
  ------------------
 2330|  3.33k|                        privateuseVar = true;
 2331|  3.33k|                        break;
 2332|   203k|                    } else if (_isPrivateuseValueSubtag(pSubtag, subtagLen)) {
  ------------------
  |  Branch (2332:32): [True: 197k, False: 6.24k]
  ------------------
 2333|   197k|                        pLastGoodPosition = pSep;
 2334|   197k|                    } else {
 2335|  6.24k|                        break;
 2336|  6.24k|                    }
 2337|   206k|                }
 2338|       |
 2339|  10.5k|                if (next == VART) {
  ------------------
  |  | 1963|  10.5k|#define VART 0x0010
  ------------------
  |  Branch (2339:21): [True: 3.33k, False: 7.20k]
  ------------------
 2340|  3.33k|                    continue;
 2341|  3.33k|                }
 2342|       |
 2343|  7.20k|                if (pLastGoodPosition - pPrivuseVal > 0) {
  ------------------
  |  Branch (2343:21): [True: 3.01k, False: 4.19k]
  ------------------
 2344|  3.01k|                    *pLastGoodPosition = 0;
 2345|  3.01k|                    t->privateuse = T_CString_toLowerCase(pPrivuseVal);
  ------------------
  |  |   69|  3.01k|#define T_CString_toLowerCase U_ICU_ENTRY_POINT_RENAME(T_CString_toLowerCase)
  |  |  ------------------
  |  |  |  |  123|  3.01k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  3.01k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  3.01k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2346|  3.01k|                }
 2347|       |                /* No more subtags, exiting the parse loop */
 2348|  7.20k|                break;
 2349|  10.5k|            }
 2350|  97.3k|            break;
 2351|   108k|        }
 2352|       |
 2353|       |        /* If we fell through here, it means this subtag is illegal - quit parsing */
 2354|  3.85k|        break;
 2355|   112k|    }
 2356|       |
 2357|   117k|    if (pExtension.isValid()) {
  ------------------
  |  Branch (2357:9): [True: 17.0k, False: 100k]
  ------------------
 2358|       |        /* Process the last extension */
 2359|  17.0k|        if (pExtValueSubtag == nullptr || pExtValueSubtagEnd == nullptr) {
  ------------------
  |  Branch (2359:13): [True: 2.78k, False: 14.2k]
  |  Branch (2359:43): [True: 0, False: 14.2k]
  ------------------
 2360|       |            /* the previous extension is incomplete */
 2361|  2.78k|            delete pExtension.orphan();
 2362|  14.2k|        } else {
 2363|       |            /* terminate the previous extension value */
 2364|  14.2k|            *pExtValueSubtagEnd = 0;
 2365|  14.2k|            pExtension->value = T_CString_toLowerCase(pExtValueSubtag);
  ------------------
  |  |   69|  14.2k|#define T_CString_toLowerCase U_ICU_ENTRY_POINT_RENAME(T_CString_toLowerCase)
  |  |  ------------------
  |  |  |  |  123|  14.2k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  14.2k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  14.2k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2366|       |            /* insert the extension to the list */
 2367|  14.2k|            if (_addExtensionToList(&(t->extensions), pExtension.getAlias(), false)) {
  ------------------
  |  Branch (2367:17): [True: 14.0k, False: 229]
  ------------------
 2368|  14.0k|                pExtension.orphan();
 2369|  14.0k|                pLastGoodPosition = pExtValueSubtagEnd;
 2370|  14.0k|            } else {
 2371|    229|                delete pExtension.orphan();
 2372|    229|            }
 2373|  14.2k|        }
 2374|  17.0k|    }
 2375|       |
 2376|   117k|    if (parsedLen != nullptr) {
  ------------------
  |  Branch (2376:9): [True: 0, False: 117k]
  ------------------
 2377|      0|        *parsedLen = static_cast<int32_t>(pLastGoodPosition - t->buf + parsedLenDelta);
 2378|      0|    }
 2379|       |
 2380|   117k|    return t.orphan();
 2381|   117k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_123_initializeULanguageTagEPNS_12ULanguageTagE:
 1025|   143k|_initializeULanguageTag(ULanguageTag* langtag) {
 1026|   143k|    int32_t i;
 1027|       |
 1028|   143k|    langtag->buf = nullptr;
 1029|       |
 1030|   143k|    langtag->language = EMPTY;
 1031|   574k|    for (i = 0; i < MAXEXTLANG; i++) {
  ------------------
  |  |   51|   574k|#define MAXEXTLANG 3
  ------------------
  |  Branch (1031:17): [True: 430k, False: 143k]
  ------------------
 1032|   430k|        langtag->extlang[i] = nullptr;
 1033|   430k|    }
 1034|       |
 1035|   143k|    langtag->script = EMPTY;
 1036|   143k|    langtag->region = EMPTY;
 1037|       |
 1038|   143k|    langtag->variants = nullptr;
 1039|   143k|    langtag->extensions = nullptr;
 1040|       |
 1041|   143k|    langtag->legacy = EMPTY;
 1042|   143k|    langtag->privateuse = EMPTY;
 1043|   143k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_116_isExtlangSubtagEPKci:
  449|  45.9k|_isExtlangSubtag(const char* s, int32_t len) {
  450|       |    /*
  451|       |     * extlang       = 3ALPHA              ; selected ISO 639 codes
  452|       |     *                 *2("-" 3ALPHA)      ; permanently reserved
  453|       |     */
  454|  45.9k|    if (len < 0) {
  ------------------
  |  Branch (454:9): [True: 0, False: 45.9k]
  ------------------
  455|      0|        len = static_cast<int32_t>(uprv_strlen(s));
  ------------------
  |  |   37|      0|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  456|      0|    }
  457|  45.9k|    if (len == 3 && _isAlphaString(s, len)) {
  ------------------
  |  Branch (457:9): [True: 8.02k, False: 37.9k]
  |  Branch (457:21): [True: 6.57k, False: 1.45k]
  ------------------
  458|  6.57k|        return true;
  459|  6.57k|    }
  460|  39.4k|    return false;
  461|  45.9k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_126_isPrivateuseVariantSubtagEPKci:
  557|  3.07k|_isPrivateuseVariantSubtag(const char* s, int32_t len) {
  558|       |    /*
  559|       |     * variant       = 1*8alphanum         ; registered variants
  560|       |     *               / (DIGIT 3alphanum)
  561|       |     */
  562|  3.07k|    return _isAlphaNumericStringLimitedLength(s, len , 1, 8);
  563|  3.07k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_120ultag_getExtlangSizeEPKNS_12ULanguageTagE:
 2445|   143k|ultag_getExtlangSize(const ULanguageTag* langtag) {
 2446|   143k|    int32_t size = 0;
 2447|   143k|    int32_t i;
 2448|   574k|    for (i = 0; i < MAXEXTLANG; i++) {
  ------------------
  |  |   51|   574k|#define MAXEXTLANG 3
  ------------------
  |  Branch (2448:17): [True: 430k, False: 143k]
  ------------------
 2449|   430k|        if (langtag->extlang[i]) {
  ------------------
  |  Branch (2449:13): [True: 6.57k, False: 424k]
  ------------------
 2450|  6.57k|            size++;
 2451|  6.57k|        }
 2452|   430k|    }
 2453|   143k|    return size;
 2454|   143k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_116ultag_getExtlangEPKNS_12ULanguageTagEi:
 2437|  5.22k|ultag_getExtlang(const ULanguageTag* langtag, int32_t idx) {
 2438|  5.22k|    if (idx >= 0 && idx < MAXEXTLANG) {
  ------------------
  |  |   51|  5.22k|#define MAXEXTLANG 3
  ------------------
  |  Branch (2438:9): [True: 5.22k, False: 0]
  |  Branch (2438:21): [True: 5.22k, False: 0]
  ------------------
 2439|  5.22k|        return langtag->extlang[idx];
 2440|  5.22k|    }
 2441|      0|    return nullptr;
 2442|  5.22k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_117ultag_getLanguageEPKNS_12ULanguageTagE:
 2419|   138k|ultag_getLanguage(const ULanguageTag* langtag) {
 2420|   138k|    return langtag->language;
 2421|   138k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_115ultag_getScriptEPKNS_12ULanguageTagE:
 2457|   143k|ultag_getScript(const ULanguageTag* langtag) {
 2458|   143k|    return langtag->script;
 2459|   143k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_115ultag_getRegionEPKNS_12ULanguageTagE:
 2462|   143k|ultag_getRegion(const ULanguageTag* langtag) {
 2463|   143k|    return langtag->region;
 2464|   143k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_113_sortVariantsEPNS_16VariantListEntryE:
 1158|   143k|void _sortVariants(VariantListEntry* first) {
 1159|   148k|    for (VariantListEntry* var1 = first; var1 != nullptr; var1 = var1->next) {
  ------------------
  |  Branch (1159:42): [True: 4.52k, False: 143k]
  ------------------
 1160|  8.09k|        for (VariantListEntry* var2 = var1->next; var2 != nullptr; var2 = var2->next) {
  ------------------
  |  Branch (1160:51): [True: 3.56k, False: 4.52k]
  ------------------
 1161|       |            // Swap var1->variant and var2->variant.
 1162|  3.56k|            if (uprv_compareInvCharsAsAscii(var1->variant, var2->variant) > 0) {
  ------------------
  |  |  153|  3.56k|#   define uprv_compareInvCharsAsAscii(s1, s2) uprv_strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |   38|  3.56k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  |  |  ------------------
  |  |  |  |  |  |  393|  3.56k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1162:17): [True: 1.85k, False: 1.70k]
  ------------------
 1163|  1.85k|                const char* temp = var1->variant;
 1164|  1.85k|                var1->variant = var2->variant;
 1165|  1.85k|                var2->variant = temp;
 1166|  1.85k|            }
 1167|  3.56k|        }
 1168|  4.52k|    }
 1169|   143k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_121ultag_getVariantsSizeEPKNS_12ULanguageTagE:
 2483|   158k|ultag_getVariantsSize(const ULanguageTag* langtag) {
 2484|   158k|    int32_t size = 0;
 2485|   158k|    VariantListEntry *cur = langtag->variants;
 2486|   163k|    while (true) {
  ------------------
  |  Branch (2486:12): [Folded - Ignored]
  ------------------
 2487|   163k|        if (cur == nullptr) {
  ------------------
  |  Branch (2487:13): [True: 158k, False: 5.15k]
  ------------------
 2488|   158k|            break;
 2489|   158k|        }
 2490|  5.15k|        size++;
 2491|  5.15k|        cur = cur->next;
 2492|  5.15k|    }
 2493|   158k|    return size;
 2494|   158k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_116ultag_getVariantEPKNS_12ULanguageTagEi:
 2467|  4.52k|ultag_getVariant(const ULanguageTag* langtag, int32_t idx) {
 2468|  4.52k|    const char *var = nullptr;
 2469|  4.52k|    VariantListEntry *cur = langtag->variants;
 2470|  4.52k|    int32_t i = 0;
 2471|  8.09k|    while (cur) {
  ------------------
  |  Branch (2471:12): [True: 8.09k, False: 0]
  ------------------
 2472|  8.09k|        if (i == idx) {
  ------------------
  |  Branch (2472:13): [True: 4.52k, False: 3.56k]
  ------------------
 2473|  4.52k|            var = cur->variant;
 2474|  4.52k|            break;
 2475|  4.52k|        }
 2476|  3.56k|        cur = cur->next;
 2477|  3.56k|        i++;
 2478|  3.56k|    }
 2479|  4.52k|    return var;
 2480|  4.52k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_123ultag_getExtensionsSizeEPKNS_12ULanguageTagE:
 2529|   162k|ultag_getExtensionsSize(const ULanguageTag* langtag) {
 2530|   162k|    int32_t size = 0;
 2531|   162k|    ExtensionListEntry *cur = langtag->extensions;
 2532|   200k|    while (true) {
  ------------------
  |  Branch (2532:12): [Folded - Ignored]
  ------------------
 2533|   200k|        if (cur == nullptr) {
  ------------------
  |  Branch (2533:13): [True: 162k, False: 38.7k]
  ------------------
 2534|   162k|            break;
 2535|   162k|        }
 2536|  38.7k|        size++;
 2537|  38.7k|        cur = cur->next;
 2538|  38.7k|    }
 2539|   162k|    return size;
 2540|   162k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_119ultag_getPrivateUseEPKNS_12ULanguageTagE:
 2543|   162k|ultag_getPrivateUse(const ULanguageTag* langtag) {
 2544|   162k|    return langtag->privateuse;
 2545|   162k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_115_appendKeywordsEPNS_12ULanguageTagERN6icu_788ByteSinkER10UErrorCode:
 1781|  18.3k|_appendKeywords(ULanguageTag* langtag, icu::ByteSink& sink, UErrorCode& status) {
 1782|  18.3k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1782:9): [True: 0, False: 18.3k]
  ------------------
 1783|       |
 1784|  18.3k|    int32_t i, n;
 1785|  18.3k|    int32_t len;
 1786|  18.3k|    ExtensionListEntry *kwdFirst = nullptr;
 1787|  18.3k|    ExtensionListEntry *kwd;
 1788|  18.3k|    const char *key, *type;
 1789|  18.3k|    icu::MemoryPool<ExtensionListEntry> extPool;
 1790|  18.3k|    icu::MemoryPool<icu::CharString> kwdBuf;
 1791|  18.3k|    bool posixVariant = false;
 1792|       |
 1793|  18.3k|    n = ultag_getExtensionsSize(langtag);
 1794|       |
 1795|       |    /* resolve locale keywords and reordering keys */
 1796|  37.7k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (1796:17): [True: 19.3k, False: 18.3k]
  ------------------
 1797|  19.3k|        key = ultag_getExtensionKey(langtag, i);
 1798|  19.3k|        type = ultag_getExtensionValue(langtag, i);
 1799|  19.3k|        if (*key == LDMLEXT) {
  ------------------
  |  |   67|  19.3k|#define LDMLEXT 'u'
  ------------------
  |  Branch (1799:13): [True: 14.8k, False: 4.54k]
  ------------------
 1800|       |            /* Determine if variants already exists */
 1801|  14.8k|            if (ultag_getVariantsSize(langtag)) {
  ------------------
  |  Branch (1801:17): [True: 553, False: 14.2k]
  ------------------
 1802|    553|                posixVariant = true;
 1803|    553|            }
 1804|       |
 1805|  14.8k|            _appendLDMLExtensionAsKeywords(type, &kwdFirst, extPool, kwdBuf, posixVariant, status);
 1806|  14.8k|            if (U_FAILURE(status)) {
  ------------------
  |  Branch (1806:17): [True: 0, False: 14.8k]
  ------------------
 1807|      0|                break;
 1808|      0|            }
 1809|  14.8k|        } else {
 1810|  4.54k|            kwd = extPool.create();
 1811|  4.54k|            if (kwd == nullptr) {
  ------------------
  |  Branch (1811:17): [True: 0, False: 4.54k]
  ------------------
 1812|      0|                status = U_MEMORY_ALLOCATION_ERROR;
 1813|      0|                break;
 1814|      0|            }
 1815|  4.54k|            kwd->key = key;
 1816|  4.54k|            kwd->value = type;
 1817|  4.54k|            if (!_addExtensionToList(&kwdFirst, kwd, false)) {
  ------------------
  |  Branch (1817:17): [True: 0, False: 4.54k]
  ------------------
 1818|      0|                status = U_ILLEGAL_ARGUMENT_ERROR;
 1819|      0|                break;
 1820|      0|            }
 1821|  4.54k|        }
 1822|  19.3k|    }
 1823|       |
 1824|  18.3k|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (1824:9): [True: 18.3k, False: 0]
  ------------------
 1825|  18.3k|        type = ultag_getPrivateUse(langtag);
 1826|  18.3k|        if (static_cast<int32_t>(uprv_strlen(type)) > 0) {
  ------------------
  |  |   37|  18.3k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  18.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1826:13): [True: 3.01k, False: 15.3k]
  ------------------
 1827|       |            /* add private use as a keyword */
 1828|  3.01k|            kwd = extPool.create();
 1829|  3.01k|            if (kwd == nullptr) {
  ------------------
  |  Branch (1829:17): [True: 0, False: 3.01k]
  ------------------
 1830|      0|                status = U_MEMORY_ALLOCATION_ERROR;
 1831|  3.01k|            } else {
 1832|  3.01k|                kwd->key = PRIVATEUSE_KEY;
 1833|  3.01k|                kwd->value = type;
 1834|  3.01k|                if (!_addExtensionToList(&kwdFirst, kwd, false)) {
  ------------------
  |  Branch (1834:21): [True: 0, False: 3.01k]
  ------------------
 1835|      0|                    status = U_ILLEGAL_ARGUMENT_ERROR;
 1836|      0|                }
 1837|  3.01k|            }
 1838|  3.01k|        }
 1839|  18.3k|    }
 1840|       |
 1841|       |    /* If a POSIX variant was in the extensions, write it out before writing the keywords. */
 1842|       |
 1843|  18.3k|    if (U_SUCCESS(status) && posixVariant) {
  ------------------
  |  Branch (1843:9): [True: 18.3k, False: 0]
  |  Branch (1843:30): [True: 958, False: 17.4k]
  ------------------
 1844|    958|        len = static_cast<int32_t>(uprv_strlen(_POSIX));
  ------------------
  |  |   37|    958|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|    958|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1845|    958|        sink.Append(_POSIX, len);
 1846|    958|    }
 1847|       |
 1848|  18.3k|    if (U_SUCCESS(status) && kwdFirst != nullptr) {
  ------------------
  |  Branch (1848:9): [True: 18.3k, False: 0]
  |  Branch (1848:30): [True: 17.4k, False: 958]
  ------------------
 1849|       |        /* write out the sorted keywords */
 1850|  17.4k|        bool firstValue = true;
 1851|  17.4k|        kwd = kwdFirst;
 1852|  51.3k|        do {
 1853|  51.3k|            if (firstValue) {
  ------------------
  |  Branch (1853:17): [True: 17.4k, False: 33.8k]
  ------------------
 1854|  17.4k|                sink.Append("@", 1);
 1855|  17.4k|                firstValue = false;
 1856|  33.8k|            } else {
 1857|  33.8k|                sink.Append(";", 1);
 1858|  33.8k|            }
 1859|       |
 1860|       |            /* key */
 1861|  51.3k|            len = static_cast<int32_t>(uprv_strlen(kwd->key));
  ------------------
  |  |   37|  51.3k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  51.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1862|  51.3k|            sink.Append(kwd->key, len);
 1863|  51.3k|            sink.Append("=", 1);
 1864|       |
 1865|       |            /* type */
 1866|  51.3k|            len = static_cast<int32_t>(uprv_strlen(kwd->value));
  ------------------
  |  |   37|  51.3k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  51.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1867|  51.3k|            sink.Append(kwd->value, len);
 1868|       |
 1869|  51.3k|            kwd = kwd->next;
 1870|  51.3k|        } while (kwd);
  ------------------
  |  Branch (1870:18): [True: 33.8k, False: 17.4k]
  ------------------
 1871|  17.4k|    }
 1872|  18.3k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_121ultag_getExtensionKeyEPKNS_12ULanguageTagEi:
 2497|  19.3k|ultag_getExtensionKey(const ULanguageTag* langtag, int32_t idx) {
 2498|  19.3k|    const char *key = nullptr;
 2499|  19.3k|    ExtensionListEntry *cur = langtag->extensions;
 2500|  19.3k|    int32_t i = 0;
 2501|  22.9k|    while (cur) {
  ------------------
  |  Branch (2501:12): [True: 22.9k, False: 0]
  ------------------
 2502|  22.9k|        if (i == idx) {
  ------------------
  |  Branch (2502:13): [True: 19.3k, False: 3.58k]
  ------------------
 2503|  19.3k|            key = cur->key;
 2504|  19.3k|            break;
 2505|  19.3k|        }
 2506|  3.58k|        cur = cur->next;
 2507|  3.58k|        i++;
 2508|  3.58k|    }
 2509|  19.3k|    return key;
 2510|  19.3k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_123ultag_getExtensionValueEPKNS_12ULanguageTagEi:
 2513|  19.3k|ultag_getExtensionValue(const ULanguageTag* langtag, int32_t idx) {
 2514|  19.3k|    const char *val = nullptr;
 2515|  19.3k|    ExtensionListEntry *cur = langtag->extensions;
 2516|  19.3k|    int32_t i = 0;
 2517|  22.9k|    while (cur) {
  ------------------
  |  Branch (2517:12): [True: 22.9k, False: 0]
  ------------------
 2518|  22.9k|        if (i == idx) {
  ------------------
  |  Branch (2518:13): [True: 19.3k, False: 3.58k]
  ------------------
 2519|  19.3k|            val = cur->value;
 2520|  19.3k|            break;
 2521|  19.3k|        }
 2522|  3.58k|        cur = cur->next;
 2523|  3.58k|        i++;
 2524|  3.58k|    }
 2525|  19.3k|    return val;
 2526|  19.3k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_130_appendLDMLExtensionAsKeywordsEPKcPPNS_18ExtensionListEntryERN6icu_7810MemoryPoolIS2_Li8EEERNS6_INS5_10CharStringELi8EEERbR10UErrorCode:
 1523|  14.8k|_appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendTo, icu::MemoryPool<ExtensionListEntry>& extPool, icu::MemoryPool<icu::CharString>& kwdBuf, bool& posixVariant, UErrorCode& status) {
 1524|  14.8k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1524:9): [True: 0, False: 14.8k]
  ------------------
 1525|       |
 1526|  14.8k|    const char *pTag;   /* beginning of current subtag */
 1527|  14.8k|    const char *pKwds;  /* beginning of key-type pairs */
 1528|  14.8k|    bool variantExists = posixVariant;
 1529|       |
 1530|  14.8k|    ExtensionListEntry *kwdFirst = nullptr;    /* first LDML keyword */
 1531|  14.8k|    ExtensionListEntry *kwd, *nextKwd;
 1532|       |
 1533|  14.8k|    int32_t len;
 1534|       |
 1535|       |    /* Reset the posixVariant value */
 1536|  14.8k|    posixVariant = false;
 1537|       |
 1538|  14.8k|    pTag = ldmlext;
 1539|  14.8k|    pKwds = nullptr;
 1540|       |
 1541|  14.8k|    {
 1542|  14.8k|        AttributeListEntry *attrFirst = nullptr;   /* first attribute */
 1543|  14.8k|        AttributeListEntry *attr, *nextAttr;
 1544|       |
 1545|  14.8k|        icu::MemoryPool<icu::CharString> strPool;
 1546|  14.8k|        icu::MemoryPool<AttributeListEntry> attrPool;
 1547|       |
 1548|       |        /* Iterate through u extension attributes */
 1549|   864k|        while (*pTag) {
  ------------------
  |  Branch (1549:16): [True: 862k, False: 2.14k]
  ------------------
 1550|       |            /* locate next separator char */
 1551|  3.67M|            for (len = 0; *(pTag + len) && *(pTag + len) != SEP; len++);
  ------------------
  |  |   65|  3.67M|#define SEP '-'
  ------------------
  |  Branch (1551:27): [True: 3.67M, False: 4.91k]
  |  Branch (1551:44): [True: 2.81M, False: 857k]
  ------------------
 1552|       |
 1553|   862k|            if (ultag_isUnicodeLocaleKey(pTag, len)) {
  ------------------
  |  | 1233|   862k|#define ultag_isUnicodeLocaleKey U_ICU_ENTRY_POINT_RENAME(ultag_isUnicodeLocaleKey)
  |  |  ------------------
  |  |  |  |  123|   862k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   862k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   862k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1553:17): [True: 12.6k, False: 850k]
  ------------------
 1554|  12.6k|                pKwds = pTag;
 1555|  12.6k|                break;
 1556|  12.6k|            }
 1557|       |
 1558|       |            /* add this attribute to the list */
 1559|   850k|            attr = attrPool.create();
 1560|   850k|            if (attr == nullptr) {
  ------------------
  |  Branch (1560:17): [True: 0, False: 850k]
  ------------------
 1561|      0|                status = U_MEMORY_ALLOCATION_ERROR;
 1562|      0|                return;
 1563|      0|            }
 1564|       |
 1565|   850k|            if (icu::CharString* str = strPool.create(pTag, len, status)) {
  ------------------
  |  Branch (1565:34): [True: 850k, False: 0]
  ------------------
 1566|   850k|                if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1566:21): [True: 0, False: 850k]
  ------------------
 1567|   850k|                attr->attribute = str->data();
 1568|   850k|            } else {
 1569|      0|                status = U_MEMORY_ALLOCATION_ERROR;
 1570|      0|                return;
 1571|      0|            }
 1572|       |
 1573|       |            // duplicate attribute is ignored, causes no error.
 1574|   850k|            _addAttributeToList(&attrFirst, attr);
 1575|       |
 1576|       |            /* next tag */
 1577|   850k|            pTag += len;
 1578|   850k|            if (*pTag) {
  ------------------
  |  Branch (1578:17): [True: 847k, False: 2.14k]
  ------------------
 1579|       |                /* next to the separator */
 1580|   847k|                pTag++;
 1581|   847k|            }
 1582|   850k|        }
 1583|       |
 1584|  14.8k|        if (attrFirst) {
  ------------------
  |  Branch (1584:13): [True: 4.48k, False: 10.3k]
  ------------------
 1585|       |            /* emit attributes as an LDML keyword, e.g. attribute=attr1-attr2 */
 1586|       |
 1587|  4.48k|            kwd = extPool.create();
 1588|  4.48k|            if (kwd == nullptr) {
  ------------------
  |  Branch (1588:17): [True: 0, False: 4.48k]
  ------------------
 1589|      0|                status = U_MEMORY_ALLOCATION_ERROR;
 1590|      0|                return;
 1591|      0|            }
 1592|       |
 1593|  4.48k|            icu::CharString* value = kwdBuf.create();
 1594|  4.48k|            if (value == nullptr) {
  ------------------
  |  Branch (1594:17): [True: 0, False: 4.48k]
  ------------------
 1595|      0|                status = U_MEMORY_ALLOCATION_ERROR;
 1596|      0|                return;
 1597|      0|            }
 1598|       |
 1599|       |            /* attribute subtags sorted in alphabetical order as type */
 1600|  4.48k|            attr = attrFirst;
 1601|  17.9k|            while (attr != nullptr) {
  ------------------
  |  Branch (1601:20): [True: 13.4k, False: 4.48k]
  ------------------
 1602|  13.4k|                nextAttr = attr->next;
 1603|  13.4k|                if (attr != attrFirst) {
  ------------------
  |  Branch (1603:21): [True: 8.94k, False: 4.48k]
  ------------------
 1604|  8.94k|                    value->append('-', status);
 1605|  8.94k|                }
 1606|  13.4k|                value->append(attr->attribute, status);
 1607|  13.4k|                attr = nextAttr;
 1608|  13.4k|            }
 1609|  4.48k|            if (U_FAILURE(status)) {
  ------------------
  |  Branch (1609:17): [True: 0, False: 4.48k]
  ------------------
 1610|      0|                return;
 1611|      0|            }
 1612|       |
 1613|  4.48k|            kwd->key = LOCALE_ATTRIBUTE_KEY;
 1614|  4.48k|            kwd->value = value->data();
 1615|       |
 1616|  4.48k|            if (!_addExtensionToList(&kwdFirst, kwd, false)) {
  ------------------
  |  Branch (1616:17): [True: 0, False: 4.48k]
  ------------------
 1617|      0|                status = U_ILLEGAL_ARGUMENT_ERROR;
 1618|      0|                return;
 1619|      0|            }
 1620|  4.48k|        }
 1621|  14.8k|    }
 1622|       |
 1623|  14.8k|    if (pKwds) {
  ------------------
  |  Branch (1623:9): [True: 12.6k, False: 2.14k]
  ------------------
 1624|  12.6k|        const char *pBcpKey = nullptr;     /* u extension key subtag */
 1625|  12.6k|        const char *pBcpType = nullptr;    /* beginning of u extension type subtag(s) */
 1626|  12.6k|        int32_t bcpKeyLen = 0;
 1627|  12.6k|        int32_t bcpTypeLen = 0;
 1628|  12.6k|        bool isDone = false;
 1629|       |
 1630|  12.6k|        pTag = pKwds;
 1631|       |        /* BCP47 representation of LDML key/type pairs */
 1632|  2.05M|        while (!isDone) {
  ------------------
  |  Branch (1632:16): [True: 2.04M, False: 12.6k]
  ------------------
 1633|  2.04M|            const char *pNextBcpKey = nullptr;
 1634|  2.04M|            int32_t nextBcpKeyLen = 0;
 1635|  2.04M|            bool emitKeyword = false;
 1636|       |
 1637|  2.04M|            if (*pTag) {
  ------------------
  |  Branch (1637:17): [True: 2.03M, False: 12.6k]
  ------------------
 1638|       |                /* locate next separator char */
 1639|  6.82M|                for (len = 0; *(pTag + len) && *(pTag + len) != SEP; len++);
  ------------------
  |  |   65|  6.81M|#define SEP '-'
  ------------------
  |  Branch (1639:31): [True: 6.81M, False: 12.6k]
  |  Branch (1639:48): [True: 4.79M, False: 2.01M]
  ------------------
 1640|       |
 1641|  2.03M|                if (ultag_isUnicodeLocaleKey(pTag, len)) {
  ------------------
  |  | 1233|  2.03M|#define ultag_isUnicodeLocaleKey U_ICU_ENTRY_POINT_RENAME(ultag_isUnicodeLocaleKey)
  |  |  ------------------
  |  |  |  |  123|  2.03M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.03M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.03M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1641:21): [True: 1.40M, False: 626k]
  ------------------
 1642|  1.40M|                    if (pBcpKey) {
  ------------------
  |  Branch (1642:25): [True: 1.39M, False: 12.6k]
  ------------------
 1643|  1.39M|                        emitKeyword = true;
 1644|  1.39M|                        pNextBcpKey = pTag;
 1645|  1.39M|                        nextBcpKeyLen = len;
 1646|  1.39M|                    } else {
 1647|  12.6k|                        pBcpKey = pTag;
 1648|  12.6k|                        bcpKeyLen = len;
 1649|  12.6k|                    }
 1650|  1.40M|                } else {
 1651|   626k|                    U_ASSERT(pBcpKey != nullptr);
  ------------------
  |  |   35|   626k|#   define U_ASSERT(exp) (void)0
  ------------------
 1652|       |                    /* within LDML type subtags */
 1653|   626k|                    if (pBcpType) {
  ------------------
  |  Branch (1653:25): [True: 605k, False: 21.1k]
  ------------------
 1654|   605k|                        bcpTypeLen += (len + 1);
 1655|   605k|                    } else {
 1656|  21.1k|                        pBcpType = pTag;
 1657|  21.1k|                        bcpTypeLen = len;
 1658|  21.1k|                    }
 1659|   626k|                }
 1660|       |
 1661|       |                /* next tag */
 1662|  2.03M|                pTag += len;
 1663|  2.03M|                if (*pTag) {
  ------------------
  |  Branch (1663:21): [True: 2.01M, False: 12.6k]
  ------------------
 1664|       |                    /* next to the separator */
 1665|  2.01M|                    pTag++;
 1666|  2.01M|                }
 1667|  2.03M|            } else {
 1668|       |                /* processing last one */
 1669|  12.6k|                emitKeyword = true;
 1670|  12.6k|                isDone = true;
 1671|  12.6k|            }
 1672|       |
 1673|  2.04M|            if (emitKeyword) {
  ------------------
  |  Branch (1673:17): [True: 1.40M, False: 639k]
  ------------------
 1674|  1.40M|                const char *pKey = nullptr;    /* LDML key */
 1675|  1.40M|                const char *pType = nullptr;   /* LDML type */
 1676|       |
 1677|  1.40M|                U_ASSERT(pBcpKey != nullptr);
  ------------------
  |  |   35|  1.40M|#   define U_ASSERT(exp) (void)0
  ------------------
 1678|       |
 1679|       |                /* BCP key length is always 2 for now */
 1680|  1.40M|                if (bcpKeyLen != 2) {
  ------------------
  |  Branch (1680:21): [True: 0, False: 1.40M]
  ------------------
 1681|       |                    /* the BCP key is invalid */
 1682|      0|                    status = U_ILLEGAL_ARGUMENT_ERROR;
 1683|      0|                    return;
 1684|      0|                }
 1685|       |
 1686|       |                /* u extension key to LDML key */
 1687|  1.40M|                std::optional<std::string_view> legacyKey = ulocimp_toLegacyKeyWithFallback(
  ------------------
  |  | 1220|  1.40M|#define ulocimp_toLegacyKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ulocimp_toLegacyKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|  1.40M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.40M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.40M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1688|  1.40M|                    {pBcpKey, static_cast<std::string_view::size_type>(bcpKeyLen)});
 1689|  1.40M|                if (!legacyKey.has_value()) {
  ------------------
  |  Branch (1689:21): [True: 0, False: 1.40M]
  ------------------
 1690|      0|                    status = U_ILLEGAL_ARGUMENT_ERROR;
 1691|      0|                    return;
 1692|      0|                }
 1693|  1.40M|                if (legacyKey->data() == pBcpKey) {
  ------------------
  |  Branch (1693:21): [True: 1.31M, False: 90.7k]
  ------------------
 1694|       |                    /*
 1695|       |                    The key returned by toLegacyKey points to the input buffer.
 1696|       |                    We normalize the result key to lower case.
 1697|       |                    */
 1698|  1.31M|                    icu::CharString* key = kwdBuf.create(pBcpKey, bcpKeyLen, status);
 1699|  1.31M|                    if (key == nullptr) {
  ------------------
  |  Branch (1699:25): [True: 0, False: 1.31M]
  ------------------
 1700|      0|                        status = U_MEMORY_ALLOCATION_ERROR;
 1701|      0|                        return;
 1702|      0|                    }
 1703|  1.31M|                    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1703:25): [True: 0, False: 1.31M]
  ------------------
 1704|      0|                        return;
 1705|      0|                    }
 1706|  1.31M|                    T_CString_toLowerCase(key->data());
  ------------------
  |  |   69|  1.31M|#define T_CString_toLowerCase U_ICU_ENTRY_POINT_RENAME(T_CString_toLowerCase)
  |  |  ------------------
  |  |  |  |  123|  1.31M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.31M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.31M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1707|  1.31M|                    pKey = key->data();
 1708|  1.31M|                } else {
 1709|  90.7k|                    pKey = legacyKey->data();
 1710|  90.7k|                }
 1711|       |
 1712|  1.40M|                if (pBcpType) {
  ------------------
  |  Branch (1712:21): [True: 21.1k, False: 1.38M]
  ------------------
 1713|       |                    /* BCP type to locale type */
 1714|  21.1k|                    std::optional<std::string_view> legacyType = ulocimp_toLegacyTypeWithFallback(
  ------------------
  |  | 1222|  21.1k|#define ulocimp_toLegacyTypeWithFallback U_ICU_ENTRY_POINT_RENAME(ulocimp_toLegacyTypeWithFallback)
  |  |  ------------------
  |  |  |  |  123|  21.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  21.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  21.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1715|  21.1k|                        pKey, {pBcpType, static_cast<std::string_view::size_type>(bcpTypeLen)});
 1716|  21.1k|                    if (!legacyType.has_value()) {
  ------------------
  |  Branch (1716:25): [True: 0, False: 21.1k]
  ------------------
 1717|      0|                        status = U_ILLEGAL_ARGUMENT_ERROR;
 1718|      0|                        return;
 1719|      0|                    }
 1720|  21.1k|                    if (legacyType->data() == pBcpType) {
  ------------------
  |  Branch (1720:25): [True: 20.1k, False: 1.00k]
  ------------------
 1721|       |                        /*
 1722|       |                        The type returned by toLegacyType points to the input buffer.
 1723|       |                        We normalize the result type to lower case.
 1724|       |                        */
 1725|  20.1k|                        icu::CharString* type = kwdBuf.create(pBcpType, bcpTypeLen, status);
 1726|  20.1k|                        if (type == nullptr) {
  ------------------
  |  Branch (1726:29): [True: 0, False: 20.1k]
  ------------------
 1727|      0|                            status = U_MEMORY_ALLOCATION_ERROR;
 1728|      0|                            return;
 1729|      0|                        }
 1730|  20.1k|                        if (U_FAILURE(status)) {
  ------------------
  |  Branch (1730:29): [True: 0, False: 20.1k]
  ------------------
 1731|      0|                            return;
 1732|      0|                        }
 1733|  20.1k|                        T_CString_toLowerCase(type->data());
  ------------------
  |  |   69|  20.1k|#define T_CString_toLowerCase U_ICU_ENTRY_POINT_RENAME(T_CString_toLowerCase)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1734|  20.1k|                        pType = type->data();
 1735|  20.1k|                    } else {
 1736|  1.00k|                        pType = legacyType->data();
 1737|  1.00k|                    }
 1738|  1.38M|                } else {
 1739|       |                    /* typeless - default type value is "yes" */
 1740|  1.38M|                    pType = LOCALE_TYPE_YES;
 1741|  1.38M|                }
 1742|       |
 1743|       |                /* Special handling for u-va-posix, since we want to treat this as a variant, 
 1744|       |                   not as a keyword */
 1745|  1.40M|                if (!variantExists && !uprv_strcmp(pKey, POSIX_KEY) && !uprv_strcmp(pType, POSIX_VALUE) ) {
  ------------------
  |  |   38|  1.40M|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  1.40M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
                              if (!variantExists && !uprv_strcmp(pKey, POSIX_KEY) && !uprv_strcmp(pType, POSIX_VALUE) ) {
  ------------------
  |  |   38|  1.47k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  1.47k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1745:21): [True: 1.40M, False: 1.05k]
  |  Branch (1745:39): [True: 1.47k, False: 1.40M]
  |  Branch (1745:72): [True: 958, False: 518]
  ------------------
 1746|    958|                    posixVariant = true;
 1747|  1.40M|                } else {
 1748|       |                    /* create an ExtensionListEntry for this keyword */
 1749|  1.40M|                    kwd = extPool.create();
 1750|  1.40M|                    if (kwd == nullptr) {
  ------------------
  |  Branch (1750:25): [True: 0, False: 1.40M]
  ------------------
 1751|      0|                        status = U_MEMORY_ALLOCATION_ERROR;
 1752|      0|                        return;
 1753|      0|                    }
 1754|       |
 1755|  1.40M|                    kwd->key = pKey;
 1756|  1.40M|                    kwd->value = pType;
 1757|       |
 1758|  1.40M|                    if (!_addExtensionToList(&kwdFirst, kwd, false)) {
  ------------------
  |  Branch (1758:25): [True: 1.36M, False: 39.2k]
  ------------------
 1759|       |                        // duplicate keyword is allowed, Only the first
 1760|       |                        // is honored.
 1761|  1.36M|                    }
 1762|  1.40M|                }
 1763|       |
 1764|  1.40M|                pBcpKey = pNextBcpKey;
 1765|  1.40M|                bcpKeyLen = pNextBcpKey != nullptr ? nextBcpKeyLen : 0;
  ------------------
  |  Branch (1765:29): [True: 1.39M, False: 12.6k]
  ------------------
 1766|  1.40M|                pBcpType = nullptr;
 1767|  1.40M|                bcpTypeLen = 0;
 1768|  1.40M|            }
 1769|  2.04M|        }
 1770|  12.6k|    }
 1771|       |
 1772|  14.8k|    kwd = kwdFirst;
 1773|  58.5k|    while (kwd != nullptr) {
  ------------------
  |  Branch (1773:12): [True: 43.7k, False: 14.8k]
  ------------------
 1774|  43.7k|        nextKwd = kwd->next;
 1775|  43.7k|        _addExtensionToList(appendTo, kwd, false);
 1776|  43.7k|        kwd = nextKwd;
 1777|  43.7k|    }
 1778|  14.8k|}
uloc_tag.cpp:_ZN12_GLOBAL__N_111ultag_closeEPNS_12ULanguageTagE:
 2389|   143k|ultag_close(ULanguageTag* langtag) {
 2390|       |
 2391|   143k|    if (langtag == nullptr) {
  ------------------
  |  Branch (2391:9): [True: 0, False: 143k]
  ------------------
 2392|      0|        return;
 2393|      0|    }
 2394|       |
 2395|   143k|    uprv_free(langtag->buf);
  ------------------
  |  | 1503|   143k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|   143k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   143k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   143k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2396|       |
 2397|   143k|    if (langtag->variants) {
  ------------------
  |  Branch (2397:9): [True: 2.71k, False: 140k]
  ------------------
 2398|  2.71k|        VariantListEntry *curVar = langtag->variants;
 2399|  7.24k|        while (curVar) {
  ------------------
  |  Branch (2399:16): [True: 4.52k, False: 2.71k]
  ------------------
 2400|  4.52k|            VariantListEntry *nextVar = curVar->next;
 2401|  4.52k|            delete curVar;
 2402|  4.52k|            curVar = nextVar;
 2403|  4.52k|        }
 2404|  2.71k|    }
 2405|       |
 2406|   143k|    if (langtag->extensions) {
  ------------------
  |  Branch (2406:9): [True: 16.8k, False: 126k]
  ------------------
 2407|  16.8k|        ExtensionListEntry *curExt = langtag->extensions;
 2408|  36.1k|        while (curExt) {
  ------------------
  |  Branch (2408:16): [True: 19.3k, False: 16.8k]
  ------------------
 2409|  19.3k|            ExtensionListEntry *nextExt = curExt->next;
 2410|  19.3k|            delete curExt;
 2411|  19.3k|            curExt = nextExt;
 2412|  19.3k|        }
 2413|  16.8k|    }
 2414|       |
 2415|   143k|    uprv_free(langtag);
  ------------------
  |  | 1503|   143k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|   143k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   143k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   143k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2416|   143k|}
uloc_tag.cpp:_ZZ25ulocimp_forLanguageTag_78PKciPiR10UErrorCodeENK3$_0clERN6icu_788ByteSinkES3_:
 2677|   143k|        [&](icu::ByteSink& sink, UErrorCode& status) {
 2678|   143k|            ulocimp_forLanguageTag(langtag, tagLen, sink, parsedLength, status);
  ------------------
  |  | 1198|   143k|#define ulocimp_forLanguageTag U_ICU_ENTRY_POINT_RENAME(ulocimp_forLanguageTag)
  |  |  ------------------
  |  |  |  |  123|   143k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   143k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   143k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2679|   143k|        },

loclikely.cpp:_ZN12_GLOBAL__N_114_isIDSeparatorEc:
   49|   142k|inline bool _isIDSeparator(char a) { return a == '_' || a == '-'; }
  ------------------
  |  Branch (49:45): [True: 73.7k, False: 68.9k]
  |  Branch (49:57): [True: 1.25k, False: 67.6k]
  ------------------
uloc.cpp:_ZN12_GLOBAL__N_114_isIDSeparatorEc:
   49|  8.26M|inline bool _isIDSeparator(char a) { return a == '_' || a == '-'; }
  ------------------
  |  Branch (49:45): [True: 3.33M, False: 4.92M]
  |  Branch (49:57): [True: 150k, False: 4.77M]
  ------------------

uprv_max_78:
   17|   547k|{
   18|   547k|    return (x > y ? x : y);
  ------------------
  |  Branch (18:13): [True: 27.1k, False: 519k]
  ------------------
   19|   547k|}
uprv_min_78:
   23|  3.35M|{
   24|  3.35M|    return (x > y ? y : x);
  ------------------
  |  Branch (24:13): [True: 6, False: 3.35M]
  ------------------
   25|  3.35M|}

_ZN6icu_786UMutex8getMutexEv:
   80|      6|std::mutex *UMutex::getMutex() {
   81|      6|    std::mutex *retPtr = fMutex.load(std::memory_order_acquire);
   82|      6|    if (retPtr == nullptr) {
  ------------------
  |  Branch (82:9): [True: 6, False: 0]
  ------------------
   83|      6|        std::call_once(*pInitFlag, umtx_init);
   84|      6|        std::lock_guard<std::mutex> guard(*initMutex);
   85|      6|        retPtr = fMutex.load(std::memory_order_acquire);
   86|      6|        if (retPtr == nullptr) {
  ------------------
  |  Branch (86:13): [True: 6, False: 0]
  ------------------
   87|      6|            fMutex = new(fStorage) std::mutex();
   88|      6|            retPtr = fMutex;
   89|      6|            fListLink = gListHead;
   90|      6|            gListHead = this;
   91|      6|        }
   92|      6|    }
   93|      6|    U_ASSERT(retPtr != nullptr);
  ------------------
  |  |   35|      6|#   define U_ASSERT(exp) (void)0
  ------------------
   94|      6|    return retPtr;
   95|      6|}
umtx_lock_78:
  112|  4.62M|umtx_lock(UMutex *mutex) {
  113|  4.62M|    if (mutex == nullptr) {
  ------------------
  |  Branch (113:9): [True: 171k, False: 4.44M]
  ------------------
  114|   171k|        mutex = &globalMutex;
  115|   171k|    }
  116|  4.62M|    mutex->lock();
  117|  4.62M|}
umtx_unlock_78:
  122|  4.62M|{
  123|  4.62M|    if (mutex == nullptr) {
  ------------------
  |  Branch (123:9): [True: 171k, False: 4.44M]
  ------------------
  124|   171k|        mutex = &globalMutex;
  125|   171k|    }
  126|  4.62M|    mutex->unlock();
  127|  4.62M|}
_ZN6icu_7820umtx_initImplPreInitERNS_9UInitOnceE:
  145|     16|umtx_initImplPreInit(UInitOnce &uio) {
  146|     16|    std::call_once(*pInitFlag, umtx_init);
  147|     16|    std::unique_lock<std::mutex> lock(*initMutex);
  148|     16|    if (umtx_loadAcquire(uio.fState) == 0) {
  ------------------
  |  Branch (148:9): [True: 16, False: 0]
  ------------------
  149|     16|        umtx_storeRelease(uio.fState, 1);
  150|     16|        return true;      // Caller will next call the init function.
  151|     16|    } 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|     16|}
_ZN6icu_7821umtx_initImplPostInitERNS_9UInitOnceE:
  170|     16|umtx_initImplPostInit(UInitOnce &uio) {
  171|     16|    {
  172|     16|        std::unique_lock<std::mutex> lock(*initMutex);
  173|     16|        umtx_storeRelease(uio.fState, 2);
  174|     16|    }
  175|     16|    initCondition->notify_all();
  176|     16|}
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_7813umtx_initOnceERNS_9UInitOnceEPFvR10UErrorCodeES3_:
  135|  1.89M|inline void umtx_initOnce(UInitOnce &uio, void (U_CALLCONV *fp)(UErrorCode &), UErrorCode &errCode) {
  136|  1.89M|    if (U_FAILURE(errCode)) {
  ------------------
  |  Branch (136:9): [True: 1.05k, False: 1.88M]
  ------------------
  137|  1.05k|        return;
  138|  1.05k|    }
  139|  1.88M|    if (umtx_loadAcquire(uio.fState) != 2 && umtx_initImplPreInit(uio)) {
  ------------------
  |  Branch (139:9): [True: 12, False: 1.88M]
  |  Branch (139:46): [True: 12, False: 0]
  ------------------
  140|       |        // We run the initialization.
  141|     12|        (*fp)(errCode);
  142|     12|        uio.fErrCode = errCode;
  143|     12|        umtx_initImplPostInit(uio);
  144|  1.88M|    } else {
  145|       |        // Someone else already ran the initialization.
  146|  1.88M|        if (U_FAILURE(uio.fErrCode)) {
  ------------------
  |  Branch (146:13): [True: 0, False: 1.88M]
  ------------------
  147|      0|            errCode = uio.fErrCode;
  148|      0|        }
  149|  1.88M|    }
  150|  1.88M|}
_ZN6icu_7816umtx_loadAcquireERNSt3__16atomicIiEE:
   75|  84.2M|inline int32_t umtx_loadAcquire(u_atomic_int32_t &var) {
   76|  84.2M|    return var.load(std::memory_order_acquire);
   77|  84.2M|}
_ZN6icu_789UInitOnce5resetEv:
  101|  13.0k|    void reset() {fState = 0;}
_ZN6icu_789UInitOnce7isResetEv:
  102|  7.16k|    UBool isReset() {return umtx_loadAcquire(fState) == 0;}
_ZN6icu_786UMutex4lockEv:
  229|  4.62M|    void lock() {
  230|  4.62M|        std::mutex *m = fMutex.load(std::memory_order_acquire);
  231|  4.62M|        if (m == nullptr) { m = getMutex(); }
  ------------------
  |  Branch (231:13): [True: 6, False: 4.62M]
  ------------------
  232|  4.62M|        m->lock();
  233|  4.62M|    }
_ZN6icu_786UMutex6unlockEv:
  234|  4.62M|    void unlock() { fMutex.load(std::memory_order_relaxed)->unlock(); }
_ZN6icu_7817umtx_storeReleaseERNSt3__16atomicIiEEi:
   79|     33|inline void umtx_storeRelease(u_atomic_int32_t &var, int32_t val) {
   80|     33|    var.store(val, std::memory_order_release);
   81|     33|}
_ZN6icu_7815umtx_atomic_incEPNSt3__16atomicIiEE:
   83|  42.6k|inline int32_t umtx_atomic_inc(u_atomic_int32_t *var) {
   84|  42.6k|    return var->fetch_add(1) + 1;
   85|  42.6k|}
_ZN6icu_7815umtx_atomic_decEPNSt3__16atomicIiEE:
   87|  75.6k|inline int32_t umtx_atomic_dec(u_atomic_int32_t *var) {
   88|  75.6k|    return var->fetch_sub(1) - 1;
   89|  75.6k|}
_ZN6icu_7813umtx_initOnceERNS_9UInitOnceEPFvvE:
  123|  68.3k|inline void umtx_initOnce(UInitOnce &uio, void (U_CALLCONV *fp)()) {
  124|  68.3k|    if (umtx_loadAcquire(uio.fState) == 2) {
  ------------------
  |  Branch (124:9): [True: 68.3k, False: 4]
  ------------------
  125|  68.3k|        return;
  126|  68.3k|    }
  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_788ByteSinkC2Ev:
   59|  4.02M|  ByteSink() { }
_ZNK6icu_7820CheckedArrayByteSink10OverflowedEv:
  240|   111k|  UBool Overflowed() const { return overflowed_; }
_ZNK6icu_7820CheckedArrayByteSink21NumberOfBytesAppendedEv:
  248|   486k|  int32_t NumberOfBytesAppended() const { return appended_; }

_ZN6icu_789BytesTrieC2EPKv:
   72|      1|            : ownedArray_(nullptr), bytes_(static_cast<const uint8_t *>(trieBytes)),
   73|      1|              pos_(bytes_), remainingMatchLength_(-1) {}
_ZN6icu_789BytesTrieC2ERKS0_:
   88|  32.9k|            : ownedArray_(nullptr), bytes_(other.bytes_),
   89|  32.9k|              pos_(other.pos_), remainingMatchLength_(other.remainingMatchLength_) {}
_ZN6icu_789BytesTrie5resetEv:
   96|     27|    BytesTrie &reset() {
   97|     27|        pos_=bytes_;
   98|     27|        remainingMatchLength_=-1;
   99|     27|        return *this;
  100|     27|    }
_ZNK6icu_789BytesTrie10getState64Ev:
  110|  46.4k|    uint64_t getState64() const {
  111|  46.4k|        return (static_cast<uint64_t>(remainingMatchLength_ + 2) << kState64RemainingShift) |
  112|  46.4k|            static_cast<uint64_t>(pos_ - bytes_);
  113|  46.4k|    }
_ZN6icu_789BytesTrie14resetToState64Em:
  129|  30.5k|    BytesTrie &resetToState64(uint64_t state) {
  130|  30.5k|        remainingMatchLength_ = static_cast<int32_t>(state >> kState64RemainingShift) - 2;
  131|  30.5k|        pos_ = bytes_ + (state & kState64PosMask);
  132|  30.5k|        return *this;
  133|  30.5k|    }
_ZNK6icu_789BytesTrie8getValueEv:
  246|  32.9k|    inline int32_t getValue() const {
  247|  32.9k|        const uint8_t *pos=pos_;
  248|  32.9k|        int32_t leadByte=*pos++;
  249|       |        // U_ASSERT(leadByte>=kMinValueLead);
  250|  32.9k|        return readValue(pos, leadByte>>1);
  251|  32.9k|    }
_ZN6icu_789BytesTrie4stopEv:
  399|  8.86k|    inline void stop() {
  400|  8.86k|        pos_=nullptr;
  401|  8.86k|    }
_ZN6icu_789BytesTrie9skipValueEPKhi:
  406|  73.8k|    static inline const uint8_t *skipValue(const uint8_t *pos, int32_t leadByte) {
  407|       |        // U_ASSERT(leadByte>=kMinValueLead);
  408|  73.8k|        if(leadByte>=(kMinTwoByteValueLead<<1)) {
  ------------------
  |  Branch (408:12): [True: 56.4k, False: 17.4k]
  ------------------
  409|  56.4k|            if(leadByte<(kMinThreeByteValueLead<<1)) {
  ------------------
  |  Branch (409:16): [True: 54.2k, False: 2.24k]
  ------------------
  410|  54.2k|                ++pos;
  411|  54.2k|            } else if(leadByte<(kFourByteValueLead<<1)) {
  ------------------
  |  Branch (411:23): [True: 2.24k, False: 0]
  ------------------
  412|  2.24k|                pos+=2;
  413|  2.24k|            } else {
  414|      0|                pos+=3+((leadByte>>1)&1);
  415|      0|            }
  416|  56.4k|        }
  417|  73.8k|        return pos;
  418|  73.8k|    }
_ZN6icu_789BytesTrie9skipValueEPKh:
  419|  73.3k|    static inline const uint8_t *skipValue(const uint8_t *pos) {
  420|  73.3k|        int32_t leadByte=*pos++;
  421|  73.3k|        return skipValue(pos, leadByte);
  422|  73.3k|    }
_ZN6icu_789BytesTrie9skipDeltaEPKh:
  427|  61.6k|    static inline const uint8_t *skipDelta(const uint8_t *pos) {
  428|  61.6k|        int32_t delta=*pos++;
  429|  61.6k|        if(delta>=kMinTwoByteDeltaLead) {
  ------------------
  |  Branch (429:12): [True: 24.9k, False: 36.7k]
  ------------------
  430|  24.9k|            if(delta<kMinThreeByteDeltaLead) {
  ------------------
  |  Branch (430:16): [True: 22.1k, False: 2.73k]
  ------------------
  431|  22.1k|                ++pos;
  432|  22.1k|            } else if(delta<kFourByteDeltaLead) {
  ------------------
  |  Branch (432:23): [True: 2.73k, False: 0]
  ------------------
  433|  2.73k|                pos+=2;
  434|  2.73k|            } else {
  435|      0|                pos+=3+(delta&1);
  436|      0|            }
  437|  24.9k|        }
  438|  61.6k|        return pos;
  439|  61.6k|    }
_ZN6icu_789BytesTrie11valueResultEi:
  441|  4.85k|    static inline UStringTrieResult valueResult(int32_t node) {
  442|  4.85k|        return static_cast<UStringTrieResult>(USTRINGTRIE_INTERMEDIATE_VALUE - (node & kValueIsFinal));
  443|  4.85k|    }

_ZN6icu_7814ConstChar16PtrC2EPKDs:
  229|  2.98M|ConstChar16Ptr::ConstChar16Ptr(const char16_t *p) : p_(p) {}
_ZN6icu_7814ConstChar16PtrD2Ev:
  237|  2.98M|ConstChar16Ptr::~ConstChar16Ptr() {
  238|  2.98M|    U_ALIASING_BARRIER(p_);
  ------------------
  |  |   35|  2.98M|#   define U_ALIASING_BARRIER(ptr) asm volatile("" : : "rm"(ptr) : "memory")
  ------------------
  239|  2.98M|}
_ZNK6icu_789Char16PtrcvPDsEv:
   97|    812|    inline operator char16_t *() const { return get(); }
_ZNK6icu_7814ConstChar16PtrcvPKDsEv:
  205|  2.98M|    inline operator const char16_t *() const { return get(); }
_ZNK6icu_789Char16Ptr3getEv:
  133|    812|char16_t *Char16Ptr::get() const { return p_; }
_ZNK6icu_7814ConstChar16Ptr3getEv:
  241|  2.98M|const char16_t *ConstChar16Ptr::get() const { return p_; }
_ZN6icu_788internal15toU16StringViewENSt3__117basic_string_viewIDsNS1_11char_traitsIDsEEEE:
  400|    252|inline std::u16string_view toU16StringView(std::u16string_view sv) { return sv; }
_ZN6icu_789Char16PtrC2EPDs:
  121|    203|Char16Ptr::Char16Ptr(char16_t *p) : p_(p) {}
_ZN6icu_789Char16PtrD2Ev:
  129|    203|Char16Ptr::~Char16Ptr() {
  130|    203|    U_ALIASING_BARRIER(p_);
  ------------------
  |  |   35|    203|#   define U_ALIASING_BARRIER(ptr) asm volatile("" : : "rm"(ptr) : "memory")
  ------------------
  131|    203|}
_ZN6icu_788internal23toU16StringViewNullableIA6_DsvEENSt3__117basic_string_viewIDsNS3_11char_traitsIDsEEEERKT_:
  430|    225|inline std::u16string_view toU16StringViewNullable(const T& text) {
  431|    225|    return toU16StringView(text);
  432|    225|}
_ZN6icu_788internal23toU16StringViewNullableIA4_DsvEENSt3__117basic_string_viewIDsNS3_11char_traitsIDsEEEERKT_:
  430|      1|inline std::u16string_view toU16StringViewNullable(const T& text) {
  431|      1|    return toU16StringView(text);
  432|      1|}
_ZN6icu_788internal23toU16StringViewNullableIA3_DsvEENSt3__117basic_string_viewIDsNS3_11char_traitsIDsEEEERKT_:
  430|      2|inline std::u16string_view toU16StringViewNullable(const T& text) {
  431|      2|    return toU16StringView(text);
  432|      2|}
_ZN6icu_788internal23toU16StringViewNullableIPKDsvvEENSt3__117basic_string_viewIDsNS4_11char_traitsIDsEEEERKT_:
  441|     24|inline std::u16string_view toU16StringViewNullable(const T& text) {
  442|     24|    if (text == nullptr) return {};  // For backward compatibility.
  ------------------
  |  Branch (442:9): [True: 0, False: 24]
  ------------------
  443|     24|    return toU16StringView(text);
  444|     24|}

_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_24DateTimePatternGeneratorEEC2EPS1_R10UErrorCode:
  214|  22.1k|    LocalPointer(T *p, UErrorCode &errorCode) : LocalPointerBase<T>(p) {
  215|  22.1k|        if(p==nullptr && U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (215:12): [True: 0, False: 22.1k]
  |  Branch (215:26): [True: 0, False: 0]
  ------------------
  216|      0|            errorCode=U_MEMORY_ALLOCATION_ERROR;
  217|      0|        }
  218|  22.1k|    }
_ZN6icu_7816LocalPointerBaseINS_24DateTimePatternGeneratorEEC2EPS1_:
   82|  22.1k|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7812LocalPointerINS_24DateTimePatternGeneratorEED2Ev:
  245|  22.1k|    ~LocalPointer() {
  246|  22.1k|        delete LocalPointerBase<T>::ptr;
  247|  22.1k|    }
_ZN6icu_7816LocalPointerBaseINS_24DateTimePatternGeneratorEED2Ev:
   88|  22.1k|    ~LocalPointerBase() { /* delete ptr; */ }
_ZNK6icu_7816LocalPointerBaseINS_24DateTimePatternGeneratorEEptEv:
  134|  36.9k|    T *operator->() const { return ptr; }
_ZN6icu_7812LocalPointerINS_24DateTimePatternGeneratorEE12adoptInsteadEPS1_:
  300|  7.38k|    void adoptInstead(T *p) {
  301|  7.38k|        delete LocalPointerBase<T>::ptr;
  302|  7.38k|        LocalPointerBase<T>::ptr=p;
  303|  7.38k|    }
_ZN6icu_7816LocalPointerBaseIiEC2EPi:
   82|    286|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7816LocalPointerBaseIiE6orphanEv:
  141|    276|    T *orphan() {
  142|    276|        T *p=ptr;
  143|    276|        ptr=nullptr;
  144|    276|        return p;
  145|    276|    }
_ZN6icu_7816LocalPointerBaseIiED2Ev:
   88|    286|    ~LocalPointerBase() { /* delete ptr; */ }
_ZN6icu_7816LocalPointerBaseINS_24DateTimePatternGeneratorEE6orphanEv:
  141|  13.2k|    T *orphan() {
  142|  13.2k|        T *p=ptr;
  143|  13.2k|        ptr=nullptr;
  144|  13.2k|        return p;
  145|  13.2k|    }
_ZN6icu_788internal16LocalOpenPointerI15UResourceBundleXadL_Z13ures_close_78EEEC2EPS2_:
  567|  1.29M|    explicit LocalOpenPointer(Type *p=nullptr) : LocalPointerBase<Type>(p) {}
_ZN6icu_7816LocalPointerBaseI15UResourceBundleEC2EPS1_:
   82|  1.29M|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_788internal16LocalOpenPointerI15UResourceBundleXadL_Z13ures_close_78EEED2Ev:
  575|  1.29M|    ~LocalOpenPointer() { if (ptr != nullptr) { closeFunction(ptr); } }
  ------------------
  |  Branch (575:31): [True: 342k, False: 953k]
  ------------------
_ZN6icu_7816LocalPointerBaseI15UResourceBundleED2Ev:
   88|  1.29M|    ~LocalPointerBase() { /* delete ptr; */ }
_ZNK6icu_7816LocalPointerBaseI15UResourceBundleE8getAliasEv:
  122|  2.07M|    T *getAlias() const { return ptr; }
_ZN6icu_7812LocalPointerINS_9HashtableEEC2EPS1_R10UErrorCode:
  214|  13.5k|    LocalPointer(T *p, UErrorCode &errorCode) : LocalPointerBase<T>(p) {
  215|  13.5k|        if(p==nullptr && U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (215:12): [True: 0, False: 13.5k]
  |  Branch (215:26): [True: 0, False: 0]
  ------------------
  216|      0|            errorCode=U_MEMORY_ALLOCATION_ERROR;
  217|      0|        }
  218|  13.5k|    }
_ZN6icu_7816LocalPointerBaseINS_9HashtableEEC2EPS1_:
   82|  13.5k|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7812LocalPointerINS_9HashtableEED2Ev:
  245|  13.5k|    ~LocalPointer() {
  246|  13.5k|        delete LocalPointerBase<T>::ptr;
  247|  13.5k|    }
_ZN6icu_7816LocalPointerBaseINS_9HashtableEED2Ev:
   88|  13.5k|    ~LocalPointerBase() { /* delete ptr; */ }
_ZN6icu_7816LocalPointerBaseINS_9HashtableEE6orphanEv:
  141|  13.5k|    T *orphan() {
  142|  13.5k|        T *p=ptr;
  143|  13.5k|        ptr=nullptr;
  144|  13.5k|        return p;
  145|  13.5k|    }
_ZN6icu_788internal16LocalOpenPointerI15UResourceBundleXadL_Z13ures_close_78EEE12adoptInsteadEPS2_:
  595|   125k|    void adoptInstead(Type *p) {
  596|   125k|        if (ptr != nullptr) { closeFunction(ptr); }
  ------------------
  |  Branch (596:13): [True: 5.79k, False: 119k]
  ------------------
  597|   125k|        ptr=p;
  598|   125k|    }
_ZNK6icu_7816LocalPointerBaseI15UResourceBundleE6isNullEv:
   94|  25.4k|    UBool isNull() const { return ptr==nullptr; }
_ZN6icu_7816LocalPointerBaseI15UResourceBundleE6orphanEv:
  141|  91.8k|    T *orphan() {
  142|  91.8k|        T *p=ptr;
  143|  91.8k|        ptr=nullptr;
  144|  91.8k|        return p;
  145|  91.8k|    }
_ZNK6icu_7816LocalPointerBaseINS_11PtnSkeletonEEptEv:
  134|  4.95M|    T *operator->() const { return ptr; }
_ZNK6icu_7816LocalPointerBaseINS_7PtnElemEE8getAliasEv:
  122|  12.6M|    T *getAlias() const { return ptr; }
_ZN6icu_7812LocalPointerINS_7PtnElemEEC2EPS1_R10UErrorCode:
  214|   903k|    LocalPointer(T *p, UErrorCode &errorCode) : LocalPointerBase<T>(p) {
  215|   903k|        if(p==nullptr && U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (215:12): [True: 0, False: 903k]
  |  Branch (215:26): [True: 0, False: 0]
  ------------------
  216|      0|            errorCode=U_MEMORY_ALLOCATION_ERROR;
  217|      0|        }
  218|   903k|    }
_ZN6icu_7816LocalPointerBaseINS_7PtnElemEEC2EPS1_:
   82|  1.80M|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7812LocalPointerINS_7PtnElemEED2Ev:
  245|  1.80M|    ~LocalPointer() {
  246|  1.80M|        delete LocalPointerBase<T>::ptr;
  247|  1.80M|    }
_ZN6icu_7816LocalPointerBaseINS_7PtnElemEED2Ev:
   88|  1.80M|    ~LocalPointerBase() { /* delete ptr; */ }
_ZNK6icu_7816LocalPointerBaseINS_7PtnElemEEptEv:
  134|  1.80M|    T *operator->() const { return ptr; }
_ZN6icu_7812LocalPointerINS_11PtnSkeletonEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode:
  319|   903k|    void adoptInsteadAndCheckErrorCode(T *p, UErrorCode &errorCode) {
  320|   903k|        if(U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (320:12): [True: 903k, False: 0]
  ------------------
  321|   903k|            delete LocalPointerBase<T>::ptr;
  322|   903k|            LocalPointerBase<T>::ptr=p;
  323|   903k|            if(p==nullptr) {
  ------------------
  |  Branch (323:16): [True: 0, False: 903k]
  ------------------
  324|      0|                errorCode=U_MEMORY_ALLOCATION_ERROR;
  325|      0|            }
  326|   903k|        } else {
  327|      0|            delete p;
  328|      0|        }
  329|   903k|    }
_ZNK6icu_7816LocalPointerBaseINS_11PtnSkeletonEEdeEv:
  128|   545k|    T &operator*() const { return *ptr; }
_ZN6icu_7816LocalPointerBaseINS_7PtnElemEE6orphanEv:
  141|   903k|    T *orphan() {
  142|   903k|        T *p=ptr;
  143|   903k|        ptr=nullptr;
  144|   903k|        return p;
  145|   903k|    }
_ZN6icu_7812LocalPointerINS_7PtnElemEE12adoptInsteadEPS1_:
  300|   660k|    void adoptInstead(T *p) {
  301|   660k|        delete LocalPointerBase<T>::ptr;
  302|   660k|        LocalPointerBase<T>::ptr=p;
  303|   660k|    }
_ZNK6icu_7816LocalPointerBaseINS_7PtnElemEEneEPKS1_:
  116|  4.15M|    bool operator!=(const T *other) const { return ptr!=other; }
_ZNK6icu_7816LocalPointerBaseINS_11PtnSkeletonEE8getAliasEv:
  122|  12.1k|    T *getAlias() const { return ptr; }
_ZN6icu_7812LocalPointerINS_15DateTimeMatcherEEC2EPS1_:
  200|  8.44k|    explicit LocalPointer(T *p=nullptr) : LocalPointerBase<T>(p) {}
_ZN6icu_7816LocalPointerBaseINS_15DateTimeMatcherEEC2EPS1_:
   82|  8.44k|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7812LocalPointerINS_15DateTimeMatcherEED2Ev:
  245|  8.44k|    ~LocalPointer() {
  246|  8.44k|        delete LocalPointerBase<T>::ptr;
  247|  8.44k|    }
_ZN6icu_7816LocalPointerBaseINS_15DateTimeMatcherEED2Ev:
   88|  8.44k|    ~LocalPointerBase() { /* delete ptr; */ }
_ZN6icu_7812LocalPointerINS_15DateTimeMatcherEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode:
  319|  8.44k|    void adoptInsteadAndCheckErrorCode(T *p, UErrorCode &errorCode) {
  320|  8.44k|        if(U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (320:12): [True: 8.44k, False: 0]
  ------------------
  321|  8.44k|            delete LocalPointerBase<T>::ptr;
  322|  8.44k|            LocalPointerBase<T>::ptr=p;
  323|  8.44k|            if(p==nullptr) {
  ------------------
  |  Branch (323:16): [True: 0, False: 8.44k]
  ------------------
  324|      0|                errorCode=U_MEMORY_ALLOCATION_ERROR;
  325|      0|            }
  326|  8.44k|        } else {
  327|      0|            delete p;
  328|      0|        }
  329|  8.44k|    }
_ZNK6icu_7816LocalPointerBaseINS_15DateTimeMatcherEEptEv:
  134|   545k|    T *operator->() const { return ptr; }
_ZNK6icu_7816LocalPointerBaseINS_15DateTimeMatcherEEdeEv:
  128|   545k|    T &operator*() const { return *ptr; }
_ZN6icu_7812LocalPointerINS_11PtnSkeletonEEC2EPS1_:
  200|   903k|    explicit LocalPointer(T *p=nullptr) : LocalPointerBase<T>(p) {}
_ZN6icu_7816LocalPointerBaseINS_11PtnSkeletonEEC2EPS1_:
   82|   903k|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7812LocalPointerINS_7PtnElemEEC2EPS1_:
  200|   903k|    explicit LocalPointer(T *p=nullptr) : LocalPointerBase<T>(p) {}
_ZN6icu_7812LocalPointerINS_11PtnSkeletonEED2Ev:
  245|   903k|    ~LocalPointer() {
  246|   903k|        delete LocalPointerBase<T>::ptr;
  247|   903k|    }
_ZN6icu_7816LocalPointerBaseINS_11PtnSkeletonEED2Ev:
   88|   903k|    ~LocalPointerBase() { /* delete ptr; */ }
_ZN6icu_7816LocalPointerBaseINS_7UVectorEEC2EPS1_:
   82|    145|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7812LocalPointerINS_7UVectorEED2Ev:
  245|    145|    ~LocalPointer() {
  246|    145|        delete LocalPointerBase<T>::ptr;
  247|    145|    }
_ZN6icu_7816LocalPointerBaseINS_7UVectorEED2Ev:
   88|    145|    ~LocalPointerBase() { /* delete ptr; */ }
_ZN6icu_7812LocalPointerINS_13UnicodeStringEEC2EPS1_R10UErrorCode:
  214|  2.26k|    LocalPointer(T *p, UErrorCode &errorCode) : LocalPointerBase<T>(p) {
  215|  2.26k|        if(p==nullptr && U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (215:12): [True: 0, False: 2.26k]
  |  Branch (215:26): [True: 0, False: 0]
  ------------------
  216|      0|            errorCode=U_MEMORY_ALLOCATION_ERROR;
  217|      0|        }
  218|  2.26k|    }
_ZN6icu_7816LocalPointerBaseINS_13UnicodeStringEEC2EPS1_:
   82|  2.26k|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7812LocalPointerINS_13UnicodeStringEED2Ev:
  245|  2.26k|    ~LocalPointer() {
  246|  2.26k|        delete LocalPointerBase<T>::ptr;
  247|  2.26k|    }
_ZN6icu_7816LocalPointerBaseINS_13UnicodeStringEED2Ev:
   88|  2.26k|    ~LocalPointerBase() { /* delete ptr; */ }
_ZNK6icu_7816LocalPointerBaseINS_7UVectorEEptEv:
  134|     35|    T *operator->() const { return ptr; }
_ZNK6icu_7816LocalPointerBaseINS_13UnicodeStringEE8getAliasEv:
  122|    640|    T *getAlias() const { return ptr; }
_ZN6icu_7816LocalPointerBaseINS_13UnicodeStringEE6orphanEv:
  141|  2.16k|    T *orphan() {
  142|  2.16k|        T *p=ptr;
  143|  2.16k|        ptr=nullptr;
  144|  2.16k|        return p;
  145|  2.16k|    }
_ZN6icu_7812LocalPointerINS_15NumberingSystemEEC2EPS1_R10UErrorCode:
  214|  26.6k|    LocalPointer(T *p, UErrorCode &errorCode) : LocalPointerBase<T>(p) {
  215|  26.6k|        if(p==nullptr && U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (215:12): [True: 0, False: 26.6k]
  |  Branch (215:26): [True: 0, False: 0]
  ------------------
  216|      0|            errorCode=U_MEMORY_ALLOCATION_ERROR;
  217|      0|        }
  218|  26.6k|    }
_ZN6icu_7816LocalPointerBaseINS_15NumberingSystemEEC2EPS1_:
   82|  40.1k|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7812LocalPointerINS_15NumberingSystemEED2Ev:
  245|  40.1k|    ~LocalPointer() {
  246|  40.1k|        delete LocalPointerBase<T>::ptr;
  247|  40.1k|    }
_ZN6icu_7816LocalPointerBaseINS_15NumberingSystemEED2Ev:
   88|  40.1k|    ~LocalPointerBase() { /* delete ptr; */ }
_ZNK6icu_7816LocalPointerBaseINS_15NumberingSystemEEptEv:
  134|  66.5k|    T *operator->() const { return ptr; }
_ZN6icu_7816LocalPointerBaseINS_15NumberingSystemEE6orphanEv:
  141|  26.6k|    T *orphan() {
  142|  26.6k|        T *p=ptr;
  143|  26.6k|        ptr=nullptr;
  144|  26.6k|        return p;
  145|  26.6k|    }
_ZN6icu_7812LocalPointerINS_7UVectorEEC2EPS1_R10UErrorCode:
  214|    145|    LocalPointer(T *p, UErrorCode &errorCode) : LocalPointerBase<T>(p) {
  215|    145|        if(p==nullptr && U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (215:12): [True: 0, False: 145]
  |  Branch (215:26): [True: 0, False: 0]
  ------------------
  216|      0|            errorCode=U_MEMORY_ALLOCATION_ERROR;
  217|      0|        }
  218|    145|    }
_ZN6icu_7816LocalPointerBaseINS_7UVectorEE6orphanEv:
  141|    143|    T *orphan() {
  142|    143|        T *p=ptr;
  143|    143|        ptr=nullptr;
  144|    143|        return p;
  145|    143|    }
_ZN6icu_788internal16LocalOpenPointerI10UHashtableXadL_Z14uhash_close_78EEEC2EPS2_:
  567|     41|    explicit LocalOpenPointer(Type *p=nullptr) : LocalPointerBase<Type>(p) {}
_ZN6icu_7816LocalPointerBaseI10UHashtableEC2EPS1_:
   82|     41|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_788internal16LocalOpenPointerI10UHashtableXadL_Z14uhash_close_78EEED2Ev:
  575|      4|    ~LocalOpenPointer() { if (ptr != nullptr) { closeFunction(ptr); } }
  ------------------
  |  Branch (575:31): [True: 0, False: 4]
  ------------------
_ZN6icu_7816LocalPointerBaseI10UHashtableED2Ev:
   88|      4|    ~LocalPointerBase() { /* delete ptr; */ }
_ZNK6icu_7816LocalPointerBaseI10UHashtableE8getAliasEv:
  122|  9.51k|    T *getAlias() const { return ptr; }
_ZN6icu_7812LocalPointerINS_13UnicodeStringEEC2EPS1_:
  200|      1|    explicit LocalPointer(T *p=nullptr) : LocalPointerBase<T>(p) {}
_ZN6icu_7812LocalPointerINS_6RegionEEC2EPS1_R10UErrorCode:
  214|    392|    LocalPointer(T *p, UErrorCode &errorCode) : LocalPointerBase<T>(p) {
  215|    392|        if(p==nullptr && U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (215:12): [True: 0, False: 392]
  |  Branch (215:26): [True: 0, False: 0]
  ------------------
  216|      0|            errorCode=U_MEMORY_ALLOCATION_ERROR;
  217|      0|        }
  218|    392|    }
_ZN6icu_7816LocalPointerBaseINS_6RegionEEC2EPS1_:
   82|    392|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7812LocalPointerINS_6RegionEED2Ev:
  245|    392|    ~LocalPointer() {
  246|    392|        delete LocalPointerBase<T>::ptr;
  247|    392|    }
_ZN6icu_7816LocalPointerBaseINS_6RegionEED2Ev:
   88|    392|    ~LocalPointerBase() { /* delete ptr; */ }
_ZNK6icu_7816LocalPointerBaseINS_6RegionEEptEv:
  134|  2.40k|    T *operator->() const { return ptr; }
_ZNK6icu_7816LocalPointerBaseINS_6RegionEE8getAliasEv:
  122|     31|    T *getAlias() const { return ptr; }
_ZN6icu_7816LocalPointerBaseINS_6RegionEE6orphanEv:
  141|    392|    T *orphan() {
  142|    392|        T *p=ptr;
  143|    392|        ptr=nullptr;
  144|    392|        return p;
  145|    392|    }
_ZNK6icu_7816LocalPointerBaseINS_13UnicodeStringEEdeEv:
  128|     99|    T &operator*() const { return *ptr; }
_ZNK6icu_7816LocalPointerBaseINS_13UnicodeStringEEptEv:
  134|    285|    T *operator->() const { return ptr; }
_ZN6icu_7816LocalPointerBaseI10UHashtableE6orphanEv:
  141|      4|    T *orphan() {
  142|      4|        T *p=ptr;
  143|      4|        ptr=nullptr;
  144|      4|        return p;
  145|      4|    }
_ZN6icu_7812LocalPointerINS_8CalendarEEC2EPS1_:
  200|  7.16k|    explicit LocalPointer(T *p=nullptr) : LocalPointerBase<T>(p) {}
_ZN6icu_7816LocalPointerBaseINS_8CalendarEEC2EPS1_:
   82|  7.16k|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7812LocalPointerINS_8CalendarEE29adoptInsteadAndCheckErrorCodeEPS1_R10UErrorCode:
  319|  7.16k|    void adoptInsteadAndCheckErrorCode(T *p, UErrorCode &errorCode) {
  320|  7.16k|        if(U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (320:12): [True: 7.16k, False: 0]
  ------------------
  321|  7.16k|            delete LocalPointerBase<T>::ptr;
  322|  7.16k|            LocalPointerBase<T>::ptr=p;
  323|  7.16k|            if(p==nullptr) {
  ------------------
  |  Branch (323:16): [True: 0, False: 7.16k]
  ------------------
  324|      0|                errorCode=U_MEMORY_ALLOCATION_ERROR;
  325|      0|            }
  326|  7.16k|        } else {
  327|      0|            delete p;
  328|      0|        }
  329|  7.16k|    }
_ZN6icu_7816LocalPointerBaseINS_8CalendarEE6orphanEv:
  141|  7.16k|    T *orphan() {
  142|  7.16k|        T *p=ptr;
  143|  7.16k|        ptr=nullptr;
  144|  7.16k|        return p;
  145|  7.16k|    }
_ZN6icu_7812LocalPointerINS_8CalendarEED2Ev:
  245|  7.16k|    ~LocalPointer() {
  246|  7.16k|        delete LocalPointerBase<T>::ptr;
  247|  7.16k|    }
_ZN6icu_7816LocalPointerBaseINS_8CalendarEED2Ev:
   88|  7.16k|    ~LocalPointerBase() { /* delete ptr; */ }
_ZN6icu_7812LocalPointerINS_8TimeZoneEEC2EPS1_R10UErrorCode:
  214|  7.16k|    LocalPointer(T *p, UErrorCode &errorCode) : LocalPointerBase<T>(p) {
  215|  7.16k|        if(p==nullptr && U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (215:12): [True: 0, False: 7.16k]
  |  Branch (215:26): [True: 0, False: 0]
  ------------------
  216|      0|            errorCode=U_MEMORY_ALLOCATION_ERROR;
  217|      0|        }
  218|  7.16k|    }
_ZN6icu_7816LocalPointerBaseINS_8TimeZoneEEC2EPS1_:
   82|  7.16k|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7812LocalPointerINS_8TimeZoneEED2Ev:
  245|  7.16k|    ~LocalPointer() {
  246|  7.16k|        delete LocalPointerBase<T>::ptr;
  247|  7.16k|    }
_ZN6icu_7816LocalPointerBaseINS_8TimeZoneEED2Ev:
   88|  7.16k|    ~LocalPointerBase() { /* delete ptr; */ }
_ZNK6icu_7816LocalPointerBaseINS_8TimeZoneEE6isNullEv:
   94|  7.16k|    UBool isNull() const { return ptr==nullptr; }
_ZN6icu_7816LocalPointerBaseINS_8TimeZoneEE6orphanEv:
  141|  7.16k|    T *orphan() {
  142|  7.16k|        T *p=ptr;
  143|  7.16k|        ptr=nullptr;
  144|  7.16k|        return p;
  145|  7.16k|    }
_ZN6icu_7812LocalPointerINS_15NumberingSystemEEC2EPS1_:
  200|  13.5k|    explicit LocalPointer(T *p=nullptr) : LocalPointerBase<T>(p) {}
_ZN6icu_7812LocalPointerINS_15NumberingSystemEE12adoptInsteadEPS1_:
  300|  13.5k|    void adoptInstead(T *p) {
  301|  13.5k|        delete LocalPointerBase<T>::ptr;
  302|  13.5k|        LocalPointerBase<T>::ptr=p;
  303|  13.5k|    }
_ZNK6icu_7816LocalPointerBaseINS_15NumberingSystemEE8getAliasEv:
  122|  13.5k|    T *getAlias() const { return ptr; }
_ZNK6icu_7816LocalPointerBaseINS_7UVectorEE8getAliasEv:
  122|     24|    T *getAlias() const { return ptr; }
_ZN6icu_7816LocalPointerBaseIPKcEC2EPS2_:
   82|      5|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
_ZN6icu_7816LocalPointerBaseIPKcED2Ev:
   88|      5|    ~LocalPointerBase() { /* delete ptr; */ }
_ZNK6icu_7816LocalPointerBaseI15UResourceBundleE7isValidEv:
  100|  2.17k|    UBool isValid() const { return ptr!=nullptr; }
_ZN6icu_788internal16LocalOpenPointerI10UHashtableXadL_Z14uhash_close_78EEE12adoptInsteadEPS2_:
  595|     37|    void adoptInstead(Type *p) {
  596|     37|        if (ptr != nullptr) { closeFunction(ptr); }
  ------------------
  |  Branch (596:13): [True: 0, False: 37]
  ------------------
  597|     37|        ptr=p;
  598|     37|    }
uloc_tag.cpp:_ZN6icu_7812LocalPointerIN12_GLOBAL__N_116VariantListEntryEEC2EPS2_R10UErrorCode:
  214|  4.99k|    LocalPointer(T *p, UErrorCode &errorCode) : LocalPointerBase<T>(p) {
  215|  4.99k|        if(p==nullptr && U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (215:12): [True: 0, False: 4.99k]
  |  Branch (215:26): [True: 0, False: 0]
  ------------------
  216|      0|            errorCode=U_MEMORY_ALLOCATION_ERROR;
  217|      0|        }
  218|  4.99k|    }
uloc_tag.cpp:_ZN6icu_7816LocalPointerBaseIN12_GLOBAL__N_116VariantListEntryEEC2EPS2_:
   82|  9.99k|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
uloc_tag.cpp:_ZNK6icu_7816LocalPointerBaseIN12_GLOBAL__N_116VariantListEntryEEptEv:
  134|  13.8k|    T *operator->() const { return ptr; }
uloc_tag.cpp:_ZN6icu_7816LocalPointerBaseIN12_GLOBAL__N_116VariantListEntryEE6orphanEv:
  141|  4.52k|    T *orphan() {
  142|  4.52k|        T *p=ptr;
  143|  4.52k|        ptr=nullptr;
  144|  4.52k|        return p;
  145|  4.52k|    }
uloc_tag.cpp:_ZN6icu_7812LocalPointerIN12_GLOBAL__N_116VariantListEntryEEC2EOS3_:
  224|  4.99k|    LocalPointer(LocalPointer<T> &&src) noexcept : LocalPointerBase<T>(src.ptr) {
  225|  4.99k|        src.ptr=nullptr;
  226|  4.99k|    }
uloc_tag.cpp:_ZN6icu_7812LocalPointerIN12_GLOBAL__N_116VariantListEntryEED2Ev:
  245|  9.99k|    ~LocalPointer() {
  246|  9.99k|        delete LocalPointerBase<T>::ptr;
  247|  9.99k|    }
uloc_tag.cpp:_ZN6icu_7816LocalPointerBaseIN12_GLOBAL__N_116VariantListEntryEED2Ev:
   88|  9.99k|    ~LocalPointerBase() { /* delete ptr; */ }
uloc_tag.cpp:_ZN6icu_7812LocalPointerIN12_GLOBAL__N_118ExtensionListEntryEEC2EPS2_:
  200|   143k|    explicit LocalPointer(T *p=nullptr) : LocalPointerBase<T>(p) {}
uloc_tag.cpp:_ZN6icu_7816LocalPointerBaseIN12_GLOBAL__N_118ExtensionListEntryEEC2EPS2_:
   82|   143k|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
uloc_tag.cpp:_ZNK6icu_7816LocalPointerBaseIN12_GLOBAL__N_112ULanguageTagEE6isNullEv:
   94|   143k|    UBool isNull() const { return ptr==nullptr; }
uloc_tag.cpp:_ZNK6icu_7816LocalPointerBaseIN12_GLOBAL__N_112ULanguageTagEEptEv:
  134|   247k|    T *operator->() const { return ptr; }
uloc_tag.cpp:_ZN6icu_7816LocalPointerBaseIN12_GLOBAL__N_112ULanguageTagEE6orphanEv:
  141|   143k|    T *orphan() {
  142|   143k|        T *p=ptr;
  143|   143k|        ptr=nullptr;
  144|   143k|        return p;
  145|   143k|    }
uloc_tag.cpp:_ZNK6icu_7816LocalPointerBaseIN12_GLOBAL__N_118ExtensionListEntryEE7isValidEv:
  100|   151k|    UBool isValid() const { return ptr!=nullptr; }
uloc_tag.cpp:_ZN6icu_7816LocalPointerBaseIN12_GLOBAL__N_118ExtensionListEntryEE6orphanEv:
  141|  22.7k|    T *orphan() {
  142|  22.7k|        T *p=ptr;
  143|  22.7k|        ptr=nullptr;
  144|  22.7k|        return p;
  145|  22.7k|    }
uloc_tag.cpp:_ZNK6icu_7816LocalPointerBaseIN12_GLOBAL__N_118ExtensionListEntryEEptEv:
  134|  65.5k|    T *operator->() const { return ptr; }
uloc_tag.cpp:_ZNK6icu_7816LocalPointerBaseIN12_GLOBAL__N_118ExtensionListEntryEE8getAliasEv:
  122|  19.9k|    T *getAlias() const { return ptr; }
uloc_tag.cpp:_ZN6icu_7812LocalPointerIN12_GLOBAL__N_118ExtensionListEntryEE29adoptInsteadAndCheckErrorCodeEPS2_R10UErrorCode:
  319|  22.7k|    void adoptInsteadAndCheckErrorCode(T *p, UErrorCode &errorCode) {
  320|  22.7k|        if(U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (320:12): [True: 22.7k, False: 0]
  ------------------
  321|  22.7k|            delete LocalPointerBase<T>::ptr;
  322|  22.7k|            LocalPointerBase<T>::ptr=p;
  323|  22.7k|            if(p==nullptr) {
  ------------------
  |  Branch (323:16): [True: 0, False: 22.7k]
  ------------------
  324|      0|                errorCode=U_MEMORY_ALLOCATION_ERROR;
  325|      0|            }
  326|  22.7k|        } else {
  327|      0|            delete p;
  328|      0|        }
  329|  22.7k|    }
uloc_tag.cpp:_ZN6icu_7812LocalPointerIN12_GLOBAL__N_118ExtensionListEntryEED2Ev:
  245|   143k|    ~LocalPointer() {
  246|   143k|        delete LocalPointerBase<T>::ptr;
  247|   143k|    }
uloc_tag.cpp:_ZN6icu_7816LocalPointerBaseIN12_GLOBAL__N_118ExtensionListEntryEED2Ev:
   88|   143k|    ~LocalPointerBase() { /* delete ptr; */ }
uloc_tag.cpp:_ZN6icu_788internal16LocalOpenPointerIN12_GLOBAL__N_112ULanguageTagEXadL_ZNS2_11ultag_closeEPS3_EEEC2ES4_:
  567|   287k|    explicit LocalOpenPointer(Type *p=nullptr) : LocalPointerBase<Type>(p) {}
uloc_tag.cpp:_ZN6icu_7816LocalPointerBaseIN12_GLOBAL__N_112ULanguageTagEEC2EPS2_:
   82|   287k|    explicit LocalPointerBase(T *p=nullptr) : ptr(p) {}
uloc_tag.cpp:_ZN6icu_788internal16LocalOpenPointerIN12_GLOBAL__N_112ULanguageTagEXadL_ZNS2_11ultag_closeEPS3_EEED2Ev:
  575|   287k|    ~LocalOpenPointer() { if (ptr != nullptr) { closeFunction(ptr); } }
  ------------------
  |  Branch (575:31): [True: 143k, False: 143k]
  ------------------
uloc_tag.cpp:_ZN6icu_7816LocalPointerBaseIN12_GLOBAL__N_112ULanguageTagEED2Ev:
   88|   287k|    ~LocalPointerBase() { /* delete ptr; */ }
uloc_tag.cpp:_ZNK6icu_7816LocalPointerBaseIN12_GLOBAL__N_112ULanguageTagEE8getAliasEv:
  122|  1.31M|    T *getAlias() const { return ptr; }
_ZNK6icu_7816LocalPointerBaseI15UResourceBundleEptEv:
  134|     48|    T *operator->() const { return ptr; }

_ZNK6icu_786Locale10getCountryEv:
 1204|  43.4k|{
 1205|  43.4k|    return country;
 1206|  43.4k|}
_ZNK6icu_786Locale11getLanguageEv:
 1210|  49.5k|{
 1211|  49.5k|    return language;
 1212|  49.5k|}
_ZNK6icu_786Locale9getScriptEv:
 1216|  27.9k|{
 1217|  27.9k|    return script;
 1218|  27.9k|}
_ZNK6icu_786Locale10getVariantEv:
 1222|  19.6k|{
 1223|  19.6k|    return fIsBogus ? "" : &baseName[variantBegin];
  ------------------
  |  Branch (1223:12): [True: 0, False: 19.6k]
  ------------------
 1224|  19.6k|}
_ZNK6icu_786Locale7getNameEv:
 1228|   591k|{
 1229|   591k|    return fullName;
 1230|   591k|}
_ZNK6icu_786Locale7isBogusEv:
 1289|  70.7k|Locale::isBogus() const {
 1290|  70.7k|    return fIsBogus;
 1291|  70.7k|}

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

_ZN6icu_7815SimpleFormatterC2ERKNS_13UnicodeStringEiiR10UErrorCode:
   96|    598|                    UErrorCode &errorCode) {
   97|    598|        applyPatternMinMaxArguments(pattern, min, max, errorCode);
   98|    598|    }
_ZNK6icu_7815SimpleFormatter16getArgumentLimitEv:
  155|    281|    int32_t getArgumentLimit() const {
  156|    281|        return getArgumentLimit(compiledPattern.getBuffer(), compiledPattern.length());
  157|    281|    }
_ZN6icu_7815SimpleFormatter16getArgumentLimitEPKDsi:
  314|    915|                                              int32_t compiledPatternLength) {
  315|    915|        return compiledPatternLength == 0 ? 0 : compiledPattern[0];
  ------------------
  |  Branch (315:16): [True: 0, False: 915]
  ------------------
  316|    915|    }

_ZN6icu_7811StringPieceC2Ev:
   71|      1|  StringPiece() : ptr_(nullptr), length_(0) { }
_ZN6icu_7811StringPieceC2EPKci:
  151|   203k|  StringPiece(const char* offset, int32_t len) : ptr_(offset), length_(len) { }
_ZNK6icu_7811StringPiececvNSt3__117basic_string_viewIcNS1_11char_traitsIcEEEEEv:
  185|   174k|  inline operator std::string_view() const {
  186|   174k|    return {data(), static_cast<std::string_view::size_type>(size())};
  187|   174k|  }
_ZNK6icu_7811StringPiece4dataEv:
  200|  3.76M|  const char* data() const { return ptr_; }
_ZNK6icu_7811StringPiece4sizeEv:
  206|   174k|  int32_t size() const { return length_; }
_ZNK6icu_7811StringPiece6lengthEv:
  212|  4.17M|  int32_t length() const { return length_; }
_ZNK6icu_7811StringPiece5emptyEv:
  218|   178k|  UBool empty() const { return length_ == 0; }
_ZN6icu_7811StringPieceC2INSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEvEET_:
  142|  55.8k|      : ptr_(reinterpret_cast<const char*>(str.data())),
  143|  55.8k|        length_(static_cast<int32_t>(str.size())) {}

_ZNK6icu_7813UnicodeString8doEqualsERKS0_i:
 3773|   451k|  inline UBool doEquals(const UnicodeString &text, int32_t len) const {
 3774|   451k|    return doEquals(text.getArrayStart(), len);
 3775|   451k|  }
_ZNK6icu_7813UnicodeString8pinIndexERi:
 4138|      1|{
 4139|       |  // pin index
 4140|      1|  if(start < 0) {
  ------------------
  |  Branch (4140:6): [True: 0, False: 1]
  ------------------
 4141|      0|    start = 0;
 4142|      1|  } else if(start > length()) {
  ------------------
  |  Branch (4142:13): [True: 0, False: 1]
  ------------------
 4143|      0|    start = length();
 4144|      0|  }
 4145|      1|}
_ZNK6icu_7813UnicodeString10pinIndicesERiS1_:
 4150|  16.3M|{
 4151|       |  // pin indices
 4152|  16.3M|  int32_t len = length();
 4153|  16.3M|  if(start < 0) {
  ------------------
  |  Branch (4153:6): [True: 0, False: 16.3M]
  ------------------
 4154|      0|    start = 0;
 4155|  16.3M|  } else if(start > len) {
  ------------------
  |  Branch (4155:13): [True: 0, False: 16.3M]
  ------------------
 4156|      0|    start = len;
 4157|      0|  }
 4158|  16.3M|  if(_length < 0) {
  ------------------
  |  Branch (4158:6): [True: 0, False: 16.3M]
  ------------------
 4159|      0|    _length = 0;
 4160|  16.3M|  } else if(_length > (len - start)) {
  ------------------
  |  Branch (4160:13): [True: 146k, False: 16.1M]
  ------------------
 4161|   146k|    _length = (len - start);
 4162|   146k|  }
 4163|  16.3M|}
_ZN6icu_7813UnicodeString13getArrayStartEv:
 4166|  93.5M|UnicodeString::getArrayStart() {
 4167|  93.5M|  return (fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) ?
  ------------------
  |  Branch (4167:10): [True: 11.2M, False: 82.2M]
  ------------------
 4168|  82.2M|    fUnion.fStackFields.fBuffer : fUnion.fFields.fArray;
 4169|  93.5M|}
_ZNK6icu_7813UnicodeString13getArrayStartEv:
 4172|   400M|UnicodeString::getArrayStart() const {
 4173|   400M|  return (fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) ?
  ------------------
  |  Branch (4173:10): [True: 36.1M, False: 364M]
  ------------------
 4174|   364M|    fUnion.fStackFields.fBuffer : fUnion.fFields.fArray;
 4175|   400M|}
_ZNK6icu_7813UnicodeString14hasShortLengthEv:
 4202|   595M|UnicodeString::hasShortLength() const {
 4203|   595M|  return fUnion.fFields.fLengthAndFlags>=0;
 4204|   595M|}
_ZNK6icu_7813UnicodeString14getShortLengthEv:
 4207|  93.5M|UnicodeString::getShortLength() const {
 4208|       |  // fLengthAndFlags must be non-negative -> short length >= 0
 4209|       |  // and arithmetic or logical shift does not matter.
 4210|  93.5M|  return fUnion.fFields.fLengthAndFlags>>kLengthShift;
 4211|  93.5M|}
_ZNK6icu_7813UnicodeString6lengthEv:
 4214|   595M|UnicodeString::length() const {
 4215|   595M|  return hasShortLength() ? getShortLength() : fUnion.fFields.fLength;
  ------------------
  |  Branch (4215:10): [True: 87.0M, False: 508M]
  ------------------
 4216|   595M|}
_ZNK6icu_7813UnicodeString11getCapacityEv:
 4219|  91.5M|UnicodeString::getCapacity() const {
 4220|  91.5M|  return (fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) ?
  ------------------
  |  Branch (4220:10): [True: 9.27M, False: 82.2M]
  ------------------
 4221|  82.2M|    US_STACKBUF_SIZE : fUnion.fFields.fCapacity;
 4222|  91.5M|}
_ZNK6icu_7813UnicodeString8hashCodeEv:
 4226|  1.75M|{ return doHashCode(); }
_ZNK6icu_7813UnicodeString7isBogusEv:
 4230|  20.7M|{ return fUnion.fFields.fLengthAndFlags & kIsBogus; }
_ZNK6icu_7813UnicodeString10isWritableEv:
 4234|  95.4M|{ return !(fUnion.fFields.fLengthAndFlags & (kOpenGetBuffer | kIsBogus)); }
_ZNK6icu_7813UnicodeString16isBufferWritableEv:
 4238|  89.3M|{
 4239|  89.3M|  return
 4240|  89.3M|      !(fUnion.fFields.fLengthAndFlags&(kOpenGetBuffer|kIsBogus|kBufferIsReadonly)) &&
  ------------------
  |  Branch (4240:7): [True: 89.3M, False: 5.53k]
  ------------------
 4241|  89.3M|      (!(fUnion.fFields.fLengthAndFlags&kRefCounted) || refCount()==1);
  ------------------
  |  Branch (4241:8): [True: 7.20M, False: 82.1M]
  |  Branch (4241:57): [True: 82.1M, False: 94]
  ------------------
 4242|  89.3M|}
_ZNK6icu_7813UnicodeString9getBufferEv:
 4245|  2.14k|UnicodeString::getBuffer() const {
 4246|  2.14k|  if(fUnion.fFields.fLengthAndFlags&(kIsBogus|kOpenGetBuffer)) {
  ------------------
  |  Branch (4246:6): [True: 0, False: 2.14k]
  ------------------
 4247|      0|    return nullptr;
 4248|  2.14k|  } else if(fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) {
  ------------------
  |  Branch (4248:13): [True: 1.62k, False: 523]
  ------------------
 4249|  1.62k|    return fUnion.fStackFields.fBuffer;
 4250|  1.62k|  } else {
 4251|    523|    return fUnion.fFields.fArray;
 4252|    523|  }
 4253|  2.14k|}
_ZNK6icu_7813UnicodeString9doCompareEiiRKS0_ii:
 4264|  6.27M|{
 4265|  6.27M|  if(srcText.isBogus()) {
  ------------------
  |  Branch (4265:6): [True: 0, False: 6.27M]
  ------------------
 4266|      0|    return static_cast<int8_t>(!isBogus()); // 0 if both are bogus, 1 otherwise
 4267|  6.27M|  } else {
 4268|  6.27M|    srcText.pinIndices(srcStart, srcLength);
 4269|  6.27M|    return doCompare(start, thisLength, srcText.getArrayStart(), srcStart, srcLength);
 4270|  6.27M|  }
 4271|  6.27M|}
_ZNK6icu_7813UnicodeStringeqERKS0_:
 4290|   467k|{
 4291|   467k|  if(isBogus()) {
  ------------------
  |  Branch (4291:6): [True: 0, False: 467k]
  ------------------
 4292|      0|    return text.isBogus();
 4293|   467k|  } else {
 4294|   467k|    int32_t len = length(), textLength = text.length();
 4295|   467k|    return !text.isBogus() && len == textLength && doEquals(text, len);
  ------------------
  |  Branch (4295:12): [True: 467k, False: 0]
  |  Branch (4295:31): [True: 451k, False: 16.0k]
  |  Branch (4295:52): [True: 448k, False: 2.54k]
  ------------------
 4296|   467k|  }
 4297|   467k|}
_ZNK6icu_7813UnicodeString7compareERKS0_:
 4321|  6.27M|{ return doCompare(0, length(), text, 0, text.length()); }
_ZNK6icu_7813UnicodeString7indexOfEDs:
 4562|  1.03k|{ return doIndexOf(c, 0, length()); }
_ZNK6icu_7813UnicodeString8doCharAtEi:
 4846|   380M|{
 4847|   380M|  if (static_cast<uint32_t>(offset) < static_cast<uint32_t>(length())) {
  ------------------
  |  Branch (4847:7): [True: 379M, False: 989k]
  ------------------
 4848|   379M|    return getArrayStart()[offset];
 4849|   379M|  } else {
 4850|   989k|    return kInvalidUChar;
 4851|   989k|  }
 4852|   380M|}
_ZNK6icu_7813UnicodeString6charAtEi:
 4856|   380M|{ return doCharAt(offset); }
_ZNK6icu_7813UnicodeStringixEi:
 4860|  2.54k|{ return doCharAt(offset); }
_ZNK6icu_7813UnicodeString7isEmptyEv:
 4863|  8.97M|UnicodeString::isEmpty() const {
 4864|       |  // Arithmetic or logical right shift does not matter: only testing for 0.
 4865|  8.97M|  return (fUnion.fFields.fLengthAndFlags>>kLengthShift) == 0;
 4866|  8.97M|}
_ZN6icu_7813UnicodeString13setZeroLengthEv:
 4872|  1.70M|UnicodeString::setZeroLength() {
 4873|  1.70M|  fUnion.fFields.fLengthAndFlags &= kAllStorageFlags;
 4874|  1.70M|}
_ZN6icu_7813UnicodeString14setShortLengthEi:
 4877|  14.1M|UnicodeString::setShortLength(int32_t len) {
 4878|       |  // requires 0 <= len <= kMaxShortLength
 4879|  14.1M|  fUnion.fFields.fLengthAndFlags =
 4880|  14.1M|    static_cast<int16_t>((fUnion.fFields.fLengthAndFlags & kAllStorageFlags) | (len << kLengthShift));
 4881|  14.1M|}
_ZN6icu_7813UnicodeString9setLengthEi:
 4884|  95.2M|UnicodeString::setLength(int32_t len) {
 4885|  95.2M|  if(len <= kMaxShortLength) {
  ------------------
  |  Branch (4885:6): [True: 14.1M, False: 81.1M]
  ------------------
 4886|  14.1M|    setShortLength(len);
 4887|  81.1M|  } else {
 4888|  81.1M|    fUnion.fFields.fLengthAndFlags |= kLengthIsLarge;
 4889|  81.1M|    fUnion.fFields.fLength = len;
 4890|  81.1M|  }
 4891|  95.2M|}
_ZN6icu_7813UnicodeString10setToEmptyEv:
 4894|   660k|UnicodeString::setToEmpty() {
 4895|   660k|  fUnion.fFields.fLengthAndFlags = kShortString;
 4896|   660k|}
_ZN6icu_7813UnicodeString8setArrayEPDsii:
 4899|  2.82M|UnicodeString::setArray(char16_t *array, int32_t len, int32_t capacity) {
 4900|  2.82M|  setLength(len);
 4901|  2.82M|  fUnion.fFields.fArray = array;
 4902|  2.82M|  fUnion.fFields.fCapacity = capacity;
 4903|  2.82M|}
_ZN6icu_7813UnicodeStringaSEDs:
 4907|   365k|{ return doReplace(0, length(), &ch, 0, 1); }
_ZN6icu_7813UnicodeString5setToERKS0_ii:
 4917|  3.41M|{
 4918|  3.41M|  unBogus();
 4919|  3.41M|  return doReplace(0, length(), srcText, srcStart, srcLength);
 4920|  3.41M|}
_ZN6icu_7813UnicodeString5setToERKS0_i:
 4925|      1|{
 4926|      1|  unBogus();
 4927|      1|  srcText.pinIndex(srcStart);
 4928|      1|  return doReplace(0, length(), srcText, srcStart, srcText.length() - srcStart);
 4929|      1|}
_ZN6icu_7813UnicodeString5setToERKS0_:
 4933|  26.7k|{
 4934|  26.7k|  return copyFrom(srcText);
 4935|  26.7k|}
_ZN6icu_7813UnicodeString5setToEPKDsi:
 4940|  11.0k|{
 4941|  11.0k|  unBogus();
 4942|  11.0k|  return doReplace(0, length(), srcChars, 0, srcLength);
 4943|  11.0k|}
_ZN6icu_7813UnicodeString5setToEDs:
 4947|    598|{
 4948|    598|  unBogus();
 4949|    598|  return doReplace(0, length(), &srcChar, 0, 1);
 4950|    598|}
_ZN6icu_7813UnicodeString5setToEi:
 4954|   133k|{
 4955|   133k|  unBogus();
 4956|   133k|  return replace(0, length(), srcChar);
 4957|   133k|}
_ZN6icu_7813UnicodeString6appendERKS0_:
 4967|  1.08k|{ return doAppend(srcText, 0, srcText.length()); }
_ZN6icu_7813UnicodeString6appendENS_14ConstChar16PtrEi:
 4978|    944|{ return doAppend(srcChars, 0, srcLength); }
_ZN6icu_7813UnicodeString6appendEDs:
 4982|  82.2M|{ return doAppend(&srcChar, 0, 1); }
_ZN6icu_7813UnicodeStringpLEDs:
 4986|  3.16M|{ return doAppend(&ch, 0, 1); }
_ZN6icu_7813UnicodeStringpLERKS0_:
 4995|  52.4k|{ return doAppend(srcText, 0, srcText.length()); }
_ZN6icu_7813UnicodeString6removeEv:
 5035|  1.69M|{
 5036|       |  // remove() of a bogus string makes the string empty and non-bogus
 5037|  1.69M|  if(isBogus()) {
  ------------------
  |  Branch (5037:6): [True: 0, False: 1.69M]
  ------------------
 5038|      0|    setToEmpty();
 5039|  1.69M|  } else {
 5040|  1.69M|    setZeroLength();
 5041|  1.69M|  }
 5042|  1.69M|  return *this;
 5043|  1.69M|}
_ZN6icu_7813UnicodeString6removeEii:
 5048|    866|{
 5049|    866|    if(start <= 0 && _length == INT32_MAX) {
  ------------------
  |  Branch (5049:8): [True: 415, False: 451]
  |  Branch (5049:22): [True: 0, False: 415]
  ------------------
 5050|       |        // remove(guaranteed everything) of a bogus string makes the string empty and non-bogus
 5051|      0|        return remove();
 5052|      0|    }
 5053|    866|    return doReplace(start, _length, nullptr, 0, 0);
 5054|    866|}
_ZN6icu_7813UnicodeStringC2Ev:
 4182|  5.66M|UnicodeString::UnicodeString() {
 4183|  5.66M|  fUnion.fStackFields.fLengthAndFlags=kShortString;
 4184|  5.66M|}
_ZN6icu_7813UnicodeStringC2IA6_DsvEERKT_:
 3274|    225|  UNISTR_FROM_STRING_EXPLICIT UnicodeString(const S &text) {
 3275|    225|    fUnion.fFields.fLengthAndFlags = kShortString;
 3276|    225|    doAppend(internal::toU16StringViewNullable(text));
 3277|    225|  }
_ZN6icu_7813UnicodeStringC2IA4_DsvEERKT_:
 3274|      1|  UNISTR_FROM_STRING_EXPLICIT UnicodeString(const S &text) {
 3275|      1|    fUnion.fFields.fLengthAndFlags = kShortString;
 3276|      1|    doAppend(internal::toU16StringViewNullable(text));
 3277|      1|  }
_ZN6icu_7813UnicodeStringC2IA3_DsvEERKT_:
 3274|      2|  UNISTR_FROM_STRING_EXPLICIT UnicodeString(const S &text) {
 3275|      2|    fUnion.fFields.fLengthAndFlags = kShortString;
 3276|      2|    doAppend(internal::toU16StringViewNullable(text));
 3277|      2|  }
_ZN6icu_7813UnicodeStringC2IPKDsvEERKT_:
 3274|     24|  UNISTR_FROM_STRING_EXPLICIT UnicodeString(const S &text) {
 3275|     24|    fUnion.fFields.fLengthAndFlags = kShortString;
 3276|     24|    doAppend(internal::toU16StringViewNullable(text));
 3277|     24|  }

_ZN6icu_787UMemorynwEmPv:
  166|      2|    static inline void * U_EXPORT2 operator new(size_t, void *ptr) noexcept { return ptr; }

_ZN6icu_7821ures_getUnicodeStringEPK15UResourceBundleP10UErrorCode:
  813|   109k|ures_getUnicodeString(const UResourceBundle *resB, UErrorCode* status) {
  814|   109k|    UnicodeString result;
  815|   109k|    int32_t len = 0;
  816|   109k|    const char16_t *r = ConstChar16Ptr(ures_getString(resB, &len, status));
  ------------------
  |  | 1675|   109k|#define ures_getString U_ICU_ENTRY_POINT_RENAME(ures_getString)
  |  |  ------------------
  |  |  |  |  123|   109k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   109k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   109k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  817|   109k|    if(U_SUCCESS(*status)) {
  ------------------
  |  Branch (817:8): [True: 109k, False: 0]
  ------------------
  818|   109k|        result.setTo(true, r, len);
  819|   109k|    } else {
  820|      0|        result.setToBogus();
  821|      0|    }
  822|   109k|    return result;
  823|   109k|}
_ZN6icu_7825ures_getNextUnicodeStringEP15UResourceBundlePPKcP10UErrorCode:
  838|    149|ures_getNextUnicodeString(UResourceBundle *resB, const char ** key, UErrorCode* status) {
  839|    149|    UnicodeString result;
  840|    149|    int32_t len = 0;
  841|    149|    const char16_t* r = ConstChar16Ptr(ures_getNextString(resB, &len, key, status));
  ------------------
  |  | 1673|    149|#define ures_getNextString U_ICU_ENTRY_POINT_RENAME(ures_getNextString)
  |  |  ------------------
  |  |  |  |  123|    149|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    149|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    149|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  842|    149|    if(U_SUCCESS(*status)) {
  ------------------
  |  Branch (842:8): [True: 149, False: 0]
  ------------------
  843|    149|        result.setTo(true, r, len);
  844|    149|    } else {
  845|      0|        result.setToBogus();
  846|      0|    }
  847|    149|    return result;
  848|    149|}
_ZN6icu_7828ures_getUnicodeStringByIndexEPK15UResourceBundleiP10UErrorCode:
  860|  1.85k|ures_getUnicodeStringByIndex(const UResourceBundle *resB, int32_t indexS, UErrorCode* status) {
  861|  1.85k|    UnicodeString result;
  862|  1.85k|    int32_t len = 0;
  863|  1.85k|    const char16_t* r = ConstChar16Ptr(ures_getStringByIndex(resB, indexS, &len, status));
  ------------------
  |  | 1676|  1.85k|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  123|  1.85k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.85k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.85k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  864|  1.85k|    if(U_SUCCESS(*status)) {
  ------------------
  |  Branch (864:8): [True: 1.85k, False: 0]
  ------------------
  865|  1.85k|        result.setTo(true, r, len);
  866|  1.85k|    } else {
  867|      0|        result.setToBogus();
  868|      0|    }
  869|  1.85k|    return result;
  870|  1.85k|}
_ZN6icu_7826ures_getUnicodeStringByKeyEPK15UResourceBundlePKcP10UErrorCode:
  883|  14.1k|ures_getUnicodeStringByKey(const UResourceBundle *resB, const char* key, UErrorCode* status) {
  884|  14.1k|    UnicodeString result;
  885|  14.1k|    int32_t len = 0;
  886|  14.1k|    const char16_t* r = ConstChar16Ptr(ures_getStringByKey(resB, key, &len, status));
  ------------------
  |  | 1677|  14.1k|#define ures_getStringByKey U_ICU_ENTRY_POINT_RENAME(ures_getStringByKey)
  |  |  ------------------
  |  |  |  |  123|  14.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  14.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  14.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  887|  14.1k|    if(U_SUCCESS(*status)) {
  ------------------
  |  Branch (887:8): [True: 13.9k, False: 206]
  ------------------
  888|  13.9k|        result.setTo(true, r, len);
  889|  13.9k|    } else {
  890|    206|        result.setToBogus();
  891|    206|    }
  892|  14.1k|    return result;
  893|  14.1k|}

date_time_pattern_generator_fuzzer.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  7.38k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
dtptngen.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  6.25M|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
dtptngen.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  2.94M|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
numsys.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  80.4k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
numsys.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  14.1k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
region.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  4.12k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
region.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  2.86k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
calendar.cpp:_ZL9U_FAILURE10UErrorCode:
  737|   127k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
calendar.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  56.1k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
dcfmtsym.cpp:_ZL9U_FAILURE10UErrorCode:
  737|   312k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
dcfmtsym.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  38.0k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
olsontz.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|    234|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
olsontz.cpp:_ZL9U_FAILURE10UErrorCode:
  737|     37|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
simpletz.cpp:_ZL9U_FAILURE10UErrorCode:
  737|     24|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
timezone.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  10.5k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
timezone.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|    400|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
zonemeta.cpp:_ZL9U_FAILURE10UErrorCode:
  737|    144|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
zonemeta.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|    112|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
charstr.cpp:_ZL9U_FAILURE10UErrorCode:
  737|   110M|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
charstr.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  1.11M|    inline UBool U_SUCCESS(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|  40.9k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
locid.cpp:_ZL9U_FAILURE10UErrorCode:
  737|   444k|    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; }
loclikely.cpp:_ZL9U_FAILURE10UErrorCode:
  737|   227k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
loclikely.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|   147k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
loclikelysubtags.cpp:_ZL9U_FAILURE10UErrorCode:
  737|   236k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
loclikelysubtags.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|     20|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
lsr.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  77.0k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
putil.cpp:_ZL9U_FAILURE10UErrorCode:
  737|      4|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
putil.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|      2|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
simpleformatter.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  1.79k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
uarrsort.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  26.6k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
ucurr.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  56.4k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
ucurr.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  54.9k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
uhash.cpp:_ZL9U_FAILURE10UErrorCode:
  737|   765k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
uloc.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  6.09M|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
uloc.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|   199k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
uloc_keytype.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  4.36M|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
uloc_keytype.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  78.6k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
uloc_tag.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  2.84M|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
uloc_tag.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  77.9k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
unifiedcache.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  54.8k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
unifiedcache.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  7.16k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
unistr.cpp:_ZL9U_FAILURE10UErrorCode:
  737|    470|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
unistr.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|    203|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
uresbund.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  20.0M|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
uresbund.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|  5.41M|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
uresdata.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  4.39M|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
ustrcase.cpp:_ZL9U_FAILURE10UErrorCode:
  737|    165|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
ustring.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|   177k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
ustrtrns.cpp:_ZL9U_FAILURE10UErrorCode:
  737|    470|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
uvector.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  2.95k|    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|  1.23M|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
udata.cpp:_ZL9U_FAILURE10UErrorCode:
  737|   426k|    inline UBool U_FAILURE(UErrorCode code) { return code > U_ZERO_ERROR; }
udata.cpp:_ZL9U_SUCCESS10UErrorCode:
  731|   211k|    inline UBool U_SUCCESS(UErrorCode code) { return code <= U_ZERO_ERROR; }
udatamem.cpp:_ZL9U_FAILURE10UErrorCode:
  737|  1.49k|    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_7815ucache_hashKeysE8UElement:
   49|  27.8k|ucache_hashKeys(const UHashTok key) {
   50|  27.8k|    const CacheKeyBase* ckey = static_cast<const CacheKeyBase*>(key.pointer);
   51|  27.8k|    return ckey->hashCode();
   52|  27.8k|}
_ZN6icu_7818ucache_compareKeysE8UElementS0_:
   55|  25.4k|ucache_compareKeys(const UHashTok key1, const UHashTok key2) {
   56|  25.4k|    const CacheKeyBase* p1 = static_cast<const CacheKeyBase*>(key1.pointer);
   57|  25.4k|    const CacheKeyBase* p2 = static_cast<const CacheKeyBase*>(key2.pointer);
   58|  25.4k|    return *p1 == *p2;
   59|  25.4k|}
_ZN6icu_7816ucache_deleteKeyEPv:
   62|  6.16k|ucache_deleteKey(void *obj) {
   63|  6.16k|    CacheKeyBase* p = static_cast<CacheKeyBase*>(obj);
   64|  6.16k|    delete p;
   65|  6.16k|}
_ZN6icu_7812CacheKeyBaseD2Ev:
   67|  19.6k|CacheKeyBase::~CacheKeyBase() {
   68|  19.6k|}
_ZN6icu_7812UnifiedCache11getInstanceER10UErrorCode:
   88|  13.5k|UnifiedCache *UnifiedCache::getInstance(UErrorCode &status) {
   89|  13.5k|    umtx_initOnce(gCacheInitOnce, &cacheInit, status);
   90|  13.5k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (90:9): [True: 0, False: 13.5k]
  ------------------
   91|      0|        return nullptr;
   92|      0|    }
   93|  13.5k|    U_ASSERT(gCache != nullptr);
  ------------------
  |  |   35|  13.5k|#   define U_ASSERT(exp) (void)0
  ------------------
   94|  13.5k|    return gCache;
   95|  13.5k|}
_ZN6icu_7812UnifiedCacheC2ER10UErrorCode:
   98|      1|        fHashtable(nullptr),
   99|      1|        fEvictPos(UHASH_FIRST),
  ------------------
  |  |  610|      1|#define UHASH_FIRST (-1)
  ------------------
  100|      1|        fNumValuesTotal(0),
  101|      1|        fNumValuesInUse(0),
  102|      1|        fMaxUnused(DEFAULT_MAX_UNUSED),
  103|      1|        fMaxPercentageOfInUse(DEFAULT_PERCENTAGE_OF_IN_USE),
  104|      1|        fAutoEvictedCount(0),
  105|      1|        fNoValue(nullptr) {
  106|      1|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (106:9): [True: 0, False: 1]
  ------------------
  107|      0|        return;
  108|      0|    }
  109|      1|    fNoValue = new SharedObject();
  110|      1|    if (fNoValue == nullptr) {
  ------------------
  |  Branch (110:9): [True: 0, False: 1]
  ------------------
  111|      0|        status = U_MEMORY_ALLOCATION_ERROR;
  112|      0|        return;
  113|      0|    }
  114|      1|    fNoValue->softRefCount = 1;  // Add fake references to prevent fNoValue from being deleted
  115|      1|    fNoValue->hardRefCount = 1;  // when other references to it are removed.
  116|      1|    fNoValue->cachePtr = this;
  117|       |
  118|      1|    fHashtable = uhash_open(
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|      1|            &ucache_hashKeys,
  120|      1|            &ucache_compareKeys,
  121|      1|            nullptr,
  122|      1|            &status);
  123|      1|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (123:9): [True: 0, False: 1]
  ------------------
  124|      0|        return;
  125|      0|    }
  126|      1|    uhash_setKeyDeleter(fHashtable, &ucache_deleteKey);
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  127|      1|}
_ZNK6icu_7812UnifiedCache24handleUnreferencedObjectEv:
  167|  13.5k|void UnifiedCache::handleUnreferencedObject() const {
  168|  13.5k|    std::lock_guard<std::mutex> lock(*gCacheMutex);
  169|  13.5k|    --fNumValuesInUse;
  170|  13.5k|    _runEvictionSlice();
  171|  13.5k|}
_ZNK6icu_7812UnifiedCache12_nextElementEv:
  237|  6.16k|UnifiedCache::_nextElement() const {
  238|  6.16k|    const UHashElement *element = uhash_nextElement(fHashtable, &fEvictPos);
  ------------------
  |  | 1029|  6.16k|#define uhash_nextElement U_ICU_ENTRY_POINT_RENAME(uhash_nextElement)
  |  |  ------------------
  |  |  |  |  123|  6.16k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  6.16k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  6.16k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|  6.16k|    if (element == nullptr) {
  ------------------
  |  Branch (239:9): [True: 4, False: 6.16k]
  ------------------
  240|      4|        fEvictPos = UHASH_FIRST;
  ------------------
  |  |  610|      4|#define UHASH_FIRST (-1)
  ------------------
  241|      4|        return uhash_nextElement(fHashtable, &fEvictPos);
  ------------------
  |  | 1029|      4|#define uhash_nextElement U_ICU_ENTRY_POINT_RENAME(uhash_nextElement)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  242|      4|    }
  243|  6.16k|    return element;
  244|  6.16k|}
_ZNK6icu_7812UnifiedCache27_computeCountOfItemsToEvictEv:
  266|  20.6k|int32_t UnifiedCache::_computeCountOfItemsToEvict() const {
  267|  20.6k|    int32_t totalItems = uhash_count(fHashtable);
  ------------------
  |  | 1001|  20.6k|#define uhash_count U_ICU_ENTRY_POINT_RENAME(uhash_count)
  |  |  ------------------
  |  |  |  |  123|  20.6k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  20.6k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  20.6k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|  20.6k|    int32_t evictableItems = totalItems - fNumValuesInUse;
  269|       |
  270|  20.6k|    int32_t unusedLimitByPercentage = fNumValuesInUse * fMaxPercentageOfInUse / 100;
  271|  20.6k|    int32_t unusedLimit = std::max(unusedLimitByPercentage, fMaxUnused);
  272|  20.6k|    int32_t countOfItemsToEvict = std::max<int32_t>(0, evictableItems - unusedLimit);
  273|  20.6k|    return countOfItemsToEvict;
  274|  20.6k|}
_ZNK6icu_7812UnifiedCache17_runEvictionSliceEv:
  276|  20.6k|void UnifiedCache::_runEvictionSlice() const {
  277|  20.6k|    int32_t maxItemsToEvict = _computeCountOfItemsToEvict();
  278|  20.6k|    if (maxItemsToEvict <= 0) {
  ------------------
  |  Branch (278:9): [True: 14.5k, False: 6.16k]
  ------------------
  279|  14.5k|        return;
  280|  14.5k|    }
  281|  6.16k|    for (int32_t i = 0; i < MAX_EVICT_ITERATIONS; ++i) {
  ------------------
  |  Branch (281:25): [True: 6.16k, False: 0]
  ------------------
  282|  6.16k|        const UHashElement *element = _nextElement();
  283|  6.16k|        if (element == nullptr) {
  ------------------
  |  Branch (283:13): [True: 0, False: 6.16k]
  ------------------
  284|      0|            break;
  285|      0|        }
  286|  6.16k|        if (_isEvictable(element)) {
  ------------------
  |  Branch (286:13): [True: 6.16k, False: 0]
  ------------------
  287|  6.16k|            const SharedObject *sharedObject =
  288|  6.16k|                    static_cast<const SharedObject*>(element->value.pointer);
  289|  6.16k|            uhash_removeElement(fHashtable, element);
  ------------------
  |  | 1037|  6.16k|#define uhash_removeElement U_ICU_ENTRY_POINT_RENAME(uhash_removeElement)
  |  |  ------------------
  |  |  |  |  123|  6.16k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  6.16k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  6.16k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  290|  6.16k|            removeSoftRef(sharedObject);   // Deletes sharedObject when SoftRefCount goes to zero.
  291|  6.16k|            ++fAutoEvictedCount;
  292|  6.16k|            if (--maxItemsToEvict == 0) {
  ------------------
  |  Branch (292:17): [True: 6.16k, False: 0]
  ------------------
  293|  6.16k|                break;
  294|  6.16k|            }
  295|  6.16k|        }
  296|  6.16k|    }
  297|  6.16k|}
_ZNK6icu_7812UnifiedCache7_putNewERKNS_12CacheKeyBaseEPKNS_12SharedObjectE10UErrorCodeRS7_:
  303|  7.16k|        UErrorCode &status) const {
  304|  7.16k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (304:9): [True: 0, False: 7.16k]
  ------------------
  305|      0|        return;
  306|      0|    }
  307|  7.16k|    CacheKeyBase *keyToAdopt = key.clone();
  308|  7.16k|    if (keyToAdopt == nullptr) {
  ------------------
  |  Branch (308:9): [True: 0, False: 7.16k]
  ------------------
  309|      0|        status = U_MEMORY_ALLOCATION_ERROR;
  310|      0|        return;
  311|      0|    }
  312|  7.16k|    keyToAdopt->fCreationStatus = creationStatus;
  313|  7.16k|    if (value->softRefCount == 0) {
  ------------------
  |  Branch (313:9): [True: 0, False: 7.16k]
  ------------------
  314|      0|        _registerPrimary(keyToAdopt, value);
  315|      0|    }
  316|  7.16k|    void *oldValue = uhash_put(fHashtable, keyToAdopt, (void *) value, &status);
  ------------------
  |  | 1032|  7.16k|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|  7.16k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.16k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.16k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|  7.16k|    U_ASSERT(oldValue == nullptr);
  ------------------
  |  |   35|  7.16k|#   define U_ASSERT(exp) (void)0
  ------------------
  318|  7.16k|    (void)oldValue;
  319|  7.16k|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (319:9): [True: 7.16k, False: 0]
  ------------------
  320|  7.16k|        value->softRefCount++;
  321|  7.16k|    }
  322|  7.16k|}
_ZNK6icu_7812UnifiedCache18_putIfAbsentAndGetERKNS_12CacheKeyBaseERPKNS_12SharedObjectER10UErrorCode:
  327|  7.16k|        UErrorCode &status) const {
  328|  7.16k|    std::lock_guard<std::mutex> lock(*gCacheMutex);
  329|  7.16k|    const UHashElement *element = uhash_find(fHashtable, &key);
  ------------------
  |  | 1006|  7.16k|#define uhash_find U_ICU_ENTRY_POINT_RENAME(uhash_find)
  |  |  ------------------
  |  |  |  |  123|  7.16k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.16k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.16k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  330|  7.16k|    if (element != nullptr && !_inProgress(element)) {
  ------------------
  |  Branch (330:9): [True: 7.16k, False: 0]
  |  Branch (330:31): [True: 0, False: 7.16k]
  ------------------
  331|      0|        _fetch(element, value, status);
  332|      0|        return;
  333|      0|    }
  334|  7.16k|    if (element == nullptr) {
  ------------------
  |  Branch (334:9): [True: 0, False: 7.16k]
  ------------------
  335|      0|        UErrorCode putError = U_ZERO_ERROR;
  336|       |        // best-effort basis only.
  337|      0|        _putNew(key, value, status, putError);
  338|  7.16k|    } else {
  339|  7.16k|        _put(element, value, status);
  340|  7.16k|    }
  341|       |    // Run an eviction slice. This will run even if we added a primary entry
  342|       |    // which doesn't increase the unused count, but that is still o.k
  343|  7.16k|    _runEvictionSlice();
  344|  7.16k|}
_ZNK6icu_7812UnifiedCache5_pollERKNS_12CacheKeyBaseERPKNS_12SharedObjectER10UErrorCode:
  350|  13.5k|        UErrorCode &status) const {
  351|  13.5k|    U_ASSERT(value == nullptr);
  ------------------
  |  |   35|  13.5k|#   define U_ASSERT(exp) (void)0
  ------------------
  352|  13.5k|    U_ASSERT(status == U_ZERO_ERROR);
  ------------------
  |  |   35|  13.5k|#   define U_ASSERT(exp) (void)0
  ------------------
  353|  13.5k|    std::unique_lock<std::mutex> lock(*gCacheMutex);
  354|  13.5k|    const UHashElement *element = uhash_find(fHashtable, &key);
  ------------------
  |  | 1006|  13.5k|#define uhash_find U_ICU_ENTRY_POINT_RENAME(uhash_find)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  355|       |
  356|       |    // If the hash table contains an inProgress placeholder entry for this key,
  357|       |    // this means that another thread is currently constructing the value object.
  358|       |    // Loop, waiting for that construction to complete.
  359|  13.5k|     while (element != nullptr && _inProgress(element)) {
  ------------------
  |  Branch (359:13): [True: 6.35k, False: 7.16k]
  |  Branch (359:35): [True: 0, False: 6.35k]
  ------------------
  360|      0|         gInProgressValueAddedCond->wait(lock);
  361|      0|         element = uhash_find(fHashtable, &key);
  ------------------
  |  | 1006|      0|#define uhash_find U_ICU_ENTRY_POINT_RENAME(uhash_find)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  362|      0|    }
  363|       |
  364|       |    // If the hash table contains an entry for the key,
  365|       |    // fetch out the contents and return them.
  366|  13.5k|    if (element != nullptr) {
  ------------------
  |  Branch (366:9): [True: 6.35k, False: 7.16k]
  ------------------
  367|  6.35k|         _fetch(element, value, status);
  368|  6.35k|        return true;
  369|  6.35k|    }
  370|       |
  371|       |    // The hash table contained nothing for this key.
  372|       |    // Insert an inProgress place holder value.
  373|       |    // Our caller will create the final value and update the hash table.
  374|  7.16k|    _putNew(key, fNoValue, U_ZERO_ERROR, status);
  375|  7.16k|    return false;
  376|  13.5k|}
_ZNK6icu_7812UnifiedCache4_getERKNS_12CacheKeyBaseERPKNS_12SharedObjectEPKvR10UErrorCode:
  382|  13.5k|        UErrorCode &status) const {
  383|  13.5k|    U_ASSERT(value == nullptr);
  ------------------
  |  |   35|  13.5k|#   define U_ASSERT(exp) (void)0
  ------------------
  384|  13.5k|    U_ASSERT(status == U_ZERO_ERROR);
  ------------------
  |  |   35|  13.5k|#   define U_ASSERT(exp) (void)0
  ------------------
  385|  13.5k|    if (_poll(key, value, status)) {
  ------------------
  |  Branch (385:9): [True: 6.35k, False: 7.16k]
  ------------------
  386|  6.35k|        if (value == fNoValue) {
  ------------------
  |  Branch (386:13): [True: 0, False: 6.35k]
  ------------------
  387|      0|            SharedObject::clearPtr(value);
  388|      0|        }
  389|  6.35k|        return;
  390|  6.35k|    }
  391|  7.16k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (391:9): [True: 0, False: 7.16k]
  ------------------
  392|      0|        return;
  393|      0|    }
  394|  7.16k|    value = key.createObject(creationContext, status);
  395|  7.16k|    U_ASSERT(value == nullptr || value->hasHardReferences());
  ------------------
  |  |   35|  7.16k|#   define U_ASSERT(exp) (void)0
  ------------------
  396|  7.16k|    U_ASSERT(value != nullptr || status != U_ZERO_ERROR);
  ------------------
  |  |   35|  7.16k|#   define U_ASSERT(exp) (void)0
  ------------------
  397|  7.16k|    if (value == nullptr) {
  ------------------
  |  Branch (397:9): [True: 0, False: 7.16k]
  ------------------
  398|      0|        SharedObject::copyPtr(fNoValue, value);
  399|      0|    }
  400|  7.16k|    _putIfAbsentAndGet(key, value, status);
  401|  7.16k|    if (value == fNoValue) {
  ------------------
  |  Branch (401:9): [True: 0, False: 7.16k]
  ------------------
  402|      0|        SharedObject::clearPtr(value);
  403|      0|    }
  404|  7.16k|}
_ZNK6icu_7812UnifiedCache16_registerPrimaryEPKNS_12CacheKeyBaseEPKNS_12SharedObjectE:
  407|  7.16k|            const CacheKeyBase *theKey, const SharedObject *value) const {
  408|  7.16k|    theKey->fIsPrimary = true;
  409|  7.16k|    value->cachePtr = this;
  410|  7.16k|    ++fNumValuesTotal;
  411|  7.16k|    ++fNumValuesInUse;
  412|  7.16k|}
_ZNK6icu_7812UnifiedCache4_putEPK12UHashElementPKNS_12SharedObjectE10UErrorCode:
  417|  7.16k|        const UErrorCode status) const {
  418|  7.16k|    U_ASSERT(_inProgress(element));
  ------------------
  |  |   35|  7.16k|#   define U_ASSERT(exp) (void)0
  ------------------
  419|  7.16k|    const CacheKeyBase* theKey = static_cast<const CacheKeyBase*>(element->key.pointer);
  420|  7.16k|    const SharedObject* oldValue = static_cast<const SharedObject*>(element->value.pointer);
  421|  7.16k|    theKey->fCreationStatus = status;
  422|  7.16k|    if (value->softRefCount == 0) {
  ------------------
  |  Branch (422:9): [True: 7.16k, False: 0]
  ------------------
  423|  7.16k|        _registerPrimary(theKey, value);
  424|  7.16k|    }
  425|  7.16k|    value->softRefCount++;
  426|  7.16k|    UHashElement *ptr = const_cast<UHashElement *>(element);
  427|  7.16k|    ptr->value.pointer = (void *) value;
  428|  7.16k|    U_ASSERT(oldValue == fNoValue);
  ------------------
  |  |   35|  7.16k|#   define U_ASSERT(exp) (void)0
  ------------------
  429|  7.16k|    removeSoftRef(oldValue);
  430|       |
  431|       |    // Tell waiting threads that we replace in-progress status with
  432|       |    // an error.
  433|  7.16k|    gInProgressValueAddedCond->notify_all();
  434|  7.16k|}
_ZNK6icu_7812UnifiedCache6_fetchEPK12UHashElementRPKNS_12SharedObjectER10UErrorCode:
  439|  19.8k|        UErrorCode &status) const {
  440|  19.8k|    const CacheKeyBase* theKey = static_cast<const CacheKeyBase*>(element->key.pointer);
  441|  19.8k|    status = theKey->fCreationStatus;
  442|       |
  443|       |    // Since we have the cache lock, calling regular SharedObject add/removeRef
  444|       |    // could cause us to deadlock on ourselves since they may need to lock
  445|       |    // the cache mutex.
  446|  19.8k|    removeHardRef(value);
  447|  19.8k|    value = static_cast<const SharedObject *>(element->value.pointer);
  448|  19.8k|    addHardRef(value);
  449|  19.8k|}
_ZNK6icu_7812UnifiedCache11_inProgressEPK12UHashElement:
  452|  13.5k|UBool UnifiedCache::_inProgress(const UHashElement* element) const {
  453|  13.5k|    UErrorCode status = U_ZERO_ERROR;
  454|  13.5k|    const SharedObject * value = nullptr;
  455|  13.5k|    _fetch(element, value, status);
  456|  13.5k|    UBool result = _inProgress(value, status);
  457|  13.5k|    removeHardRef(value);
  458|  13.5k|    return result;
  459|  13.5k|}
_ZNK6icu_7812UnifiedCache11_inProgressEPKNS_12SharedObjectE10UErrorCode:
  462|  19.6k|        const SharedObject* theValue, UErrorCode creationStatus) const {
  463|  19.6k|    return (theValue == fNoValue && creationStatus == U_ZERO_ERROR);
  ------------------
  |  Branch (463:13): [True: 7.16k, False: 12.5k]
  |  Branch (463:37): [True: 7.16k, False: 0]
  ------------------
  464|  19.6k|}
_ZNK6icu_7812UnifiedCache12_isEvictableEPK12UHashElement:
  467|  6.16k|{
  468|  6.16k|    const CacheKeyBase* theKey = static_cast<const CacheKeyBase*>(element->key.pointer);
  469|  6.16k|    const SharedObject* theValue = static_cast<const SharedObject*>(element->value.pointer);
  470|       |
  471|       |    // Entries that are under construction are never evictable
  472|  6.16k|    if (_inProgress(theValue, theKey->fCreationStatus)) {
  ------------------
  |  Branch (472:9): [True: 0, False: 6.16k]
  ------------------
  473|      0|        return false;
  474|      0|    }
  475|       |
  476|       |    // We can evict entries that are either not a primary or have just
  477|       |    // one reference (The one reference being from the cache itself).
  478|  6.16k|    return (!theKey->fIsPrimary || (theValue->softRefCount == 1 && theValue->noHardReferences()));
  ------------------
  |  Branch (478:13): [True: 0, False: 6.16k]
  |  Branch (478:37): [True: 6.16k, False: 0]
  |  Branch (478:68): [True: 6.16k, False: 0]
  ------------------
  479|  6.16k|}
_ZNK6icu_7812UnifiedCache13removeSoftRefEPKNS_12SharedObjectE:
  481|  13.3k|void UnifiedCache::removeSoftRef(const SharedObject *value) const {
  482|  13.3k|    U_ASSERT(value->cachePtr == this);
  ------------------
  |  |   35|  13.3k|#   define U_ASSERT(exp) (void)0
  ------------------
  483|  13.3k|    U_ASSERT(value->softRefCount > 0);
  ------------------
  |  |   35|  13.3k|#   define U_ASSERT(exp) (void)0
  ------------------
  484|  13.3k|    if (--value->softRefCount == 0) {
  ------------------
  |  Branch (484:9): [True: 6.16k, False: 7.16k]
  ------------------
  485|  6.16k|        --fNumValuesTotal;
  486|  6.16k|        if (value->noHardReferences()) {
  ------------------
  |  Branch (486:13): [True: 6.16k, False: 0]
  ------------------
  487|  6.16k|            delete value;
  488|  6.16k|        } else {
  489|       |            // This path only happens from flush(all). Which only happens from the
  490|       |            // UnifiedCache destructor.  Nulling out value.cacheptr changes the behavior
  491|       |            // of value.removeRef(), causing the deletion to be done there.
  492|      0|            value->cachePtr = nullptr;
  493|      0|        }
  494|  6.16k|    }
  495|  13.3k|}
_ZNK6icu_7812UnifiedCache13removeHardRefEPKNS_12SharedObjectE:
  497|  33.3k|int32_t UnifiedCache::removeHardRef(const SharedObject *value) const {
  498|  33.3k|    int refCount = 0;
  499|  33.3k|    if (value) {
  ------------------
  |  Branch (499:9): [True: 13.5k, False: 19.8k]
  ------------------
  500|  13.5k|        refCount = umtx_atomic_dec(&value->hardRefCount);
  501|  13.5k|        U_ASSERT(refCount >= 0);
  ------------------
  |  |   35|  13.5k|#   define U_ASSERT(exp) (void)0
  ------------------
  502|  13.5k|        if (refCount == 0) {
  ------------------
  |  Branch (502:13): [True: 6.35k, False: 7.16k]
  ------------------
  503|  6.35k|            --fNumValuesInUse;
  504|  6.35k|        }
  505|  13.5k|    }
  506|  33.3k|    return refCount;
  507|  33.3k|}
_ZNK6icu_7812UnifiedCache10addHardRefEPKNS_12SharedObjectE:
  509|  19.8k|int32_t UnifiedCache::addHardRef(const SharedObject *value) const {
  510|  19.8k|    int refCount = 0;
  511|  19.8k|    if (value) {
  ------------------
  |  Branch (511:9): [True: 19.8k, False: 0]
  ------------------
  512|  19.8k|        refCount = umtx_atomic_inc(&value->hardRefCount);
  513|  19.8k|        U_ASSERT(refCount >= 1);
  ------------------
  |  |   35|  19.8k|#   define U_ASSERT(exp) (void)0
  ------------------
  514|  19.8k|        if (refCount == 1) {
  ------------------
  |  Branch (514:13): [True: 12.7k, False: 7.16k]
  ------------------
  515|  12.7k|            fNumValuesInUse++;
  516|  12.7k|        }
  517|  19.8k|    }
  518|  19.8k|    return refCount;
  519|  19.8k|}
unifiedcache.cpp:_ZN6icu_78L9cacheInitER10UErrorCode:
   70|      1|static void U_CALLCONV cacheInit(UErrorCode &status) {
   71|      1|    U_ASSERT(gCache == nullptr);
  ------------------
  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  ------------------
   72|      1|    ucln_common_registerCleanup(
  ------------------
  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   73|      1|            UCLN_COMMON_UNIFIED_CACHE, unifiedcache_cleanup);
   74|       |
   75|      1|    gCacheMutex = 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();} ()
  ------------------
   76|      1|    gInProgressValueAddedCond = 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();} ()
  ------------------
   77|      1|    gCache = new UnifiedCache(status);
   78|      1|    if (gCache == nullptr) {
  ------------------
  |  Branch (78:9): [True: 0, False: 1]
  ------------------
   79|      0|        status = U_MEMORY_ALLOCATION_ERROR;
   80|      0|    }
   81|      1|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (81:9): [True: 0, False: 1]
  ------------------
   82|      0|        delete gCache;
   83|      0|        gCache = nullptr;
   84|      0|        return;
   85|      0|    }
   86|      1|}

_ZN6icu_7812UnifiedCache11getByLocaleINS_14SharedCalendarEEEvRKNS_6LocaleERPKT_R10UErrorCode:
  269|  13.5k|           const Locale &loc, const T *&ptr, UErrorCode &status) {
  270|  13.5k|       const UnifiedCache *cache = getInstance(status);
  271|  13.5k|       if (U_FAILURE(status)) {
  ------------------
  |  Branch (271:12): [True: 0, False: 13.5k]
  ------------------
  272|      0|           return;
  273|      0|       }
  274|  13.5k|       cache->get(LocaleCacheKey<T>(loc), ptr, status);
  275|  13.5k|   }
_ZNK6icu_7812UnifiedCache3getINS_14SharedCalendarEEEvRKNS_8CacheKeyIT_EERPKS4_R10UErrorCode:
  205|  13.5k|           UErrorCode &status) const {
  206|  13.5k|       get(key, nullptr, ptr, status);
  207|  13.5k|   }
_ZNK6icu_7812UnifiedCache3getINS_14SharedCalendarEEEvRKNS_8CacheKeyIT_EEPKvRPKS4_R10UErrorCode:
  228|  13.5k|           UErrorCode &status) const {
  229|  13.5k|       if (U_FAILURE(status)) {
  ------------------
  |  Branch (229:12): [True: 0, False: 13.5k]
  ------------------
  230|      0|           return;
  231|      0|       }
  232|  13.5k|       UErrorCode creationStatus = U_ZERO_ERROR;
  233|  13.5k|       const SharedObject *value = nullptr;
  234|  13.5k|       _get(key, value, creationContext, creationStatus);
  235|  13.5k|       const T *tvalue = (const T *) value;
  236|  13.5k|       if (U_SUCCESS(creationStatus)) {
  ------------------
  |  Branch (236:12): [True: 13.5k, False: 0]
  ------------------
  237|  13.5k|           SharedObject::copyPtr(tvalue, ptr);
  238|  13.5k|       }
  239|  13.5k|       SharedObject::clearPtr(tvalue);
  240|       |       // Take care not to overwrite a warning status passed in with
  241|       |       // another warning or U_ZERO_ERROR.
  242|  13.5k|       if (status == U_ZERO_ERROR || U_FAILURE(creationStatus)) {
  ------------------
  |  Branch (242:12): [True: 4.86k, False: 8.65k]
  |  Branch (242:38): [True: 0, False: 8.65k]
  ------------------
  243|  4.86k|           status = creationStatus;
  244|  4.86k|       }
  245|  13.5k|   }
_ZN6icu_7814LocaleCacheKeyINS_14SharedCalendarEEC2ERKNS_6LocaleE:
  151|  13.5k|   LocaleCacheKey(const Locale &loc) : fLoc(loc) {}
_ZN6icu_7812CacheKeyBaseC2Ev:
   37|  13.5k|   CacheKeyBase() : fCreationStatus(U_ZERO_ERROR), fIsPrimary(false) {}
_ZNK6icu_788CacheKeyINS_14SharedCalendarEE8hashCodeEv:
  110|  27.8k|   virtual int32_t hashCode() const override {
  111|  27.8k|       const char *s = typeid(T).name();
  112|  27.8k|       return ustr_hashCharsN(s, static_cast<int32_t>(uprv_strlen(s)));
  ------------------
  |  | 1878|  27.8k|#define ustr_hashCharsN U_ICU_ENTRY_POINT_RENAME(ustr_hashCharsN)
  |  |  ------------------
  |  |  |  |  123|  27.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  27.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  27.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                     return ustr_hashCharsN(s, static_cast<int32_t>(uprv_strlen(s)));
  ------------------
  |  |   37|  27.8k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  27.8k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  113|  27.8k|   }
_ZNK6icu_788CacheKeyINS_14SharedCalendarEE6equalsERKNS_12CacheKeyBaseE:
  129|  25.4k|   virtual bool equals(const CacheKeyBase &other) const override {
  130|  25.4k|       return this == &other || typeid(*this) == typeid(other);
  ------------------
  |  Branch (130:15): [True: 0, False: 25.4k]
  |  Branch (130:33): [True: 25.4k, False: 0]
  ------------------
  131|  25.4k|   }
_ZNK6icu_7814LocaleCacheKeyINS_14SharedCalendarEE8hashCodeEv:
  155|  27.8k|   virtual int32_t hashCode() const override {
  156|  27.8k|       return (int32_t)(37u * (uint32_t)CacheKey<T>::hashCode() + (uint32_t)fLoc.hashCode());
  157|  27.8k|   }
_ZNK6icu_7814LocaleCacheKeyINS_14SharedCalendarEE5cloneEv:
  161|  7.16k|   virtual CacheKeyBase *clone() const override {
  162|  7.16k|       return new LocaleCacheKey<T>(*this);
  163|  7.16k|   }
_ZN6icu_7814LocaleCacheKeyINS_14SharedCalendarEEC2ERKS2_:
  153|  7.16k|           : CacheKey<T>(other), fLoc(other.fLoc) { }
_ZN6icu_7812CacheKeyBaseC2ERKS0_:
   43|  7.16k|           : UObject(other), fCreationStatus(other.fCreationStatus), fIsPrimary(false) { }
_ZNK6icu_7814LocaleCacheKeyINS_14SharedCalendarEE6equalsERKNS_12CacheKeyBaseE:
  142|  25.4k|   virtual bool equals(const CacheKeyBase &other) const override {
  143|  25.4k|       if (!CacheKey<T>::equals(other)) {
  ------------------
  |  Branch (143:12): [True: 0, False: 25.4k]
  ------------------
  144|      0|           return false;
  145|      0|       }
  146|       |       // We know this and other are of same class because equals() on
  147|       |       // CacheKey returned true.
  148|  25.4k|       return operator==(static_cast<const LocaleCacheKey<T> &>(other));
  149|  25.4k|   }
_ZNK6icu_7814LocaleCacheKeyINS_14SharedCalendarEEeqERKS2_:
  158|  25.4k|   inline bool operator == (const LocaleCacheKey<T> &other) const {
  159|  25.4k|       return fLoc == other.fLoc;
  160|  25.4k|   }
_ZN6icu_7814LocaleCacheKeyINS_14SharedCalendarEED2Ev:
  154|  19.6k|   virtual ~LocaleCacheKey() { }
_ZN6icu_78eqERKNS_12CacheKeyBaseES2_:
   79|  25.4k|                                 const CacheKeyBase& rhs) {
   80|  25.4k|       return lhs.equals(rhs);
   81|  25.4k|   }

_ZN6icu_7817UniqueCharStringsC2ER10UErrorCode:
   27|      2|    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|      2|        uhash_init(&map, uhash_hashUChars, uhash_compareUChars, uhash_compareLong, &errorCode);
  ------------------
  |  | 1022|      2|#define uhash_init U_ICU_ENTRY_POINT_RENAME(uhash_init)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      uhash_init(&map, uhash_hashUChars, uhash_compareUChars, uhash_compareLong, &errorCode);
  ------------------
  |  | 1016|      2|#define uhash_hashUChars U_ICU_ENTRY_POINT_RENAME(uhash_hashUChars)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      uhash_init(&map, uhash_hashUChars, uhash_compareUChars, uhash_compareLong, &errorCode);
  ------------------
  |  |  998|      2|#define uhash_compareUChars U_ICU_ENTRY_POINT_RENAME(uhash_compareUChars)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      uhash_init(&map, uhash_hashUChars, uhash_compareUChars, uhash_compareLong, &errorCode);
  ------------------
  |  |  996|      2|#define uhash_compareLong U_ICU_ENTRY_POINT_RENAME(uhash_compareLong)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   32|      2|        if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (32:13): [True: 0, False: 2]
  ------------------
   33|      2|        strings = new CharString();
   34|      2|        if (strings == nullptr) {
  ------------------
  |  Branch (34:13): [True: 0, False: 2]
  ------------------
   35|      0|            errorCode = U_MEMORY_ALLOCATION_ERROR;
   36|      0|        }
   37|      2|    }
_ZN6icu_7817UniqueCharStrings3addEPKDsR10UErrorCode:
   58|  9.23k|    int32_t add(const char16_t*p, UErrorCode &errorCode) {
   59|  9.23k|        if (U_FAILURE(errorCode)) { return -1; }
  ------------------
  |  Branch (59:13): [True: 0, False: 9.23k]
  ------------------
   60|  9.23k|        if (isFrozen) {
  ------------------
  |  Branch (60:13): [True: 0, False: 9.23k]
  ------------------
   61|      0|            errorCode = U_NO_WRITE_PERMISSION;
   62|      0|            return -1;
   63|      0|        }
   64|       |        // The string points into the resource bundle.
   65|  9.23k|        int32_t oldIndex = uhash_geti(&map, p);
  ------------------
  |  | 1008|  9.23k|#define uhash_geti U_ICU_ENTRY_POINT_RENAME(uhash_geti)
  |  |  ------------------
  |  |  |  |  123|  9.23k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  9.23k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  9.23k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   66|  9.23k|        if (oldIndex != 0) {  // found duplicate
  ------------------
  |  Branch (66:13): [True: 508, False: 8.72k]
  ------------------
   67|    508|            return oldIndex;
   68|    508|        }
   69|       |        // Explicit NUL terminator for the previous string.
   70|       |        // The strings object is also terminated with one implicit NUL.
   71|  8.72k|        strings->append(0, errorCode);
   72|  8.72k|        int32_t newIndex = strings->length();
   73|  8.72k|        strings->appendInvariantChars(p, u_strlen(p), errorCode);
  ------------------
  |  |  393|  8.72k|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|  8.72k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  8.72k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  8.72k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   74|  8.72k|        uhash_puti(&map, const_cast<char16_t *>(p), newIndex, &errorCode);
  ------------------
  |  | 1033|  8.72k|#define uhash_puti U_ICU_ENTRY_POINT_RENAME(uhash_puti)
  |  |  ------------------
  |  |  |  |  123|  8.72k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  8.72k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  8.72k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   75|  8.72k|        return newIndex;
   76|  9.23k|    }
_ZN6icu_7817UniqueCharStrings6freezeEv:
  100|      2|    void freeze() { isFrozen = true; }
_ZNK6icu_7817UniqueCharStrings3getEi:
  106|  24.3k|    const char *get(int32_t i) const {
  107|  24.3k|        U_ASSERT(isFrozen);
  ------------------
  |  |   35|  24.3k|#   define U_ASSERT(exp) (void)0
  ------------------
  108|  24.3k|        return isFrozen && i > 0 ? strings->data() + i : nullptr;
  ------------------
  |  Branch (108:16): [True: 24.3k, False: 0]
  |  Branch (108:28): [True: 24.3k, False: 0]
  ------------------
  109|  24.3k|    }
_ZN6icu_7817UniqueCharStrings17orphanCharStringsEv:
   44|      2|    CharString *orphanCharStrings() {
   45|      2|        CharString *result = strings;
   46|      2|        strings = nullptr;
   47|      2|        return result;
   48|      2|    }
_ZN6icu_7817UniqueCharStringsD2Ev:
   38|      2|    ~UniqueCharStrings() {
   39|      2|        uhash_close(&map);
  ------------------
  |  |  991|      2|#define uhash_close U_ICU_ENTRY_POINT_RENAME(uhash_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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   40|      2|        delete strings;
   41|      2|    }
_ZN6icu_7817UniqueCharStrings10addByValueENS_13UnicodeStringER10UErrorCode:
   81|  22.5k|    int32_t addByValue(UnicodeString s, UErrorCode &errorCode) {
   82|  22.5k|        if (U_FAILURE(errorCode)) { return -1; }
  ------------------
  |  Branch (82:13): [True: 0, False: 22.5k]
  ------------------
   83|  22.5k|        if (isFrozen) {
  ------------------
  |  Branch (83:13): [True: 0, False: 22.5k]
  ------------------
   84|      0|            errorCode = U_NO_WRITE_PERMISSION;
   85|      0|            return -1;
   86|      0|        }
   87|  22.5k|        int32_t oldIndex = uhash_geti(&map, s.getTerminatedBuffer());
  ------------------
  |  | 1008|  22.5k|#define uhash_geti U_ICU_ENTRY_POINT_RENAME(uhash_geti)
  |  |  ------------------
  |  |  |  |  123|  22.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  22.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  22.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   88|  22.5k|        if (oldIndex != 0) {  // found duplicate
  ------------------
  |  Branch (88:13): [True: 15.1k, False: 7.36k]
  ------------------
   89|  15.1k|            return oldIndex;
   90|  15.1k|        }
   91|       |        // We need to store the string content of the UnicodeString.
   92|  7.36k|        UnicodeString *key = keyStore.create(s);
   93|  7.36k|        if (key == nullptr) {
  ------------------
  |  Branch (93:13): [True: 0, False: 7.36k]
  ------------------
   94|      0|            errorCode = U_MEMORY_ALLOCATION_ERROR;
   95|      0|            return -1;
   96|      0|        }
   97|  7.36k|        return add(key->getTerminatedBuffer(), errorCode);
   98|  7.36k|    }

_ZN6icu_7811ReplaceableD2Ev:
  106|  17.2M|Replaceable::~Replaceable() {}
_ZN6icu_7813UnicodeString6addRefEv:
  146|  2.12k|UnicodeString::addRef() {
  147|  2.12k|  umtx_atomic_inc(reinterpret_cast<u_atomic_int32_t*>(fUnion.fFields.fArray) - 1);
  148|  2.12k|}
_ZN6icu_7813UnicodeString9removeRefEv:
  151|  17.4k|UnicodeString::removeRef() {
  152|  17.4k|  return umtx_atomic_dec(reinterpret_cast<u_atomic_int32_t*>(fUnion.fFields.fArray) - 1);
  153|  17.4k|}
_ZNK6icu_7813UnicodeString8refCountEv:
  156|  82.1M|UnicodeString::refCount() const {
  157|  82.1M|  return umtx_loadAcquire(*(reinterpret_cast<u_atomic_int32_t*>(fUnion.fFields.fArray) - 1));
  158|  82.1M|}
_ZN6icu_7813UnicodeString12releaseArrayEv:
  161|  26.4M|UnicodeString::releaseArray() {
  162|  26.4M|  if((fUnion.fFields.fLengthAndFlags & kRefCounted) && removeRef() == 0) {
  ------------------
  |  Branch (162:6): [True: 17.4k, False: 26.4M]
  |  Branch (162:56): [True: 15.3k, False: 2.07k]
  ------------------
  163|  15.3k|    uprv_free(reinterpret_cast<int32_t*>(fUnion.fFields.fArray) - 1);
  ------------------
  |  | 1503|  15.3k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  15.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  15.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  15.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  164|  15.3k|  }
  165|  26.4M|}
_ZN6icu_7813UnicodeStringC2EDs:
  216|   229k|UnicodeString::UnicodeString(char16_t ch) {
  217|   229k|  fUnion.fFields.fLengthAndFlags = kLength1 | kShortString;
  218|   229k|  fUnion.fStackFields.fBuffer[0] = ch;
  219|   229k|}
_ZN6icu_7813UnicodeStringC2EaNS_14ConstChar16PtrEi:
  241|  2.71M|                             int32_t textLength) {
  242|  2.71M|  fUnion.fFields.fLengthAndFlags = kReadonlyAlias;
  243|  2.71M|  const char16_t *text = textPtr;
  244|  2.71M|  if(text == nullptr) {
  ------------------
  |  Branch (244:6): [True: 26.3k, False: 2.68M]
  ------------------
  245|       |    // treat as an empty string, do not alias
  246|  26.3k|    setToEmpty();
  247|  2.68M|  } else if(textLength < -1 ||
  ------------------
  |  Branch (247:13): [True: 0, False: 2.68M]
  ------------------
  248|  2.68M|            (textLength == -1 && !isTerminated) ||
  ------------------
  |  Branch (248:14): [True: 13.3k, False: 2.67M]
  |  Branch (248:34): [True: 0, False: 13.3k]
  ------------------
  249|  2.68M|            (textLength >= 0 && isTerminated && text[textLength] != 0)
  ------------------
  |  Branch (249:14): [True: 2.67M, False: 13.3k]
  |  Branch (249:33): [True: 2.66M, False: 7.38k]
  |  Branch (249:49): [True: 0, False: 2.66M]
  ------------------
  250|  2.68M|  ) {
  251|      0|    setToBogus();
  252|  2.68M|  } else {
  253|  2.68M|    if(textLength == -1) {
  ------------------
  |  Branch (253:8): [True: 13.3k, False: 2.67M]
  ------------------
  254|       |      // text is terminated, or else it would have failed the above test
  255|  13.3k|      textLength = u_strlen(text);
  ------------------
  |  |  393|  13.3k|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|  13.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|  13.3k|    }
  257|  2.68M|    setArray(const_cast<char16_t *>(text), textLength,
  258|  2.68M|             isTerminated ? textLength + 1 : textLength);
  ------------------
  |  Branch (258:14): [True: 2.67M, False: 7.38k]
  ------------------
  259|  2.68M|  }
  260|  2.71M|}
_ZN6icu_7813UnicodeStringC2EPKciNS0_10EInvariantE:
  284|  1.12M|UnicodeString::UnicodeString(const char *src, int32_t length, EInvariant) {
  285|  1.12M|  fUnion.fFields.fLengthAndFlags = kShortString;
  286|  1.12M|  if(src==nullptr) {
  ------------------
  |  Branch (286:6): [True: 0, False: 1.12M]
  ------------------
  287|       |    // treat as an empty string
  288|  1.12M|  } else {
  289|  1.12M|    if(length<0) {
  ------------------
  |  Branch (289:8): [True: 1.09M, False: 22.6k]
  ------------------
  290|  1.09M|      length = static_cast<int32_t>(uprv_strlen(src));
  ------------------
  |  |   37|  1.09M|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  1.09M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  291|  1.09M|    }
  292|  1.12M|    if(cloneArrayIfNeeded(length, length, false)) {
  ------------------
  |  Branch (292:8): [True: 1.12M, False: 0]
  ------------------
  293|  1.12M|      u_charsToUChars(src, getArrayStart(), length);
  ------------------
  |  |  226|  1.12M|#define u_charsToUChars U_ICU_ENTRY_POINT_RENAME(u_charsToUChars)
  |  |  ------------------
  |  |  |  |  123|  1.12M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.12M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.12M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  294|  1.12M|      setLength(length);
  295|  1.12M|    } else {
  296|      0|      setToBogus();
  297|      0|    }
  298|  1.12M|  }
  299|  1.12M|}
_ZN6icu_7813UnicodeStringC2ERKS0_:
  345|  4.06M|UnicodeString::UnicodeString(const UnicodeString& that) {
  346|  4.06M|  fUnion.fFields.fLengthAndFlags = kShortString;
  347|  4.06M|  copyFrom(that);
  348|  4.06M|}
_ZN6icu_7813UnicodeStringC2EOS0_:
  350|  28.5k|UnicodeString::UnicodeString(UnicodeString &&src) noexcept {
  351|  28.5k|  copyFieldsFrom(src, true);
  352|  28.5k|}
_ZN6icu_7813UnicodeStringC2ERKS0_i:
  355|      1|                             int32_t srcStart) {
  356|      1|  fUnion.fFields.fLengthAndFlags = kShortString;
  357|      1|  setTo(that, srcStart);
  358|      1|}
_ZN6icu_7813UnicodeStringC2ERKS0_ii:
  362|  3.41M|                             int32_t srcLength) {
  363|  3.41M|  fUnion.fFields.fLengthAndFlags = kShortString;
  364|  3.41M|  setTo(that, srcStart, srcLength);
  365|  3.41M|}
_ZN6icu_7813UnicodeString8allocateEi:
  409|  1.89M|UnicodeString::allocate(int32_t capacity) {
  410|  1.89M|  if(capacity <= US_STACKBUF_SIZE) {
  ------------------
  |  Branch (410:6): [True: 1.86M, False: 32.9k]
  ------------------
  411|  1.86M|    fUnion.fFields.fLengthAndFlags = kShortString;
  412|  1.86M|    return true;
  413|  1.86M|  }
  414|  32.9k|  if(capacity <= kMaxCapacity) {
  ------------------
  |  Branch (414:6): [True: 32.9k, False: 0]
  ------------------
  415|  32.9k|    ++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|  32.9k|    size_t numBytes = sizeof(int32_t) + static_cast<size_t>(capacity) * U_SIZEOF_UCHAR;
  ------------------
  |  |  352|  32.9k|#define U_SIZEOF_UCHAR 2
  ------------------
  419|       |    // Round up to a multiple of 16.
  420|  32.9k|    numBytes = (numBytes + 15) & ~15;
  421|  32.9k|    int32_t* array = static_cast<int32_t*>(uprv_malloc(numBytes));
  ------------------
  |  | 1524|  32.9k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  32.9k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  32.9k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  32.9k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  422|  32.9k|    if(array != nullptr) {
  ------------------
  |  Branch (422:8): [True: 32.9k, False: 0]
  ------------------
  423|       |      // set initial refCount and point behind the refCount
  424|  32.9k|      *array++ = 1;
  425|  32.9k|      numBytes -= sizeof(int32_t);
  426|       |
  427|       |      // have fArray point to the first char16_t
  428|  32.9k|      fUnion.fFields.fArray = reinterpret_cast<char16_t*>(array);
  429|  32.9k|      fUnion.fFields.fCapacity = static_cast<int32_t>(numBytes / U_SIZEOF_UCHAR);
  ------------------
  |  |  352|  32.9k|#define U_SIZEOF_UCHAR 2
  ------------------
  430|  32.9k|      fUnion.fFields.fLengthAndFlags = kLongString;
  431|  32.9k|      return true;
  432|  32.9k|    }
  433|  32.9k|  }
  434|      0|  fUnion.fFields.fLengthAndFlags = kIsBogus;
  435|      0|  fUnion.fFields.fArray = nullptr;
  436|      0|  fUnion.fFields.fCapacity = 0;
  437|      0|  return false;
  438|  32.9k|}
_ZN6icu_7813UnicodeStringD2Ev:
  462|  17.2M|{
  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|  17.2M|  releaseArray();
  478|  17.2M|}
_ZN6icu_7813UnicodeString8fromUTF8ENS_11StringPieceE:
  484|    470|UnicodeString UnicodeString::fromUTF8(StringPiece utf8) {
  485|    470|  UnicodeString result;
  486|    470|  result.setToUTF8(utf8);
  487|    470|  return result;
  488|    470|}
_ZN6icu_7813UnicodeStringaSERKS0_:
  527|  1.46M|UnicodeString::operator=(const UnicodeString &src) {
  528|  1.46M|  return copyFrom(src);
  529|  1.46M|}
_ZN6icu_7813UnicodeString12fastCopyFromERKS0_:
  532|    285|UnicodeString::fastCopyFrom(const UnicodeString &src) {
  533|    285|  return copyFrom(src, true);
  534|    285|}
_ZN6icu_7813UnicodeString8copyFromERKS0_a:
  537|  5.56M|UnicodeString::copyFrom(const UnicodeString &src, UBool fastCopy) {
  538|       |  // if assigning to ourselves, do nothing
  539|  5.56M|  if(this == &src) {
  ------------------
  |  Branch (539:6): [True: 39.0k, False: 5.52M]
  ------------------
  540|  39.0k|    return *this;
  541|  39.0k|  }
  542|       |
  543|       |  // is the right side bogus?
  544|  5.52M|  if(src.isBogus()) {
  ------------------
  |  Branch (544:6): [True: 0, False: 5.52M]
  ------------------
  545|      0|    setToBogus();
  546|      0|    return *this;
  547|      0|  }
  548|       |
  549|       |  // delete the current contents
  550|  5.52M|  releaseArray();
  551|       |
  552|  5.52M|  if(src.isEmpty()) {
  ------------------
  |  Branch (552:6): [True: 634k, False: 4.88M]
  ------------------
  553|       |    // empty string - use the stack buffer
  554|   634k|    setToEmpty();
  555|   634k|    return *this;
  556|   634k|  }
  557|       |
  558|       |  // fLength>0 and not an "open" src.getBuffer(minCapacity)
  559|  4.88M|  fUnion.fFields.fLengthAndFlags = src.fUnion.fFields.fLengthAndFlags;
  560|  4.88M|  switch(src.fUnion.fFields.fLengthAndFlags & kAllStorageFlags) {
  561|  3.02M|  case kShortString:
  ------------------
  |  Branch (561:3): [True: 3.02M, False: 1.86M]
  ------------------
  562|       |    // short string using the stack buffer, do the same
  563|  3.02M|    uprv_memcpy(fUnion.fStackFields.fBuffer, src.fUnion.fStackFields.fBuffer,
  ------------------
  |  |   42|  3.02M|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  3.02M|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  3.02M|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  3.02M|    _Pragma("clang diagnostic push") \
  |  |   45|  3.02M|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  3.02M|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  3.02M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  3.02M|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  3.02M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  3.02M|    _Pragma("clang diagnostic pop") \
  |  |   49|  3.02M|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  3.02M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  3.02M|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  3.02M|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  564|  3.02M|                getShortLength() * U_SIZEOF_UCHAR);
  565|  3.02M|    break;
  566|  2.12k|  case kLongString:
  ------------------
  |  Branch (566:3): [True: 2.12k, False: 4.88M]
  ------------------
  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|  2.12k|    const_cast<UnicodeString &>(src).addRef();
  570|       |    // copy all fields, share the reference-counted buffer
  571|  2.12k|    fUnion.fFields.fArray = src.fUnion.fFields.fArray;
  572|  2.12k|    fUnion.fFields.fCapacity = src.fUnion.fFields.fCapacity;
  573|  2.12k|    if(!hasShortLength()) {
  ------------------
  |  Branch (573:8): [True: 0, False: 2.12k]
  ------------------
  574|      0|      fUnion.fFields.fLength = src.fUnion.fFields.fLength;
  575|      0|    }
  576|  2.12k|    break;
  577|  1.86M|  case kReadonlyAlias:
  ------------------
  |  Branch (577:3): [True: 1.86M, False: 3.02M]
  ------------------
  578|  1.86M|    if(fastCopy) {
  ------------------
  |  Branch (578:8): [True: 0, False: 1.86M]
  ------------------
  579|       |      // src is a readonly alias, do the same
  580|       |      // -> maintain the readonly alias as such
  581|      0|      fUnion.fFields.fArray = src.fUnion.fFields.fArray;
  582|      0|      fUnion.fFields.fCapacity = src.fUnion.fFields.fCapacity;
  583|      0|      if(!hasShortLength()) {
  ------------------
  |  Branch (583:10): [True: 0, False: 0]
  ------------------
  584|      0|        fUnion.fFields.fLength = src.fUnion.fFields.fLength;
  585|      0|      }
  586|      0|      break;
  587|      0|    }
  588|       |    // else if(!fastCopy) fall through to case kWritableAlias
  589|       |    // -> allocate a new buffer and copy the contents
  590|  1.86M|    U_FALLTHROUGH;
  ------------------
  |  |  511|  1.86M|#       define U_FALLTHROUGH [[clang::fallthrough]]
  ------------------
  591|  1.86M|  case kWritableAlias: {
  ------------------
  |  Branch (591:3): [True: 0, False: 4.88M]
  ------------------
  592|       |    // src is a writable alias; we make a copy of that instead
  593|  1.86M|    int32_t srcLength = src.length();
  594|  1.86M|    if(allocate(srcLength)) {
  ------------------
  |  Branch (594:8): [True: 1.86M, False: 0]
  ------------------
  595|  1.86M|      u_memcpy(getArrayStart(), src.getArrayStart(), srcLength);
  ------------------
  |  |  334|  1.86M|#define u_memcpy U_ICU_ENTRY_POINT_RENAME(u_memcpy)
  |  |  ------------------
  |  |  |  |  123|  1.86M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.86M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.86M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  596|  1.86M|      setLength(srcLength);
  597|  1.86M|      break;
  598|  1.86M|    }
  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: 4.88M]
  ------------------
  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|  4.88M|  }
  610|       |
  611|  4.88M|  return *this;
  612|  4.88M|}
_ZN6icu_7813UnicodeStringaSEOS0_:
  614|  3.56M|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|  3.56M|  releaseArray();
  618|  3.56M|  copyFieldsFrom(src, true);
  619|  3.56M|  return *this;
  620|  3.56M|}
_ZN6icu_7813UnicodeString14copyFieldsFromERS0_a:
  623|  3.59M|void UnicodeString::copyFieldsFrom(UnicodeString &src, UBool setSrcToBogus) noexcept {
  624|  3.59M|  int16_t lengthAndFlags = fUnion.fFields.fLengthAndFlags = src.fUnion.fFields.fLengthAndFlags;
  625|  3.59M|  if(lengthAndFlags & kUsingStackBuffer) {
  ------------------
  |  Branch (625:6): [True: 3.47M, False: 120k]
  ------------------
  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|  3.47M|    if(this != &src) {
  ------------------
  |  Branch (629:8): [True: 3.47M, False: 0]
  ------------------
  630|  3.47M|      uprv_memcpy(fUnion.fStackFields.fBuffer, src.fUnion.fStackFields.fBuffer,
  ------------------
  |  |   42|  3.47M|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  3.47M|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  3.47M|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  3.47M|    _Pragma("clang diagnostic push") \
  |  |   45|  3.47M|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  3.47M|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  3.47M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  3.47M|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  3.47M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  3.47M|    _Pragma("clang diagnostic pop") \
  |  |   49|  3.47M|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  3.47M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  3.47M|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  3.47M|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  631|  3.47M|                  getShortLength() * U_SIZEOF_UCHAR);
  632|  3.47M|    }
  633|  3.47M|  } else {
  634|       |    // In all other cases, copy all fields.
  635|   120k|    fUnion.fFields.fArray = src.fUnion.fFields.fArray;
  636|   120k|    fUnion.fFields.fCapacity = src.fUnion.fFields.fCapacity;
  637|   120k|    if(!hasShortLength()) {
  ------------------
  |  Branch (637:8): [True: 3.90k, False: 116k]
  ------------------
  638|  3.90k|      fUnion.fFields.fLength = src.fUnion.fFields.fLength;
  639|  3.90k|    }
  640|   120k|    if(setSrcToBogus) {
  ------------------
  |  Branch (640:8): [True: 120k, False: 0]
  ------------------
  641|       |      // Set src to bogus without releasing any memory.
  642|   120k|      src.fUnion.fFields.fLengthAndFlags = kIsBogus;
  643|   120k|      src.fUnion.fFields.fArray = nullptr;
  644|   120k|      src.fUnion.fFields.fCapacity = 0;
  645|   120k|    }
  646|   120k|  }
  647|  3.59M|}
_ZNK6icu_7813UnicodeString8doEqualsEPKDsi:
  698|   451k|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|   451k|  return uprv_memcmp(getArrayStart(), text, len * U_SIZEOF_UCHAR) == 0;
  ------------------
  |  |  101|   451k|#define uprv_memcmp(buffer1, buffer2, size) U_STANDARD_CPP_NAMESPACE memcmp(buffer1, buffer2,size)
  |  |  ------------------
  |  |  |  |  393|   451k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  702|   451k|}
_ZNK6icu_7813UnicodeString9doCompareEiiPKDsii:
  752|  6.27M|{
  753|       |  // compare illegal string values
  754|  6.27M|  if(isBogus()) {
  ------------------
  |  Branch (754:6): [True: 0, False: 6.27M]
  ------------------
  755|      0|    return -1;
  756|      0|  }
  757|       |  
  758|       |  // pin indices to legal values
  759|  6.27M|  pinIndices(start, length);
  760|       |
  761|  6.27M|  if(srcChars == nullptr) {
  ------------------
  |  Branch (761:6): [True: 0, False: 6.27M]
  ------------------
  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|  6.27M|  const char16_t *chars = getArrayStart();
  768|       |
  769|  6.27M|  chars += start;
  770|  6.27M|  srcChars += srcStart;
  771|       |
  772|  6.27M|  int32_t minLength;
  773|  6.27M|  int8_t lengthResult;
  774|       |
  775|       |  // get the srcLength if necessary
  776|  6.27M|  if(srcLength < 0) {
  ------------------
  |  Branch (776:6): [True: 0, False: 6.27M]
  ------------------
  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|  6.27M|  if(length != srcLength) {
  ------------------
  |  Branch (781:6): [True: 5.47M, False: 806k]
  ------------------
  782|  5.47M|    if(length < srcLength) {
  ------------------
  |  Branch (782:8): [True: 2.39M, False: 3.07M]
  ------------------
  783|  2.39M|      minLength = length;
  784|  2.39M|      lengthResult = -1;
  785|  3.07M|    } else {
  786|  3.07M|      minLength = srcLength;
  787|  3.07M|      lengthResult = 1;
  788|  3.07M|    }
  789|  5.47M|  } else {
  790|   806k|    minLength = length;
  791|   806k|    lengthResult = 0;
  792|   806k|  }
  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|  6.27M|  if(minLength > 0 && chars != srcChars) {
  ------------------
  |  Branch (802:6): [True: 6.27M, False: 0]
  |  Branch (802:23): [True: 6.27M, False: 0]
  ------------------
  803|  6.27M|    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|  15.2M|      do {
  814|  15.2M|        result = static_cast<int32_t>(*(chars++)) - static_cast<int32_t>(*(srcChars++));
  815|  15.2M|        if(result != 0) {
  ------------------
  |  Branch (815:12): [True: 3.03M, False: 12.2M]
  ------------------
  816|  3.03M|          return static_cast<int8_t>(result >> 15 | 1);
  817|  3.03M|        }
  818|  15.2M|      } while(--minLength > 0);
  ------------------
  |  Branch (818:15): [True: 9.00M, False: 3.24M]
  ------------------
  819|  6.27M|#   endif
  820|  6.27M|  }
  821|  3.24M|  return lengthResult;
  822|  6.27M|}
_ZNK6icu_7813UnicodeString8char32AtEi:
  871|   266k|{
  872|   266k|  int32_t len = length();
  873|   266k|  if (static_cast<uint32_t>(offset) < static_cast<uint32_t>(len)) {
  ------------------
  |  Branch (873:7): [True: 266k, False: 0]
  ------------------
  874|   266k|    const char16_t *array = getArrayStart();
  875|   266k|    UChar32 c;
  876|   266k|    U16_GET(array, 0, offset, len, c);
  ------------------
  |  |  201|   266k|#define U16_GET(s, start, i, length, c) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|   266k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |  202|   266k|    (c)=(s)[i]; \
  |  |  203|   266k|    if(U16_IS_SURROGATE(c)) { \
  |  |  ------------------
  |  |  |  |   75|   266k|#define U16_IS_SURROGATE(c) U_IS_SURROGATE(c)
  |  |  |  |  ------------------
  |  |  |  |  |  |  193|   266k|#define U_IS_SURROGATE(c) (((c)&0xfffff800)==0xd800)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (193:27): [True: 3.60k, False: 263k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  204|  3.60k|        uint16_t __c2; \
  |  |  205|  3.60k|        if(U16_IS_SURROGATE_LEAD(c)) { \
  |  |  ------------------
  |  |  |  |   84|  3.60k|#define U16_IS_SURROGATE_LEAD(c) (((c)&0x400)==0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (84:34): [True: 3.60k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  206|  3.60k|            if((i)+1!=(length) && U16_IS_TRAIL(__c2=(s)[(i)+1])) { \
  |  |  ------------------
  |  |  |  |   67|  3.60k|#define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (67:25): [True: 3.60k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (206:16): [True: 3.60k, False: 0]
  |  |  ------------------
  |  |  207|  3.60k|                (c)=U16_GET_SUPPLEMENTARY((c), __c2); \
  |  |  ------------------
  |  |  |  |  113|  3.60k|    (((UChar32)(lead)<<10UL)+(UChar32)(trail)-U16_SURROGATE_OFFSET)
  |  |  |  |  ------------------
  |  |  |  |  |  |   99|  3.60k|#define U16_SURROGATE_OFFSET ((0xd800<<10UL)+0xdc00-0x10000)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  208|  3.60k|            } \
  |  |  209|  3.60k|        } else { \
  |  |  210|      0|            if((i)>(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \
  |  |  ------------------
  |  |  |  |   59|      0|#define U16_IS_LEAD(c) (((c)&0xfffffc00)==0xd800)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (210:16): [True: 0, False: 0]
  |  |  ------------------
  |  |  211|      0|                (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \
  |  |  ------------------
  |  |  |  |  113|      0|    (((UChar32)(lead)<<10UL)+(UChar32)(trail)-U16_SURROGATE_OFFSET)
  |  |  |  |  ------------------
  |  |  |  |  |  |   99|      0|#define U16_SURROGATE_OFFSET ((0xd800<<10UL)+0xdc00-0x10000)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  212|      0|            } \
  |  |  213|      0|        } \
  |  |  214|  3.60k|    } \
  |  |  215|   266k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|   266k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  877|   266k|    return c;
  878|   266k|  } else {
  879|      0|    return kInvalidUChar;
  880|      0|  }
  881|   266k|}
_ZNK6icu_7813UnicodeString11countChar32Eii:
  907|   146k|UnicodeString::countChar32(int32_t start, int32_t length) const {
  908|   146k|  pinIndices(start, length);
  909|       |  // if(isBogus()) then fArray==0 and start==0 - u_countChar32() checks for nullptr
  910|   146k|  return u_countChar32(getArrayStart()+start, length);
  ------------------
  |  |  228|   146k|#define u_countChar32 U_ICU_ENTRY_POINT_RENAME(u_countChar32)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  911|   146k|}
_ZNK6icu_7813UnicodeString7extractENS_9Char16PtrEiR10UErrorCode:
  958|    203|                       UErrorCode &errorCode) const {
  959|    203|  int32_t len = length();
  960|    203|  if(U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (960:6): [True: 203, False: 0]
  ------------------
  961|    203|    if (isBogus() || destCapacity < 0 || (destCapacity > 0 && dest == nullptr)) {
  ------------------
  |  Branch (961:9): [True: 0, False: 203]
  |  Branch (961:22): [True: 0, False: 203]
  |  Branch (961:43): [True: 203, False: 0]
  |  Branch (961:63): [True: 0, False: 203]
  ------------------
  962|      0|      errorCode=U_ILLEGAL_ARGUMENT_ERROR;
  963|    203|    } else {
  964|    203|      const char16_t *array = getArrayStart();
  965|    203|      if(len>0 && len<=destCapacity && array!=dest) {
  ------------------
  |  Branch (965:10): [True: 203, False: 0]
  |  Branch (965:19): [True: 203, False: 0]
  |  Branch (965:40): [True: 203, False: 0]
  ------------------
  966|    203|        u_memcpy(dest, array, len);
  ------------------
  |  |  334|    203|#define u_memcpy U_ICU_ENTRY_POINT_RENAME(u_memcpy)
  |  |  ------------------
  |  |  |  |  123|    203|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    203|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    203|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  967|    203|      }
  968|    203|      return u_terminateUChars(dest, destCapacity, len, &errorCode);
  ------------------
  |  |  408|    203|#define u_terminateUChars U_ICU_ENTRY_POINT_RENAME(u_terminateUChars)
  |  |  ------------------
  |  |  |  |  123|    203|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    203|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    203|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  969|    203|    }
  970|    203|  }
  971|       |
  972|      0|  return len;
  973|    203|}
_ZNK6icu_7813UnicodeString7extractEiiPciNS0_10EInvariantE:
  981|    432|{
  982|       |  // if the arguments are illegal, then do nothing
  983|    432|  if(targetCapacity < 0 || (targetCapacity > 0 && target == nullptr)) {
  ------------------
  |  Branch (983:6): [True: 0, False: 432]
  |  Branch (983:29): [True: 432, False: 0]
  |  Branch (983:51): [True: 0, False: 432]
  ------------------
  984|      0|    return 0;
  985|      0|  }
  986|       |
  987|       |  // pin the indices to legal values
  988|    432|  pinIndices(start, length);
  989|       |
  990|    432|  if(length <= targetCapacity) {
  ------------------
  |  Branch (990:6): [True: 432, False: 0]
  ------------------
  991|    432|    u_UCharsToChars(getArrayStart() + start, target, length);
  ------------------
  |  |  211|    432|#define u_UCharsToChars U_ICU_ENTRY_POINT_RENAME(u_UCharsToChars)
  |  |  ------------------
  |  |  |  |  123|    432|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    432|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    432|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  992|    432|  }
  993|    432|  UErrorCode status = U_ZERO_ERROR;
  994|    432|  return u_terminateChars(target, targetCapacity, length, &status);
  ------------------
  |  |  406|    432|#define u_terminateChars U_ICU_ENTRY_POINT_RENAME(u_terminateChars)
  |  |  ------------------
  |  |  |  |  123|    432|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    432|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    432|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  995|    432|}
_ZNK6icu_7813UnicodeString9doIndexOfEDsii:
 1139|  1.03k|{
 1140|       |  // pin indices
 1141|  1.03k|  pinIndices(start, length);
 1142|       |
 1143|       |  // find the first occurrence of c
 1144|  1.03k|  const char16_t *array = getArrayStart();
 1145|  1.03k|  const char16_t *match = u_memchr(array + start, c, length);
  ------------------
  |  |  330|  1.03k|#define u_memchr U_ICU_ENTRY_POINT_RENAME(u_memchr)
  |  |  ------------------
  |  |  |  |  123|  1.03k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.03k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.03k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1146|  1.03k|  if(match == nullptr) {
  ------------------
  |  Branch (1146:6): [True: 102, False: 931]
  ------------------
 1147|    102|    return -1;
 1148|    931|  } else {
 1149|    931|    return static_cast<int32_t>(match - array);
 1150|    931|  }
 1151|  1.03k|}
_ZN6icu_7813UnicodeString10setToBogusEv:
 1283|    206|{
 1284|    206|  releaseArray();
 1285|       |
 1286|    206|  fUnion.fFields.fLengthAndFlags = kIsBogus;
 1287|    206|  fUnion.fFields.fArray = nullptr;
 1288|    206|  fUnion.fFields.fCapacity = 0;
 1289|    206|}
_ZN6icu_7813UnicodeString7unBogusEv:
 1293|  3.56M|UnicodeString::unBogus() {
 1294|  3.56M|  if(fUnion.fFields.fLengthAndFlags & kIsBogus) {
  ------------------
  |  Branch (1294:6): [True: 0, False: 3.56M]
  ------------------
 1295|      0|    setToEmpty();
 1296|      0|  }
 1297|  3.56M|}
_ZN6icu_7813UnicodeString19getTerminatedBufferEv:
 1300|   935k|UnicodeString::getTerminatedBuffer() {
 1301|   935k|  if(!isWritable()) {
  ------------------
  |  Branch (1301:6): [True: 0, False: 935k]
  ------------------
 1302|      0|    return nullptr;
 1303|      0|  }
 1304|   935k|  char16_t *array = getArrayStart();
 1305|   935k|  int32_t len = length();
 1306|   935k|  if(len < getCapacity()) {
  ------------------
  |  Branch (1306:6): [True: 935k, False: 81]
  ------------------
 1307|   935k|    if(fUnion.fFields.fLengthAndFlags & kBufferIsReadonly) {
  ------------------
  |  Branch (1307:8): [True: 25, False: 935k]
  ------------------
 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|     25|      if(array[len] == 0) {
  ------------------
  |  Branch (1312:10): [True: 25, False: 0]
  ------------------
 1313|     25|        return array;
 1314|     25|      }
 1315|   935k|    } else if(((fUnion.fFields.fLengthAndFlags & kRefCounted) == 0 || refCount() == 1)) {
  ------------------
  |  Branch (1315:16): [True: 933k, False: 1.35k]
  |  Branch (1315:71): [True: 1.35k, 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|   935k|      array[len] = 0;
 1325|   935k|      return array;
 1326|   935k|    }
 1327|   935k|  }
 1328|     81|  if(len<INT32_MAX && cloneArrayIfNeeded(len+1)) {
  ------------------
  |  Branch (1328:6): [True: 81, False: 0]
  |  Branch (1328:23): [True: 81, False: 0]
  ------------------
 1329|     81|    array = getArrayStart();
 1330|     81|    array[len] = 0;
 1331|     81|    return array;
 1332|     81|  } else {
 1333|      0|    return nullptr;
 1334|      0|  }
 1335|     81|}
_ZN6icu_7813UnicodeString5setToEaNS_14ConstChar16PtrEi:
 1342|   141k|{
 1343|   141k|  if(fUnion.fFields.fLengthAndFlags & kOpenGetBuffer) {
  ------------------
  |  Branch (1343:6): [True: 0, False: 141k]
  ------------------
 1344|       |    // do not modify a string that has an "open" getBuffer(minCapacity)
 1345|      0|    return *this;
 1346|      0|  }
 1347|       |
 1348|   141k|  const char16_t *text = textPtr;
 1349|   141k|  if(text == nullptr) {
  ------------------
  |  Branch (1349:6): [True: 6, False: 141k]
  ------------------
 1350|       |    // treat as an empty string, do not alias
 1351|      6|    releaseArray();
 1352|      6|    setToEmpty();
 1353|      6|    return *this;
 1354|      6|  }
 1355|       |
 1356|   141k|  if( textLength < -1 ||
  ------------------
  |  Branch (1356:7): [True: 0, False: 141k]
  ------------------
 1357|   141k|      (textLength == -1 && !isTerminated) ||
  ------------------
  |  Branch (1357:8): [True: 0, False: 141k]
  |  Branch (1357:28): [True: 0, False: 0]
  ------------------
 1358|   141k|      (textLength >= 0 && isTerminated && text[textLength] != 0)
  ------------------
  |  Branch (1358:8): [True: 141k, False: 0]
  |  Branch (1358:27): [True: 141k, False: 0]
  |  Branch (1358:43): [True: 0, False: 141k]
  ------------------
 1359|   141k|  ) {
 1360|      0|    setToBogus();
 1361|      0|    return *this;
 1362|      0|  }
 1363|       |
 1364|   141k|  releaseArray();
 1365|       |
 1366|   141k|  if(textLength == -1) {
  ------------------
  |  Branch (1366:6): [True: 0, False: 141k]
  ------------------
 1367|       |    // text is terminated, or else it would have failed the above test
 1368|      0|    textLength = u_strlen(text);
  ------------------
  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1369|      0|  }
 1370|   141k|  fUnion.fFields.fLengthAndFlags = kReadonlyAlias;
 1371|   141k|  setArray(const_cast<char16_t*>(text), textLength, isTerminated ? textLength + 1 : textLength);
  ------------------
  |  Branch (1371:53): [True: 141k, False: 0]
  ------------------
 1372|   141k|  return *this;
 1373|   141k|}
_ZN6icu_7813UnicodeString9setToUTF8ENS_11StringPieceE:
 1411|    470|UnicodeString &UnicodeString::setToUTF8(StringPiece utf8) {
 1412|    470|  unBogus();
 1413|    470|  int32_t length = utf8.length();
 1414|    470|  int32_t capacity;
 1415|       |  // The UTF-16 string will be at most as long as the UTF-8 string.
 1416|    470|  if(length <= US_STACKBUF_SIZE) {
  ------------------
  |  Branch (1416:6): [True: 470, False: 0]
  ------------------
 1417|    470|    capacity = US_STACKBUF_SIZE;
 1418|    470|  } else {
 1419|      0|    capacity = length + 1;  // +1 for the terminating NUL.
 1420|      0|  }
 1421|    470|  char16_t *utf16 = getBuffer(capacity);
 1422|    470|  int32_t length16;
 1423|    470|  UErrorCode errorCode = U_ZERO_ERROR;
 1424|    470|  u_strFromUTF8WithSub(utf16, getCapacity(), &length16,
  ------------------
  |  |  370|    470|#define u_strFromUTF8WithSub U_ICU_ENTRY_POINT_RENAME(u_strFromUTF8WithSub)
  |  |  ------------------
  |  |  |  |  123|    470|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    470|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    470|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1425|    470|      utf8.data(), length,
 1426|    470|      0xfffd,  // Substitution character.
 1427|    470|      nullptr,    // Don't care about number of substitutions.
 1428|    470|      &errorCode);
 1429|    470|  releaseBuffer(length16);
 1430|    470|  if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (1430:6): [True: 0, False: 470]
  ------------------
 1431|      0|    setToBogus();
 1432|      0|  }
 1433|    470|  return *this;
 1434|    470|}
_ZN6icu_7813UnicodeString9setCharAtEiDs:
 1439|  1.54k|{
 1440|  1.54k|  int32_t len = length();
 1441|  1.54k|  if(cloneArrayIfNeeded() && len > 0) {
  ------------------
  |  Branch (1441:6): [True: 1.54k, False: 0]
  |  Branch (1441:30): [True: 1.54k, False: 0]
  ------------------
 1442|  1.54k|    if(offset < 0) {
  ------------------
  |  Branch (1442:8): [True: 0, False: 1.54k]
  ------------------
 1443|      0|      offset = 0;
 1444|  1.54k|    } else if(offset >= len) {
  ------------------
  |  Branch (1444:15): [True: 0, False: 1.54k]
  ------------------
 1445|      0|      offset = len - 1;
 1446|      0|    }
 1447|       |
 1448|  1.54k|    getArrayStart()[offset] = c;
 1449|  1.54k|  }
 1450|  1.54k|  return *this;
 1451|  1.54k|}
_ZN6icu_7813UnicodeString7replaceEiii:
 1456|   133k|               UChar32 srcChar) {
 1457|   133k|  char16_t buffer[U16_MAX_LENGTH];
 1458|   133k|  int32_t count = 0;
 1459|   133k|  UBool isError = false;
 1460|   133k|  U16_APPEND(buffer, count, U16_MAX_LENGTH, srcChar, isError);
  ------------------
  |  |  393|   133k|#define U16_APPEND(s, i, capacity, c, isError) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|   133k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |  394|   133k|    if((uint32_t)(c)<=0xffff) { \
  |  |  ------------------
  |  |  |  Branch (394:8): [True: 131k, False: 1.80k]
  |  |  ------------------
  |  |  395|   131k|        (s)[(i)++]=(uint16_t)(c); \
  |  |  396|   131k|    } else if((uint32_t)(c)<=0x10ffff && (i)+1<(capacity)) { \
  |  |  ------------------
  |  |  |  Branch (396:15): [True: 1.80k, False: 0]
  |  |  |  Branch (396:42): [True: 1.80k, False: 0]
  |  |  ------------------
  |  |  397|  1.80k|        (s)[(i)++]=(uint16_t)(((c)>>10)+0xd7c0); \
  |  |  398|  1.80k|        (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \
  |  |  399|  1.80k|    } else /* c>0x10ffff or not enough space */ { \
  |  |  400|      0|        (isError)=true; \
  |  |  401|      0|    } \
  |  |  402|   133k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|   133k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1461|       |  // We test isError so that the compiler does not complain that we don't.
 1462|       |  // If isError (srcChar is not a valid code point) then count==0 which means
 1463|       |  // we remove the source segment rather than replacing it with srcChar.
 1464|   133k|  return doReplace(start, _length, buffer, 0, isError ? 0 : count);
  ------------------
  |  Branch (1464:47): [True: 0, False: 133k]
  ------------------
 1465|   133k|}
_ZN6icu_7813UnicodeString9doReplaceEiiRKS0_ii:
 1484|  3.41M|{
 1485|       |  // pin the indices to legal values
 1486|  3.41M|  src.pinIndices(srcStart, srcLength);
 1487|       |
 1488|       |  // get the characters from src
 1489|       |  // and replace the range in ourselves with them
 1490|  3.41M|  return doReplace(start, length, src.getArrayStart(), srcStart, srcLength);
 1491|  3.41M|}
_ZN6icu_7813UnicodeString9doReplaceEiiPKDsii:
 1499|  3.92M|{
 1500|  3.92M|  if(!isWritable()) {
  ------------------
  |  Branch (1500:6): [True: 0, False: 3.92M]
  ------------------
 1501|      0|    return *this;
 1502|      0|  }
 1503|       |
 1504|  3.92M|  int32_t oldLength = this->length();
 1505|       |
 1506|       |  // optimize (read-only alias).remove(0, start) and .remove(start, end)
 1507|  3.92M|  if((fUnion.fFields.fLengthAndFlags&kBufferIsReadonly) && srcLength == 0) {
  ------------------
  |  Branch (1507:6): [True: 5.53k, False: 3.92M]
  |  Branch (1507:60): [True: 0, False: 5.53k]
  ------------------
 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|  3.92M|  if(start == oldLength) {
  ------------------
  |  Branch (1526:6): [True: 3.78M, False: 139k]
  ------------------
 1527|  3.78M|    return doAppend(srcChars, srcStart, srcLength);
 1528|  3.78M|  }
 1529|       |
 1530|   139k|  if (srcChars == nullptr) {
  ------------------
  |  Branch (1530:7): [True: 866, False: 138k]
  ------------------
 1531|    866|    srcLength = 0;
 1532|   138k|  } else {
 1533|       |    // Perform all remaining operations relative to srcChars + srcStart.
 1534|       |    // From this point forward, do not use srcStart.
 1535|   138k|    srcChars += srcStart;
 1536|   138k|    if (srcLength < 0) {
  ------------------
  |  Branch (1536:9): [True: 0, False: 138k]
  ------------------
 1537|       |      // get the srcLength if necessary
 1538|      0|      srcLength = u_strlen(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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1539|      0|    }
 1540|   138k|  }
 1541|       |
 1542|       |  // pin the indices to legal values
 1543|   139k|  pinIndices(start, length);
 1544|       |
 1545|       |  // Calculate the size of the string after the replace.
 1546|       |  // Avoid int32_t overflow.
 1547|   139k|  int32_t newLength = oldLength - length;
 1548|   139k|  if(srcLength > (INT32_MAX - newLength)) {
  ------------------
  |  Branch (1548:6): [True: 0, False: 139k]
  ------------------
 1549|      0|    setToBogus();
 1550|      0|    return *this;
 1551|      0|  }
 1552|   139k|  newLength += srcLength;
 1553|       |
 1554|       |  // Check for insertion into ourself
 1555|   139k|  const char16_t *oldArray = getArrayStart();
 1556|   139k|  if (isBufferWritable() &&
  ------------------
  |  Branch (1556:7): [True: 133k, False: 5.53k]
  ------------------
 1557|   139k|      oldArray < srcChars + srcLength &&
  ------------------
  |  Branch (1557:7): [True: 0, False: 133k]
  ------------------
 1558|   139k|      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|   139k|  char16_t oldStackBuffer[US_STACKBUF_SIZE];
 1571|   139k|  if((fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) && (newLength > US_STACKBUF_SIZE)) {
  ------------------
  |  Branch (1571:6): [True: 133k, False: 5.64k]
  |  Branch (1571:60): [True: 0, False: 133k]
  ------------------
 1572|       |    // copy the stack buffer contents because it will be overwritten with
 1573|       |    // fUnion.fFields values
 1574|      0|    u_memcpy(oldStackBuffer, oldArray, oldLength);
  ------------------
  |  |  334|      0|#define u_memcpy U_ICU_ENTRY_POINT_RENAME(u_memcpy)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1575|      0|    oldArray = oldStackBuffer;
 1576|      0|  }
 1577|       |
 1578|       |  // clone our array and allocate a bigger array if needed
 1579|   139k|  int32_t *bufferToDelete = nullptr;
 1580|   139k|  if(!cloneArrayIfNeeded(newLength, getGrowCapacity(newLength),
  ------------------
  |  Branch (1580:6): [True: 0, False: 139k]
  ------------------
 1581|   139k|                         false, &bufferToDelete)
 1582|   139k|  ) {
 1583|      0|    return *this;
 1584|      0|  }
 1585|       |
 1586|       |  // now do the replace
 1587|       |
 1588|   139k|  char16_t *newArray = getArrayStart();
 1589|   139k|  if(newArray != oldArray) {
  ------------------
  |  Branch (1589:6): [True: 5.53k, False: 133k]
  ------------------
 1590|       |    // if fArray changed, then we need to copy everything except what will change
 1591|  5.53k|    us_arrayCopy(oldArray, 0, newArray, 0, start);
 1592|  5.53k|    us_arrayCopy(oldArray, start + length,
 1593|  5.53k|                 newArray, start + srcLength,
 1594|  5.53k|                 oldLength - (start + length));
 1595|   133k|  } else if(length != srcLength) {
  ------------------
  |  Branch (1595:13): [True: 2.66k, False: 131k]
  ------------------
 1596|       |    // fArray did not change; copy only the portion that isn't changing, leaving a hole
 1597|  2.66k|    us_arrayCopy(oldArray, start + length,
 1598|  2.66k|                 newArray, start + srcLength,
 1599|  2.66k|                 oldLength - (start + length));
 1600|  2.66k|  }
 1601|       |
 1602|       |  // now fill in the hole with the new string
 1603|   139k|  us_arrayCopy(srcChars, 0, newArray, start, srcLength);
 1604|       |
 1605|   139k|  setLength(newLength);
 1606|       |
 1607|       |  // delayed delete in case srcChars == fArray when we started, and
 1608|       |  // to keep oldArray alive for the above operations
 1609|   139k|  if (bufferToDelete) {
  ------------------
  |  Branch (1609:7): [True: 0, False: 139k]
  ------------------
 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|   139k|  return *this;
 1614|   139k|}
_ZN6icu_7813UnicodeString8doAppendERKS0_ii:
 1632|  53.5k|UnicodeString::doAppend(const UnicodeString& src, int32_t srcStart, int32_t srcLength) {
 1633|  53.5k|  if(srcLength == 0) {
  ------------------
  |  Branch (1633:6): [True: 39, False: 53.4k]
  ------------------
 1634|     39|    return *this;
 1635|     39|  }
 1636|       |
 1637|       |  // pin the indices to legal values
 1638|  53.4k|  src.pinIndices(srcStart, srcLength);
 1639|  53.4k|  return doAppend(src.getArrayStart(), srcStart, srcLength);
 1640|  53.5k|}
_ZN6icu_7813UnicodeString8doAppendEPKDsii:
 1643|  89.2M|UnicodeString::doAppend(const char16_t *srcChars, int32_t srcStart, int32_t srcLength) {
 1644|  89.2M|  if(!isWritable() || srcLength == 0 || srcChars == nullptr) {
  ------------------
  |  Branch (1644:6): [True: 0, False: 89.2M]
  |  Branch (1644:23): [True: 0, False: 89.2M]
  |  Branch (1644:41): [True: 0, False: 89.2M]
  ------------------
 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|  89.2M|  srcChars += srcStart;
 1651|       |
 1652|  89.2M|  if(srcLength < 0) {
  ------------------
  |  Branch (1652:6): [True: 0, False: 89.2M]
  ------------------
 1653|       |    // get the srcLength if necessary
 1654|      0|    if((srcLength = u_strlen(srcChars)) == 0) {
  ------------------
  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1654:8): [True: 0, False: 0]
  ------------------
 1655|      0|      return *this;
 1656|      0|    }
 1657|      0|  }
 1658|       |
 1659|  89.2M|  int32_t oldLength = length();
 1660|  89.2M|  int32_t newLength;
 1661|       |
 1662|  89.2M|  if (srcLength <= getCapacity() - oldLength && isBufferWritable()) {
  ------------------
  |  Branch (1662:7): [True: 89.2M, False: 31.0k]
  |  Branch (1662:49): [True: 89.2M, False: 47]
  ------------------
 1663|  89.2M|    newLength = oldLength + srcLength;
 1664|       |    // Faster than a memmove
 1665|  89.2M|    if (srcLength <= 4) {
  ------------------
  |  Branch (1665:9): [True: 89.2M, False: 8.18k]
  ------------------
 1666|  89.2M|      char16_t *arr = getArrayStart();
 1667|  89.2M|      arr[oldLength] = srcChars[0];
 1668|  89.2M|      if (srcLength > 1) arr[oldLength+1] = srcChars[1];
  ------------------
  |  Branch (1668:11): [True: 429k, False: 88.7M]
  ------------------
 1669|  89.2M|      if (srcLength > 2) arr[oldLength+2] = srcChars[2];
  ------------------
  |  Branch (1669:11): [True: 274k, False: 88.9M]
  ------------------
 1670|  89.2M|      if (srcLength > 3) arr[oldLength+3] = srcChars[3];
  ------------------
  |  Branch (1670:11): [True: 120k, False: 89.0M]
  ------------------
 1671|  89.2M|      setLength(newLength);
 1672|  89.2M|      return *this;
 1673|  89.2M|    }
 1674|  89.2M|  } else {
 1675|  31.0k|    if (uprv_add32_overflow(oldLength, srcLength, &newLength)) {
  ------------------
  |  | 1394|  31.0k|#define uprv_add32_overflow U_ICU_ENTRY_POINT_RENAME(uprv_add32_overflow)
  |  |  ------------------
  |  |  |  |  123|  31.0k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  31.0k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  31.0k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1675:9): [True: 0, False: 31.0k]
  ------------------
 1676|      0|      setToBogus();
 1677|      0|      return *this;
 1678|      0|    }
 1679|       |
 1680|       |    // Check for append onto ourself
 1681|  31.0k|    const char16_t* oldArray = getArrayStart();
 1682|  31.0k|    if (isBufferWritable() &&
  ------------------
  |  Branch (1682:9): [True: 31.0k, False: 47]
  ------------------
 1683|  31.0k|        oldArray < srcChars + srcLength &&
  ------------------
  |  Branch (1683:9): [True: 18.7k, False: 12.2k]
  ------------------
 1684|  31.0k|        srcChars < oldArray + oldLength) {
  ------------------
  |  Branch (1684:9): [True: 0, False: 18.7k]
  ------------------
 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|  31.0k|    if (!cloneArrayIfNeeded(newLength, getGrowCapacity(newLength))) {
  ------------------
  |  Branch (1695:9): [True: 0, False: 31.0k]
  ------------------
 1696|      0|      return *this;
 1697|      0|    }
 1698|  31.0k|  }
 1699|       |
 1700|  39.2k|  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|  39.2k|  if(srcChars != newArray + oldLength) {
  ------------------
  |  Branch (1708:6): [True: 39.2k, False: 0]
  ------------------
 1709|  39.2k|    us_arrayCopy(srcChars, 0, newArray, oldLength, srcLength);
 1710|  39.2k|  }
 1711|  39.2k|  setLength(newLength);
 1712|       |
 1713|  39.2k|  return *this;
 1714|  89.2M|}
_ZN6icu_7813UnicodeString8doAppendENSt3__117basic_string_viewIDsNS1_11char_traitsIDsEEEE:
 1717|    252|UnicodeString::doAppend(std::u16string_view src) {
 1718|    252|  if (!isWritable() || src.empty()) {
  ------------------
  |  Branch (1718:7): [True: 0, False: 252]
  |  Branch (1718:24): [True: 0, False: 252]
  ------------------
 1719|      0|    return *this;
 1720|      0|  }
 1721|    252|  if (src.length() > INT32_MAX) {
  ------------------
  |  Branch (1721:7): [True: 0, False: 252]
  ------------------
 1722|      0|    setToBogus();
 1723|      0|    return *this;
 1724|      0|  }
 1725|    252|  return doAppend(src.data(), 0, static_cast<int32_t>(src.length()));
 1726|    252|}
_ZNK6icu_7813UnicodeString10doHashCodeEv:
 1864|  1.75M|{
 1865|       |    /* Delegate hash computation to uhash.  This makes UnicodeString
 1866|       |     * hashing consistent with char16_t* hashing.  */
 1867|  1.75M|    int32_t hashCode = ustr_hashUCharsN(getArrayStart(), length());
  ------------------
  |  | 1880|  1.75M|#define ustr_hashUCharsN U_ICU_ENTRY_POINT_RENAME(ustr_hashUCharsN)
  |  |  ------------------
  |  |  |  |  123|  1.75M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.75M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.75M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1868|  1.75M|    if (hashCode == kInvalidHashCode) {
  ------------------
  |  Branch (1868:9): [True: 6, False: 1.75M]
  ------------------
 1869|      6|        hashCode = kEmptyHashCode;
 1870|      6|    }
 1871|  1.75M|    return hashCode;
 1872|  1.75M|}
_ZN6icu_7813UnicodeString9getBufferEi:
 1879|    470|UnicodeString::getBuffer(int32_t minCapacity) {
 1880|    470|  if(minCapacity>=-1 && cloneArrayIfNeeded(minCapacity)) {
  ------------------
  |  Branch (1880:6): [True: 470, False: 0]
  |  Branch (1880:25): [True: 470, False: 0]
  ------------------
 1881|    470|    fUnion.fFields.fLengthAndFlags|=kOpenGetBuffer;
 1882|    470|    setZeroLength();
 1883|    470|    return getArrayStart();
 1884|    470|  } else {
 1885|      0|    return nullptr;
 1886|      0|  }
 1887|    470|}
_ZN6icu_7813UnicodeString13releaseBufferEi:
 1890|    470|UnicodeString::releaseBuffer(int32_t newLength) {
 1891|    470|  if(fUnion.fFields.fLengthAndFlags&kOpenGetBuffer && newLength>=-1) {
  ------------------
  |  Branch (1891:6): [True: 470, False: 0]
  |  Branch (1891:55): [True: 470, False: 0]
  ------------------
 1892|       |    // set the new fLength
 1893|    470|    int32_t capacity=getCapacity();
 1894|    470|    if(newLength==-1) {
  ------------------
  |  Branch (1894:8): [True: 0, False: 470]
  ------------------
 1895|       |      // the new length is the string length, capped by fCapacity
 1896|      0|      const char16_t *array=getArrayStart(), *p=array, *limit=array+capacity;
 1897|      0|      while(p<limit && *p!=0) {
  ------------------
  |  Branch (1897:13): [True: 0, False: 0]
  |  Branch (1897:24): [True: 0, False: 0]
  ------------------
 1898|      0|        ++p;
 1899|      0|      }
 1900|      0|      newLength = static_cast<int32_t>(p - array);
 1901|    470|    } else if(newLength>capacity) {
  ------------------
  |  Branch (1901:15): [True: 0, False: 470]
  ------------------
 1902|      0|      newLength=capacity;
 1903|      0|    }
 1904|    470|    setLength(newLength);
 1905|    470|    fUnion.fFields.fLengthAndFlags&=~kOpenGetBuffer;
 1906|    470|  }
 1907|    470|}
_ZN6icu_7813UnicodeString18cloneArrayIfNeededEiiaPPia:
 1917|  1.29M|                                  UBool forceClone) {
 1918|       |  // default parameters need to be static, therefore
 1919|       |  // the defaults are -1 to have convenience defaults
 1920|  1.29M|  if(newCapacity == -1) {
  ------------------
  |  Branch (1920:6): [True: 1.54k, False: 1.29M]
  ------------------
 1921|  1.54k|    newCapacity = getCapacity();
 1922|  1.54k|  }
 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|  1.29M|  if(!isWritable()) {
  ------------------
  |  Branch (1927:6): [True: 0, False: 1.29M]
  ------------------
 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|  1.29M|  if(forceClone ||
  ------------------
  |  Branch (1938:6): [True: 0, False: 1.29M]
  ------------------
 1939|  1.29M|     fUnion.fFields.fLengthAndFlags & kBufferIsReadonly ||
  ------------------
  |  Branch (1939:6): [True: 5.53k, False: 1.28M]
  ------------------
 1940|  1.29M|     (fUnion.fFields.fLengthAndFlags & kRefCounted && refCount() > 1) ||
  ------------------
  |  Branch (1940:7): [True: 17.7k, False: 1.27M]
  |  Branch (1940:55): [True: 47, False: 17.7k]
  ------------------
 1941|  1.29M|     newCapacity > getCapacity()
  ------------------
  |  Branch (1941:6): [True: 31.1k, False: 1.25M]
  ------------------
 1942|  1.29M|  ) {
 1943|       |    // check growCapacity for default value and use of the stack buffer
 1944|  36.7k|    if(growCapacity < 0) {
  ------------------
  |  Branch (1944:8): [True: 81, False: 36.6k]
  ------------------
 1945|     81|      growCapacity = newCapacity;
 1946|  36.6k|    } else if(newCapacity <= US_STACKBUF_SIZE && growCapacity > US_STACKBUF_SIZE) {
  ------------------
  |  Branch (1946:15): [True: 5.58k, False: 31.0k]
  |  Branch (1946:50): [True: 5.58k, False: 0]
  ------------------
 1947|  5.58k|      growCapacity = US_STACKBUF_SIZE;
 1948|  31.0k|    } else if(newCapacity > growCapacity) {
  ------------------
  |  Branch (1948:15): [True: 0, False: 31.0k]
  ------------------
 1949|      0|      setToBogus();
 1950|      0|      return false;  // bad inputs
 1951|      0|    }
 1952|  36.7k|    if(growCapacity > kMaxCapacity) {
  ------------------
  |  Branch (1952:8): [True: 0, False: 36.7k]
  ------------------
 1953|      0|      setToBogus();
 1954|      0|      return false;
 1955|      0|    }
 1956|       |
 1957|       |    // save old values
 1958|  36.7k|    char16_t oldStackBuffer[US_STACKBUF_SIZE];
 1959|  36.7k|    char16_t *oldArray;
 1960|  36.7k|    int32_t oldLength = length();
 1961|  36.7k|    int16_t flags = fUnion.fFields.fLengthAndFlags;
 1962|       |
 1963|  36.7k|    if(flags&kUsingStackBuffer) {
  ------------------
  |  Branch (1963:8): [True: 13.5k, False: 23.1k]
  ------------------
 1964|  13.5k|      U_ASSERT(!(flags&kRefCounted)); /* kRefCounted and kUsingStackBuffer are mutally exclusive */
  ------------------
  |  |   35|  13.5k|#   define U_ASSERT(exp) (void)0
  ------------------
 1965|  13.5k|      if(doCopyArray && growCapacity > US_STACKBUF_SIZE) {
  ------------------
  |  Branch (1965:10): [True: 13.4k, False: 22]
  |  Branch (1965:25): [True: 13.4k, False: 0]
  ------------------
 1966|       |        // copy the stack buffer contents because it will be overwritten with
 1967|       |        // fUnion.fFields values
 1968|  13.4k|        us_arrayCopy(fUnion.fStackFields.fBuffer, 0, oldStackBuffer, 0, oldLength);
 1969|  13.4k|        oldArray = oldStackBuffer;
 1970|  13.4k|      } else {
 1971|     22|        oldArray = nullptr; // no need to copy from the stack buffer to itself
 1972|     22|      }
 1973|  23.1k|    } else {
 1974|  23.1k|      oldArray = fUnion.fFields.fArray;
 1975|  23.1k|      U_ASSERT(oldArray!=nullptr); /* when stack buffer is not used, oldArray must have a non-nullptr reference */
  ------------------
  |  |   35|  23.1k|#   define U_ASSERT(exp) (void)0
  ------------------
 1976|  23.1k|    }
 1977|       |
 1978|       |    // allocate a new array
 1979|  36.7k|    if(allocate(growCapacity) ||
  ------------------
  |  Branch (1979:8): [True: 36.7k, False: 0]
  ------------------
 1980|  36.7k|       (newCapacity < growCapacity && allocate(newCapacity))
  ------------------
  |  Branch (1980:9): [True: 0, False: 0]
  |  Branch (1980:39): [True: 0, False: 0]
  ------------------
 1981|  36.7k|    ) {
 1982|  36.7k|      if(doCopyArray) {
  ------------------
  |  Branch (1982:10): [True: 31.1k, False: 5.56k]
  ------------------
 1983|       |        // copy the contents
 1984|       |        // do not copy more than what fits - it may be smaller than before
 1985|  31.1k|        int32_t minLength = oldLength;
 1986|  31.1k|        newCapacity = getCapacity();
 1987|  31.1k|        if(newCapacity < minLength) {
  ------------------
  |  Branch (1987:12): [True: 0, False: 31.1k]
  ------------------
 1988|      0|          minLength = newCapacity;
 1989|      0|        }
 1990|  31.1k|        if(oldArray != nullptr) {
  ------------------
  |  Branch (1990:12): [True: 31.1k, False: 0]
  ------------------
 1991|  31.1k|          us_arrayCopy(oldArray, 0, getArrayStart(), 0, minLength);
 1992|  31.1k|        }
 1993|  31.1k|        setLength(minLength);
 1994|  31.1k|      } else {
 1995|  5.56k|        setZeroLength();
 1996|  5.56k|      }
 1997|       |
 1998|       |      // release the old array
 1999|  36.7k|      if(flags & kRefCounted) {
  ------------------
  |  Branch (1999:10): [True: 17.6k, False: 19.0k]
  ------------------
 2000|       |        // the array is refCounted; decrement and release if 0
 2001|  17.6k|        u_atomic_int32_t* pRefCount = reinterpret_cast<u_atomic_int32_t*>(oldArray) - 1;
 2002|  17.6k|        if(umtx_atomic_dec(pRefCount) == 0) {
  ------------------
  |  Branch (2002:12): [True: 17.6k, False: 47]
  ------------------
 2003|  17.6k|          if (pBufferToDelete == nullptr) {
  ------------------
  |  Branch (2003:15): [True: 17.6k, 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|  17.6k|            uprv_free((void *)pRefCount);
  ------------------
  |  | 1503|  17.6k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  17.6k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  17.6k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  17.6k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2008|  17.6k|          } else {
 2009|       |            // the caller requested to delete it himself
 2010|      0|            *pBufferToDelete = reinterpret_cast<int32_t*>(pRefCount);
 2011|      0|          }
 2012|  17.6k|        }
 2013|  17.6k|      }
 2014|  36.7k|    } 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|  36.7k|  }
 2025|  1.29M|  return true;
 2026|  1.29M|}
uhash_hashUnicodeString_78:
 2081|  1.75M|uhash_hashUnicodeString(const UElement key) {
 2082|  1.75M|    const UnicodeString *str = (const UnicodeString*) key.pointer;
 2083|  1.75M|    return (str == nullptr) ? 0 : str->hashCode();
  ------------------
  |  Branch (2083:12): [True: 0, False: 1.75M]
  ------------------
 2084|  1.75M|}
uhash_compareUnicodeString_78:
 2089|   465k|uhash_compareUnicodeString(const UElement key1, const UElement key2) {
 2090|   465k|    const UnicodeString *str1 = (const UnicodeString*) key1.pointer;
 2091|   465k|    const UnicodeString *str2 = (const UnicodeString*) key2.pointer;
 2092|   465k|    if (str1 == str2) {
  ------------------
  |  Branch (2092:9): [True: 0, False: 465k]
  ------------------
 2093|      0|        return true;
 2094|      0|    }
 2095|   465k|    if (str1 == nullptr || str2 == nullptr) {
  ------------------
  |  Branch (2095:9): [True: 0, False: 465k]
  |  Branch (2095:28): [True: 0, False: 465k]
  ------------------
 2096|      0|        return false;
 2097|      0|    }
 2098|   465k|    return *str1 == *str2;
 2099|   465k|}
unistr.cpp:_ZL12us_arrayCopyPKDsiPDsii:
   87|   237k|{
   88|   237k|  if(count>0) {
  ------------------
  |  Branch (88:6): [True: 203k, False: 33.5k]
  ------------------
   89|   203k|    uprv_memmove(dst+dstStart, src+srcStart, (size_t)count*sizeof(*src));
  ------------------
  |  |   51|   203k|#define uprv_memmove(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|   203k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   52|   203k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   53|   203k|    _Pragma("clang diagnostic push") \
  |  |   54|   203k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   55|   203k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|   203k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   56|   203k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|   203k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   57|   203k|    _Pragma("clang diagnostic pop") \
  |  |   58|   203k|    U_STANDARD_CPP_NAMESPACE memmove(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|   203k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   59|   203k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|   203k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   90|   203k|  }
   91|   237k|}
unistr.cpp:_ZN6icu_7812_GLOBAL__N_115getGrowCapacityEi:
  397|   170k|int32_t getGrowCapacity(int32_t newLength) {
  398|   170k|  int32_t growSize = (newLength >> 2) + kGrowSize;
  399|   170k|  if(growSize <= (kMaxCapacity - newLength)) {
  ------------------
  |  Branch (399:6): [True: 170k, False: 0]
  ------------------
  400|   170k|    return newLength + growSize;
  401|   170k|  } else {
  402|      0|    return kMaxCapacity;
  403|      0|  }
  404|   170k|}

_ZN6icu_787UMemorynwEm:
   61|  7.13M|void * U_EXPORT2 UMemory::operator new(size_t size) noexcept {
   62|  7.13M|    return uprv_malloc(size);
  ------------------
  |  | 1524|  7.13M|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  7.13M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.13M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.13M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   63|  7.13M|}
_ZN6icu_787UMemorydlEPv:
   65|  7.12M|void U_EXPORT2 UMemory::operator delete(void *p) noexcept {
   66|  7.12M|    if(p!=nullptr) {
  ------------------
  |  Branch (66:8): [True: 7.12M, False: 0]
  ------------------
   67|  7.12M|        uprv_free(p);
  ------------------
  |  | 1503|  7.12M|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  7.12M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.12M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.12M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   68|  7.12M|    }
   69|  7.12M|}
_ZN6icu_787UMemorynaEm:
   71|      3|void * U_EXPORT2 UMemory::operator new[](size_t size) noexcept {
   72|      3|    return uprv_malloc(size);
  ------------------
  |  | 1524|      3|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   73|      3|}
_ZN6icu_787UObjectD2Ev:
   94|  18.2M|UObject::~UObject() {}
uprv_deleteUObject_78:
  103|   649k|uprv_deleteUObject(void *obj) {
  104|   649k|    delete static_cast<UObject *>(obj);
  105|   649k|}

ures_initStackObject_78:
  726|   832k|U_CFUNC void ures_initStackObject(UResourceBundle* resB) {
  727|   832k|  uprv_memset(resB, 0, sizeof(UResourceBundle));
  ------------------
  |  |  100|   832k|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|   832k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  728|   832k|  ures_setIsStackObject(resB, true);
  729|   832k|}
_ZN6icu_7820StackUResourceBundleC2Ev:
  733|   763k|StackUResourceBundle::StackUResourceBundle() {
  734|   763k|    ures_initStackObject(&bundle);
  ------------------
  |  | 1690|   763k|#define ures_initStackObject U_ICU_ENTRY_POINT_RENAME(ures_initStackObject)
  |  |  ------------------
  |  |  |  |  123|   763k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   763k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   763k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  735|   763k|}
_ZN6icu_7820StackUResourceBundleD2Ev:
  737|   763k|StackUResourceBundle::~StackUResourceBundle() {
  738|   763k|    ures_close(&bundle);
  ------------------
  |  | 1652|   763k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|   763k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   763k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   763k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  739|   763k|}
ures_close_78:
 1147|  1.65M|{
 1148|  1.65M|    ures_closeBundle(resB, true);
 1149|  1.65M|}
ures_getString_78:
 1524|   209k|U_CAPI const char16_t* U_EXPORT2 ures_getString(const UResourceBundle* resB, int32_t* len, UErrorCode* status) {
 1525|   209k|    const char16_t *s;
 1526|   209k|    if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (1526:9): [True: 0, False: 209k]
  |  Branch (1526:28): [True: 2, False: 209k]
  ------------------
 1527|      2|        return nullptr;
 1528|      2|    }
 1529|   209k|    if(resB == nullptr) {
  ------------------
  |  Branch (1529:8): [True: 0, False: 209k]
  ------------------
 1530|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
 1531|      0|        return nullptr;
 1532|      0|    }
 1533|   209k|    s = res_getString({resB}, &resB->getResData(), resB->fRes, len);
 1534|   209k|    if (s == nullptr) {
  ------------------
  |  Branch (1534:9): [True: 0, False: 209k]
  ------------------
 1535|      0|        *status = U_RESOURCE_TYPE_MISMATCH;
 1536|      0|    }
 1537|   209k|    return s;
 1538|   209k|}
ures_getBinary_78:
 1613|     28|                                               UErrorCode*               status) {
 1614|     28|  const uint8_t *p;
 1615|     28|  if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (1615:7): [True: 0, False: 28]
  |  Branch (1615:26): [True: 0, False: 28]
  ------------------
 1616|      0|    return nullptr;
 1617|      0|  }
 1618|     28|  if(resB == nullptr) {
  ------------------
  |  Branch (1618:6): [True: 0, False: 28]
  ------------------
 1619|      0|    *status = U_ILLEGAL_ARGUMENT_ERROR;
 1620|      0|    return nullptr;
 1621|      0|  }
 1622|     28|  p = res_getBinary({resB}, &resB->getResData(), resB->fRes, len);
 1623|     28|  if (p == nullptr) {
  ------------------
  |  Branch (1623:7): [True: 0, False: 28]
  ------------------
 1624|      0|    *status = U_RESOURCE_TYPE_MISMATCH;
 1625|      0|  }
 1626|     28|  return p;
 1627|     28|}
ures_getIntVector_78:
 1630|  7.19k|                                                   UErrorCode*               status) {
 1631|  7.19k|  const int32_t *p;
 1632|  7.19k|  if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (1632:7): [True: 0, False: 7.19k]
  |  Branch (1632:26): [True: 58, False: 7.13k]
  ------------------
 1633|     58|    return nullptr;
 1634|     58|  }
 1635|  7.13k|  if(resB == nullptr) {
  ------------------
  |  Branch (1635:6): [True: 0, False: 7.13k]
  ------------------
 1636|      0|    *status = U_ILLEGAL_ARGUMENT_ERROR;
 1637|      0|    return nullptr;
 1638|      0|  }
 1639|  7.13k|  p = res_getIntVector({resB}, &resB->getResData(), resB->fRes, len);
 1640|  7.13k|  if (p == nullptr) {
  ------------------
  |  Branch (1640:7): [True: 0, False: 7.13k]
  ------------------
 1641|      0|    *status = U_RESOURCE_TYPE_MISMATCH;
 1642|      0|  }
 1643|  7.13k|  return p;
 1644|  7.13k|}
ures_getInt_78:
 1648|  27.1k|U_CAPI int32_t U_EXPORT2 ures_getInt(const UResourceBundle* resB, UErrorCode *status) {
 1649|  27.1k|  if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (1649:7): [True: 0, False: 27.1k]
  |  Branch (1649:26): [True: 460, False: 26.6k]
  ------------------
 1650|    460|    return 0xffffffff;
 1651|    460|  }
 1652|  26.6k|  if(resB == nullptr) {
  ------------------
  |  Branch (1652:6): [True: 0, False: 26.6k]
  ------------------
 1653|      0|    *status = U_ILLEGAL_ARGUMENT_ERROR;
 1654|      0|    return 0xffffffff;
 1655|      0|  }
 1656|  26.6k|  if(RES_GET_TYPE(resB->fRes) != URES_INT) {
  ------------------
  |  |   68|  26.6k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  |  Branch (1656:6): [True: 0, False: 26.6k]
  ------------------
 1657|      0|    *status = U_RESOURCE_TYPE_MISMATCH;
 1658|      0|    return 0xffffffff;
 1659|      0|  }
 1660|  26.6k|  return res_getInt({resB}, resB->fRes);
 1661|  26.6k|}
ures_getType_78:
 1678|   122k|U_CAPI UResType U_EXPORT2 ures_getType(const UResourceBundle *resB) {
 1679|   122k|  if(resB == nullptr) {
  ------------------
  |  Branch (1679:6): [True: 69, False: 122k]
  ------------------
 1680|     69|    return URES_NONE;
 1681|     69|  }
 1682|   122k|  return res_getPublicType(resB->fRes);
  ------------------
  |  |  203|   122k|#define res_getPublicType U_ICU_ENTRY_POINT_RENAME(res_getPublicType)
  |  |  ------------------
  |  |  |  |  123|   122k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   122k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   122k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1683|   122k|}
ures_getKey_78:
 1685|  3.23k|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|  3.23k|  if(resB == nullptr) {
  ------------------
  |  Branch (1695:6): [True: 0, False: 3.23k]
  ------------------
 1696|      0|    return nullptr;
 1697|      0|  }
 1698|  3.23k|  return(resB->fKey);
 1699|  3.23k|}
ures_getSize_78:
 1701|  38.9k|U_CAPI int32_t U_EXPORT2 ures_getSize(const UResourceBundle *resB) {
 1702|  38.9k|  if(resB == nullptr) {
  ------------------
  |  Branch (1702:6): [True: 0, False: 38.9k]
  ------------------
 1703|      0|    return 0;
 1704|      0|  }
 1705|       |  
 1706|  38.9k|  return resB->fSize;
 1707|  38.9k|}
ures_resetIterator_78:
 1721|    917|U_CAPI void U_EXPORT2 ures_resetIterator(UResourceBundle *resB){
 1722|    917|  if(resB == nullptr) {
  ------------------
  |  Branch (1722:6): [True: 0, False: 917]
  ------------------
 1723|      0|    return;
 1724|      0|  }
 1725|    917|  resB->fIndex = -1;
 1726|    917|}
ures_hasNext_78:
 1728|  83.1k|U_CAPI UBool U_EXPORT2 ures_hasNext(const UResourceBundle *resB) {
 1729|  83.1k|  if(resB == nullptr) {
  ------------------
  |  Branch (1729:6): [True: 0, False: 83.1k]
  ------------------
 1730|      0|    return false;
 1731|      0|  }
 1732|  83.1k|  return resB->fIndex < resB->fSize-1;
 1733|  83.1k|}
ures_getNextString_78:
 1735|    149|U_CAPI const char16_t* U_EXPORT2 ures_getNextString(UResourceBundle *resB, int32_t* len, const char ** key, UErrorCode *status) {
 1736|    149|  Resource r = RES_BOGUS;
  ------------------
  |  |   65|    149|#define RES_BOGUS 0xffffffff
  ------------------
 1737|       |  
 1738|    149|  if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (1738:7): [True: 0, False: 149]
  |  Branch (1738:26): [True: 0, False: 149]
  ------------------
 1739|      0|    return nullptr;
 1740|      0|  }
 1741|    149|  if(resB == nullptr) {
  ------------------
  |  Branch (1741:6): [True: 0, False: 149]
  ------------------
 1742|      0|    *status = U_ILLEGAL_ARGUMENT_ERROR;
 1743|      0|    return nullptr;
 1744|      0|  }
 1745|       |  
 1746|    149|  if(resB->fIndex == resB->fSize-1) {
  ------------------
  |  Branch (1746:6): [True: 0, False: 149]
  ------------------
 1747|      0|    *status = U_INDEX_OUTOFBOUNDS_ERROR;
 1748|    149|  } else {
 1749|    149|    resB->fIndex++;
 1750|    149|    switch(RES_GET_TYPE(resB->fRes)) {
  ------------------
  |  |   68|    149|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 1751|      0|    case URES_STRING:
  ------------------
  |  Branch (1751:5): [True: 0, False: 149]
  ------------------
 1752|      1|    case URES_STRING_V2:
  ------------------
  |  Branch (1752:5): [True: 1, False: 148]
  ------------------
 1753|      1|      return res_getString({resB}, &resB->getResData(), resB->fRes, len);
 1754|      0|    case URES_TABLE:
  ------------------
  |  Branch (1754:5): [True: 0, False: 149]
  ------------------
 1755|      0|    case URES_TABLE16:
  ------------------
  |  Branch (1755:5): [True: 0, False: 149]
  ------------------
 1756|      0|    case URES_TABLE32:
  ------------------
  |  Branch (1756:5): [True: 0, False: 149]
  ------------------
 1757|      0|      r = res_getTableItemByIndex(&resB->getResData(), resB->fRes, resB->fIndex, 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1758|      0|      if(r == RES_BOGUS && resB->fHasFallback) {
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1758:10): [True: 0, False: 0]
  |  Branch (1758:28): [True: 0, False: 0]
  ------------------
 1759|       |        /* TODO: do the fallback */
 1760|      0|      }
 1761|      0|      return ures_getStringWithAlias(resB, r, resB->fIndex, len, status);
 1762|      0|    case URES_ARRAY:
  ------------------
  |  Branch (1762:5): [True: 0, False: 149]
  ------------------
 1763|    148|    case URES_ARRAY16:
  ------------------
  |  Branch (1763:5): [True: 148, False: 1]
  ------------------
 1764|    148|      r = res_getArrayItem(&resB->getResData(), resB->fRes, resB->fIndex);
  ------------------
  |  |  200|    148|#define res_getArrayItem U_ICU_ENTRY_POINT_RENAME(res_getArrayItem)
  |  |  ------------------
  |  |  |  |  123|    148|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    148|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    148|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1765|    148|      if(r == RES_BOGUS && resB->fHasFallback) {
  ------------------
  |  |   65|    296|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1765:10): [True: 0, False: 148]
  |  Branch (1765:28): [True: 0, False: 0]
  ------------------
 1766|       |        /* TODO: do the fallback */
 1767|      0|      }
 1768|    148|      return ures_getStringWithAlias(resB, r, resB->fIndex, len, status);
 1769|      0|    case URES_ALIAS:
  ------------------
  |  Branch (1769:5): [True: 0, False: 149]
  ------------------
 1770|      0|      return ures_getStringWithAlias(resB, resB->fRes, resB->fIndex, len, status);
 1771|      0|    case URES_INT:
  ------------------
  |  Branch (1771:5): [True: 0, False: 149]
  ------------------
 1772|      0|    case URES_BINARY:
  ------------------
  |  Branch (1772:5): [True: 0, False: 149]
  ------------------
 1773|      0|    case URES_INT_VECTOR:
  ------------------
  |  Branch (1773:5): [True: 0, False: 149]
  ------------------
 1774|      0|        *status = U_RESOURCE_TYPE_MISMATCH;
 1775|      0|        U_FALLTHROUGH;
  ------------------
  |  |  511|      0|#       define U_FALLTHROUGH [[clang::fallthrough]]
  ------------------
 1776|      0|    default:
  ------------------
  |  Branch (1776:5): [True: 0, False: 149]
  ------------------
 1777|      0|      return nullptr;
 1778|    149|    }
 1779|    149|  }
 1780|       |
 1781|      0|  return nullptr;
 1782|    149|}
ures_getNextResource_78:
 1784|  82.0k|U_CAPI UResourceBundle* U_EXPORT2 ures_getNextResource(UResourceBundle *resB, UResourceBundle *fillIn, UErrorCode *status) {
 1785|  82.0k|    const char *key = nullptr;
 1786|  82.0k|    Resource r = RES_BOGUS;
  ------------------
  |  |   65|  82.0k|#define RES_BOGUS 0xffffffff
  ------------------
 1787|       |
 1788|  82.0k|    if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (1788:9): [True: 0, False: 82.0k]
  |  Branch (1788:28): [True: 0, False: 82.0k]
  ------------------
 1789|       |            /*return nullptr;*/
 1790|      0|            return fillIn;
 1791|      0|    }
 1792|  82.0k|    if(resB == nullptr) {
  ------------------
  |  Branch (1792:8): [True: 0, False: 82.0k]
  ------------------
 1793|      0|            *status = U_ILLEGAL_ARGUMENT_ERROR;
 1794|       |            /*return nullptr;*/
 1795|      0|            return fillIn;
 1796|      0|    }
 1797|       |
 1798|  82.0k|    if(resB->fIndex == resB->fSize-1) {
  ------------------
  |  Branch (1798:8): [True: 0, False: 82.0k]
  ------------------
 1799|      0|      *status = U_INDEX_OUTOFBOUNDS_ERROR;
 1800|       |      /*return nullptr;*/
 1801|  82.0k|    } else {
 1802|  82.0k|        resB->fIndex++;
 1803|  82.0k|        switch(RES_GET_TYPE(resB->fRes)) {
  ------------------
  |  |   68|  82.0k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 1804|      0|        case URES_INT:
  ------------------
  |  Branch (1804:9): [True: 0, False: 82.0k]
  ------------------
 1805|      0|        case URES_BINARY:
  ------------------
  |  Branch (1805:9): [True: 0, False: 82.0k]
  ------------------
 1806|      0|        case URES_STRING:
  ------------------
  |  Branch (1806:9): [True: 0, False: 82.0k]
  ------------------
 1807|      0|        case URES_STRING_V2:
  ------------------
  |  Branch (1807:9): [True: 0, False: 82.0k]
  ------------------
 1808|      0|        case URES_INT_VECTOR:
  ------------------
  |  Branch (1808:9): [True: 0, False: 82.0k]
  ------------------
 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|  1.96k|        case URES_TABLE:
  ------------------
  |  Branch (1810:9): [True: 1.96k, False: 80.0k]
  ------------------
 1811|  81.7k|        case URES_TABLE16:
  ------------------
  |  Branch (1811:9): [True: 79.7k, False: 2.27k]
  ------------------
 1812|  81.7k|        case URES_TABLE32:
  ------------------
  |  Branch (1812:9): [True: 0, False: 82.0k]
  ------------------
 1813|  81.7k|            r = res_getTableItemByIndex(&resB->getResData(), resB->fRes, resB->fIndex, &key);
  ------------------
  |  |  206|  81.7k|#define res_getTableItemByIndex U_ICU_ENTRY_POINT_RENAME(res_getTableItemByIndex)
  |  |  ------------------
  |  |  |  |  123|  81.7k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  81.7k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  81.7k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1814|  81.7k|            if(r == RES_BOGUS && resB->fHasFallback) {
  ------------------
  |  |   65|   163k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1814:16): [True: 0, False: 81.7k]
  |  Branch (1814:34): [True: 0, False: 0]
  ------------------
 1815|       |                /* TODO: do the fallback */
 1816|      0|            }
 1817|  81.7k|            return init_resb_result(resB->fData, r, key, resB->fIndex, resB, fillIn, status);
 1818|    303|        case URES_ARRAY:
  ------------------
  |  Branch (1818:9): [True: 303, False: 81.7k]
  ------------------
 1819|    303|        case URES_ARRAY16:
  ------------------
  |  Branch (1819:9): [True: 0, False: 82.0k]
  ------------------
 1820|    303|            r = res_getArrayItem(&resB->getResData(), resB->fRes, resB->fIndex);
  ------------------
  |  |  200|    303|#define res_getArrayItem U_ICU_ENTRY_POINT_RENAME(res_getArrayItem)
  |  |  ------------------
  |  |  |  |  123|    303|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    303|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    303|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1821|    303|            if(r == RES_BOGUS && resB->fHasFallback) {
  ------------------
  |  |   65|    606|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1821:16): [True: 0, False: 303]
  |  Branch (1821:34): [True: 0, False: 0]
  ------------------
 1822|       |                /* TODO: do the fallback */
 1823|      0|            }
 1824|    303|            return init_resb_result(resB->fData, r, key, resB->fIndex, resB, fillIn, status);
 1825|      0|        default:
  ------------------
  |  Branch (1825:9): [True: 0, False: 82.0k]
  ------------------
 1826|       |            /*return nullptr;*/
 1827|      0|            return fillIn;
 1828|  82.0k|        }
 1829|  82.0k|    }
 1830|       |    /*return nullptr;*/
 1831|      0|    return fillIn;
 1832|  82.0k|}
ures_getByIndex_78:
 1834|   114k|U_CAPI UResourceBundle* U_EXPORT2 ures_getByIndex(const UResourceBundle *resB, int32_t indexR, UResourceBundle *fillIn, UErrorCode *status) {
 1835|   114k|    const char* key = nullptr;
 1836|   114k|    Resource r = RES_BOGUS;
  ------------------
  |  |   65|   114k|#define RES_BOGUS 0xffffffff
  ------------------
 1837|       |
 1838|   114k|    if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (1838:9): [True: 0, False: 114k]
  |  Branch (1838:28): [True: 0, False: 114k]
  ------------------
 1839|       |        /*return nullptr;*/
 1840|      0|        return fillIn;
 1841|      0|    }
 1842|   114k|    if(resB == nullptr) {
  ------------------
  |  Branch (1842:8): [True: 0, False: 114k]
  ------------------
 1843|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
 1844|       |        /*return nullptr;*/
 1845|      0|        return fillIn;
 1846|      0|    }
 1847|       |
 1848|   114k|    if(indexR >= 0 && resB->fSize > indexR) {
  ------------------
  |  Branch (1848:8): [True: 114k, False: 0]
  |  Branch (1848:23): [True: 114k, False: 0]
  ------------------
 1849|   114k|        switch(RES_GET_TYPE(resB->fRes)) {
  ------------------
  |  |   68|   114k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 1850|      0|        case URES_INT:
  ------------------
  |  Branch (1850:9): [True: 0, False: 114k]
  ------------------
 1851|      0|        case URES_BINARY:
  ------------------
  |  Branch (1851:9): [True: 0, False: 114k]
  ------------------
 1852|      0|        case URES_STRING:
  ------------------
  |  Branch (1852:9): [True: 0, False: 114k]
  ------------------
 1853|      0|        case URES_STRING_V2:
  ------------------
  |  Branch (1853:9): [True: 0, False: 114k]
  ------------------
 1854|      0|        case URES_INT_VECTOR:
  ------------------
  |  Branch (1854:9): [True: 0, False: 114k]
  ------------------
 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: 114k]
  ------------------
 1857|      0|        case URES_TABLE16:
  ------------------
  |  Branch (1857:9): [True: 0, False: 114k]
  ------------------
 1858|      0|        case URES_TABLE32:
  ------------------
  |  Branch (1858:9): [True: 0, False: 114k]
  ------------------
 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|  17.2k|        case URES_ARRAY:
  ------------------
  |  Branch (1864:9): [True: 17.2k, False: 96.7k]
  ------------------
 1865|   114k|        case URES_ARRAY16:
  ------------------
  |  Branch (1865:9): [True: 96.7k, False: 17.2k]
  ------------------
 1866|   114k|            r = res_getArrayItem(&resB->getResData(), resB->fRes, indexR);
  ------------------
  |  |  200|   114k|#define res_getArrayItem U_ICU_ENTRY_POINT_RENAME(res_getArrayItem)
  |  |  ------------------
  |  |  |  |  123|   114k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   114k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   114k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1867|   114k|            if(r == RES_BOGUS && resB->fHasFallback) {
  ------------------
  |  |   65|   228k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1867:16): [True: 0, False: 114k]
  |  Branch (1867:34): [True: 0, False: 0]
  ------------------
 1868|       |                /* TODO: do the fallback */
 1869|      0|            }
 1870|   114k|            return init_resb_result(resB->fData, r, key, indexR, resB, fillIn, status);
 1871|      0|        default:
  ------------------
  |  Branch (1871:9): [True: 0, False: 114k]
  ------------------
 1872|       |            /*return nullptr;*/
 1873|      0|            return fillIn;
 1874|   114k|        }
 1875|   114k|    } else {
 1876|      0|        *status = U_MISSING_RESOURCE_ERROR;
 1877|      0|    }
 1878|       |    /*return nullptr;*/
 1879|      0|    return fillIn;
 1880|   114k|}
ures_getStringByIndex_78:
 1882|  71.1k|U_CAPI const char16_t* U_EXPORT2 ures_getStringByIndex(const UResourceBundle *resB, int32_t indexS, int32_t* len, UErrorCode *status) {
 1883|  71.1k|    const char* key = nullptr;
 1884|  71.1k|    Resource r = RES_BOGUS;
  ------------------
  |  |   65|  71.1k|#define RES_BOGUS 0xffffffff
  ------------------
 1885|       |
 1886|  71.1k|    if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (1886:9): [True: 0, False: 71.1k]
  |  Branch (1886:28): [True: 250, False: 70.9k]
  ------------------
 1887|    250|        return nullptr;
 1888|    250|    }
 1889|  70.9k|    if(resB == nullptr) {
  ------------------
  |  Branch (1889:8): [True: 0, False: 70.9k]
  ------------------
 1890|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
 1891|      0|        return nullptr;
 1892|      0|    }
 1893|       |
 1894|  70.9k|    if(indexS >= 0 && resB->fSize > indexS) {
  ------------------
  |  Branch (1894:8): [True: 70.9k, False: 0]
  |  Branch (1894:23): [True: 70.9k, False: 0]
  ------------------
 1895|  70.9k|        switch(RES_GET_TYPE(resB->fRes)) {
  ------------------
  |  |   68|  70.9k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 1896|      0|        case URES_STRING:
  ------------------
  |  Branch (1896:9): [True: 0, False: 70.9k]
  ------------------
 1897|      0|        case URES_STRING_V2:
  ------------------
  |  Branch (1897:9): [True: 0, False: 70.9k]
  ------------------
 1898|      0|            return res_getString({resB}, &resB->getResData(), resB->fRes, len);
 1899|      6|        case URES_TABLE:
  ------------------
  |  Branch (1899:9): [True: 6, False: 70.9k]
  ------------------
 1900|      6|        case URES_TABLE16:
  ------------------
  |  Branch (1900:9): [True: 0, False: 70.9k]
  ------------------
 1901|      6|        case URES_TABLE32:
  ------------------
  |  Branch (1901:9): [True: 0, False: 70.9k]
  ------------------
 1902|      6|            r = res_getTableItemByIndex(&resB->getResData(), resB->fRes, indexS, &key);
  ------------------
  |  |  206|      6|#define res_getTableItemByIndex U_ICU_ENTRY_POINT_RENAME(res_getTableItemByIndex)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1903|      6|            if(r == RES_BOGUS && resB->fHasFallback) {
  ------------------
  |  |   65|     12|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1903:16): [True: 0, False: 6]
  |  Branch (1903:34): [True: 0, False: 0]
  ------------------
 1904|       |                /* TODO: do the fallback */
 1905|      0|            }
 1906|      6|            return ures_getStringWithAlias(resB, r, indexS, len, status);
 1907|  3.23k|        case URES_ARRAY:
  ------------------
  |  Branch (1907:9): [True: 3.23k, False: 67.6k]
  ------------------
 1908|  70.9k|        case URES_ARRAY16:
  ------------------
  |  Branch (1908:9): [True: 67.6k, False: 3.24k]
  ------------------
 1909|  70.9k|            r = res_getArrayItem(&resB->getResData(), resB->fRes, indexS);
  ------------------
  |  |  200|  70.9k|#define res_getArrayItem U_ICU_ENTRY_POINT_RENAME(res_getArrayItem)
  |  |  ------------------
  |  |  |  |  123|  70.9k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  70.9k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  70.9k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1910|  70.9k|            if(r == RES_BOGUS && resB->fHasFallback) {
  ------------------
  |  |   65|   141k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1910:16): [True: 0, False: 70.9k]
  |  Branch (1910:34): [True: 0, False: 0]
  ------------------
 1911|       |                /* TODO: do the fallback */
 1912|      0|            }
 1913|  70.9k|            return ures_getStringWithAlias(resB, r, indexS, len, status);
 1914|      0|        case URES_ALIAS:
  ------------------
  |  Branch (1914:9): [True: 0, False: 70.9k]
  ------------------
 1915|      0|            return ures_getStringWithAlias(resB, resB->fRes, indexS, len, status);
 1916|      0|        case URES_INT:
  ------------------
  |  Branch (1916:9): [True: 0, False: 70.9k]
  ------------------
 1917|      0|        case URES_BINARY:
  ------------------
  |  Branch (1917:9): [True: 0, False: 70.9k]
  ------------------
 1918|      0|        case URES_INT_VECTOR:
  ------------------
  |  Branch (1918:9): [True: 0, False: 70.9k]
  ------------------
 1919|      0|            *status = U_RESOURCE_TYPE_MISMATCH;
 1920|      0|            break;
 1921|      0|        default:
  ------------------
  |  Branch (1921:9): [True: 0, False: 70.9k]
  ------------------
 1922|       |          /* must not occur */
 1923|      0|          *status = U_INTERNAL_PROGRAM_ERROR;
 1924|      0|          break;
 1925|  70.9k|        }
 1926|  70.9k|    } else {
 1927|      0|        *status = U_MISSING_RESOURCE_ERROR;
 1928|      0|    }
 1929|      0|    return nullptr;
 1930|  70.9k|}
ures_getStringByKeyWithFallback_78:
 2033|  13.3k|                                UErrorCode *status) {
 2034|       |
 2035|  13.3k|    UResourceBundle stack;
 2036|  13.3k|    const char16_t* retVal = nullptr;
 2037|  13.3k|    ures_initStackObject(&stack);
  ------------------
  |  | 1690|  13.3k|#define ures_initStackObject U_ICU_ENTRY_POINT_RENAME(ures_initStackObject)
  |  |  ------------------
  |  |  |  |  123|  13.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2038|  13.3k|    ures_getByKeyWithFallback(resB, inKey, &stack, status);
  ------------------
  |  | 1662|  13.3k|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|  13.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2039|  13.3k|    int32_t length;
 2040|  13.3k|    retVal = ures_getString(&stack, &length, status);
  ------------------
  |  | 1675|  13.3k|#define ures_getString U_ICU_ENTRY_POINT_RENAME(ures_getString)
  |  |  ------------------
  |  |  |  |  123|  13.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2041|  13.3k|    ures_close(&stack);
  ------------------
  |  | 1652|  13.3k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|  13.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2042|  13.3k|    if (U_FAILURE(*status)) {
  ------------------
  |  Branch (2042:9): [True: 2, False: 13.3k]
  ------------------
 2043|      2|        return nullptr;
 2044|      2|    }
 2045|  13.3k|    if (length == 3 && retVal[0] == EMPTY_SET && retVal[1] == EMPTY_SET && retVal[2] == EMPTY_SET ) {
  ------------------
  |  |   35|  13.3k|#define EMPTY_SET 0x2205
  ------------------
                  if (length == 3 && retVal[0] == EMPTY_SET && retVal[1] == EMPTY_SET && retVal[2] == EMPTY_SET ) {
  ------------------
  |  |   35|  13.3k|#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: 13.3k]
  |  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|  13.3k|    if (len != nullptr) {
  ------------------
  |  Branch (2050:9): [True: 13.3k, False: 0]
  ------------------
 2051|  13.3k|        *len = length;
 2052|  13.3k|    }
 2053|  13.3k|    return retVal;
 2054|  13.3k|}
ures_getByKeyWithFallback_78:
 2164|   227k|                          UErrorCode *status) {
 2165|   227k|    Resource res = RES_BOGUS, rootRes = RES_BOGUS;
  ------------------
  |  |   65|   227k|#define RES_BOGUS 0xffffffff
  ------------------
                  Resource res = RES_BOGUS, rootRes = RES_BOGUS;
  ------------------
  |  |   65|   227k|#define RES_BOGUS 0xffffffff
  ------------------
 2166|   227k|    UResourceBundle *helper = nullptr;
 2167|       |
 2168|   227k|    if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (2168:9): [True: 0, False: 227k]
  |  Branch (2168:28): [True: 216, False: 226k]
  ------------------
 2169|    216|        return fillIn;
 2170|    216|    }
 2171|   226k|    if(resB == nullptr) {
  ------------------
  |  Branch (2171:8): [True: 0, False: 226k]
  ------------------
 2172|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
 2173|      0|        return fillIn;
 2174|      0|    }
 2175|       |
 2176|   226k|    int32_t type = RES_GET_TYPE(resB->fRes);
  ------------------
  |  |   68|   226k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 2177|   226k|    if(URES_IS_TABLE(type)) {
  ------------------
  |  |   84|   226k|#define URES_IS_TABLE(type) ((int32_t)(type)==URES_TABLE || (int32_t)(type)==URES_TABLE16 || (int32_t)(type)==URES_TABLE32)
  |  |  ------------------
  |  |  |  Branch (84:30): [True: 222k, False: 4.04k]
  |  |  |  Branch (84:61): [True: 4.04k, False: 0]
  |  |  |  Branch (84:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2178|   226k|        const char* origResPath = resB->fResPath;
 2179|   226k|        int32_t origResPathLen = resB->fResPathLen;
 2180|   226k|        res = getTableItemByKeyPath(&resB->getResData(), resB->fRes, inKey);
 2181|   226k|        const char* key = inKey;
 2182|   226k|        bool didRootOnce = false;
 2183|   226k|        if(res == RES_BOGUS) {
  ------------------
  |  |   65|   226k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (2183:12): [True: 91.3k, False: 135k]
  ------------------
 2184|  91.3k|            UResourceDataEntry *dataEntry = resB->fData;
 2185|  91.3k|            CharString path;
 2186|  91.3k|            char *myPath = nullptr;
 2187|  91.3k|            const char* resPath = resB->fResPath;
 2188|  91.3k|            int32_t len = resB->fResPathLen;
 2189|   234k|            while(res == RES_BOGUS && (dataEntry->fParent != nullptr || !didRootOnce)) { /* Otherwise, we'll look in parents */
  ------------------
  |  |   65|   468k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (2189:19): [True: 148k, False: 85.5k]
  |  Branch (2189:40): [True: 137k, False: 11.4k]
  |  Branch (2189:73): [True: 5.73k, False: 5.73k]
  ------------------
 2190|   142k|                if (dataEntry->fParent != nullptr) {
  ------------------
  |  Branch (2190:21): [True: 137k, False: 5.73k]
  ------------------
 2191|   137k|                    dataEntry = dataEntry->fParent;
 2192|   137k|                } 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|  5.73k|                    didRootOnce = true;
 2199|  5.73k|                }
 2200|   142k|                rootRes = dataEntry->fData.rootRes;
 2201|       |
 2202|   142k|                if(dataEntry->fBogus == U_ZERO_ERROR) {
  ------------------
  |  Branch (2202:20): [True: 142k, False: 0]
  ------------------
 2203|   142k|                    createPath(origResPath, origResPathLen, resPath, len, inKey, path, status);
 2204|   142k|                    if (U_FAILURE(*status)) {
  ------------------
  |  Branch (2204:25): [True: 0, False: 142k]
  ------------------
 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|   142k|                    myPath = path.data();
 2209|   142k|                    key = inKey;
 2210|   142k|                    do {
 2211|   142k|                        res = res_findResource(&(dataEntry->fData), rootRes, &myPath, &key);
  ------------------
  |  |  198|   142k|#define res_findResource U_ICU_ENTRY_POINT_RENAME(res_findResource)
  |  |  ------------------
  |  |  |  |  123|   142k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   142k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   142k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2212|   142k|                        if (RES_GET_TYPE(res) == URES_ALIAS && *myPath) {
  ------------------
  |  |   68|   142k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  |  Branch (2212:29): [True: 1.20k, False: 141k]
  |  Branch (2212:64): [True: 0, False: 1.20k]
  ------------------
 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|   142k|                        } else if (res == RES_BOGUS) {
  ------------------
  |  |   65|   142k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (2225:36): [True: 57.3k, False: 85.5k]
  ------------------
 2226|  57.3k|                            break;
 2227|  57.3k|                        }
 2228|   142k|                    } while(*myPath); /* Continue until the whole path is consumed */
  ------------------
  |  Branch (2228:29): [True: 0, False: 85.5k]
  ------------------
 2229|   142k|                }
 2230|   142k|            }
 2231|       |            /*dataEntry = getFallbackData(resB, &key, &res, status);*/
 2232|  91.3k|            if(res != RES_BOGUS) {
  ------------------
  |  |   65|  91.3k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (2232:16): [True: 85.5k, False: 5.73k]
  ------------------
 2233|       |              /* check if resB->fResPath gives the right name here */
 2234|  85.5k|                if(uprv_strcmp(dataEntry->fName, uloc_getDefault())==0 || uprv_strcmp(dataEntry->fName, kRootLocaleName)==0) {
  ------------------
  |  |   38|  85.5k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  85.5k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
                              if(uprv_strcmp(dataEntry->fName, uloc_getDefault())==0 || uprv_strcmp(dataEntry->fName, kRootLocaleName)==0) {
  ------------------
  |  |   38|  85.5k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  85.5k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (2234:20): [True: 0, False: 85.5k]
  |  Branch (2234:75): [True: 36.0k, False: 49.5k]
  ------------------
 2235|  36.0k|                    *status = U_USING_DEFAULT_WARNING;
 2236|  49.5k|                } else {
 2237|  49.5k|                    *status = U_USING_FALLBACK_WARNING;
 2238|  49.5k|                }
 2239|       |
 2240|  85.5k|                fillIn = init_resb_result(dataEntry, res, key, -1, resB, fillIn, status);
 2241|  85.5k|                if (resPath != nullptr) {
  ------------------
  |  Branch (2241:21): [True: 15.0k, False: 70.5k]
  ------------------
 2242|  15.0k|                    createPath(origResPath, origResPathLen, resPath, len, inKey, path, status);
 2243|  70.5k|                } else {
 2244|  70.5k|                    const char* separator = nullptr;
 2245|  70.5k|                    if (fillIn->fResPath != nullptr) {
  ------------------
  |  Branch (2245:25): [True: 70.5k, False: 0]
  ------------------
 2246|  70.5k|                        separator = uprv_strchr(fillIn->fResPath, RES_PATH_SEPARATOR);
  ------------------
  |  |   40|  70.5k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  70.5k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2247|  70.5k|                    }
 2248|  70.5k|                    if (separator != nullptr && separator[1] != '\0') {
  ------------------
  |  Branch (2248:25): [True: 70.5k, False: 0]
  |  Branch (2248:49): [True: 1.16k, False: 69.3k]
  ------------------
 2249|  1.16k|                        createPath(origResPath, origResPathLen, fillIn->fResPath,
 2250|  1.16k|                                   static_cast<int32_t>(uprv_strlen(fillIn->fResPath)), inKey, path, status);
  ------------------
  |  |   37|  1.16k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  1.16k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2251|  69.3k|                    } else {
 2252|  69.3k|                        createPath(origResPath, origResPathLen, "", 0, inKey, path, status);
 2253|  69.3k|                    }
 2254|  70.5k|                }
 2255|  85.5k|                ures_freeResPath(fillIn);
 2256|  85.5k|                ures_appendResPath(fillIn, path.data(), path.length(), status);
 2257|  85.5k|                if(fillIn->fResPath[fillIn->fResPathLen-1] != RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|  85.5k|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2257:20): [True: 79.6k, False: 5.90k]
  ------------------
 2258|  79.6k|                    ures_appendResPath(fillIn, RES_PATH_SEPARATOR_S, 1, status);
  ------------------
  |  |   61|  79.6k|#define RES_PATH_SEPARATOR_S   "/"
  ------------------
 2259|  79.6k|                }
 2260|  85.5k|            } else {
 2261|  5.73k|                *status = U_MISSING_RESOURCE_ERROR;
 2262|  5.73k|            }
 2263|   135k|        } else {
 2264|   135k|            fillIn = init_resb_result(resB->fData, res, key, -1, resB, fillIn, status);
 2265|   135k|        }
 2266|   226k|    } 
 2267|      0|    else {
 2268|      0|        *status = U_RESOURCE_TYPE_MISMATCH;
 2269|      0|    }
 2270|   226k|    ures_close(helper);
  ------------------
  |  | 1652|   226k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|   226k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   226k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   226k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2271|   226k|    return fillIn;
 2272|   226k|}
ures_getAllChildrenWithFallback_78:
 2429|  40.5k|                                icu::ResourceSink &sink, UErrorCode &errorCode) {
 2430|  40.5k|    GetAllChildrenSink allChildrenSink(sink);
 2431|  40.5k|    ures_getAllItemsWithFallback(bundle, path, allChildrenSink, errorCode);
  ------------------
  |  | 1658|  40.5k|#define ures_getAllItemsWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllItemsWithFallback)
  |  |  ------------------
  |  |  |  |  123|  40.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  40.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  40.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2432|  40.5k|}
ures_getValueWithFallback_78:
 2448|      2|                          ResourceDataValue &value, UErrorCode &errorCode) {
 2449|      2|    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (2449:9): [True: 0, False: 2]
  ------------------
 2450|      2|    if (path == nullptr) {
  ------------------
  |  Branch (2450:9): [True: 0, False: 2]
  ------------------
 2451|      0|        errorCode = U_ILLEGAL_ARGUMENT_ERROR;
 2452|      0|        return;
 2453|      0|    }
 2454|      2|    const UResourceBundle *rb;
 2455|      2|    if (*path == 0) {
  ------------------
  |  Branch (2455:9): [True: 0, False: 2]
  ------------------
 2456|       |        // empty path
 2457|      0|        rb = bundle;
 2458|      2|    } else {
 2459|      2|        rb = ures_getByKeyWithFallback(bundle, path, tempFillIn, &errorCode);
  ------------------
  |  | 1662|      2|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2460|      2|        if (U_FAILURE(errorCode)) {
  ------------------
  |  Branch (2460:13): [True: 0, False: 2]
  ------------------
 2461|      0|            return;
 2462|      0|        }
 2463|      2|    }
 2464|      2|    value.setData(rb->getResData());
 2465|      2|    value.setValidLocaleDataEntry(rb->fValidLocaleDataEntry);
 2466|      2|    value.setResource(rb->fRes, ResourceTracer(rb));
 2467|      2|}
ures_getAllItemsWithFallback_78:
 2471|  68.4k|                             icu::ResourceSink &sink, UErrorCode &errorCode) {
 2472|  68.4k|    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (2472:9): [True: 2, False: 68.4k]
  ------------------
 2473|  68.4k|    if (path == nullptr) {
  ------------------
  |  Branch (2473:9): [True: 0, False: 68.4k]
  ------------------
 2474|      0|        errorCode = U_ILLEGAL_ARGUMENT_ERROR;
 2475|      0|        return;
 2476|      0|    }
 2477|  68.4k|    StackUResourceBundle stackBundle;
 2478|  68.4k|    const UResourceBundle *rb;
 2479|  68.4k|    if (*path == 0) {
  ------------------
  |  Branch (2479:9): [True: 1, False: 68.4k]
  ------------------
 2480|       |        // empty path
 2481|      1|        rb = bundle;
 2482|  68.4k|    } else {
 2483|  68.4k|        rb = ures_getByKeyWithFallback(bundle, path, stackBundle.getAlias(), &errorCode);
  ------------------
  |  | 1662|  68.4k|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|  68.4k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  68.4k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  68.4k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2484|  68.4k|        if (U_FAILURE(errorCode)) {
  ------------------
  |  Branch (2484:13): [True: 0, False: 68.4k]
  ------------------
 2485|      0|            return;
 2486|      0|        }
 2487|  68.4k|    }
 2488|       |    // Get all table items with fallback.
 2489|  68.4k|    ResourceDataValue value;
 2490|  68.4k|    getAllItemsWithFallback(rb, value, sink, errorCode);
 2491|  68.4k|}
ures_getByKey_78:
 2493|   499k|U_CAPI UResourceBundle* U_EXPORT2 ures_getByKey(const UResourceBundle *resB, const char* inKey, UResourceBundle *fillIn, UErrorCode *status) {
 2494|   499k|    Resource res = RES_BOGUS;
  ------------------
  |  |   65|   499k|#define RES_BOGUS 0xffffffff
  ------------------
 2495|   499k|    UResourceDataEntry *dataEntry = nullptr;
 2496|   499k|    const char *key = inKey;
 2497|       |
 2498|   499k|    if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (2498:9): [True: 0, False: 499k]
  |  Branch (2498:28): [True: 702, False: 499k]
  ------------------
 2499|    702|        return fillIn;
 2500|    702|    }
 2501|   499k|    if(resB == nullptr) {
  ------------------
  |  Branch (2501:8): [True: 0, False: 499k]
  ------------------
 2502|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
 2503|      0|        return fillIn;
 2504|      0|    }
 2505|       |
 2506|   499k|    int32_t type = RES_GET_TYPE(resB->fRes);
  ------------------
  |  |   68|   499k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 2507|   499k|    if(URES_IS_TABLE(type)) {
  ------------------
  |  |   84|   499k|#define URES_IS_TABLE(type) ((int32_t)(type)==URES_TABLE || (int32_t)(type)==URES_TABLE16 || (int32_t)(type)==URES_TABLE32)
  |  |  ------------------
  |  |  |  Branch (84:30): [True: 491k, False: 7.28k]
  |  |  |  Branch (84:61): [True: 7.28k, False: 0]
  |  |  |  Branch (84:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2508|   499k|        int32_t t;
 2509|   499k|        res = res_getTableItemByKey(&resB->getResData(), resB->fRes, &t, &key);
  ------------------
  |  |  207|   499k|#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey)
  |  |  ------------------
  |  |  |  |  123|   499k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   499k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   499k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2510|   499k|        if(res == RES_BOGUS) {
  ------------------
  |  |   65|   499k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (2510:12): [True: 257k, False: 241k]
  ------------------
 2511|   257k|            key = inKey;
 2512|   257k|            if(resB->fHasFallback) {
  ------------------
  |  Branch (2512:16): [True: 234k, False: 22.8k]
  ------------------
 2513|   234k|                dataEntry = getFallbackData(resB, &key, &res, status);
 2514|   234k|                if(U_SUCCESS(*status)) {
  ------------------
  |  Branch (2514:20): [True: 60.7k, False: 174k]
  ------------------
 2515|       |                    /* check if resB->fResPath gives the right name here */
 2516|  60.7k|                    return init_resb_result(dataEntry, res, key, -1, resB, fillIn, status);
 2517|   174k|                } else {
 2518|   174k|                    *status = U_MISSING_RESOURCE_ERROR;
 2519|   174k|                }
 2520|   234k|            } else {
 2521|  22.8k|                *status = U_MISSING_RESOURCE_ERROR;
 2522|  22.8k|            }
 2523|   257k|        } else {
 2524|   241k|            return init_resb_result(resB->fData, res, key, -1, resB, fillIn, status);
 2525|   241k|        }
 2526|   499k|    } 
 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|   197k|    return fillIn;
 2544|   499k|}
ures_getStringByKey_78:
 2546|  83.7k|U_CAPI const char16_t* U_EXPORT2 ures_getStringByKey(const UResourceBundle *resB, const char* inKey, int32_t* len, UErrorCode *status) {
 2547|  83.7k|    Resource res = RES_BOGUS;
  ------------------
  |  |   65|  83.7k|#define RES_BOGUS 0xffffffff
  ------------------
 2548|  83.7k|    UResourceDataEntry *dataEntry = nullptr;
 2549|  83.7k|    const char* key = inKey;
 2550|       |
 2551|  83.7k|    if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (2551:9): [True: 0, False: 83.7k]
  |  Branch (2551:28): [True: 206, False: 83.5k]
  ------------------
 2552|    206|        return nullptr;
 2553|    206|    }
 2554|  83.5k|    if(resB == nullptr) {
  ------------------
  |  Branch (2554:8): [True: 0, False: 83.5k]
  ------------------
 2555|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
 2556|      0|        return nullptr;
 2557|      0|    }
 2558|       |
 2559|  83.5k|    int32_t type = RES_GET_TYPE(resB->fRes);
  ------------------
  |  |   68|  83.5k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 2560|  83.5k|    if(URES_IS_TABLE(type)) {
  ------------------
  |  |   84|  83.5k|#define URES_IS_TABLE(type) ((int32_t)(type)==URES_TABLE || (int32_t)(type)==URES_TABLE16 || (int32_t)(type)==URES_TABLE32)
  |  |  ------------------
  |  |  |  Branch (84:30): [True: 81.3k, False: 2.20k]
  |  |  |  Branch (84:61): [True: 2.20k, False: 0]
  |  |  |  Branch (84:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2561|  83.5k|        int32_t t=0;
 2562|       |
 2563|  83.5k|        res = res_getTableItemByKey(&resB->getResData(), resB->fRes, &t, &key);
  ------------------
  |  |  207|  83.5k|#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey)
  |  |  ------------------
  |  |  |  |  123|  83.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  83.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  83.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2564|       |
 2565|  83.5k|        if(res == RES_BOGUS) {
  ------------------
  |  |   65|  83.5k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (2565:12): [True: 35.5k, False: 48.0k]
  ------------------
 2566|  35.5k|            key = inKey;
 2567|  35.5k|            if(resB->fHasFallback) {
  ------------------
  |  Branch (2567:16): [True: 0, False: 35.5k]
  ------------------
 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|  35.5k|            } else {
 2589|  35.5k|                *status = U_MISSING_RESOURCE_ERROR;
 2590|  35.5k|            }
 2591|  48.0k|        } else {
 2592|  48.0k|            switch (RES_GET_TYPE(res)) {
  ------------------
  |  |   68|  48.0k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 2593|      0|            case URES_STRING:
  ------------------
  |  Branch (2593:13): [True: 0, False: 48.0k]
  ------------------
 2594|  48.0k|            case URES_STRING_V2:
  ------------------
  |  Branch (2594:13): [True: 48.0k, False: 0]
  ------------------
 2595|  48.0k|                return res_getString({resB, key}, &resB->getResData(), res, len);
 2596|      0|            case URES_ALIAS:
  ------------------
  |  Branch (2596:13): [True: 0, False: 48.0k]
  ------------------
 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: 48.0k]
  ------------------
 2605|      0|                *status = U_RESOURCE_TYPE_MISMATCH;
 2606|  48.0k|            }
 2607|  48.0k|        }
 2608|  83.5k|    } 
 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|  35.5k|    return nullptr;
 2627|  83.5k|}
ures_getLocaleByType_78:
 2671|   133k|                     UErrorCode* status) {
 2672|   133k|    if (status==nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (2672:9): [True: 0, False: 133k]
  |  Branch (2672:28): [True: 0, False: 133k]
  ------------------
 2673|      0|        return nullptr;
 2674|      0|    }
 2675|   133k|    if (!resourceBundle) {
  ------------------
  |  Branch (2675:9): [True: 0, False: 133k]
  ------------------
 2676|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
 2677|      0|        return nullptr;
 2678|   133k|    } else {
 2679|   133k|        switch(type) {
 2680|  20.4k|        case ULOC_ACTUAL_LOCALE:
  ------------------
  |  Branch (2680:9): [True: 20.4k, False: 112k]
  ------------------
 2681|  20.4k|            return resourceBundle->fData->fName;
 2682|   112k|        case ULOC_VALID_LOCALE:
  ------------------
  |  Branch (2682:9): [True: 112k, False: 20.4k]
  ------------------
 2683|   112k|            return resourceBundle->fValidLocaleDataEntry->fName;
 2684|      0|        case ULOC_REQUESTED_LOCALE:
  ------------------
  |  Branch (2684:9): [True: 0, False: 133k]
  ------------------
 2685|      0|        default:
  ------------------
  |  Branch (2685:9): [True: 0, False: 133k]
  ------------------
 2686|      0|            *status = U_ILLEGAL_ARGUMENT_ERROR;
 2687|      0|            return nullptr;
 2688|   133k|        }
 2689|   133k|    }
 2690|   133k|}
ures_open_78:
 2769|   318k|ures_open(const char* path, const char* localeID, UErrorCode* status) {
 2770|   318k|    return ures_openWithType(nullptr, path, localeID, URES_OPEN_LOCALE_DEFAULT_ROOT, status);
 2771|   318k|}
ures_openDirect_78:
 2783|  34.3k|ures_openDirect(const char* path, const char* localeID, UErrorCode* status) {
 2784|  34.3k|    return ures_openWithType(nullptr, path, localeID, URES_OPEN_DIRECT, status);
 2785|  34.3k|}
ures_getFunctionalEquivalent_78:
 3068|  27.8k|{
 3069|  27.8k|    CharString defVal; /* default value for given locale */
 3070|  27.8k|    CharString defLoc; /* default value for given locale */
 3071|  27.8k|    CharString found;
 3072|  27.8k|    CharString parent;
 3073|  27.8k|    CharString full;
 3074|  27.8k|    UResourceBundle bund1, bund2;
 3075|  27.8k|    UResourceBundle *res = nullptr;
 3076|  27.8k|    UErrorCode subStatus = U_ZERO_ERROR;
 3077|  27.8k|    int32_t length = 0;
 3078|  27.8k|    if(U_FAILURE(*status)) return 0;
  ------------------
  |  Branch (3078:8): [True: 0, False: 27.8k]
  ------------------
 3079|  27.8k|    CharString kwVal;
 3080|  27.8k|    if (keyword != nullptr && *keyword != '\0') {
  ------------------
  |  Branch (3080:9): [True: 27.8k, False: 0]
  |  Branch (3080:31): [True: 27.8k, False: 0]
  ------------------
 3081|  27.8k|        kwVal = ulocimp_getKeywordValue(locid, keyword, subStatus);
  ------------------
  |  | 1200|  27.8k|#define ulocimp_getKeywordValue U_ICU_ENTRY_POINT_RENAME(ulocimp_getKeywordValue)
  |  |  ------------------
  |  |  |  |  123|  27.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  27.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  27.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3082|  27.8k|        if (kwVal == DEFAULT_TAG) {
  ------------------
  |  | 2916|  27.8k|#define DEFAULT_TAG       "default"
  ------------------
  |  Branch (3082:13): [True: 3, False: 27.8k]
  ------------------
 3083|      3|            kwVal.clear();
 3084|      3|        }
 3085|  27.8k|    }
 3086|  27.8k|    if (locid == nullptr) {
  ------------------
  |  Branch (3086:9): [True: 0, False: 27.8k]
  ------------------
 3087|      0|        locid = 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3088|      0|    }
 3089|  27.8k|    CharString base = ulocimp_getBaseName(locid, subStatus);
  ------------------
  |  | 1199|  27.8k|#define ulocimp_getBaseName U_ICU_ENTRY_POINT_RENAME(ulocimp_getBaseName)
  |  |  ------------------
  |  |  |  |  123|  27.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  27.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  27.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3090|       |#if defined(URES_TREE_DEBUG)
 3091|       |    fprintf(stderr, "getFunctionalEquivalent: \"%s\" [%s=%s] in %s - %s\n", 
 3092|       |            locid, keyword, kwVal.data(), base.data(), u_errorName(subStatus));
 3093|       |#endif
 3094|  27.8k|    ures_initStackObject(&bund1);
  ------------------
  |  | 1690|  27.8k|#define ures_initStackObject U_ICU_ENTRY_POINT_RENAME(ures_initStackObject)
  |  |  ------------------
  |  |  |  |  123|  27.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  27.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  27.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3095|  27.8k|    ures_initStackObject(&bund2);
  ------------------
  |  | 1690|  27.8k|#define ures_initStackObject U_ICU_ENTRY_POINT_RENAME(ures_initStackObject)
  |  |  ------------------
  |  |  |  |  123|  27.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  27.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  27.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3096|       |
 3097|  27.8k|    parent.copyFrom(base, subStatus);
 3098|  27.8k|    found.copyFrom(base, subStatus);
 3099|       |
 3100|  27.8k|    if(isAvailable) {
  ------------------
  |  Branch (3100:8): [True: 0, False: 27.8k]
  ------------------
 3101|      0|        UEnumeration *locEnum = ures_openAvailableLocales(path, &subStatus);
  ------------------
  |  | 1692|      0|#define ures_openAvailableLocales U_ICU_ENTRY_POINT_RENAME(ures_openAvailableLocales)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3102|      0|        *isAvailable = true;
 3103|      0|        if (U_SUCCESS(subStatus)) {
  ------------------
  |  Branch (3103:13): [True: 0, False: 0]
  ------------------
 3104|      0|            *isAvailable = isLocaleInList(locEnum, parent.data(), &subStatus);
 3105|      0|        }
 3106|      0|        uenum_close(locEnum);
  ------------------
  |  |  948|      0|#define uenum_close U_ICU_ENTRY_POINT_RENAME(uenum_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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3107|      0|    }
 3108|       |
 3109|  27.8k|    if(U_FAILURE(subStatus)) {
  ------------------
  |  Branch (3109:8): [True: 748, False: 27.1k]
  ------------------
 3110|    748|        *status = subStatus;
 3111|    748|        return 0;
 3112|    748|    }
 3113|       |    
 3114|  92.4k|    do {
 3115|  92.4k|        subStatus = U_ZERO_ERROR;
 3116|  92.4k|        res = ures_open(path, parent.data(), &subStatus);
  ------------------
  |  | 1691|  92.4k|#define ures_open U_ICU_ENTRY_POINT_RENAME(ures_open)
  |  |  ------------------
  |  |  |  |  123|  92.4k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  92.4k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  92.4k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3117|  92.4k|        if(((subStatus == U_USING_FALLBACK_WARNING) ||
  ------------------
  |  Branch (3117:13): [True: 792, False: 91.6k]
  ------------------
 3118|  92.4k|            (subStatus == U_USING_DEFAULT_WARNING)) && isAvailable)
  ------------------
  |  Branch (3118:13): [True: 8.63k, False: 82.9k]
  |  Branch (3118:56): [True: 0, False: 9.42k]
  ------------------
 3119|      0|        {
 3120|      0|            *isAvailable = false;
 3121|      0|        }
 3122|  92.4k|        isAvailable = nullptr; /* only want to set this the first time around */
 3123|       |        
 3124|       |#if defined(URES_TREE_DEBUG)
 3125|       |        fprintf(stderr, "%s;%s -> %s [%s]\n", path?path:"ICUDATA", parent.data(), u_errorName(subStatus), ures_getLocale(res, &subStatus));
 3126|       |#endif
 3127|  92.4k|        if(U_FAILURE(subStatus)) {
  ------------------
  |  Branch (3127:12): [True: 2, False: 92.4k]
  ------------------
 3128|      2|            *status = subStatus;
 3129|  92.4k|        } else if(subStatus == U_ZERO_ERROR) {
  ------------------
  |  Branch (3129:19): [True: 82.9k, False: 9.42k]
  ------------------
 3130|  82.9k|            ures_getByKey(res,resName,&bund1, &subStatus);
  ------------------
  |  | 1661|  82.9k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  82.9k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  82.9k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  82.9k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3131|  82.9k|            if(subStatus == U_ZERO_ERROR) {
  ------------------
  |  Branch (3131:16): [True: 56.8k, False: 26.0k]
  ------------------
 3132|  56.8k|                const char16_t *defUstr;
 3133|  56.8k|                int32_t defLen;
 3134|       |                /* look for default item */
 3135|       |#if defined(URES_TREE_DEBUG)
 3136|       |                fprintf(stderr, "%s;%s : loaded default -> %s\n",
 3137|       |                    path?path:"ICUDATA", parent.data(), u_errorName(subStatus));
 3138|       |#endif
 3139|  56.8k|                defUstr = ures_getStringByKey(&bund1, DEFAULT_TAG, &defLen, &subStatus);
  ------------------
  |  | 1677|  56.8k|#define ures_getStringByKey U_ICU_ENTRY_POINT_RENAME(ures_getStringByKey)
  |  |  ------------------
  |  |  |  |  123|  56.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  56.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  56.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                              defUstr = ures_getStringByKey(&bund1, DEFAULT_TAG, &defLen, &subStatus);
  ------------------
  |  | 2916|  56.8k|#define DEFAULT_TAG       "default"
  ------------------
 3140|  56.8k|                if(U_SUCCESS(subStatus) && defLen) {
  ------------------
  |  Branch (3140:20): [True: 26.9k, False: 29.9k]
  |  Branch (3140:44): [True: 26.9k, False: 0]
  ------------------
 3141|  26.9k|                    defVal.clear().appendInvariantChars(defUstr, defLen, subStatus);
 3142|       |#if defined(URES_TREE_DEBUG)
 3143|       |                    fprintf(stderr, "%s;%s -> default %s=%s,  %s\n", 
 3144|       |                        path?path:"ICUDATA", parent.data(), keyword, defVal.data(), u_errorName(subStatus));
 3145|       |#endif
 3146|  26.9k|                    defLoc.copyFrom(parent, subStatus);
 3147|  26.9k|                    if(kwVal.isEmpty()) {
  ------------------
  |  Branch (3147:24): [True: 25.7k, False: 1.12k]
  ------------------
 3148|  25.7k|                        kwVal.append(defVal, subStatus);
 3149|       |#if defined(URES_TREE_DEBUG)
 3150|       |                        fprintf(stderr, "%s;%s -> kwVal =  %s\n", 
 3151|       |                            path?path:"ICUDATA", parent.data(), keyword, kwVal.data());
 3152|       |#endif
 3153|  25.7k|                    }
 3154|  26.9k|                }
 3155|  56.8k|            }
 3156|  82.9k|        }
 3157|       |        
 3158|  92.4k|        subStatus = U_ZERO_ERROR;
 3159|       |
 3160|  92.4k|        if (res != nullptr) {
  ------------------
  |  Branch (3160:13): [True: 92.4k, False: 2]
  ------------------
 3161|  92.4k|            found.clear().append(ures_getLocaleByType(res, ULOC_VALID_LOCALE, &subStatus), subStatus);
  ------------------
  |  | 1669|  92.4k|#define ures_getLocaleByType U_ICU_ENTRY_POINT_RENAME(ures_getLocaleByType)
  |  |  ------------------
  |  |  |  |  123|  92.4k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  92.4k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  92.4k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3162|  92.4k|        }
 3163|       |
 3164|  92.4k|        if (found != parent) {
  ------------------
  |  Branch (3164:13): [True: 34.7k, False: 57.6k]
  ------------------
 3165|  34.7k|            parent.copyFrom(found, subStatus);
 3166|  57.6k|        } else {
 3167|  57.6k|            getParentForFunctionalEquivalent(found.data(),res,&bund1,parent);
 3168|  57.6k|        }
 3169|  92.4k|        ures_close(res);
  ------------------
  |  | 1652|  92.4k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|  92.4k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  92.4k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  92.4k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3170|  92.4k|    } while(defVal.isEmpty() && !found.isEmpty() && found != "root" && U_SUCCESS(*status));
  ------------------
  |  Branch (3170:13): [True: 65.4k, False: 26.9k]
  |  Branch (3170:33): [True: 65.4k, False: 0]
  |  Branch (3170:53): [True: 65.3k, False: 194]
  |  Branch (3170:72): [True: 65.3k, False: 2]
  ------------------
 3171|       |    
 3172|       |    /* Now, see if we can find the kwVal collator.. start the search over.. */
 3173|  27.1k|    parent.copyFrom(base, subStatus);
 3174|  27.1k|    found.copyFrom(base, subStatus);
 3175|       |
 3176|   102k|    do {
 3177|   102k|        res = ures_open(path, parent.data(), &subStatus);
  ------------------
  |  | 1691|   102k|#define ures_open U_ICU_ENTRY_POINT_RENAME(ures_open)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3178|   102k|        if((subStatus == U_USING_FALLBACK_WARNING) && isAvailable) {
  ------------------
  |  Branch (3178:12): [True: 7.19k, False: 95.7k]
  |  Branch (3178:55): [True: 0, False: 7.19k]
  ------------------
 3179|      0|            *isAvailable = false;
 3180|      0|        }
 3181|   102k|        isAvailable = nullptr; /* only want to set this the first time around */
 3182|       |        
 3183|       |#if defined(URES_TREE_DEBUG)
 3184|       |        fprintf(stderr, "%s;%s -> %s (looking for %s)\n", 
 3185|       |            path?path:"ICUDATA", parent.data(), u_errorName(subStatus), kwVal.data());
 3186|       |#endif
 3187|   102k|        if(U_FAILURE(subStatus)) {
  ------------------
  |  Branch (3187:12): [True: 8, False: 102k]
  ------------------
 3188|      8|            *status = subStatus;
 3189|   102k|        } else if(subStatus == U_ZERO_ERROR) {
  ------------------
  |  Branch (3189:19): [True: 44.9k, False: 57.9k]
  ------------------
 3190|  44.9k|            ures_getByKey(res,resName,&bund1, &subStatus);
  ------------------
  |  | 1661|  44.9k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  44.9k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  44.9k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  44.9k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3191|       |#if defined(URES_TREE_DEBUG)
 3192|       |/**/ fprintf(stderr,"@%d [%s] %s\n", __LINE__, resName, u_errorName(subStatus));
 3193|       |#endif
 3194|  44.9k|            if(subStatus == U_ZERO_ERROR) {
  ------------------
  |  Branch (3194:16): [True: 33.3k, False: 11.6k]
  ------------------
 3195|  33.3k|                ures_getByKey(&bund1, kwVal.data(), &bund2, &subStatus);
  ------------------
  |  | 1661|  33.3k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  33.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  33.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  33.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3196|       |#if defined(URES_TREE_DEBUG)
 3197|       |/**/ fprintf(stderr,"@%d [%s] %s\n", __LINE__, kwVal.data(), u_errorName(subStatus));
 3198|       |#endif
 3199|  33.3k|                if(subStatus == U_ZERO_ERROR) {
  ------------------
  |  Branch (3199:20): [True: 25.8k, False: 7.55k]
  ------------------
 3200|       |#if defined(URES_TREE_DEBUG)
 3201|       |                    fprintf(stderr, "%s;%s -> full0 %s=%s,  %s\n", 
 3202|       |                        path?path:"ICUDATA", parent.data(), keyword, kwVal.data(), u_errorName(subStatus));
 3203|       |#endif
 3204|  25.8k|                    if (parent.isEmpty()) {
  ------------------
  |  Branch (3204:25): [True: 7.59k, False: 18.2k]
  ------------------
 3205|  7.59k|                        full.clear().append("root", subStatus);
 3206|  18.2k|                    } else {
 3207|  18.2k|                        full.copyFrom(parent, subStatus);
 3208|  18.2k|                    }
 3209|       |                        /* now, recalculate default kw if need be */
 3210|  25.8k|                        if(defLoc.length() > full.length()) {
  ------------------
  |  Branch (3210:28): [True: 100, False: 25.7k]
  ------------------
 3211|    100|                          const char16_t *defUstr;
 3212|    100|                          int32_t defLen;
 3213|       |                          /* look for default item */
 3214|       |#if defined(URES_TREE_DEBUG)
 3215|       |                            fprintf(stderr, "%s;%s -> recalculating Default0\n", 
 3216|       |                                    path?path:"ICUDATA", full.data());
 3217|       |#endif
 3218|    100|                          defUstr = ures_getStringByKey(&bund1, DEFAULT_TAG, &defLen, &subStatus);
  ------------------
  |  | 1677|    100|#define ures_getStringByKey U_ICU_ENTRY_POINT_RENAME(ures_getStringByKey)
  |  |  ------------------
  |  |  |  |  123|    100|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    100|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    100|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                        defUstr = ures_getStringByKey(&bund1, DEFAULT_TAG, &defLen, &subStatus);
  ------------------
  |  | 2916|    100|#define DEFAULT_TAG       "default"
  ------------------
 3219|    100|                          if(U_SUCCESS(subStatus) && defLen) {
  ------------------
  |  Branch (3219:30): [True: 88, False: 12]
  |  Branch (3219:54): [True: 88, False: 0]
  ------------------
 3220|     88|                            defVal.clear().appendInvariantChars(defUstr, defLen, subStatus);
 3221|       |#if defined(URES_TREE_DEBUG)
 3222|       |                            fprintf(stderr, "%s;%s -> default0 %s=%s,  %s\n", 
 3223|       |                                    path?path:"ICUDATA", full.data(), keyword, defVal.data(), u_errorName(subStatus));
 3224|       |#endif
 3225|     88|                            defLoc.copyFrom(full, subStatus);
 3226|     88|                          }
 3227|    100|                        } /* end of recalculate default KW */
 3228|       |#if defined(URES_TREE_DEBUG)
 3229|       |                        else {
 3230|       |                          fprintf(stderr, "No trim0,  %s <= %s\n", defLoc.data(), full.data());
 3231|       |                        }
 3232|       |#endif
 3233|  25.8k|                } else {
 3234|       |#if defined(URES_TREE_DEBUG)
 3235|       |                    fprintf(stderr, "err=%s in %s looking for %s\n", 
 3236|       |                        u_errorName(subStatus), parent.data(), kwVal.data());
 3237|       |#endif
 3238|  7.55k|                }
 3239|  33.3k|            }
 3240|  44.9k|        }
 3241|       |        
 3242|   102k|        subStatus = U_ZERO_ERROR;
 3243|   102k|        UBool haveFound = false;
 3244|       |        // At least for collations which may be aliased, we need to use the VALID locale
 3245|       |        // as the parent instead of just truncating, as long as the VALID locale is not
 3246|       |        // root and has a different language than the parent. Use of the VALID locale
 3247|       |        // here is similar to the procedure used at the end of the previous do-while loop
 3248|       |        // for all resource types.
 3249|   102k|        if (res != nullptr && uprv_strcmp(resName, "collations") == 0) {
  ------------------
  |  |   38|   102k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|   102k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (3249:13): [True: 102k, False: 8]
  |  Branch (3249:31): [True: 0, False: 102k]
  ------------------
 3250|      0|            const char *validLoc = ures_getLocaleByType(res, ULOC_VALID_LOCALE, &subStatus);
  ------------------
  |  | 1669|      0|#define ures_getLocaleByType U_ICU_ENTRY_POINT_RENAME(ures_getLocaleByType)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3251|      0|            if (U_SUCCESS(subStatus) && validLoc != nullptr && validLoc[0] != 0 && uprv_strcmp(validLoc, "root") != 0) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (3251:17): [True: 0, False: 0]
  |  Branch (3251:41): [True: 0, False: 0]
  |  Branch (3251:64): [True: 0, False: 0]
  |  Branch (3251:84): [True: 0, False: 0]
  ------------------
 3252|      0|                CharString validLang = ulocimp_getLanguage(validLoc, subStatus);
  ------------------
  |  | 1203|      0|#define ulocimp_getLanguage U_ICU_ENTRY_POINT_RENAME(ulocimp_getLanguage)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3253|      0|                CharString parentLang = ulocimp_getLanguage(parent.toStringPiece(), subStatus);
  ------------------
  |  | 1203|      0|#define ulocimp_getLanguage U_ICU_ENTRY_POINT_RENAME(ulocimp_getLanguage)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3254|      0|                if (U_SUCCESS(subStatus) && validLang != parentLang) {
  ------------------
  |  Branch (3254:21): [True: 0, False: 0]
  |  Branch (3254:45): [True: 0, False: 0]
  ------------------
 3255|       |                    // validLoc is not root and has a different language than parent, use it instead
 3256|      0|                    found.clear().append(validLoc, subStatus);
 3257|      0|                    haveFound = true;
 3258|      0|                }
 3259|      0|            }
 3260|      0|            subStatus = U_ZERO_ERROR;
 3261|      0|        }
 3262|   102k|        if (!haveFound) {
  ------------------
  |  Branch (3262:13): [True: 102k, False: 0]
  ------------------
 3263|   102k|            found.copyFrom(parent, subStatus);
 3264|   102k|        }
 3265|       |
 3266|   102k|        getParentForFunctionalEquivalent(found.data(),res,&bund1,parent);
 3267|   102k|        ures_close(res);
  ------------------
  |  | 1652|   102k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3268|   102k|        subStatus = U_ZERO_ERROR;
 3269|   102k|    } while(full.isEmpty() && !found.isEmpty() && U_SUCCESS(*status));
  ------------------
  |  Branch (3269:13): [True: 77.1k, False: 25.8k]
  |  Branch (3269:31): [True: 75.8k, False: 1.29k]
  |  Branch (3269:51): [True: 75.8k, False: 8]
  ------------------
 3270|       |
 3271|  27.1k|    if(full.isEmpty() && kwVal != defVal) {
  ------------------
  |  Branch (3271:8): [True: 1.29k, False: 25.8k]
  |  Branch (3271:26): [True: 1.12k, False: 174]
  ------------------
 3272|       |#if defined(URES_TREE_DEBUG)
 3273|       |        fprintf(stderr, "Failed to locate kw %s - try default %s\n", kwVal.data(), defVal.data());
 3274|       |#endif
 3275|  1.12k|        kwVal.clear().append(defVal, subStatus);
 3276|  1.12k|        parent.copyFrom(base, subStatus);
 3277|  1.12k|        found.copyFrom(base, subStatus);
 3278|       |
 3279|  23.7k|        do { /* search for 'default' named item */
 3280|  23.7k|            res = ures_open(path, parent.data(), &subStatus);
  ------------------
  |  | 1691|  23.7k|#define ures_open U_ICU_ENTRY_POINT_RENAME(ures_open)
  |  |  ------------------
  |  |  |  |  123|  23.7k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  23.7k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  23.7k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3281|  23.7k|            if((subStatus == U_USING_FALLBACK_WARNING) && isAvailable) {
  ------------------
  |  Branch (3281:16): [True: 2.46k, False: 21.2k]
  |  Branch (3281:59): [True: 0, False: 2.46k]
  ------------------
 3282|      0|                *isAvailable = false;
 3283|      0|            }
 3284|  23.7k|            isAvailable = nullptr; /* only want to set this the first time around */
 3285|       |            
 3286|       |#if defined(URES_TREE_DEBUG)
 3287|       |            fprintf(stderr, "%s;%s -> %s (looking for default %s)\n",
 3288|       |                path?path:"ICUDATA", parent.data(), u_errorName(subStatus), kwVal.data());
 3289|       |#endif
 3290|  23.7k|            if(U_FAILURE(subStatus)) {
  ------------------
  |  Branch (3290:16): [True: 1, False: 23.7k]
  ------------------
 3291|      1|                *status = subStatus;
 3292|  23.7k|            } else if(subStatus == U_ZERO_ERROR) {
  ------------------
  |  Branch (3292:23): [True: 6.31k, False: 17.4k]
  ------------------
 3293|  6.31k|                ures_getByKey(res,resName,&bund1, &subStatus);
  ------------------
  |  | 1661|  6.31k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  6.31k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  6.31k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  6.31k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3294|  6.31k|                if(subStatus == U_ZERO_ERROR) {
  ------------------
  |  Branch (3294:20): [True: 3.62k, False: 2.68k]
  ------------------
 3295|  3.62k|                    ures_getByKey(&bund1, kwVal.data(), &bund2, &subStatus);
  ------------------
  |  | 1661|  3.62k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  3.62k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  3.62k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  3.62k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3296|  3.62k|                    if(subStatus == U_ZERO_ERROR) {
  ------------------
  |  Branch (3296:24): [True: 1.10k, False: 2.52k]
  ------------------
 3297|       |#if defined(URES_TREE_DEBUG)
 3298|       |                        fprintf(stderr, "%s;%s -> full1 %s=%s,  %s\n", path?path:"ICUDATA",
 3299|       |                            parent.data(), keyword, kwVal.data(), u_errorName(subStatus));
 3300|       |#endif
 3301|  1.10k|                        if (parent.isEmpty()) {
  ------------------
  |  Branch (3301:29): [True: 778, False: 322]
  ------------------
 3302|    778|                            full.clear().append("root", subStatus);
 3303|    778|                        } else {
 3304|    322|                            full.copyFrom(parent, subStatus);
 3305|    322|                        }
 3306|       |                        
 3307|       |                        /* now, recalculate default kw if need be */
 3308|  1.10k|                        if(defLoc.length() > full.length()) {
  ------------------
  |  Branch (3308:28): [True: 102, False: 998]
  ------------------
 3309|    102|                          const char16_t *defUstr;
 3310|    102|                          int32_t defLen;
 3311|       |                          /* look for default item */
 3312|       |#if defined(URES_TREE_DEBUG)
 3313|       |                            fprintf(stderr, "%s;%s -> recalculating Default1\n", 
 3314|       |                                    path?path:"ICUDATA", full.data());
 3315|       |#endif
 3316|    102|                          defUstr = ures_getStringByKey(&bund1, DEFAULT_TAG, &defLen, &subStatus);
  ------------------
  |  | 1677|    102|#define ures_getStringByKey U_ICU_ENTRY_POINT_RENAME(ures_getStringByKey)
  |  |  ------------------
  |  |  |  |  123|    102|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    102|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    102|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                        defUstr = ures_getStringByKey(&bund1, DEFAULT_TAG, &defLen, &subStatus);
  ------------------
  |  | 2916|    102|#define DEFAULT_TAG       "default"
  ------------------
 3317|    102|                          if(U_SUCCESS(subStatus) && defLen) {
  ------------------
  |  Branch (3317:30): [True: 78, False: 24]
  |  Branch (3317:54): [True: 78, False: 0]
  ------------------
 3318|     78|                            defVal.clear().appendInvariantChars(defUstr, defLen, subStatus);
 3319|       |#if defined(URES_TREE_DEBUG)
 3320|       |                            fprintf(stderr, "%s;%s -> default %s=%s,  %s\n", 
 3321|       |                                    path?path:"ICUDATA", full.data(), keyword, defVal.data(), u_errorName(subStatus));
 3322|       |#endif
 3323|     78|                            defLoc.copyFrom(full, subStatus);
 3324|     78|                          }
 3325|    102|                        } /* end of recalculate default KW */
 3326|       |#if defined(URES_TREE_DEBUG)
 3327|       |                        else {
 3328|       |                          fprintf(stderr, "No trim1,  %s <= %s\n", defLoc.data(), full.data());
 3329|       |                        }
 3330|       |#endif
 3331|  1.10k|                    }
 3332|  3.62k|                }
 3333|  6.31k|            }
 3334|       |            
 3335|  23.7k|            subStatus = U_ZERO_ERROR;
 3336|  23.7k|            found.copyFrom(parent, subStatus);
 3337|  23.7k|            getParentForFunctionalEquivalent(found.data(),res,&bund1,parent);
 3338|  23.7k|            ures_close(res);
  ------------------
  |  | 1652|  23.7k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|  23.7k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  23.7k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  23.7k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3339|  23.7k|            subStatus = U_ZERO_ERROR;
 3340|  23.7k|        } while(full.isEmpty() && !found.isEmpty() && U_SUCCESS(*status));
  ------------------
  |  Branch (3340:17): [True: 22.6k, False: 1.10k]
  |  Branch (3340:35): [True: 22.6k, False: 24]
  |  Branch (3340:55): [True: 22.6k, False: 1]
  ------------------
 3341|  1.12k|    }
 3342|       |    
 3343|  27.1k|    if(U_SUCCESS(*status)) {
  ------------------
  |  Branch (3343:8): [True: 27.1k, False: 8]
  ------------------
 3344|  27.1k|        if(full.isEmpty()) {
  ------------------
  |  Branch (3344:12): [True: 192, False: 26.9k]
  ------------------
 3345|       |#if defined(URES_TREE_DEBUG)
 3346|       |          fprintf(stderr, "Still could not load keyword %s=%s\n", keyword, kwVal.data());
 3347|       |#endif
 3348|    192|          *status = U_MISSING_RESOURCE_ERROR;
 3349|  26.9k|        } else if(omitDefault) {
  ------------------
  |  Branch (3349:19): [True: 0, False: 26.9k]
  ------------------
 3350|       |#if defined(URES_TREE_DEBUG)
 3351|       |          fprintf(stderr,"Trim? full=%s, defLoc=%s, found=%s\n", full.data(), defLoc.data(), found.data());
 3352|       |#endif        
 3353|      0|          if(defLoc.length() <= full.length()) {
  ------------------
  |  Branch (3353:14): [True: 0, False: 0]
  ------------------
 3354|       |            /* found the keyword in a *child* of where the default tag was present. */
 3355|      0|            if(kwVal == defVal) { /* if the requested kw is default, */
  ------------------
  |  Branch (3355:16): [True: 0, False: 0]
  ------------------
 3356|       |              /* and the default is in or in an ancestor of the current locale */
 3357|       |#if defined(URES_TREE_DEBUG)
 3358|       |              fprintf(stderr, "Removing unneeded var %s=%s\n", keyword, kwVal.data());
 3359|       |#endif
 3360|      0|              kwVal.clear();
 3361|      0|            }
 3362|      0|          }
 3363|      0|        }
 3364|  27.1k|        found.copyFrom(full, subStatus);
 3365|  27.1k|        if(!kwVal.isEmpty()) {
  ------------------
  |  Branch (3365:12): [True: 26.9k, False: 192]
  ------------------
 3366|  26.9k|            found
 3367|  26.9k|                .append("@", subStatus)
 3368|  26.9k|                .append(keyword, subStatus)
 3369|  26.9k|                .append("=", subStatus)
 3370|  26.9k|                .append(kwVal, subStatus);
 3371|  26.9k|        } else if(!omitDefault) {
  ------------------
  |  Branch (3371:19): [True: 192, False: 0]
  ------------------
 3372|    192|            found
 3373|    192|                .append("@", subStatus)
 3374|    192|                .append(keyword, subStatus)
 3375|    192|                .append("=", subStatus)
 3376|    192|                .append(defVal, subStatus);
 3377|    192|        }
 3378|  27.1k|    }
 3379|       |    /* we found the default locale - no need to repeat it.*/
 3380|       |    
 3381|  27.1k|    ures_close(&bund1);
  ------------------
  |  | 1652|  27.1k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|  27.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  27.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  27.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3382|  27.1k|    ures_close(&bund2);
  ------------------
  |  | 1652|  27.1k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|  27.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  27.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  27.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3383|       |    
 3384|  27.1k|    length = found.length();
 3385|       |
 3386|  27.1k|    if(U_SUCCESS(*status)) {
  ------------------
  |  Branch (3386:8): [True: 26.9k, False: 200]
  ------------------
 3387|  26.9k|        int32_t copyLength = uprv_min(length, resultCapacity);
  ------------------
  |  | 1529|  26.9k|#define uprv_min U_ICU_ENTRY_POINT_RENAME(uprv_min)
  |  |  ------------------
  |  |  |  |  123|  26.9k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  26.9k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  26.9k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3388|  26.9k|        if(copyLength>0) {
  ------------------
  |  Branch (3388:12): [True: 26.9k, False: 0]
  ------------------
 3389|  26.9k|            found.extract(result, copyLength, subStatus);
 3390|  26.9k|        }
 3391|  26.9k|        if(length == 0) {
  ------------------
  |  Branch (3391:12): [True: 0, False: 26.9k]
  ------------------
 3392|      0|          *status = U_MISSING_RESOURCE_ERROR; 
 3393|      0|        }
 3394|  26.9k|    } else {
 3395|    200|        length = 0;
 3396|    200|        result[0]=0;
 3397|    200|    }
 3398|  27.1k|    return u_terminateChars(result, resultCapacity, length, status);
  ------------------
  |  |  406|  27.1k|#define u_terminateChars U_ICU_ENTRY_POINT_RENAME(u_terminateChars)
  |  |  ------------------
  |  |  |  |  123|  27.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  27.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  27.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3399|  27.8k|}
uresbund.cpp:_ZL21ures_setIsStackObjectP15UResourceBundlea:
  711|  1.42M|static void ures_setIsStackObject( UResourceBundle* resB, UBool state) {
  712|  1.42M|    if(state) {
  ------------------
  |  Branch (712:8): [True: 832k, False: 596k]
  ------------------
  713|   832k|        resB->fMagic1 = 0;
  714|   832k|        resB->fMagic2 = 0;
  715|   832k|    } else {
  716|   596k|        resB->fMagic1 = MAGIC1;
  ------------------
  |  |   30|   596k|#define MAGIC1 19700503
  ------------------
  717|   596k|        resB->fMagic2 = MAGIC2;
  ------------------
  |  |   31|   596k|#define MAGIC2 19641227
  ------------------
  718|   596k|    }
  719|  1.42M|}
uresbund.cpp:_ZL16ures_closeBundleP15UResourceBundlea:
 1123|  1.65M|{
 1124|  1.65M|    if(resB != nullptr) {
  ------------------
  |  Branch (1124:8): [True: 1.42M, False: 227k]
  ------------------
 1125|  1.42M|        if(resB->fData != nullptr) {
  ------------------
  |  Branch (1125:12): [True: 1.42M, False: 377]
  ------------------
 1126|  1.42M|            entryClose(resB->fData);
 1127|  1.42M|        }
 1128|  1.42M|        if(resB->fVersion != nullptr) {
  ------------------
  |  Branch (1128:12): [True: 0, False: 1.42M]
  ------------------
 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|  1.42M|        ures_freeResPath(resB);
 1132|       |
 1133|  1.42M|        if(ures_isStackObject(resB) == false && freeBundleObj) {
  ------------------
  |  Branch (1133:12): [True: 596k, False: 830k]
  |  Branch (1133:49): [True: 596k, False: 0]
  ------------------
 1134|   596k|            uprv_free(resB);
  ------------------
  |  | 1503|   596k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|   596k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   596k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   596k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1135|   596k|        }
 1136|       |#if 0 /*U_DEBUG*/
 1137|       |        else {
 1138|       |            /* poison the data */
 1139|       |            uprv_memset(resB, -1, sizeof(UResourceBundle));
 1140|       |        }
 1141|       |#endif
 1142|  1.42M|    }
 1143|  1.65M|}
uresbund.cpp:_ZL10entryCloseP18UResourceDataEntry:
 1061|  1.96M|static void entryClose(UResourceDataEntry *resB) {
 1062|  1.96M|  Mutex lock(&resbMutex);
 1063|  1.96M|  entryCloseInt(resB);
 1064|  1.96M|}
uresbund.cpp:_ZL13entryCloseIntP18UResourceDataEntry:
 1028|  1.96M|static void entryCloseInt(UResourceDataEntry *resB) {
 1029|  1.96M|    UResourceDataEntry *p = resB;
 1030|       |
 1031|  5.80M|    while(resB != nullptr) {
  ------------------
  |  Branch (1031:11): [True: 3.84M, False: 1.96M]
  ------------------
 1032|  3.84M|        p = resB->fParent;
 1033|  3.84M|        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|  3.84M|        resB = p;
 1054|  3.84M|    }
 1055|  1.96M|}
uresbund.cpp:_ZL18ures_isStackObjectPK15UResourceBundle:
  721|  1.42M|static UBool ures_isStackObject(const UResourceBundle* resB) {
  722|  1.42M|  return((resB->fMagic1 == MAGIC1 && resB->fMagic2 == MAGIC2)?false:true);
  ------------------
  |  |   30|  2.85M|#define MAGIC1 19700503
  ------------------
                return((resB->fMagic1 == MAGIC1 && resB->fMagic2 == MAGIC2)?false:true);
  ------------------
  |  |   31|   596k|#define MAGIC2 19641227
  ------------------
  |  Branch (722:11): [True: 596k, False: 830k]
  |  Branch (722:38): [True: 596k, False: 0]
  ------------------
  723|  1.42M|}
uresbund.cpp:_ZL18ures_appendResPathP15UResourceBundlePKciP10UErrorCode:
 1083|  5.46M|static void ures_appendResPath(UResourceBundle *resB, const char* toAdd, int32_t lenToAdd, UErrorCode *status) {
 1084|  5.46M|    int32_t resPathLenOrig = resB->fResPathLen;
 1085|  5.46M|    if(resB->fResPath == nullptr) {
  ------------------
  |  Branch (1085:8): [True: 2.57M, False: 2.89M]
  ------------------
 1086|  2.57M|        resB->fResPath = resB->fResBuf;
 1087|  2.57M|        *(resB->fResPath) = 0;
 1088|  2.57M|        resB->fResPathLen = 0;
 1089|  2.57M|    } 
 1090|  5.46M|    resB->fResPathLen += lenToAdd;
 1091|  5.46M|    if(RES_BUFSIZE <= resB->fResPathLen+1) {
  ------------------
  |  |   59|  5.46M|#define RES_BUFSIZE 64
  ------------------
  |  Branch (1091:8): [True: 0, False: 5.46M]
  ------------------
 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|  5.46M|    uprv_strcpy(resB->fResPath + resPathLenOrig, toAdd);
  ------------------
  |  |   36|  5.46M|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  5.46M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1111|  5.46M|}
uresbund.cpp:_ZL13entryIncreaseP18UResourceDataEntry:
  304|  1.60M|static void entryIncrease(UResourceDataEntry *entry) {
  305|  1.60M|    Mutex lock(&resbMutex);
  306|  1.60M|    entry->fCountExisting++;
  307|  2.89M|    while(entry->fParent != nullptr) {
  ------------------
  |  Branch (307:11): [True: 1.28M, False: 1.60M]
  ------------------
  308|  1.28M|      entry = entry->fParent;
  309|  1.28M|      entry->fCountExisting++;
  310|  1.28M|    }
  311|  1.60M|}
uresbund.cpp:_ZL23ures_getStringWithAliasPK15UResourceBundlejiPiP10UErrorCode:
 1709|  71.0k|static const char16_t* ures_getStringWithAlias(const UResourceBundle *resB, Resource r, int32_t sIndex, int32_t *len, UErrorCode *status) {
 1710|  71.0k|  if(RES_GET_TYPE(r) == URES_ALIAS) {
  ------------------
  |  |   68|  71.0k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  |  Branch (1710:6): [True: 0, False: 71.0k]
  ------------------
 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|  71.0k|  } else {
 1717|  71.0k|    return res_getString({resB, sIndex}, &resB->getResData(), r, len); 
 1718|  71.0k|  }
 1719|  71.0k|}
uresbund.cpp:_ZN12_GLOBAL__N_116init_resb_resultEP18UResourceDataEntryjPKciPK15UResourceBundlePS4_P10UErrorCode:
 1480|   719k|        UResourceBundle *resB, UErrorCode *status) {
 1481|   719k|    return init_resb_result(
 1482|   719k|        dataEntry, r, key, idx,
 1483|   719k|        container->fValidLocaleDataEntry, container->fResPath, 0, resB, status);
 1484|   719k|}
uresbund.cpp:_ZN12_GLOBAL__N_116init_resb_resultEP18UResourceDataEntryjPKciS1_S3_iP15UResourceBundleP10UErrorCode:
 1389|  1.67M|        UResourceBundle *resB, UErrorCode *status) {
 1390|       |    // TODO: When an error occurs: Should we return nullptr vs. resB?
 1391|  1.67M|    if(status == nullptr || U_FAILURE(*status)) {
  ------------------
  |  Branch (1391:8): [True: 0, False: 1.67M]
  |  Branch (1391:29): [True: 0, False: 1.67M]
  ------------------
 1392|      0|        return resB;
 1393|      0|    }
 1394|  1.67M|    if (validLocaleDataEntry == nullptr) {
  ------------------
  |  Branch (1394:9): [True: 0, False: 1.67M]
  ------------------
 1395|      0|        *status = U_ILLEGAL_ARGUMENT_ERROR;
 1396|      0|        return nullptr;
 1397|      0|    }
 1398|  1.67M|    if(RES_GET_TYPE(r) == URES_ALIAS) {
  ------------------
  |  |   68|  1.67M|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  |  Branch (1398:8): [True: 113k, False: 1.55M]
  ------------------
 1399|       |        // This is an alias, need to exchange with real data.
 1400|   113k|        if(recursionDepth >= URES_MAX_ALIAS_LEVEL) {
  ------------------
  |  |   33|   113k|#define URES_MAX_ALIAS_LEVEL 256
  ------------------
  |  Branch (1400:12): [True: 0, False: 113k]
  ------------------
 1401|      0|            *status = U_TOO_MANY_ALIASES_ERROR;
 1402|      0|            return resB;
 1403|      0|        }
 1404|   113k|        return getAliasTargetAsResourceBundle(
 1405|   113k|            dataEntry->fData, r, key, idx,
 1406|   113k|            validLocaleDataEntry, containerResPath, recursionDepth, resB, status);
 1407|   113k|    }
 1408|  1.55M|    if(resB == nullptr) {
  ------------------
  |  Branch (1408:8): [True: 243k, False: 1.31M]
  ------------------
 1409|   243k|        resB = static_cast<UResourceBundle*>(uprv_malloc(sizeof(UResourceBundle)));
  ------------------
  |  | 1524|   243k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|   243k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   243k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   243k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1410|   243k|        if (resB == nullptr) {
  ------------------
  |  Branch (1410:13): [True: 0, False: 243k]
  ------------------
 1411|      0|            *status = U_MEMORY_ALLOCATION_ERROR;
 1412|      0|            return nullptr;
 1413|      0|        }
 1414|   243k|        ures_setIsStackObject(resB, false);
 1415|   243k|        resB->fResPath = nullptr;
 1416|   243k|        resB->fResPathLen = 0;
 1417|  1.31M|    } else {
 1418|  1.31M|        if(resB->fData != nullptr) {
  ------------------
  |  Branch (1418:12): [True: 533k, False: 780k]
  ------------------
 1419|   533k|            entryClose(resB->fData);
 1420|   533k|        }
 1421|  1.31M|        if(resB->fVersion != nullptr) {
  ------------------
  |  Branch (1421:12): [True: 0, False: 1.31M]
  ------------------
 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|  1.31M|        if(containerResPath != resB->fResPath) {
  ------------------
  |  Branch (1435:12): [True: 503k, False: 810k]
  ------------------
 1436|   503k|            ures_freeResPath(resB);
 1437|   503k|        }
 1438|  1.31M|    }
 1439|  1.55M|    resB->fData = dataEntry;
 1440|  1.55M|    entryIncrease(resB->fData);
 1441|  1.55M|    resB->fHasFallback = false;
 1442|  1.55M|    resB->fIsTopLevel = false;
 1443|  1.55M|    resB->fIndex = -1;
 1444|  1.55M|    resB->fKey = key; 
 1445|  1.55M|    resB->fValidLocaleDataEntry = validLocaleDataEntry;
 1446|  1.55M|    if(containerResPath != resB->fResPath) {
  ------------------
  |  Branch (1446:8): [True: 329k, False: 1.22M]
  ------------------
 1447|   329k|        ures_appendResPath(
 1448|   329k|            resB, containerResPath, static_cast<int32_t>(uprv_strlen(containerResPath)), status);
  ------------------
  |  |   37|   329k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|   329k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1449|   329k|    }
 1450|  1.55M|    if(key != nullptr) {
  ------------------
  |  Branch (1450:8): [True: 1.44M, False: 114k]
  ------------------
 1451|  1.44M|        ures_appendResPath(resB, key, static_cast<int32_t>(uprv_strlen(key)), status);
  ------------------
  |  |   37|  1.44M|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  1.44M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1452|  1.44M|        if(resB->fResPath[resB->fResPathLen-1] != RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|  1.44M|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (1452:12): [True: 1.39M, False: 44.7k]
  ------------------
 1453|  1.39M|            ures_appendResPath(resB, RES_PATH_SEPARATOR_S, 1, status);
  ------------------
  |  |   61|  1.39M|#define RES_PATH_SEPARATOR_S   "/"
  ------------------
 1454|  1.39M|        }
 1455|  1.44M|    } else if(idx >= 0) {
  ------------------
  |  Branch (1455:15): [True: 114k, False: 0]
  ------------------
 1456|   114k|        char buf[256];
 1457|   114k|        int32_t len = T_CString_integerToString(buf, idx, 10);
  ------------------
  |  |   67|   114k|#define T_CString_integerToString U_ICU_ENTRY_POINT_RENAME(T_CString_integerToString)
  |  |  ------------------
  |  |  |  |  123|   114k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   114k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   114k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1458|   114k|        ures_appendResPath(resB, buf, len, status);
 1459|   114k|        if(resB->fResPath[resB->fResPathLen-1] != RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|   114k|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (1459:12): [True: 114k, False: 0]
  ------------------
 1460|   114k|            ures_appendResPath(resB, RES_PATH_SEPARATOR_S, 1, status);
  ------------------
  |  |   61|   114k|#define RES_PATH_SEPARATOR_S   "/"
  ------------------
 1461|   114k|        }
 1462|   114k|    }
 1463|       |    /* Make sure that Purify doesn't complain about uninitialized memory copies. */
 1464|  1.55M|    {
 1465|  1.55M|        int32_t usedLen = ((resB->fResBuf == resB->fResPath) ? resB->fResPathLen : 0);
  ------------------
  |  Branch (1465:28): [True: 1.55M, False: 0]
  ------------------
 1466|  1.55M|        uprv_memset(resB->fResBuf + usedLen, 0, sizeof(resB->fResBuf) - usedLen);
  ------------------
  |  |  100|  1.55M|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|  1.55M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1467|  1.55M|    }
 1468|       |
 1469|  1.55M|    resB->fVersion = nullptr;
 1470|  1.55M|    resB->fRes = r;
 1471|  1.55M|    resB->fSize = res_countArrayItems(&resB->getResData(), resB->fRes);
  ------------------
  |  |  197|  1.55M|#define res_countArrayItems U_ICU_ENTRY_POINT_RENAME(res_countArrayItems)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1472|  1.55M|    ResourceTracer(resB).trace("get");
 1473|  1.55M|    return resB;
 1474|  1.55M|}
uresbund.cpp:_ZN12_GLOBAL__N_130getAliasTargetAsResourceBundleERK12ResourceDatajPKciP18UResourceDataEntryS4_iP15UResourceBundleP10UErrorCode:
 1166|   951k|        UResourceBundle *resB, UErrorCode *status) {
 1167|       |    // TODO: When an error occurs: Should we return nullptr vs. resB?
 1168|   951k|    if (U_FAILURE(*status)) { return resB; }
  ------------------
  |  Branch (1168:9): [True: 0, False: 951k]
  ------------------
 1169|   951k|    U_ASSERT(RES_GET_TYPE(r) == URES_ALIAS);
  ------------------
  |  |   35|   951k|#   define U_ASSERT(exp) (void)0
  ------------------
 1170|   951k|    int32_t len = 0;
 1171|   951k|    const char16_t *alias = res_getAlias(&resData, r, &len);
  ------------------
  |  |  199|   951k|#define res_getAlias U_ICU_ENTRY_POINT_RENAME(res_getAlias)
  |  |  ------------------
  |  |  |  |  123|   951k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   951k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   951k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1172|   951k|    if(len <= 0) {
  ------------------
  |  Branch (1172:8): [True: 0, False: 951k]
  ------------------
 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|   951k|    CharString chAlias;
 1189|   951k|    chAlias.appendInvariantChars(alias, len, *status);
 1190|   951k|    if (U_FAILURE(*status)) {
  ------------------
  |  Branch (1190:9): [True: 0, False: 951k]
  ------------------
 1191|      0|        return nullptr;
 1192|      0|    }
 1193|       |
 1194|       |    // We have an alias, now let's cut it up.
 1195|   951k|    const char *path = nullptr, *locale = nullptr, *keyPath = nullptr;
 1196|   951k|    if(chAlias[0] == RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|   951k|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (1196:8): [True: 951k, False: 0]
  ------------------
 1197|       |        // There is a path included.
 1198|   951k|        char *chAliasData = chAlias.data();
 1199|   951k|        char *sep = chAliasData + 1;
 1200|   951k|        path = sep;
 1201|   951k|        sep = uprv_strchr(sep, RES_PATH_SEPARATOR);
  ------------------
  |  |   40|   951k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|   951k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1202|   951k|        if(sep != nullptr) {
  ------------------
  |  Branch (1202:12): [True: 951k, False: 0]
  ------------------
 1203|   951k|            *sep++ = 0;
 1204|   951k|        }
 1205|   951k|        if(uprv_strcmp(path, "LOCALE") == 0) {
  ------------------
  |  |   38|   951k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|   951k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1205:12): [True: 951k, False: 48]
  ------------------
 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|   951k|            keyPath = sep;
 1213|       |            // Read from the valid locale which we already have.
 1214|   951k|            path = locale = nullptr;
 1215|   951k|        } else {
 1216|     48|            if(uprv_strcmp(path, "ICUDATA") == 0) { /* want ICU data */
  ------------------
  |  |   38|     48|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|     48|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1216:16): [True: 48, False: 0]
  ------------------
 1217|     48|                path = nullptr;
 1218|     48|            }
 1219|     48|            if (sep == nullptr) {
  ------------------
  |  Branch (1219:17): [True: 0, False: 48]
  ------------------
 1220|       |                // TODO: This ends up using the root bundle. Can/should we forbid this?
 1221|      0|                locale = "";
 1222|     48|            } else {
 1223|     48|                locale = sep;
 1224|     48|                sep = uprv_strchr(sep, RES_PATH_SEPARATOR);
  ------------------
  |  |   40|     48|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|     48|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1225|     48|                if(sep != nullptr) {
  ------------------
  |  Branch (1225:20): [True: 48, False: 0]
  ------------------
 1226|     48|                    *sep++ = 0;
 1227|     48|                }
 1228|     48|                keyPath = sep;
 1229|     48|            }
 1230|     48|        }
 1231|   951k|    } 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|   951k|    LocalUResourceBundlePointer mainRes;
 1246|   951k|    UResourceDataEntry *dataEntry;
 1247|   951k|    if (locale == nullptr) {
  ------------------
  |  Branch (1247:9): [True: 951k, False: 48]
  ------------------
 1248|       |        // alias = /LOCALE/keyPath
 1249|       |        // Read from the valid locale which we already have.
 1250|   951k|        dataEntry = validLocaleDataEntry;
 1251|   951k|    } else {
 1252|     48|        UErrorCode intStatus = U_ZERO_ERROR;
 1253|       |        // TODO: Shouldn't we use ures_open() for locale data bundles (!noFallback)?
 1254|     48|        mainRes.adoptInstead(ures_openDirect(path, locale, &intStatus));
  ------------------
  |  | 1693|     48|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|     48|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     48|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     48|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1255|     48|        if(U_FAILURE(intStatus)) {
  ------------------
  |  Branch (1255:12): [True: 0, False: 48]
  ------------------
 1256|       |            // We failed to open the resource bundle we're aliasing to.
 1257|      0|            *status = intStatus;
 1258|      0|            return resB;
 1259|      0|        }
 1260|     48|        dataEntry = mainRes->fData;
 1261|     48|    }
 1262|       |
 1263|   951k|    const char* temp = nullptr;
 1264|   951k|    if(keyPath == nullptr) {
  ------------------
  |  Branch (1264:8): [True: 0, False: 951k]
  ------------------
 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|   951k|    } 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|   951k|        CharString pathBuf(keyPath, *status);
 1317|   951k|        if (U_FAILURE(*status)) {
  ------------------
  |  Branch (1317:13): [True: 0, False: 951k]
  ------------------
 1318|      0|            return nullptr;
 1319|      0|        }
 1320|   951k|        char *myPath = pathBuf.data();
 1321|   951k|        containerResPath = nullptr;
 1322|       |        // Now we have fallback following here.
 1323|  2.18M|        for(;;) {
 1324|  2.18M|            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|  3.13M|            while(*myPath && U_SUCCESS(*status)) {
  ------------------
  |  Branch (1329:19): [True: 2.18M, False: 951k]
  |  Branch (1329:30): [True: 2.18M, False: 0]
  ------------------
 1330|  2.18M|                r = res_findResource(&(dataEntry->fData), r, &myPath, &temp);
  ------------------
  |  |  198|  2.18M|#define res_findResource U_ICU_ENTRY_POINT_RENAME(res_findResource)
  |  |  ------------------
  |  |  |  |  123|  2.18M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.18M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.18M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1331|  2.18M|                if(r == RES_BOGUS) {
  ------------------
  |  |   65|  2.18M|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1331:20): [True: 1.23M, False: 951k]
  ------------------
 1332|       |                    // No resource found, we don't really want to look anymore on this level.
 1333|  1.23M|                    break;
 1334|  1.23M|                }
 1335|       |                // Found a resource, but it might be an indirection.
 1336|   951k|                resB = init_resb_result(
 1337|   951k|                    dataEntry, r, temp, -1,
 1338|   951k|                    validLocaleDataEntry, containerResPath, recursionDepth+1,
 1339|   951k|                    resB, status);
 1340|   951k|                if (U_FAILURE(*status)) {
  ------------------
  |  Branch (1340:21): [True: 0, False: 951k]
  ------------------
 1341|      0|                    break;
 1342|      0|                }
 1343|   951k|                if (temp == nullptr || uprv_strcmp(keyPath, temp) != 0) {
  ------------------
  |  |   38|   951k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|   951k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1343:21): [True: 0, False: 951k]
  |  Branch (1343:40): [True: 951k, 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|   951k|                    ures_freeResPath(resB);
 1350|   951k|                    ures_appendResPath(resB, keyPath, static_cast<int32_t>(uprv_strlen(keyPath)), status);
  ------------------
  |  |   37|   951k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|   951k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1351|   951k|                    if(resB->fResPath[resB->fResPathLen-1] != RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|   951k|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (1351:24): [True: 951k, False: 0]
  ------------------
 1352|   951k|                        ures_appendResPath(resB, RES_PATH_SEPARATOR_S, 1, status);
  ------------------
  |  |   61|   951k|#define RES_PATH_SEPARATOR_S   "/"
  ------------------
 1353|   951k|                    }
 1354|   951k|                    if (U_FAILURE(*status)) {
  ------------------
  |  Branch (1354:25): [True: 0, False: 951k]
  ------------------
 1355|      0|                        break;
 1356|      0|                    }
 1357|   951k|                }
 1358|   951k|                r = resB->fRes; /* switch to a new resource, possibly a new tree */
 1359|   951k|                dataEntry = resB->fData;
 1360|   951k|                containerResPath = resB->fResPath;
 1361|   951k|            }
 1362|  2.18M|            if (U_FAILURE(*status) || r != RES_BOGUS) {
  ------------------
  |  |   65|  2.18M|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (1362:17): [True: 0, False: 2.18M]
  |  Branch (1362:39): [True: 951k, False: 1.23M]
  ------------------
 1363|   951k|                break;
 1364|   951k|            }
 1365|       |            // Fall back to the parent bundle, if there is one.
 1366|  1.23M|            dataEntry = dataEntry->fParent;
 1367|  1.23M|            if (dataEntry == nullptr) {
  ------------------
  |  Branch (1367:17): [True: 0, False: 1.23M]
  ------------------
 1368|      0|                *status = U_MISSING_RESOURCE_ERROR;
 1369|      0|                break;
 1370|      0|            }
 1371|       |            // Copy the same keyPath again.
 1372|  1.23M|            myPath = pathBuf.data();
 1373|  1.23M|            uprv_strcpy(myPath, keyPath);
  ------------------
  |  |   36|  1.23M|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  1.23M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1374|  1.23M|        }
 1375|   951k|    }
 1376|   951k|    if(mainRes.getAlias() == resB) {
  ------------------
  |  Branch (1376:8): [True: 0, False: 951k]
  ------------------
 1377|      0|        mainRes.orphan();
 1378|      0|    }
 1379|   951k|    ResourceTracer(resB).maybeTrace("getalias");
 1380|   951k|    return resB;
 1381|   951k|}
uresbund.cpp:_ZL21getTableItemByKeyPathPK12ResourceDatajPKc:
 2059|   226k|static Resource getTableItemByKeyPath(const ResourceData *pResData, Resource table, const char *key) {
 2060|   226k|  Resource resource = table;  /* The current resource */
 2061|   226k|  icu::CharString path;
 2062|   226k|  UErrorCode errorCode = U_ZERO_ERROR;
 2063|   226k|  path.append(key, errorCode);
 2064|   226k|  if (U_FAILURE(errorCode)) { return RES_BOGUS; }
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (2064:7): [True: 0, False: 226k]
  ------------------
 2065|   226k|  char *pathPart = path.data();  /* Path from current resource to desired resource */
 2066|   226k|  UResType type = static_cast<UResType>(RES_GET_TYPE(resource)); /* the current resource type */
  ------------------
  |  |   68|   226k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 2067|   567k|  while (*pathPart && resource != RES_BOGUS && URES_IS_CONTAINER(type)) {
  ------------------
  |  |   65|   943k|#define RES_BOGUS 0xffffffff
  ------------------
                while (*pathPart && resource != RES_BOGUS && URES_IS_CONTAINER(type)) {
  ------------------
  |  |   85|   340k|#define URES_IS_CONTAINER(type) (URES_IS_TABLE(type) || URES_IS_ARRAY(type))
  |  |  ------------------
  |  |  |  |   84|   681k|#define URES_IS_TABLE(type) ((int32_t)(type)==URES_TABLE || (int32_t)(type)==URES_TABLE16 || (int32_t)(type)==URES_TABLE32)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (84:30): [True: 336k, False: 4.54k]
  |  |  |  |  |  Branch (84:61): [True: 4.54k, 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: 375k, False: 191k]
  |  Branch (2067:23): [True: 340k, False: 35.0k]
  ------------------
 2068|   340k|    char *nextPathPart = uprv_strchr(pathPart, RES_PATH_SEPARATOR);
  ------------------
  |  |   40|   340k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|   340k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2069|   340k|    if (nextPathPart != nullptr) {
  ------------------
  |  Branch (2069:9): [True: 194k, False: 146k]
  ------------------
 2070|   194k|      *nextPathPart = 0;  /* Terminating null for this part of path. */
 2071|   194k|      nextPathPart++;
 2072|   194k|    } else {
 2073|   146k|      nextPathPart = uprv_strchr(pathPart, 0);
  ------------------
  |  |   40|   146k|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|   146k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2074|   146k|    }
 2075|   340k|    int32_t t;
 2076|   340k|    const char *pathP = pathPart;
 2077|   340k|    resource = res_getTableItemByKey(pResData, resource, &t, &pathP);
  ------------------
  |  |  207|   340k|#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2078|   340k|    type = static_cast<UResType>(RES_GET_TYPE(resource));
  ------------------
  |  |   68|   340k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
 2079|   340k|    pathPart = nextPathPart; 
 2080|   340k|  }
 2081|   226k|  if (*pathPart) {
  ------------------
  |  Branch (2081:7): [True: 35.0k, False: 191k]
  ------------------
 2082|  35.0k|    return RES_BOGUS;
  ------------------
  |  |   65|  35.0k|#define RES_BOGUS 0xffffffff
  ------------------
 2083|  35.0k|  }
 2084|   191k|  return resource;
 2085|   226k|}
uresbund.cpp:_ZL10createPathPKciS0_iS0_RN6icu_7810CharStringEP10UErrorCode:
 2093|   228k|                       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|   228k|    path.clear();
 2107|   228k|    const char* key = inKey;
 2108|   228k|    if (resPathLen > 0) {
  ------------------
  |  Branch (2108:9): [True: 53.4k, False: 175k]
  ------------------
 2109|  53.4k|        path.append(resPath, resPathLen, *status);
 2110|  53.4k|        if (U_SUCCESS(*status)) {
  ------------------
  |  Branch (2110:13): [True: 53.4k, False: 0]
  ------------------
 2111|  53.4k|            const char* resPathLimit = resPath + resPathLen;
 2112|  53.4k|            const char* origResPathLimit = origResPath + origResPathLen;
 2113|  53.4k|            const char* resPathPtr = resPath;
 2114|  53.4k|            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|   121k|            while (origResPathPtr < origResPathLimit && resPathPtr < resPathLimit) {
  ------------------
  |  Branch (2118:20): [True: 68.4k, False: 53.4k]
  |  Branch (2118:57): [True: 68.4k, False: 0]
  ------------------
 2119|   831k|                while (origResPathPtr < origResPathLimit && *origResPathPtr != RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|   831k|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2119:24): [True: 831k, False: 0]
  |  Branch (2119:61): [True: 762k, False: 68.4k]
  ------------------
 2120|   762k|                    ++origResPathPtr;
 2121|   762k|                }
 2122|  68.4k|                if (origResPathPtr < origResPathLimit && *origResPathPtr == RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|  68.4k|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2122:21): [True: 68.4k, False: 0]
  |  Branch (2122:58): [True: 68.4k, False: 0]
  ------------------
 2123|  68.4k|                    ++origResPathPtr;
 2124|  68.4k|                }
 2125|   831k|                while (resPathPtr < resPathLimit && *resPathPtr != RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|   831k|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2125:24): [True: 831k, False: 0]
  |  Branch (2125:53): [True: 762k, False: 68.4k]
  ------------------
 2126|   762k|                    ++resPathPtr;
 2127|   762k|                }
 2128|  68.4k|                if (resPathPtr < resPathLimit && *resPathPtr == RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|  68.4k|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2128:21): [True: 68.4k, False: 0]
  |  Branch (2128:50): [True: 68.4k, False: 0]
  ------------------
 2129|  68.4k|                    ++resPathPtr;
 2130|  68.4k|                }
 2131|  68.4k|            }
 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|  56.9k|            while (resPathPtr < resPathLimit && *key != '\0') {
  ------------------
  |  Branch (2135:20): [True: 3.49k, False: 53.4k]
  |  Branch (2135:49): [True: 3.49k, False: 0]
  ------------------
 2136|  35.6k|                while (resPathPtr < resPathLimit && *resPathPtr != RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|  35.6k|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2136:24): [True: 35.6k, False: 0]
  |  Branch (2136:53): [True: 32.1k, False: 3.49k]
  ------------------
 2137|  32.1k|                    ++resPathPtr;
 2138|  32.1k|                }
 2139|  3.49k|                if (resPathPtr < resPathLimit && *resPathPtr == RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|  3.49k|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2139:21): [True: 3.49k, False: 0]
  |  Branch (2139:50): [True: 3.49k, False: 0]
  ------------------
 2140|  3.49k|                    ++resPathPtr;
 2141|  3.49k|                }
 2142|  35.6k|                while (*key != '\0' && *key != RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|  34.4k|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2142:24): [True: 34.4k, False: 1.16k]
  |  Branch (2142:40): [True: 32.1k, False: 2.33k]
  ------------------
 2143|  32.1k|                    ++key;
 2144|  32.1k|                }
 2145|  3.49k|                if (*key == RES_PATH_SEPARATOR) {
  ------------------
  |  |   60|  3.49k|#define RES_PATH_SEPARATOR   '/'
  ------------------
  |  Branch (2145:21): [True: 2.33k, False: 1.16k]
  ------------------
 2146|  2.33k|                    ++key;
 2147|  2.33k|                }
 2148|  3.49k|            }
 2149|  53.4k|        }
 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|  53.4k|        path.append(key, *status);
 2155|   175k|    } else {
 2156|   175k|        path.append(inKey, *status);
 2157|   175k|    }
 2158|   228k|}
uresbund.cpp:_ZL16ures_freeResPathP15UResourceBundle:
 1113|  2.96M|static void ures_freeResPath(UResourceBundle *resB) {
 1114|  2.96M|    if (resB->fResPath && resB->fResPath != resB->fResBuf) {
  ------------------
  |  Branch (1114:9): [True: 2.57M, False: 396k]
  |  Branch (1114:27): [True: 0, False: 2.57M]
  ------------------
 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|  2.96M|    resB->fResPath = nullptr;
 1118|  2.96M|    resB->fResPathLen = 0;
 1119|  2.96M|}
uresbund.cpp:_ZN12_GLOBAL__N_118GetAllChildrenSinkC2ERN6icu_7812ResourceSinkE:
 2337|  40.5k|        : dest(dest) {}
uresbund.cpp:_ZN12_GLOBAL__N_118GetAllChildrenSink3putEPKcRN6icu_7813ResourceValueEaR10UErrorCode:
 2340|  74.4k|           UErrorCode &errorCode) override {
 2341|  74.4k|        ResourceTable itemsTable = value.getTable(errorCode);
 2342|  74.4k|        if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (2342:13): [True: 0, False: 74.4k]
  ------------------
 2343|  2.89M|        for (int32_t i = 0; itemsTable.getKeyAndValue(i, key, value); ++i) {
  ------------------
  |  Branch (2343:29): [True: 2.82M, False: 74.4k]
  ------------------
 2344|  2.82M|            if (value.getType() == URES_ALIAS) {
  ------------------
  |  Branch (2344:17): [True: 594k, False: 2.22M]
  ------------------
 2345|   594k|                ResourceDataValue& rdv = static_cast<ResourceDataValue&>(value);
 2346|   594k|                StackUResourceBundle stackTempBundle;
 2347|   594k|                UResourceBundle* aliasRB = getAliasTargetAsResourceBundle(rdv.getData(), rdv.getResource(), nullptr, -1,
 2348|   594k|                                                                          rdv.getValidLocaleDataEntry(), nullptr, 0,
 2349|   594k|                                                                          stackTempBundle.getAlias(), &errorCode);
 2350|   594k|                if (U_SUCCESS(errorCode)) {
  ------------------
  |  Branch (2350:21): [True: 594k, False: 0]
  ------------------
 2351|   594k|                    ResourceDataValue aliasedValue;
 2352|   594k|                    aliasedValue.setData(aliasRB->getResData());
 2353|   594k|                    aliasedValue.setValidLocaleDataEntry(aliasRB->fValidLocaleDataEntry);
 2354|   594k|                    aliasedValue.setResource(aliasRB->fRes, ResourceTracer(aliasRB));
 2355|       |                    
 2356|   594k|                    if (aliasedValue.getType() != URES_TABLE) {
  ------------------
  |  Branch (2356:25): [True: 0, False: 594k]
  ------------------
 2357|      0|                        dest.put(key, aliasedValue, isRoot, errorCode);
 2358|   594k|                    } else {
 2359|       |                        // if the resource we're aliasing over to is a table, the sink might iterate over its contents.
 2360|       |                        // If it does, it'll get only the things defined in the actual alias target, not the things
 2361|       |                        // the target inherits from its parent resources.  So we walk the parent chain for the *alias target*,
 2362|       |                        // calling dest.put() for each of the parent tables we could be inheriting from.  This means
 2363|       |                        // that dest.put() has to iterate over the children of multiple tables to get all of the inherited
 2364|       |                        // resource values, but it already has to do that to handle normal vertical inheritance.
 2365|   594k|                        UResType aliasedValueType = URES_TABLE;
 2366|   594k|                        CharString tablePath;
 2367|   594k|                        tablePath.append(aliasRB->fResPath, errorCode);
 2368|   594k|                        const char* parentKey = key; // dest.put() changes the key
 2369|   594k|                        dest.put(parentKey, aliasedValue, isRoot, errorCode);
 2370|   594k|                        UResourceDataEntry* entry = aliasRB->fData;
 2371|   594k|                        Resource res = aliasRB->fRes;
 2372|  1.36M|                        while (aliasedValueType == URES_TABLE && entry->fParent != nullptr) {
  ------------------
  |  Branch (2372:32): [True: 1.36M, False: 0]
  |  Branch (2372:66): [True: 768k, False: 594k]
  ------------------
 2373|   768k|                            CharString localPath;
 2374|   768k|                            localPath.copyFrom(tablePath, errorCode);
 2375|   768k|                            char* localPathAsCharPtr = localPath.data();
 2376|   768k|                            const char* childKey;
 2377|   768k|                            entry = entry->fParent;
 2378|   768k|                            res = entry->fData.rootRes;
 2379|   768k|                            Resource newRes = res_findResource(&entry->fData, res, &localPathAsCharPtr, &childKey);
  ------------------
  |  |  198|   768k|#define res_findResource U_ICU_ENTRY_POINT_RENAME(res_findResource)
  |  |  ------------------
  |  |  |  |  123|   768k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   768k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   768k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2380|   768k|                            if (newRes != RES_BOGUS) {
  ------------------
  |  |   65|   768k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (2380:33): [True: 761k, False: 6.51k]
  ------------------
 2381|   761k|                                aliasedValue.setData(entry->fData);
 2382|       |                                // TODO: do I also need to call aliasedValue.setValueLocaleDataEntry() ?
 2383|   761k|                                aliasedValue.setResource(newRes, ResourceTracer(aliasRB)); // probably wrong to use aliasRB here
 2384|   761k|                                aliasedValueType = aliasedValue.getType();
 2385|   761k|                                if (aliasedValueType == URES_ALIAS) {
  ------------------
  |  Branch (2385:37): [True: 243k, False: 518k]
  ------------------
 2386|       |                                    // in a few rare cases, when we get to the root resource bundle, the resource in question
 2387|       |                                    // won't be an actual table, but will instead be an alias to a table.  That is, we have
 2388|       |                                    // two aliases in the inheritance path.  (For some locales, such as Zulu, we see this with
 2389|       |                                    // children of the "fields" resource: "day-narrow" aliases to "day-short", which aliases
 2390|       |                                    // to "day".)  When this happens, we need to make sure we follow all the aliases.
 2391|   243k|                                    ResourceDataValue& rdv2 = static_cast<ResourceDataValue&>(aliasedValue);
 2392|   243k|                                    aliasRB = getAliasTargetAsResourceBundle(rdv2.getData(), rdv2.getResource(), nullptr, -1,
 2393|   243k|                                                                             rdv2.getValidLocaleDataEntry(), nullptr, 0,
 2394|   243k|                                                                             stackTempBundle.getAlias(), &errorCode);
 2395|   243k|                                    tablePath.clear();
 2396|   243k|                                    tablePath.append(aliasRB->fResPath, errorCode);
 2397|   243k|                                    entry = aliasRB->fData;
 2398|   243k|                                    res = aliasRB->fRes;
 2399|   243k|                                    aliasedValue.setData(entry->fData);
 2400|       |                                    // TODO: do I also need to call aliasedValue.setValueLocaleDataEntry() ?
 2401|   243k|                                    aliasedValue.setResource(res, ResourceTracer(aliasRB)); // probably wrong to use aliasRB here
 2402|   243k|                                    aliasedValueType = aliasedValue.getType();
 2403|   243k|                                }
 2404|   761k|                                if (aliasedValueType == URES_TABLE) {
  ------------------
  |  Branch (2404:37): [True: 761k, False: 0]
  ------------------
 2405|   761k|                                    dest.put(parentKey, aliasedValue, isRoot, errorCode);
 2406|   761k|                                } else {
 2407|       |                                    // once we've followed the alias, the resource we're looking at really should
 2408|       |                                    // be a table
 2409|      0|                                    errorCode = U_INTERNAL_PROGRAM_ERROR;
 2410|      0|                                    return;
 2411|      0|                                }
 2412|   761k|                            }
 2413|   768k|                        }
 2414|   594k|                    }
 2415|   594k|                }
 2416|  2.22M|            } else {
 2417|  2.22M|                dest.put(key, value, isRoot, errorCode);
 2418|  2.22M|            }
 2419|  2.82M|            if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (2419:17): [True: 0, False: 2.82M]
  ------------------
 2420|  2.82M|        }
 2421|  74.4k|    }
uresbund.cpp:_ZN12_GLOBAL__N_123getAllItemsWithFallbackEPK15UResourceBundleRN6icu_7817ResourceDataValueERNS3_12ResourceSinkER10UErrorCode:
 2278|   118k|        ResourceSink &sink, UErrorCode &errorCode) {
 2279|   118k|    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (2279:9): [True: 0, False: 118k]
  ------------------
 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|   118k|    value.setData(bundle->getResData());
 2291|   118k|    value.setValidLocaleDataEntry(bundle->fValidLocaleDataEntry);
 2292|   118k|    UResourceDataEntry *parentEntry = bundle->fData->fParent;
 2293|   118k|    UBool hasParent = parentEntry != nullptr && U_SUCCESS(parentEntry->fBogus);
  ------------------
  |  Branch (2293:23): [True: 49.9k, False: 68.4k]
  |  Branch (2293:49): [True: 49.9k, False: 0]
  ------------------
 2294|   118k|    value.setResource(bundle->fRes, ResourceTracer(bundle));
 2295|   118k|    sink.put(bundle->fKey, value, !hasParent, errorCode);
 2296|   118k|    if (hasParent) {
  ------------------
  |  Branch (2296:9): [True: 49.9k, False: 68.4k]
  ------------------
 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|  49.9k|        StackUResourceBundle parentBundle;
 2306|  49.9k|        UResourceBundle &parentRef = parentBundle.ref();
 2307|  49.9k|        parentRef.fData = parentEntry;
 2308|  49.9k|        parentRef.fValidLocaleDataEntry = bundle->fValidLocaleDataEntry;
 2309|  49.9k|        parentRef.fHasFallback = !parentRef.getResData().noFallback;
 2310|  49.9k|        parentRef.fIsTopLevel = true;
 2311|  49.9k|        parentRef.fRes = parentRef.getResData().rootRes;
 2312|  49.9k|        parentRef.fSize = res_countArrayItems(&parentRef.getResData(), parentRef.fRes);
  ------------------
  |  |  197|  49.9k|#define res_countArrayItems U_ICU_ENTRY_POINT_RENAME(res_countArrayItems)
  |  |  ------------------
  |  |  |  |  123|  49.9k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  49.9k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  49.9k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2313|  49.9k|        parentRef.fIndex = -1;
 2314|  49.9k|        entryIncrease(parentEntry);
 2315|       |
 2316|       |        // Look up the container item in the parent bundle.
 2317|  49.9k|        StackUResourceBundle containerBundle;
 2318|  49.9k|        const UResourceBundle *rb;
 2319|  49.9k|        UErrorCode pathErrorCode = U_ZERO_ERROR;  // Ignore if parents up to root do not have this path.
 2320|  49.9k|        if (bundle->fResPath == nullptr || *bundle->fResPath == 0) {
  ------------------
  |  Branch (2320:13): [True: 0, False: 49.9k]
  |  Branch (2320:44): [True: 0, False: 49.9k]
  ------------------
 2321|      0|            rb = parentBundle.getAlias();
 2322|  49.9k|        } else {
 2323|  49.9k|            rb = ures_getByKeyWithFallback(parentBundle.getAlias(), bundle->fResPath,
  ------------------
  |  | 1662|  49.9k|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|  49.9k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  49.9k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  49.9k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2324|  49.9k|                                           containerBundle.getAlias(), &pathErrorCode);
 2325|  49.9k|        }
 2326|  49.9k|        if (U_SUCCESS(pathErrorCode)) {
  ------------------
  |  Branch (2326:13): [True: 49.9k, False: 0]
  ------------------
 2327|  49.9k|            getAllItemsWithFallback(rb, value, sink, errorCode);
 2328|  49.9k|        }
 2329|  49.9k|    }
 2330|   118k|}
uresbund.cpp:_ZL15getFallbackDataPK15UResourceBundlePPKcPjP10UErrorCode:
  319|   234k|        const char **resTag, Resource *res, UErrorCode *status) {
  320|   234k|    UResourceDataEntry *dataEntry = resBundle->fData;
  321|   234k|    int32_t indexR = -1;
  322|   234k|    int32_t i = 0;
  323|   234k|    *res = RES_BOGUS;
  ------------------
  |  |   65|   234k|#define RES_BOGUS 0xffffffff
  ------------------
  324|   234k|    if(dataEntry == nullptr) {
  ------------------
  |  Branch (324:8): [True: 0, False: 234k]
  ------------------
  325|      0|        *status = U_MISSING_RESOURCE_ERROR;
  326|      0|        return nullptr;
  327|      0|    }
  328|   234k|    if(dataEntry->fBogus == U_ZERO_ERROR) { /* if this resource is real, */
  ------------------
  |  Branch (328:8): [True: 234k, False: 0]
  ------------------
  329|   234k|        *res = res_getTableItemByKey(&(dataEntry->fData), dataEntry->fData.rootRes, &indexR, resTag); /* try to get data from there */
  ------------------
  |  |  207|   234k|#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey)
  |  |  ------------------
  |  |  |  |  123|   234k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   234k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   234k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  330|   234k|        i++;
  331|   234k|    }
  332|   234k|    if(resBundle->fHasFallback) {
  ------------------
  |  Branch (332:8): [True: 234k, False: 0]
  ------------------
  333|       |        // Otherwise, we'll look in parents.
  334|   662k|        while(*res == RES_BOGUS && dataEntry->fParent != nullptr) {
  ------------------
  |  |   65|  1.32M|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (334:15): [True: 601k, False: 60.7k]
  |  Branch (334:36): [True: 427k, False: 174k]
  ------------------
  335|   427k|            dataEntry = dataEntry->fParent;
  336|   427k|            if(dataEntry->fBogus == U_ZERO_ERROR) {
  ------------------
  |  Branch (336:16): [True: 427k, False: 0]
  ------------------
  337|   427k|                i++;
  338|   427k|                *res = res_getTableItemByKey(&(dataEntry->fData), dataEntry->fData.rootRes, &indexR, resTag);
  ------------------
  |  |  207|   427k|#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey)
  |  |  ------------------
  |  |  |  |  123|   427k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   427k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   427k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  339|   427k|            }
  340|   427k|        }
  341|   234k|    }
  342|       |
  343|   234k|    if(*res == RES_BOGUS) {
  ------------------
  |  |   65|   234k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (343:8): [True: 174k, False: 60.7k]
  ------------------
  344|       |        // If the resource is not found, we need to give an error.
  345|   174k|        *status = U_MISSING_RESOURCE_ERROR;
  346|   174k|        return nullptr;
  347|   174k|    }
  348|       |    // If the resource is found in parents, we need to adjust the error.
  349|  60.7k|    if(i>1) {
  ------------------
  |  Branch (349:8): [True: 60.7k, False: 0]
  ------------------
  350|  60.7k|        if(uprv_strcmp(dataEntry->fName, uloc_getDefault())==0 || uprv_strcmp(dataEntry->fName, kRootLocaleName)==0) {
  ------------------
  |  |   38|  60.7k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  60.7k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
                      if(uprv_strcmp(dataEntry->fName, uloc_getDefault())==0 || uprv_strcmp(dataEntry->fName, kRootLocaleName)==0) {
  ------------------
  |  |   38|  60.7k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  60.7k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (350:12): [True: 0, False: 60.7k]
  |  Branch (350:67): [True: 261, False: 60.4k]
  ------------------
  351|    261|            *status = U_USING_DEFAULT_WARNING;
  352|  60.4k|        } else {
  353|  60.4k|            *status = U_USING_FALLBACK_WARNING;
  354|  60.4k|        }
  355|  60.7k|    }
  356|  60.7k|    return dataEntry;
  357|   234k|}
uresbund.cpp:_ZL17ures_openWithTypeP15UResourceBundlePKcS2_12UResOpenTypeP10UErrorCode:
 2712|   353k|                  UResOpenType openType, UErrorCode* status) {
 2713|   353k|    if(U_FAILURE(*status)) {
  ------------------
  |  Branch (2713:8): [True: 329, False: 352k]
  ------------------
 2714|    329|        return nullptr;
 2715|    329|    }
 2716|       |
 2717|   352k|    UResourceDataEntry *entry;
 2718|   352k|    if(openType != URES_OPEN_DIRECT) {
  ------------------
  |  Branch (2718:8): [True: 318k, False: 34.2k]
  ------------------
 2719|   318k|        if (localeID == nullptr) {
  ------------------
  |  Branch (2719:13): [True: 0, False: 318k]
  ------------------
 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|   318k|        CharString canonLocaleID = ulocimp_getBaseName(localeID, *status);
  ------------------
  |  | 1199|   318k|#define ulocimp_getBaseName U_ICU_ENTRY_POINT_RENAME(ulocimp_getBaseName)
  |  |  ------------------
  |  |  |  |  123|   318k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   318k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   318k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2724|   318k|        if(U_FAILURE(*status)) {
  ------------------
  |  Branch (2724:12): [True: 25, False: 318k]
  ------------------
 2725|     25|            *status = U_ILLEGAL_ARGUMENT_ERROR;
 2726|     25|            return nullptr;
 2727|     25|        }
 2728|   318k|        entry = entryOpen(path, canonLocaleID.data(), openType, status);
 2729|   318k|    } else {
 2730|  34.2k|        entry = entryOpenDirect(path, localeID, status);
 2731|  34.2k|    }
 2732|   352k|    if(U_FAILURE(*status)) {
  ------------------
  |  Branch (2732:8): [True: 0, False: 352k]
  ------------------
 2733|      0|        return nullptr;
 2734|      0|    }
 2735|   352k|    if(entry == nullptr) {
  ------------------
  |  Branch (2735:8): [True: 0, False: 352k]
  ------------------
 2736|      0|        *status = U_MISSING_RESOURCE_ERROR;
 2737|      0|        return nullptr;
 2738|      0|    }
 2739|       |
 2740|   352k|    UBool isStackObject;
 2741|   352k|    if(r == nullptr) {
  ------------------
  |  Branch (2741:8): [True: 352k, False: 0]
  ------------------
 2742|   352k|        r = static_cast<UResourceBundle*>(uprv_malloc(sizeof(UResourceBundle)));
  ------------------
  |  | 1524|   352k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|   352k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   352k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   352k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2743|   352k|        if(r == nullptr) {
  ------------------
  |  Branch (2743:12): [True: 0, False: 352k]
  ------------------
 2744|      0|            entryClose(entry);
 2745|      0|            *status = U_MEMORY_ALLOCATION_ERROR;
 2746|      0|            return nullptr;
 2747|      0|        }
 2748|   352k|        isStackObject = false;
 2749|   352k|    } else {  // fill-in
 2750|      0|        isStackObject = ures_isStackObject(r);
 2751|      0|        ures_closeBundle(r, false);
 2752|      0|    }
 2753|   352k|    uprv_memset(r, 0, sizeof(UResourceBundle));
  ------------------
  |  |  100|   352k|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|   352k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2754|   352k|    ures_setIsStackObject(r, isStackObject);
 2755|       |
 2756|   352k|    r->fValidLocaleDataEntry = r->fData = entry;
 2757|   352k|    r->fHasFallback = openType != URES_OPEN_DIRECT && !r->getResData().noFallback;
  ------------------
  |  Branch (2757:23): [True: 318k, False: 34.2k]
  |  Branch (2757:55): [True: 317k, False: 1.60k]
  ------------------
 2758|   352k|    r->fIsTopLevel = true;
 2759|   352k|    r->fRes = r->getResData().rootRes;
 2760|   352k|    r->fSize = res_countArrayItems(&r->getResData(), r->fRes);
  ------------------
  |  |  197|   352k|#define res_countArrayItems U_ICU_ENTRY_POINT_RENAME(res_countArrayItems)
  |  |  ------------------
  |  |  |  |  123|   352k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   352k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   352k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2761|   352k|    r->fIndex = -1;
 2762|       |
 2763|   352k|    ResourceTracer(r).traceOpen();
 2764|       |
 2765|   352k|    return r;
 2766|   352k|}
uresbund.cpp:_ZL9entryOpenPKcS0_12UResOpenTypeP10UErrorCode:
  812|   318k|                                     UResOpenType openType, UErrorCode* status) {
  813|   318k|    U_ASSERT(openType != URES_OPEN_DIRECT);
  ------------------
  |  |   35|   318k|#   define U_ASSERT(exp) (void)0
  ------------------
  814|   318k|    UErrorCode intStatus = U_ZERO_ERROR;
  815|   318k|    UResourceDataEntry *r = nullptr;
  816|   318k|    UResourceDataEntry *t1 = nullptr;
  817|   318k|    UBool isDefault = false;
  818|   318k|    UBool isRoot = false;
  819|   318k|    UBool hasRealData = false;
  820|   318k|    UBool hasChopped = true;
  821|   318k|    UBool usingUSRData = U_USE_USRDATA && ( path == nullptr || uprv_strncmp(path,U_ICUDATA_NAME,8) == 0);
  ------------------
  |  |  157|   637k|#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|   318k|    char name[ULOC_FULLNAME_CAPACITY];
  824|   318k|    char usrDataPath[96];
  825|       |
  826|   318k|    initCache(status);
  827|       |
  828|   318k|    if(U_FAILURE(*status)) {
  ------------------
  |  Branch (828:8): [True: 0, False: 318k]
  ------------------
  829|      0|        return nullptr;
  830|      0|    }
  831|       |
  832|   318k|    uprv_strncpy(name, localeID, sizeof(name) - 1);
  ------------------
  |  |   43|   318k|#define uprv_strncpy(dst, src, size) U_STANDARD_CPP_NAMESPACE strncpy(dst, src, size)
  |  |  ------------------
  |  |  |  |  393|   318k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  833|   318k|    name[sizeof(name) - 1] = 0;
  834|       |
  835|   318k|    if ( usingUSRData ) {
  ------------------
  |  Branch (835:10): [True: 0, False: 318k]
  ------------------
  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|   318k|    const char *defaultLocale = uloc_getDefault();
  ------------------
  |  | 1118|   318k|#define uloc_getDefault U_ICU_ENTRY_POINT_RENAME(uloc_getDefault)
  |  |  ------------------
  |  |  |  |  123|   318k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   318k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   318k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  849|       |
  850|   318k|    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|   318k|    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|   318k|    if (intStatus == U_MEMORY_ALLOCATION_ERROR) {
  ------------------
  |  Branch (856:9): [True: 0, False: 318k]
  ------------------
  857|      0|        *status = intStatus;
  858|      0|        goto finish;
  859|      0|    }
  860|       |
  861|   318k|    if(r != nullptr) { /* if there is one real locale, we can look for parents. */
  ------------------
  |  Branch (861:8): [True: 215k, False: 103k]
  ------------------
  862|   215k|        t1 = r;
  863|   215k|        hasRealData = true;
  864|   215k|        if ( usingUSRData ) {  /* This code inserts user override data into the inheritance chain */
  ------------------
  |  Branch (864:14): [True: 0, False: 215k]
  ------------------
  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|   215k|        if ((hasChopped || mayHaveParent(name)) && !isRoot) {
  ------------------
  |  Branch (882:14): [True: 94.8k, False: 120k]
  |  Branch (882:28): [True: 545, False: 120k]
  |  Branch (882:52): [True: 95.3k, False: 0]
  ------------------
  883|  95.3k|            if (!loadParentsExceptRoot(t1, name, UPRV_LENGTHOF(name), usingUSRData, usrDataPath, status)) {
  ------------------
  |  |   99|  95.3k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (883:17): [True: 0, False: 95.3k]
  ------------------
  884|      0|                goto finish;
  885|      0|            }
  886|  95.3k|        }
  887|   215k|    }
  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|   318k|    if(r==nullptr && openType == URES_OPEN_LOCALE_DEFAULT_ROOT && !isDefault && !isRoot) {
  ------------------
  |  Branch (891:8): [True: 103k, False: 215k]
  |  Branch (891:22): [True: 103k, False: 0]
  |  Branch (891:67): [True: 101k, False: 1.60k]
  |  Branch (891:81): [True: 101k, False: 0]
  ------------------
  892|       |        /* insert default locale */
  893|   101k|        uprv_strcpy(name, defaultLocale);
  ------------------
  |  |   36|   101k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|   101k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  894|   101k|        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|   101k|        if (intStatus == U_MEMORY_ALLOCATION_ERROR) {
  ------------------
  |  Branch (896:13): [True: 0, False: 101k]
  ------------------
  897|      0|            *status = intStatus;
  898|      0|            goto finish;
  899|      0|        }
  900|   101k|        intStatus = U_USING_DEFAULT_WARNING;
  901|   101k|        if(r != nullptr) { /* the default locale exists */
  ------------------
  |  Branch (901:12): [True: 101k, False: 274]
  ------------------
  902|   101k|            t1 = r;
  903|   101k|            hasRealData = true;
  904|   101k|            isDefault = true;
  905|       |            // TODO: Why not if (usingUSRData) { ... } like in the non-default-locale code path?
  906|   101k|            if ((hasChopped || mayHaveParent(name)) && !isRoot) {
  ------------------
  |  Branch (906:18): [True: 96.4k, False: 4.75k]
  |  Branch (906:32): [True: 0, False: 4.75k]
  |  Branch (906:56): [True: 96.4k, False: 0]
  ------------------
  907|  96.4k|                if (!loadParentsExceptRoot(t1, name, UPRV_LENGTHOF(name), usingUSRData, usrDataPath, status)) {
  ------------------
  |  |   99|  96.4k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (907:21): [True: 0, False: 96.4k]
  ------------------
  908|      0|                    goto finish;
  909|      0|                }
  910|  96.4k|            }
  911|   101k|        }
  912|   101k|    }
  913|       |
  914|       |    /* we could still have r == nullptr at this point - maybe even default locale is not */
  915|       |    /* present */
  916|   318k|    if(r == nullptr) {
  ------------------
  |  Branch (916:8): [True: 1.88k, False: 316k]
  ------------------
  917|  1.88k|        uprv_strcpy(name, kRootLocaleName);
  ------------------
  |  |   36|  1.88k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  1.88k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  918|  1.88k|        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|  1.88k|        if (intStatus == U_MEMORY_ALLOCATION_ERROR) {
  ------------------
  |  Branch (920:13): [True: 0, False: 1.88k]
  ------------------
  921|      0|            *status = intStatus;
  922|      0|            goto finish;
  923|      0|        }
  924|  1.88k|        if(r != nullptr) {
  ------------------
  |  Branch (924:12): [True: 1.88k, False: 0]
  ------------------
  925|  1.88k|            t1 = r;
  926|  1.88k|            intStatus = U_USING_DEFAULT_WARNING;
  927|  1.88k|            hasRealData = true;
  928|  1.88k|        } else { /* we don't even have the root locale */
  929|      0|            *status = U_MISSING_RESOURCE_ERROR;
  930|      0|            goto finish;
  931|      0|        }
  932|   316k|    } else if(!isRoot && uprv_strcmp(t1->fName, kRootLocaleName) != 0 &&
  ------------------
  |  |   38|   272k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|   272k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (932:15): [True: 272k, False: 44.7k]
  |  Branch (932:26): [True: 272k, False: 0]
  ------------------
  933|   316k|            t1->fParent == nullptr && !r->fData.noFallback) {
  ------------------
  |  Branch (933:13): [True: 2.11k, False: 269k]
  |  Branch (933:39): [True: 506, False: 1.60k]
  ------------------
  934|    506|        if (!insertRootBundle(t1, status)) {
  ------------------
  |  Branch (934:13): [True: 0, False: 506]
  ------------------
  935|      0|            goto finish;
  936|      0|        }
  937|    506|        if(!hasRealData) {
  ------------------
  |  Branch (937:12): [True: 0, False: 506]
  ------------------
  938|      0|            r->fBogus = U_USING_DEFAULT_WARNING;
  939|      0|        }
  940|    506|    }
  941|       |
  942|       |    // TODO: Does this ever loop?
  943|   910k|    while(r != nullptr && !isRoot && t1->fParent != nullptr) {
  ------------------
  |  Branch (943:11): [True: 910k, False: 0]
  |  Branch (943:27): [True: 863k, False: 46.6k]
  |  Branch (943:38): [True: 591k, False: 272k]
  ------------------
  944|   591k|        t1->fParent->fCountExisting++;
  945|   591k|        t1 = t1->fParent;
  946|   591k|    }
  947|       |
  948|   318k|finish:
  949|   318k|    if(U_SUCCESS(*status)) {
  ------------------
  |  Branch (949:8): [True: 318k, False: 0]
  ------------------
  950|   318k|        if(intStatus != U_ZERO_ERROR) {
  ------------------
  |  Branch (950:12): [True: 125k, False: 192k]
  ------------------
  951|   125k|            *status = intStatus;  
  952|   125k|        }
  953|   318k|        return r;
  954|   318k|    } else {
  955|      0|        return nullptr;
  956|      0|    }
  957|   318k|}
uresbund.cpp:_ZL9initCacheP10UErrorCode:
  483|   352k|static void initCache(UErrorCode *status) {
  484|   352k|    umtx_initOnce(gCacheInitOnce, &createCache, *status);
  485|   352k|}
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|  1.79M|static int32_t U_CALLCONV hashEntry(const UHashTok parm) {
   59|  1.79M|    UResourceDataEntry* b = static_cast<UResourceDataEntry*>(parm.pointer);
   60|  1.79M|    UHashTok namekey, pathkey;
   61|  1.79M|    namekey.pointer = b->fName;
   62|  1.79M|    pathkey.pointer = b->fPath;
   63|  1.79M|    return uhash_hashChars(namekey)+37u*uhash_hashChars(pathkey);
  ------------------
  |  | 1011|  1.79M|#define uhash_hashChars U_ICU_ENTRY_POINT_RENAME(uhash_hashChars)
  |  |  ------------------
  |  |  |  |  123|  1.79M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.79M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.79M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return uhash_hashChars(namekey)+37u*uhash_hashChars(pathkey);
  ------------------
  |  | 1011|  1.79M|#define uhash_hashChars U_ICU_ENTRY_POINT_RENAME(uhash_hashChars)
  |  |  ------------------
  |  |  |  |  123|  1.79M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.79M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.79M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   64|  1.79M|}
uresbund.cpp:_ZL14compareEntries8UElementS_:
   67|  1.86M|static UBool U_CALLCONV compareEntries(const UHashTok p1, const UHashTok p2) {
   68|  1.86M|    UResourceDataEntry* b1 = static_cast<UResourceDataEntry*>(p1.pointer);
   69|  1.86M|    UResourceDataEntry* b2 = static_cast<UResourceDataEntry*>(p2.pointer);
   70|  1.86M|    UHashTok name1, name2, path1, path2;
   71|  1.86M|    name1.pointer = b1->fName;
   72|  1.86M|    name2.pointer = b2->fName;
   73|  1.86M|    path1.pointer = b1->fPath;
   74|  1.86M|    path2.pointer = b2->fPath;
   75|  1.86M|    return uhash_compareChars(name1, name2) && uhash_compareChars(path1, path2);
  ------------------
  |  |  993|  1.86M|#define uhash_compareChars U_ICU_ENTRY_POINT_RENAME(uhash_compareChars)
  |  |  ------------------
  |  |  |  |  123|  1.86M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.86M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.86M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return uhash_compareChars(name1, name2) && uhash_compareChars(path1, path2);
  ------------------
  |  |  993|  1.63M|#define uhash_compareChars U_ICU_ENTRY_POINT_RENAME(uhash_compareChars)
  |  |  ------------------
  |  |  |  |  123|  1.63M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.63M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.63M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (75:12): [True: 1.63M, False: 233k]
  |  Branch (75:48): [True: 1.63M, False: 0]
  ------------------
   76|  1.86M|}
uresbund.cpp:_ZL17findFirstExistingPKcPcS0_12UResOpenTypePaS3_S3_P10UErrorCode:
  665|   422k|                  UBool *isRoot, UBool *foundParent, UBool *isDefault, UErrorCode* status) {
  666|   422k|    UResourceDataEntry *r = nullptr;
  667|   422k|    UBool hasRealData = false;
  668|   422k|    *foundParent = true; /* we're starting with a fresh name */
  669|   422k|    char origName[ULOC_FULLNAME_CAPACITY];
  670|       |
  671|   422k|    uprv_strcpy(origName, name);
  ------------------
  |  |   36|   422k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|   422k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  672|  2.07M|    while(*foundParent && !hasRealData) {
  ------------------
  |  Branch (672:11): [True: 1.84M, False: 230k]
  |  Branch (672:27): [True: 1.64M, False: 191k]
  ------------------
  673|  1.64M|        r = init_entry(name, path, status);
  674|       |        /* Null pointer test */
  675|  1.64M|        if (U_FAILURE(*status)) {
  ------------------
  |  Branch (675:13): [True: 548, False: 1.64M]
  ------------------
  676|    548|            return nullptr;
  677|    548|        }
  678|  1.64M|        *isDefault = static_cast<UBool>(uprv_strncmp(name, defaultLocale, uprv_strlen(name)) == 0);
  ------------------
  |  |   44|  1.64M|#define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n)
  |  |  ------------------
  |  |  |  |  393|  1.64M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  679|  1.64M|        hasRealData = static_cast<UBool>(r->fBogus == U_ZERO_ERROR);
  680|  1.64M|        if(!hasRealData) {
  ------------------
  |  Branch (680:12): [True: 1.33M, False: 318k]
  ------------------
  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|  1.33M|            r->fCountExisting--;
  687|       |            /*entryCloseInt(r);*/
  688|  1.33M|            r = nullptr;
  689|  1.33M|            *status = U_USING_FALLBACK_WARNING;
  690|  1.33M|        } else {
  691|   318k|            uprv_strcpy(name, r->fName); /* this is needed for supporting aliases */
  ------------------
  |  |   36|   318k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|   318k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  692|   318k|        }
  693|       |
  694|  1.64M|        *isRoot = static_cast<UBool>(uprv_strcmp(name, kRootLocaleName) == 0);
  ------------------
  |  |   38|  1.64M|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  1.64M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  695|       |
  696|       |        /*Fallback data stuff*/
  697|  1.64M|        if (!hasRealData) {
  ------------------
  |  Branch (697:13): [True: 1.33M, False: 318k]
  ------------------
  698|  1.33M|            *foundParent = getParentLocaleID(name, origName, openType);
  699|  1.33M|        } 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|   318k|            *foundParent = chopLocale(name);
  703|   318k|        }
  704|  1.64M|        if (*foundParent && *name == '\0') {
  ------------------
  |  Branch (704:13): [True: 1.41M, False: 230k]
  |  Branch (704:29): [True: 21.9k, False: 1.39M]
  ------------------
  705|  21.9k|            uprv_strcpy(name, "und");
  ------------------
  |  |   36|  21.9k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  21.9k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  706|  21.9k|        }
  707|  1.64M|    }
  708|   421k|    return r;
  709|   422k|}
uresbund.cpp:_ZL17getParentLocaleIDPcPKc12UResOpenType:
  211|  1.33M|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|  1.33M|    size_t nameLen = uprv_strlen(name);
  ------------------
  |  |   37|  1.33M|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  1.33M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  214|  1.33M|    if (!nameLen || name[nameLen - 1] == '_' || hasVariant(name)) {
  ------------------
  |  Branch (214:9): [True: 0, False: 1.33M]
  |  Branch (214:21): [True: 954k, False: 375k]
  |  Branch (214:49): [True: 178k, False: 196k]
  ------------------
  215|  1.13M|        return chopLocale(name);
  216|  1.13M|    }
  217|       |    
  218|   196k|    UErrorCode err = U_ZERO_ERROR;
  219|   196k|    CharString language;
  220|   196k|    CharString script;
  221|   196k|    CharString region;
  222|   196k|    ulocimp_getSubtags(name, &language, &script, &region, nullptr, nullptr, err);
  ------------------
  |  | 1209|   196k|#define ulocimp_getSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_getSubtags)
  |  |  ------------------
  |  |  |  |  123|   196k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   196k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   196k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|       |
  224|   196k|    if (U_FAILURE(err)) {
  ------------------
  |  Branch (224:9): [True: 0, False: 196k]
  ------------------
  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|   196k|    if (openType == URES_OPEN_LOCALE_DEFAULT_ROOT) {
  ------------------
  |  Branch (234:9): [True: 196k, False: 0]
  ------------------
  235|   196k|        const char* parentID = performFallbackLookup(name, parentLocaleChars, parentLocaleChars, parentLocaleTable, UPRV_LENGTHOF(parentLocaleTable));
  ------------------
  |  |   99|   196k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  236|   196k|        if (parentID != nullptr) {
  ------------------
  |  Branch (236:13): [True: 1.32k, False: 195k]
  ------------------
  237|  1.32k|            uprv_strcpy(name, parentID);
  ------------------
  |  |   36|  1.32k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  1.32k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  238|  1.32k|            return true;
  239|  1.32k|        }
  240|   196k|    }
  241|       |
  242|   195k|    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|   195k|    if (!script.isEmpty() && !region.isEmpty()) {
  ------------------
  |  Branch (246:9): [True: 55.4k, False: 140k]
  |  Branch (246:30): [True: 2.70k, False: 52.7k]
  ------------------
  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|  2.70k|        if (getDefaultScript(language, region) == script) {
  ------------------
  |  Branch (250:13): [True: 1.02k, False: 1.68k]
  ------------------
  251|  1.02k|            workingLocale.append(language, err).append("_", err).append(region, err);
  252|  1.68k|        } else {
  253|  1.68k|            workingLocale.append(language, err).append("_", err).append(script, err);
  254|  1.68k|        }
  255|   192k|    } else if (!region.isEmpty()) {
  ------------------
  |  Branch (255:16): [True: 50.1k, False: 142k]
  ------------------
  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|  50.1k|        UErrorCode err = U_ZERO_ERROR;
  260|  50.1k|        CharString origNameLanguage;
  261|  50.1k|        CharString origNameScript;
  262|  50.1k|        ulocimp_getSubtags(origName, &origNameLanguage, &origNameScript, nullptr, nullptr, nullptr, err);
  ------------------
  |  | 1209|  50.1k|#define ulocimp_getSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_getSubtags)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  263|  50.1k|        if (!origNameScript.isEmpty()) {
  ------------------
  |  Branch (263:13): [True: 1.00k, False: 49.1k]
  ------------------
  264|  1.00k|            workingLocale.append(language, err).append("_", err).append(origNameScript, err);
  265|  49.1k|        } else {
  266|  49.1k|            workingLocale.append(language, err).append("_", err).append(getDefaultScript(language, region), err);
  267|  49.1k|        }
  268|   142k|    } else if (!script.isEmpty()) {
  ------------------
  |  Branch (268:16): [True: 52.7k, False: 89.9k]
  ------------------
  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|  52.7k|        if (openType != URES_OPEN_LOCALE_DEFAULT_ROOT || getDefaultScript(language, CharString()) == script) {
  ------------------
  |  Branch (275:13): [True: 0, False: 52.7k]
  |  Branch (275:13): [True: 47.9k, False: 4.80k]
  |  Branch (275:58): [True: 47.9k, False: 4.80k]
  ------------------
  276|  47.9k|            workingLocale.append(language, err);
  277|  47.9k|        } else {
  278|  4.80k|            return false;
  279|  4.80k|        }
  280|  89.9k|    } else {
  281|       |        // if "name" just contains a language code, return false so the calling code falls back to "root"
  282|  89.9k|        return false;
  283|  89.9k|    }
  284|   100k|    if (U_SUCCESS(err) && !workingLocale.isEmpty()) {
  ------------------
  |  Branch (284:9): [True: 100k, False: 0]
  |  Branch (284:27): [True: 92.7k, False: 8.11k]
  ------------------
  285|  92.7k|        uprv_strcpy(name, workingLocale.data());
  ------------------
  |  |   36|  92.7k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  92.7k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  286|  92.7k|        return true;
  287|  92.7k|    } else {
  288|  8.11k|        return false;
  289|  8.11k|    }
  290|   100k|}
uresbund.cpp:_ZL10hasVariantPKc:
   94|   375k|static UBool hasVariant(const char* localeID) {
   95|   375k|    UErrorCode err = U_ZERO_ERROR;
   96|   375k|    CheckedArrayByteSink sink(nullptr, 0);
   97|   375k|    ulocimp_getSubtags(
  ------------------
  |  | 1209|   375k|#define ulocimp_getSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_getSubtags)
  |  |  ------------------
  |  |  |  |  123|   375k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   375k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   375k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|   375k|            localeID,
   99|   375k|            nullptr,
  100|   375k|            nullptr,
  101|   375k|            nullptr,
  102|   375k|            &sink,
  103|   375k|            nullptr,
  104|   375k|            err);
  105|   375k|    return sink.NumberOfBytesAppended() != 0;
  106|   375k|}
uresbund.cpp:_ZL21performFallbackLookupPKcS0_S0_PKii:
  118|   352k|                                         int32_t lookupTableLength) {
  119|   352k|    const int32_t* bottom = lookupTable;
  120|   352k|    const int32_t* top = lookupTable + lookupTableLength;
  121|       |
  122|  3.42M|    while (bottom < top) {
  ------------------
  |  Branch (122:12): [True: 3.09M, False: 334k]
  ------------------
  123|       |        // Effectively, divide by 2 and round down to an even index
  124|  3.09M|        const int32_t* middle = bottom + (((top - bottom) / 4) * 2);
  125|  3.09M|        const char* entryKey = &(keyStrs[*middle]);
  126|  3.09M|        int32_t strcmpResult = uprv_strcmp(key, entryKey);
  ------------------
  |  |   38|  3.09M|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  3.09M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  127|  3.09M|        if (strcmpResult == 0) {
  ------------------
  |  Branch (127:13): [True: 17.9k, False: 3.07M]
  ------------------
  128|  17.9k|            return &(valueStrs[middle[1]]);
  129|  3.07M|        } else if (strcmpResult < 0) {
  ------------------
  |  Branch (129:20): [True: 1.71M, False: 1.36M]
  ------------------
  130|  1.71M|            top = middle;
  131|  1.71M|        } else {
  132|  1.36M|            bottom = middle + 2;
  133|  1.36M|        }
  134|  3.09M|    }
  135|   334k|    return nullptr;
  136|   352k|}
uresbund.cpp:_ZL16getDefaultScriptRKN6icu_7810CharStringES2_:
  138|   104k|static CharString getDefaultScript(const CharString& language, const CharString& region) {
  139|   104k|    const char* defaultScript = nullptr;
  140|   104k|    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|   104k|    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|   104k|    if (!region.isEmpty()) {
  ------------------
  |  Branch (147:9): [True: 51.8k, False: 52.7k]
  ------------------
  148|  51.8k|        CharString localeID;
  149|  51.8k|        localeID.append(language, err).append("_", err).append(region, err);
  150|  51.8k|        if (U_FAILURE(err)) {
  ------------------
  |  Branch (150:13): [True: 0, False: 51.8k]
  ------------------
  151|      0|            return result;
  152|      0|        }
  153|  51.8k|        defaultScript = performFallbackLookup(localeID.data(), dsLocaleIDChars, scriptCodeChars, defaultScriptTable, UPRV_LENGTHOF(defaultScriptTable));
  ------------------
  |  |   99|  51.8k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  154|  51.8k|    }
  155|       |    
  156|       |    // if we didn't find anything, look up just the language in the default script table
  157|   104k|    if (defaultScript == nullptr) {
  ------------------
  |  Branch (157:9): [True: 104k, False: 536]
  ------------------
  158|   104k|        defaultScript = performFallbackLookup(language.data(), dsLocaleIDChars, scriptCodeChars, defaultScriptTable, UPRV_LENGTHOF(defaultScriptTable));
  ------------------
  |  |   99|   104k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  159|   104k|    }
  160|       |    
  161|       |    // if either lookup above succeeded, copy the result from "defaultScript" into "result"; otherwise, return "Latn"
  162|   104k|    if (defaultScript != nullptr) {
  ------------------
  |  Branch (162:9): [True: 16.6k, False: 88.0k]
  ------------------
  163|  16.6k|        result.clear();
  164|  16.6k|        result.append(defaultScript, err);
  165|  16.6k|    }
  166|   104k|    return result;
  167|   104k|}
uresbund.cpp:_ZL10chopLocalePc:
   83|  1.45M|static UBool chopLocale(char *name) {
   84|  1.45M|    char *i = uprv_strrchr(name, '_');
  ------------------
  |  |   42|  1.45M|#define uprv_strrchr(s, c) U_STANDARD_CPP_NAMESPACE strrchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  1.45M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
   85|       |
   86|  1.45M|    if(i != nullptr) {
  ------------------
  |  Branch (86:8): [True: 1.32M, False: 127k]
  ------------------
   87|  1.32M|        *i = '\0';
   88|  1.32M|        return true;
   89|  1.32M|    }
   90|       |
   91|   127k|    return false;
   92|  1.45M|}
uresbund.cpp:_ZL10init_entryPKcS0_P10UErrorCode:
  514|  1.68M|static UResourceDataEntry *init_entry(const char *localeID, const char *path, UErrorCode *status) {
  515|  1.68M|    UResourceDataEntry *r = nullptr;
  516|  1.68M|    UResourceDataEntry find;
  517|       |    /*int32_t hashValue;*/
  518|  1.68M|    const char *name;
  519|  1.68M|    char aliasName[100] = { 0 };
  520|  1.68M|    int32_t aliasLen = 0;
  521|       |    /*UBool isAlias = false;*/
  522|       |    /*UHashTok hashkey; */
  523|       |
  524|  1.68M|    if(U_FAILURE(*status)) {
  ------------------
  |  Branch (524:8): [True: 274, False: 1.68M]
  ------------------
  525|    274|        return nullptr;
  526|    274|    }
  527|       |
  528|       |    /* here we try to deduce the right locale name */
  529|  1.68M|    if(localeID == nullptr) { /* if localeID is nullptr, we're trying to open default locale */
  ------------------
  |  Branch (529:8): [True: 0, False: 1.68M]
  ------------------
  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|  1.68M|    } else if(*localeID == 0) { /* if localeID is "" then we try to open root locale */
  ------------------
  |  Branch (531:15): [True: 44.1k, False: 1.64M]
  ------------------
  532|  44.1k|        name = kRootLocaleName;
  ------------------
  |  |   18|  44.1k|#define kRootLocaleName         "root"
  ------------------
  533|  1.64M|    } else { /* otherwise, we'll open what we're given */
  534|  1.64M|        name = localeID;
  535|  1.64M|    }
  536|       |
  537|  1.68M|    find.fName = const_cast<char*>(name);
  538|  1.68M|    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|  1.68M|    r = static_cast<UResourceDataEntry*>(uhash_get(cache, &find));
  ------------------
  |  | 1007|  1.68M|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|  1.68M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.68M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.68M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  546|  1.68M|    if(r == nullptr) {
  ------------------
  |  Branch (546:8): [True: 53.8k, False: 1.63M]
  ------------------
  547|       |        /* if the entry is not yet in the hash table, we'll try to construct a new one */
  548|  53.8k|        r = static_cast<UResourceDataEntry*>(uprv_malloc(sizeof(UResourceDataEntry)));
  ------------------
  |  | 1524|  53.8k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  53.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  53.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  53.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  549|  53.8k|        if(r == nullptr) {
  ------------------
  |  Branch (549:12): [True: 0, False: 53.8k]
  ------------------
  550|      0|            *status = U_MEMORY_ALLOCATION_ERROR;
  551|      0|            return nullptr;
  552|      0|        }
  553|       |
  554|  53.8k|        uprv_memset(r, 0, sizeof(UResourceDataEntry));
  ------------------
  |  |  100|  53.8k|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|  53.8k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  555|       |        /*r->fHashKey = hashValue;*/
  556|       |
  557|  53.8k|        setEntryName(r, name, status);
  558|  53.8k|        if (U_FAILURE(*status)) {
  ------------------
  |  Branch (558:13): [True: 0, False: 53.8k]
  ------------------
  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|  53.8k|        if(path != nullptr) {
  ------------------
  |  Branch (563:12): [True: 24.9k, False: 28.9k]
  ------------------
  564|  24.9k|            r->fPath = uprv_strdup(path);
  ------------------
  |  | 1541|  24.9k|#define uprv_strdup U_ICU_ENTRY_POINT_RENAME(uprv_strdup)
  |  |  ------------------
  |  |  |  |  123|  24.9k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  24.9k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  24.9k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  565|  24.9k|            if(r->fPath == nullptr) {
  ------------------
  |  Branch (565:16): [True: 0, False: 24.9k]
  ------------------
  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|  24.9k|        }
  571|       |
  572|       |        /* this is the actual loading */
  573|  53.8k|        res_load(&(r->fData), r->fPath, r->fName, status);
  ------------------
  |  |  208|  53.8k|#define res_load U_ICU_ENTRY_POINT_RENAME(res_load)
  |  |  ------------------
  |  |  |  |  123|  53.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  53.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  53.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  574|       |
  575|  53.8k|        if (U_FAILURE(*status)) {
  ------------------
  |  Branch (575:13): [True: 52.3k, False: 1.49k]
  ------------------
  576|       |            /* if we failed to load due to an out-of-memory error, exit early. */
  577|  52.3k|            if (*status == U_MEMORY_ALLOCATION_ERROR) {
  ------------------
  |  Branch (577:17): [True: 0, False: 52.3k]
  ------------------
  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|  52.3k|            *status = U_USING_FALLBACK_WARNING;
  583|  52.3k|            r->fBogus = U_USING_FALLBACK_WARNING;
  584|  52.3k|        } else { /* if we have a regular entry */
  585|  1.49k|            Resource aliasres;
  586|  1.49k|            if (r->fData.usesPoolBundle) {
  ------------------
  |  Branch (586:17): [True: 1.47k, False: 14]
  ------------------
  587|  1.47k|                r->fPool = getPoolEntry(r->fPath, status);
  588|  1.47k|                if (U_SUCCESS(*status)) {
  ------------------
  |  Branch (588:21): [True: 1.47k, False: 0]
  ------------------
  589|  1.47k|                    const int32_t *poolIndexes = r->fPool->fData.pRoot + 1;
  590|  1.47k|                    if(r->fData.pRoot[1 + URES_INDEX_POOL_CHECKSUM] == poolIndexes[URES_INDEX_POOL_CHECKSUM]) {
  ------------------
  |  Branch (590:24): [True: 1.46k, False: 8]
  ------------------
  591|  1.46k|                        r->fData.poolBundleKeys = reinterpret_cast<const char*>(poolIndexes + (poolIndexes[URES_INDEX_LENGTH] & 0xff));
  592|  1.46k|                        r->fData.poolBundleStrings = r->fPool->fData.p16BitUnits;
  593|  1.46k|                    } else {
  594|      8|                        r->fBogus = *status = U_INVALID_FORMAT_ERROR;
  595|      8|                    }
  596|  1.47k|                } else {
  597|      0|                    r->fBogus = *status;
  598|      0|                }
  599|  1.47k|            }
  600|  1.49k|            if (U_SUCCESS(*status)) {
  ------------------
  |  Branch (600:17): [True: 1.48k, False: 8]
  ------------------
  601|       |                /* handle the alias by trying to get out the %%Alias tag.*/
  602|       |                /* We'll try to get alias string from the bundle */
  603|  1.48k|                aliasres = res_getResource(&(r->fData), "%%ALIAS");
  ------------------
  |  |  204|  1.48k|#define res_getResource U_ICU_ENTRY_POINT_RENAME(res_getResource)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  604|  1.48k|                if (aliasres != RES_BOGUS) {
  ------------------
  |  |   65|  1.48k|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (604:21): [True: 49, False: 1.43k]
  ------------------
  605|       |                    // No tracing: called during initial data loading
  606|     49|                    const char16_t *alias = res_getStringNoTrace(&(r->fData), aliasres, &aliasLen);
  ------------------
  |  |  205|     49|#define res_getStringNoTrace U_ICU_ENTRY_POINT_RENAME(res_getStringNoTrace)
  |  |  ------------------
  |  |  |  |  123|     49|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     49|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     49|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  607|     49|                    if(alias != nullptr && aliasLen > 0) { /* if there is actual alias - unload and load new data */
  ------------------
  |  Branch (607:24): [True: 49, False: 0]
  |  Branch (607:44): [True: 49, False: 0]
  ------------------
  608|     49|                        u_UCharsToChars(alias, aliasName, aliasLen+1);
  ------------------
  |  |  211|     49|#define u_UCharsToChars U_ICU_ENTRY_POINT_RENAME(u_UCharsToChars)
  |  |  ------------------
  |  |  |  |  123|     49|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     49|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     49|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  609|     49|                        r->fAlias = init_entry(aliasName, path, status);
  610|     49|                    }
  611|     49|                }
  612|  1.48k|            }
  613|  1.49k|        }
  614|       |
  615|  53.8k|        {
  616|  53.8k|            UResourceDataEntry *oldR = nullptr;
  617|  53.8k|            if ((oldR = static_cast<UResourceDataEntry*>(uhash_get(cache, r))) == nullptr) { /* if the data is not cached */
  ------------------
  |  | 1007|  53.8k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|  53.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  53.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  53.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (617:17): [True: 53.8k, False: 0]
  ------------------
  618|       |                /* just insert it in the cache */
  619|  53.8k|                UErrorCode cacheStatus = U_ZERO_ERROR;
  620|  53.8k|                uhash_put(cache, (void *)r, r, &cacheStatus);
  ------------------
  |  | 1032|  53.8k|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|  53.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  53.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  53.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  621|  53.8k|                if (U_FAILURE(cacheStatus)) {
  ------------------
  |  Branch (621:21): [True: 0, False: 53.8k]
  ------------------
  622|      0|                    *status = cacheStatus;
  623|      0|                    free_entry(r);
  624|      0|                    r = nullptr;
  625|      0|                }
  626|  53.8k|            } 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|  53.8k|        }
  633|       |
  634|  53.8k|    }
  635|  1.68M|    if(r != nullptr) {
  ------------------
  |  Branch (635:8): [True: 1.68M, False: 0]
  ------------------
  636|       |        /* return the real bundle */
  637|  1.69M|        while(r->fAlias != nullptr) {
  ------------------
  |  Branch (637:15): [True: 4.22k, False: 1.68M]
  ------------------
  638|  4.22k|            r = r->fAlias;
  639|  4.22k|        }
  640|  1.68M|        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|  1.68M|        if(r->fBogus != U_ZERO_ERROR && U_SUCCESS(*status)) {
  ------------------
  |  Branch (643:12): [True: 1.33M, False: 355k]
  |  Branch (643:41): [True: 1.33M, False: 8]
  ------------------
  644|  1.33M|             *status = r->fBogus; /* set the returning status */
  645|  1.33M|        }
  646|  1.68M|    }
  647|  1.68M|    return r;
  648|  1.68M|}
uresbund.cpp:_ZL12setEntryNameP18UResourceDataEntryPKcP10UErrorCode:
  489|  53.8k|static void setEntryName(UResourceDataEntry *res, const char *name, UErrorCode *status) {
  490|  53.8k|    int32_t len = static_cast<int32_t>(uprv_strlen(name));
  ------------------
  |  |   37|  53.8k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  53.8k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  491|  53.8k|    if(res->fName != nullptr && res->fName != res->fNameBuffer) {
  ------------------
  |  Branch (491:8): [True: 0, False: 53.8k]
  |  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|  53.8k|    if (len < static_cast<int32_t>(sizeof(res->fNameBuffer))) {
  ------------------
  |  Branch (494:9): [True: 1.45k, False: 52.4k]
  ------------------
  495|  1.45k|        res->fName = res->fNameBuffer;
  496|  1.45k|    }
  497|  52.4k|    else {
  498|  52.4k|        res->fName = static_cast<char*>(uprv_malloc(len + 1));
  ------------------
  |  | 1524|  52.4k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  52.4k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  52.4k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  52.4k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  499|  52.4k|    }
  500|  53.8k|    if(res->fName == nullptr) {
  ------------------
  |  Branch (500:8): [True: 0, False: 53.8k]
  ------------------
  501|      0|        *status = U_MEMORY_ALLOCATION_ERROR;
  502|  53.8k|    } else {
  503|  53.8k|        uprv_strcpy(res->fName, name);
  ------------------
  |  |   36|  53.8k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  53.8k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  504|  53.8k|    }
  505|  53.8k|}
uresbund.cpp:_ZL12getPoolEntryPKcP10UErrorCode:
  651|  1.47k|getPoolEntry(const char *path, UErrorCode *status) {
  652|  1.47k|    UResourceDataEntry *poolBundle = init_entry(kPoolBundleName, path, status);
  ------------------
  |  |   19|  1.47k|#define kPoolBundleName         "pool"
  ------------------
  653|  1.47k|    if( U_SUCCESS(*status) &&
  ------------------
  |  Branch (653:9): [True: 1.47k, False: 0]
  ------------------
  654|  1.47k|        (poolBundle == nullptr || poolBundle->fBogus != U_ZERO_ERROR || !poolBundle->fData.isPoolBundle)
  ------------------
  |  Branch (654:10): [True: 0, False: 1.47k]
  |  Branch (654:35): [True: 0, False: 1.47k]
  |  Branch (654:73): [True: 0, False: 1.47k]
  ------------------
  655|  1.47k|    ) {
  656|      0|        *status = U_INVALID_FORMAT_ERROR;
  657|      0|    }
  658|  1.47k|    return poolBundle;
  659|  1.47k|}
uresbund.cpp:_ZL13mayHaveParentPc:
  297|   125k|static UBool mayHaveParent(char *name) {
  298|   125k|    return (name[0] != 0 && uprv_strstr("nb nn",name) != nullptr);
  ------------------
  |  |   41|   125k|#define uprv_strstr(s, c) U_STANDARD_CPP_NAMESPACE strstr(s, c)
  |  |  ------------------
  |  |  |  |  393|   125k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (298:13): [True: 125k, False: 0]
  |  Branch (298:29): [True: 549, False: 125k]
  ------------------
  299|   125k|}
uresbund.cpp:_ZL21loadParentsExceptRootRP18UResourceDataEntryPciaS2_P10UErrorCode:
  746|   191k|                      UBool usingUSRData, char usrDataPath[], UErrorCode *status) {
  747|   191k|    if (U_FAILURE(*status)) { return false; }
  ------------------
  |  Branch (747:9): [True: 0, False: 191k]
  ------------------
  748|   191k|    UBool checkParent = true;
  749|   192k|    while (checkParent && t1->fParent == nullptr && !t1->fData.noFallback &&
  ------------------
  |  Branch (749:12): [True: 192k, False: 508]
  |  Branch (749:27): [True: 945, False: 191k]
  |  Branch (749:53): [True: 945, False: 0]
  ------------------
  750|   192k|            res_getResource(&t1->fData,"%%ParentIsRoot") == RES_BOGUS) {
  ------------------
  |  |  204|    945|#define res_getResource U_ICU_ENTRY_POINT_RENAME(res_getResource)
  |  |  ------------------
  |  |  |  |  123|    945|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    945|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    945|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          res_getResource(&t1->fData,"%%ParentIsRoot") == RES_BOGUS) {
  ------------------
  |  |   65|    945|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (750:13): [True: 945, False: 0]
  ------------------
  751|    945|        Resource parentRes = res_getResource(&t1->fData, "%%Parent");
  ------------------
  |  |  204|    945|#define res_getResource U_ICU_ENTRY_POINT_RENAME(res_getResource)
  |  |  ------------------
  |  |  |  |  123|    945|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    945|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    945|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  752|    945|        if (parentRes != RES_BOGUS) {  // An explicit parent was found.
  ------------------
  |  |   65|    945|#define RES_BOGUS 0xffffffff
  ------------------
  |  Branch (752:13): [True: 312, False: 633]
  ------------------
  753|    312|            int32_t parentLocaleLen = 0;
  754|       |            // No tracing: called during initial data loading
  755|    312|            const char16_t *parentLocaleName = res_getStringNoTrace(&(t1->fData), parentRes, &parentLocaleLen);
  ------------------
  |  |  205|    312|#define res_getStringNoTrace U_ICU_ENTRY_POINT_RENAME(res_getStringNoTrace)
  |  |  ------------------
  |  |  |  |  123|    312|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    312|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    312|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  756|    312|            if(parentLocaleName != nullptr && 0 < parentLocaleLen && parentLocaleLen < nameCapacity) {
  ------------------
  |  Branch (756:16): [True: 312, False: 0]
  |  Branch (756:47): [True: 312, False: 0]
  |  Branch (756:70): [True: 312, False: 0]
  ------------------
  757|    312|                u_UCharsToChars(parentLocaleName, name, parentLocaleLen + 1);
  ------------------
  |  |  211|    312|#define u_UCharsToChars U_ICU_ENTRY_POINT_RENAME(u_UCharsToChars)
  |  |  ------------------
  |  |  |  |  123|    312|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    312|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    312|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  758|    312|                if (uprv_strcmp(name, kRootLocaleName) == 0) {
  ------------------
  |  |   38|    312|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    312|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (758:21): [True: 34, False: 278]
  ------------------
  759|     34|                    return true;
  760|     34|                }
  761|    312|            }
  762|    312|        }
  763|       |        // Insert regular parents.
  764|    911|        UErrorCode parentStatus = U_ZERO_ERROR;
  765|    911|        UResourceDataEntry *t2 = init_entry(name, t1->fPath, &parentStatus);
  766|    911|        if (U_FAILURE(parentStatus)) {
  ------------------
  |  Branch (766:13): [True: 0, False: 911]
  ------------------
  767|      0|            *status = parentStatus;
  768|      0|            return false;
  769|      0|        }
  770|    911|        UResourceDataEntry *u2 = nullptr;
  771|    911|        UErrorCode usrStatus = U_ZERO_ERROR;
  772|    911|        if (usingUSRData) {  // This code inserts user override data into the inheritance chain.
  ------------------
  |  Branch (772:13): [True: 0, False: 911]
  ------------------
  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|    911|        if (usingUSRData && U_SUCCESS(usrStatus) && u2->fBogus == U_ZERO_ERROR) {
  ------------------
  |  Branch (781:13): [True: 0, False: 911]
  |  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|    911|        } else {
  785|    911|            t1->fParent = t2;
  786|    911|            if (usingUSRData) {
  ------------------
  |  Branch (786:17): [True: 0, False: 911]
  ------------------
  787|       |                // The USR override data wasn't found, set it to be deleted.
  788|      0|                u2->fCountExisting = 0;
  789|      0|            }
  790|    911|        }
  791|    911|        t1 = t2;
  792|    911|        checkParent = chopLocale(name) || mayHaveParent(name);
  ------------------
  |  Branch (792:23): [True: 399, False: 512]
  |  Branch (792:43): [True: 4, False: 508]
  ------------------
  793|    911|    }
  794|   191k|    return true;
  795|   191k|}
uresbund.cpp:_ZL16insertRootBundleRP18UResourceDataEntryP10UErrorCode:
  798|    506|insertRootBundle(UResourceDataEntry *&t1, UErrorCode *status) {
  799|    506|    if (U_FAILURE(*status)) { return false; }
  ------------------
  |  Branch (799:9): [True: 0, False: 506]
  ------------------
  800|    506|    UErrorCode parentStatus = U_ZERO_ERROR;
  801|    506|    UResourceDataEntry *t2 = init_entry(kRootLocaleName, t1->fPath, &parentStatus);
  ------------------
  |  |   18|    506|#define kRootLocaleName         "root"
  ------------------
  802|    506|    if (U_FAILURE(parentStatus)) {
  ------------------
  |  Branch (802:9): [True: 0, False: 506]
  ------------------
  803|      0|        *status = parentStatus;
  804|      0|        return false;
  805|      0|    }
  806|    506|    t1->fParent = t2;
  807|    506|    t1 = t2;
  808|    506|    return true;
  809|    506|}
uresbund.cpp:_ZL15entryOpenDirectPKcS0_P10UErrorCode:
  966|  34.2k|entryOpenDirect(const char* path, const char* localeID, UErrorCode* status) {
  967|  34.2k|    initCache(status);
  968|  34.2k|    if(U_FAILURE(*status)) {
  ------------------
  |  Branch (968:8): [True: 0, False: 34.2k]
  ------------------
  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|  34.2k|    if (localeID == nullptr) {
  ------------------
  |  Branch (974:9): [True: 0, False: 34.2k]
  ------------------
  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|  34.2k|    } else if (*localeID == 0) {
  ------------------
  |  Branch (976:16): [True: 0, False: 34.2k]
  ------------------
  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|  34.2k|    Mutex lock(&resbMutex);
  982|       |
  983|       |    // findFirstExisting() without fallbacks.
  984|  34.2k|    UResourceDataEntry *r = init_entry(localeID, path, status);
  985|  34.2k|    if(U_SUCCESS(*status)) {
  ------------------
  |  Branch (985:8): [True: 34.2k, False: 0]
  ------------------
  986|  34.2k|        if(r->fBogus != U_ZERO_ERROR) {
  ------------------
  |  Branch (986:12): [True: 0, False: 34.2k]
  ------------------
  987|      0|            r->fCountExisting--;
  988|      0|            r = nullptr;
  989|      0|        }
  990|  34.2k|    } 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|  34.2k|    UResourceDataEntry *t1 = r;
  997|  34.2k|    if(r != nullptr && uprv_strcmp(localeID, kRootLocaleName) != 0 &&  // not root
  ------------------
  |  |   38|  34.2k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  34.2k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (997:8): [True: 34.2k, False: 0]
  |  Branch (997:24): [True: 34.2k, False: 0]
  ------------------
  998|  34.2k|            r->fParent == nullptr && !r->fData.noFallback &&
  ------------------
  |  Branch (998:13): [True: 34.2k, False: 0]
  |  Branch (998:38): [True: 0, False: 34.2k]
  ------------------
  999|  34.2k|            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|  34.2k|    if(r != nullptr) {
  ------------------
  |  Branch (1013:8): [True: 34.2k, False: 0]
  ------------------
 1014|       |        // TODO: Does this ever loop?
 1015|  34.2k|        while(t1->fParent != nullptr) {
  ------------------
  |  Branch (1015:15): [True: 0, False: 34.2k]
  ------------------
 1016|      0|            t1->fParent->fCountExisting++;
 1017|      0|            t1 = t1->fParent;
 1018|      0|        }
 1019|  34.2k|    }
 1020|  34.2k|    return r;
 1021|  34.2k|}
uresbund.cpp:_ZL32getParentForFunctionalEquivalentPKcP15UResourceBundleS2_RN6icu_7810CharStringE:
 3042|   184k|                                             CharString&      parent) {
 3043|       |    // Get parent.
 3044|       |    // First check for a parent from %%Parent resource (Note that in resource trees
 3045|       |    // such as collation, data may have different parents than in parentLocales).
 3046|   184k|    UErrorCode subStatus = U_ZERO_ERROR;
 3047|   184k|    parent.clear();
 3048|   184k|    if (res != nullptr) {
  ------------------
  |  Branch (3048:9): [True: 184k, False: 11]
  ------------------
 3049|   184k|        ures_getByKey(res, "%%Parent", bund1, &subStatus);
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3050|   184k|        if (U_SUCCESS(subStatus)) {
  ------------------
  |  Branch (3050:13): [True: 8.63k, False: 175k]
  ------------------
 3051|  8.63k|            int32_t length16;
 3052|  8.63k|            const char16_t* s16 = ures_getString(bund1, &length16, &subStatus);
  ------------------
  |  | 1675|  8.63k|#define ures_getString U_ICU_ENTRY_POINT_RENAME(ures_getString)
  |  |  ------------------
  |  |  |  |  123|  8.63k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  8.63k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  8.63k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3053|  8.63k|            parent.appendInvariantChars(s16, length16, subStatus);
 3054|  8.63k|        }
 3055|   184k|    }
 3056|       |    
 3057|       |    // If none there, use normal truncation parent
 3058|   184k|    if (U_FAILURE(subStatus) || parent.isEmpty()) {
  ------------------
  |  Branch (3058:9): [True: 175k, False: 8.64k]
  |  Branch (3058:33): [True: 11, False: 8.63k]
  ------------------
 3059|   175k|        subStatus = U_ZERO_ERROR;
 3060|   175k|        parent = ulocimp_getParent(localeID, subStatus);
  ------------------
  |  | 1205|   175k|#define ulocimp_getParent U_ICU_ENTRY_POINT_RENAME(ulocimp_getParent)
  |  |  ------------------
  |  |  |  |  123|   175k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   175k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   175k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3061|   175k|    }
 3062|   184k|}

res_load_78:
  260|  53.8k|         const char *path, const char *name, UErrorCode *errorCode) {
  261|  53.8k|    UVersionInfo formatVersion;
  262|       |
  263|  53.8k|    uprv_memset(pResData, 0, sizeof(ResourceData));
  ------------------
  |  |  100|  53.8k|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|  53.8k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  264|       |
  265|       |    /* load the ResourceBundle file */
  266|  53.8k|    pResData->data=udata_openChoice(path, "res", name, isAcceptable, formatVersion, errorCode);
  ------------------
  |  |  894|  53.8k|#define udata_openChoice U_ICU_ENTRY_POINT_RENAME(udata_openChoice)
  |  |  ------------------
  |  |  |  |  123|  53.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  53.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  53.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  267|  53.8k|    if(U_FAILURE(*errorCode)) {
  ------------------
  |  Branch (267:8): [True: 52.3k, False: 1.49k]
  ------------------
  268|  52.3k|        return;
  269|  52.3k|    }
  270|       |
  271|       |    /* get its memory and initialize *pResData */
  272|  1.49k|    res_init(pResData, formatVersion, udata_getMemory(pResData->data), -1, errorCode);
  ------------------
  |  |  891|  1.49k|#define udata_getMemory U_ICU_ENTRY_POINT_RENAME(udata_getMemory)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  273|  1.49k|}
res_getPublicType_78:
  306|  4.54M|res_getPublicType(Resource res) {
  307|  4.54M|    return (UResType)gPublicTypes[RES_GET_TYPE(res)];
  ------------------
  |  |   68|  4.54M|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  308|  4.54M|}
res_getStringNoTrace_78:
  311|  2.95M|res_getStringNoTrace(const ResourceData *pResData, Resource res, int32_t *pLength) {
  312|  2.95M|    const char16_t *p;
  313|  2.95M|    uint32_t offset=RES_GET_OFFSET(res);
  ------------------
  |  |   69|  2.95M|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  314|  2.95M|    int32_t length;
  315|  2.95M|    if(RES_GET_TYPE(res)==URES_STRING_V2) {
  ------------------
  |  |   68|  2.95M|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  |  Branch (315:8): [True: 2.92M, False: 26.3k]
  ------------------
  316|  2.92M|        int32_t first;
  317|  2.92M|        if((int32_t)offset<pResData->poolStringIndexLimit) {
  ------------------
  |  Branch (317:12): [True: 1.44M, False: 1.47M]
  ------------------
  318|  1.44M|            p=(const char16_t *)pResData->poolBundleStrings+offset;
  319|  1.47M|        } else {
  320|  1.47M|            p=(const char16_t *)pResData->p16BitUnits+(offset-pResData->poolStringIndexLimit);
  321|  1.47M|        }
  322|  2.92M|        first=*p;
  323|  2.92M|        if(!U16_IS_TRAIL(first)) {
  ------------------
  |  |   67|  2.92M|#define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
  ------------------
  |  Branch (323:12): [True: 2.92M, False: 496]
  ------------------
  324|  2.92M|            length=u_strlen(p);
  ------------------
  |  |  393|  2.92M|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  123|  2.92M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.92M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.92M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  325|  2.92M|        } else if(first<0xdfef) {
  ------------------
  |  Branch (325:19): [True: 496, False: 0]
  ------------------
  326|    496|            length=first&0x3ff;
  327|    496|            ++p;
  328|    496|        } 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.92M|    } else if(res==offset) /* RES_GET_TYPE(res)==URES_STRING */ {
  ------------------
  |  Branch (335:15): [True: 0, False: 26.3k]
  ------------------
  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|  26.3k|    } else {
  340|  26.3k|        p=nullptr;
  341|  26.3k|        length=0;
  342|  26.3k|    }
  343|  2.95M|    if(pLength) {
  ------------------
  |  Branch (343:8): [True: 2.95M, False: 1.60k]
  ------------------
  344|  2.95M|        *pLength=length;
  345|  2.95M|    }
  346|  2.95M|    return p;
  347|  2.95M|}
res_getAlias_78:
  420|   951k|res_getAlias(const ResourceData *pResData, Resource res, int32_t *pLength) {
  421|   951k|    const char16_t *p;
  422|   951k|    uint32_t offset=RES_GET_OFFSET(res);
  ------------------
  |  |   69|   951k|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  423|   951k|    int32_t length;
  424|   951k|    if(RES_GET_TYPE(res)==URES_ALIAS) {
  ------------------
  |  |   68|   951k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  |  Branch (424:8): [True: 951k, False: 0]
  ------------------
  425|   951k|        const int32_t *p32= offset==0 ? &gEmptyString.length : pResData->pRoot+offset;
  ------------------
  |  Branch (425:29): [True: 0, False: 951k]
  ------------------
  426|   951k|        length=*p32++;
  427|   951k|        p=(const char16_t *)p32;
  428|   951k|    } else {
  429|      0|        p=nullptr;
  430|      0|        length=0;
  431|      0|    }
  432|   951k|    if(pLength) {
  ------------------
  |  Branch (432:8): [True: 951k, False: 0]
  ------------------
  433|   951k|        *pLength=length;
  434|   951k|    }
  435|   951k|    return p;
  436|   951k|}
res_getBinaryNoTrace_78:
  439|     31|res_getBinaryNoTrace(const ResourceData *pResData, Resource res, int32_t *pLength) {
  440|     31|    const uint8_t *p;
  441|     31|    uint32_t offset=RES_GET_OFFSET(res);
  ------------------
  |  |   69|     31|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  442|     31|    int32_t length;
  443|     31|    if(RES_GET_TYPE(res)==URES_BINARY) {
  ------------------
  |  |   68|     31|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  |  Branch (443:8): [True: 31, False: 0]
  ------------------
  444|     31|        const int32_t *p32= offset==0 ? (const int32_t*)&gEmpty32 : pResData->pRoot+offset;
  ------------------
  |  Branch (444:29): [True: 0, False: 31]
  ------------------
  445|     31|        length=*p32++;
  446|     31|        p=(const uint8_t *)p32;
  447|     31|    } else {
  448|      0|        p=nullptr;
  449|      0|        length=0;
  450|      0|    }
  451|     31|    if(pLength) {
  ------------------
  |  Branch (451:8): [True: 31, False: 0]
  ------------------
  452|     31|        *pLength=length;
  453|     31|    }
  454|     31|    return p;
  455|     31|}
res_getIntVectorNoTrace_78:
  459|  7.13k|res_getIntVectorNoTrace(const ResourceData *pResData, Resource res, int32_t *pLength) {
  460|  7.13k|    const int32_t *p;
  461|  7.13k|    uint32_t offset=RES_GET_OFFSET(res);
  ------------------
  |  |   69|  7.13k|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  462|  7.13k|    int32_t length;
  463|  7.13k|    if(RES_GET_TYPE(res)==URES_INT_VECTOR) {
  ------------------
  |  |   68|  7.13k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  |  Branch (463:8): [True: 7.13k, False: 0]
  ------------------
  464|  7.13k|        p= offset==0 ? (const int32_t *)&gEmpty32 : pResData->pRoot+offset;
  ------------------
  |  Branch (464:12): [True: 0, False: 7.13k]
  ------------------
  465|  7.13k|        length=*p++;
  466|  7.13k|    } else {
  467|      0|        p=nullptr;
  468|      0|        length=0;
  469|      0|    }
  470|  7.13k|    if(pLength) {
  ------------------
  |  Branch (470:8): [True: 7.13k, False: 0]
  ------------------
  471|  7.13k|        *pLength=length;
  472|  7.13k|    }
  473|  7.13k|    return p;
  474|  7.13k|}
res_countArrayItems_78:
  477|  1.96M|res_countArrayItems(const ResourceData *pResData, Resource res) {
  478|  1.96M|    uint32_t offset=RES_GET_OFFSET(res);
  ------------------
  |  |   69|  1.96M|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  479|  1.96M|    switch(RES_GET_TYPE(res)) {
  ------------------
  |  |   68|  1.96M|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  480|      0|    case URES_STRING:
  ------------------
  |  Branch (480:5): [True: 0, False: 1.96M]
  ------------------
  481|   209k|    case URES_STRING_V2:
  ------------------
  |  Branch (481:5): [True: 209k, False: 1.75M]
  ------------------
  482|   209k|    case URES_BINARY:
  ------------------
  |  Branch (482:5): [True: 28, False: 1.96M]
  ------------------
  483|   209k|    case URES_ALIAS:
  ------------------
  |  Branch (483:5): [True: 0, False: 1.96M]
  ------------------
  484|   236k|    case URES_INT:
  ------------------
  |  Branch (484:5): [True: 26.6k, False: 1.93M]
  ------------------
  485|   243k|    case URES_INT_VECTOR:
  ------------------
  |  Branch (485:5): [True: 7.13k, False: 1.95M]
  ------------------
  486|   243k|        return 1;
  487|  9.06k|    case URES_ARRAY:
  ------------------
  |  Branch (487:5): [True: 9.06k, False: 1.95M]
  ------------------
  488|  9.06k|    case URES_TABLE32:
  ------------------
  |  Branch (488:5): [True: 0, False: 1.96M]
  ------------------
  489|  9.06k|        return offset==0 ? 0 : *(pResData->pRoot+offset);
  ------------------
  |  Branch (489:16): [True: 0, False: 9.06k]
  ------------------
  490|  1.32M|    case URES_TABLE:
  ------------------
  |  Branch (490:5): [True: 1.32M, False: 639k]
  ------------------
  491|  1.32M|        return offset==0 ? 0 : *((const uint16_t *)(pResData->pRoot+offset));
  ------------------
  |  Branch (491:16): [True: 54.5k, False: 1.26M]
  ------------------
  492|  41.9k|    case URES_ARRAY16:
  ------------------
  |  Branch (492:5): [True: 41.9k, False: 1.91M]
  ------------------
  493|   386k|    case URES_TABLE16:
  ------------------
  |  Branch (493:5): [True: 344k, False: 1.61M]
  ------------------
  494|   386k|        return pResData->p16BitUnits[offset];
  495|      0|    default:
  ------------------
  |  Branch (495:5): [True: 0, False: 1.96M]
  ------------------
  496|      0|        return 0;
  497|  1.96M|    }
  498|  1.96M|}
_ZN6icu_7817ResourceDataValueD2Ev:
  502|   663k|ResourceDataValue::~ResourceDataValue() {}
_ZNK6icu_7817ResourceDataValue7getTypeEv:
  504|  4.42M|UResType ResourceDataValue::getType() const {
  505|  4.42M|    return res_getPublicType(res);
  ------------------
  |  |  203|  4.42M|#define res_getPublicType U_ICU_ENTRY_POINT_RENAME(res_getPublicType)
  |  |  ------------------
  |  |  |  |  123|  4.42M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  4.42M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  4.42M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  506|  4.42M|}
_ZNK6icu_7817ResourceDataValue9getStringERiR10UErrorCode:
  508|  2.62M|const char16_t *ResourceDataValue::getString(int32_t &length, UErrorCode &errorCode) const {
  509|  2.62M|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (509:8): [True: 0, False: 2.62M]
  ------------------
  510|      0|        return nullptr;
  511|      0|    }
  512|  2.62M|    const char16_t *s = res_getString(fTraceInfo, &getData(), res, &length);
  513|  2.62M|    if(s == nullptr) {
  ------------------
  |  Branch (513:8): [True: 26.3k, False: 2.59M]
  ------------------
  514|  26.3k|        errorCode = U_RESOURCE_TYPE_MISMATCH;
  515|  26.3k|    }
  516|  2.62M|    return s;
  517|  2.62M|}
_ZNK6icu_7817ResourceDataValue12getIntVectorERiR10UErrorCode:
  550|      3|const int32_t *ResourceDataValue::getIntVector(int32_t &length, UErrorCode &errorCode) const {
  551|      3|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (551:8): [True: 0, False: 3]
  ------------------
  552|      0|        return nullptr;
  553|      0|    }
  554|      3|    const int32_t *iv = res_getIntVector(fTraceInfo, &getData(), res, &length);
  555|      3|    if(iv == nullptr) {
  ------------------
  |  Branch (555:8): [True: 0, False: 3]
  ------------------
  556|      0|        errorCode = U_RESOURCE_TYPE_MISMATCH;
  557|      0|    }
  558|      3|    return iv;
  559|      3|}
_ZNK6icu_7817ResourceDataValue9getBinaryERiR10UErrorCode:
  561|      3|const uint8_t *ResourceDataValue::getBinary(int32_t &length, UErrorCode &errorCode) const {
  562|      3|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (562:8): [True: 0, False: 3]
  ------------------
  563|      0|        return nullptr;
  564|      0|    }
  565|      3|    const uint8_t *b = res_getBinary(fTraceInfo, &getData(), res, &length);
  566|      3|    if(b == nullptr) {
  ------------------
  |  Branch (566:8): [True: 0, False: 3]
  ------------------
  567|      0|        errorCode = U_RESOURCE_TYPE_MISMATCH;
  568|      0|    }
  569|      3|    return b;
  570|      3|}
_ZNK6icu_7817ResourceDataValue8getArrayER10UErrorCode:
  572|    266|ResourceArray ResourceDataValue::getArray(UErrorCode &errorCode) const {
  573|    266|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (573:8): [True: 0, False: 266]
  ------------------
  574|      0|        return {};
  575|      0|    }
  576|    266|    const uint16_t *items16 = nullptr;
  577|    266|    const Resource *items32 = nullptr;
  578|    266|    uint32_t offset=RES_GET_OFFSET(res);
  ------------------
  |  |   69|    266|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  579|    266|    int32_t length = 0;
  580|    266|    switch(RES_GET_TYPE(res)) {
  ------------------
  |  |   68|    266|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  581|      0|    case URES_ARRAY:
  ------------------
  |  Branch (581:5): [True: 0, False: 266]
  ------------------
  582|      0|        if (offset!=0) {  // empty if offset==0
  ------------------
  |  Branch (582:13): [True: 0, False: 0]
  ------------------
  583|      0|            items32 = reinterpret_cast<const Resource*>(getData().pRoot) + offset;
  584|      0|            length = *items32++;
  585|      0|        }
  586|      0|        break;
  587|    266|    case URES_ARRAY16:
  ------------------
  |  Branch (587:5): [True: 266, False: 0]
  ------------------
  588|    266|        items16 = getData().p16BitUnits+offset;
  589|    266|        length = *items16++;
  590|    266|        break;
  591|      0|    default:
  ------------------
  |  Branch (591:5): [True: 0, False: 266]
  ------------------
  592|      0|        errorCode = U_RESOURCE_TYPE_MISMATCH;
  593|      0|        return {};
  594|    266|    }
  595|    266|    return ResourceArray(items16, items32, length, fTraceInfo);
  596|    266|}
_ZNK6icu_7817ResourceDataValue8getTableER10UErrorCode:
  598|  1.72M|ResourceTable ResourceDataValue::getTable(UErrorCode &errorCode) const {
  599|  1.72M|    if(U_FAILURE(errorCode)) {
  ------------------
  |  Branch (599:8): [True: 0, False: 1.72M]
  ------------------
  600|      0|        return {};
  601|      0|    }
  602|  1.72M|    const uint16_t *keys16 = nullptr;
  603|  1.72M|    const int32_t *keys32 = nullptr;
  604|  1.72M|    const uint16_t *items16 = nullptr;
  605|  1.72M|    const Resource *items32 = nullptr;
  606|  1.72M|    uint32_t offset = RES_GET_OFFSET(res);
  ------------------
  |  |   69|  1.72M|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  607|  1.72M|    int32_t length = 0;
  608|  1.72M|    switch(RES_GET_TYPE(res)) {
  ------------------
  |  |   68|  1.72M|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  609|   943k|    case URES_TABLE:
  ------------------
  |  Branch (609:5): [True: 943k, False: 777k]
  ------------------
  610|   943k|        if (offset != 0) {  // empty if offset==0
  ------------------
  |  Branch (610:13): [True: 943k, False: 0]
  ------------------
  611|   943k|            keys16 = reinterpret_cast<const uint16_t*>(getData().pRoot + offset);
  612|   943k|            length = *keys16++;
  613|   943k|            items32 = reinterpret_cast<const Resource*>(keys16 + length + (~length & 1));
  614|   943k|        }
  615|   943k|        break;
  616|   777k|    case URES_TABLE16:
  ------------------
  |  Branch (616:5): [True: 777k, False: 943k]
  ------------------
  617|   777k|        keys16 = getData().p16BitUnits+offset;
  618|   777k|        length = *keys16++;
  619|   777k|        items16 = keys16 + length;
  620|   777k|        break;
  621|      0|    case URES_TABLE32:
  ------------------
  |  Branch (621:5): [True: 0, False: 1.72M]
  ------------------
  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: 1.72M]
  ------------------
  629|      0|        errorCode = U_RESOURCE_TYPE_MISMATCH;
  630|      0|        return {};
  631|  1.72M|    }
  632|  1.72M|    return ResourceTable(keys16, keys32, items16, items32, length, fTraceInfo);
  633|  1.72M|}
res_getTableItemByKey_78:
  713|  6.75M|                      int32_t *indexR, const char **key) {
  714|  6.75M|    uint32_t offset=RES_GET_OFFSET(table);
  ------------------
  |  |   69|  6.75M|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  715|  6.75M|    int32_t length;
  716|  6.75M|    int32_t idx;
  717|  6.75M|    if(key == nullptr || *key == nullptr) {
  ------------------
  |  Branch (717:8): [True: 0, False: 6.75M]
  |  Branch (717:26): [True: 0, False: 6.75M]
  ------------------
  718|      0|        return RES_BOGUS;
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  719|      0|    }
  720|  6.75M|    switch(RES_GET_TYPE(table)) {
  ------------------
  |  |   68|  6.75M|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  721|  6.70M|    case URES_TABLE: {
  ------------------
  |  Branch (721:5): [True: 6.70M, False: 47.7k]
  ------------------
  722|  6.70M|        if (offset!=0) { /* empty if offset==0 */
  ------------------
  |  Branch (722:13): [True: 5.87M, False: 834k]
  ------------------
  723|  5.87M|            const uint16_t *p= (const uint16_t *)(pResData->pRoot+offset);
  724|  5.87M|            length=*p++;
  725|  5.87M|            *indexR=idx=_res_findTableItem(pResData, p, length, *key, key);
  726|  5.87M|            if(idx>=0) {
  ------------------
  |  Branch (726:16): [True: 4.46M, False: 1.40M]
  ------------------
  727|  4.46M|                const Resource *p32=(const Resource *)(p+length+(~length&1));
  728|  4.46M|                return p32[idx];
  729|  4.46M|            }
  730|  5.87M|        }
  731|  2.24M|        break;
  732|  6.70M|    }
  733|  2.24M|    case URES_TABLE16: {
  ------------------
  |  Branch (733:5): [True: 47.7k, False: 6.70M]
  ------------------
  734|  47.7k|        const uint16_t *p=pResData->p16BitUnits+offset;
  735|  47.7k|        length=*p++;
  736|  47.7k|        *indexR=idx=_res_findTableItem(pResData, p, length, *key, key);
  737|  47.7k|        if(idx>=0) {
  ------------------
  |  Branch (737:12): [True: 4.13k, False: 43.6k]
  ------------------
  738|  4.13k|            return makeResourceFrom16(pResData, p[length+idx]);
  739|  4.13k|        }
  740|  43.6k|        break;
  741|  47.7k|    }
  742|  43.6k|    case URES_TABLE32: {
  ------------------
  |  Branch (742:5): [True: 0, False: 6.75M]
  ------------------
  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: 6.75M]
  ------------------
  754|      0|        break;
  755|  6.75M|    }
  756|  2.28M|    return RES_BOGUS;
  ------------------
  |  |   65|  2.28M|#define RES_BOGUS 0xffffffff
  ------------------
  757|  6.75M|}
res_getTableItemByIndex_78:
  761|  81.7k|                        int32_t indexR, const char **key) {
  762|  81.7k|    uint32_t offset=RES_GET_OFFSET(table);
  ------------------
  |  |   69|  81.7k|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  763|  81.7k|    int32_t length;
  764|  81.7k|    if (indexR < 0) {
  ------------------
  |  Branch (764:9): [True: 0, False: 81.7k]
  ------------------
  765|      0|        return RES_BOGUS;
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  766|      0|    }
  767|  81.7k|    switch(RES_GET_TYPE(table)) {
  ------------------
  |  |   68|  81.7k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  768|  1.97k|    case URES_TABLE: {
  ------------------
  |  Branch (768:5): [True: 1.97k, False: 79.7k]
  ------------------
  769|  1.97k|        if (offset != 0) { /* empty if offset==0 */
  ------------------
  |  Branch (769:13): [True: 1.97k, False: 0]
  ------------------
  770|  1.97k|            const uint16_t *p= (const uint16_t *)(pResData->pRoot+offset);
  771|  1.97k|            length=*p++;
  772|  1.97k|            if(indexR<length) {
  ------------------
  |  Branch (772:16): [True: 1.97k, False: 0]
  ------------------
  773|  1.97k|                const Resource *p32=(const Resource *)(p+length+(~length&1));
  774|  1.97k|                if(key!=nullptr) {
  ------------------
  |  Branch (774:20): [True: 1.97k, False: 0]
  ------------------
  775|  1.97k|                    *key=RES_GET_KEY16(pResData, p[indexR]);
  ------------------
  |  |   44|  1.97k|    ((keyOffset)<(pResData)->localKeyLimit ? \
  |  |  ------------------
  |  |  |  Branch (44:6): [True: 1.97k, False: 0]
  |  |  ------------------
  |  |   45|  1.97k|        (const char *)(pResData)->pRoot+(keyOffset) : \
  |  |   46|  1.97k|        (pResData)->poolBundleKeys+(keyOffset)-(pResData)->localKeyLimit)
  ------------------
  776|  1.97k|                }
  777|  1.97k|                return p32[indexR];
  778|  1.97k|            }
  779|  1.97k|        }
  780|      0|        break;
  781|  1.97k|    }
  782|  79.7k|    case URES_TABLE16: {
  ------------------
  |  Branch (782:5): [True: 79.7k, False: 1.97k]
  ------------------
  783|  79.7k|        const uint16_t *p=pResData->p16BitUnits+offset;
  784|  79.7k|        length=*p++;
  785|  79.7k|        if(indexR<length) {
  ------------------
  |  Branch (785:12): [True: 79.7k, False: 0]
  ------------------
  786|  79.7k|            if(key!=nullptr) {
  ------------------
  |  Branch (786:16): [True: 79.7k, False: 0]
  ------------------
  787|  79.7k|                *key=RES_GET_KEY16(pResData, p[indexR]);
  ------------------
  |  |   44|  79.7k|    ((keyOffset)<(pResData)->localKeyLimit ? \
  |  |  ------------------
  |  |  |  Branch (44:6): [True: 79.7k, False: 0]
  |  |  ------------------
  |  |   45|  79.7k|        (const char *)(pResData)->pRoot+(keyOffset) : \
  |  |   46|  79.7k|        (pResData)->poolBundleKeys+(keyOffset)-(pResData)->localKeyLimit)
  ------------------
  788|  79.7k|            }
  789|  79.7k|            return makeResourceFrom16(pResData, p[length+indexR]);
  790|  79.7k|        }
  791|      0|        break;
  792|  79.7k|    }
  793|      0|    case URES_TABLE32: {
  ------------------
  |  Branch (793:5): [True: 0, False: 81.7k]
  ------------------
  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: 81.7k]
  ------------------
  807|      0|        break;
  808|  81.7k|    }
  809|      0|    return RES_BOGUS;
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  810|  81.7k|}
res_getResource_78:
  813|  3.37k|res_getResource(const ResourceData *pResData, const char *key) {
  814|  3.37k|    const char *realKey=key;
  815|  3.37k|    int32_t idx;
  816|  3.37k|    return res_getTableItemByKey(pResData, pResData->rootRes, &idx, &realKey);
  ------------------
  |  |  207|  3.37k|#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey)
  |  |  ------------------
  |  |  |  |  123|  3.37k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  3.37k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  3.37k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  817|  3.37k|}
_ZNK6icu_7813ResourceTable14getKeyAndValueEiRPKcRNS_13ResourceValueE:
  821|  3.34M|                                         const char *&key, icu::ResourceValue &value) const {
  822|  3.34M|    if(0 <= i && i < length) {
  ------------------
  |  Branch (822:8): [True: 3.34M, False: 0]
  |  Branch (822:18): [True: 3.20M, False: 145k]
  ------------------
  823|  3.20M|        icu::ResourceDataValue &rdValue = static_cast<icu::ResourceDataValue &>(value);
  824|  3.20M|        if (keys16 != nullptr) {
  ------------------
  |  Branch (824:13): [True: 3.20M, False: 0]
  ------------------
  825|  3.20M|            key = RES_GET_KEY16(&rdValue.getData(), keys16[i]);
  ------------------
  |  |   44|  3.20M|    ((keyOffset)<(pResData)->localKeyLimit ? \
  |  |  ------------------
  |  |  |  Branch (44:6): [True: 1.76k, False: 3.20M]
  |  |  ------------------
  |  |   45|  3.20M|        (const char *)(pResData)->pRoot+(keyOffset) : \
  |  |   46|  3.20M|        (pResData)->poolBundleKeys+(keyOffset)-(pResData)->localKeyLimit)
  ------------------
  826|  3.20M|        } 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|  3.20M|        Resource res;
  830|  3.20M|        if (items16 != nullptr) {
  ------------------
  |  Branch (830:13): [True: 606k, False: 2.59M]
  ------------------
  831|   606k|            res = makeResourceFrom16(&rdValue.getData(), items16[i]);
  832|  2.59M|        } else {
  833|  2.59M|            res = items32[i];
  834|  2.59M|        }
  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|  3.20M|        rdValue.setResource(res, ResourceTracer(fTraceInfo, key));
  840|  3.20M|        return true;
  841|  3.20M|    }
  842|   145k|    return false;
  843|  3.34M|}
_ZNK6icu_7813ResourceTable9findValueEPKcRNS_13ResourceValueE:
  845|  1.57M|UBool icu::ResourceTable::findValue(const char *key, ResourceValue &value) const {
  846|  1.57M|    icu::ResourceDataValue &rdValue = static_cast<icu::ResourceDataValue &>(value);
  847|  1.57M|    const char *realKey = nullptr;
  848|  1.57M|    int32_t i;
  849|  1.57M|    if (keys16 != nullptr) {
  ------------------
  |  Branch (849:9): [True: 1.57M, False: 0]
  ------------------
  850|  1.57M|        i = _res_findTableItem(&rdValue.getData(), keys16, length, key, &realKey);
  851|  1.57M|    } else {
  852|      0|        i = _res_findTable32Item(&rdValue.getData(), keys32, length, key, &realKey);
  853|      0|    }
  854|  1.57M|    if (i >= 0) {
  ------------------
  |  Branch (854:9): [True: 1.53M, False: 36.3k]
  ------------------
  855|  1.53M|        Resource res;
  856|  1.53M|        if (items16 != nullptr) {
  ------------------
  |  Branch (856:13): [True: 696k, False: 842k]
  ------------------
  857|   696k|            res = makeResourceFrom16(&rdValue.getData(), items16[i]);
  858|   842k|        } else {
  859|   842k|            res = items32[i];
  860|   842k|        }
  861|       |        // Same note about lifetime as in getKeyAndValue().
  862|  1.53M|        rdValue.setResource(res, ResourceTracer(fTraceInfo, key));
  863|  1.53M|        return true;
  864|  1.53M|    }
  865|  36.3k|    return false;
  866|  1.57M|}
res_getArrayItem_78:
  869|   185k|res_getArrayItem(const ResourceData *pResData, Resource array, int32_t indexR) {
  870|   185k|    uint32_t offset=RES_GET_OFFSET(array);
  ------------------
  |  |   69|   185k|#define RES_GET_OFFSET(res) ((res)&0x0fffffff)
  ------------------
  871|   185k|    if (indexR < 0) {
  ------------------
  |  Branch (871:9): [True: 0, False: 185k]
  ------------------
  872|      0|        return RES_BOGUS;
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  873|      0|    }
  874|   185k|    switch(RES_GET_TYPE(array)) {
  ------------------
  |  |   68|   185k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  875|  20.8k|    case URES_ARRAY: {
  ------------------
  |  Branch (875:5): [True: 20.8k, False: 164k]
  ------------------
  876|  20.8k|        if (offset!=0) { /* empty if offset==0 */
  ------------------
  |  Branch (876:13): [True: 20.8k, False: 0]
  ------------------
  877|  20.8k|            const int32_t *p= pResData->pRoot+offset;
  878|  20.8k|            if(indexR<*p) {
  ------------------
  |  Branch (878:16): [True: 20.8k, False: 0]
  ------------------
  879|  20.8k|                return (Resource)p[1+indexR];
  880|  20.8k|            }
  881|  20.8k|        }
  882|      0|        break;
  883|  20.8k|    }
  884|   164k|    case URES_ARRAY16: {
  ------------------
  |  Branch (884:5): [True: 164k, False: 20.8k]
  ------------------
  885|   164k|        const uint16_t *p=pResData->p16BitUnits+offset;
  886|   164k|        if(indexR<*p) {
  ------------------
  |  Branch (886:12): [True: 164k, False: 0]
  ------------------
  887|   164k|            return makeResourceFrom16(pResData, p[1+indexR]);
  888|   164k|        }
  889|      0|        break;
  890|   164k|    }
  891|      0|    default:
  ------------------
  |  Branch (891:5): [True: 0, False: 185k]
  ------------------
  892|      0|        break;
  893|   185k|    }
  894|      0|    return RES_BOGUS;
  ------------------
  |  |   65|      0|#define RES_BOGUS 0xffffffff
  ------------------
  895|   185k|}
_ZNK6icu_7813ResourceArray19internalGetResourceEPK12ResourceDatai:
  897|  1.45k|uint32_t icu::ResourceArray::internalGetResource(const ResourceData *pResData, int32_t i) const {
  898|  1.45k|    if (items16 != nullptr) {
  ------------------
  |  Branch (898:9): [True: 1.45k, False: 0]
  ------------------
  899|  1.45k|        return makeResourceFrom16(pResData, items16[i]);
  900|  1.45k|    } else {
  901|      0|        return items32[i];
  902|      0|    }
  903|  1.45k|}
_ZNK6icu_7813ResourceArray8getValueEiRNS_13ResourceValueE:
  905|  1.45k|UBool icu::ResourceArray::getValue(int32_t i, icu::ResourceValue &value) const {
  906|  1.45k|    if(0 <= i && i < length) {
  ------------------
  |  Branch (906:8): [True: 1.45k, False: 0]
  |  Branch (906:18): [True: 1.45k, False: 0]
  ------------------
  907|  1.45k|        icu::ResourceDataValue &rdValue = static_cast<icu::ResourceDataValue &>(value);
  908|       |        // Note: the ResourceTracer keeps a reference to the field of this
  909|       |        // ResourceArray. This is OK because the ResourceArray should remain
  910|       |        // alive for the duration that fields are being read from it
  911|       |        // (including nested fields).
  912|  1.45k|        rdValue.setResource(
  913|  1.45k|            internalGetResource(&rdValue.getData(), i),
  914|  1.45k|            ResourceTracer(fTraceInfo, i));
  915|  1.45k|        return true;
  916|  1.45k|    }
  917|      0|    return false;
  918|  1.45k|}
res_findResource_78:
  921|  3.09M|res_findResource(const ResourceData *pResData, Resource r, char** path, const char** key) {
  922|  3.09M|  char *pathP = *path, *nextSepP = *path;
  923|  3.09M|  char *closeIndex = nullptr;
  924|  3.09M|  Resource t1 = r;
  925|  3.09M|  Resource t2;
  926|  3.09M|  int32_t indexR = 0;
  927|  3.09M|  UResType type = (UResType)RES_GET_TYPE(t1);
  ------------------
  |  |   68|  3.09M|#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|  3.09M|  if(!uprv_strlen(pathP)) {
  ------------------
  |  |   37|  3.09M|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  3.09M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (930:6): [True: 0, False: 3.09M]
  ------------------
  931|      0|      return r;
  932|      0|  }
  933|       |
  934|       |  /* one needs to have an aggregate resource in order to search in it */
  935|  3.09M|  if(!URES_IS_CONTAINER(type)) {
  ------------------
  |  |   85|  3.09M|#define URES_IS_CONTAINER(type) (URES_IS_TABLE(type) || URES_IS_ARRAY(type))
  |  |  ------------------
  |  |  |  |   84|  6.18M|#define URES_IS_TABLE(type) ((int32_t)(type)==URES_TABLE || (int32_t)(type)==URES_TABLE16 || (int32_t)(type)==URES_TABLE32)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (84:30): [True: 3.06M, False: 27.0k]
  |  |  |  |  |  Branch (84:61): [True: 27.0k, 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|  8.26M|  while(nextSepP && *pathP && t1 != RES_BOGUS && URES_IS_CONTAINER(type)) {
  ------------------
  |  |   65|  14.4M|#define RES_BOGUS 0xffffffff
  ------------------
                while(nextSepP && *pathP && t1 != RES_BOGUS && URES_IS_CONTAINER(type)) {
  ------------------
  |  |   85|  5.16M|#define URES_IS_CONTAINER(type) (URES_IS_TABLE(type) || URES_IS_ARRAY(type))
  |  |  ------------------
  |  |  |  |   84|  10.3M|#define URES_IS_TABLE(type) ((int32_t)(type)==URES_TABLE || (int32_t)(type)==URES_TABLE16 || (int32_t)(type)==URES_TABLE32)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (84:30): [True: 5.13M, False: 27.2k]
  |  |  |  |  |  Branch (84:61): [True: 27.2k, 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: 6.98M, False: 1.27M]
  |  Branch (939:21): [True: 6.21M, False: 769k]
  |  Branch (939:31): [True: 5.16M, False: 1.04M]
  ------------------
  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|  5.16M|    nextSepP = uprv_strchr(pathP, RES_PATH_SEPARATOR);
  ------------------
  |  |   40|  5.16M|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  5.16M|#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|  5.16M|    if(nextSepP != nullptr) {
  ------------------
  |  Branch (947:8): [True: 3.89M, False: 1.27M]
  ------------------
  948|  3.89M|      if(nextSepP == pathP) {
  ------------------
  |  Branch (948:10): [True: 14, False: 3.89M]
  ------------------
  949|       |        // Empty key string.
  950|     14|        return RES_BOGUS;
  ------------------
  |  |   65|     14|#define RES_BOGUS 0xffffffff
  ------------------
  951|     14|      }
  952|  3.89M|      *nextSepP = 0; /* overwrite the separator with a NUL to terminate the key */
  953|  3.89M|      *path = nextSepP+1;
  954|  3.89M|    } else {
  955|  1.27M|      *path = uprv_strchr(pathP, 0);
  ------------------
  |  |   40|  1.27M|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  1.27M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  956|  1.27M|    }
  957|       |
  958|       |    /* if the resource is a table */
  959|       |    /* try the key based access */
  960|  5.16M|    if(URES_IS_TABLE(type)) {
  ------------------
  |  |   84|  5.16M|#define URES_IS_TABLE(type) ((int32_t)(type)==URES_TABLE || (int32_t)(type)==URES_TABLE16 || (int32_t)(type)==URES_TABLE32)
  |  |  ------------------
  |  |  |  Branch (84:30): [True: 5.13M, False: 27.2k]
  |  |  |  Branch (84:61): [True: 27.2k, False: 0]
  |  |  |  Branch (84:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  961|  5.16M|      *key = pathP;
  962|  5.16M|      t2 = res_getTableItemByKey(pResData, t1, &indexR, key);
  ------------------
  |  |  207|  5.16M|#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey)
  |  |  ------------------
  |  |  |  |  123|  5.16M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.16M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.16M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  963|  5.16M|    } 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|  5.16M|    t1 = t2;
  975|  5.16M|    type = (UResType)RES_GET_TYPE(t1);
  ------------------
  |  |   68|  5.16M|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  976|       |    /* position pathP to next resource key/index */
  977|  5.16M|    pathP = *path;
  978|  5.16M|  }
  979|       |
  980|  3.09M|  return t1;
  981|  3.09M|}
uresdata.cpp:_ZL12isAcceptablePvPKcS1_PK9UDataInfo:
  141|  1.49k|             const UDataInfo *pInfo) {
  142|  1.49k|    uprv_memcpy(context, pInfo->formatVersion, 4);
  ------------------
  |  |   42|  1.49k|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  1.49k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  1.49k|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  1.49k|    _Pragma("clang diagnostic push") \
  |  |   45|  1.49k|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  1.49k|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.49k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  1.49k|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.49k|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  1.49k|    _Pragma("clang diagnostic pop") \
  |  |   49|  1.49k|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  1.49k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  1.49k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  1.49k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  143|  1.49k|    return
  144|  1.49k|        pInfo->size>=20 &&
  ------------------
  |  Branch (144:9): [True: 1.49k, False: 0]
  ------------------
  145|  1.49k|        pInfo->isBigEndian==U_IS_BIG_ENDIAN &&
  ------------------
  |  |  353|  2.98k|#   define U_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
  ------------------
  |  Branch (145:9): [True: 1.49k, False: 0]
  ------------------
  146|  1.49k|        pInfo->charsetFamily==U_CHARSET_FAMILY &&
  ------------------
  |  |  588|  1.49k|#   define U_CHARSET_FAMILY U_ASCII_FAMILY
  |  |  ------------------
  |  |  |  |  531|  2.98k|#define U_ASCII_FAMILY 0
  |  |  ------------------
  ------------------
  |  Branch (146:9): [True: 1.49k, False: 0]
  ------------------
  147|  1.49k|        pInfo->sizeofUChar==U_SIZEOF_UCHAR &&
  ------------------
  |  |  352|  2.98k|#define U_SIZEOF_UCHAR 2
  ------------------
  |  Branch (147:9): [True: 1.49k, False: 0]
  ------------------
  148|  1.49k|        pInfo->dataFormat[0]==0x52 &&   /* dataFormat="ResB" */
  ------------------
  |  Branch (148:9): [True: 1.49k, False: 0]
  ------------------
  149|  1.49k|        pInfo->dataFormat[1]==0x65 &&
  ------------------
  |  Branch (149:9): [True: 1.49k, False: 0]
  ------------------
  150|  1.49k|        pInfo->dataFormat[2]==0x73 &&
  ------------------
  |  Branch (150:9): [True: 1.49k, False: 0]
  ------------------
  151|  1.49k|        pInfo->dataFormat[3]==0x42 &&
  ------------------
  |  Branch (151:9): [True: 1.49k, False: 0]
  ------------------
  152|  1.49k|        (1<=pInfo->formatVersion[0] && pInfo->formatVersion[0]<=3);
  ------------------
  |  Branch (152:10): [True: 1.49k, False: 0]
  |  Branch (152:40): [True: 1.49k, False: 0]
  ------------------
  153|  1.49k|}
uresdata.cpp:_ZL8res_initP12ResourceDataPhPKviP10UErrorCode:
  160|  1.49k|         UErrorCode *errorCode) {
  161|  1.49k|    UResType rootType;
  162|       |
  163|       |    /* get the root resource */
  164|  1.49k|    pResData->pRoot = static_cast<const int32_t*>(inBytes);
  165|  1.49k|    pResData->rootRes = static_cast<Resource>(*pResData->pRoot);
  166|  1.49k|    pResData->p16BitUnits=&gEmpty16;
  167|       |
  168|       |    /* formatVersion 1.1 must have a root item and at least 5 indexes */
  169|  1.49k|    if(length>=0 && (length/4)<((formatVersion[0]==1 && formatVersion[1]==0) ? 1 : 1+5)) {
  ------------------
  |  Branch (169:8): [True: 0, False: 1.49k]
  |  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|  1.49k|    rootType = static_cast<UResType>(RES_GET_TYPE(pResData->rootRes));
  ------------------
  |  |   68|  1.49k|#define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
  ------------------
  177|  1.49k|    if(!URES_IS_TABLE(rootType)) {
  ------------------
  |  |   84|  1.49k|#define URES_IS_TABLE(type) ((int32_t)(type)==URES_TABLE || (int32_t)(type)==URES_TABLE16 || (int32_t)(type)==URES_TABLE32)
  |  |  ------------------
  |  |  |  Branch (84:30): [True: 1.32k, False: 167]
  |  |  |  Branch (84:61): [True: 167, 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|  1.49k|    if(formatVersion[0]==1 && formatVersion[1]==0) {
  ------------------
  |  Branch (183:8): [True: 0, False: 1.49k]
  |  Branch (183:31): [True: 0, False: 0]
  ------------------
  184|      0|        pResData->localKeyLimit=0x10000;  /* greater than any 16-bit key string offset */
  185|  1.49k|    } else {
  186|       |        /* bundles with formatVersion 1.1 and later contain an indexes[] array */
  187|  1.49k|        const int32_t *indexes=pResData->pRoot+1;
  188|  1.49k|        int32_t indexLength=indexes[URES_INDEX_LENGTH]&0xff;
  189|  1.49k|        if(indexLength<=URES_INDEX_MAX_TABLE_LENGTH) {
  ------------------
  |  Branch (189:12): [True: 0, False: 1.49k]
  ------------------
  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|  1.49k|        if( length>=0 &&
  ------------------
  |  Branch (194:13): [True: 0, False: 1.49k]
  ------------------
  195|  1.49k|            (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|  1.49k|        ) {
  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|  1.49k|        if(indexes[URES_INDEX_KEYS_TOP]>(1+indexLength)) {
  ------------------
  |  Branch (202:12): [True: 14, False: 1.47k]
  ------------------
  203|     14|            pResData->localKeyLimit=indexes[URES_INDEX_KEYS_TOP]<<2;
  204|     14|        }
  205|  1.49k|        if(formatVersion[0]>=3) {
  ------------------
  |  Branch (205:12): [True: 1.00k, False: 483]
  ------------------
  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|  1.00k|            pResData->poolStringIndexLimit = static_cast<int32_t>(static_cast<uint32_t>(indexes[URES_INDEX_LENGTH]) >> 8);
  211|  1.00k|        }
  212|  1.49k|        if(indexLength>URES_INDEX_ATTRIBUTES) {
  ------------------
  |  Branch (212:12): [True: 1.49k, False: 0]
  ------------------
  213|  1.49k|            int32_t att=indexes[URES_INDEX_ATTRIBUTES];
  214|  1.49k|            pResData->noFallback = static_cast<UBool>(att & URES_ATT_NO_FALLBACK);
  ------------------
  |  |  148|  1.49k|#define URES_ATT_NO_FALLBACK 1
  ------------------
  215|  1.49k|            pResData->isPoolBundle = static_cast<UBool>((att & URES_ATT_IS_POOL_BUNDLE) != 0);
  ------------------
  |  |  156|  1.49k|#define URES_ATT_IS_POOL_BUNDLE 2
  ------------------
  216|  1.49k|            pResData->usesPoolBundle = static_cast<UBool>((att & URES_ATT_USES_POOL_BUNDLE) != 0);
  ------------------
  |  |  157|  1.49k|#define URES_ATT_USES_POOL_BUNDLE 4
  ------------------
  217|  1.49k|            pResData->poolStringIndexLimit|=(att&0xf000)<<12;  // bits 15..12 -> 27..24
  218|  1.49k|            pResData->poolStringIndex16Limit = static_cast<int32_t>(static_cast<uint32_t>(att) >> 16);
  219|  1.49k|        }
  220|  1.49k|        if((pResData->isPoolBundle || pResData->usesPoolBundle) && indexLength<=URES_INDEX_POOL_CHECKSUM) {
  ------------------
  |  Branch (220:13): [True: 3, False: 1.48k]
  |  Branch (220:39): [True: 1.47k, False: 11]
  |  Branch (220:68): [True: 0, False: 1.47k]
  ------------------
  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|  1.49k|        if( indexLength>URES_INDEX_16BIT_TOP &&
  ------------------
  |  Branch (225:13): [True: 1.49k, False: 0]
  ------------------
  226|  1.49k|            indexes[URES_INDEX_16BIT_TOP]>indexes[URES_INDEX_KEYS_TOP]
  ------------------
  |  Branch (226:13): [True: 1.49k, False: 0]
  ------------------
  227|  1.49k|        ) {
  228|  1.49k|            pResData->p16BitUnits = reinterpret_cast<const uint16_t*>(pResData->pRoot + indexes[URES_INDEX_KEYS_TOP]);
  229|  1.49k|        }
  230|  1.49k|    }
  231|       |
  232|  1.49k|    if(formatVersion[0]==1 || U_CHARSET_FAMILY==U_ASCII_FAMILY) {
  ------------------
  |  |  588|  1.49k|#   define U_CHARSET_FAMILY U_ASCII_FAMILY
  |  |  ------------------
  |  |  |  |  531|  1.49k|#define U_ASCII_FAMILY 0
  |  |  ------------------
  ------------------
                  if(formatVersion[0]==1 || U_CHARSET_FAMILY==U_ASCII_FAMILY) {
  ------------------
  |  |  531|  1.49k|#define U_ASCII_FAMILY 0
  ------------------
  |  Branch (232:8): [True: 0, False: 1.49k]
  |  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|  1.49k|        pResData->useNativeStrcmp=true;
  238|  1.49k|    }
  239|  1.49k|}
uresdata.cpp:_ZL18_res_findTableItemPK12ResourceDataPKtiPKcPS5_:
   76|  7.49M|                   const char *key, const char **realKey) {
   77|  7.49M|    const char *tableKey;
   78|  7.49M|    int32_t mid, start, limit;
   79|  7.49M|    int result;
   80|       |
   81|       |    /* do a binary search for the key */
   82|  7.49M|    start=0;
   83|  7.49M|    limit=length;
   84|  24.7M|    while(start<limit) {
  ------------------
  |  Branch (84:11): [True: 23.2M, False: 1.48M]
  ------------------
   85|  23.2M|        mid = (start + limit) / 2;
   86|  23.2M|        tableKey = RES_GET_KEY16(pResData, keyOffsets[mid]);
  ------------------
  |  |   44|  23.2M|    ((keyOffset)<(pResData)->localKeyLimit ? \
  |  |  ------------------
  |  |  |  Branch (44:6): [True: 439k, False: 22.8M]
  |  |  ------------------
  |  |   45|  23.2M|        (const char *)(pResData)->pRoot+(keyOffset) : \
  |  |   46|  23.2M|        (pResData)->poolBundleKeys+(keyOffset)-(pResData)->localKeyLimit)
  ------------------
   87|  23.2M|        if (pResData->useNativeStrcmp) {
  ------------------
  |  Branch (87:13): [True: 23.2M, False: 0]
  ------------------
   88|  23.2M|            result = uprv_strcmp(key, tableKey);
  ------------------
  |  |   38|  23.2M|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  23.2M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
   89|  23.2M|        } 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|  23.2M|        if (result < 0) {
  ------------------
  |  Branch (92:13): [True: 9.97M, False: 13.2M]
  ------------------
   93|  9.97M|            limit = mid;
   94|  13.2M|        } else if (result > 0) {
  ------------------
  |  Branch (94:20): [True: 7.28M, False: 6.01M]
  ------------------
   95|  7.28M|            start = mid + 1;
   96|  7.28M|        } else {
   97|       |            /* We found it! */
   98|  6.01M|            *realKey=tableKey;
   99|  6.01M|            return mid;
  100|  6.01M|        }
  101|  23.2M|    }
  102|  1.48M|    return URESDATA_ITEM_NOT_FOUND;  /* not found or table is empty. */
  ------------------
  |  |   53|  1.48M|#define URESDATA_ITEM_NOT_FOUND -1
  ------------------
  103|  7.49M|}
uresdata.cpp:_ZL18makeResourceFrom16PK12ResourceDatai:
  700|  1.55M|makeResourceFrom16(const ResourceData *pResData, int32_t res16) {
  701|  1.55M|    if(res16<pResData->poolStringIndex16Limit) {
  ------------------
  |  Branch (701:8): [True: 770k, False: 783k]
  ------------------
  702|       |        // Pool string, nothing to do.
  703|   783k|    } else {
  704|       |        // Local string, adjust the 16-bit offset to a regular one,
  705|       |        // with a larger pool string index limit.
  706|   783k|        res16=res16-pResData->poolStringIndex16Limit+pResData->poolStringIndexLimit;
  707|   783k|    }
  708|  1.55M|    return URES_MAKE_RESOURCE(URES_STRING_V2, res16);
  ------------------
  |  |   87|  1.55M|#define URES_MAKE_RESOURCE(type, offset) (((Resource)(type)<<28)|(Resource)(offset))
  ------------------
  709|  1.55M|}

_ZN6icu_7817ResourceDataValueC2Ev:
  516|   663k|        pResData(nullptr),
  517|   663k|        validLocaleDataEntry(nullptr),
  518|   663k|        res(static_cast<Resource>(URES_NONE)),
  519|   663k|        fTraceInfo() {}
_ZN6icu_7817ResourceDataValue7setDataERK12ResourceData:
  522|  1.71M|    void setData(const ResourceData &data) {
  523|  1.71M|        pResData = &data;
  524|  1.71M|    }
_ZN6icu_7817ResourceDataValue23setValidLocaleDataEntryEP18UResourceDataEntry:
  526|   713k|    void setValidLocaleDataEntry(UResourceDataEntry *entry) {
  527|   713k|        validLocaleDataEntry = entry;
  528|   713k|    }
_ZN6icu_7817ResourceDataValue11setResourceEjONS_14ResourceTracerE:
  530|  6.46M|    void setResource(Resource r, ResourceTracer&& traceInfo) {
  531|  6.46M|        res = r;
  532|  6.46M|        fTraceInfo = traceInfo;
  533|  6.46M|    }
_ZNK6icu_7817ResourceDataValue7getDataEv:
  535|  17.6M|    const ResourceData &getData() const { return *pResData; }
_ZNK6icu_7817ResourceDataValue23getValidLocaleDataEntryEv:
  536|   837k|    UResourceDataEntry *getValidLocaleDataEntry() const { return validLocaleDataEntry; }
_ZNK6icu_7817ResourceDataValue11getResourceEv:
  537|   837k|    Resource getResource() const { return res; }
_ZN6icu_7813res_getStringERKNS_14ResourceTracerEPK12ResourceDatajPi:
  486|  2.95M|        const ResourceData *pResData, Resource res, int32_t *pLength) {
  487|  2.95M|    traceInfo.trace("string");
  488|  2.95M|    return res_getStringNoTrace(pResData, res, pLength);
  ------------------
  |  |  205|  2.95M|#define res_getStringNoTrace U_ICU_ENTRY_POINT_RENAME(res_getStringNoTrace)
  |  |  ------------------
  |  |  |  |  123|  2.95M|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.95M|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.95M|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  489|  2.95M|}
_ZN6icu_7813res_getBinaryERKNS_14ResourceTracerEPK12ResourceDatajPi:
  492|     31|        const ResourceData *pResData, Resource res, int32_t *pLength) {
  493|     31|    traceInfo.trace("binary");
  494|     31|    return res_getBinaryNoTrace(pResData, res, pLength);
  ------------------
  |  |  201|     31|#define res_getBinaryNoTrace U_ICU_ENTRY_POINT_RENAME(res_getBinaryNoTrace)
  |  |  ------------------
  |  |  |  |  123|     31|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     31|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     31|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  495|     31|}
_ZN6icu_7816res_getIntVectorERKNS_14ResourceTracerEPK12ResourceDatajPi:
  498|  7.13k|        const ResourceData *pResData, Resource res, int32_t *pLength) {
  499|  7.13k|    traceInfo.trace("intvector");
  500|  7.13k|    return res_getIntVectorNoTrace(pResData, res, pLength);
  ------------------
  |  |  202|  7.13k|#define res_getIntVectorNoTrace U_ICU_ENTRY_POINT_RENAME(res_getIntVectorNoTrace)
  |  |  ------------------
  |  |  |  |  123|  7.13k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.13k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.13k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  501|  7.13k|}
_ZN6icu_7810res_getIntERKNS_14ResourceTracerEj:
  503|  26.6k|inline int32_t res_getInt(const ResourceTracer& traceInfo, Resource res) {
  504|  26.6k|    traceInfo.trace("int");
  505|  26.6k|    return RES_GET_INT_NO_TRACE(res);
  ------------------
  |  |   76|  26.6k|#   define RES_GET_INT_NO_TRACE(res) (((int32_t)((res)<<4L))>>4L)
  ------------------
  506|  26.6k|}

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

u_strcmpFold_78:
 1848|    165|             UErrorCode *pErrorCode) {
 1849|    165|    return _cmpFold(s1, length1, s2, length2, options, nullptr, nullptr, pErrorCode);
 1850|    165|}
u_strncasecmp_78:
 1889|    165|u_strncasecmp(const char16_t *s1, const char16_t *s2, int32_t n, uint32_t options) {
 1890|    165|    UErrorCode errorCode=U_ZERO_ERROR;
 1891|    165|    return u_strcmpFold(s1, n, s2, n,
  ------------------
  |  |  389|    165|#define u_strcmpFold U_ICU_ENTRY_POINT_RENAME(u_strcmpFold)
  |  |  ------------------
  |  |  |  |  123|    165|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    165|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    165|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1892|    165|                        options|(U_COMPARE_IGNORE_CASE|_STRNCMP_STYLE),
  ------------------
  |  |  166|    165|#define U_COMPARE_IGNORE_CASE       0x10000
  ------------------
                                      options|(U_COMPARE_IGNORE_CASE|_STRNCMP_STYLE),
  ------------------
  |  |   27|    165|#define _STRNCMP_STYLE 0x1000
  ------------------
 1893|    165|                        &errorCode);
 1894|    165|}
ustrcase.cpp:_ZL8_cmpFoldPKDsiS0_ijPiS1_P10UErrorCode:
 1486|    165|            UErrorCode *pErrorCode) {
 1487|    165|    int32_t cmpRes = 0;
 1488|       |
 1489|       |    /* current-level start/limit - s1/s2 as current */
 1490|    165|    const char16_t *start1, *start2, *limit1, *limit2;
 1491|       |
 1492|       |    /* points to the original start address */
 1493|    165|    const char16_t *org1, *org2;
 1494|       |
 1495|       |    /* points to the end of match + 1 */
 1496|    165|    const char16_t *m1, *m2;
 1497|       |
 1498|       |    /* case folding variables */
 1499|    165|    const char16_t *p;
 1500|    165|    int32_t length;
 1501|       |
 1502|       |    /* stacks of previous-level start/current/limit */
 1503|    165|    CmpEquivLevel stack1[2], stack2[2];
 1504|       |
 1505|       |    /* case folding buffers, only use current-level start/limit */
 1506|    165|    char16_t fold1[UCASE_MAX_STRING_LENGTH+1], fold2[UCASE_MAX_STRING_LENGTH+1];
 1507|       |
 1508|       |    /* track which is the current level per string */
 1509|    165|    int32_t level1, level2;
 1510|       |
 1511|       |    /* current code units, and code points for lookups */
 1512|    165|    UChar32 c1, c2, cp1, cp2;
 1513|       |
 1514|       |    /* no argument error checking because this itself is not an API */
 1515|       |
 1516|       |    /*
 1517|       |     * assume that at least the option U_COMPARE_IGNORE_CASE is set
 1518|       |     * otherwise this function would have to behave exactly as uprv_strCompare()
 1519|       |     */
 1520|    165|    if(U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (1520:8): [True: 0, False: 165]
  ------------------
 1521|      0|        return 0;
 1522|      0|    }
 1523|       |
 1524|       |    /* initialize */
 1525|    165|    if(matchLen1) {
  ------------------
  |  Branch (1525:8): [True: 0, False: 165]
  ------------------
 1526|      0|        U_ASSERT(matchLen2 !=nullptr);
  ------------------
  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  ------------------
 1527|      0|        *matchLen1=0;
 1528|      0|        *matchLen2=0;
 1529|      0|    }
 1530|       |
 1531|    165|    start1=m1=org1=s1;
 1532|    165|    if(length1==-1) {
  ------------------
  |  Branch (1532:8): [True: 0, False: 165]
  ------------------
 1533|      0|        limit1=nullptr;
 1534|    165|    } else {
 1535|    165|        limit1=s1+length1;
 1536|    165|    }
 1537|       |
 1538|    165|    start2=m2=org2=s2;
 1539|    165|    if(length2==-1) {
  ------------------
  |  Branch (1539:8): [True: 0, False: 165]
  ------------------
 1540|      0|        limit2=nullptr;
 1541|    165|    } else {
 1542|    165|        limit2=s2+length2;
 1543|    165|    }
 1544|       |
 1545|    165|    level1=level2=0;
 1546|    165|    c1=c2=-1;
 1547|       |
 1548|       |    /* comparison loop */
 1549|    728|    for(;;) {
 1550|       |        /*
 1551|       |         * here a code unit value of -1 means "get another code unit"
 1552|       |         * below it will mean "this source is finished"
 1553|       |         */
 1554|       |
 1555|    728|        if(c1<0) {
  ------------------
  |  Branch (1555:12): [True: 491, False: 237]
  ------------------
 1556|       |            /* get next code unit from string 1, post-increment */
 1557|    491|            for(;;) {
 1558|    491|                if(s1==limit1 || ((c1=*s1)==0 && (limit1==nullptr || (options&_STRNCMP_STYLE)))) {
  ------------------
  |  |   27|      0|#define _STRNCMP_STYLE 0x1000
  ------------------
  |  Branch (1558:20): [True: 100, False: 391]
  |  Branch (1558:35): [True: 0, False: 391]
  |  Branch (1558:51): [True: 0, False: 0]
  |  Branch (1558:70): [True: 0, False: 0]
  ------------------
 1559|    100|                    if(level1==0) {
  ------------------
  |  Branch (1559:24): [True: 100, False: 0]
  ------------------
 1560|    100|                        c1=-1;
 1561|    100|                        break;
 1562|    100|                    }
 1563|    391|                } else {
 1564|    391|                    ++s1;
 1565|    391|                    break;
 1566|    391|                }
 1567|       |
 1568|       |                /* reached end of level buffer, pop one level */
 1569|      0|                do {
 1570|      0|                    --level1;
 1571|      0|                    start1=stack1[level1].start;    /*Not uninitialized*/
 1572|      0|                } while(start1==nullptr);
  ------------------
  |  Branch (1572:25): [True: 0, False: 0]
  ------------------
 1573|      0|                s1=stack1[level1].s;                /*Not uninitialized*/
 1574|      0|                limit1=stack1[level1].limit;        /*Not uninitialized*/
 1575|      0|            }
 1576|    491|        }
 1577|       |
 1578|    728|        if(c2<0) {
  ------------------
  |  Branch (1578:12): [True: 721, False: 7]
  ------------------
 1579|       |            /* get next code unit from string 2, post-increment */
 1580|    893|            for(;;) {
 1581|    893|                if(s2==limit2 || ((c2=*s2)==0 && (limit2==nullptr || (options&_STRNCMP_STYLE)))) {
  ------------------
  |  |   27|      0|#define _STRNCMP_STYLE 0x1000
  ------------------
  |  Branch (1581:20): [True: 272, False: 621]
  |  Branch (1581:35): [True: 0, False: 621]
  |  Branch (1581:51): [True: 0, False: 0]
  |  Branch (1581:70): [True: 0, False: 0]
  ------------------
 1582|    272|                    if(level2==0) {
  ------------------
  |  Branch (1582:24): [True: 100, False: 172]
  ------------------
 1583|    100|                        c2=-1;
 1584|    100|                        break;
 1585|    100|                    }
 1586|    621|                } else {
 1587|    621|                    ++s2;
 1588|    621|                    break;
 1589|    621|                }
 1590|       |
 1591|       |                /* reached end of level buffer, pop one level */
 1592|    172|                do {
 1593|    172|                    --level2;
 1594|    172|                    start2=stack2[level2].start;    /*Not uninitialized*/
 1595|    172|                } while(start2==nullptr);
  ------------------
  |  Branch (1595:25): [True: 0, False: 172]
  ------------------
 1596|    172|                s2=stack2[level2].s;                /*Not uninitialized*/
 1597|    172|                limit2=stack2[level2].limit;        /*Not uninitialized*/
 1598|    172|            }
 1599|    721|        }
 1600|       |
 1601|       |        /*
 1602|       |         * compare c1 and c2
 1603|       |         * either variable c1, c2 is -1 only if the corresponding string is finished
 1604|       |         */
 1605|    728|        if(c1==c2) {
  ------------------
  |  Branch (1605:12): [True: 419, False: 309]
  ------------------
 1606|    419|            const char16_t *next1, *next2;
 1607|       |
 1608|    419|            if(c1<0) {
  ------------------
  |  Branch (1608:16): [True: 100, False: 319]
  ------------------
 1609|    100|                cmpRes=0;   /* c1==c2==-1 indicating end of strings */
 1610|    100|                break;
 1611|    100|            }
 1612|       |
 1613|       |            /*
 1614|       |             * Note: Move the match positions in both strings at the same time
 1615|       |             *      only when corresponding code point(s) in the original strings
 1616|       |             *      are fully consumed. For example, when comparing s1="Fust" and
 1617|       |             *      s2="Fu\u00dfball", s2[2] is folded into "ss", and s1[2] matches
 1618|       |             *      the first code point in the case-folded data. But the second "s"
 1619|       |             *      has no matching code point in s1, so this implementation returns
 1620|       |             *      2 as the prefix match length ("Fu").
 1621|       |             */
 1622|    319|            next1=next2=nullptr;
 1623|    319|            if(level1==0) {
  ------------------
  |  Branch (1623:16): [True: 319, False: 0]
  ------------------
 1624|    319|                next1=s1;
 1625|    319|            } else if(s1==limit1) {
  ------------------
  |  Branch (1625:23): [True: 0, False: 0]
  ------------------
 1626|       |                /* Note: This implementation only use a single level of stack.
 1627|       |                 *      If this code needs to be changed to use multiple levels
 1628|       |                 *      of stacks, the code above should check if the current
 1629|       |                 *      code is at the end of all stacks.
 1630|       |                 */
 1631|      0|                U_ASSERT(level1==1);
  ------------------
  |  |   35|      0|#   define U_ASSERT(exp) (void)0
  ------------------
 1632|       |
 1633|       |                /* is s1 at the end of the current stack? */
 1634|      0|                next1=stack1[0].s;
 1635|      0|            }
 1636|       |
 1637|    319|            if (next1!=nullptr) {
  ------------------
  |  Branch (1637:17): [True: 319, False: 0]
  ------------------
 1638|    319|                if(level2==0) {
  ------------------
  |  Branch (1638:20): [True: 147, False: 172]
  ------------------
 1639|    147|                    next2=s2;
 1640|    172|                } else if(s2==limit2) {
  ------------------
  |  Branch (1640:27): [True: 172, False: 0]
  ------------------
 1641|    172|                    U_ASSERT(level2==1);
  ------------------
  |  |   35|    172|#   define U_ASSERT(exp) (void)0
  ------------------
 1642|       |
 1643|       |                    /* is s2 at the end of the current stack? */
 1644|    172|                    next2=stack2[0].s;
 1645|    172|                }
 1646|    319|                if(next2!=nullptr) {
  ------------------
  |  Branch (1646:20): [True: 319, False: 0]
  ------------------
 1647|    319|                    m1=next1;
 1648|    319|                    m2=next2;
 1649|    319|                }
 1650|    319|            }
 1651|    319|            c1=c2=-1;       /* make us fetch new code units */
 1652|    319|            continue;
 1653|    419|        } else if(c1<0) {
  ------------------
  |  Branch (1653:19): [True: 0, False: 309]
  ------------------
 1654|      0|            cmpRes=-1;      /* string 1 ends before string 2 */
 1655|      0|            break;
 1656|    309|        } else if(c2<0) {
  ------------------
  |  Branch (1656:19): [True: 0, False: 309]
  ------------------
 1657|      0|            cmpRes=1;       /* string 2 ends before string 1 */
 1658|      0|            break;
 1659|      0|        }
 1660|       |        /* c1!=c2 && c1>=0 && c2>=0 */
 1661|       |
 1662|       |        /* get complete code points for c1, c2 for lookups if either is a surrogate */
 1663|    309|        cp1=c1;
 1664|    309|        if(U_IS_SURROGATE(c1)) {
  ------------------
  |  |  193|    309|#define U_IS_SURROGATE(c) (((c)&0xfffff800)==0xd800)
  |  |  ------------------
  |  |  |  Branch (193:27): [True: 0, False: 309]
  |  |  ------------------
  ------------------
 1665|      0|            char16_t c;
 1666|       |
 1667|      0|            if(U_IS_SURROGATE_LEAD(c1)) {
  ------------------
  |  |  202|      0|#define U_IS_SURROGATE_LEAD(c) (((c)&0x400)==0)
  |  |  ------------------
  |  |  |  Branch (202:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1668|      0|                if(s1!=limit1 && U16_IS_TRAIL(c=*s1)) {
  ------------------
  |  |   67|      0|#define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
  |  |  ------------------
  |  |  |  Branch (67:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1668:20): [True: 0, False: 0]
  ------------------
 1669|       |                    /* advance ++s1; only below if cp1 decomposes/case-folds */
 1670|      0|                    cp1=U16_GET_SUPPLEMENTARY(c1, c);
  ------------------
  |  |  113|      0|    (((UChar32)(lead)<<10UL)+(UChar32)(trail)-U16_SURROGATE_OFFSET)
  |  |  ------------------
  |  |  |  |   99|      0|#define U16_SURROGATE_OFFSET ((0xd800<<10UL)+0xdc00-0x10000)
  |  |  ------------------
  ------------------
 1671|      0|                }
 1672|      0|            } else /* isTrail(c1) */ {
 1673|      0|                if(start1<=(s1-2) && U16_IS_LEAD(c=*(s1-2))) {
  ------------------
  |  |   59|      0|#define U16_IS_LEAD(c) (((c)&0xfffffc00)==0xd800)
  |  |  ------------------
  |  |  |  Branch (59:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1673:20): [True: 0, False: 0]
  ------------------
 1674|      0|                    cp1=U16_GET_SUPPLEMENTARY(c, c1);
  ------------------
  |  |  113|      0|    (((UChar32)(lead)<<10UL)+(UChar32)(trail)-U16_SURROGATE_OFFSET)
  |  |  ------------------
  |  |  |  |   99|      0|#define U16_SURROGATE_OFFSET ((0xd800<<10UL)+0xdc00-0x10000)
  |  |  ------------------
  ------------------
 1675|      0|                }
 1676|      0|            }
 1677|      0|        }
 1678|       |
 1679|    309|        cp2=c2;
 1680|    309|        if(U_IS_SURROGATE(c2)) {
  ------------------
  |  |  193|    309|#define U_IS_SURROGATE(c) (((c)&0xfffff800)==0xd800)
  |  |  ------------------
  |  |  |  Branch (193:27): [True: 0, False: 309]
  |  |  ------------------
  ------------------
 1681|      0|            char16_t c;
 1682|       |
 1683|      0|            if(U_IS_SURROGATE_LEAD(c2)) {
  ------------------
  |  |  202|      0|#define U_IS_SURROGATE_LEAD(c) (((c)&0x400)==0)
  |  |  ------------------
  |  |  |  Branch (202:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1684|      0|                if(s2!=limit2 && U16_IS_TRAIL(c=*s2)) {
  ------------------
  |  |   67|      0|#define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
  |  |  ------------------
  |  |  |  Branch (67:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1684:20): [True: 0, False: 0]
  ------------------
 1685|       |                    /* advance ++s2; only below if cp2 decomposes/case-folds */
 1686|      0|                    cp2=U16_GET_SUPPLEMENTARY(c2, c);
  ------------------
  |  |  113|      0|    (((UChar32)(lead)<<10UL)+(UChar32)(trail)-U16_SURROGATE_OFFSET)
  |  |  ------------------
  |  |  |  |   99|      0|#define U16_SURROGATE_OFFSET ((0xd800<<10UL)+0xdc00-0x10000)
  |  |  ------------------
  ------------------
 1687|      0|                }
 1688|      0|            } else /* isTrail(c2) */ {
 1689|      0|                if(start2<=(s2-2) && U16_IS_LEAD(c=*(s2-2))) {
  ------------------
  |  |   59|      0|#define U16_IS_LEAD(c) (((c)&0xfffffc00)==0xd800)
  |  |  ------------------
  |  |  |  Branch (59:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1689:20): [True: 0, False: 0]
  ------------------
 1690|      0|                    cp2=U16_GET_SUPPLEMENTARY(c, c2);
  ------------------
  |  |  113|      0|    (((UChar32)(lead)<<10UL)+(UChar32)(trail)-U16_SURROGATE_OFFSET)
  |  |  ------------------
  |  |  |  |   99|      0|#define U16_SURROGATE_OFFSET ((0xd800<<10UL)+0xdc00-0x10000)
  |  |  ------------------
  ------------------
 1691|      0|                }
 1692|      0|            }
 1693|      0|        }
 1694|       |
 1695|       |        /*
 1696|       |         * go down one level for each string
 1697|       |         * continue with the main loop as soon as there is a real change
 1698|       |         */
 1699|       |
 1700|    309|        if( level1==0 &&
  ------------------
  |  Branch (1700:13): [True: 295, False: 14]
  ------------------
 1701|    309|            (length = ucase_toFullFolding(cp1, &p, options)) >= 0
  ------------------
  |  |  580|    295|#define ucase_toFullFolding U_ICU_ENTRY_POINT_RENAME(ucase_toFullFolding)
  |  |  ------------------
  |  |  |  |  123|    295|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    295|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    295|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1701:13): [True: 7, False: 288]
  ------------------
 1702|    309|        ) {
 1703|       |            /* cp1 case-folds to the code point "length" or to p[length] */
 1704|      7|            if(U_IS_SURROGATE(c1)) {
  ------------------
  |  |  193|      7|#define U_IS_SURROGATE(c) (((c)&0xfffff800)==0xd800)
  |  |  ------------------
  |  |  |  Branch (193:27): [True: 0, False: 7]
  |  |  ------------------
  ------------------
 1705|      0|                if(U_IS_SURROGATE_LEAD(c1)) {
  ------------------
  |  |  202|      0|#define U_IS_SURROGATE_LEAD(c) (((c)&0x400)==0)
  |  |  ------------------
  |  |  |  Branch (202:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1706|       |                    /* advance beyond source surrogate pair if it case-folds */
 1707|      0|                    ++s1;
 1708|      0|                } else /* isTrail(c1) */ {
 1709|       |                    /*
 1710|       |                     * we got a supplementary code point when hitting its trail surrogate,
 1711|       |                     * therefore the lead surrogate must have been the same as in the other string;
 1712|       |                     * compare this decomposition with the lead surrogate in the other string
 1713|       |                     * remember that this simulates bulk text replacement:
 1714|       |                     * the decomposition would replace the entire code point
 1715|       |                     */
 1716|      0|                    --s2;
 1717|      0|                    --m2;
 1718|      0|                    c2=*(s2-1);
 1719|      0|                }
 1720|      0|            }
 1721|       |
 1722|       |            /* push current level pointers */
 1723|      7|            stack1[0].start=start1;
 1724|      7|            stack1[0].s=s1;
 1725|      7|            stack1[0].limit=limit1;
 1726|      7|            ++level1;
 1727|       |
 1728|       |            /* copy the folding result to fold1[] */
 1729|      7|            if(length<=UCASE_MAX_STRING_LENGTH) {
  ------------------
  |  Branch (1729:16): [True: 0, False: 7]
  ------------------
 1730|      0|                u_memcpy(fold1, p, length);
  ------------------
  |  |  334|      0|#define u_memcpy U_ICU_ENTRY_POINT_RENAME(u_memcpy)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1731|      7|            } else {
 1732|      7|                int32_t i=0;
 1733|      7|                U16_APPEND_UNSAFE(fold1, i, length);
  ------------------
  |  |  367|      7|#define U16_APPEND_UNSAFE(s, i, c) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|      7|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |  368|      7|    if((uint32_t)(c)<=0xffff) { \
  |  |  ------------------
  |  |  |  Branch (368:8): [True: 7, False: 0]
  |  |  ------------------
  |  |  369|      7|        (s)[(i)++]=(uint16_t)(c); \
  |  |  370|      7|    } else { \
  |  |  371|      0|        (s)[(i)++]=(uint16_t)(((c)>>10)+0xd7c0); \
  |  |  372|      0|        (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \
  |  |  373|      0|    } \
  |  |  374|      7|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|      7|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1734|      7|                length=i;
 1735|      7|            }
 1736|       |
 1737|       |            /* set next level pointers to case folding */
 1738|      7|            start1=s1=fold1;
 1739|      7|            limit1=fold1+length;
 1740|       |
 1741|       |            /* get ready to read from decomposition, continue with loop */
 1742|      7|            c1=-1;
 1743|      7|            continue;
 1744|      7|        }
 1745|       |
 1746|    302|        if( level2==0 &&
  ------------------
  |  Branch (1746:13): [True: 237, False: 65]
  ------------------
 1747|    302|            (length = ucase_toFullFolding(cp2, &p, options)) >= 0
  ------------------
  |  |  580|    237|#define ucase_toFullFolding U_ICU_ENTRY_POINT_RENAME(ucase_toFullFolding)
  |  |  ------------------
  |  |  |  |  123|    237|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    237|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    237|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1747:13): [True: 237, False: 0]
  ------------------
 1748|    302|        ) {
 1749|       |            /* cp2 case-folds to the code point "length" or to p[length] */
 1750|    237|            if(U_IS_SURROGATE(c2)) {
  ------------------
  |  |  193|    237|#define U_IS_SURROGATE(c) (((c)&0xfffff800)==0xd800)
  |  |  ------------------
  |  |  |  Branch (193:27): [True: 0, False: 237]
  |  |  ------------------
  ------------------
 1751|      0|                if(U_IS_SURROGATE_LEAD(c2)) {
  ------------------
  |  |  202|      0|#define U_IS_SURROGATE_LEAD(c) (((c)&0x400)==0)
  |  |  ------------------
  |  |  |  Branch (202:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1752|       |                    /* advance beyond source surrogate pair if it case-folds */
 1753|      0|                    ++s2;
 1754|      0|                } else /* isTrail(c2) */ {
 1755|       |                    /*
 1756|       |                     * we got a supplementary code point when hitting its trail surrogate,
 1757|       |                     * therefore the lead surrogate must have been the same as in the other string;
 1758|       |                     * compare this decomposition with the lead surrogate in the other string
 1759|       |                     * remember that this simulates bulk text replacement:
 1760|       |                     * the decomposition would replace the entire code point
 1761|       |                     */
 1762|      0|                    --s1;
 1763|      0|                    --m2;
 1764|      0|                    c1=*(s1-1);
 1765|      0|                }
 1766|      0|            }
 1767|       |
 1768|       |            /* push current level pointers */
 1769|    237|            stack2[0].start=start2;
 1770|    237|            stack2[0].s=s2;
 1771|    237|            stack2[0].limit=limit2;
 1772|    237|            ++level2;
 1773|       |
 1774|       |            /* copy the folding result to fold2[] */
 1775|    237|            if(length<=UCASE_MAX_STRING_LENGTH) {
  ------------------
  |  Branch (1775:16): [True: 0, False: 237]
  ------------------
 1776|      0|                u_memcpy(fold2, p, length);
  ------------------
  |  |  334|      0|#define u_memcpy U_ICU_ENTRY_POINT_RENAME(u_memcpy)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1777|    237|            } else {
 1778|    237|                int32_t i=0;
 1779|    237|                U16_APPEND_UNSAFE(fold2, i, length);
  ------------------
  |  |  367|    237|#define U16_APPEND_UNSAFE(s, i, c) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|    237|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |  368|    237|    if((uint32_t)(c)<=0xffff) { \
  |  |  ------------------
  |  |  |  Branch (368:8): [True: 237, False: 0]
  |  |  ------------------
  |  |  369|    237|        (s)[(i)++]=(uint16_t)(c); \
  |  |  370|    237|    } else { \
  |  |  371|      0|        (s)[(i)++]=(uint16_t)(((c)>>10)+0xd7c0); \
  |  |  372|      0|        (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \
  |  |  373|      0|    } \
  |  |  374|    237|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|    237|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1780|    237|                length=i;
 1781|    237|            }
 1782|       |
 1783|       |            /* set next level pointers to case folding */
 1784|    237|            start2=s2=fold2;
 1785|    237|            limit2=fold2+length;
 1786|       |
 1787|       |            /* get ready to read from decomposition, continue with loop */
 1788|    237|            c2=-1;
 1789|    237|            continue;
 1790|    237|        }
 1791|       |
 1792|       |        /*
 1793|       |         * no decomposition/case folding, max level for both sides:
 1794|       |         * return difference result
 1795|       |         *
 1796|       |         * code point order comparison must not just return cp1-cp2
 1797|       |         * because when single surrogates are present then the surrogate pairs
 1798|       |         * that formed cp1 and cp2 may be from different string indexes
 1799|       |         *
 1800|       |         * example: { d800 d800 dc01 } vs. { d800 dc00 }, compare at second code units
 1801|       |         * c1=d800 cp1=10001 c2=dc00 cp2=10000
 1802|       |         * cp1-cp2>0 but c1-c2<0 and in fact in UTF-32 it is { d800 10001 } < { 10000 }
 1803|       |         *
 1804|       |         * therefore, use same fix-up as in ustring.c/uprv_strCompare()
 1805|       |         * except: uprv_strCompare() fetches c=*s while this functions fetches c=*s++
 1806|       |         * so we have slightly different pointer/start/limit comparisons here
 1807|       |         */
 1808|       |
 1809|     65|        if(c1>=0xd800 && c2>=0xd800 && (options&U_COMPARE_CODE_POINT_ORDER)) {
  ------------------
  |  |  159|      0|#define U_COMPARE_CODE_POINT_ORDER  0x8000
  ------------------
  |  Branch (1809:12): [True: 0, False: 65]
  |  Branch (1809:26): [True: 0, False: 0]
  |  Branch (1809:40): [True: 0, False: 0]
  ------------------
 1810|       |            /* subtract 0x2800 from BMP code points to make them smaller than supplementary ones */
 1811|      0|            if(
 1812|      0|                (c1<=0xdbff && s1!=limit1 && U16_IS_TRAIL(*s1)) ||
  ------------------
  |  |   67|      0|#define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
  |  |  ------------------
  |  |  |  Branch (67:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1812:18): [True: 0, False: 0]
  |  Branch (1812:32): [True: 0, False: 0]
  ------------------
 1813|      0|                (U16_IS_TRAIL(c1) && start1!=(s1-1) && U16_IS_LEAD(*(s1-2)))
  ------------------
  |  |   67|      0|#define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
  |  |  ------------------
  |  |  |  Branch (67:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                              (U16_IS_TRAIL(c1) && start1!=(s1-1) && U16_IS_LEAD(*(s1-2)))
  ------------------
  |  |   59|      0|#define U16_IS_LEAD(c) (((c)&0xfffffc00)==0xd800)
  |  |  ------------------
  |  |  |  Branch (59:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1813:38): [True: 0, False: 0]
  ------------------
 1814|      0|            ) {
 1815|       |                /* part of a surrogate pair, leave >=d800 */
 1816|      0|            } else {
 1817|       |                /* BMP code point - may be surrogate code point - make <d800 */
 1818|      0|                c1-=0x2800;
 1819|      0|            }
 1820|       |
 1821|      0|            if(
 1822|      0|                (c2<=0xdbff && s2!=limit2 && U16_IS_TRAIL(*s2)) ||
  ------------------
  |  |   67|      0|#define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
  |  |  ------------------
  |  |  |  Branch (67:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1822:18): [True: 0, False: 0]
  |  Branch (1822:32): [True: 0, False: 0]
  ------------------
 1823|      0|                (U16_IS_TRAIL(c2) && start2!=(s2-1) && U16_IS_LEAD(*(s2-2)))
  ------------------
  |  |   67|      0|#define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
  |  |  ------------------
  |  |  |  Branch (67:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                              (U16_IS_TRAIL(c2) && start2!=(s2-1) && U16_IS_LEAD(*(s2-2)))
  ------------------
  |  |   59|      0|#define U16_IS_LEAD(c) (((c)&0xfffffc00)==0xd800)
  |  |  ------------------
  |  |  |  Branch (59:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1823:38): [True: 0, False: 0]
  ------------------
 1824|      0|            ) {
 1825|       |                /* part of a surrogate pair, leave >=d800 */
 1826|      0|            } else {
 1827|       |                /* BMP code point - may be surrogate code point - make <d800 */
 1828|      0|                c2-=0x2800;
 1829|      0|            }
 1830|      0|        }
 1831|       |
 1832|     65|        cmpRes=c1-c2;
 1833|     65|        break;
 1834|    302|    }
 1835|       |
 1836|    165|    if(matchLen1) {
  ------------------
  |  Branch (1836:8): [True: 0, False: 165]
  ------------------
 1837|      0|        *matchLen1=static_cast<int32_t>(m1-org1);
 1838|      0|        *matchLen2=static_cast<int32_t>(m2-org2);
 1839|      0|    }
 1840|    165|    return cmpRes;
 1841|    165|}

u_memchr_78:
  241|  1.03k|u_memchr(const char16_t *s, char16_t c, int32_t count) {
  242|  1.03k|    if(count<=0) {
  ------------------
  |  Branch (242:8): [True: 0, False: 1.03k]
  ------------------
  243|      0|        return nullptr; /* no string */
  244|  1.03k|    } else if(U16_IS_SURROGATE(c)) {
  ------------------
  |  |   75|  1.03k|#define U16_IS_SURROGATE(c) U_IS_SURROGATE(c)
  |  |  ------------------
  |  |  |  |  193|  1.03k|#define U_IS_SURROGATE(c) (((c)&0xfffff800)==0xd800)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (193:27): [True: 0, False: 1.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  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|  1.03k|    } else {
  248|       |        /* trivial search for a BMP code point */
  249|  1.03k|        const char16_t *limit=s+count;
  250|  4.45k|        do {
  251|  4.45k|            if(*s==c) {
  ------------------
  |  Branch (251:16): [True: 931, False: 3.52k]
  ------------------
  252|    931|                return (char16_t *)s;
  253|    931|            }
  254|  4.45k|        } while(++s!=limit);
  ------------------
  |  Branch (254:17): [True: 3.42k, False: 102]
  ------------------
  255|    102|        return nullptr;
  256|  1.03k|    }
  257|  1.03k|}
u_strcmp_78:
  673|    243|{
  674|    243|    char16_t  c1, c2;
  675|       |
  676|  1.45k|    for(;;) {
  677|  1.45k|        c1=*s1++;
  678|  1.45k|        c2=*s2++;
  679|  1.45k|        if (c1 != c2 || c1 == 0) {
  ------------------
  |  Branch (679:13): [True: 0, False: 1.45k]
  |  Branch (679:25): [True: 243, False: 1.21k]
  ------------------
  680|    243|            break;
  681|    243|        }
  682|  1.45k|    }
  683|    243|    return (int32_t)c1 - (int32_t)c2;
  684|    243|}
u_strcpy_78:
  969|  5.47k|{
  970|  5.47k|    char16_t *anchor = dst;            /* save a pointer to start of dst */
  971|       |
  972|  21.8k|    while((*(dst++) = *(src++)) != 0) {     /* copy string 2 over              */
  ------------------
  |  Branch (972:11): [True: 16.4k, False: 5.47k]
  ------------------
  973|  16.4k|    }
  974|       |
  975|  5.47k|    return anchor;
  976|  5.47k|}
u_strlen_78:
  995|  2.99M|{
  996|       |#if U_SIZEOF_WCHAR_T == U_SIZEOF_UCHAR
  997|       |    return (int32_t)uprv_wcslen((const wchar_t *)s);
  998|       |#else
  999|  2.99M|    const char16_t *t = s;
 1000|  24.5M|    while(*t != 0) {
  ------------------
  |  Branch (1000:11): [True: 21.5M, False: 2.99M]
  ------------------
 1001|  21.5M|      ++t;
 1002|  21.5M|    }
 1003|  2.99M|    return t - s;
 1004|  2.99M|#endif
 1005|  2.99M|}
u_countChar32_78:
 1008|   146k|u_countChar32(const char16_t *s, int32_t length) {
 1009|   146k|    int32_t count;
 1010|       |
 1011|   146k|    if(s==nullptr || length<-1) {
  ------------------
  |  Branch (1011:8): [True: 0, False: 146k]
  |  Branch (1011:22): [True: 0, False: 146k]
  ------------------
 1012|      0|        return 0;
 1013|      0|    }
 1014|       |
 1015|   146k|    count=0;
 1016|   146k|    if(length>=0) {
  ------------------
  |  Branch (1016:8): [True: 146k, False: 0]
  ------------------
 1017|   412k|        while(length>0) {
  ------------------
  |  Branch (1017:15): [True: 266k, False: 146k]
  ------------------
 1018|   266k|            ++count;
 1019|   266k|            if(U16_IS_LEAD(*s) && length>=2 && U16_IS_TRAIL(*(s+1))) {
  ------------------
  |  |   59|   532k|#define U16_IS_LEAD(c) (((c)&0xfffffc00)==0xd800)
  |  |  ------------------
  |  |  |  Branch (59:24): [True: 3.60k, False: 262k]
  |  |  ------------------
  ------------------
                          if(U16_IS_LEAD(*s) && length>=2 && U16_IS_TRAIL(*(s+1))) {
  ------------------
  |  |   67|  3.60k|#define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
  |  |  ------------------
  |  |  |  Branch (67:25): [True: 3.60k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1019:35): [True: 3.60k, False: 0]
  ------------------
 1020|  3.60k|                s+=2;
 1021|  3.60k|                length-=2;
 1022|   262k|            } else {
 1023|   262k|                ++s;
 1024|   262k|                --length;
 1025|   262k|            }
 1026|   266k|        }
 1027|   146k|    } 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|   146k|    return count;
 1046|   146k|}
u_memcpy_78:
 1117|  1.86M|u_memcpy(char16_t *dest, const char16_t *src, int32_t count) {
 1118|  1.86M|    if(count > 0) {
  ------------------
  |  Branch (1118:8): [True: 1.86M, False: 0]
  ------------------
 1119|  1.86M|        uprv_memcpy(dest, src, (size_t)count*U_SIZEOF_UCHAR);
  ------------------
  |  |   42|  1.86M|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  1.86M|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  1.86M|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  1.86M|    _Pragma("clang diagnostic push") \
  |  |   45|  1.86M|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  1.86M|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.86M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  1.86M|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  1.86M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  1.86M|    _Pragma("clang diagnostic pop") \
  |  |   49|  1.86M|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  1.86M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  1.86M|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  1.86M|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1120|  1.86M|    }
 1121|  1.86M|    return dest;
 1122|  1.86M|}
u_terminateUChars_78:
 1469|  13.9k|u_terminateUChars(char16_t *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode) {
 1470|  13.9k|    __TERMINATE_STRING(dest, destCapacity, length, pErrorCode);
  ------------------
  |  | 1437|  13.9k|#define __TERMINATE_STRING(dest, destCapacity, length, pErrorCode) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  13.9k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  | 1438|  13.9k|    if(pErrorCode!=nullptr && U_SUCCESS(*pErrorCode)) {                    \
  |  |  ------------------
  |  |  |  Branch (1438:8): [True: 13.9k, False: 0]
  |  |  |  Branch (1438:31): [True: 6.21k, False: 7.68k]
  |  |  ------------------
  |  | 1439|  6.21k|        /* not a public function, so no complete argument checking */   \
  |  | 1440|  6.21k|                                                                        \
  |  | 1441|  6.21k|        if(length<0) {                                                  \
  |  |  ------------------
  |  |  |  Branch (1441:12): [True: 0, False: 6.21k]
  |  |  ------------------
  |  | 1442|      0|            /* assume that the caller handles this */                   \
  |  | 1443|  6.21k|        } else if(length<destCapacity) {                                \
  |  |  ------------------
  |  |  |  Branch (1443:19): [True: 6.21k, False: 0]
  |  |  ------------------
  |  | 1444|  6.21k|            /* NUL-terminate the string, the NUL fits */                \
  |  | 1445|  6.21k|            dest[length]=0;                                             \
  |  | 1446|  6.21k|            /* unset the not-terminated warning but leave all others */ \
  |  | 1447|  6.21k|            if(*pErrorCode==U_STRING_NOT_TERMINATED_WARNING) {          \
  |  |  ------------------
  |  |  |  Branch (1447:16): [True: 0, False: 6.21k]
  |  |  ------------------
  |  | 1448|      0|                *pErrorCode=U_ZERO_ERROR;                               \
  |  | 1449|      0|            }                                                           \
  |  | 1450|  6.21k|        } 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|  6.21k|    } \
  |  | 1458|  13.9k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  13.9k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1471|  13.9k|    return length;
 1472|  13.9k|}
u_terminateChars_78:
 1475|   163k|u_terminateChars(char *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode) {
 1476|   163k|    __TERMINATE_STRING(dest, destCapacity, length, pErrorCode);
  ------------------
  |  | 1437|   163k|#define __TERMINATE_STRING(dest, destCapacity, length, pErrorCode) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|   163k|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  | 1438|   163k|    if(pErrorCode!=nullptr && U_SUCCESS(*pErrorCode)) {                    \
  |  |  ------------------
  |  |  |  Branch (1438:8): [True: 163k, False: 0]
  |  |  |  Branch (1438:31): [True: 163k, False: 200]
  |  |  ------------------
  |  | 1439|   163k|        /* not a public function, so no complete argument checking */   \
  |  | 1440|   163k|                                                                        \
  |  | 1441|   163k|        if(length<0) {                                                  \
  |  |  ------------------
  |  |  |  Branch (1441:12): [True: 0, False: 163k]
  |  |  ------------------
  |  | 1442|      0|            /* assume that the caller handles this */                   \
  |  | 1443|   163k|        } else if(length<destCapacity) {                                \
  |  |  ------------------
  |  |  |  Branch (1443:19): [True: 136k, False: 27.0k]
  |  |  ------------------
  |  | 1444|   136k|            /* NUL-terminate the string, the NUL fits */                \
  |  | 1445|   136k|            dest[length]=0;                                             \
  |  | 1446|   136k|            /* unset the not-terminated warning but leave all others */ \
  |  | 1447|   136k|            if(*pErrorCode==U_STRING_NOT_TERMINATED_WARNING) {          \
  |  |  ------------------
  |  |  |  Branch (1447:16): [True: 0, False: 136k]
  |  |  ------------------
  |  | 1448|      0|                *pErrorCode=U_ZERO_ERROR;                               \
  |  | 1449|      0|            }                                                           \
  |  | 1450|   136k|        } else if(length==destCapacity) {                               \
  |  |  ------------------
  |  |  |  Branch (1450:19): [True: 27.0k, False: 12]
  |  |  ------------------
  |  | 1451|  27.0k|            /* unable to NUL-terminate, but the string itself fit - set a warning code */ \
  |  | 1452|  27.0k|            *pErrorCode=U_STRING_NOT_TERMINATED_WARNING;                \
  |  | 1453|  27.0k|        } else /* length>destCapacity */ {                              \
  |  | 1454|     12|            /* even the string itself did not fit - set an error code */ \
  |  | 1455|     12|            *pErrorCode=U_BUFFER_OVERFLOW_ERROR;                        \
  |  | 1456|     12|        }                                                               \
  |  | 1457|   163k|    } \
  |  | 1458|   163k|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|   163k|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1477|   163k|    return length;
 1478|   163k|}
ustr_hashUCharsN_78:
 1523|  1.79M|ustr_hashUCharsN(const char16_t *str, int32_t length) {
 1524|  1.79M|    STRING_HASH(char16_t, str, length, *p);
  ------------------
  |  | 1506|  1.79M|#define STRING_HASH(TYPE, STR, STRLEN, DEREF) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  1.79M|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  | 1507|  1.79M|    uint32_t hash = 0;                        \
  |  | 1508|  1.79M|    const TYPE *p = (const TYPE*) STR;        \
  |  | 1509|  1.79M|    if (p != nullptr) {                          \
  |  |  ------------------
  |  |  |  Branch (1509:9): [True: 1.79M, False: 0]
  |  |  ------------------
  |  | 1510|  1.79M|        int32_t len = (int32_t)(STRLEN);      \
  |  | 1511|  1.79M|        int32_t inc = ((len - 32) / 32) + 1;  \
  |  | 1512|  1.79M|        const TYPE *limit = p + len;          \
  |  | 1513|  7.92M|        while (p<limit) {                     \
  |  |  ------------------
  |  |  |  Branch (1513:16): [True: 6.13M, False: 1.79M]
  |  |  ------------------
  |  | 1514|  6.13M|            hash = (hash * 37) + DEREF;       \
  |  | 1515|  6.13M|            p += inc;                         \
  |  | 1516|  6.13M|        }                                     \
  |  | 1517|  1.79M|    }                                         \
  |  | 1518|  1.79M|    return static_cast<int32_t>(hash);        \
  |  | 1519|  1.79M|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  1.79M|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1525|  1.79M|}
ustr_hashCharsN_78:
 1528|  2.13M|ustr_hashCharsN(const char *str, int32_t length) {
 1529|  2.13M|    STRING_HASH(uint8_t, str, length, *p);
  ------------------
  |  | 1506|  2.13M|#define STRING_HASH(TYPE, STR, STRLEN, DEREF) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  2.13M|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  | 1507|  2.13M|    uint32_t hash = 0;                        \
  |  | 1508|  2.13M|    const TYPE *p = (const TYPE*) STR;        \
  |  | 1509|  2.13M|    if (p != nullptr) {                          \
  |  |  ------------------
  |  |  |  Branch (1509:9): [True: 2.13M, False: 0]
  |  |  ------------------
  |  | 1510|  2.13M|        int32_t len = (int32_t)(STRLEN);      \
  |  | 1511|  2.13M|        int32_t inc = ((len - 32) / 32) + 1;  \
  |  | 1512|  2.13M|        const TYPE *limit = p + len;          \
  |  | 1513|  40.6M|        while (p<limit) {                     \
  |  |  ------------------
  |  |  |  Branch (1513:16): [True: 38.5M, False: 2.13M]
  |  |  ------------------
  |  | 1514|  38.5M|            hash = (hash * 37) + DEREF;       \
  |  | 1515|  38.5M|            p += inc;                         \
  |  | 1516|  38.5M|        }                                     \
  |  | 1517|  2.13M|    }                                         \
  |  | 1518|  2.13M|    return static_cast<int32_t>(hash);        \
  |  | 1519|  2.13M|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  2.13M|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1530|  2.13M|}
ustr_hashICharsN_78:
 1533|  1.43M|ustr_hashICharsN(const char *str, int32_t length) {
 1534|  1.43M|    STRING_HASH(char, str, length, (uint8_t)uprv_tolower(*p));
  ------------------
  |  | 1506|  1.43M|#define STRING_HASH(TYPE, STR, STRLEN, DEREF) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  1.43M|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  | 1507|  1.43M|    uint32_t hash = 0;                        \
  |  | 1508|  1.43M|    const TYPE *p = (const TYPE*) STR;        \
  |  | 1509|  1.43M|    if (p != nullptr) {                          \
  |  |  ------------------
  |  |  |  Branch (1509:9): [True: 1.43M, False: 0]
  |  |  ------------------
  |  | 1510|  1.43M|        int32_t len = (int32_t)(STRLEN);      \
  |  | 1511|  1.43M|        int32_t inc = ((len - 32) / 32) + 1;  \
  |  | 1512|  1.43M|        const TYPE *limit = p + len;          \
  |  | 1513|  4.35M|        while (p<limit) {                     \
  |  |  ------------------
  |  |  |  Branch (1513:16): [True: 2.92M, False: 1.43M]
  |  |  ------------------
  |  | 1514|  2.92M|            hash = (hash * 37) + DEREF;       \
  |  | 1515|  2.92M|            p += inc;                         \
  |  | 1516|  2.92M|        }                                     \
  |  | 1517|  1.43M|    }                                         \
  |  | 1518|  1.43M|    return static_cast<int32_t>(hash);        \
  |  | 1519|  1.43M|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  1.43M|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1535|  1.43M|}

u_strFromUTF8WithSub_78:
  266|    470|              UErrorCode *pErrorCode){
  267|       |    /* args check */
  268|    470|    if(U_FAILURE(*pErrorCode)) {
  ------------------
  |  Branch (268:8): [True: 0, False: 470]
  ------------------
  269|      0|        return nullptr;
  270|      0|    }
  271|    470|    if( (src==nullptr && srcLength!=0) || srcLength < -1 ||
  ------------------
  |  Branch (271:10): [True: 0, False: 470]
  |  Branch (271:26): [True: 0, False: 0]
  |  Branch (271:43): [True: 0, False: 470]
  ------------------
  272|    470|        (destCapacity<0) || (dest == nullptr && destCapacity > 0) ||
  ------------------
  |  Branch (272:9): [True: 0, False: 470]
  |  Branch (272:30): [True: 0, False: 470]
  |  Branch (272:49): [True: 0, False: 0]
  ------------------
  273|    470|        subchar > 0x10ffff || U_IS_SURROGATE(subchar)
  ------------------
  |  |  193|    470|#define U_IS_SURROGATE(c) (((c)&0xfffff800)==0xd800)
  |  |  ------------------
  |  |  |  Branch (193:27): [True: 0, False: 470]
  |  |  ------------------
  ------------------
  |  Branch (273:9): [True: 0, False: 470]
  ------------------
  274|    470|    ) {
  275|      0|        *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR;
  276|      0|        return nullptr;
  277|      0|    }
  278|       |
  279|    470|    if(pNumSubstitutions!=nullptr) {
  ------------------
  |  Branch (279:8): [True: 0, False: 470]
  ------------------
  280|      0|        *pNumSubstitutions=0;
  281|      0|    }
  282|    470|    char16_t *pDest = dest;
  283|    470|    char16_t *pDestLimit = dest+destCapacity;
  284|    470|    int32_t reqLength = 0;
  285|    470|    int32_t numSubstitutions=0;
  286|       |
  287|       |    /*
  288|       |     * Inline processing of UTF-8 byte sequences:
  289|       |     *
  290|       |     * Byte sequences for the most common characters are handled inline in
  291|       |     * the conversion loops. In order to reduce the path lengths for those
  292|       |     * characters, the tests are arranged in a kind of binary search.
  293|       |     * ASCII (<=0x7f) is checked first, followed by the dividing point
  294|       |     * between 2- and 3-byte sequences (0xe0).
  295|       |     * The 3-byte branch is tested first to speed up CJK text.
  296|       |     * The compiler should combine the subtractions for the two tests for 0xe0.
  297|       |     * Each branch then tests for the other end of its range.
  298|       |     */
  299|       |
  300|    470|    if(srcLength < 0){
  ------------------
  |  Branch (300:8): [True: 0, False: 470]
  ------------------
  301|       |        /*
  302|       |         * Transform a NUL-terminated string.
  303|       |         * The code explicitly checks for NULs only in the lead byte position.
  304|       |         * A NUL byte in the trail byte position fails the trail byte range check anyway.
  305|       |         */
  306|      0|        int32_t i;
  307|      0|        UChar32 c;
  308|      0|        for(i = 0; (c = (uint8_t)src[i]) != 0 && (pDest < pDestLimit);) {
  ------------------
  |  Branch (308:20): [True: 0, False: 0]
  |  Branch (308:50): [True: 0, False: 0]
  ------------------
  309|       |            // modified copy of U8_NEXT()
  310|      0|            ++i;
  311|      0|            if(U8_IS_SINGLE(c)) {
  ------------------
  |  |  173|      0|#define U8_IS_SINGLE(c) (((c)&0x80)==0)
  |  |  ------------------
  |  |  |  Branch (173:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  312|      0|                *pDest++=(char16_t)c;
  313|      0|            } else {
  314|      0|                uint8_t __t1, __t2;
  315|      0|                if( /* handle U+0800..U+FFFF inline */
  316|      0|                        (0xe0<=(c) && (c)<0xf0) &&
  ------------------
  |  Branch (316:26): [True: 0, False: 0]
  |  Branch (316:39): [True: 0, False: 0]
  ------------------
  317|      0|                        U8_IS_VALID_LEAD3_AND_T1((c), src[i]) &&
  ------------------
  |  |   98|      0|#define U8_IS_VALID_LEAD3_AND_T1(lead, t1) (U8_LEAD3_T1_BITS[(lead)&0xf]&(1<<((uint8_t)(t1)>>5)))
  |  |  ------------------
  |  |  |  |   91|      0|#define U8_LEAD3_T1_BITS "\x20\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x10\x30\x30"
  |  |  ------------------
  |  |  |  Branch (98:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  318|      0|                        (__t2=src[(i)+1]-0x80)<=0x3f) {
  ------------------
  |  Branch (318:25): [True: 0, False: 0]
  ------------------
  319|      0|                    *pDest++ = (((c)&0xf)<<12)|((src[i]&0x3f)<<6)|__t2;
  320|      0|                    i+=2;
  321|      0|                } else if( /* handle U+0080..U+07FF inline */
  322|      0|                        ((c)<0xe0 && (c)>=0xc2) &&
  ------------------
  |  Branch (322:26): [True: 0, False: 0]
  |  Branch (322:38): [True: 0, False: 0]
  ------------------
  323|      0|                        (__t1=src[i]-0x80)<=0x3f) {
  ------------------
  |  Branch (323:25): [True: 0, False: 0]
  ------------------
  324|      0|                    *pDest++ = (((c)&0x1f)<<6)|__t1;
  325|      0|                    ++(i);
  326|      0|                } else {
  327|       |                    /* function call for "complicated" and error cases */
  328|      0|                    (c)=utf8_nextCharSafeBody((const uint8_t *)src, &(i), -1, c, -1);
  ------------------
  |  | 1920|      0|#define utf8_nextCharSafeBody U_ICU_ENTRY_POINT_RENAME(utf8_nextCharSafeBody)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  329|      0|                    if(c<0 && (++numSubstitutions, c = subchar) < 0) {
  ------------------
  |  Branch (329:24): [True: 0, False: 0]
  |  Branch (329:31): [True: 0, False: 0]
  ------------------
  330|      0|                        *pErrorCode = U_INVALID_CHAR_FOUND;
  331|      0|                        return nullptr;
  332|      0|                    } else if(c<=0xFFFF) {
  ------------------
  |  Branch (332:31): [True: 0, False: 0]
  ------------------
  333|      0|                        *(pDest++)=(char16_t)c;
  334|      0|                    } else {
  335|      0|                        *(pDest++)=U16_LEAD(c);
  ------------------
  |  |  123|      0|#define U16_LEAD(supplementary) (UChar)(((supplementary)>>10)+0xd7c0)
  ------------------
  336|      0|                        if(pDest<pDestLimit) {
  ------------------
  |  Branch (336:28): [True: 0, False: 0]
  ------------------
  337|      0|                            *(pDest++)=U16_TRAIL(c);
  ------------------
  |  |  132|      0|#define U16_TRAIL(supplementary) (UChar)(((supplementary)&0x3ff)|0xdc00)
  ------------------
  338|      0|                        } else {
  339|      0|                            reqLength++;
  340|      0|                            break;
  341|      0|                        }
  342|      0|                    }
  343|      0|                }
  344|      0|            }
  345|      0|        }
  346|       |
  347|       |        /* Pre-flight the rest of the string. */
  348|      0|        while((c = (uint8_t)src[i]) != 0) {
  ------------------
  |  Branch (348:15): [True: 0, False: 0]
  ------------------
  349|       |            // modified copy of U8_NEXT()
  350|      0|            ++i;
  351|      0|            if(U8_IS_SINGLE(c)) {
  ------------------
  |  |  173|      0|#define U8_IS_SINGLE(c) (((c)&0x80)==0)
  |  |  ------------------
  |  |  |  Branch (173:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  352|      0|                ++reqLength;
  353|      0|            } else {
  354|      0|                uint8_t __t1, __t2;
  355|      0|                if( /* handle U+0800..U+FFFF inline */
  356|      0|                        (0xe0<=(c) && (c)<0xf0) &&
  ------------------
  |  Branch (356:26): [True: 0, False: 0]
  |  Branch (356:39): [True: 0, False: 0]
  ------------------
  357|      0|                        U8_IS_VALID_LEAD3_AND_T1((c), src[i]) &&
  ------------------
  |  |   98|      0|#define U8_IS_VALID_LEAD3_AND_T1(lead, t1) (U8_LEAD3_T1_BITS[(lead)&0xf]&(1<<((uint8_t)(t1)>>5)))
  |  |  ------------------
  |  |  |  |   91|      0|#define U8_LEAD3_T1_BITS "\x20\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x10\x30\x30"
  |  |  ------------------
  |  |  |  Branch (98:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  358|      0|                        (__t2=src[(i)+1]-0x80)<=0x3f) {
  ------------------
  |  Branch (358:25): [True: 0, False: 0]
  ------------------
  359|      0|                    ++reqLength;
  360|      0|                    i+=2;
  361|      0|                } else if( /* handle U+0080..U+07FF inline */
  362|      0|                        ((c)<0xe0 && (c)>=0xc2) &&
  ------------------
  |  Branch (362:26): [True: 0, False: 0]
  |  Branch (362:38): [True: 0, False: 0]
  ------------------
  363|      0|                        (__t1=src[i]-0x80)<=0x3f) {
  ------------------
  |  Branch (363:25): [True: 0, False: 0]
  ------------------
  364|      0|                    ++reqLength;
  365|      0|                    ++(i);
  366|      0|                } else {
  367|       |                    /* function call for "complicated" and error cases */
  368|      0|                    (c)=utf8_nextCharSafeBody((const uint8_t *)src, &(i), -1, c, -1);
  ------------------
  |  | 1920|      0|#define utf8_nextCharSafeBody U_ICU_ENTRY_POINT_RENAME(utf8_nextCharSafeBody)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  369|      0|                    if(c<0 && (++numSubstitutions, c = subchar) < 0) {
  ------------------
  |  Branch (369:24): [True: 0, False: 0]
  |  Branch (369:31): [True: 0, False: 0]
  ------------------
  370|      0|                        *pErrorCode = U_INVALID_CHAR_FOUND;
  371|      0|                        return nullptr;
  372|      0|                    }
  373|      0|                    reqLength += U16_LENGTH(c);
  ------------------
  |  |  141|      0|#define U16_LENGTH(c) ((uint32_t)(c)<=0xffff ? 1 : 2)
  |  |  ------------------
  |  |  |  Branch (141:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  374|      0|                }
  375|      0|            }
  376|      0|        }
  377|    470|    } else /* srcLength >= 0 */ {
  378|       |        /* Faster loop without ongoing checking for srcLength and pDestLimit. */
  379|    470|        int32_t i = 0;
  380|    470|        UChar32 c;
  381|    470|        for(;;) {
  382|       |            /*
  383|       |             * Each iteration of the inner loop progresses by at most 3 UTF-8
  384|       |             * bytes and one char16_t, for most characters.
  385|       |             * For supplementary code points (4 & 2), which are rare,
  386|       |             * there is an additional adjustment.
  387|       |             */
  388|    470|            int32_t count = (int32_t)(pDestLimit - pDest);
  389|    470|            int32_t count2 = (srcLength - i) / 3;
  390|    470|            if(count > count2) {
  ------------------
  |  Branch (390:16): [True: 470, False: 0]
  ------------------
  391|    470|                count = count2; /* min(remaining dest, remaining src/3) */
  392|    470|            }
  393|    470|            if(count < 3) {
  ------------------
  |  Branch (393:16): [True: 470, False: 0]
  ------------------
  394|       |                /*
  395|       |                 * Too much overhead if we get near the end of the string,
  396|       |                 * continue with the next loop.
  397|       |                 */
  398|    470|                break;
  399|    470|            }
  400|       |
  401|      0|            do {
  402|       |                // modified copy of U8_NEXT()
  403|      0|                c = (uint8_t)src[i++];
  404|      0|                if(U8_IS_SINGLE(c)) {
  ------------------
  |  |  173|      0|#define U8_IS_SINGLE(c) (((c)&0x80)==0)
  |  |  ------------------
  |  |  |  Branch (173:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  405|      0|                    *pDest++=(char16_t)c;
  406|      0|                } else {
  407|      0|                    uint8_t __t1, __t2;
  408|      0|                    if( /* handle U+0800..U+FFFF inline */
  409|      0|                            (0xe0<=(c) && (c)<0xf0) &&
  ------------------
  |  Branch (409:30): [True: 0, False: 0]
  |  Branch (409:43): [True: 0, False: 0]
  ------------------
  410|      0|                            ((i)+1)<srcLength &&
  ------------------
  |  Branch (410:29): [True: 0, False: 0]
  ------------------
  411|      0|                            U8_IS_VALID_LEAD3_AND_T1((c), src[i]) &&
  ------------------
  |  |   98|      0|#define U8_IS_VALID_LEAD3_AND_T1(lead, t1) (U8_LEAD3_T1_BITS[(lead)&0xf]&(1<<((uint8_t)(t1)>>5)))
  |  |  ------------------
  |  |  |  |   91|      0|#define U8_LEAD3_T1_BITS "\x20\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x10\x30\x30"
  |  |  ------------------
  |  |  |  Branch (98:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  412|      0|                            (__t2=src[(i)+1]-0x80)<=0x3f) {
  ------------------
  |  Branch (412:29): [True: 0, False: 0]
  ------------------
  413|      0|                        *pDest++ = (((c)&0xf)<<12)|((src[i]&0x3f)<<6)|__t2;
  414|      0|                        i+=2;
  415|      0|                    } else if( /* handle U+0080..U+07FF inline */
  416|      0|                            ((c)<0xe0 && (c)>=0xc2) &&
  ------------------
  |  Branch (416:30): [True: 0, False: 0]
  |  Branch (416:42): [True: 0, False: 0]
  ------------------
  417|      0|                            ((i)!=srcLength) &&
  ------------------
  |  Branch (417:29): [True: 0, False: 0]
  ------------------
  418|      0|                            (__t1=src[i]-0x80)<=0x3f) {
  ------------------
  |  Branch (418:29): [True: 0, False: 0]
  ------------------
  419|      0|                        *pDest++ = (((c)&0x1f)<<6)|__t1;
  420|      0|                        ++(i);
  421|      0|                    } else {
  422|      0|                        if(c >= 0xf0 || subchar > 0xffff) {
  ------------------
  |  Branch (422:28): [True: 0, False: 0]
  |  Branch (422:41): [True: 0, False: 0]
  ------------------
  423|       |                            // We may read up to four bytes and write up to two UChars,
  424|       |                            // which we didn't account for with computing count,
  425|       |                            // so we adjust it here.
  426|      0|                            if(--count == 0) {
  ------------------
  |  Branch (426:32): [True: 0, False: 0]
  ------------------
  427|      0|                                --i;  // back out byte c
  428|      0|                                break;
  429|      0|                            }
  430|      0|                        }
  431|       |
  432|       |                        /* function call for "complicated" and error cases */
  433|      0|                        (c)=utf8_nextCharSafeBody((const uint8_t *)src, &(i), srcLength, c, -1);
  ------------------
  |  | 1920|      0|#define utf8_nextCharSafeBody U_ICU_ENTRY_POINT_RENAME(utf8_nextCharSafeBody)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  434|      0|                        if(c<0 && (++numSubstitutions, c = subchar) < 0) {
  ------------------
  |  Branch (434:28): [True: 0, False: 0]
  |  Branch (434:35): [True: 0, False: 0]
  ------------------
  435|      0|                            *pErrorCode = U_INVALID_CHAR_FOUND;
  436|      0|                            return nullptr;
  437|      0|                        } else if(c<=0xFFFF) {
  ------------------
  |  Branch (437:35): [True: 0, False: 0]
  ------------------
  438|      0|                            *(pDest++)=(char16_t)c;
  439|      0|                        } else {
  440|      0|                            *(pDest++)=U16_LEAD(c);
  ------------------
  |  |  123|      0|#define U16_LEAD(supplementary) (UChar)(((supplementary)>>10)+0xd7c0)
  ------------------
  441|      0|                            *(pDest++)=U16_TRAIL(c);
  ------------------
  |  |  132|      0|#define U16_TRAIL(supplementary) (UChar)(((supplementary)&0x3ff)|0xdc00)
  ------------------
  442|      0|                        }
  443|      0|                    }
  444|      0|                }
  445|      0|            } while(--count > 0);
  ------------------
  |  Branch (445:21): [True: 0, False: 0]
  ------------------
  446|      0|        }
  447|       |
  448|  1.42k|        while(i < srcLength && (pDest < pDestLimit)) {
  ------------------
  |  Branch (448:15): [True: 959, False: 470]
  |  Branch (448:32): [True: 959, False: 0]
  ------------------
  449|       |            // modified copy of U8_NEXT()
  450|    959|            c = (uint8_t)src[i++];
  451|    959|            if(U8_IS_SINGLE(c)) {
  ------------------
  |  |  173|    959|#define U8_IS_SINGLE(c) (((c)&0x80)==0)
  |  |  ------------------
  |  |  |  Branch (173:25): [True: 921, False: 38]
  |  |  ------------------
  ------------------
  452|    921|                *pDest++=(char16_t)c;
  453|    921|            } else {
  454|     38|                uint8_t __t1, __t2;
  455|     38|                if( /* handle U+0800..U+FFFF inline */
  456|     38|                        (0xe0<=(c) && (c)<0xf0) &&
  ------------------
  |  Branch (456:26): [True: 0, False: 38]
  |  Branch (456:39): [True: 0, False: 0]
  ------------------
  457|     38|                        ((i)+1)<srcLength &&
  ------------------
  |  Branch (457:25): [True: 0, False: 0]
  ------------------
  458|     38|                        U8_IS_VALID_LEAD3_AND_T1((c), src[i]) &&
  ------------------
  |  |   98|     38|#define U8_IS_VALID_LEAD3_AND_T1(lead, t1) (U8_LEAD3_T1_BITS[(lead)&0xf]&(1<<((uint8_t)(t1)>>5)))
  |  |  ------------------
  |  |  |  |   91|      0|#define U8_LEAD3_T1_BITS "\x20\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x10\x30\x30"
  |  |  ------------------
  |  |  |  Branch (98:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  459|     38|                        (__t2=src[(i)+1]-0x80)<=0x3f) {
  ------------------
  |  Branch (459:25): [True: 0, False: 0]
  ------------------
  460|      0|                    *pDest++ = (((c)&0xf)<<12)|((src[i]&0x3f)<<6)|__t2;
  461|      0|                    i+=2;
  462|     38|                } else if( /* handle U+0080..U+07FF inline */
  463|     38|                        ((c)<0xe0 && (c)>=0xc2) &&
  ------------------
  |  Branch (463:26): [True: 38, False: 0]
  |  Branch (463:38): [True: 26, False: 12]
  ------------------
  464|     38|                        ((i)!=srcLength) &&
  ------------------
  |  Branch (464:25): [True: 0, False: 26]
  ------------------
  465|     38|                        (__t1=src[i]-0x80)<=0x3f) {
  ------------------
  |  Branch (465:25): [True: 0, False: 0]
  ------------------
  466|      0|                    *pDest++ = (((c)&0x1f)<<6)|__t1;
  467|      0|                    ++(i);
  468|     38|                } else {
  469|       |                    /* function call for "complicated" and error cases */
  470|     38|                    (c)=utf8_nextCharSafeBody((const uint8_t *)src, &(i), srcLength, c, -1);
  ------------------
  |  | 1920|     38|#define utf8_nextCharSafeBody U_ICU_ENTRY_POINT_RENAME(utf8_nextCharSafeBody)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  471|     38|                    if(c<0 && (++numSubstitutions, c = subchar) < 0) {
  ------------------
  |  Branch (471:24): [True: 38, False: 0]
  |  Branch (471:31): [True: 0, False: 38]
  ------------------
  472|      0|                        *pErrorCode = U_INVALID_CHAR_FOUND;
  473|      0|                        return nullptr;
  474|     38|                    } else if(c<=0xFFFF) {
  ------------------
  |  Branch (474:31): [True: 38, False: 0]
  ------------------
  475|     38|                        *(pDest++)=(char16_t)c;
  476|     38|                    } else {
  477|      0|                        *(pDest++)=U16_LEAD(c);
  ------------------
  |  |  123|      0|#define U16_LEAD(supplementary) (UChar)(((supplementary)>>10)+0xd7c0)
  ------------------
  478|      0|                        if(pDest<pDestLimit) {
  ------------------
  |  Branch (478:28): [True: 0, False: 0]
  ------------------
  479|      0|                            *(pDest++)=U16_TRAIL(c);
  ------------------
  |  |  132|      0|#define U16_TRAIL(supplementary) (UChar)(((supplementary)&0x3ff)|0xdc00)
  ------------------
  480|      0|                        } else {
  481|      0|                            reqLength++;
  482|      0|                            break;
  483|      0|                        }
  484|      0|                    }
  485|     38|                }
  486|     38|            }
  487|    959|        }
  488|       |
  489|       |        /* Pre-flight the rest of the string. */
  490|    470|        while(i < srcLength) {
  ------------------
  |  Branch (490:15): [True: 0, False: 470]
  ------------------
  491|       |            // modified copy of U8_NEXT()
  492|      0|            c = (uint8_t)src[i++];
  493|      0|            if(U8_IS_SINGLE(c)) {
  ------------------
  |  |  173|      0|#define U8_IS_SINGLE(c) (((c)&0x80)==0)
  |  |  ------------------
  |  |  |  Branch (173:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  494|      0|                ++reqLength;
  495|      0|            } else {
  496|      0|                uint8_t __t1, __t2;
  497|      0|                if( /* handle U+0800..U+FFFF inline */
  498|      0|                        (0xe0<=(c) && (c)<0xf0) &&
  ------------------
  |  Branch (498:26): [True: 0, False: 0]
  |  Branch (498:39): [True: 0, False: 0]
  ------------------
  499|      0|                        ((i)+1)<srcLength &&
  ------------------
  |  Branch (499:25): [True: 0, False: 0]
  ------------------
  500|      0|                        U8_IS_VALID_LEAD3_AND_T1((c), src[i]) &&
  ------------------
  |  |   98|      0|#define U8_IS_VALID_LEAD3_AND_T1(lead, t1) (U8_LEAD3_T1_BITS[(lead)&0xf]&(1<<((uint8_t)(t1)>>5)))
  |  |  ------------------
  |  |  |  |   91|      0|#define U8_LEAD3_T1_BITS "\x20\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x10\x30\x30"
  |  |  ------------------
  |  |  |  Branch (98:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  501|      0|                        (__t2=src[(i)+1]-0x80)<=0x3f) {
  ------------------
  |  Branch (501:25): [True: 0, False: 0]
  ------------------
  502|      0|                    ++reqLength;
  503|      0|                    i+=2;
  504|      0|                } else if( /* handle U+0080..U+07FF inline */
  505|      0|                        ((c)<0xe0 && (c)>=0xc2) &&
  ------------------
  |  Branch (505:26): [True: 0, False: 0]
  |  Branch (505:38): [True: 0, False: 0]
  ------------------
  506|      0|                        ((i)!=srcLength) &&
  ------------------
  |  Branch (506:25): [True: 0, False: 0]
  ------------------
  507|      0|                        (__t1=src[i]-0x80)<=0x3f) {
  ------------------
  |  Branch (507:25): [True: 0, False: 0]
  ------------------
  508|      0|                    ++reqLength;
  509|      0|                    ++(i);
  510|      0|                } else {
  511|       |                    /* function call for "complicated" and error cases */
  512|      0|                    (c)=utf8_nextCharSafeBody((const uint8_t *)src, &(i), srcLength, c, -1);
  ------------------
  |  | 1920|      0|#define utf8_nextCharSafeBody U_ICU_ENTRY_POINT_RENAME(utf8_nextCharSafeBody)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  513|      0|                    if(c<0 && (++numSubstitutions, c = subchar) < 0) {
  ------------------
  |  Branch (513:24): [True: 0, False: 0]
  |  Branch (513:31): [True: 0, False: 0]
  ------------------
  514|      0|                        *pErrorCode = U_INVALID_CHAR_FOUND;
  515|      0|                        return nullptr;
  516|      0|                    }
  517|      0|                    reqLength += U16_LENGTH(c);
  ------------------
  |  |  141|      0|#define U16_LENGTH(c) ((uint32_t)(c)<=0xffff ? 1 : 2)
  |  |  ------------------
  |  |  |  Branch (141:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  518|      0|                }
  519|      0|            }
  520|      0|        }
  521|    470|    }
  522|       |
  523|    470|    reqLength+=(int32_t)(pDest - dest);
  524|       |
  525|    470|    if(pNumSubstitutions!=nullptr) {
  ------------------
  |  Branch (525:8): [True: 0, False: 470]
  ------------------
  526|      0|        *pNumSubstitutions=numSubstitutions;
  527|      0|    }
  528|       |
  529|    470|    if(pDestLength){
  ------------------
  |  Branch (529:8): [True: 470, False: 0]
  ------------------
  530|    470|        *pDestLength = reqLength;
  531|    470|    }
  532|       |
  533|       |    /* Terminate the buffer */
  534|    470|    u_terminateUChars(dest,destCapacity,reqLength,pErrorCode);
  ------------------
  |  |  408|    470|#define u_terminateUChars U_ICU_ENTRY_POINT_RENAME(u_terminateUChars)
  |  |  ------------------
  |  |  |  |  123|    470|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    470|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    470|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  535|       |
  536|    470|    return dest;
  537|    470|}

utf8_nextCharSafeBody_78:
  129|     38|utf8_nextCharSafeBody(const uint8_t *s, int32_t *pi, int32_t length, UChar32 c, int8_t strict) {
  130|       |    // *pi is one after byte c.
  131|     38|    int32_t i=*pi;
  132|       |    // length can be negative for NUL-terminated strings: Read and validate one byte at a time.
  133|     38|    if(i==length || c>0xf4) {
  ------------------
  |  Branch (133:8): [True: 38, False: 0]
  |  Branch (133:21): [True: 0, False: 0]
  ------------------
  134|       |        // end of string, or not a lead byte
  135|     38|    } else if(c>=0xf0) {
  ------------------
  |  Branch (135:15): [True: 0, False: 0]
  ------------------
  136|       |        // Test for 4-byte sequences first because
  137|       |        // U8_NEXT() handles shorter valid sequences inline.
  138|      0|        uint8_t t1=s[i], t2, t3;
  139|      0|        c&=7;
  140|      0|        if(U8_IS_VALID_LEAD4_AND_T1(c, t1) &&
  ------------------
  |  |  115|      0|#define U8_IS_VALID_LEAD4_AND_T1(lead, t1) (U8_LEAD4_T1_BITS[(uint8_t)(t1)>>4]&(1<<((lead)&7)))
  |  |  ------------------
  |  |  |  |  108|      0|#define U8_LEAD4_T1_BITS "\x00\x00\x00\x00\x00\x00\x00\x00\x1E\x0F\x0F\x0F\x00\x00\x00\x00"
  |  |  ------------------
  |  |  |  Branch (115:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  141|      0|                ++i!=length && (t2=s[i]-0x80)<=0x3f &&
  ------------------
  |  Branch (141:17): [True: 0, False: 0]
  |  Branch (141:32): [True: 0, False: 0]
  ------------------
  142|      0|                ++i!=length && (t3=s[i]-0x80)<=0x3f) {
  ------------------
  |  Branch (142:17): [True: 0, False: 0]
  |  Branch (142:32): [True: 0, False: 0]
  ------------------
  143|      0|            ++i;
  144|      0|            c=(c<<18)|((t1&0x3f)<<12)|(t2<<6)|t3;
  145|       |            // strict: forbid non-characters like U+fffe
  146|      0|            if(strict<=0 || !U_IS_UNICODE_NONCHAR(c)) {
  ------------------
  |  |  131|      0|    ((c)>=0xfdd0 && \
  |  |  ------------------
  |  |  |  Branch (131:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  132|      0|     ((c)<=0xfdef || ((c)&0xfffe)==0xfffe) && (c)<=0x10ffff)
  |  |  ------------------
  |  |  |  Branch (132:7): [True: 0, False: 0]
  |  |  |  Branch (132:22): [True: 0, False: 0]
  |  |  |  Branch (132:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (146:16): [True: 0, False: 0]
  ------------------
  147|      0|                *pi=i;
  148|      0|                return c;
  149|      0|            }
  150|      0|        }
  151|      0|    } else if(c>=0xe0) {
  ------------------
  |  Branch (151:15): [True: 0, False: 0]
  ------------------
  152|      0|        c&=0xf;
  153|      0|        if(strict!=-2) {
  ------------------
  |  Branch (153:12): [True: 0, False: 0]
  ------------------
  154|      0|            uint8_t t1=s[i], t2;
  155|      0|            if(U8_IS_VALID_LEAD3_AND_T1(c, t1) &&
  ------------------
  |  |   98|      0|#define U8_IS_VALID_LEAD3_AND_T1(lead, t1) (U8_LEAD3_T1_BITS[(lead)&0xf]&(1<<((uint8_t)(t1)>>5)))
  |  |  ------------------
  |  |  |  |   91|      0|#define U8_LEAD3_T1_BITS "\x20\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x10\x30\x30"
  |  |  ------------------
  |  |  |  Branch (98:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  156|      0|                    ++i!=length && (t2=s[i]-0x80)<=0x3f) {
  ------------------
  |  Branch (156:21): [True: 0, False: 0]
  |  Branch (156:36): [True: 0, False: 0]
  ------------------
  157|      0|                ++i;
  158|      0|                c=(c<<12)|((t1&0x3f)<<6)|t2;
  159|       |                // strict: forbid non-characters like U+fffe
  160|      0|                if(strict<=0 || !U_IS_UNICODE_NONCHAR(c)) {
  ------------------
  |  |  131|      0|    ((c)>=0xfdd0 && \
  |  |  ------------------
  |  |  |  Branch (131:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  132|      0|     ((c)<=0xfdef || ((c)&0xfffe)==0xfffe) && (c)<=0x10ffff)
  |  |  ------------------
  |  |  |  Branch (132:7): [True: 0, False: 0]
  |  |  |  Branch (132:22): [True: 0, False: 0]
  |  |  |  Branch (132:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (160:20): [True: 0, False: 0]
  ------------------
  161|      0|                    *pi=i;
  162|      0|                    return c;
  163|      0|                }
  164|      0|            }
  165|      0|        } else {
  166|       |            // strict=-2 -> lenient: allow surrogates
  167|      0|            uint8_t t1=s[i]-0x80, t2;
  168|      0|            if(t1<=0x3f && (c>0 || t1>=0x20) &&
  ------------------
  |  Branch (168:16): [True: 0, False: 0]
  |  Branch (168:29): [True: 0, False: 0]
  |  Branch (168:36): [True: 0, False: 0]
  ------------------
  169|      0|                    ++i!=length && (t2=s[i]-0x80)<=0x3f) {
  ------------------
  |  Branch (169:21): [True: 0, False: 0]
  |  Branch (169:36): [True: 0, False: 0]
  ------------------
  170|      0|                *pi=i+1;
  171|      0|                return (c<<12)|(t1<<6)|t2;
  172|      0|            }
  173|      0|        }
  174|      0|    } else if(c>=0xc2) {
  ------------------
  |  Branch (174:15): [True: 0, False: 0]
  ------------------
  175|      0|        uint8_t t1=s[i]-0x80;
  176|      0|        if(t1<=0x3f) {
  ------------------
  |  Branch (176:12): [True: 0, False: 0]
  ------------------
  177|      0|            *pi=i+1;
  178|      0|            return ((c-0xc0)<<6)|t1;
  179|      0|        }
  180|      0|    }  // else 0x80<=c<0xc2 is not a lead byte
  181|       |
  182|       |    /* error handling */
  183|     38|    c=errorValue(i-*pi, strict);
  184|     38|    *pi=i;
  185|     38|    return c;
  186|     38|}
utf_impl.cpp:_ZL10errorValueia:
   96|     38|errorValue(int32_t count, int8_t strict) {
   97|     38|    if(strict>=0) {
  ------------------
  |  Branch (97:8): [True: 0, False: 38]
  ------------------
   98|      0|        return utf8_errorValue[count];
   99|     38|    } else if(strict==-3) {
  ------------------
  |  Branch (99:15): [True: 0, False: 38]
  ------------------
  100|      0|        return 0xfffd;
  101|     38|    } else {
  102|     38|        return U_SENTINEL;
  ------------------
  |  |  469|     38|#define U_SENTINEL (-1)
  ------------------
  103|     38|    }
  104|     38|}

_ZN6icu_7811ICU_Utility17parseAsciiIntegerERKNS_13UnicodeStringERi:
  293|    650|int32_t ICU_Utility::parseAsciiInteger(const UnicodeString& str, int32_t& pos) {
  294|    650|    int32_t result = 0;
  295|    650|    char16_t c;
  296|  1.66k|    while (pos < str.length() && (c = str.charAt(pos)) >= u'0' && c <= u'9') {
  ------------------
  |  Branch (296:12): [True: 1.32k, False: 338]
  |  Branch (296:34): [True: 1.32k, False: 0]
  |  Branch (296:67): [True: 1.01k, False: 312]
  ------------------
  297|  1.01k|        result = result * 10 + (c - u'0');
  298|  1.01k|        pos++;
  299|  1.01k|    }
  300|    650|    return result;
  301|    650|}

_ZN6icu_7811ICU_Utility11parseNumberERKNS_13UnicodeStringERia:
  189|     96|                                 int32_t& pos, int8_t radix) {
  190|       |    // assert(pos[0] >= 0);
  191|       |    // assert(radix >= 2);
  192|       |    // assert(radix <= 36);
  193|     96|    int32_t n = 0;
  194|     96|    int32_t p = pos;
  195|    746|    while (p < text.length()) {
  ------------------
  |  Branch (195:12): [True: 679, False: 67]
  ------------------
  196|    679|        UChar32 ch = text.char32At(p);
  197|    679|        int32_t d = u_digit(ch, radix);
  ------------------
  |  |  229|    679|#define u_digit U_ICU_ENTRY_POINT_RENAME(u_digit)
  |  |  ------------------
  |  |  |  |  123|    679|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    679|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    679|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|    679|        if (d < 0) {
  ------------------
  |  Branch (198:13): [True: 25, False: 654]
  ------------------
  199|     25|            break;
  200|     25|        }
  201|    654|        int64_t update = radix*static_cast<int64_t>(n) + d;
  202|    654|        if (update > INT32_MAX) {
  ------------------
  |  Branch (202:13): [True: 4, False: 650]
  ------------------
  203|      4|            return -1;
  204|      4|        }
  205|    650|        n = static_cast<int32_t>(update);
  206|    650|        ++p;
  207|    650|    }
  208|     92|    if (p == pos) {
  ------------------
  |  Branch (208:9): [True: 16, False: 76]
  ------------------
  209|     16|        return -1;
  210|     16|    }
  211|     76|    pos = p;
  212|     76|    return n;
  213|     92|}

_ZN6icu_787UVectorC2EPFvPvEPFa8UElementS4_ER10UErrorCode:
   41|    862|        UVector(d, c, DEFAULT_CAPACITY, status) {
   42|    862|}
_ZN6icu_787UVectorC2EPFvPvEPFa8UElementS4_EiR10UErrorCode:
   45|  1.57k|    deleter(d),
   46|  1.57k|    comparer(c)
   47|  1.57k|{
   48|  1.57k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (48:9): [True: 0, False: 1.57k]
  ------------------
   49|      0|        return;
   50|      0|    }
   51|       |    // Fix bogus initialCapacity values; avoid malloc(0) and integer overflow
   52|  1.57k|    if ((initialCapacity < 1) || (initialCapacity > static_cast<int32_t>(INT32_MAX / sizeof(UElement)))) {
  ------------------
  |  Branch (52:9): [True: 0, False: 1.57k]
  |  Branch (52:34): [True: 0, False: 1.57k]
  ------------------
   53|      0|        initialCapacity = DEFAULT_CAPACITY;
   54|      0|    }
   55|  1.57k|    elements = static_cast<UElement*>(uprv_malloc(sizeof(UElement) * initialCapacity));
  ------------------
  |  | 1524|  1.57k|#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc)
  |  |  ------------------
  |  |  |  |  123|  1.57k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.57k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.57k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   56|  1.57k|    if (elements == nullptr) {
  ------------------
  |  Branch (56:9): [True: 0, False: 1.57k]
  ------------------
   57|      0|        status = U_MEMORY_ALLOCATION_ERROR;
   58|  1.57k|    } else {
   59|  1.57k|        capacity = initialCapacity;
   60|  1.57k|    }
   61|  1.57k|}
_ZN6icu_787UVectorD2Ev:
   63|  1.43k|UVector::~UVector() {
   64|  1.43k|    removeAllElements();
   65|  1.43k|    uprv_free(elements);
  ------------------
  |  | 1503|  1.43k|#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free)
  |  |  ------------------
  |  |  |  |  123|  1.43k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.43k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.43k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   66|  1.43k|    elements = nullptr;
   67|  1.43k|}
_ZN6icu_787UVector10addElementEPvR10UErrorCode:
  102|      1|void UVector::addElement(void* obj, UErrorCode &status) {
  103|      1|    U_ASSERT(deleter == nullptr);
  ------------------
  |  |   35|      1|#   define U_ASSERT(exp) (void)0
  ------------------
  104|      1|    if (ensureCapacity(count + 1, status)) {
  ------------------
  |  Branch (104:9): [True: 1, False: 0]
  ------------------
  105|      1|        elements[count++].pointer = obj;
  106|      1|    }
  107|      1|}
_ZN6icu_787UVector12adoptElementEPvR10UErrorCode:
  109|  1.37k|void UVector::adoptElement(void* obj, UErrorCode &status) {
  110|  1.37k|    U_ASSERT(deleter != nullptr);
  ------------------
  |  |   35|  1.37k|#   define U_ASSERT(exp) (void)0
  ------------------
  111|  1.37k|    if (ensureCapacity(count + 1, status)) {
  ------------------
  |  Branch (111:9): [True: 1.37k, False: 0]
  ------------------
  112|  1.37k|        elements[count++].pointer = obj;
  113|  1.37k|    } else {
  114|      0|        (*deleter)(obj);
  115|      0|    }
  116|  1.37k|}
_ZNK6icu_787UVector9elementAtEi:
  185|    308|void* UVector::elementAt(int32_t index) const {
  186|    308|    return (0 <= index && index < count) ? elements[index].pointer : nullptr;
  ------------------
  |  Branch (186:13): [True: 308, False: 0]
  |  Branch (186:27): [True: 308, False: 0]
  ------------------
  187|    308|}
_ZN6icu_787UVector17removeAllElementsEv:
  251|  1.43k|void UVector::removeAllElements() {
  252|  1.43k|    if (deleter != nullptr) {
  ------------------
  |  Branch (252:9): [True: 719, False: 717]
  ------------------
  253|    730|        for (int32_t i=0; i<count; ++i) {
  ------------------
  |  Branch (253:27): [True: 11, False: 719]
  ------------------
  254|     11|            if (elements[i].pointer != nullptr) {
  ------------------
  |  Branch (254:17): [True: 11, False: 0]
  ------------------
  255|     11|                (*deleter)(elements[i].pointer);
  256|     11|            }
  257|     11|        }
  258|    719|    }
  259|  1.43k|    count = 0;
  260|  1.43k|}
_ZNK6icu_787UVector7indexOfEPvi:
  288|    471|int32_t UVector::indexOf(void* obj, int32_t startIndex) const {
  289|    471|    UElement key;
  290|    471|    key.pointer = obj;
  291|    471|    return indexOf(key, startIndex, HINT_KEY_POINTER);
  292|    471|}
_ZNK6icu_787UVector7indexOfE8UElementia:
  300|    471|int32_t UVector::indexOf(UElement key, int32_t startIndex, int8_t hint) const {
  301|    471|    if (comparer != nullptr) {
  ------------------
  |  Branch (301:9): [True: 471, False: 0]
  ------------------
  302|  16.8k|        for (int32_t i=startIndex; i<count; ++i) {
  ------------------
  |  Branch (302:36): [True: 16.4k, False: 464]
  ------------------
  303|  16.4k|            if ((*comparer)(key, elements[i])) {
  ------------------
  |  Branch (303:17): [True: 7, False: 16.4k]
  ------------------
  304|      7|                return i;
  305|      7|            }
  306|  16.4k|        }
  307|    471|    } 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|    464|    return -1;
  324|    471|}
_ZN6icu_787UVector14ensureCapacityEiR10UErrorCode:
  326|  1.37k|UBool UVector::ensureCapacity(int32_t minimumCapacity, UErrorCode &status) {
  327|  1.37k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (327:9): [True: 0, False: 1.37k]
  ------------------
  328|      0|        return false;
  329|      0|    }
  330|  1.37k|    if (minimumCapacity < 0) {
  ------------------
  |  Branch (330:9): [True: 0, False: 1.37k]
  ------------------
  331|      0|        status = U_ILLEGAL_ARGUMENT_ERROR;
  332|      0|        return false;
  333|      0|    }
  334|  1.37k|    if (capacity < minimumCapacity) {
  ------------------
  |  Branch (334:9): [True: 54, False: 1.31k]
  ------------------
  335|     54|        if (capacity > (INT32_MAX - 1) / 2) {        	// integer overflow check
  ------------------
  |  Branch (335:13): [True: 0, False: 54]
  ------------------
  336|      0|            status = U_ILLEGAL_ARGUMENT_ERROR;
  337|      0|            return false;
  338|      0|        }
  339|     54|        int32_t newCap = capacity * 2;
  340|     54|        if (newCap < minimumCapacity) {
  ------------------
  |  Branch (340:13): [True: 0, False: 54]
  ------------------
  341|      0|            newCap = minimumCapacity;
  342|      0|        }
  343|     54|        if (newCap > static_cast<int32_t>(INT32_MAX / sizeof(UElement))) { // integer overflow check
  ------------------
  |  Branch (343:13): [True: 0, False: 54]
  ------------------
  344|       |            // We keep the original memory contents on bad minimumCapacity.
  345|      0|            status = U_ILLEGAL_ARGUMENT_ERROR;
  346|      0|            return false;
  347|      0|        }
  348|     54|        UElement* newElems = static_cast<UElement*>(uprv_realloc(elements, sizeof(UElement) * newCap));
  ------------------
  |  | 1536|     54|#define uprv_realloc U_ICU_ENTRY_POINT_RENAME(uprv_realloc)
  |  |  ------------------
  |  |  |  |  123|     54|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     54|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     54|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  349|     54|        if (newElems == nullptr) {
  ------------------
  |  Branch (349:13): [True: 0, False: 54]
  ------------------
  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|     54|        elements = newElems;
  355|     54|        capacity = newCap;
  356|     54|    }
  357|  1.37k|    return true;
  358|  1.37k|}
_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_787UVector4sizeEv:
  190|  3.77k|    inline int32_t size() const {return count;}
_ZNK6icu_787UVector8containsEPv:
  174|    471|    inline UBool contains(void* obj) const {return indexOf(obj) >= 0;}

_ZN6icu_7813BasicTimeZoneC2ERKNS_13UnicodeStringE:
   28|     67|: TimeZone(id) {
   29|     67|}
_ZN6icu_7813BasicTimeZoneC2ERKS0_:
   32|  7.11k|: TimeZone(source) {
   33|  7.11k|}
_ZN6icu_7813BasicTimeZoneD2Ev:
   35|  6.17k|BasicTimeZone::~BasicTimeZone() {
   36|  6.17k|}

_ZN6icu_7816BuddhistCalendarC2ERKNS_6LocaleER10UErrorCode:
   37|     23|:   GregorianCalendar(aLocale, success)
   38|     23|{
   39|     23|}
_ZN6icu_7816BuddhistCalendarD2Ev:
   42|     21|{
   43|     21|}
_ZNK6icu_7816BuddhistCalendar7getTypeEv:
   56|     55|{
   57|     55|    return "buddhist";
   58|     55|}

_ZN6icu_7814SharedCalendarD2Ev:
  208|  6.16k|SharedCalendar::~SharedCalendar() {
  209|  6.16k|    delete ptr;
  210|  6.16k|}
_ZNK6icu_7814LocaleCacheKeyINS_14SharedCalendarEE12createObjectEPKvR10UErrorCode:
  214|  7.16k|        const void * /*unusedCreationContext*/, UErrorCode &status) const {
  215|  7.16k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (215:9): [True: 0, False: 7.16k]
  ------------------
  216|      0|       return nullptr;
  217|      0|    }
  218|  7.16k|    Calendar *calendar = Calendar::makeInstance(fLoc, status);
  219|  7.16k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (219:9): [True: 0, False: 7.16k]
  ------------------
  220|      0|        return nullptr;
  221|      0|    }
  222|  7.16k|    SharedCalendar *shared = new SharedCalendar(calendar);
  223|  7.16k|    if (shared == nullptr) {
  ------------------
  |  Branch (223:9): [True: 0, False: 7.16k]
  ------------------
  224|      0|        delete calendar;
  225|      0|        status = U_MEMORY_ALLOCATION_ERROR;
  226|      0|        return nullptr;
  227|      0|    }
  228|  7.16k|    shared->addRef();
  229|  7.16k|    return shared;
  230|  7.16k|}
_ZN6icu_788CalendarC2EPNS_8TimeZoneERKNS_6LocaleER10UErrorCode:
  721|  7.16k|:   UObject(),
  722|  7.16k|fIsTimeSet(false),
  723|  7.16k|fAreFieldsSet(false),
  724|  7.16k|fAreAllFieldsSet(false),
  725|  7.16k|fAreFieldsVirtuallySet(false),
  726|  7.16k|fLenient(true),
  727|  7.16k|fRepeatedWallTime(UCAL_WALLTIME_LAST),
  728|  7.16k|fSkippedWallTime(UCAL_WALLTIME_LAST)
  729|  7.16k|{
  730|  7.16k|    LocalPointer<TimeZone> zone(adoptZone, success);
  731|  7.16k|    if (U_FAILURE(success)) {
  ------------------
  |  Branch (731:9): [True: 0, False: 7.16k]
  ------------------
  732|      0|        return;
  733|      0|    }
  734|  7.16k|    if (zone.isNull()) {
  ------------------
  |  Branch (734:9): [True: 0, False: 7.16k]
  ------------------
  735|       |#if defined (U_DEBUG_CAL)
  736|       |        fprintf(stderr, "%s:%d: ILLEGAL ARG because timezone cannot be 0\n",
  737|       |            __FILE__, __LINE__);
  738|       |#endif
  739|      0|        success = U_ILLEGAL_ARGUMENT_ERROR;
  740|      0|        return;
  741|      0|    }
  742|       |
  743|  7.16k|    clear();
  744|  7.16k|    fZone = zone.orphan();
  745|  7.16k|    setWeekData(aLocale, nullptr, success);
  746|  7.16k|}
_ZN6icu_788CalendarD2Ev:
  775|  6.16k|{
  776|  6.16k|    delete fZone;
  777|  6.16k|    delete actualLocale;
  778|  6.16k|    delete validLocale;
  779|  6.16k|}
_ZN6icu_788Calendar12makeInstanceERKNS_6LocaleER10UErrorCode:
  855|  7.16k|Calendar::makeInstance(const Locale& aLocale, UErrorCode& success) {
  856|  7.16k|    if (U_FAILURE(success)) {
  ------------------
  |  Branch (856:9): [True: 0, False: 7.16k]
  ------------------
  857|      0|        return nullptr;
  858|      0|    }
  859|       |
  860|  7.16k|    Locale actualLoc;
  861|  7.16k|    UObject* u = nullptr;
  862|       |
  863|  7.16k|#if !UCONFIG_NO_SERVICE
  864|  7.16k|    if (isCalendarServiceUsed()) {
  ------------------
  |  Branch (864:9): [True: 0, False: 7.16k]
  ------------------
  865|      0|        u = getCalendarService(success)->get(aLocale, LocaleKey::KIND_ANY, &actualLoc, success);
  866|      0|    }
  867|  7.16k|    else
  868|  7.16k|#endif
  869|  7.16k|    {
  870|  7.16k|        u = createStandardCalendar(getCalendarTypeForLocale(aLocale.getName()), aLocale, success);
  871|  7.16k|    }
  872|  7.16k|    Calendar* c = nullptr;
  873|       |
  874|  7.16k|    if(U_FAILURE(success) || !u) {
  ------------------
  |  Branch (874:8): [True: 0, False: 7.16k]
  |  Branch (874:30): [True: 0, False: 7.16k]
  ------------------
  875|      0|        if(U_SUCCESS(success)) { // Propagate some kind of err
  ------------------
  |  Branch (875:12): [True: 0, False: 0]
  ------------------
  876|      0|            success = U_INTERNAL_PROGRAM_ERROR;
  877|      0|        }
  878|      0|        return nullptr;
  879|      0|    }
  880|       |
  881|  7.16k|#if !UCONFIG_NO_SERVICE
  882|  7.16k|    const UnicodeString* str = dynamic_cast<const UnicodeString*>(u);
  883|  7.16k|    if(str != nullptr) {
  ------------------
  |  Branch (883:8): [True: 0, False: 7.16k]
  ------------------
  884|       |        // It's a unicode string telling us what type of calendar to load ("gregorian", etc)
  885|       |        // Create a Locale over this string
  886|      0|        Locale l("");
  887|      0|        LocaleUtility::initLocaleFromName(*str, l);
  888|       |
  889|       |#ifdef U_DEBUG_CALSVC
  890|       |        fprintf(stderr, "Calendar::createInstance(%s), looking up [%s]\n", aLocale.getName(), l.getName());
  891|       |#endif
  892|       |
  893|      0|        Locale actualLoc2;
  894|      0|        delete u;
  895|      0|        u = nullptr;
  896|       |
  897|       |        // Don't overwrite actualLoc, since the actual loc from this call
  898|       |        // may be something like "@calendar=gregorian" -- TODO investigate
  899|       |        // further...
  900|      0|        c = (Calendar*)getCalendarService(success)->get(l, LocaleKey::KIND_ANY, &actualLoc2, success);
  901|       |
  902|      0|        if(U_FAILURE(success) || !c) {
  ------------------
  |  Branch (902:12): [True: 0, False: 0]
  |  Branch (902:34): [True: 0, False: 0]
  ------------------
  903|      0|            if(U_SUCCESS(success)) {
  ------------------
  |  Branch (903:16): [True: 0, False: 0]
  ------------------
  904|      0|                success = U_INTERNAL_PROGRAM_ERROR; // Propagate some err
  905|      0|            }
  906|      0|            return nullptr;
  907|      0|        }
  908|       |
  909|      0|        str = dynamic_cast<const UnicodeString*>(c);
  910|      0|        if(str != nullptr) {
  ------------------
  |  Branch (910:12): [True: 0, False: 0]
  ------------------
  911|       |            // recursed! Second lookup returned a UnicodeString.
  912|       |            // Perhaps DefaultCalendar{} was set to another locale.
  913|       |#ifdef U_DEBUG_CALSVC
  914|       |            char tmp[200];
  915|       |            // Extract a char* out of it..
  916|       |            int32_t len = str->length();
  917|       |            int32_t actLen = sizeof(tmp)-1;
  918|       |            if(len > actLen) {
  919|       |                len = actLen;
  920|       |            }
  921|       |            str->extract(0,len,tmp);
  922|       |            tmp[len]=0;
  923|       |
  924|       |            fprintf(stderr, "err - recursed, 2nd lookup was unistring %s\n", tmp);
  925|       |#endif
  926|      0|            success = U_MISSING_RESOURCE_ERROR;  // requested a calendar type which could NOT be found.
  927|      0|            delete c;
  928|      0|            return nullptr;
  929|      0|        }
  930|       |#ifdef U_DEBUG_CALSVC
  931|       |        fprintf(stderr, "%p: setting week count data to locale %s, actual locale %s\n", c, (const char*)aLocale.getName(), (const char *)actualLoc.getName());
  932|       |#endif
  933|      0|        c->setWeekData(aLocale, c->getType(), success);  // set the correct locale (this was an indirect calendar)
  934|       |
  935|      0|        char keyword[ULOC_FULLNAME_CAPACITY] = "";
  936|      0|        UErrorCode tmpStatus = U_ZERO_ERROR;
  937|      0|        l.getKeywordValue("calendar", keyword, ULOC_FULLNAME_CAPACITY, tmpStatus);
  ------------------
  |  |  264|      0|#define ULOC_FULLNAME_CAPACITY 157
  ------------------
  938|      0|        if (U_SUCCESS(tmpStatus) && uprv_strcmp(keyword, "iso8601") == 0) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (938:13): [True: 0, False: 0]
  |  Branch (938:37): [True: 0, False: 0]
  ------------------
  939|      0|            c->setFirstDayOfWeek(UCAL_MONDAY);
  940|      0|            c->setMinimalDaysInFirstWeek(4);
  941|      0|        }
  942|      0|    }
  943|  7.16k|    else
  944|  7.16k|#endif /* UCONFIG_NO_SERVICE */
  945|  7.16k|    {
  946|       |        // a calendar was returned - we assume the factory did the right thing.
  947|  7.16k|        c = (Calendar*)u;
  948|  7.16k|    }
  949|       |
  950|  7.16k|    return c;
  951|  7.16k|}
_ZN6icu_788Calendar25getCalendarTypeFromLocaleERKNS_6LocaleEPciR10UErrorCode:
  995|  13.5k|        UErrorCode &success) {
  996|  13.5k|    const SharedCalendar *shared = nullptr;
  997|  13.5k|    UnifiedCache::getByLocale(aLocale, shared, success);
  998|  13.5k|    if (U_FAILURE(success)) {
  ------------------
  |  Branch (998:9): [True: 0, False: 13.5k]
  ------------------
  999|      0|        return;
 1000|      0|    }
 1001|  13.5k|    uprv_strncpy(typeBuffer, (*shared)->getType(), typeBufferSize);
  ------------------
  |  |   43|  13.5k|#define uprv_strncpy(dst, src, size) U_STANDARD_CPP_NAMESPACE strncpy(dst, src, size)
  |  |  ------------------
  |  |  |  |  393|  13.5k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1002|  13.5k|    shared->removeRef();
 1003|  13.5k|    if (typeBuffer[typeBufferSize - 1]) {
  ------------------
  |  Branch (1003:9): [True: 0, False: 13.5k]
  ------------------
 1004|      0|        success = U_BUFFER_OVERFLOW_ERROR;
 1005|      0|    }
 1006|  13.5k|}
_ZN6icu_788Calendar6getNowEv:
 1093|  7.05k|{
 1094|  7.05k|    return uprv_getUTCtime(); // return as milliseconds
  ------------------
  |  | 1512|  7.05k|#define uprv_getUTCtime U_ICU_ENTRY_POINT_RENAME(uprv_getUTCtime)
  |  |  ------------------
  |  |  |  |  123|  7.05k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.05k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.05k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1095|  7.05k|}
_ZN6icu_788Calendar15setTimeInMillisEdR10UErrorCode:
 1129|  7.05k|Calendar::setTimeInMillis( double millis, UErrorCode& status ) {
 1130|  7.05k|    if(U_FAILURE(status))
  ------------------
  |  Branch (1130:8): [True: 0, False: 7.05k]
  ------------------
 1131|      0|        return;
 1132|       |
 1133|  7.05k|    if (millis > MAX_MILLIS) {
  ------------------
  |  |  158|  7.05k|#define MAX_MILLIS ((MAX_JULIAN - kEpochStartAsJulianDay) * kOneDay)
  |  |  ------------------
  |  |  |  |  152|  7.05k|#define MAX_JULIAN (+0x7F000000)
  |  |  ------------------
  |  |               #define MAX_MILLIS ((MAX_JULIAN - kEpochStartAsJulianDay) * kOneDay)
  |  |  ------------------
  |  |  |  |  127|  7.05k|#define kEpochStartAsJulianDay  2440588 // January 1, 1970 (Gregorian)
  |  |  ------------------
  |  |               #define MAX_MILLIS ((MAX_JULIAN - kEpochStartAsJulianDay) * kOneDay)
  |  |  ------------------
  |  |  |  |  117|  7.05k|#define kOneDay    (1.0 * U_MILLIS_PER_DAY)       //  86,400,000
  |  |  |  |  ------------------
  |  |  |  |  |  |  227|  7.05k|#define U_MILLIS_PER_DAY       (86400000)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1133:9): [True: 0, False: 7.05k]
  ------------------
 1134|      0|        if(isLenient()) {
  ------------------
  |  Branch (1134:12): [True: 0, False: 0]
  ------------------
 1135|      0|            millis = MAX_MILLIS;
  ------------------
  |  |  158|      0|#define MAX_MILLIS ((MAX_JULIAN - kEpochStartAsJulianDay) * kOneDay)
  |  |  ------------------
  |  |  |  |  152|      0|#define MAX_JULIAN (+0x7F000000)
  |  |  ------------------
  |  |               #define MAX_MILLIS ((MAX_JULIAN - kEpochStartAsJulianDay) * kOneDay)
  |  |  ------------------
  |  |  |  |  127|      0|#define kEpochStartAsJulianDay  2440588 // January 1, 1970 (Gregorian)
  |  |  ------------------
  |  |               #define MAX_MILLIS ((MAX_JULIAN - kEpochStartAsJulianDay) * kOneDay)
  |  |  ------------------
  |  |  |  |  117|      0|#define kOneDay    (1.0 * U_MILLIS_PER_DAY)       //  86,400,000
  |  |  |  |  ------------------
  |  |  |  |  |  |  227|      0|#define U_MILLIS_PER_DAY       (86400000)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1136|      0|        } else {
 1137|      0|		    status = U_ILLEGAL_ARGUMENT_ERROR;
 1138|      0|		    return;
 1139|      0|        }
 1140|  7.05k|    } else if (millis < MIN_MILLIS) {
  ------------------
  |  |  146|  7.05k|#define MIN_MILLIS ((MIN_JULIAN - kEpochStartAsJulianDay) * kOneDay)
  |  |  ------------------
  |  |  |  |  140|  7.05k|#define MIN_JULIAN (-0x7F000000)
  |  |  ------------------
  |  |               #define MIN_MILLIS ((MIN_JULIAN - kEpochStartAsJulianDay) * kOneDay)
  |  |  ------------------
  |  |  |  |  127|  7.05k|#define kEpochStartAsJulianDay  2440588 // January 1, 1970 (Gregorian)
  |  |  ------------------
  |  |               #define MIN_MILLIS ((MIN_JULIAN - kEpochStartAsJulianDay) * kOneDay)
  |  |  ------------------
  |  |  |  |  117|  7.05k|#define kOneDay    (1.0 * U_MILLIS_PER_DAY)       //  86,400,000
  |  |  |  |  ------------------
  |  |  |  |  |  |  227|  7.05k|#define U_MILLIS_PER_DAY       (86400000)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1140:16): [True: 0, False: 7.05k]
  ------------------
 1141|      0|        if(isLenient()) {
  ------------------
  |  Branch (1141:12): [True: 0, False: 0]
  ------------------
 1142|      0|            millis = MIN_MILLIS;
  ------------------
  |  |  146|      0|#define MIN_MILLIS ((MIN_JULIAN - kEpochStartAsJulianDay) * kOneDay)
  |  |  ------------------
  |  |  |  |  140|      0|#define MIN_JULIAN (-0x7F000000)
  |  |  ------------------
  |  |               #define MIN_MILLIS ((MIN_JULIAN - kEpochStartAsJulianDay) * kOneDay)
  |  |  ------------------
  |  |  |  |  127|      0|#define kEpochStartAsJulianDay  2440588 // January 1, 1970 (Gregorian)
  |  |  ------------------
  |  |               #define MIN_MILLIS ((MIN_JULIAN - kEpochStartAsJulianDay) * kOneDay)
  |  |  ------------------
  |  |  |  |  117|      0|#define kOneDay    (1.0 * U_MILLIS_PER_DAY)       //  86,400,000
  |  |  |  |  ------------------
  |  |  |  |  |  |  227|      0|#define U_MILLIS_PER_DAY       (86400000)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1143|      0|        } else {
 1144|      0|    		status = U_ILLEGAL_ARGUMENT_ERROR;
 1145|      0|	    	return;
 1146|      0|        }
 1147|  7.05k|    } else if (uprv_isNaN(millis)) {
  ------------------
  |  | 1519|  7.05k|#define uprv_isNaN U_ICU_ENTRY_POINT_RENAME(uprv_isNaN)
  |  |  ------------------
  |  |  |  |  123|  7.05k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.05k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.05k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1147:16): [True: 0, False: 7.05k]
  ------------------
 1148|      0|        status = U_ILLEGAL_ARGUMENT_ERROR;
 1149|      0|        return;
 1150|      0|    }
 1151|       |
 1152|  7.05k|    fTime = millis;
 1153|  7.05k|    fAreFieldsSet = fAreAllFieldsSet = false;
 1154|  7.05k|    fIsTimeSet = fAreFieldsVirtuallySet = true;
 1155|       |
 1156|  7.05k|    uprv_memset(fFields, 0, sizeof(fFields));
  ------------------
  |  |  100|  7.05k|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|  7.05k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1157|  7.05k|    uprv_memset(fStamp, kUnset, sizeof(fStamp));
  ------------------
  |  |  100|  7.05k|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|  7.05k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1158|  7.05k|    fNextStamp = kMinimumUserStamp;
 1159|  7.05k|}
_ZN6icu_788Calendar5clearEv:
 1268|  7.16k|{
 1269|  7.16k|    uprv_memset(fFields, 0, sizeof(fFields));
  ------------------
  |  |  100|  7.16k|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|  7.16k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1270|  7.16k|    uprv_memset(fStamp, kUnset, sizeof(fStamp));
  ------------------
  |  |  100|  7.16k|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|  7.16k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1271|  7.16k|    fNextStamp = kMinimumUserStamp;
 1272|  7.16k|    fIsTimeSet = fAreFieldsSet = fAreAllFieldsSet = fAreFieldsVirtuallySet = false;
 1273|       |    // fTime is not 'cleared' - may be used if no fields are set.
 1274|  7.16k|}
_ZN6icu_788Calendar11setWeekDataERKNS_6LocaleEPKcR10UErrorCode:
 4075|  7.16k|{
 4076|       |
 4077|  7.16k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (4077:9): [True: 0, False: 7.16k]
  ------------------
 4078|      0|        return;
 4079|      0|    }
 4080|       |
 4081|  7.16k|    fFirstDayOfWeek = UCAL_SUNDAY;
 4082|  7.16k|    fMinimalDaysInFirstWeek = 1;
 4083|  7.16k|    fWeekendOnset = UCAL_SATURDAY;
 4084|  7.16k|    fWeekendOnsetMillis = 0;
 4085|  7.16k|    fWeekendCease = UCAL_SUNDAY;
 4086|  7.16k|    fWeekendCeaseMillis = 86400000; // 24*60*60*1000
 4087|       |
 4088|       |    // Since week and weekend data is territory based instead of language based,
 4089|       |    // we may need to tweak the locale that we are using to try to get the appropriate
 4090|       |    // values, using the following logic:
 4091|       |    // 1). If the locale has a language but no territory, use the territory as defined by
 4092|       |    //     the likely subtags.
 4093|       |    // 2). If the locale has a script designation then we ignore it,
 4094|       |    //     then remove it ( i.e. "en_Latn_US" becomes "en_US" )
 4095|       |
 4096|  7.16k|    UErrorCode myStatus = U_ZERO_ERROR;
 4097|       |
 4098|  7.16k|    Locale min(desiredLocale);
 4099|  7.16k|    min.minimizeSubtags(myStatus);
 4100|  7.16k|    Locale useLocale;
 4101|  7.16k|    if ( uprv_strlen(desiredLocale.getCountry()) == 0 ||
  ------------------
  |  |   37|  7.16k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  7.16k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (4101:10): [True: 4.35k, False: 2.81k]
  ------------------
 4102|  7.16k|         (uprv_strlen(desiredLocale.getScript()) > 0 && uprv_strlen(min.getScript()) == 0) ) {
  ------------------
  |  |   37|  2.81k|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|  2.81k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
                       (uprv_strlen(desiredLocale.getScript()) > 0 && uprv_strlen(min.getScript()) == 0) ) {
  ------------------
  |  |   37|    307|#define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str)
  |  |  ------------------
  |  |  |  |  393|    307|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (4102:11): [True: 307, False: 2.50k]
  |  Branch (4102:57): [True: 158, False: 149]
  ------------------
 4103|  4.50k|        myStatus = U_ZERO_ERROR;
 4104|  4.50k|        Locale max(desiredLocale);
 4105|  4.50k|        max.addLikelySubtags(myStatus);
 4106|  4.50k|        useLocale = Locale(max.getLanguage(),max.getCountry());
 4107|  4.50k|    } else {
 4108|  2.65k|        useLocale = desiredLocale;
 4109|  2.65k|    }
 4110|       |
 4111|       |    /* The code here is somewhat of a hack, since week data and weekend data aren't really tied to
 4112|       |       a specific calendar, they aren't truly locale data.  But this is the only place where valid and
 4113|       |       actual locale can be set, so we take a shot at it here by loading a representative resource
 4114|       |       from the calendar data.  The code used to use the dateTimeElements resource to get first day
 4115|       |       of week data, but this was moved to supplemental data under ticket 7755. (JCE) */
 4116|       |
 4117|       |    // Get the monthNames resource bundle for the calendar 'type'. Fallback to gregorian if the resource is not
 4118|       |    // found.
 4119|  7.16k|    LocalUResourceBundlePointer calData(ures_open(nullptr, useLocale.getBaseName(), &status));
  ------------------
  |  | 1691|  7.16k|#define ures_open U_ICU_ENTRY_POINT_RENAME(ures_open)
  |  |  ------------------
  |  |  |  |  123|  7.16k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.16k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.16k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4120|  7.16k|    ures_getByKey(calData.getAlias(), gCalendar, calData.getAlias(), &status);
  ------------------
  |  | 1661|  7.16k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  7.16k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.16k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.16k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4121|       |
 4122|  7.16k|    LocalUResourceBundlePointer monthNames;
 4123|  7.16k|    if (type != nullptr && *type != '\0' && uprv_strcmp(type, gGregorian) != 0) {
  ------------------
  |  |   38|      0|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (4123:9): [True: 0, False: 7.16k]
  |  Branch (4123:28): [True: 0, False: 0]
  |  Branch (4123:45): [True: 0, False: 0]
  ------------------
 4124|      0|        monthNames.adoptInstead(ures_getByKeyWithFallback(calData.getAlias(), type, nullptr, &status));
  ------------------
  |  | 1662|      0|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4125|      0|        ures_getByKeyWithFallback(monthNames.getAlias(), gMonthNames,
  ------------------
  |  | 1662|      0|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4126|      0|                                  monthNames.getAlias(), &status);
 4127|      0|    }
 4128|       |
 4129|  7.16k|    if (monthNames.isNull() || status == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (4129:9): [True: 7.16k, False: 0]
  |  Branch (4129:32): [True: 0, False: 0]
  ------------------
 4130|  7.16k|        status = U_ZERO_ERROR;
 4131|  7.16k|        monthNames.adoptInstead(ures_getByKeyWithFallback(calData.getAlias(), gGregorian,
  ------------------
  |  | 1662|  7.16k|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|  7.16k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.16k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.16k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4132|  7.16k|                                                          monthNames.orphan(), &status));
 4133|  7.16k|        ures_getByKeyWithFallback(monthNames.getAlias(), gMonthNames,
  ------------------
  |  | 1662|  7.16k|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|  7.16k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.16k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.16k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4134|  7.16k|                                  monthNames.getAlias(), &status);
 4135|  7.16k|    }
 4136|       |
 4137|  7.16k|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (4137:9): [True: 7.15k, False: 10]
  ------------------
 4138|  7.15k|        U_LOCALE_BASED(locBased,*this);
  ------------------
  |  |   25|  7.15k|  LocaleBased varname((objname).validLocale, (objname).actualLocale)
  ------------------
 4139|  7.15k|        locBased.setLocaleIDs(ures_getLocaleByType(monthNames.getAlias(), ULOC_VALID_LOCALE, &status),
  ------------------
  |  | 1669|  7.15k|#define ures_getLocaleByType U_ICU_ENTRY_POINT_RENAME(ures_getLocaleByType)
  |  |  ------------------
  |  |  |  |  123|  7.15k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.15k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.15k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4140|  7.15k|                              ures_getLocaleByType(monthNames.getAlias(), ULOC_ACTUAL_LOCALE, &status), status);
  ------------------
  |  | 1669|  7.15k|#define ures_getLocaleByType U_ICU_ENTRY_POINT_RENAME(ures_getLocaleByType)
  |  |  ------------------
  |  |  |  |  123|  7.15k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.15k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.15k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4141|  7.15k|    } else {
 4142|     10|        status = U_USING_FALLBACK_WARNING;
 4143|     10|        return;
 4144|     10|    }
 4145|       |
 4146|  7.15k|    CharString region = ulocimp_getRegionForSupplementalData(desiredLocale.getName(), true, status);
  ------------------
  |  | 1207|  7.15k|#define ulocimp_getRegionForSupplementalData U_ICU_ENTRY_POINT_RENAME(ulocimp_getRegionForSupplementalData)
  |  |  ------------------
  |  |  |  |  123|  7.15k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.15k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.15k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4147|       |
 4148|       |    // Read week data values from supplementalData week data
 4149|  7.15k|    UResourceBundle *rb = ures_openDirect(nullptr, "supplementalData", &status);
  ------------------
  |  | 1693|  7.15k|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|  7.15k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.15k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.15k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4150|  7.15k|    ures_getByKey(rb, "weekData", rb, &status);
  ------------------
  |  | 1661|  7.15k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  7.15k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.15k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.15k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4151|  7.15k|    UResourceBundle *weekData = ures_getByKey(rb, region.data(), nullptr, &status);
  ------------------
  |  | 1661|  7.15k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  7.15k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.15k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.15k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4152|  7.15k|    if (status == U_MISSING_RESOURCE_ERROR && rb != nullptr) {
  ------------------
  |  Branch (4152:9): [True: 3.02k, False: 4.12k]
  |  Branch (4152:47): [True: 3.02k, False: 0]
  ------------------
 4153|  3.02k|        status = U_ZERO_ERROR;
 4154|  3.02k|        weekData = ures_getByKey(rb, "001", nullptr, &status);
  ------------------
  |  | 1661|  3.02k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  3.02k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  3.02k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  3.02k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4155|  3.02k|    }
 4156|       |
 4157|  7.15k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (4157:9): [True: 121, False: 7.03k]
  ------------------
 4158|    121|        status = U_USING_FALLBACK_WARNING;
 4159|  7.03k|    } else {
 4160|  7.03k|        int32_t arrLen;
 4161|  7.03k|        const int32_t *weekDataArr = ures_getIntVector(weekData,&arrLen,&status);
  ------------------
  |  | 1665|  7.03k|#define ures_getIntVector U_ICU_ENTRY_POINT_RENAME(ures_getIntVector)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4162|  7.03k|        if( U_SUCCESS(status) && arrLen == 6
  ------------------
  |  Branch (4162:13): [True: 7.03k, False: 0]
  |  Branch (4162:34): [True: 7.03k, False: 0]
  ------------------
 4163|  7.03k|                && 1 <= weekDataArr[0] && weekDataArr[0] <= 7
  ------------------
  |  Branch (4163:20): [True: 7.03k, False: 0]
  |  Branch (4163:43): [True: 7.03k, False: 0]
  ------------------
 4164|  7.03k|                && 1 <= weekDataArr[1] && weekDataArr[1] <= 7
  ------------------
  |  Branch (4164:20): [True: 7.03k, False: 0]
  |  Branch (4164:43): [True: 7.03k, False: 0]
  ------------------
 4165|  7.03k|                && 1 <= weekDataArr[2] && weekDataArr[2] <= 7
  ------------------
  |  Branch (4165:20): [True: 7.03k, False: 0]
  |  Branch (4165:43): [True: 7.03k, False: 0]
  ------------------
 4166|  7.03k|                && 1 <= weekDataArr[4] && weekDataArr[4] <= 7) {
  ------------------
  |  Branch (4166:20): [True: 7.03k, False: 0]
  |  Branch (4166:43): [True: 7.03k, False: 0]
  ------------------
 4167|  7.03k|            fFirstDayOfWeek = static_cast<UCalendarDaysOfWeek>(weekDataArr[0]);
 4168|  7.03k|            fMinimalDaysInFirstWeek = static_cast<uint8_t>(weekDataArr[1]);
 4169|  7.03k|            fWeekendOnset = static_cast<UCalendarDaysOfWeek>(weekDataArr[2]);
 4170|  7.03k|            fWeekendOnsetMillis = weekDataArr[3];
 4171|  7.03k|            fWeekendCease = static_cast<UCalendarDaysOfWeek>(weekDataArr[4]);
 4172|  7.03k|            fWeekendCeaseMillis = weekDataArr[5];
 4173|  7.03k|        } else {
 4174|      0|            status = U_INVALID_FORMAT_ERROR;
 4175|      0|        }
 4176|       |
 4177|       |        // Check if the locale has a "fw" u extension and we honor it if present.
 4178|       |        // And we don't change the overal status, as the presence / lack of "fw" is not an error.
 4179|  7.03k|        UErrorCode fwStatus = U_ZERO_ERROR;
 4180|  7.03k|        char fwExt[ULOC_FULLNAME_CAPACITY] = "";
 4181|  7.03k|        desiredLocale.getKeywordValue("fw", fwExt, ULOC_FULLNAME_CAPACITY, fwStatus);
  ------------------
  |  |  264|  7.03k|#define ULOC_FULLNAME_CAPACITY 157
  ------------------
 4182|  7.03k|        if (U_SUCCESS(fwStatus)) {
  ------------------
  |  Branch (4182:13): [True: 7.02k, False: 8]
  ------------------
 4183|  7.02k|            if (uprv_strcmp(fwExt, "sun") == 0) {
  ------------------
  |  |   38|  7.02k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  7.02k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (4183:17): [True: 1, False: 7.02k]
  ------------------
 4184|      1|                fFirstDayOfWeek = UCAL_SUNDAY;
 4185|  7.02k|            } else if (uprv_strcmp(fwExt, "mon") == 0) {
  ------------------
  |  |   38|  7.02k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  7.02k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (4185:24): [True: 1, False: 7.02k]
  ------------------
 4186|      1|                fFirstDayOfWeek = UCAL_MONDAY;
 4187|  7.02k|            } else if (uprv_strcmp(fwExt, "tue") == 0) {
  ------------------
  |  |   38|  7.02k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  7.02k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (4187:24): [True: 1, False: 7.02k]
  ------------------
 4188|      1|                fFirstDayOfWeek = UCAL_TUESDAY;
 4189|  7.02k|            } else if (uprv_strcmp(fwExt, "wed") == 0) {
  ------------------
  |  |   38|  7.02k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  7.02k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (4189:24): [True: 1, False: 7.02k]
  ------------------
 4190|      1|                fFirstDayOfWeek = UCAL_WEDNESDAY;
 4191|  7.02k|            } else if (uprv_strcmp(fwExt, "thu") == 0) {
  ------------------
  |  |   38|  7.02k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  7.02k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (4191:24): [True: 1, False: 7.02k]
  ------------------
 4192|      1|                fFirstDayOfWeek = UCAL_THURSDAY;
 4193|  7.02k|            } else if (uprv_strcmp(fwExt, "fri") == 0) {
  ------------------
  |  |   38|  7.02k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  7.02k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (4193:24): [True: 1, False: 7.02k]
  ------------------
 4194|      1|                fFirstDayOfWeek = UCAL_FRIDAY;
 4195|  7.02k|            } else if (uprv_strcmp(fwExt, "sat") == 0) {
  ------------------
  |  |   38|  7.02k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  7.02k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (4195:24): [True: 1, False: 7.01k]
  ------------------
 4196|      1|                fFirstDayOfWeek = UCAL_SATURDAY;
 4197|      1|            }
 4198|  7.02k|        }
 4199|  7.03k|    }
 4200|  7.15k|    ures_close(weekData);
  ------------------
  |  | 1652|  7.15k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|  7.15k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.15k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.15k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4201|  7.15k|    ures_close(rb);
  ------------------
  |  | 1652|  7.15k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|  7.15k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.15k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.15k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4202|  7.15k|}
calendar.cpp:_ZN6icu_78L21isCalendarServiceUsedEv:
  552|  7.16k|isCalendarServiceUsed() {
  553|  7.16k|    return !gServiceInitOnce.isReset();
  554|  7.16k|}
calendar.cpp:_ZN6icu_78L22createStandardCalendarE8ECalTypeRKNS_6LocaleER10UErrorCode:
  310|  7.16k|static Calendar *createStandardCalendar(ECalType calType, const Locale &loc, UErrorCode& status) {
  311|  7.16k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (311:9): [True: 0, False: 7.16k]
  ------------------
  312|      0|        return nullptr;
  313|      0|    }
  314|  7.16k|    LocalPointer<Calendar> cal;
  315|       |
  316|  7.16k|    switch (calType) {
  317|  7.02k|        case CALTYPE_GREGORIAN:
  ------------------
  |  Branch (317:9): [True: 7.02k, False: 142]
  ------------------
  318|  7.02k|            cal.adoptInsteadAndCheckErrorCode(new GregorianCalendar(loc, status), status);
  319|  7.02k|            break;
  320|      0|        case CALTYPE_JAPANESE:
  ------------------
  |  Branch (320:9): [True: 0, False: 7.16k]
  ------------------
  321|      0|            cal.adoptInsteadAndCheckErrorCode(new JapaneseCalendar(loc, status), status);
  322|      0|            break;
  323|     23|        case CALTYPE_BUDDHIST:
  ------------------
  |  Branch (323:9): [True: 23, False: 7.14k]
  ------------------
  324|     23|            cal.adoptInsteadAndCheckErrorCode(new BuddhistCalendar(loc, status), status);
  325|     23|            break;
  326|      5|        case CALTYPE_ROC:
  ------------------
  |  Branch (326:9): [True: 5, False: 7.16k]
  ------------------
  327|      5|            cal.adoptInsteadAndCheckErrorCode(new TaiwanCalendar(loc, status), status);
  328|      5|            break;
  329|    105|        case CALTYPE_PERSIAN:
  ------------------
  |  Branch (329:9): [True: 105, False: 7.06k]
  ------------------
  330|    105|            cal.adoptInsteadAndCheckErrorCode(new PersianCalendar(loc, status), status);
  331|    105|            break;
  332|      0|        case CALTYPE_ISLAMIC_TBLA:
  ------------------
  |  Branch (332:9): [True: 0, False: 7.16k]
  ------------------
  333|      0|            cal.adoptInsteadAndCheckErrorCode(new IslamicTBLACalendar(loc, status), status);
  334|      0|            break;
  335|      0|        case CALTYPE_ISLAMIC_CIVIL:
  ------------------
  |  Branch (335:9): [True: 0, False: 7.16k]
  ------------------
  336|      0|            cal.adoptInsteadAndCheckErrorCode(new IslamicCivilCalendar(loc, status), status);
  337|      0|            break;
  338|      0|        case CALTYPE_ISLAMIC_RGSA:
  ------------------
  |  Branch (338:9): [True: 0, False: 7.16k]
  ------------------
  339|      0|            cal.adoptInsteadAndCheckErrorCode(new IslamicRGSACalendar(loc, status), status);
  340|      0|            break;
  341|      3|        case CALTYPE_ISLAMIC:
  ------------------
  |  Branch (341:9): [True: 3, False: 7.16k]
  ------------------
  342|      3|            cal.adoptInsteadAndCheckErrorCode(new IslamicCalendar(loc, status), status);
  343|      3|            break;
  344|      0|        case CALTYPE_ISLAMIC_UMALQURA:
  ------------------
  |  Branch (344:9): [True: 0, False: 7.16k]
  ------------------
  345|      0|            cal.adoptInsteadAndCheckErrorCode(new IslamicUmalquraCalendar(loc, status), status);
  346|      0|            break;
  347|      1|        case CALTYPE_HEBREW:
  ------------------
  |  Branch (347:9): [True: 1, False: 7.16k]
  ------------------
  348|      1|            cal.adoptInsteadAndCheckErrorCode(new HebrewCalendar(loc, status), status);
  349|      1|            break;
  350|      1|        case CALTYPE_CHINESE:
  ------------------
  |  Branch (350:9): [True: 1, False: 7.16k]
  ------------------
  351|      1|            cal.adoptInsteadAndCheckErrorCode(new ChineseCalendar(loc, status), status);
  352|      1|            break;
  353|      3|        case CALTYPE_INDIAN:
  ------------------
  |  Branch (353:9): [True: 3, False: 7.16k]
  ------------------
  354|      3|            cal.adoptInsteadAndCheckErrorCode(new IndianCalendar(loc, status), status);
  355|      3|            break;
  356|      0|        case CALTYPE_COPTIC:
  ------------------
  |  Branch (356:9): [True: 0, False: 7.16k]
  ------------------
  357|      0|            cal.adoptInsteadAndCheckErrorCode(new CopticCalendar(loc, status), status);
  358|      0|            break;
  359|      1|        case CALTYPE_ETHIOPIC:
  ------------------
  |  Branch (359:9): [True: 1, False: 7.16k]
  ------------------
  360|      1|            cal.adoptInsteadAndCheckErrorCode(new EthiopicCalendar(loc, status), status);
  361|      1|            break;
  362|      0|        case CALTYPE_ETHIOPIC_AMETE_ALEM:
  ------------------
  |  Branch (362:9): [True: 0, False: 7.16k]
  ------------------
  363|      0|            cal.adoptInsteadAndCheckErrorCode(new EthiopicAmeteAlemCalendar(loc, status), status);
  364|      0|            break;
  365|      0|        case CALTYPE_ISO8601:
  ------------------
  |  Branch (365:9): [True: 0, False: 7.16k]
  ------------------
  366|      0|            cal.adoptInsteadAndCheckErrorCode(new ISO8601Calendar(loc, status), status);
  367|      0|            break;
  368|      0|        case CALTYPE_DANGI:
  ------------------
  |  Branch (368:9): [True: 0, False: 7.16k]
  ------------------
  369|      0|            cal.adoptInsteadAndCheckErrorCode(new DangiCalendar(loc, status), status);
  370|      0|            break;
  371|      0|        default:
  ------------------
  |  Branch (371:9): [True: 0, False: 7.16k]
  ------------------
  372|      0|            status = U_UNSUPPORTED_ERROR;
  373|  7.16k|    }
  374|  7.16k|    return cal.orphan();
  375|  7.16k|}
calendar.cpp:_ZN6icu_78L24getCalendarTypeForLocaleEPKc:
  253|  7.16k|static ECalType getCalendarTypeForLocale(const char *locid) {
  254|  7.16k|    UErrorCode status = U_ZERO_ERROR;
  255|  7.16k|    ECalType calType = CALTYPE_UNKNOWN;
  256|       |
  257|       |    // Canonicalize, so that an old-style variant will be transformed to keywords.
  258|       |    // e.g ja_JP_TRADITIONAL -> ja_JP@calendar=japanese
  259|       |    // NOTE: Since ICU-20187, ja_JP_TRADITIONAL no longer canonicalizes, and
  260|       |    // the Gregorian calendar is returned instead.
  261|  7.16k|    CharString canonicalName = ulocimp_canonicalize(locid, status);
  ------------------
  |  | 1197|  7.16k|#define ulocimp_canonicalize U_ICU_ENTRY_POINT_RENAME(ulocimp_canonicalize)
  |  |  ------------------
  |  |  |  |  123|  7.16k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.16k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.16k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  262|  7.16k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (262:9): [True: 1, False: 7.16k]
  ------------------
  263|      1|        return CALTYPE_GREGORIAN;
  264|      1|    }
  265|       |
  266|  7.16k|    CharString calTypeBuf = ulocimp_getKeywordValue(canonicalName.data(), "calendar", status);
  ------------------
  |  | 1200|  7.16k|#define ulocimp_getKeywordValue U_ICU_ENTRY_POINT_RENAME(ulocimp_getKeywordValue)
  |  |  ------------------
  |  |  |  |  123|  7.16k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.16k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.16k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  267|  7.16k|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (267:9): [True: 7.16k, False: 0]
  ------------------
  268|  7.16k|        calType = getCalendarType(calTypeBuf.data());
  269|  7.16k|        if (calType != CALTYPE_UNKNOWN) {
  ------------------
  |  Branch (269:13): [True: 14, False: 7.15k]
  ------------------
  270|     14|            return calType;
  271|     14|        }
  272|  7.16k|    }
  273|  7.15k|    status = U_ZERO_ERROR;
  274|       |
  275|       |    // when calendar keyword is not available or not supported, read supplementalData
  276|       |    // to get the default calendar type for the locale's region
  277|  7.15k|    CharString region = ulocimp_getRegionForSupplementalData(canonicalName.data(), true, status);
  ------------------
  |  | 1207|  7.15k|#define ulocimp_getRegionForSupplementalData U_ICU_ENTRY_POINT_RENAME(ulocimp_getRegionForSupplementalData)
  |  |  ------------------
  |  |  |  |  123|  7.15k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.15k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.15k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  278|  7.15k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (278:9): [True: 124, False: 7.02k]
  ------------------
  279|    124|        return CALTYPE_GREGORIAN;
  280|    124|    }
  281|       |
  282|       |    // Read preferred calendar values from supplementalData calendarPreference
  283|  7.02k|    UResourceBundle *rb = ures_openDirect(nullptr, "supplementalData", &status);
  ------------------
  |  | 1693|  7.02k|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|  7.02k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.02k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.02k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|  7.02k|    ures_getByKey(rb, "calendarPreferenceData", rb, &status);
  ------------------
  |  | 1661|  7.02k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  7.02k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.02k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.02k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  285|  7.02k|    UResourceBundle *order = ures_getByKey(rb, region.data(), nullptr, &status);
  ------------------
  |  | 1661|  7.02k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  7.02k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.02k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.02k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  286|  7.02k|    if (status == U_MISSING_RESOURCE_ERROR && rb != nullptr) {
  ------------------
  |  Branch (286:9): [True: 5.76k, False: 1.25k]
  |  Branch (286:47): [True: 5.76k, False: 0]
  ------------------
  287|  5.76k|        status = U_ZERO_ERROR;
  288|  5.76k|        order = ures_getByKey(rb, "001", nullptr, &status);
  ------------------
  |  | 1661|  5.76k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  5.76k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.76k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.76k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  289|  5.76k|    }
  290|       |
  291|  7.02k|    calTypeBuf.clear();
  292|  7.02k|    if (U_SUCCESS(status) && order != nullptr) {
  ------------------
  |  Branch (292:9): [True: 7.02k, False: 0]
  |  Branch (292:30): [True: 7.02k, False: 0]
  ------------------
  293|       |        // the first calendar type is the default for the region
  294|  7.02k|        int32_t len = 0;
  295|  7.02k|        const char16_t *uCalType = ures_getStringByIndex(order, 0, &len, &status);
  ------------------
  |  | 1676|  7.02k|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  123|  7.02k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.02k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.02k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  296|  7.02k|        calTypeBuf.appendInvariantChars(uCalType, len, status);
  297|  7.02k|        calType = getCalendarType(calTypeBuf.data());
  298|  7.02k|    }
  299|       |
  300|  7.02k|    ures_close(order);
  ------------------
  |  | 1652|  7.02k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|  7.02k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.02k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.02k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  301|  7.02k|    ures_close(rb);
  ------------------
  |  | 1652|  7.02k|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|  7.02k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  7.02k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  7.02k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  302|       |
  303|  7.02k|    if (calType == CALTYPE_UNKNOWN) {
  ------------------
  |  Branch (303:9): [True: 0, False: 7.02k]
  ------------------
  304|       |        // final fallback
  305|      0|        calType = CALTYPE_GREGORIAN;
  306|      0|    }
  307|  7.02k|    return calType;
  308|  7.15k|}
calendar.cpp:_ZN6icu_78L15getCalendarTypeEPKc:
  232|  14.1k|static ECalType getCalendarType(const char *s) {
  233|   143k|    for (int i = 0; gCalTypes[i] != nullptr; i++) {
  ------------------
  |  Branch (233:21): [True: 136k, False: 7.15k]
  ------------------
  234|   136k|        if (uprv_stricmp(s, gCalTypes[i]) == 0) {
  ------------------
  |  | 1542|   136k|#define uprv_stricmp U_ICU_ENTRY_POINT_RENAME(uprv_stricmp)
  |  |  ------------------
  |  |  |  |  123|   136k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   136k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   136k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (234:13): [True: 7.04k, False: 129k]
  ------------------
  235|  7.04k|            return static_cast<ECalType>(i);
  236|  7.04k|        }
  237|   136k|    }
  238|  7.15k|    return CALTYPE_UNKNOWN;
  239|  14.1k|}

_ZN6icu_7810CECalendarC2ERKNS_6LocaleER10UErrorCode:
   54|      1|:   Calendar(TimeZone::forLocaleOrDefault(aLocale), aLocale, success)
   55|      1|{
   56|      1|}
_ZN6icu_7810CECalendarD2Ev:
   64|      1|{
   65|      1|}

_ZN6icu_7815ChineseCalendarC2ERKNS_6LocaleER10UErrorCode:
  130|      1|:   Calendar(TimeZone::forLocaleOrDefault(aLocale), aLocale, success),
  131|      1|    hasLeapMonthBetweenWinterSolstices(false)
  132|      1|{
  133|      1|}
_ZN6icu_7815ChineseCalendarD2Ev:
  140|      1|{
  141|      1|}
_ZNK6icu_7815ChineseCalendar7getTypeEv:
  143|      1|const char *ChineseCalendar::getType() const { 
  144|      1|    return "chinese";
  145|      1|}

_ZN6icu_7820DecimalFormatSymbolsC2ERKNS_6LocaleER10UErrorCode:
  110|  14.3k|        : UObject(), locale(loc) {
  111|  14.3k|    initialize(locale, status);
  112|  14.3k|}
_ZN6icu_7820DecimalFormatSymbolsD2Ev:
  137|  14.3k|{
  138|  14.3k|    delete actualLocale;
  139|  14.3k|    delete validLocale;
  140|  14.3k|}
_ZN6icu_7820DecimalFormatSymbols10initializeERKNS_6LocaleER10UErrorCodeaPKNS_15NumberingSystemE:
  359|  14.3k|{
  360|  14.3k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (360:9): [True: 845, False: 13.5k]
  ------------------
  361|       |
  362|       |    // First initialize all the symbols to the fallbacks for anything we can't find
  363|  13.5k|    initialize();
  364|       |
  365|       |    //
  366|       |    // Next get the numbering system for this locale and set zero digit
  367|       |    // and the digit string based on the numbering system for the locale
  368|       |    //
  369|  13.5k|    LocalPointer<NumberingSystem> nsLocal;
  370|  13.5k|    if (ns == nullptr) {
  ------------------
  |  Branch (370:9): [True: 13.5k, False: 0]
  ------------------
  371|       |        // Use the numbering system according to the locale.
  372|       |        // Save it into a LocalPointer so it gets cleaned up.
  373|  13.5k|        nsLocal.adoptInstead(NumberingSystem::createInstance(loc, status));
  374|  13.5k|        ns = nsLocal.getAlias();
  375|  13.5k|    }
  376|  13.5k|    const char *nsName;
  377|  13.5k|    if (U_SUCCESS(status) && ns->getRadix() == 10 && !ns->isAlgorithmic()) {
  ------------------
  |  Branch (377:9): [True: 13.3k, False: 206]
  |  Branch (377:30): [True: 13.3k, False: 0]
  |  Branch (377:54): [True: 13.3k, False: 2]
  ------------------
  378|  13.3k|        nsName = ns->getName();
  379|  13.3k|        UnicodeString digitString(ns->getDescription());
  380|  13.3k|        int32_t digitIndex = 0;
  381|  13.3k|        UChar32 digit = digitString.char32At(0);
  382|  13.3k|        fSymbols[kZeroDigitSymbol].setTo(digit);
  383|   133k|        for (int32_t i = kOneDigitSymbol; i <= kNineDigitSymbol; ++i) {
  ------------------
  |  Branch (383:43): [True: 119k, False: 13.3k]
  ------------------
  384|   119k|            digitIndex += U16_LENGTH(digit);
  ------------------
  |  |  141|   119k|#define U16_LENGTH(c) ((uint32_t)(c)<=0xffff ? 1 : 2)
  |  |  ------------------
  |  |  |  Branch (141:24): [True: 118k, False: 1.62k]
  |  |  ------------------
  ------------------
  385|   119k|            digit = digitString.char32At(digitIndex);
  386|   119k|            fSymbols[i].setTo(digit);
  387|   119k|        }
  388|  13.3k|    } else {
  389|    208|        nsName = gLatn;
  390|    208|    }
  391|  13.5k|    uprv_strcpy(this->nsName, nsName);
  ------------------
  |  |   36|  13.5k|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|  13.5k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  392|       |
  393|       |    // Open resource bundles
  394|  13.5k|    const char* locStr = loc.getName();
  395|  13.5k|    LocalUResourceBundlePointer resource(ures_open(nullptr, locStr, &status));
  ------------------
  |  | 1691|  13.5k|#define ures_open U_ICU_ENTRY_POINT_RENAME(ures_open)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  396|  13.5k|    LocalUResourceBundlePointer numberElementsRes(
  397|  13.5k|        ures_getByKeyWithFallback(resource.getAlias(), gNumberElements, nullptr, &status));
  ------------------
  |  | 1662|  13.5k|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  398|       |
  399|  13.5k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (399:9): [True: 206, False: 13.3k]
  ------------------
  400|    206|        if ( useLastResortData ) {
  ------------------
  |  Branch (400:14): [True: 0, False: 206]
  ------------------
  401|      0|            status = U_USING_DEFAULT_WARNING;
  402|      0|            initialize();
  403|      0|        }
  404|    206|        return;
  405|    206|    }
  406|       |
  407|       |    // Set locale IDs
  408|       |    // TODO: Is there a way to do this without depending on the resource bundle instance?
  409|  13.3k|    U_LOCALE_BASED(locBased, *this);
  ------------------
  |  |   25|  13.3k|  LocaleBased varname((objname).validLocale, (objname).actualLocale)
  ------------------
  410|  13.3k|    locBased.setLocaleIDs(
  411|  13.3k|        ures_getLocaleByType(
  ------------------
  |  | 1669|  13.3k|#define ures_getLocaleByType U_ICU_ENTRY_POINT_RENAME(ures_getLocaleByType)
  |  |  ------------------
  |  |  |  |  123|  13.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|  13.3k|            numberElementsRes.getAlias(),
  413|  13.3k|            ULOC_VALID_LOCALE, &status),
  414|  13.3k|        ures_getLocaleByType(
  ------------------
  |  | 1669|  13.3k|#define ures_getLocaleByType U_ICU_ENTRY_POINT_RENAME(ures_getLocaleByType)
  |  |  ------------------
  |  |  |  |  123|  13.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  415|  13.3k|            numberElementsRes.getAlias(),
  416|  13.3k|            ULOC_ACTUAL_LOCALE, &status),
  417|  13.3k|        status);
  418|       |
  419|       |    // Now load the rest of the data from the data sink.
  420|       |    // Start with loading this nsName if it is not Latin.
  421|  13.3k|    DecFmtSymDataSink sink(*this);
  422|  13.3k|    if (uprv_strcmp(nsName, gLatn) != 0) {
  ------------------
  |  |   38|  13.3k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  13.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (422:9): [True: 1.28k, False: 12.0k]
  ------------------
  423|  1.28k|        CharString path;
  424|  1.28k|        path.append(gNumberElements, status)
  425|  1.28k|            .append('/', status)
  426|  1.28k|            .append(nsName, status)
  427|  1.28k|            .append('/', status)
  428|  1.28k|            .append(gSymbols, status);
  429|  1.28k|        ures_getAllItemsWithFallback(resource.getAlias(), path.data(), sink, status);
  ------------------
  |  | 1658|  1.28k|#define ures_getAllItemsWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllItemsWithFallback)
  |  |  ------------------
  |  |  |  |  123|  1.28k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  1.28k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  1.28k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  430|       |
  431|       |        // If no symbols exist for the given nsName and resource bundle, silently ignore
  432|       |        // and fall back to Latin.
  433|  1.28k|        if (status == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (433:13): [True: 0, False: 1.28k]
  ------------------
  434|      0|            status = U_ZERO_ERROR;
  435|  1.28k|        } else if (U_FAILURE(status)) {
  ------------------
  |  Branch (435:20): [True: 0, False: 1.28k]
  ------------------
  436|      0|            return;
  437|      0|        }
  438|  1.28k|    }
  439|       |
  440|       |    // Continue with Latin if necessary.
  441|  13.3k|    if (!sink.seenAll()) {
  ------------------
  |  Branch (441:9): [True: 13.3k, False: 0]
  ------------------
  442|  13.3k|        ures_getAllItemsWithFallback(resource.getAlias(), gNumberElementsLatnSymbols, sink, status);
  ------------------
  |  | 1658|  13.3k|#define ures_getAllItemsWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllItemsWithFallback)
  |  |  ------------------
  |  |  |  |  123|  13.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  443|  13.3k|        if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (443:13): [True: 0, False: 13.3k]
  ------------------
  444|  13.3k|    }
  445|       |
  446|       |    // Let the monetary number separators equal the default number separators if necessary.
  447|  13.3k|    sink.resolveMissingMonetarySeparators(fSymbols);
  448|       |
  449|       |    // Resolve codePointZero
  450|  13.3k|    UChar32 tempCodePointZero = -1;
  451|   146k|    for (int32_t i=0; i<=9; i++) {
  ------------------
  |  Branch (451:23): [True: 133k, False: 13.3k]
  ------------------
  452|   133k|        const UnicodeString& stringDigit = getConstDigitSymbol(i);
  453|   133k|        if (stringDigit.countChar32() != 1) {
  ------------------
  |  Branch (453:13): [True: 0, False: 133k]
  ------------------
  454|      0|            tempCodePointZero = -1;
  455|      0|            break;
  456|      0|        }
  457|   133k|        UChar32 cp = stringDigit.char32At(0);
  458|   133k|        if (i == 0) {
  ------------------
  |  Branch (458:13): [True: 13.3k, False: 119k]
  ------------------
  459|  13.3k|            tempCodePointZero = cp;
  460|   119k|        } else if (cp != tempCodePointZero + i) {
  ------------------
  |  Branch (460:20): [True: 1, False: 119k]
  ------------------
  461|      1|            tempCodePointZero = -1;
  462|      1|            break;
  463|      1|        }
  464|   133k|    }
  465|  13.3k|    fCodePointZero = tempCodePointZero;
  466|       |
  467|       |    // Get the default currency from the currency API.
  468|  13.3k|    UErrorCode internalStatus = U_ZERO_ERROR; // don't propagate failures out
  469|  13.3k|    char16_t curriso[4];
  470|  13.3k|    UnicodeString tempStr;
  471|  13.3k|    int32_t currisoLength = ucurr_forLocale(locStr, curriso, UPRV_LENGTHOF(curriso), &internalStatus);
  ------------------
  |  |  832|  13.3k|#define ucurr_forLocale U_ICU_ENTRY_POINT_RENAME(ucurr_forLocale)
  |  |  ------------------
  |  |  |  |  123|  13.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  int32_t currisoLength = ucurr_forLocale(locStr, curriso, UPRV_LENGTHOF(curriso), &internalStatus);
  ------------------
  |  |   99|  13.3k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  472|  13.3k|    if (U_SUCCESS(internalStatus) && currisoLength == 3) {
  ------------------
  |  Branch (472:9): [True: 5.54k, False: 7.76k]
  |  Branch (472:38): [True: 5.54k, False: 0]
  ------------------
  473|  5.54k|        setCurrency(curriso, status);
  474|  7.76k|    } else {
  475|  7.76k|        setCurrency(nullptr, status);
  476|  7.76k|    }
  477|       |
  478|       |    // Currency Spacing.
  479|  13.3k|    LocalUResourceBundlePointer currencyResource(ures_open(U_ICUDATA_CURR, locStr, &status));
  ------------------
  |  | 1691|  13.3k|#define ures_open U_ICU_ENTRY_POINT_RENAME(ures_open)
  |  |  ------------------
  |  |  |  |  123|  13.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  LocalUResourceBundlePointer currencyResource(ures_open(U_ICUDATA_CURR, locStr, &status));
  ------------------
  |  |   21|  13.3k|#define U_ICUDATA_CURR U_ICUDATA_NAME U_TREE_SEPARATOR_STRING "curr"
  |  |  ------------------
  |  |  |  |  154|  13.3k|#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER
  |  |  ------------------
  ------------------
  480|  13.3k|    CurrencySpacingSink currencySink(*this);
  481|  13.3k|    ures_getAllItemsWithFallback(currencyResource.getAlias(), gCurrencySpacingTag, currencySink, status);
  ------------------
  |  | 1658|  13.3k|#define ures_getAllItemsWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllItemsWithFallback)
  |  |  ------------------
  |  |  |  |  123|  13.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  482|  13.3k|    currencySink.resolveMissing();
  483|  13.3k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (483:9): [True: 2, False: 13.3k]
  ------------------
  484|  13.3k|}
_ZN6icu_7820DecimalFormatSymbols10initializeEv:
  487|  13.5k|DecimalFormatSymbols::initialize() {
  488|       |    /*
  489|       |     * These strings used to be in static arrays, but the HP/UX aCC compiler
  490|       |     * cannot initialize a static array with class constructors.
  491|       |     *  markus 2000may25
  492|       |     */
  493|  13.5k|    fSymbols[kDecimalSeparatorSymbol] = static_cast<char16_t>(0x2e); // '.' decimal separator
  494|  13.5k|    fSymbols[kGroupingSeparatorSymbol].remove();        //     group (thousands) separator
  495|  13.5k|    fSymbols[kPatternSeparatorSymbol] = static_cast<char16_t>(0x3b); // ';' pattern separator
  496|  13.5k|    fSymbols[kPercentSymbol] = static_cast<char16_t>(0x25);          // '%' percent sign
  497|  13.5k|    fSymbols[kZeroDigitSymbol] = static_cast<char16_t>(0x30);        // '0' native 0 digit
  498|  13.5k|    fSymbols[kOneDigitSymbol] = static_cast<char16_t>(0x31);         // '1' native 1 digit
  499|  13.5k|    fSymbols[kTwoDigitSymbol] = static_cast<char16_t>(0x32);         // '2' native 2 digit
  500|  13.5k|    fSymbols[kThreeDigitSymbol] = static_cast<char16_t>(0x33);       // '3' native 3 digit
  501|  13.5k|    fSymbols[kFourDigitSymbol] = static_cast<char16_t>(0x34);        // '4' native 4 digit
  502|  13.5k|    fSymbols[kFiveDigitSymbol] = static_cast<char16_t>(0x35);        // '5' native 5 digit
  503|  13.5k|    fSymbols[kSixDigitSymbol] = static_cast<char16_t>(0x36);         // '6' native 6 digit
  504|  13.5k|    fSymbols[kSevenDigitSymbol] = static_cast<char16_t>(0x37);       // '7' native 7 digit
  505|  13.5k|    fSymbols[kEightDigitSymbol] = static_cast<char16_t>(0x38);       // '8' native 8 digit
  506|  13.5k|    fSymbols[kNineDigitSymbol] = static_cast<char16_t>(0x39);        // '9' native 9 digit
  507|  13.5k|    fSymbols[kDigitSymbol] = static_cast<char16_t>(0x23);            // '#' pattern digit
  508|  13.5k|    fSymbols[kPlusSignSymbol] = static_cast<char16_t>(0x002b);       // '+' plus sign
  509|  13.5k|    fSymbols[kMinusSignSymbol] = static_cast<char16_t>(0x2d);        // '-' minus sign
  510|  13.5k|    fSymbols[kCurrencySymbol] = static_cast<char16_t>(0xa4);         // 'OX' currency symbol
  511|  13.5k|    fSymbols[kIntlCurrencySymbol].setTo(true, INTL_CURRENCY_SYMBOL_STR, 2);
  512|  13.5k|    fSymbols[kMonetarySeparatorSymbol] = static_cast<char16_t>(0x2e);  // '.' monetary decimal separator
  513|  13.5k|    fSymbols[kExponentialSymbol] = static_cast<char16_t>(0x45);        // 'E' exponential
  514|  13.5k|    fSymbols[kPerMillSymbol] = static_cast<char16_t>(0x2030);          // '%o' per mill
  515|  13.5k|    fSymbols[kPadEscapeSymbol] = static_cast<char16_t>(0x2a);          // '*' pad escape symbol
  516|  13.5k|    fSymbols[kInfinitySymbol] = static_cast<char16_t>(0x221e);         // 'oo' infinite
  517|  13.5k|    fSymbols[kNaNSymbol] = static_cast<char16_t>(0xfffd);              // SUB NaN
  518|  13.5k|    fSymbols[kSignificantDigitSymbol] = static_cast<char16_t>(0x0040); // '@' significant digit
  519|  13.5k|    fSymbols[kMonetaryGroupingSeparatorSymbol].remove(); // 
  520|  13.5k|    fSymbols[kExponentMultiplicationSymbol] = static_cast<char16_t>(0xd7); // 'x' multiplication symbol for exponents
  521|  13.5k|    fSymbols[kApproximatelySignSymbol] = u'~';          // '~' approximately sign
  522|  13.5k|    fIsCustomCurrencySymbol = false; 
  523|  13.5k|    fIsCustomIntlCurrencySymbol = false;
  524|  13.5k|    fCodePointZero = 0x30;
  525|  13.5k|    U_ASSERT(fCodePointZero == fSymbols[kZeroDigitSymbol].char32At(0));
  ------------------
  |  |   35|  13.5k|#   define U_ASSERT(exp) (void)0
  ------------------
  526|  13.5k|    currPattern = nullptr;
  527|  13.5k|    nsName[0] = 0;
  528|  13.5k|}
_ZN6icu_7820DecimalFormatSymbols11setCurrencyEPKDsR10UErrorCode:
  530|  13.3k|void DecimalFormatSymbols::setCurrency(const char16_t* currency, UErrorCode& status) {
  531|       |    // TODO: If this method is made public:
  532|       |    // - Adopt ICU4J behavior of not allowing currency to be null.
  533|       |    // - Also verify that the length of currency is 3.
  534|  13.3k|    if (!currency) {
  ------------------
  |  Branch (534:9): [True: 7.76k, False: 5.54k]
  ------------------
  535|  7.76k|        return;
  536|  7.76k|    }
  537|       |
  538|  5.54k|    UnicodeString tempStr;
  539|  5.54k|    uprv_getStaticCurrencyName(currency, locale.getName(), tempStr, status);
  ------------------
  |  | 1511|  5.54k|#define uprv_getStaticCurrencyName U_ICU_ENTRY_POINT_RENAME(uprv_getStaticCurrencyName)
  |  |  ------------------
  |  |  |  |  123|  5.54k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.54k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.54k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  540|  5.54k|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (540:9): [True: 5.53k, False: 2]
  ------------------
  541|  5.53k|        fSymbols[kIntlCurrencySymbol].setTo(currency, 3);
  542|  5.53k|        fSymbols[kCurrencySymbol] = tempStr;
  543|  5.53k|    }
  544|       |
  545|  5.54k|    char cc[4]={0};
  546|  5.54k|    u_UCharsToChars(currency, cc, 3);
  ------------------
  |  |  211|  5.54k|#define u_UCharsToChars U_ICU_ENTRY_POINT_RENAME(u_UCharsToChars)
  |  |  ------------------
  |  |  |  |  123|  5.54k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.54k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.54k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  547|       |
  548|       |    /* An explicit currency was requested */
  549|       |    // TODO(ICU-13297): Move this data loading logic into a centralized place
  550|  5.54k|    UErrorCode localStatus = U_ZERO_ERROR;
  551|  5.54k|    LocalUResourceBundlePointer rbTop(ures_open(U_ICUDATA_CURR, locale.getName(), &localStatus));
  ------------------
  |  | 1691|  5.54k|#define ures_open U_ICU_ENTRY_POINT_RENAME(ures_open)
  |  |  ------------------
  |  |  |  |  123|  5.54k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.54k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.54k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  LocalUResourceBundlePointer rbTop(ures_open(U_ICUDATA_CURR, locale.getName(), &localStatus));
  ------------------
  |  |   21|  5.54k|#define U_ICUDATA_CURR U_ICUDATA_NAME U_TREE_SEPARATOR_STRING "curr"
  |  |  ------------------
  |  |  |  |  154|  5.54k|#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER
  |  |  ------------------
  ------------------
  552|  5.54k|    LocalUResourceBundlePointer rb(
  553|  5.54k|        ures_getByKeyWithFallback(rbTop.getAlias(), "Currencies", nullptr, &localStatus));
  ------------------
  |  | 1662|  5.54k|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|  5.54k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.54k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.54k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  554|  5.54k|    ures_getByKeyWithFallback(rb.getAlias(), cc, rb.getAlias(), &localStatus);
  ------------------
  |  | 1662|  5.54k|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|  5.54k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.54k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.54k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  555|  5.54k|    if(U_SUCCESS(localStatus) && ures_getSize(rb.getAlias())>2) { // the length is 3 if more data is present
  ------------------
  |  | 1674|  5.29k|#define ures_getSize U_ICU_ENTRY_POINT_RENAME(ures_getSize)
  |  |  ------------------
  |  |  |  |  123|  5.29k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  5.29k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  5.29k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (555:8): [True: 5.29k, False: 250]
  |  Branch (555:34): [True: 180, False: 5.11k]
  ------------------
  556|    180|        ures_getByIndex(rb.getAlias(), 2, rb.getAlias(), &localStatus);
  ------------------
  |  | 1660|    180|#define ures_getByIndex U_ICU_ENTRY_POINT_RENAME(ures_getByIndex)
  |  |  ------------------
  |  |  |  |  123|    180|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    180|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    180|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  557|    180|        int32_t currPatternLen = 0;
  558|    180|        currPattern =
  559|    180|            ures_getStringByIndex(rb.getAlias(), static_cast<int32_t>(0), &currPatternLen, &localStatus);
  ------------------
  |  | 1676|    180|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  123|    180|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    180|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    180|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  560|    180|        UnicodeString decimalSep =
  561|    180|            ures_getUnicodeStringByIndex(rb.getAlias(), static_cast<int32_t>(1), &localStatus);
  562|    180|        UnicodeString groupingSep =
  563|    180|            ures_getUnicodeStringByIndex(rb.getAlias(), static_cast<int32_t>(2), &localStatus);
  564|    180|        if(U_SUCCESS(localStatus)){
  ------------------
  |  Branch (564:12): [True: 180, False: 0]
  ------------------
  565|    180|            fSymbols[kMonetaryGroupingSeparatorSymbol] = groupingSep;
  566|    180|            fSymbols[kMonetarySeparatorSymbol] = decimalSep;
  567|       |            //pattern.setTo(true, currPattern, currPatternLen);
  568|    180|        }
  569|    180|    }
  570|       |    /* else An explicit currency was requested and is unknown or locale data is malformed. */
  571|       |    /* ucurr_* API will get the correct value later on. */
  572|  5.54k|}
_ZNK6icu_7820DecimalFormatSymbols28getPatternForCurrencySpacingE16UCurrencySpacingaR10UErrorCode:
  582|  79.8k|                                                 UErrorCode& status) const {
  583|  79.8k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (583:9): [True: 0, False: 79.8k]
  ------------------
  584|      0|      return fNoSymbol;  // always empty.
  585|      0|    }
  586|  79.8k|    if (beforeCurrency) {
  ------------------
  |  Branch (586:9): [True: 39.9k, False: 39.9k]
  ------------------
  587|  39.9k|      return currencySpcBeforeSym[static_cast<int32_t>(type)];
  588|  39.9k|    } else {
  589|  39.9k|      return currencySpcAfterSym[static_cast<int32_t>(type)];
  590|  39.9k|    }
  591|  79.8k|}
_ZN6icu_7820DecimalFormatSymbols28setPatternForCurrencySpacingE16UCurrencySpacingaRKNS_13UnicodeStringE:
  596|  79.8k|                                             const UnicodeString& pattern) {
  597|  79.8k|  if (beforeCurrency) {
  ------------------
  |  Branch (597:7): [True: 39.9k, False: 39.9k]
  ------------------
  598|  39.9k|    currencySpcBeforeSym[static_cast<int32_t>(type)] = pattern;
  599|  39.9k|  } else {
  600|  39.9k|    currencySpcAfterSym[static_cast<int32_t>(type)] = pattern;
  601|  39.9k|  }
  602|  79.8k|}
dcfmtsym.cpp:_ZN6icu_7812_GLOBAL__N_117DecFmtSymDataSinkC2ERNS_20DecimalFormatSymbolsE:
  235|  13.3k|    DecFmtSymDataSink(DecimalFormatSymbols& _dfs) : dfs(_dfs) {
  236|  13.3k|        uprv_memset(seenSymbol, false, sizeof(seenSymbol));
  ------------------
  |  |  100|  13.3k|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|  13.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  237|  13.3k|    }
dcfmtsym.cpp:_ZN6icu_7812_GLOBAL__N_117DecFmtSymDataSink3putEPKcRNS_13ResourceValueEaR10UErrorCode:
  241|  30.6k|            UErrorCode &errorCode) override {
  242|  30.6k|        ResourceTable symbolsTable = value.getTable(errorCode);
  243|  30.6k|        if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (243:13): [True: 0, False: 30.6k]
  ------------------
  244|   301k|        for (int32_t j = 0; symbolsTable.getKeyAndValue(j, key, value); ++j) {
  ------------------
  |  Branch (244:29): [True: 271k, False: 30.6k]
  ------------------
  245|  3.80M|            for (int32_t i=0; i<DecimalFormatSymbols::kFormatSymbolCount; i++) {
  ------------------
  |  Branch (245:31): [True: 3.77M, False: 35.4k]
  ------------------
  246|  3.77M|                if (gNumberElementKeys[i] != nullptr && uprv_strcmp(key, gNumberElementKeys[i]) == 0) {
  ------------------
  |  |   38|  1.99M|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  1.99M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (246:21): [True: 1.99M, False: 1.77M]
  |  Branch (246:57): [True: 235k, False: 1.75M]
  ------------------
  247|   235k|                    if (!seenSymbol[i]) {
  ------------------
  |  Branch (247:25): [True: 146k, False: 89.4k]
  ------------------
  248|   146k|                        seenSymbol[i] = true;
  249|   146k|                        dfs.setSymbol(
  250|   146k|                            static_cast<DecimalFormatSymbols::ENumberFormatSymbol>(i),
  251|   146k|                            value.getUnicodeString(errorCode));
  252|   146k|                        if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (252:29): [True: 0, False: 146k]
  ------------------
  253|   146k|                    }
  254|   235k|                    break;
  255|   235k|                }
  256|  3.77M|            }
  257|   271k|        }
  258|  30.6k|    }
dcfmtsym.cpp:_ZN6icu_7812_GLOBAL__N_117DecFmtSymDataSink7seenAllEv:
  261|  13.3k|    UBool seenAll() {
  262|  15.8k|        for (int32_t i=0; i<DecimalFormatSymbols::kFormatSymbolCount; i++) {
  ------------------
  |  Branch (262:27): [True: 15.8k, False: 0]
  ------------------
  263|  15.8k|            if (!seenSymbol[i]) {
  ------------------
  |  Branch (263:17): [True: 13.3k, False: 2.57k]
  ------------------
  264|  13.3k|                return false;
  265|  13.3k|            }
  266|  15.8k|        }
  267|      0|        return true;
  268|  13.3k|    }
dcfmtsym.cpp:_ZN6icu_7812_GLOBAL__N_117DecFmtSymDataSink32resolveMissingMonetarySeparatorsEPKNS_13UnicodeStringE:
  272|  13.3k|    void resolveMissingMonetarySeparators(const UnicodeString* fSymbols) {
  273|  13.3k|        if (!seenSymbol[DecimalFormatSymbols::kMonetarySeparatorSymbol]) {
  ------------------
  |  Branch (273:13): [True: 13.2k, False: 13]
  ------------------
  274|  13.2k|            dfs.setSymbol(
  275|  13.2k|                DecimalFormatSymbols::kMonetarySeparatorSymbol,
  276|  13.2k|                fSymbols[DecimalFormatSymbols::kDecimalSeparatorSymbol]);
  277|  13.2k|        }
  278|  13.3k|        if (!seenSymbol[DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol]) {
  ------------------
  |  Branch (278:13): [True: 13.3k, False: 7]
  ------------------
  279|  13.3k|            dfs.setSymbol(
  280|  13.3k|                DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol,
  281|  13.3k|                fSymbols[DecimalFormatSymbols::kGroupingSeparatorSymbol]);
  282|  13.3k|        }
  283|  13.3k|    }
dcfmtsym.cpp:_ZN6icu_7812_GLOBAL__N_119CurrencySpacingSinkC2ERNS_20DecimalFormatSymbolsE:
  292|  13.3k|        : dfs(_dfs), hasBeforeCurrency(false), hasAfterCurrency(false) {}
dcfmtsym.cpp:_ZN6icu_7812_GLOBAL__N_119CurrencySpacingSink3putEPKcRNS_13ResourceValueEaR10UErrorCode:
  296|  13.3k|            UErrorCode &errorCode) override {
  297|  13.3k|        ResourceTable spacingTypesTable = value.getTable(errorCode);
  298|  39.9k|        for (int32_t i = 0; spacingTypesTable.getKeyAndValue(i, key, value); ++i) {
  ------------------
  |  Branch (298:29): [True: 26.6k, False: 13.3k]
  ------------------
  299|  26.6k|            UBool beforeCurrency;
  300|  26.6k|            if (uprv_strcmp(key, gBeforeCurrencyTag) == 0) {
  ------------------
  |  |   38|  26.6k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  26.6k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (300:17): [True: 13.3k, False: 13.3k]
  ------------------
  301|  13.3k|                beforeCurrency = true;
  302|  13.3k|                hasBeforeCurrency = true;
  303|  13.3k|            } else if (uprv_strcmp(key, gAfterCurrencyTag) == 0) {
  ------------------
  |  |   38|  13.3k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  13.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (303:24): [True: 13.3k, False: 0]
  ------------------
  304|  13.3k|                beforeCurrency = false;
  305|  13.3k|                hasAfterCurrency = true;
  306|  13.3k|            } else {
  307|      0|                continue;
  308|      0|            }
  309|       |
  310|  26.6k|            ResourceTable patternsTable = value.getTable(errorCode);
  311|   106k|            for (int32_t j = 0; patternsTable.getKeyAndValue(j, key, value); ++j) {
  ------------------
  |  Branch (311:33): [True: 79.8k, False: 26.6k]
  ------------------
  312|  79.8k|                UCurrencySpacing pattern;
  313|  79.8k|                if (uprv_strcmp(key, gCurrencyMatchTag) == 0) {
  ------------------
  |  |   38|  79.8k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  79.8k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (313:21): [True: 26.6k, False: 53.2k]
  ------------------
  314|  26.6k|                    pattern = UNUM_CURRENCY_MATCH;
  315|  53.2k|                } else if (uprv_strcmp(key, gCurrencySudMatchTag) == 0) {
  ------------------
  |  |   38|  53.2k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  53.2k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (315:28): [True: 26.6k, False: 26.6k]
  ------------------
  316|  26.6k|                    pattern = UNUM_CURRENCY_SURROUNDING_MATCH;
  317|  26.6k|                } else if (uprv_strcmp(key, gCurrencyInsertBtnTag) == 0) {
  ------------------
  |  |   38|  26.6k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  26.6k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (317:28): [True: 26.6k, False: 0]
  ------------------
  318|  26.6k|                    pattern = UNUM_CURRENCY_INSERT;
  319|  26.6k|                } else {
  320|      0|                    continue;
  321|      0|                }
  322|       |
  323|  79.8k|                const UnicodeString& current = dfs.getPatternForCurrencySpacing(
  324|  79.8k|                    pattern, beforeCurrency, errorCode);
  325|  79.8k|                if (current.isEmpty()) {
  ------------------
  |  Branch (325:21): [True: 79.8k, False: 0]
  ------------------
  326|  79.8k|                    dfs.setPatternForCurrencySpacing(
  327|  79.8k|                        pattern, beforeCurrency, value.getUnicodeString(errorCode));
  328|  79.8k|                }
  329|  79.8k|            }
  330|  26.6k|        }
  331|  13.3k|    }
dcfmtsym.cpp:_ZN6icu_7812_GLOBAL__N_119CurrencySpacingSink14resolveMissingEv:
  333|  13.3k|    void resolveMissing() {
  334|       |        // For consistency with Java, this method overwrites everything with the defaults unless
  335|       |        // both beforeCurrency and afterCurrency were found in CLDR.
  336|  13.3k|        static const char* defaults[] = { "[:letter:]", "[:digit:]", " " };
  337|  13.3k|        if (!hasBeforeCurrency || !hasAfterCurrency) {
  ------------------
  |  Branch (337:13): [True: 2, False: 13.3k]
  |  Branch (337:35): [True: 0, False: 13.3k]
  ------------------
  338|      8|            for (int32_t pattern = 0; pattern < UNUM_CURRENCY_SPACING_COUNT; pattern++) {
  ------------------
  |  Branch (338:39): [True: 6, False: 2]
  ------------------
  339|      6|                dfs.setPatternForCurrencySpacing(static_cast<UCurrencySpacing>(pattern),
  340|      6|                    false, UnicodeString(defaults[pattern], -1, US_INV));
  ------------------
  |  |   98|      6|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  341|      6|            }
  342|      8|            for (int32_t pattern = 0; pattern < UNUM_CURRENCY_SPACING_COUNT; pattern++) {
  ------------------
  |  Branch (342:39): [True: 6, False: 2]
  ------------------
  343|      6|                dfs.setPatternForCurrencySpacing(static_cast<UCurrencySpacing>(pattern),
  344|      6|                    true, UnicodeString(defaults[pattern], -1, US_INV));
  ------------------
  |  |   98|      6|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  345|      6|            }
  346|      2|        }
  347|  13.3k|    }

_ZN6icu_7824DateTimePatternGenerator14createInstanceERKNS_6LocaleER10UErrorCode:
  306|  14.7k|DateTimePatternGenerator::createInstance(const Locale& locale, UErrorCode& status) {
  307|  14.7k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (307:9): [True: 0, False: 14.7k]
  ------------------
  308|      0|        return nullptr;
  309|      0|    }
  310|  14.7k|    LocalPointer<DateTimePatternGenerator> result(
  311|  14.7k|            new DateTimePatternGenerator(locale, status), status);
  312|  14.7k|    return U_SUCCESS(status) ? result.orphan() : nullptr;
  ------------------
  |  Branch (312:12): [True: 13.2k, False: 1.54k]
  ------------------
  313|  14.7k|}
_ZN6icu_7824DateTimePatternGeneratorC2ERKNS_6LocaleER10UErrorCodea:
  351|  14.7k|    skipMatcher(nullptr),
  352|  14.7k|    fAvailableFormatKeyHash(nullptr),
  353|  14.7k|    fDefaultHourFormatChar(0),
  354|  14.7k|    internalErrorCode(U_ZERO_ERROR)
  355|  14.7k|{
  356|  14.7k|    fp = new FormatParser();
  357|  14.7k|    dtMatcher = new DateTimeMatcher();
  358|  14.7k|    distanceInfo = new DistanceInfo();
  359|  14.7k|    patternMap = new PatternMap();
  360|  14.7k|    if (fp == nullptr || dtMatcher == nullptr || distanceInfo == nullptr || patternMap == nullptr) {
  ------------------
  |  Branch (360:9): [True: 0, False: 14.7k]
  |  Branch (360:26): [True: 0, False: 14.7k]
  |  Branch (360:50): [True: 0, False: 14.7k]
  |  Branch (360:77): [True: 0, False: 14.7k]
  ------------------
  361|      0|        internalErrorCode = status = U_MEMORY_ALLOCATION_ERROR;
  362|      0|    }
  363|  14.7k|    else {
  364|  14.7k|        initData(locale, status, skipStdPatterns);
  365|  14.7k|    }
  366|  14.7k|}
_ZN6icu_7824DateTimePatternGeneratorD2Ev:
  465|  14.7k|DateTimePatternGenerator::~DateTimePatternGenerator() {
  466|  14.7k|    delete fAvailableFormatKeyHash;
  467|  14.7k|    delete fp;
  468|  14.7k|    delete dtMatcher;
  469|  14.7k|    delete distanceInfo;
  470|  14.7k|    delete patternMap;
  471|  14.7k|    delete skipMatcher;
  472|  14.7k|}
_ZN6icu_7824DateTimePatternGenerator8initDataERKNS_6LocaleER10UErrorCodea:
  508|  14.7k|DateTimePatternGenerator::initData(const Locale& locale, UErrorCode &status, UBool skipStdPatterns) {
  509|       |    //const char *baseLangName = locale.getBaseName(); // unused
  510|  14.7k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (510:9): [True: 0, False: 14.7k]
  ------------------
  511|  14.7k|    if (locale.isBogus()) {
  ------------------
  |  Branch (511:9): [True: 406, False: 14.3k]
  ------------------
  512|    406|        status = U_ILLEGAL_ARGUMENT_ERROR;
  513|    406|        return;
  514|    406|    }
  515|       |
  516|  14.3k|    skipMatcher = nullptr;
  517|  14.3k|    fAvailableFormatKeyHash=nullptr;
  518|  14.3k|    addCanonicalItems(status);
  519|  14.3k|    if (!skipStdPatterns) { // skip to prevent circular dependency when called from SimpleDateFormat::construct
  ------------------
  |  Branch (519:9): [True: 14.3k, False: 0]
  ------------------
  520|  14.3k|        addICUPatterns(locale, status);
  521|  14.3k|    }
  522|  14.3k|    addCLDRData(locale, status);
  523|  14.3k|    setDateTimeFromCalendar(locale, status);
  524|  14.3k|    setDecimalSymbols(locale, status);
  525|  14.3k|    umtx_initOnce(initOnce, loadAllowedHourFormatsData, status);
  526|  14.3k|    getAllowedHourFormats(locale, status);
  527|       |    // If any of the above methods failed then the object is in an invalid state.
  528|  14.3k|    internalErrorCode = status;
  529|  14.3k|} // DateTimePatternGenerator::initData
_ZN6icu_7824DateTimePatternGenerator26loadAllowedHourFormatsDataER10UErrorCode:
  621|      1|U_CFUNC void U_CALLCONV DateTimePatternGenerator::loadAllowedHourFormatsData(UErrorCode &status) {
  622|      1|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (622:9): [True: 0, False: 1]
  ------------------
  623|      1|    localeToAllowedHourFormatsMap = uhash_open(
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  624|      1|        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_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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  625|      1|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (625:9): [True: 0, False: 1]
  ------------------
  626|       |
  627|      1|    uhash_setValueDeleter(localeToAllowedHourFormatsMap, deleteAllowedHourFormats);
  ------------------
  |  | 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(localeToAllowedHourFormatsMap, deleteAllowedHourFormats);
  ------------------
  |  |  121|      1|#define deleteAllowedHourFormats U_ICU_ENTRY_POINT_RENAME(deleteAllowedHourFormats)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  628|      1|    ucln_i18n_registerCleanup(UCLN_I18N_ALLOWED_HOUR_FORMATS, allowedHourFormatsCleanup);
  ------------------
  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  ucln_i18n_registerCleanup(UCLN_I18N_ALLOWED_HOUR_FORMATS, allowedHourFormatsCleanup);
  ------------------
  |  |  118|      1|#define allowedHourFormatsCleanup U_ICU_ENTRY_POINT_RENAME(allowedHourFormatsCleanup)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  629|       |
  630|      1|    LocalUResourceBundlePointer rb(ures_openDirect(nullptr, "supplementalData", &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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  631|      1|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (631:9): [True: 0, False: 1]
  ------------------
  632|       |
  633|      1|    AllowedHourFormatsSink sink;
  634|       |    // TODO: Currently in the enumeration each table allocates a new array.
  635|       |    // Try to reduce the number of memory allocations. Consider storing a
  636|       |    // UVector32 with the concatenation of all of the sub-arrays, put the start index
  637|       |    // into the hashmap, store 6 single-value sub-arrays right at the beginning of the
  638|       |    // vector (at index enum*2) for easy data sharing, copy sub-arrays into runtime
  639|       |    // object. Remember to clean up the vector, too.
  640|      1|    ures_getAllItemsWithFallback(rb.getAlias(), "timeData", 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  641|      1|}
_ZN6icu_7824DateTimePatternGenerator21getAllowedHourFormatsERKNS_6LocaleER10UErrorCode:
  658|  14.3k|void DateTimePatternGenerator::getAllowedHourFormats(const Locale &locale, UErrorCode &status) {
  659|  14.3k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (659:9): [True: 1.05k, False: 13.3k]
  ------------------
  660|       |
  661|  13.3k|    const char *language = locale.getLanguage();
  662|  13.3k|    CharString baseCountry = ulocimp_getRegionForSupplementalData(locale.getName(), false, status);
  ------------------
  |  | 1207|  13.3k|#define ulocimp_getRegionForSupplementalData U_ICU_ENTRY_POINT_RENAME(ulocimp_getRegionForSupplementalData)
  |  |  ------------------
  |  |  |  |  123|  13.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  663|  13.3k|    const char* country = baseCountry.data();
  664|       |
  665|  13.3k|    Locale maxLocale;  // must be here for correct lifetime
  666|  13.3k|    if (*language == '\0' || *country == '\0') {
  ------------------
  |  Branch (666:9): [True: 1.94k, False: 11.3k]
  |  Branch (666:30): [True: 5.31k, False: 6.04k]
  ------------------
  667|  7.25k|        maxLocale = locale;
  668|  7.25k|        UErrorCode localStatus = U_ZERO_ERROR;
  669|  7.25k|        maxLocale.addLikelySubtags(localStatus);
  670|  7.25k|        if (U_SUCCESS(localStatus)) {
  ------------------
  |  Branch (670:13): [True: 6.94k, False: 315]
  ------------------
  671|  6.94k|            language = maxLocale.getLanguage();
  672|  6.94k|            country = maxLocale.getCountry();
  673|  6.94k|        }
  674|  7.25k|    }
  675|  13.3k|    if (*language == '\0') {
  ------------------
  |  Branch (675:9): [True: 69, False: 13.2k]
  ------------------
  676|       |        // Unexpected, but fail gracefully
  677|     69|        language = "und";
  678|     69|    }
  679|  13.3k|    if (*country == '\0') {
  ------------------
  |  Branch (679:9): [True: 2.24k, False: 11.0k]
  ------------------
  680|  2.24k|        country = "001";
  681|  2.24k|    }
  682|       |
  683|  13.3k|    int32_t* allowedFormats = getAllowedHourFormatsLangCountry(language, country, status);
  684|       |
  685|       |    // We need to check if there is an hour cycle on locale
  686|  13.3k|    char buffer[8];
  687|  13.3k|    int32_t count = locale.getKeywordValue("hours", buffer, sizeof(buffer), status);
  688|       |
  689|  13.3k|    fDefaultHourFormatChar = 0;
  690|  13.3k|    if (U_SUCCESS(status) && count > 0) {
  ------------------
  |  Branch (690:9): [True: 13.2k, False: 85]
  |  Branch (690:30): [True: 39, False: 13.1k]
  ------------------
  691|     39|        if(uprv_strcmp(buffer, "h24") == 0) {
  ------------------
  |  |   38|     39|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|     39|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (691:12): [True: 2, False: 37]
  ------------------
  692|      2|            fDefaultHourFormatChar = LOW_K;
  ------------------
  |  |   79|      2|#define LOW_K             ((char16_t)0x006B)
  ------------------
  693|     37|        } else if(uprv_strcmp(buffer, "h23") == 0) {
  ------------------
  |  |   38|     37|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|     37|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (693:19): [True: 2, False: 35]
  ------------------
  694|      2|            fDefaultHourFormatChar = CAP_H;
  ------------------
  |  |   53|      2|#define CAP_H             ((char16_t)0x0048)
  ------------------
  695|     35|        } else if(uprv_strcmp(buffer, "h12") == 0) {
  ------------------
  |  |   38|     35|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|     35|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (695:19): [True: 1, False: 34]
  ------------------
  696|      1|            fDefaultHourFormatChar = LOW_H;
  ------------------
  |  |   76|      1|#define LOW_H             ((char16_t)0x0068)
  ------------------
  697|     34|        } else if(uprv_strcmp(buffer, "h11") == 0) {
  ------------------
  |  |   38|     34|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|     34|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (697:19): [True: 1, False: 33]
  ------------------
  698|      1|            fDefaultHourFormatChar = CAP_K;
  ------------------
  |  |   55|      1|#define CAP_K             ((char16_t)0x004B)
  ------------------
  699|      1|        }
  700|     39|    }
  701|       |
  702|       |    // Check if the region has an alias
  703|  13.3k|    if (allowedFormats == nullptr) {
  ------------------
  |  Branch (703:9): [True: 897, False: 12.4k]
  ------------------
  704|    897|        UErrorCode localStatus = U_ZERO_ERROR;
  705|    897|        const Region* region = Region::getInstance(country, localStatus);
  706|    897|        if (U_SUCCESS(localStatus)) {
  ------------------
  |  Branch (706:13): [True: 196, False: 701]
  ------------------
  707|    196|            country = region->getRegionCode(); // the real region code
  708|    196|            allowedFormats = getAllowedHourFormatsLangCountry(language, country, status);
  709|    196|        }
  710|    897|    }
  711|       |
  712|  13.3k|    if (allowedFormats != nullptr) {  // Lookup is successful
  ------------------
  |  Branch (712:9): [True: 12.4k, False: 889]
  ------------------
  713|       |        // Here allowedFormats points to a list consisting of key for preferredFormat,
  714|       |        // followed by one or more keys for allowedFormats, then followed by ALLOWED_HOUR_FORMAT_UNKNOWN.
  715|  12.4k|        if (!fDefaultHourFormatChar) {
  ------------------
  |  Branch (715:13): [True: 12.4k, False: 2]
  ------------------
  716|  12.4k|            switch (allowedFormats[0]) {
  717|  4.79k|                case ALLOWED_HOUR_FORMAT_h: fDefaultHourFormatChar = LOW_H; break;
  ------------------
  |  |   76|  4.79k|#define LOW_H             ((char16_t)0x0068)
  ------------------
  |  Branch (717:17): [True: 4.79k, False: 7.61k]
  ------------------
  718|  7.61k|                case ALLOWED_HOUR_FORMAT_H: fDefaultHourFormatChar = CAP_H; break;
  ------------------
  |  |   53|  7.61k|#define CAP_H             ((char16_t)0x0048)
  ------------------
  |  Branch (718:17): [True: 7.61k, False: 4.79k]
  ------------------
  719|      0|                case ALLOWED_HOUR_FORMAT_K: fDefaultHourFormatChar = CAP_K; break;
  ------------------
  |  |   55|      0|#define CAP_K             ((char16_t)0x004B)
  ------------------
  |  Branch (719:17): [True: 0, False: 12.4k]
  ------------------
  720|      0|                case ALLOWED_HOUR_FORMAT_k: fDefaultHourFormatChar = LOW_K; break;
  ------------------
  |  |   79|      0|#define LOW_K             ((char16_t)0x006B)
  ------------------
  |  Branch (720:17): [True: 0, False: 12.4k]
  ------------------
  721|      0|                default: fDefaultHourFormatChar = CAP_H; break;
  ------------------
  |  |   53|      0|#define CAP_H             ((char16_t)0x0048)
  ------------------
  |  Branch (721:17): [True: 0, False: 12.4k]
  ------------------
  722|  12.4k|            }
  723|  12.4k|        }
  724|       |
  725|  48.5k|        for (int32_t i = 0; i < UPRV_LENGTHOF(fAllowedHourFormats); ++i) {
  ------------------
  |  |   99|  48.5k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  |  Branch (725:29): [True: 48.5k, False: 0]
  ------------------
  726|  48.5k|            fAllowedHourFormats[i] = allowedFormats[i + 1];
  727|  48.5k|            if (fAllowedHourFormats[i] == ALLOWED_HOUR_FORMAT_UNKNOWN) {
  ------------------
  |  Branch (727:17): [True: 12.4k, False: 36.1k]
  ------------------
  728|  12.4k|                break;
  729|  12.4k|            }
  730|  48.5k|        }
  731|  12.4k|    } else {  // Lookup failed, twice
  732|    889|        if (!fDefaultHourFormatChar) {
  ------------------
  |  Branch (732:13): [True: 885, False: 4]
  ------------------
  733|    885|            fDefaultHourFormatChar = CAP_H;
  ------------------
  |  |   53|    885|#define CAP_H             ((char16_t)0x0048)
  ------------------
  734|    885|        }
  735|    889|        fAllowedHourFormats[0] = ALLOWED_HOUR_FORMAT_H;
  736|    889|        fAllowedHourFormats[1] = ALLOWED_HOUR_FORMAT_UNKNOWN;
  737|    889|    }
  738|  13.3k|}
_ZN6icu_7824DateTimePatternGenerator11getSkeletonERKNS_13UnicodeStringER10UErrorCode:
  767|  7.38k|/*status*/) {
  768|  7.38k|    FormatParser fp2;
  769|  7.38k|    DateTimeMatcher matcher;
  770|  7.38k|    PtnSkeleton localSkeleton;
  771|  7.38k|    matcher.set(pattern, &fp2, localSkeleton);
  772|  7.38k|    return localSkeleton.getSkeleton();
  773|  7.38k|}
_ZN6icu_7824DateTimePatternGenerator17staticGetSkeletonERKNS_13UnicodeStringER10UErrorCode:
  777|  7.38k|        const UnicodeString& pattern, UErrorCode& /*status*/) {
  778|  7.38k|    FormatParser fp;
  779|  7.38k|    DateTimeMatcher matcher;
  780|  7.38k|    PtnSkeleton localSkeleton;
  781|  7.38k|    matcher.set(pattern, &fp, localSkeleton);
  782|  7.38k|    return localSkeleton.getSkeleton();
  783|  7.38k|}
_ZN6icu_7824DateTimePatternGenerator15getBaseSkeletonERKNS_13UnicodeStringER10UErrorCode:
  786|  14.7k|DateTimePatternGenerator::getBaseSkeleton(const UnicodeString& pattern, UErrorCode& /*status*/) {
  787|  14.7k|    FormatParser fp2;
  788|  14.7k|    DateTimeMatcher matcher;
  789|  14.7k|    PtnSkeleton localSkeleton;
  790|  14.7k|    matcher.set(pattern, &fp2, localSkeleton);
  791|  14.7k|    return localSkeleton.getBaseSkeleton();
  792|  14.7k|}
_ZN6icu_7824DateTimePatternGenerator21staticGetBaseSkeletonERKNS_13UnicodeStringER10UErrorCode:
  796|  7.38k|        const UnicodeString& pattern, UErrorCode& /*status*/) {
  797|  7.38k|    FormatParser fp;
  798|  7.38k|    DateTimeMatcher matcher;
  799|  7.38k|    PtnSkeleton localSkeleton;
  800|  7.38k|    matcher.set(pattern, &fp, localSkeleton);
  801|  7.38k|    return localSkeleton.getBaseSkeleton();
  802|  7.38k|}
_ZN6icu_7824DateTimePatternGenerator14addICUPatternsERKNS_6LocaleER10UErrorCode:
  805|  14.3k|DateTimePatternGenerator::addICUPatterns(const Locale& locale, UErrorCode& status) {
  806|  14.3k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (806:9): [True: 0, False: 14.3k]
  ------------------
  807|      0|        return;
  808|      0|    }
  809|       |    
  810|  14.3k|    LocalUResourceBundlePointer rb(ures_open(nullptr, locale.getBaseName(), &status));
  ------------------
  |  | 1691|  14.3k|#define ures_open U_ICU_ENTRY_POINT_RENAME(ures_open)
  |  |  ------------------
  |  |  |  |  123|  14.3k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  14.3k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  14.3k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  811|  14.3k|    CharString calendarTypeToUse; // to be filled in with the type to use, if all goes well
  812|  14.3k|    getCalendarTypeToUse(locale, calendarTypeToUse, status);
  813|       |
  814|       |    // HACK to get around the fact that the old SimpleDateFormat code (actually, Calendar::getCalendarTypeForLocale() )
  815|       |    // returns "gregorian" for ja_JP_TRADITIONAL instead of "japanese"
  816|  14.3k|    if (uprv_strcmp(locale.getBaseName(), "ja_JP_TRADITIONAL") == 0) {
  ------------------
  |  |   38|  14.3k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  14.3k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (816:9): [True: 13, False: 14.3k]
  ------------------
  817|     13|        calendarTypeToUse.clear().append("gregorian", status);
  818|     13|    }
  819|       |    
  820|  14.3k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (820:9): [True: 776, False: 13.5k]
  ------------------
  821|    776|        return;
  822|    776|    }
  823|       |
  824|       |    // TODO: See ICU-22867
  825|  13.5k|    CharString patternResourcePath;
  826|  13.5k|    patternResourcePath.append(DT_DateTimeCalendarTag, status)
  827|  13.5k|        .append('/', status)
  828|  13.5k|        .append(calendarTypeToUse, status)
  829|  13.5k|        .append('/', status)
  830|  13.5k|        .append(DT_DateTimePatternsTag, status);
  831|       |
  832|  13.5k|    LocalUResourceBundlePointer dateTimePatterns(ures_getByKeyWithFallback(rb.getAlias(), patternResourcePath.data(),
  ------------------
  |  | 1662|  13.5k|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  833|  13.5k|                                                                           nullptr, &status));
  834|  13.5k|    if (ures_getType(dateTimePatterns.getAlias()) != URES_ARRAY || ures_getSize(dateTimePatterns.getAlias()) < 8) {
  ------------------
  |  | 1679|  13.5k|#define ures_getType U_ICU_ENTRY_POINT_RENAME(ures_getType)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (ures_getType(dateTimePatterns.getAlias()) != URES_ARRAY || ures_getSize(dateTimePatterns.getAlias()) < 8) {
  ------------------
  |  | 1674|  13.5k|#define ures_getSize U_ICU_ENTRY_POINT_RENAME(ures_getSize)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (834:9): [True: 69, False: 13.5k]
  |  Branch (834:68): [True: 0, False: 13.5k]
  ------------------
  835|     69|        status = U_INVALID_FORMAT_ERROR;
  836|     69|        return;
  837|     69|    }
  838|       |
  839|   121k|    for (int32_t i = 0; U_SUCCESS(status) && i < DateFormat::kDateTime; i++) {
  ------------------
  |  Branch (839:25): [True: 121k, False: 0]
  |  Branch (839:46): [True: 108k, False: 13.5k]
  ------------------
  840|   108k|        LocalUResourceBundlePointer patternRes(ures_getByIndex(dateTimePatterns.getAlias(), i, nullptr, &status));
  ------------------
  |  | 1660|   108k|#define ures_getByIndex U_ICU_ENTRY_POINT_RENAME(ures_getByIndex)
  |  |  ------------------
  |  |  |  |  123|   108k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   108k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   108k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  841|   108k|        UnicodeString pattern;
  842|   108k|        switch (ures_getType(patternRes.getAlias())) {
  ------------------
  |  | 1679|   108k|#define ures_getType U_ICU_ENTRY_POINT_RENAME(ures_getType)
  |  |  ------------------
  |  |  |  |  123|   108k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|   108k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|   108k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  843|   108k|            case URES_STRING:
  ------------------
  |  Branch (843:13): [True: 108k, False: 43]
  ------------------
  844|   108k|                pattern = ures_getUnicodeString(patternRes.getAlias(), &status);
  845|   108k|                break;
  846|     43|            case URES_ARRAY:
  ------------------
  |  Branch (846:13): [True: 43, False: 108k]
  ------------------
  847|     43|                pattern = ures_getUnicodeStringByIndex(patternRes.getAlias(), 0, &status);
  848|     43|                break;
  849|      0|            default:
  ------------------
  |  Branch (849:13): [True: 0, False: 108k]
  ------------------
  850|      0|                status = U_INVALID_FORMAT_ERROR;
  851|      0|                return;
  852|   108k|        }
  853|       |        
  854|   108k|        if (U_SUCCESS(status)) {
  ------------------
  |  Branch (854:13): [True: 108k, False: 0]
  ------------------
  855|   108k|            UnicodeString conflictingPattern;
  856|   108k|            addPatternWithSkeleton(pattern, nullptr, false, conflictingPattern, status);
  857|   108k|        }
  858|   108k|    }
  859|  13.5k|}
_ZN6icu_7824DateTimePatternGenerator20getCalendarTypeToUseERKNS_6LocaleERNS_10CharStringER10UErrorCode:
  910|  27.8k|DateTimePatternGenerator::getCalendarTypeToUse(const Locale& locale, CharString& destination, UErrorCode& err) {
  911|  27.8k|    destination.clear().append(DT_DateTimeGregorianTag, -1, err); // initial default
  912|  27.8k|    if ( U_SUCCESS(err) ) {
  ------------------
  |  Branch (912:10): [True: 27.8k, False: 14]
  ------------------
  913|  27.8k|        UErrorCode localStatus = U_ZERO_ERROR;
  914|  27.8k|        char localeWithCalendarKey[ULOC_LOCALE_IDENTIFIER_CAPACITY];
  915|       |        // obtain a locale that always has the calendar key value that should be used
  916|  27.8k|        ures_getFunctionalEquivalent(
  ------------------
  |  | 1663|  27.8k|#define ures_getFunctionalEquivalent U_ICU_ENTRY_POINT_RENAME(ures_getFunctionalEquivalent)
  |  |  ------------------
  |  |  |  |  123|  27.8k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  27.8k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  27.8k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  917|  27.8k|            localeWithCalendarKey,
  918|  27.8k|            ULOC_LOCALE_IDENTIFIER_CAPACITY,
  ------------------
  |  |  907|  27.8k|#define ULOC_LOCALE_IDENTIFIER_CAPACITY (ULOC_FULLNAME_CAPACITY + 1 + ULOC_KEYWORD_AND_VALUES_CAPACITY)
  |  |  ------------------
  |  |  |  |  264|  27.8k|#define ULOC_FULLNAME_CAPACITY 157
  |  |  ------------------
  |  |               #define ULOC_LOCALE_IDENTIFIER_CAPACITY (ULOC_FULLNAME_CAPACITY + 1 + ULOC_KEYWORD_AND_VALUES_CAPACITY)
  |  |  ------------------
  |  |  |  |  283|  27.8k|#define ULOC_KEYWORD_AND_VALUES_CAPACITY 100
  |  |  ------------------
  ------------------
  919|  27.8k|            nullptr,
  920|  27.8k|            "calendar",
  921|  27.8k|            "calendar",
  922|  27.8k|            locale.getName(),
  923|  27.8k|            nullptr,
  924|  27.8k|            false,
  925|  27.8k|            &localStatus);
  926|  27.8k|        localeWithCalendarKey[ULOC_LOCALE_IDENTIFIER_CAPACITY-1] = 0; // ensure null termination
  ------------------
  |  |  907|  27.8k|#define ULOC_LOCALE_IDENTIFIER_CAPACITY (ULOC_FULLNAME_CAPACITY + 1 + ULOC_KEYWORD_AND_VALUES_CAPACITY)
  |  |  ------------------
  |  |  |  |  264|  27.8k|#define ULOC_FULLNAME_CAPACITY 157
  |  |  ------------------
  |  |               #define ULOC_LOCALE_IDENTIFIER_CAPACITY (ULOC_FULLNAME_CAPACITY + 1 + ULOC_KEYWORD_AND_VALUES_CAPACITY)
  |  |  ------------------
  |  |  |  |  283|  27.8k|#define ULOC_KEYWORD_AND_VALUES_CAPACITY 100
  |  |  ------------------
  ------------------
  927|       |        // now get the calendar key value from that locale
  928|       |        // (the call to ures_getFunctionalEquivalent() above might fail, and if it does, localeWithCalendarKey
  929|       |        // won't contain a `calendar` keyword.  If this happens, the line below will stomp on `destination`,
  930|       |        // so we have to check the return code before overwriting `destination`.)
  931|  27.8k|        if (U_SUCCESS(localStatus)) {
  ------------------
  |  Branch (931:13): [True: 26.9k, False: 954]
  ------------------
  932|  26.9k|            destination = ulocimp_getKeywordValue(localeWithCalendarKey, "calendar", localStatus);
  ------------------
  |  | 1200|  26.9k|#define ulocimp_getKeywordValue U_ICU_ENTRY_POINT_RENAME(ulocimp_getKeywordValue)
  |  |  ------------------
  |  |  |  |  123|  26.9k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  26.9k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  26.9k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  933|  26.9k|        }
  934|       |        // If the input locale was invalid, don't fail with missing resource error, instead
  935|       |        // continue with default of Gregorian.
  936|  27.8k|        if (U_FAILURE(localStatus) && localStatus != U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (936:13): [True: 954, False: 26.9k]
  |  Branch (936:39): [True: 762, False: 192]
  ------------------
  937|    762|            err = localStatus;
  938|    762|        }
  939|  27.8k|    }
  940|  27.8k|}
_ZN6icu_7824DateTimePatternGenerator21AppendItemFormatsSinkD2Ev:
 1058|  13.5k|DateTimePatternGenerator::AppendItemFormatsSink::~AppendItemFormatsSink() {}
_ZN6icu_7824DateTimePatternGenerator19AppendItemNamesSinkD2Ev:
 1059|  13.5k|DateTimePatternGenerator::AppendItemNamesSink::~AppendItemNamesSink() {}
_ZN6icu_7824DateTimePatternGenerator20AvailableFormatsSinkD2Ev:
 1060|  13.5k|DateTimePatternGenerator::AvailableFormatsSink::~AvailableFormatsSink() {}
_ZN6icu_7824DateTimePatternGenerator11addCLDRDataERKNS_6LocaleER10UErrorCode:
 1063|  14.3k|DateTimePatternGenerator::addCLDRData(const Locale& locale, UErrorCode& errorCode) {
 1064|  14.3k|    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1064:9): [True: 845, False: 13.5k]
  ------------------
 1065|  13.5k|    UnicodeString rbPattern, value, field;
 1066|  13.5k|    CharString path;
 1067|       |
 1068|  13.5k|    LocalUResourceBundlePointer rb(ures_open(nullptr, locale.getName(), &errorCode));
  ------------------
  |  | 1691|  13.5k|#define ures_open U_ICU_ENTRY_POINT_RENAME(ures_open)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1069|  13.5k|    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1069:9): [True: 0, False: 13.5k]
  ------------------
 1070|       |
 1071|  13.5k|    CharString calendarTypeToUse; // to be filled in with the type to use, if all goes well
 1072|  13.5k|    getCalendarTypeToUse(locale, calendarTypeToUse, errorCode);
 1073|  13.5k|    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1073:9): [True: 0, False: 13.5k]
  ------------------
 1074|       |
 1075|       |    // Local err to ignore resource not found exceptions
 1076|  13.5k|    UErrorCode err = U_ZERO_ERROR;
 1077|       |
 1078|       |    // Load append item formats.
 1079|  13.5k|    AppendItemFormatsSink appendItemFormatsSink(*this);
 1080|  13.5k|    path.clear()
 1081|  13.5k|        .append(DT_DateTimeCalendarTag, errorCode)
 1082|  13.5k|        .append('/', errorCode)
 1083|  13.5k|        .append(calendarTypeToUse, errorCode)
 1084|  13.5k|        .append('/', errorCode)
 1085|  13.5k|        .append(DT_DateTimeAppendItemsTag, errorCode); // i.e., calendar/xxx/appendItems
 1086|  13.5k|    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1086:9): [True: 0, False: 13.5k]
  ------------------
 1087|  13.5k|    ures_getAllChildrenWithFallback(rb.getAlias(), path.data(), appendItemFormatsSink, err);
  ------------------
  |  | 1657|  13.5k|#define ures_getAllChildrenWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllChildrenWithFallback)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1088|  13.5k|    appendItemFormatsSink.fillInMissing();
 1089|       |
 1090|       |    // Load CLDR item names.
 1091|  13.5k|    err = U_ZERO_ERROR;
 1092|  13.5k|    AppendItemNamesSink appendItemNamesSink(*this);
 1093|  13.5k|    ures_getAllChildrenWithFallback(rb.getAlias(), DT_DateTimeFieldsTag, appendItemNamesSink, err);
  ------------------
  |  | 1657|  13.5k|#define ures_getAllChildrenWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllChildrenWithFallback)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1094|  13.5k|    appendItemNamesSink.fillInMissing();
 1095|       |
 1096|       |    // Load the available formats from CLDR.
 1097|  13.5k|    err = U_ZERO_ERROR;
 1098|  13.5k|    initHashtable(errorCode);
 1099|  13.5k|    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1099:9): [True: 0, False: 13.5k]
  ------------------
 1100|  13.5k|    AvailableFormatsSink availableFormatsSink(*this);
 1101|  13.5k|    path.clear()
 1102|  13.5k|        .append(DT_DateTimeCalendarTag, errorCode)
 1103|  13.5k|        .append('/', errorCode)
 1104|  13.5k|        .append(calendarTypeToUse, errorCode)
 1105|  13.5k|        .append('/', errorCode)
 1106|  13.5k|        .append(DT_DateTimeAvailableFormatsTag, errorCode); // i.e., calendar/xxx/availableFormats
 1107|  13.5k|    if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (1107:9): [True: 0, False: 13.5k]
  ------------------
 1108|  13.5k|    ures_getAllChildrenWithFallback(rb.getAlias(), path.data(), availableFormatsSink, err);
  ------------------
  |  | 1657|  13.5k|#define ures_getAllChildrenWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllChildrenWithFallback)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1109|  13.5k|}
_ZN6icu_7824DateTimePatternGenerator13initHashtableER10UErrorCode:
 1112|  13.5k|DateTimePatternGenerator::initHashtable(UErrorCode& err) {
 1113|  13.5k|    if (U_FAILURE(err)) { return; }
  ------------------
  |  Branch (1113:9): [True: 0, False: 13.5k]
  ------------------
 1114|  13.5k|    if (fAvailableFormatKeyHash!=nullptr) {
  ------------------
  |  Branch (1114:9): [True: 0, False: 13.5k]
  ------------------
 1115|      0|        return;
 1116|      0|    }
 1117|  13.5k|    LocalPointer<Hashtable> hash(new Hashtable(false, err), err);
 1118|  13.5k|    if (U_SUCCESS(err)) {
  ------------------
  |  Branch (1118:9): [True: 13.5k, False: 0]
  ------------------
 1119|  13.5k|        fAvailableFormatKeyHash = hash.orphan();
 1120|  13.5k|    }
 1121|  13.5k|}
_ZN6icu_7824DateTimePatternGenerator19setAppendItemFormatE21UDateTimePatternFieldRKNS_13UnicodeStringE:
 1124|   216k|DateTimePatternGenerator::setAppendItemFormat(UDateTimePatternField field, const UnicodeString& value) {
 1125|   216k|    appendItemFormats[field] = value;
 1126|       |    // NUL-terminate for the C API.
 1127|   216k|    appendItemFormats[field].getTerminatedBuffer();
 1128|   216k|}
_ZNK6icu_7824DateTimePatternGenerator19getAppendItemFormatE21UDateTimePatternField:
 1131|   425k|DateTimePatternGenerator::getAppendItemFormat(UDateTimePatternField field) const {
 1132|   425k|    return appendItemFormats[field];
 1133|   425k|}
_ZN6icu_7824DateTimePatternGenerator19setFieldDisplayNameE21UDateTimePatternField23UDateTimePGDisplayWidthRKNS_13UnicodeStringE:
 1146|   608k|DateTimePatternGenerator::setFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width, const UnicodeString& value) {
 1147|   608k|    fieldDisplayNames[field][width] = value;
 1148|       |    // NUL-terminate for the C API.
 1149|   608k|    fieldDisplayNames[field][width].getTerminatedBuffer();
 1150|   608k|}
_ZNK6icu_7824DateTimePatternGenerator19getFieldDisplayNameE21UDateTimePatternField23UDateTimePGDisplayWidth:
 1153|  1.56M|DateTimePatternGenerator::getFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width) const {
 1154|  1.56M|    return fieldDisplayNames[field][width];
 1155|  1.56M|}
_ZN6icu_7824DateTimePatternGenerator26getMutableFieldDisplayNameE21UDateTimePatternField23UDateTimePGDisplayWidth:
 1158|   648k|DateTimePatternGenerator::getMutableFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width) {
 1159|   648k|    return fieldDisplayNames[field][width];
 1160|   648k|}
_ZN6icu_7824DateTimePatternGenerator13getAppendNameE21UDateTimePatternFieldRNS_13UnicodeStringE:
 1163|    317|DateTimePatternGenerator::getAppendName(UDateTimePatternField field, UnicodeString& value) {
 1164|    317|    value = SINGLE_QUOTE;
  ------------------
  |  |   35|    317|#define SINGLE_QUOTE      ((char16_t)0x0027)
  ------------------
 1165|    317|    value += fieldDisplayNames[field][UDATPG_WIDTH_APPENDITEM];
 1166|    317|    value += SINGLE_QUOTE;
  ------------------
  |  |   35|    317|#define SINGLE_QUOTE      ((char16_t)0x0027)
  ------------------
 1167|    317|}
_ZN6icu_7824DateTimePatternGenerator14getBestPatternERKNS_13UnicodeStringER10UErrorCode:
 1170|  7.38k|DateTimePatternGenerator::getBestPattern(const UnicodeString& patternForm, UErrorCode& status) {
 1171|  7.38k|    return getBestPattern(patternForm, UDATPG_MATCH_NO_OPTIONS, status);
 1172|  7.38k|}
_ZN6icu_7824DateTimePatternGenerator14getBestPatternERKNS_13UnicodeStringE28UDateTimePatternMatchOptionsR10UErrorCode:
 1175|  7.38k|DateTimePatternGenerator::getBestPattern(const UnicodeString& patternForm, UDateTimePatternMatchOptions options, UErrorCode& status) {
 1176|  7.38k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1176:9): [True: 0, False: 7.38k]
  ------------------
 1177|      0|        return {};
 1178|      0|    }
 1179|  7.38k|    if (U_FAILURE(internalErrorCode)) {
  ------------------
  |  Branch (1179:9): [True: 0, False: 7.38k]
  ------------------
 1180|      0|        status = internalErrorCode;
 1181|      0|        return {};
 1182|      0|    }
 1183|  7.38k|    const UnicodeString *bestPattern = nullptr;
 1184|  7.38k|    UnicodeString dtFormat;
 1185|  7.38k|    UnicodeString resultPattern;
 1186|  7.38k|    int32_t flags = kDTPGNoFlags;
 1187|       |
 1188|  7.38k|    int32_t dateMask=(1<<UDATPG_DAYPERIOD_FIELD) - 1;
 1189|  7.38k|    int32_t timeMask=(1<<UDATPG_FIELD_COUNT) - 1 - dateMask;
 1190|       |
 1191|       |    // Replace hour metacharacters 'j', 'C' and 'J', set flags as necessary
 1192|  7.38k|    UnicodeString patternFormMapped = mapSkeletonMetacharacters(patternForm, &flags, status);
 1193|  7.38k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1193:9): [True: 0, False: 7.38k]
  ------------------
 1194|      0|        return {};
 1195|      0|    }
 1196|       |
 1197|  7.38k|    resultPattern.remove();
 1198|  7.38k|    dtMatcher->set(patternFormMapped, fp);
 1199|  7.38k|    const PtnSkeleton* specifiedSkeleton = nullptr;
 1200|  7.38k|    bestPattern=getBestRaw(*dtMatcher, -1, distanceInfo, status, &specifiedSkeleton);
 1201|  7.38k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1201:9): [True: 0, False: 7.38k]
  ------------------
 1202|      0|        return {};
 1203|      0|    }
 1204|       |
 1205|  7.38k|    if ( distanceInfo->missingFieldMask==0 && distanceInfo->extraFieldMask==0 ) {
  ------------------
  |  Branch (1205:10): [True: 6.92k, False: 463]
  |  Branch (1205:47): [True: 494, False: 6.42k]
  ------------------
 1206|    494|        resultPattern = adjustFieldTypes(*bestPattern, specifiedSkeleton, flags, options);
 1207|       |
 1208|    494|        return resultPattern;
 1209|    494|    }
 1210|  6.88k|    int32_t neededFields = dtMatcher->getFieldMask();
 1211|  6.88k|    UnicodeString datePattern=getBestAppending(neededFields & dateMask, flags, status, options);
 1212|  6.88k|    UnicodeString timePattern=getBestAppending(neededFields & timeMask, flags, status, options);
 1213|  6.88k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1213:9): [True: 0, False: 6.88k]
  ------------------
 1214|      0|        return {};
 1215|      0|    }
 1216|  6.88k|    if (datePattern.length()==0) {
  ------------------
  |  Branch (1216:9): [True: 6.55k, False: 339]
  ------------------
 1217|  6.55k|        if (timePattern.length()==0) {
  ------------------
  |  Branch (1217:13): [True: 6.42k, False: 124]
  ------------------
 1218|  6.42k|            resultPattern.remove();
 1219|  6.42k|        }
 1220|    124|        else {
 1221|    124|            return timePattern;
 1222|    124|        }
 1223|  6.55k|    }
 1224|  6.76k|    if (timePattern.length()==0) {
  ------------------
  |  Branch (1224:9): [True: 6.48k, False: 281]
  ------------------
 1225|  6.48k|        return datePattern;
 1226|  6.48k|    }
 1227|    281|    resultPattern.remove();
 1228|    281|    status = U_ZERO_ERROR;
 1229|       |    // determine which dateTimeFormat to use
 1230|    281|    PtnSkeleton* reqSkeleton = dtMatcher->getSkeletonPtr();
 1231|    281|    UDateFormatStyle style = UDAT_SHORT;
 1232|    281|    int32_t monthFieldLen = reqSkeleton->baseOriginal.getFieldLength(UDATPG_MONTH_FIELD);
 1233|    281|    if (monthFieldLen == 4) {
  ------------------
  |  Branch (1233:9): [True: 14, False: 267]
  ------------------
 1234|     14|        if (reqSkeleton->baseOriginal.getFieldLength(UDATPG_WEEKDAY_FIELD) > 0) {
  ------------------
  |  Branch (1234:13): [True: 9, False: 5]
  ------------------
 1235|      9|            style = UDAT_FULL;
 1236|      9|        } else {
 1237|      5|            style = UDAT_LONG;
 1238|      5|        }
 1239|    267|    } else if (monthFieldLen == 3) {
  ------------------
  |  Branch (1239:16): [True: 3, False: 264]
  ------------------
 1240|      3|        style = UDAT_MEDIUM;
 1241|      3|    }
 1242|       |    // and now use it to compose date and time
 1243|    281|    dtFormat=getDateTimeFormat(style, status);
 1244|    281|    SimpleFormatter(dtFormat, 2, 2, status).format(timePattern, datePattern, resultPattern, status);
 1245|    281|    return resultPattern;
 1246|  6.76k|}
_ZN6icu_7824DateTimePatternGenerator25mapSkeletonMetacharactersERKNS_13UnicodeStringEPiR10UErrorCode:
 1256|  7.38k|DateTimePatternGenerator::mapSkeletonMetacharacters(const UnicodeString& patternForm, int32_t* flags, UErrorCode& status) {
 1257|  7.38k|    UnicodeString patternFormMapped;
 1258|  7.38k|    patternFormMapped.remove();
 1259|  7.38k|    UBool inQuoted = false;
 1260|  7.38k|    int32_t patPos, patLen = patternForm.length();
 1261|  86.1M|    for (patPos = 0; patPos < patLen; patPos++) {
  ------------------
  |  Branch (1261:22): [True: 86.1M, False: 7.38k]
  ------------------
 1262|  86.1M|        char16_t patChr = patternForm.charAt(patPos);
 1263|  86.1M|        if (patChr == SINGLE_QUOTE) {
  ------------------
  |  |   35|  86.1M|#define SINGLE_QUOTE      ((char16_t)0x0027)
  ------------------
  |  Branch (1263:13): [True: 732, False: 86.1M]
  ------------------
 1264|    732|            inQuoted = !inQuoted;
 1265|  86.1M|        } else if (!inQuoted) {
  ------------------
  |  Branch (1265:20): [True: 80.9M, False: 5.15M]
  ------------------
 1266|       |            // Handle special mappings for 'j' and 'C' in which fields lengths
 1267|       |            // 1,3,5 => hour field length 1
 1268|       |            // 2,4,6 => hour field length 2
 1269|       |            // 1,2 => abbreviated dayPeriod (field length 1..3)
 1270|       |            // 3,4 => long dayPeriod (field length 4)
 1271|       |            // 5,6 => narrow dayPeriod (field length 5)
 1272|  80.9M|            if (patChr == LOW_J || patChr == CAP_C) {
  ------------------
  |  |   78|   161M|#define LOW_J             ((char16_t)0x006A)
  ------------------
                          if (patChr == LOW_J || patChr == CAP_C) {
  ------------------
  |  |   48|  80.3M|#define CAP_C             ((char16_t)0x0043)
  ------------------
  |  Branch (1272:17): [True: 635k, False: 80.3M]
  |  Branch (1272:36): [True: 563k, False: 79.7M]
  ------------------
 1273|  1.19M|                int32_t extraLen = 0; // 1 less than total field length
 1274|  8.42M|                while (patPos+1 < patLen && patternForm.charAt(patPos+1)==patChr) {
  ------------------
  |  Branch (1274:24): [True: 8.42M, False: 213]
  |  Branch (1274:45): [True: 7.22M, False: 1.19M]
  ------------------
 1275|  7.22M|                    extraLen++;
 1276|  7.22M|                    patPos++;
 1277|  7.22M|                }
 1278|  1.19M|                int32_t hourLen = 1 + (extraLen & 1);
 1279|  1.19M|                int32_t dayPeriodLen = (extraLen < 2)? 1: 3 + (extraLen >> 1);
  ------------------
  |  Branch (1279:40): [True: 1.19M, False: 956]
  ------------------
 1280|  1.19M|                char16_t hourChar = LOW_H;
  ------------------
  |  |   76|  1.19M|#define LOW_H             ((char16_t)0x0068)
  ------------------
 1281|  1.19M|                char16_t dayPeriodChar = LOW_A;
  ------------------
  |  |   69|  1.19M|#define LOW_A             ((char16_t)0x0061)
  ------------------
 1282|  1.19M|                if (patChr == LOW_J) {
  ------------------
  |  |   78|  1.19M|#define LOW_J             ((char16_t)0x006A)
  ------------------
  |  Branch (1282:21): [True: 635k, False: 563k]
  ------------------
 1283|   635k|                    hourChar = fDefaultHourFormatChar;
 1284|   635k|                } else {
 1285|   563k|                    AllowedHourFormat bestAllowed;
 1286|   563k|                    if (fAllowedHourFormats[0] != ALLOWED_HOUR_FORMAT_UNKNOWN) {
  ------------------
  |  Branch (1286:25): [True: 563k, False: 0]
  ------------------
 1287|   563k|                        bestAllowed = static_cast<AllowedHourFormat>(fAllowedHourFormats[0]);
 1288|   563k|                    } else {
 1289|      0|                        status = U_INVALID_FORMAT_ERROR;
 1290|      0|                        return {};
 1291|      0|                    }
 1292|   563k|                    if (bestAllowed == ALLOWED_HOUR_FORMAT_H || bestAllowed == ALLOWED_HOUR_FORMAT_HB || bestAllowed == ALLOWED_HOUR_FORMAT_Hb) {
  ------------------
  |  Branch (1292:25): [True: 7.41k, False: 555k]
  |  Branch (1292:65): [True: 0, False: 555k]
  |  Branch (1292:106): [True: 0, False: 555k]
  ------------------
 1293|  7.41k|                        hourChar = CAP_H;
  ------------------
  |  |   53|  7.41k|#define CAP_H             ((char16_t)0x0048)
  ------------------
 1294|   555k|                    } else if (bestAllowed == ALLOWED_HOUR_FORMAT_K || bestAllowed == ALLOWED_HOUR_FORMAT_KB || bestAllowed == ALLOWED_HOUR_FORMAT_Kb) {
  ------------------
  |  Branch (1294:32): [True: 0, False: 555k]
  |  Branch (1294:72): [True: 0, False: 555k]
  |  Branch (1294:113): [True: 0, False: 555k]
  ------------------
 1295|      0|                        hourChar = CAP_K;
  ------------------
  |  |   55|      0|#define CAP_K             ((char16_t)0x004B)
  ------------------
 1296|   555k|                    } else if (bestAllowed == ALLOWED_HOUR_FORMAT_k) {
  ------------------
  |  Branch (1296:32): [True: 0, False: 555k]
  ------------------
 1297|      0|                        hourChar = LOW_K;
  ------------------
  |  |   79|      0|#define LOW_K             ((char16_t)0x006B)
  ------------------
 1298|      0|                    }
 1299|       |                    // in #13183 just add b/B to skeleton, no longer need to set special flags
 1300|   563k|                    if (bestAllowed == ALLOWED_HOUR_FORMAT_HB || bestAllowed == ALLOWED_HOUR_FORMAT_hB || bestAllowed == ALLOWED_HOUR_FORMAT_KB) {
  ------------------
  |  Branch (1300:25): [True: 0, False: 563k]
  |  Branch (1300:66): [True: 641, False: 562k]
  |  Branch (1300:107): [True: 0, False: 562k]
  ------------------
 1301|    641|                        dayPeriodChar = CAP_B;
  ------------------
  |  |   47|    641|#define CAP_B             ((char16_t)0x0042)
  ------------------
 1302|   562k|                    } else if (bestAllowed == ALLOWED_HOUR_FORMAT_Hb || bestAllowed == ALLOWED_HOUR_FORMAT_hb || bestAllowed == ALLOWED_HOUR_FORMAT_Kb) {
  ------------------
  |  Branch (1302:32): [True: 0, False: 562k]
  |  Branch (1302:73): [True: 212, False: 562k]
  |  Branch (1302:114): [True: 0, False: 562k]
  ------------------
 1303|    212|                        dayPeriodChar = LOW_B;
  ------------------
  |  |   70|    212|#define LOW_B             ((char16_t)0x0062)
  ------------------
 1304|    212|                    }
 1305|   563k|                }
 1306|  1.19M|                if (hourChar==CAP_H || hourChar==LOW_K) {
  ------------------
  |  |   53|  2.39M|#define CAP_H             ((char16_t)0x0048)
  ------------------
                              if (hourChar==CAP_H || hourChar==LOW_K) {
  ------------------
  |  |   79|  1.18M|#define LOW_K             ((char16_t)0x006B)
  ------------------
  |  Branch (1306:21): [True: 14.7k, False: 1.18M]
  |  Branch (1306:40): [True: 0, False: 1.18M]
  ------------------
 1307|  14.7k|                    dayPeriodLen = 0;
 1308|  14.7k|                }
 1309|  2.43M|                while (dayPeriodLen-- > 0) {
  ------------------
  |  Branch (1309:24): [True: 1.23M, False: 1.19M]
  ------------------
 1310|  1.23M|                    patternFormMapped.append(dayPeriodChar);
 1311|  1.23M|                }
 1312|  2.40M|                while (hourLen-- > 0) {
  ------------------
  |  Branch (1312:24): [True: 1.21M, False: 1.19M]
  ------------------
 1313|  1.21M|                    patternFormMapped.append(hourChar);
 1314|  1.21M|                }
 1315|  79.7M|            } else if (patChr == CAP_J) {
  ------------------
  |  |   54|  79.7M|#define CAP_J             ((char16_t)0x004A)
  ------------------
  |  Branch (1315:24): [True: 484, False: 79.7M]
  ------------------
 1316|       |                // Get pattern for skeleton with H, then replace H or k
 1317|       |                // with fDefaultHourFormatChar (if different)
 1318|    484|                patternFormMapped.append(CAP_H);
  ------------------
  |  |   53|    484|#define CAP_H             ((char16_t)0x0048)
  ------------------
 1319|    484|                *flags |= kDTPGSkeletonUsesCapJ;
 1320|  79.7M|            } else {
 1321|  79.7M|                patternFormMapped.append(patChr);
 1322|  79.7M|            }
 1323|  80.9M|        }
 1324|  86.1M|    }
 1325|  7.38k|    return patternFormMapped;
 1326|  7.38k|}
_ZN6icu_7824DateTimePatternGenerator17addCanonicalItemsER10UErrorCode:
 1365|  14.3k|DateTimePatternGenerator::addCanonicalItems(UErrorCode& status) {
 1366|  14.3k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1366:9): [True: 0, False: 14.3k]
  ------------------
 1367|  14.3k|    UnicodeString  conflictingPattern;
 1368|       |
 1369|   244k|    for (int32_t i=0; i<UDATPG_FIELD_COUNT; i++) {
  ------------------
  |  Branch (1369:23): [True: 229k, False: 14.3k]
  ------------------
 1370|   229k|        if (Canonical_Items[i] > 0) {
  ------------------
  |  Branch (1370:13): [True: 229k, False: 0]
  ------------------
 1371|   229k|            addPattern(UnicodeString(Canonical_Items[i]), false, conflictingPattern, status);
 1372|   229k|        }
 1373|   229k|        if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1373:13): [True: 0, False: 229k]
  ------------------
 1374|   229k|    }
 1375|  14.3k|}
_ZN6icu_7824DateTimePatternGenerator17setDateTimeFormatE16UDateFormatStyleRKNS_13UnicodeStringER10UErrorCode:
 1392|  54.0k|DateTimePatternGenerator::setDateTimeFormat(UDateFormatStyle style, const UnicodeString& dtFormat, UErrorCode& status) {
 1393|  54.0k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1393:9): [True: 0, False: 54.0k]
  ------------------
 1394|      0|        return;
 1395|      0|    }
 1396|  54.0k|    if (style < UDAT_FULL || style > UDAT_SHORT) {
  ------------------
  |  Branch (1396:9): [True: 0, False: 54.0k]
  |  Branch (1396:30): [True: 0, False: 54.0k]
  ------------------
 1397|      0|        status = U_ILLEGAL_ARGUMENT_ERROR;
 1398|      0|        return;
 1399|      0|    }
 1400|  54.0k|    dateTimeFormat[style] = dtFormat;
 1401|       |    // Note for the following: getTerminatedBuffer() can re-allocate the UnicodeString
 1402|       |    // buffer so we do this here before clients request a const ref to the UnicodeString
 1403|       |    // or its buffer.
 1404|  54.0k|    dateTimeFormat[style].getTerminatedBuffer(); // NUL-terminate for the C API.
 1405|  54.0k|}
_ZNK6icu_7824DateTimePatternGenerator17getDateTimeFormatE16UDateFormatStyleR10UErrorCode:
 1408|    281|DateTimePatternGenerator::getDateTimeFormat(UDateFormatStyle style, UErrorCode& status) const {
 1409|    281|    static const UnicodeString emptyString = UNICODE_STRING_SIMPLE("");
  ------------------
  |  |  135|    281|#define UNICODE_STRING_SIMPLE(cs) UNICODE_STRING(cs, -1)
  |  |  ------------------
  |  |  |  |  121|    281|# define UNICODE_STRING(cs, _length) icu::UnicodeString(true, u ## cs, _length)
  |  |  ------------------
  ------------------
 1410|    281|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1410:9): [True: 0, False: 281]
  ------------------
 1411|      0|        return emptyString;
 1412|      0|    }
 1413|    281|    if (style < UDAT_FULL || style > UDAT_SHORT) {
  ------------------
  |  Branch (1413:9): [True: 0, False: 281]
  |  Branch (1413:30): [True: 0, False: 281]
  ------------------
 1414|      0|        status = U_ILLEGAL_ARGUMENT_ERROR;
 1415|      0|        return emptyString;
 1416|      0|    }
 1417|    281|    return dateTimeFormat[style];
 1418|    281|}
_ZN6icu_7824DateTimePatternGenerator23setDateTimeFromCalendarERKNS_6LocaleER10UErrorCode:
 1423|  14.3k|DateTimePatternGenerator::setDateTimeFromCalendar(const Locale& locale, UErrorCode& status) {
 1424|  14.3k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1424:9): [True: 845, False: 13.5k]
  ------------------
 1425|       |
 1426|  13.5k|    const char16_t *resStr;
 1427|  13.5k|    int32_t resStrLen = 0;
 1428|       |
 1429|  13.5k|    LocalUResourceBundlePointer calData(ures_open(nullptr, locale.getBaseName(), &status));
  ------------------
  |  | 1691|  13.5k|#define ures_open U_ICU_ENTRY_POINT_RENAME(ures_open)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1430|  13.5k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1430:9): [True: 0, False: 13.5k]
  ------------------
 1431|  13.5k|    ures_getByKey(calData.getAlias(), DT_DateTimeCalendarTag, calData.getAlias(), &status);
  ------------------
  |  | 1661|  13.5k|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1432|  13.5k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1432:9): [True: 0, False: 13.5k]
  ------------------
 1433|       |
 1434|  13.5k|    char cType[cTypeBufMax + 1];
 1435|  13.5k|    Calendar::getCalendarTypeFromLocale(locale, cType, cTypeBufMax, status);
 1436|  13.5k|    cType[cTypeBufMax] = 0;
 1437|  13.5k|    if (U_FAILURE(status) || cType[0] == 0) {
  ------------------
  |  Branch (1437:9): [True: 0, False: 13.5k]
  |  Branch (1437:30): [True: 0, False: 13.5k]
  ------------------
 1438|      0|        status = U_ZERO_ERROR;
 1439|      0|        uprv_strcpy(cType, DT_DateTimeGregorianTag);
  ------------------
  |  |   36|      0|#define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE  strcpy(dst, src)
  |  |  ------------------
  |  |  |  |  393|      0|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1440|      0|    }
 1441|  13.5k|    UBool cTypeIsGregorian = (uprv_strcmp(cType, DT_DateTimeGregorianTag) == 0);
  ------------------
  |  |   38|  13.5k|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  13.5k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1442|       |
 1443|       |    // Currently, for compatibility with pre-CLDR-42 data, we default to the "atTime"
 1444|       |    // combining patterns. Depending on guidance in CLDR 42 spec and on DisplayOptions,
 1445|       |    // we may change this.
 1446|  13.5k|    LocalUResourceBundlePointer specificCalBundle;
 1447|  13.5k|    LocalUResourceBundlePointer dateTimePatterns;
 1448|  13.5k|    int32_t dateTimeOffset = 0; // initially for DateTimePatterns%atTime
 1449|  13.5k|    if (!cTypeIsGregorian) {
  ------------------
  |  Branch (1449:9): [True: 374, False: 13.1k]
  ------------------
 1450|    374|        specificCalBundle.adoptInstead(ures_getByKeyWithFallback(calData.getAlias(), cType,
  ------------------
  |  | 1662|    374|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|    374|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    374|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    374|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1451|    374|                                        nullptr, &status));
 1452|    374|        dateTimePatterns.adoptInstead(ures_getByKeyWithFallback(specificCalBundle.getAlias(), DT_DateAtTimePatternsTag, // the %atTime variant, 4 entries
  ------------------
  |  | 1662|    374|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|    374|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    374|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    374|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1453|    374|                                        nullptr, &status));
 1454|    374|    }
 1455|  13.5k|    if (dateTimePatterns.isNull() || status == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (1455:9): [True: 13.5k, False: 1]
  |  Branch (1455:38): [True: 0, False: 1]
  ------------------
 1456|  13.5k|        status = U_ZERO_ERROR;
 1457|  13.5k|        specificCalBundle.adoptInstead(ures_getByKeyWithFallback(calData.getAlias(), DT_DateTimeGregorianTag,
  ------------------
  |  | 1662|  13.5k|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1458|  13.5k|                                        nullptr, &status));
 1459|  13.5k|        dateTimePatterns.adoptInstead(ures_getByKeyWithFallback(specificCalBundle.getAlias(), DT_DateAtTimePatternsTag, // the %atTime variant, 4 entries
  ------------------
  |  | 1662|  13.5k|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1460|  13.5k|                                        nullptr, &status));
 1461|  13.5k|    }
 1462|  13.5k|    if (U_SUCCESS(status) && (ures_getSize(dateTimePatterns.getAlias()) < 4)) {
  ------------------
  |  | 1674|  8.73k|#define ures_getSize U_ICU_ENTRY_POINT_RENAME(ures_getSize)
  |  |  ------------------
  |  |  |  |  123|  8.73k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  8.73k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  8.73k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1462:9): [True: 8.73k, False: 4.78k]
  |  Branch (1462:30): [True: 0, False: 8.73k]
  ------------------
 1463|      0|        status = U_INVALID_FORMAT_ERROR;
 1464|      0|    }
 1465|  13.5k|    if (status == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (1465:9): [True: 4.78k, False: 8.73k]
  ------------------
 1466|       |        // Try again with standard variant
 1467|  4.78k|        status = U_ZERO_ERROR;
 1468|  4.78k|        dateTimePatterns.orphan();
 1469|  4.78k|        dateTimeOffset = static_cast<int32_t>(DateFormat::kDateTimeOffset);
 1470|  4.78k|        if (!cTypeIsGregorian) {
  ------------------
  |  Branch (1470:13): [True: 263, False: 4.51k]
  ------------------
 1471|    263|            specificCalBundle.adoptInstead(ures_getByKeyWithFallback(calData.getAlias(), cType,
  ------------------
  |  | 1662|    263|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|    263|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    263|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    263|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1472|    263|                                            nullptr, &status));
 1473|    263|            dateTimePatterns.adoptInstead(ures_getByKeyWithFallback(specificCalBundle.getAlias(), DT_DateTimePatternsTag, // the standard variant, 13 entries
  ------------------
  |  | 1662|    263|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|    263|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    263|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    263|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1474|    263|                                            nullptr, &status));
 1475|    263|        }
 1476|  4.78k|        if (dateTimePatterns.isNull() || status == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (1476:13): [True: 4.51k, False: 263]
  |  Branch (1476:42): [True: 0, False: 263]
  ------------------
 1477|  4.51k|            status = U_ZERO_ERROR;
 1478|  4.51k|            specificCalBundle.adoptInstead(ures_getByKeyWithFallback(calData.getAlias(), DT_DateTimeGregorianTag,
  ------------------
  |  | 1662|  4.51k|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|  4.51k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  4.51k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  4.51k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1479|  4.51k|                                            nullptr, &status));
 1480|  4.51k|            dateTimePatterns.adoptInstead(ures_getByKeyWithFallback(specificCalBundle.getAlias(), DT_DateTimePatternsTag, // the standard variant, 13 entries
  ------------------
  |  | 1662|  4.51k|#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback)
  |  |  ------------------
  |  |  |  |  123|  4.51k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  4.51k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  4.51k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1481|  4.51k|                                            nullptr, &status));
 1482|  4.51k|        }
 1483|  4.78k|        if (U_SUCCESS(status) && (ures_getSize(dateTimePatterns.getAlias()) <= DateFormat::kDateTimeOffset + DateFormat::kShort)) {
  ------------------
  |  | 1674|  4.78k|#define ures_getSize U_ICU_ENTRY_POINT_RENAME(ures_getSize)
  |  |  ------------------
  |  |  |  |  123|  4.78k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  4.78k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  4.78k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1483:13): [True: 4.78k, False: 0]
  |  Branch (1483:34): [True: 0, False: 4.78k]
  ------------------
 1484|      0|            status = U_INVALID_FORMAT_ERROR;
 1485|      0|        }
 1486|  4.78k|    }
 1487|  13.5k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (1487:9): [True: 0, False: 13.5k]
  ------------------
 1488|  67.5k|    for (int32_t style = UDAT_FULL; style <= UDAT_SHORT; style++) {
  ------------------
  |  Branch (1488:37): [True: 54.0k, False: 13.5k]
  ------------------
 1489|  54.0k|        resStr = ures_getStringByIndex(dateTimePatterns.getAlias(), dateTimeOffset + style, &resStrLen, &status);
  ------------------
  |  | 1676|  54.0k|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  123|  54.0k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  54.0k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  54.0k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1490|  54.0k|        setDateTimeFormat(static_cast<UDateFormatStyle>(style), UnicodeString(true, resStr, resStrLen), status);
 1491|  54.0k|    }
 1492|  13.5k|}
_ZN6icu_7824DateTimePatternGenerator17setDecimalSymbolsERKNS_6LocaleER10UErrorCode:
 1495|  14.3k|DateTimePatternGenerator::setDecimalSymbols(const Locale& locale, UErrorCode& status) {
 1496|  14.3k|    DecimalFormatSymbols dfs = DecimalFormatSymbols(locale, status);
 1497|  14.3k|    if(U_SUCCESS(status)) {
  ------------------
  |  Branch (1497:8): [True: 13.3k, False: 1.05k]
  ------------------
 1498|  13.3k|        decimal = dfs.getSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol);
 1499|       |        // NUL-terminate for the C API.
 1500|  13.3k|        decimal.getTerminatedBuffer();
 1501|  13.3k|    }
 1502|  14.3k|}
_ZN6icu_7824DateTimePatternGenerator10addPatternERKNS_13UnicodeStringEaRS1_R10UErrorCode:
 1510|   229k|{
 1511|   229k|    if (U_FAILURE(internalErrorCode)) {
  ------------------
  |  Branch (1511:9): [True: 0, False: 229k]
  ------------------
 1512|      0|        status = internalErrorCode;
 1513|      0|        return UDATPG_NO_CONFLICT;
 1514|      0|    }
 1515|       |
 1516|   229k|    return addPatternWithSkeleton(pattern, nullptr, override, conflictingPattern, status);
 1517|   229k|}
_ZN6icu_7824DateTimePatternGenerator22addPatternWithSkeletonERKNS_13UnicodeStringEPS2_aRS1_R10UErrorCode:
 1536|   987k|{
 1537|   987k|    if (U_FAILURE(internalErrorCode)) {
  ------------------
  |  Branch (1537:9): [True: 0, False: 987k]
  ------------------
 1538|      0|        status = internalErrorCode;
 1539|      0|        return UDATPG_NO_CONFLICT;
 1540|      0|    }
 1541|       |
 1542|   987k|    UnicodeString basePattern;
 1543|   987k|    PtnSkeleton   skeleton;
 1544|   987k|    UDateTimePatternConflict conflictingStatus = UDATPG_NO_CONFLICT;
 1545|       |
 1546|   987k|    DateTimeMatcher matcher;
 1547|   987k|    if ( skeletonToUse == nullptr ) {
  ------------------
  |  Branch (1547:10): [True: 337k, False: 649k]
  ------------------
 1548|   337k|        matcher.set(pattern, fp, skeleton);
 1549|   337k|        matcher.getBasePattern(basePattern);
 1550|   649k|    } else {
 1551|   649k|        matcher.set(*skeletonToUse, fp, skeleton); // no longer trims skeleton fields to max len 3, per #7930
 1552|   649k|        matcher.getBasePattern(basePattern); // or perhaps instead: basePattern = *skeletonToUse;
 1553|   649k|    }
 1554|       |    // We only care about base conflicts - and replacing the pattern associated with a base - if:
 1555|       |    // 1. the conflicting previous base pattern did *not* have an explicit skeleton; in that case the previous
 1556|       |    // base + pattern combination was derived from either (a) a canonical item, (b) a standard format, or
 1557|       |    // (c) a pattern specified programmatically with a previous call to addPattern (which would only happen
 1558|       |    // if we are getting here from a subsequent call to addPattern).
 1559|       |    // 2. a skeleton is specified for the current pattern, but override=false; in that case we are checking
 1560|       |    // availableFormats items from root, which should not override any previous entry with the same base.
 1561|   987k|    UBool entryHadSpecifiedSkeleton;
 1562|   987k|    const UnicodeString *duplicatePattern = patternMap->getPatternFromBasePattern(basePattern, entryHadSpecifiedSkeleton);
 1563|   987k|    if (duplicatePattern != nullptr && (!entryHadSpecifiedSkeleton || (skeletonToUse != nullptr && !override))) {
  ------------------
  |  Branch (1563:9): [True: 131k, False: 856k]
  |  Branch (1563:41): [True: 123k, False: 7.98k]
  |  Branch (1563:72): [True: 7.98k, False: 0]
  |  Branch (1563:100): [True: 0, False: 7.98k]
  ------------------
 1564|   123k|        conflictingStatus = UDATPG_BASE_CONFLICT;
 1565|   123k|        conflictingPattern = *duplicatePattern;
 1566|   123k|        if (!override) {
  ------------------
  |  Branch (1566:13): [True: 1.79k, False: 121k]
  ------------------
 1567|  1.79k|            return conflictingStatus;
 1568|  1.79k|        }
 1569|   123k|    }
 1570|       |    // The only time we get here with override=true and skeletonToUse!=null is when adding availableFormats
 1571|       |    // items from CLDR data. In that case, we don't want an item from a parent locale to replace an item with
 1572|       |    // same skeleton from the specified locale, so skip the current item if skeletonWasSpecified is true for
 1573|       |    // the previously-specified conflicting item.
 1574|   985k|    const PtnSkeleton* entrySpecifiedSkeleton = nullptr;
 1575|   985k|    duplicatePattern = patternMap->getPatternFromSkeleton(skeleton, &entrySpecifiedSkeleton);
 1576|   985k|    if (duplicatePattern != nullptr ) {
  ------------------
  |  Branch (1576:9): [True: 82.0k, False: 903k]
  ------------------
 1577|  82.0k|        conflictingStatus = UDATPG_CONFLICT;
 1578|  82.0k|        conflictingPattern = *duplicatePattern;
 1579|  82.0k|        if (!override || (skeletonToUse != nullptr && entrySpecifiedSkeleton != nullptr)) {
  ------------------
  |  Branch (1579:13): [True: 0, False: 82.0k]
  |  Branch (1579:27): [True: 82.0k, False: 0]
  |  Branch (1579:55): [True: 0, False: 82.0k]
  ------------------
 1580|      0|            return conflictingStatus;
 1581|      0|        }
 1582|  82.0k|    }
 1583|   985k|    patternMap->add(basePattern, skeleton, pattern, skeletonToUse != nullptr, status);
 1584|   985k|    if(U_FAILURE(status)) {
  ------------------
  |  Branch (1584:8): [True: 0, False: 985k]
  ------------------
 1585|      0|        return conflictingStatus;
 1586|      0|    }
 1587|       |
 1588|   985k|    return UDATPG_NO_CONFLICT;
 1589|   985k|}
_ZNK6icu_7824DateTimePatternGenerator21getAppendFormatNumberEPKc:
 1593|   208k|DateTimePatternGenerator::getAppendFormatNumber(const char* field) const {
 1594|  1.65M|    for (int32_t i=0; i<UDATPG_FIELD_COUNT; ++i ) {
  ------------------
  |  Branch (1594:23): [True: 1.65M, False: 0]
  ------------------
 1595|  1.65M|        if (uprv_strcmp(CLDR_FIELD_APPEND[i], field)==0) {
  ------------------
  |  |   38|  1.65M|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  1.65M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1595:13): [True: 208k, False: 1.44M]
  ------------------
 1596|   208k|            return static_cast<UDateTimePatternField>(i);
 1597|   208k|        }
 1598|  1.65M|    }
 1599|      0|    return UDATPG_FIELD_COUNT;
 1600|   208k|}
_ZNK6icu_7824DateTimePatternGenerator23getFieldAndWidthIndicesEPKcP23UDateTimePGDisplayWidth:
 1603|  2.28M|DateTimePatternGenerator::getFieldAndWidthIndices(const char* key, UDateTimePGDisplayWidth* widthP) const {
 1604|  2.28M|    char cldrFieldKey[UDATPG_FIELD_KEY_MAX + 1];
 1605|  2.28M|    uprv_strncpy(cldrFieldKey, key, UDATPG_FIELD_KEY_MAX);
  ------------------
  |  |   43|  2.28M|#define uprv_strncpy(dst, src, size) U_STANDARD_CPP_NAMESPACE strncpy(dst, src, size)
  |  |  ------------------
  |  |  |  |  393|  2.28M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1606|  2.28M|    cldrFieldKey[UDATPG_FIELD_KEY_MAX]=0; // ensure termination
 1607|  2.28M|    *widthP = UDATPG_WIDE;
 1608|  2.28M|    char* hyphenPtr = uprv_strchr(cldrFieldKey, '-');
  ------------------
  |  |   40|  2.28M|#define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c)
  |  |  ------------------
  |  |  |  |  393|  2.28M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 1609|  2.28M|    if (hyphenPtr) {
  ------------------
  |  Branch (1609:9): [True: 1.73M, False: 545k]
  ------------------
 1610|  2.48M|        for (int32_t i=UDATPG_WIDTH_COUNT-1; i>0; --i) {
  ------------------
  |  Branch (1610:46): [True: 2.48M, False: 0]
  ------------------
 1611|  2.48M|            if (uprv_strcmp(CLDR_FIELD_WIDTH[i], hyphenPtr)==0) {
  ------------------
  |  |   38|  2.48M|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  2.48M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1611:17): [True: 1.73M, False: 753k]
  ------------------
 1612|  1.73M|                *widthP = static_cast<UDateTimePGDisplayWidth>(i);
 1613|  1.73M|                break;
 1614|  1.73M|            }
 1615|  2.48M|        }
 1616|  1.73M|        *hyphenPtr = 0; // now delete width portion of key
 1617|  1.73M|    }
 1618|  24.7M|    for (int32_t i=0; i<UDATPG_FIELD_COUNT; ++i ) {
  ------------------
  |  Branch (1618:23): [True: 24.0M, False: 705k]
  ------------------
 1619|  24.0M|        if (uprv_strcmp(CLDR_FIELD_NAME[i],cldrFieldKey)==0) {
  ------------------
  |  |   38|  24.0M|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|  24.0M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (1619:13): [True: 1.57M, False: 22.4M]
  ------------------
 1620|  1.57M|            return static_cast<UDateTimePatternField>(i);
 1621|  1.57M|        }
 1622|  24.0M|    }
 1623|   705k|    return UDATPG_FIELD_COUNT;
 1624|  2.28M|}
_ZN6icu_7824DateTimePatternGenerator10getBestRawERNS_15DateTimeMatcherEiPNS_12DistanceInfoER10UErrorCodePPKNS_11PtnSkeletonE:
 1631|  8.44k|                                     const PtnSkeleton** specifiedSkeletonPtr) {
 1632|  8.44k|    int32_t bestDistance = 0x7fffffff;
 1633|  8.44k|    int32_t bestMissingFieldMask = -1;
 1634|  8.44k|    DistanceInfo tempInfo;
 1635|  8.44k|    const UnicodeString *bestPattern=nullptr;
 1636|  8.44k|    const PtnSkeleton* specifiedSkeleton=nullptr;
 1637|       |
 1638|  8.44k|    PatternMapIterator it(status);
 1639|  8.44k|    if (U_FAILURE(status)) { return nullptr; }
  ------------------
  |  Branch (1639:9): [True: 0, False: 8.44k]
  ------------------
 1640|       |
 1641|   553k|    for (it.set(*patternMap); it.hasNext(); ) {
  ------------------
  |  Branch (1641:31): [True: 545k, False: 7.97k]
  ------------------
 1642|   545k|        DateTimeMatcher trial = it.next();
 1643|   545k|        if (trial.equals(skipMatcher)) {
  ------------------
  |  Branch (1643:13): [True: 0, False: 545k]
  ------------------
 1644|      0|            continue;
 1645|      0|        }
 1646|   545k|        int32_t distance=source.getDistance(trial, includeMask, tempInfo);
 1647|       |        // Because we iterate over a map the order is undefined. Can change between implementations,
 1648|       |        // versions, and will very likely be different between Java and C/C++.
 1649|       |        // So if we have patterns with the same distance we also look at the missingFieldMask,
 1650|       |        // and we favour the smallest one. Because the field is a bitmask this technically means we
 1651|       |        // favour differences in the "least significant fields". For example we prefer the one with differences
 1652|       |        // in seconds field vs one with difference in the hours field.
 1653|   545k|        if (distance<bestDistance || (distance==bestDistance && bestMissingFieldMask<tempInfo.missingFieldMask)) {
  ------------------
  |  Branch (1653:13): [True: 20.4k, False: 525k]
  |  Branch (1653:39): [True: 107k, False: 418k]
  |  Branch (1653:65): [True: 216, False: 106k]
  ------------------
 1654|  20.6k|            bestDistance=distance;
 1655|  20.6k|            bestMissingFieldMask=tempInfo.missingFieldMask;
 1656|  20.6k|            bestPattern=patternMap->getPatternFromSkeleton(*trial.getSkeletonPtr(), &specifiedSkeleton);
 1657|  20.6k|            missingFields->setTo(tempInfo);
 1658|  20.6k|            if (distance==0) {
  ------------------
  |  Branch (1658:17): [True: 469, False: 20.1k]
  ------------------
 1659|    469|                break;
 1660|    469|            }
 1661|  20.6k|        }
 1662|   545k|    }
 1663|       |
 1664|       |    // If the best raw match had a specified skeleton and that skeleton was requested by the caller,
 1665|       |    // then return it too. This generally happens when the caller needs to pass that skeleton
 1666|       |    // through to adjustFieldTypes so the latter can do a better job.
 1667|  8.44k|    if (bestPattern && specifiedSkeletonPtr) {
  ------------------
  |  Branch (1667:9): [True: 8.44k, False: 0]
  |  Branch (1667:24): [True: 8.44k, False: 0]
  ------------------
 1668|  8.44k|        *specifiedSkeletonPtr = specifiedSkeleton;
 1669|  8.44k|    }
 1670|  8.44k|    return bestPattern;
 1671|  8.44k|}
_ZN6icu_7824DateTimePatternGenerator16adjustFieldTypesERKNS_13UnicodeStringEPKNS_11PtnSkeletonEi28UDateTimePatternMatchOptions:
 1677|  1.68k|                                           UDateTimePatternMatchOptions options) {
 1678|  1.68k|    UnicodeString newPattern;
 1679|  1.68k|    fp->set(pattern);
 1680|  6.46k|    for (int32_t i=0; i < fp->itemNumber; i++) {
  ------------------
  |  Branch (1680:23): [True: 4.78k, False: 1.68k]
  ------------------
 1681|  4.78k|        UnicodeString field = fp->items[i];
 1682|  4.78k|        if ( fp->isQuoteLiteral(field) ) {
  ------------------
  |  Branch (1682:14): [True: 191, False: 4.59k]
  ------------------
 1683|       |
 1684|    191|            UnicodeString quoteLiteral;
 1685|    191|            fp->getQuoteLiteral(quoteLiteral, &i);
 1686|    191|            newPattern += quoteLiteral;
 1687|    191|        }
 1688|  4.59k|        else {
 1689|  4.59k|            if (fp->isPatternSeparator(field)) {
  ------------------
  |  Branch (1689:17): [True: 1.05k, False: 3.53k]
  ------------------
 1690|  1.05k|                newPattern+=field;
 1691|  1.05k|                continue;
 1692|  1.05k|            }
 1693|  3.53k|            int32_t canonicalIndex = fp->getCanonicalIndex(field);
 1694|  3.53k|            if (canonicalIndex < 0) {
  ------------------
  |  Branch (1694:17): [True: 592, False: 2.94k]
  ------------------
 1695|    592|                newPattern+=field;
 1696|    592|                continue;  // don't adjust
 1697|    592|            }
 1698|  2.94k|            const dtTypeElem *row = &dtTypes[canonicalIndex];
 1699|  2.94k|            int32_t typeValue = row->field;
 1700|       |
 1701|       |            // handle day periods - with #13183, no longer need special handling here, integrated with normal types
 1702|       |
 1703|  2.94k|            if ((flags & kDTPGFixFractionalSeconds) != 0 && typeValue == UDATPG_SECOND_FIELD) {
  ------------------
  |  Branch (1703:17): [True: 519, False: 2.42k]
  |  Branch (1703:61): [True: 131, False: 388]
  ------------------
 1704|    131|                field += decimal;
 1705|    131|                dtMatcher->skeleton.original.appendFieldTo(UDATPG_FRACTIONAL_SECOND_FIELD, field);
 1706|  2.81k|            } else if (dtMatcher->skeleton.type[typeValue]!=0) {
  ------------------
  |  Branch (1706:24): [True: 2.80k, False: 13]
  ------------------
 1707|       |                    // Here:
 1708|       |                    // - "reqField" is the field from the originally requested skeleton after replacement
 1709|       |                    // of metacharacters 'j', 'C' and 'J', with length "reqFieldLen".
 1710|       |                    // - "field" is the field from the found pattern.
 1711|       |                    //
 1712|       |                    // The adjusted field should consist of characters from the originally requested
 1713|       |                    // skeleton, except in the case of UDATPG_MONTH_FIELD or
 1714|       |                    // UDATPG_WEEKDAY_FIELD or UDATPG_YEAR_FIELD, in which case it should consist
 1715|       |                    // of characters from the found pattern. In some cases of UDATPG_HOUR_FIELD,
 1716|       |                    // there is adjustment following the "defaultHourFormatChar". There is explanation
 1717|       |                    // how it is done below.
 1718|       |                    //
 1719|       |                    // The length of the adjusted field (adjFieldLen) should match that in the originally
 1720|       |                    // requested skeleton, except that in the following cases the length of the adjusted field
 1721|       |                    // should match that in the found pattern (i.e. the length of this pattern field should
 1722|       |                    // not be adjusted):
 1723|       |                    // 1. typeValue is UDATPG_HOUR_FIELD/MINUTE/SECOND and the corresponding bit in options is
 1724|       |                    //    not set (ticket #7180). Note, we may want to implement a similar change for other
 1725|       |                    //    numeric fields (MM, dd, etc.) so the default behavior is to get locale preference for
 1726|       |                    //    field length, but options bits can be used to override this.
 1727|       |                    // 2. There is a specified skeleton for the found pattern and one of the following is true:
 1728|       |                    //    a) The length of the field in the skeleton (skelFieldLen) is equal to reqFieldLen.
 1729|       |                    //    b) The pattern field is numeric and the skeleton field is not, or vice versa.
 1730|       |
 1731|  2.80k|                    char16_t reqFieldChar = dtMatcher->skeleton.original.getFieldChar(typeValue);
 1732|  2.80k|                    int32_t reqFieldLen = dtMatcher->skeleton.original.getFieldLength(typeValue);
 1733|  2.80k|                    if (reqFieldChar == CAP_E && reqFieldLen < 3)
  ------------------
  |  |   50|  5.60k|#define CAP_E             ((char16_t)0x0045)
  ------------------
  |  Branch (1733:25): [True: 139, False: 2.66k]
  |  Branch (1733:50): [True: 75, False: 64]
  ------------------
 1734|     75|                        reqFieldLen = 3; // 1-3 for E are equivalent to 3 for c,e
 1735|  2.80k|                    int32_t adjFieldLen = reqFieldLen;
 1736|  2.80k|                    if ( (typeValue==UDATPG_HOUR_FIELD && (options & UDATPG_MATCH_HOUR_FIELD_LENGTH)==0) ||
  ------------------
  |  Branch (1736:27): [True: 662, False: 2.14k]
  |  Branch (1736:59): [True: 662, False: 0]
  ------------------
 1737|  2.80k|                         (typeValue==UDATPG_MINUTE_FIELD && (options & UDATPG_MATCH_MINUTE_FIELD_LENGTH)==0) ||
  ------------------
  |  Branch (1737:27): [True: 400, False: 1.74k]
  |  Branch (1737:61): [True: 400, False: 0]
  ------------------
 1738|  2.80k|                         (typeValue==UDATPG_SECOND_FIELD && (options & UDATPG_MATCH_SECOND_FIELD_LENGTH)==0) ) {
  ------------------
  |  Branch (1738:27): [True: 162, False: 1.57k]
  |  Branch (1738:61): [True: 162, False: 0]
  ------------------
 1739|  1.22k|                         adjFieldLen = field.length();
 1740|  1.57k|                    } else if (specifiedSkeleton && reqFieldChar != LOW_C && reqFieldChar != LOW_E) {
  ------------------
  |  |   71|  2.74k|#define LOW_C             ((char16_t)0x0063)
  ------------------
                                  } else if (specifiedSkeleton && reqFieldChar != LOW_C && reqFieldChar != LOW_E) {
  ------------------
  |  |   73|  1.13k|#define LOW_E             ((char16_t)0x0065)
  ------------------
  |  Branch (1740:32): [True: 1.16k, False: 414]
  |  Branch (1740:53): [True: 1.13k, False: 32]
  |  Branch (1740:78): [True: 1.11k, False: 16]
  ------------------
 1741|       |                        // (we skip this section for 'c' and 'e' because unlike the other characters considered in this function,
 1742|       |                        // they have no minimum field length-- 'E' and 'EE' are equivalent to 'EEE', but 'e' and 'ee' are not
 1743|       |                        // equivalent to 'eee' -- see the entries for "week day" in
 1744|       |                        // https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table for more info)
 1745|  1.11k|                        int32_t skelFieldLen = specifiedSkeleton->original.getFieldLength(typeValue);
 1746|  1.11k|                        UBool patFieldIsNumeric = (row->type > 0);
 1747|  1.11k|                        UBool skelFieldIsNumeric = (specifiedSkeleton->type[typeValue] > 0);
 1748|  1.11k|                        if (skelFieldLen == reqFieldLen || (patFieldIsNumeric && !skelFieldIsNumeric) || (skelFieldIsNumeric && !patFieldIsNumeric)) {
  ------------------
  |  Branch (1748:29): [True: 758, False: 359]
  |  Branch (1748:61): [True: 30, False: 329]
  |  Branch (1748:82): [True: 2, False: 28]
  |  Branch (1748:107): [True: 29, False: 328]
  |  Branch (1748:129): [True: 1, False: 28]
  ------------------
 1749|       |                            // don't adjust the field length in the found pattern
 1750|    761|                            adjFieldLen = field.length();
 1751|    761|                        }
 1752|  1.11k|                    }
 1753|  2.80k|                    char16_t c = (typeValue!= UDATPG_HOUR_FIELD
  ------------------
  |  Branch (1753:35): [True: 2.14k, False: 662]
  ------------------
 1754|  2.80k|                            && typeValue!= UDATPG_MONTH_FIELD
  ------------------
  |  Branch (1754:32): [True: 1.99k, False: 151]
  ------------------
 1755|  2.80k|                            && typeValue!= UDATPG_WEEKDAY_FIELD
  ------------------
  |  Branch (1755:32): [True: 1.80k, False: 187]
  ------------------
 1756|  2.80k|                            && (typeValue!= UDATPG_YEAR_FIELD || reqFieldChar==CAP_Y))
  ------------------
  |  |   66|    166|#define CAP_Y             ((char16_t)0x0059)
  ------------------
  |  Branch (1756:33): [True: 1.63k, False: 166]
  |  Branch (1756:66): [True: 24, False: 142]
  ------------------
 1757|  2.80k|                            ? reqFieldChar
 1758|  2.80k|                            : field.charAt(0);
 1759|  2.80k|                    if (c == CAP_E && adjFieldLen < 3) {
  ------------------
  |  |   50|  5.60k|#define CAP_E             ((char16_t)0x0045)
  ------------------
  |  Branch (1759:25): [True: 46, False: 2.75k]
  |  Branch (1759:39): [True: 26, False: 20]
  ------------------
 1760|     26|                        c = LOW_E;
  ------------------
  |  |   73|     26|#define LOW_E             ((char16_t)0x0065)
  ------------------
 1761|     26|                    }
 1762|  2.80k|                    if (typeValue == UDATPG_HOUR_FIELD && fDefaultHourFormatChar != 0) {
  ------------------
  |  Branch (1762:25): [True: 662, False: 2.14k]
  |  Branch (1762:59): [True: 662, False: 0]
  ------------------
 1763|       |                        // The adjustment here is required to match spec (https://www.unicode.org/reports/tr35/tr35-dates.html#dfst-hour).
 1764|       |                        // It is necessary to match the hour-cycle preferred by the Locale.
 1765|       |                        // Given that, we need to do the following adjustments:
 1766|       |                        // 1. When hour-cycle is h11 it should replace 'h' by 'K'.
 1767|       |                        // 2. When hour-cycle is h23 it should replace 'H' by 'k'.
 1768|       |                        // 3. When hour-cycle is h24 it should replace 'k' by 'H'.
 1769|       |                        // 4. When hour-cycle is h12 it should replace 'K' by 'h'.
 1770|       |
 1771|    662|                        if ((flags & kDTPGSkeletonUsesCapJ) != 0 || reqFieldChar == fDefaultHourFormatChar) {
  ------------------
  |  Branch (1771:29): [True: 42, False: 620]
  |  Branch (1771:69): [True: 408, False: 212]
  ------------------
 1772|    450|                            c = fDefaultHourFormatChar;
 1773|    450|                        } else if (reqFieldChar == LOW_H && fDefaultHourFormatChar == CAP_K) {
  ------------------
  |  |   76|    424|#define LOW_H             ((char16_t)0x0068)
  ------------------
                                      } else if (reqFieldChar == LOW_H && fDefaultHourFormatChar == CAP_K) {
  ------------------
  |  |   55|    158|#define CAP_K             ((char16_t)0x004B)
  ------------------
  |  Branch (1773:36): [True: 158, False: 54]
  |  Branch (1773:61): [True: 0, False: 158]
  ------------------
 1774|      0|                            c = CAP_K;
  ------------------
  |  |   55|      0|#define CAP_K             ((char16_t)0x004B)
  ------------------
 1775|    212|                        } else if (reqFieldChar == CAP_H && fDefaultHourFormatChar == LOW_K) {
  ------------------
  |  |   53|    424|#define CAP_H             ((char16_t)0x0048)
  ------------------
                                      } else if (reqFieldChar == CAP_H && fDefaultHourFormatChar == LOW_K) {
  ------------------
  |  |   79|     13|#define LOW_K             ((char16_t)0x006B)
  ------------------
  |  Branch (1775:36): [True: 13, False: 199]
  |  Branch (1775:61): [True: 0, False: 13]
  ------------------
 1776|      0|                            c = LOW_K;
  ------------------
  |  |   79|      0|#define LOW_K             ((char16_t)0x006B)
  ------------------
 1777|    212|                        } else if (reqFieldChar == LOW_K && fDefaultHourFormatChar == CAP_H) {
  ------------------
  |  |   79|    424|#define LOW_K             ((char16_t)0x006B)
  ------------------
                                      } else if (reqFieldChar == LOW_K && fDefaultHourFormatChar == CAP_H) {
  ------------------
  |  |   53|     20|#define CAP_H             ((char16_t)0x0048)
  ------------------
  |  Branch (1777:36): [True: 20, False: 192]
  |  Branch (1777:61): [True: 4, False: 16]
  ------------------
 1778|      4|                            c = CAP_H;
  ------------------
  |  |   53|      4|#define CAP_H             ((char16_t)0x0048)
  ------------------
 1779|    208|                        } else if (reqFieldChar == CAP_K && fDefaultHourFormatChar == LOW_H) {
  ------------------
  |  |   55|    416|#define CAP_K             ((char16_t)0x004B)
  ------------------
                                      } else if (reqFieldChar == CAP_K && fDefaultHourFormatChar == LOW_H) {
  ------------------
  |  |   76|     21|#define LOW_H             ((char16_t)0x0068)
  ------------------
  |  Branch (1779:36): [True: 21, False: 187]
  |  Branch (1779:61): [True: 10, False: 11]
  ------------------
 1780|     10|                            c = LOW_H;
  ------------------
  |  |   76|     10|#define LOW_H             ((char16_t)0x0068)
  ------------------
 1781|     10|                        }
 1782|    662|                    }
 1783|       |
 1784|  2.80k|                    field.remove();
 1785|  14.5k|                    for (int32_t j=adjFieldLen; j>0; --j) {
  ------------------
  |  Branch (1785:49): [True: 11.7k, False: 2.80k]
  ------------------
 1786|  11.7k|                        field += c;
 1787|  11.7k|                    }
 1788|  2.80k|            }
 1789|  2.94k|            newPattern+=field;
 1790|  2.94k|        }
 1791|  4.78k|    }
 1792|  1.68k|    return newPattern;
 1793|  1.68k|}
_ZN6icu_7824DateTimePatternGenerator16getBestAppendingEiiR10UErrorCode28UDateTimePatternMatchOptions:
 1796|  13.7k|DateTimePatternGenerator::getBestAppending(int32_t missingFields, int32_t flags, UErrorCode &status, UDateTimePatternMatchOptions options) {
 1797|  13.7k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (1797:9): [True: 0, False: 13.7k]
  ------------------
 1798|      0|        return {};
 1799|      0|    }
 1800|  13.7k|    UnicodeString  resultPattern, tempPattern;
 1801|  13.7k|    const UnicodeString* tempPatternPtr;
 1802|  13.7k|    int32_t lastMissingFieldMask=0;
 1803|  13.7k|    if (missingFields!=0) {
  ------------------
  |  Branch (1803:9): [True: 745, False: 13.0k]
  ------------------
 1804|    745|        resultPattern=UnicodeString();
 1805|    745|        const PtnSkeleton* specifiedSkeleton=nullptr;
 1806|    745|        tempPatternPtr = getBestRaw(*dtMatcher, missingFields, distanceInfo, status, &specifiedSkeleton);
 1807|    745|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (1807:13): [True: 0, False: 745]
  ------------------
 1808|      0|            return {};
 1809|      0|        }
 1810|    745|        tempPattern = *tempPatternPtr;
 1811|    745|        resultPattern = adjustFieldTypes(tempPattern, specifiedSkeleton, flags, options);
 1812|    745|        if ( distanceInfo->missingFieldMask==0 ) {
  ------------------
  |  Branch (1812:14): [True: 315, False: 430]
  ------------------
 1813|    315|            return resultPattern;
 1814|    315|        }
 1815|    878|        while (distanceInfo->missingFieldMask!=0) { // precondition: EVERY single field must work!
  ------------------
  |  Branch (1815:16): [True: 481, False: 397]
  ------------------
 1816|    481|            if ( lastMissingFieldMask == distanceInfo->missingFieldMask ) {
  ------------------
  |  Branch (1816:18): [True: 33, False: 448]
  ------------------
 1817|     33|                break;  // cannot find the proper missing field
 1818|     33|            }
 1819|    448|            if (((distanceInfo->missingFieldMask & UDATPG_SECOND_AND_FRACTIONAL_MASK)==UDATPG_FRACTIONAL_MASK) &&
  ------------------
  |  Branch (1819:17): [True: 147, False: 301]
  ------------------
 1820|    448|                ((missingFields & UDATPG_SECOND_AND_FRACTIONAL_MASK) == UDATPG_SECOND_AND_FRACTIONAL_MASK)) {
  ------------------
  |  Branch (1820:17): [True: 131, False: 16]
  ------------------
 1821|    131|                resultPattern = adjustFieldTypes(resultPattern, specifiedSkeleton, flags | kDTPGFixFractionalSeconds, options);
 1822|    131|                distanceInfo->missingFieldMask &= ~UDATPG_FRACTIONAL_MASK;
 1823|    131|                continue;
 1824|    131|            }
 1825|    317|            int32_t startingMask = distanceInfo->missingFieldMask;
 1826|    317|            tempPatternPtr = getBestRaw(*dtMatcher, distanceInfo->missingFieldMask, distanceInfo, status, &specifiedSkeleton);
 1827|    317|            if (U_FAILURE(status)) {
  ------------------
  |  Branch (1827:17): [True: 0, False: 317]
  ------------------
 1828|      0|                return {};
 1829|      0|            }
 1830|    317|            tempPattern = *tempPatternPtr;
 1831|    317|            tempPattern = adjustFieldTypes(tempPattern, specifiedSkeleton, flags, options);
 1832|    317|            int32_t foundMask=startingMask& ~distanceInfo->missingFieldMask;
 1833|    317|            int32_t topField=getTopBitNumber(foundMask);
 1834|       |
 1835|    317|            if (appendItemFormats[topField].length() != 0) {
  ------------------
  |  Branch (1835:17): [True: 317, False: 0]
  ------------------
 1836|    317|                UnicodeString appendName;
 1837|    317|                getAppendName(static_cast<UDateTimePatternField>(topField), appendName);
 1838|    317|                const UnicodeString *values[3] = {
 1839|    317|                    &resultPattern,
 1840|    317|                    &tempPattern,
 1841|    317|                    &appendName
 1842|    317|                };
 1843|    317|                SimpleFormatter(appendItemFormats[topField], 2, 3, status).
 1844|    317|                    formatAndReplace(values, 3, resultPattern, nullptr, 0, status);
 1845|    317|            }
 1846|    317|            lastMissingFieldMask = distanceInfo->missingFieldMask;
 1847|    317|        }
 1848|    430|    }
 1849|  13.4k|    return resultPattern;
 1850|  13.7k|}
_ZNK6icu_7824DateTimePatternGenerator15getTopBitNumberEi:
 1853|    317|DateTimePatternGenerator::getTopBitNumber(int32_t foundMask) const {
 1854|    317|    if ( foundMask==0 ) {
  ------------------
  |  Branch (1854:10): [True: 0, False: 317]
  ------------------
 1855|      0|        return 0;
 1856|      0|    }
 1857|    317|    int32_t i=0;
 1858|  3.52k|    while (foundMask!=0) {
  ------------------
  |  Branch (1858:12): [True: 3.21k, False: 317]
  ------------------
 1859|  3.21k|        foundMask >>=1;
 1860|  3.21k|        ++i;
 1861|  3.21k|    }
 1862|    317|    if (i-1 >UDATPG_ZONE_FIELD) {
  ------------------
  |  Branch (1862:9): [True: 0, False: 317]
  ------------------
 1863|      0|        return UDATPG_ZONE_FIELD;
 1864|      0|    }
 1865|    317|    else
 1866|    317|        return i-1;
 1867|    317|}
_ZN6icu_7824DateTimePatternGenerator18setAvailableFormatERKNS_13UnicodeStringER10UErrorCode:
 1871|   649k|{
 1872|   649k|    fAvailableFormatKeyHash->puti(key, 1, err);
 1873|   649k|}
_ZNK6icu_7824DateTimePatternGenerator20isAvailableFormatSetERKNS_13UnicodeStringE:
 1876|  1.09M|DateTimePatternGenerator::isAvailableFormatSet(const UnicodeString &key) const {
 1877|  1.09M|    return fAvailableFormatKeyHash->geti(key) == 1;
 1878|  1.09M|}
_ZNK6icu_7824DateTimePatternGenerator21getPatternForSkeletonERKNS_13UnicodeStringE:
 1922|  7.38k|DateTimePatternGenerator::getPatternForSkeleton(const UnicodeString& skeleton) const {
 1923|  7.38k|    PtnElem *curElem;
 1924|       |
 1925|  7.38k|    if (skeleton.length() ==0) {
  ------------------
  |  Branch (1925:9): [True: 0, False: 7.38k]
  ------------------
 1926|      0|        return emptyString;
 1927|      0|    }
 1928|  7.38k|    curElem = patternMap->getHeader(skeleton.charAt(0));
 1929|  9.51k|    while ( curElem != nullptr ) {
  ------------------
  |  Branch (1929:13): [True: 2.15k, False: 7.35k]
  ------------------
 1930|  2.15k|        if ( curElem->skeleton->getSkeleton()==skeleton ) {
  ------------------
  |  Branch (1930:14): [True: 26, False: 2.12k]
  ------------------
 1931|     26|            return curElem->pattern;
 1932|     26|        }
 1933|  2.12k|        curElem = curElem->next.getAlias();
 1934|  2.12k|    }
 1935|  7.35k|    return emptyString;
 1936|  7.38k|}
_ZN6icu_7810PatternMapC2Ev:
 2014|  14.7k|PatternMap::PatternMap() {
 2015|   782k|   for (int32_t i=0; i < MAX_PATTERN_ENTRIES; ++i ) {
  ------------------
  |  |   26|   782k|#define MAX_PATTERN_ENTRIES 52
  ------------------
  |  Branch (2015:22): [True: 767k, False: 14.7k]
  ------------------
 2016|   767k|       boot[i] = nullptr;
 2017|   767k|   }
 2018|  14.7k|   isDupAllowed = true;
 2019|  14.7k|}
_ZNK6icu_7810PatternMap9getHeaderEDs:
 2063|  2.00M|PatternMap::getHeader(char16_t baseChar) const {
 2064|  2.00M|    PtnElem* curElem;
 2065|       |
 2066|  2.00M|    if ( (baseChar >= CAP_A) && (baseChar <= CAP_Z) ) {
  ------------------
  |  |   46|  2.00M|#define CAP_A             ((char16_t)0x0041)
  ------------------
                  if ( (baseChar >= CAP_A) && (baseChar <= CAP_Z) ) {
  ------------------
  |  |   67|  2.00M|#define CAP_Z             ((char16_t)0x005A)
  ------------------
  |  Branch (2066:10): [True: 2.00M, False: 193]
  |  Branch (2066:33): [True: 1.13M, False: 868k]
  ------------------
 2067|  1.13M|         curElem = boot[baseChar-CAP_A];
  ------------------
  |  |   46|  1.13M|#define CAP_A             ((char16_t)0x0041)
  ------------------
 2068|  1.13M|    }
 2069|   868k|    else {
 2070|   868k|        if ( (baseChar >=LOW_A) && (baseChar <= LOW_Z) ) {
  ------------------
  |  |   69|   868k|#define LOW_A             ((char16_t)0x0061)
  ------------------
                      if ( (baseChar >=LOW_A) && (baseChar <= LOW_Z) ) {
  ------------------
  |  |   94|   868k|#define LOW_Z             ((char16_t)0x007A)
  ------------------
  |  Branch (2070:14): [True: 868k, False: 202]
  |  Branch (2070:36): [True: 861k, False: 6.45k]
  ------------------
 2071|   861k|            curElem = boot[26+baseChar-LOW_A];
  ------------------
  |  |   69|   861k|#define LOW_A             ((char16_t)0x0061)
  ------------------
 2072|   861k|        }
 2073|  6.65k|        else {
 2074|  6.65k|            return nullptr;
 2075|  6.65k|        }
 2076|   868k|    }
 2077|  1.99M|    return curElem;
 2078|  2.00M|}
_ZN6icu_7810PatternMapD2Ev:
 2080|  14.7k|PatternMap::~PatternMap() {
 2081|   782k|   for (int32_t i=0; i < MAX_PATTERN_ENTRIES; ++i ) {
  ------------------
  |  |   26|   782k|#define MAX_PATTERN_ENTRIES 52
  ------------------
  |  Branch (2081:22): [True: 767k, False: 14.7k]
  ------------------
 2082|   767k|       if (boot[i] != nullptr ) {
  ------------------
  |  Branch (2082:12): [True: 243k, False: 524k]
  ------------------
 2083|   243k|           delete boot[i];
 2084|   243k|           boot[i] = nullptr;
 2085|   243k|       }
 2086|   767k|   }
 2087|  14.7k|}  // PatternMap destructor
_ZN6icu_7810PatternMap3addERKNS_13UnicodeStringERKNS_11PtnSkeletonES3_aR10UErrorCode:
 2094|   985k|                UErrorCode &status) {
 2095|   985k|    char16_t baseChar = basePattern.charAt(0);
 2096|   985k|    PtnElem *curElem, *baseElem;
 2097|   985k|    status = U_ZERO_ERROR;
 2098|       |
 2099|       |    // the baseChar must be A-Z or a-z
 2100|   985k|    if ((baseChar >= CAP_A) && (baseChar <= CAP_Z)) {
  ------------------
  |  |   46|   985k|#define CAP_A             ((char16_t)0x0041)
  ------------------
                  if ((baseChar >= CAP_A) && (baseChar <= CAP_Z)) {
  ------------------
  |  |   67|   985k|#define CAP_Z             ((char16_t)0x005A)
  ------------------
  |  Branch (2100:9): [True: 985k, False: 0]
  |  Branch (2100:32): [True: 556k, False: 428k]
  ------------------
 2101|   556k|        baseElem = boot[baseChar-CAP_A];
  ------------------
  |  |   46|   556k|#define CAP_A             ((char16_t)0x0041)
  ------------------
 2102|   556k|    }
 2103|   428k|    else {
 2104|   428k|        if ((baseChar >=LOW_A) && (baseChar <= LOW_Z)) {
  ------------------
  |  |   69|   428k|#define LOW_A             ((char16_t)0x0061)
  ------------------
                      if ((baseChar >=LOW_A) && (baseChar <= LOW_Z)) {
  ------------------
  |  |   94|   428k|#define LOW_Z             ((char16_t)0x007A)
  ------------------
  |  Branch (2104:13): [True: 428k, False: 0]
  |  Branch (2104:35): [True: 428k, False: 0]
  ------------------
 2105|   428k|            baseElem = boot[26+baseChar-LOW_A];
  ------------------
  |  |   69|   428k|#define LOW_A             ((char16_t)0x0061)
  ------------------
 2106|   428k|         }
 2107|      0|         else {
 2108|      0|             status = U_ILLEGAL_CHARACTER;
 2109|      0|             return;
 2110|      0|         }
 2111|   428k|    }
 2112|       |
 2113|   985k|    if (baseElem == nullptr) {
  ------------------
  |  Branch (2113:9): [True: 243k, False: 742k]
  ------------------
 2114|   243k|        LocalPointer<PtnElem> newElem(new PtnElem(basePattern, value), status);
 2115|   243k|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (2115:13): [True: 0, False: 243k]
  ------------------
 2116|      0|            return; // out of memory
 2117|      0|        }
 2118|   243k|        newElem->skeleton.adoptInsteadAndCheckErrorCode(new PtnSkeleton(skeleton), status);
 2119|   243k|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (2119:13): [True: 0, False: 243k]
  ------------------
 2120|      0|            return; // out of memory
 2121|      0|        }
 2122|   243k|        newElem->skeletonWasSpecified = skeletonWasSpecified;
 2123|   243k|        if (baseChar >= LOW_A) {
  ------------------
  |  |   69|   243k|#define LOW_A             ((char16_t)0x0061)
  ------------------
  |  Branch (2123:13): [True: 100k, False: 142k]
  ------------------
 2124|   100k|            boot[26 + (baseChar - LOW_A)] = newElem.orphan(); // the boot array now owns the PtnElem.
  ------------------
  |  |   69|   100k|#define LOW_A             ((char16_t)0x0061)
  ------------------
 2125|   100k|        }
 2126|   142k|        else {
 2127|   142k|            boot[baseChar - CAP_A] = newElem.orphan(); // the boot array now owns the PtnElem.
  ------------------
  |  |   46|   142k|#define CAP_A             ((char16_t)0x0041)
  ------------------
 2128|   142k|        }
 2129|   243k|    }
 2130|   985k|    if ( baseElem != nullptr ) {
  ------------------
  |  Branch (2130:10): [True: 742k, False: 243k]
  ------------------
 2131|   742k|        curElem = getDuplicateElem(basePattern, skeleton, baseElem);
 2132|       |
 2133|   742k|        if (curElem == nullptr) {
  ------------------
  |  Branch (2133:13): [True: 660k, False: 82.0k]
  ------------------
 2134|       |            // add new element to the list.
 2135|   660k|            curElem = baseElem;
 2136|  3.06M|            while( curElem -> next != nullptr )
  ------------------
  |  Branch (2136:20): [True: 2.40M, False: 660k]
  ------------------
 2137|  2.40M|            {
 2138|  2.40M|                curElem = curElem->next.getAlias();
 2139|  2.40M|            }
 2140|       |
 2141|   660k|            LocalPointer<PtnElem> newElem(new PtnElem(basePattern, value), status);
 2142|   660k|            if (U_FAILURE(status)) {
  ------------------
  |  Branch (2142:17): [True: 0, False: 660k]
  ------------------
 2143|      0|                return; // out of memory
 2144|      0|            }
 2145|   660k|            newElem->skeleton.adoptInsteadAndCheckErrorCode(new PtnSkeleton(skeleton), status);
 2146|   660k|            if (U_FAILURE(status)) {
  ------------------
  |  Branch (2146:17): [True: 0, False: 660k]
  ------------------
 2147|      0|                return; // out of memory
 2148|      0|            }
 2149|   660k|            newElem->skeletonWasSpecified = skeletonWasSpecified;
 2150|   660k|            curElem->next.adoptInstead(newElem.orphan());
 2151|   660k|            curElem = curElem->next.getAlias();
 2152|   660k|        }
 2153|  82.0k|        else {
 2154|       |            // Pattern exists in the list already.
 2155|  82.0k|            if ( !isDupAllowed ) {
  ------------------
  |  Branch (2155:18): [True: 0, False: 82.0k]
  ------------------
 2156|      0|                return;
 2157|      0|            }
 2158|       |            // Overwrite the value.
 2159|  82.0k|            curElem->pattern = value;
 2160|       |            // It was a bug that we were not doing the following previously,
 2161|       |            // though that bug hid other problems by making things partly work.
 2162|  82.0k|            curElem->skeletonWasSpecified = skeletonWasSpecified;
 2163|  82.0k|        }
 2164|   742k|    }
 2165|   985k|}  // PatternMap::add
_ZNK6icu_7810PatternMap25getPatternFromBasePatternERKNS_13UnicodeStringERa:
 2169|   987k|PatternMap::getPatternFromBasePattern(const UnicodeString& basePattern, UBool& skeletonWasSpecified) const { // key to search for
 2170|   987k|   PtnElem *curElem;
 2171|       |
 2172|   987k|   if ((curElem=getHeader(basePattern.charAt(0)))==nullptr) {
  ------------------
  |  Branch (2172:8): [True: 243k, False: 744k]
  ------------------
 2173|   243k|       return nullptr;  // no match
 2174|   243k|   }
 2175|       |
 2176|  3.08M|   do  {
 2177|  3.08M|       if ( basePattern.compare(curElem->basePattern)==0 ) {
  ------------------
  |  Branch (2177:13): [True: 131k, False: 2.95M]
  ------------------
 2178|   131k|          skeletonWasSpecified = curElem->skeletonWasSpecified;
 2179|   131k|          return &(curElem->pattern);
 2180|   131k|       }
 2181|  2.95M|       curElem = curElem->next.getAlias();
 2182|  2.95M|   } while (curElem != nullptr);
  ------------------
  |  Branch (2182:13): [True: 2.33M, False: 613k]
  ------------------
 2183|       |
 2184|   613k|   return nullptr;
 2185|   744k|}  // PatternMap::getFromBasePattern
_ZNK6icu_7810PatternMap22getPatternFromSkeletonERKNS_11PtnSkeletonEPPS2_:
 2195|  1.00M|PatternMap::getPatternFromSkeleton(const PtnSkeleton& skeleton, const PtnSkeleton** specifiedSkeletonPtr) const { // key to search for
 2196|  1.00M|   PtnElem *curElem;
 2197|       |
 2198|  1.00M|   if (specifiedSkeletonPtr) {
  ------------------
  |  Branch (2198:8): [True: 1.00M, False: 0]
  ------------------
 2199|  1.00M|       *specifiedSkeletonPtr = nullptr;
 2200|  1.00M|   }
 2201|       |
 2202|       |   // find boot entry
 2203|  1.00M|   char16_t baseChar = skeleton.getFirstChar();
 2204|  1.00M|   if ((curElem=getHeader(baseChar))==nullptr) {
  ------------------
  |  Branch (2204:8): [True: 243k, False: 762k]
  ------------------
 2205|   243k|       return nullptr;  // no match
 2206|   243k|   }
 2207|       |
 2208|  3.22M|   do  {
 2209|  3.22M|       UBool equal;
 2210|  3.22M|       if (specifiedSkeletonPtr != nullptr) { // called from DateTimePatternGenerator::getBestRaw or addPattern, use original
  ------------------
  |  Branch (2210:12): [True: 3.22M, False: 0]
  ------------------
 2211|  3.22M|           equal = curElem->skeleton->original == skeleton.original;
 2212|  3.22M|       } else { // called from DateTimePatternGenerator::getRedundants, use baseOriginal
 2213|      0|           equal = curElem->skeleton->baseOriginal == skeleton.baseOriginal;
 2214|      0|       }
 2215|  3.22M|       if (equal) {
  ------------------
  |  Branch (2215:12): [True: 102k, False: 3.12M]
  ------------------
 2216|   102k|           if (specifiedSkeletonPtr && curElem->skeletonWasSpecified) {
  ------------------
  |  Branch (2216:16): [True: 102k, False: 0]
  |  Branch (2216:40): [True: 12.1k, False: 90.5k]
  ------------------
 2217|  12.1k|               *specifiedSkeletonPtr = curElem->skeleton.getAlias();
 2218|  12.1k|           }
 2219|   102k|           return &(curElem->pattern);
 2220|   102k|       }
 2221|  3.12M|       curElem = curElem->next.getAlias();
 2222|  3.12M|   } while (curElem != nullptr);
  ------------------
  |  Branch (2222:13): [True: 2.46M, False: 660k]
  ------------------
 2223|       |
 2224|   660k|   return nullptr;
 2225|   762k|}
_ZN6icu_7810PatternMap16getDuplicateElemERKNS_13UnicodeStringERKNS_11PtnSkeletonEPNS_7PtnElemE:
 2269|   742k|            PtnElem *baseElem) {
 2270|   742k|   PtnElem *curElem;
 2271|       |
 2272|   742k|   if ( baseElem == nullptr ) {
  ------------------
  |  Branch (2272:9): [True: 0, False: 742k]
  ------------------
 2273|      0|         return nullptr;
 2274|      0|   }
 2275|   742k|   else {
 2276|   742k|         curElem = baseElem;
 2277|   742k|   }
 2278|  3.19M|   do {
 2279|  3.19M|     if ( basePattern.compare(curElem->basePattern)==0 ) {
  ------------------
  |  Branch (2279:11): [True: 129k, False: 3.06M]
  ------------------
 2280|   129k|         UBool isEqual = true;
 2281|  1.81M|         for (int32_t i = 0; i < UDATPG_FIELD_COUNT; ++i) {
  ------------------
  |  Branch (2281:30): [True: 1.73M, False: 82.0k]
  ------------------
 2282|  1.73M|            if (curElem->skeleton->type[i] != skeleton.type[i] ) {
  ------------------
  |  Branch (2282:17): [True: 47.7k, False: 1.68M]
  ------------------
 2283|  47.7k|                isEqual = false;
 2284|  47.7k|                break;
 2285|  47.7k|            }
 2286|  1.73M|        }
 2287|   129k|        if (isEqual) {
  ------------------
  |  Branch (2287:13): [True: 82.0k, False: 47.7k]
  ------------------
 2288|  82.0k|            return curElem;
 2289|  82.0k|        }
 2290|   129k|     }
 2291|  3.11M|     curElem = curElem->next.getAlias();
 2292|  3.11M|   } while( curElem != nullptr );
  ------------------
  |  Branch (2292:13): [True: 2.45M, False: 660k]
  ------------------
 2293|       |
 2294|       |   // end of the list
 2295|   660k|   return nullptr;
 2296|       |
 2297|   742k|}  // PatternMap::getDuplicateElem
_ZN6icu_7815DateTimeMatcherC2Ev:
 2299|  1.04M|DateTimeMatcher::DateTimeMatcher() {
 2300|  1.04M|}
_ZN6icu_7815DateTimeMatcherD2Ev:
 2302|  1.59M|DateTimeMatcher::~DateTimeMatcher() {}
_ZN6icu_7815DateTimeMatcherC2ERKS0_:
 2304|   545k|DateTimeMatcher::DateTimeMatcher(const DateTimeMatcher& other) {
 2305|   545k|    copyFrom(other.skeleton);
 2306|   545k|}
_ZN6icu_7815DateTimeMatcher3setERKNS_13UnicodeStringEPNS_12FormatParserE:
 2315|  7.38k|DateTimeMatcher::set(const UnicodeString& pattern, FormatParser* fp) {
 2316|  7.38k|    PtnSkeleton localSkeleton;
 2317|  7.38k|    return set(pattern, fp, localSkeleton);
 2318|  7.38k|}
_ZN6icu_7815DateTimeMatcher3setERKNS_13UnicodeStringEPNS_12FormatParserERNS_11PtnSkeletonE:
 2321|  1.03M|DateTimeMatcher::set(const UnicodeString& pattern, FormatParser* fp, PtnSkeleton& skeletonResult) {
 2322|  1.03M|    int32_t i;
 2323|  17.5M|    for (i=0; i<UDATPG_FIELD_COUNT; ++i) {
  ------------------
  |  Branch (2323:15): [True: 16.5M, False: 1.03M]
  ------------------
 2324|  16.5M|        skeletonResult.type[i] = NONE;
  ------------------
  |  |   31|  16.5M|#define NONE          0
  ------------------
 2325|  16.5M|    }
 2326|  1.03M|    skeletonResult.original.clear();
 2327|  1.03M|    skeletonResult.baseOriginal.clear();
 2328|  1.03M|    skeletonResult.addedDefaultDayPeriod = false;
 2329|       |
 2330|  1.03M|    fp->set(pattern);
 2331|  4.40M|    for (i=0; i < fp->itemNumber; i++) {
  ------------------
  |  Branch (2331:15): [True: 3.37M, False: 1.03M]
  ------------------
 2332|  3.37M|        const UnicodeString& value = fp->items[i];
 2333|       |        // don't skip 'a' anymore, dayPeriod handled specially below
 2334|       |
 2335|  3.37M|        if ( fp->isQuoteLiteral(value) ) {
  ------------------
  |  Branch (2335:14): [True: 6.02k, False: 3.36M]
  ------------------
 2336|  6.02k|            UnicodeString quoteLiteral;
 2337|  6.02k|            fp->getQuoteLiteral(quoteLiteral, &i);
 2338|  6.02k|            continue;
 2339|  6.02k|        }
 2340|  3.36M|        int32_t canonicalIndex = fp->getCanonicalIndex(value);
 2341|  3.36M|        if (canonicalIndex < 0) {
  ------------------
  |  Branch (2341:13): [True: 974k, False: 2.39M]
  ------------------
 2342|   974k|            continue;
 2343|   974k|        }
 2344|  2.39M|        const dtTypeElem *row = &dtTypes[canonicalIndex];
 2345|  2.39M|        int32_t field = row->field;
 2346|  2.39M|        skeletonResult.original.populate(field, value);
 2347|  2.39M|        char16_t repeatChar = row->patternChar;
 2348|  2.39M|        int32_t repeatCount = row->minLen;
 2349|  2.39M|        skeletonResult.baseOriginal.populate(field, repeatChar, repeatCount);
 2350|  2.39M|        int16_t subField = row->type;
 2351|  2.39M|        if (row->type > 0) {
  ------------------
  |  Branch (2351:13): [True: 1.64M, False: 744k]
  ------------------
 2352|  1.64M|            U_ASSERT(value.length() < INT16_MAX);
  ------------------
  |  |   35|  1.64M|#   define U_ASSERT(exp) (void)0
  ------------------
 2353|  1.64M|            subField += static_cast<int16_t>(value.length());
 2354|  1.64M|        }
 2355|  2.39M|        skeletonResult.type[field] = subField;
 2356|  2.39M|    }
 2357|       |
 2358|       |    // #20739, we have a skeleton with minutes and milliseconds, but no seconds
 2359|       |    //
 2360|       |    // Theoretically we would need to check and fix all fields with "gaps":
 2361|       |    // for example year-day (no month), month-hour (no day), and so on, All the possible field combinations.
 2362|       |    // Plus some smartness: year + hour => should we add month, or add day-of-year?
 2363|       |    // What about month + day-of-week, or month + am/pm indicator.
 2364|       |    // I think beyond a certain point we should not try to fix bad developer input and try guessing what they mean.
 2365|       |    // Garbage in, garbage out.
 2366|  1.03M|    if (!skeletonResult.original.isFieldEmpty(UDATPG_MINUTE_FIELD)
  ------------------
  |  Branch (2366:9): [True: 299k, False: 732k]
  ------------------
 2367|  1.03M|        && !skeletonResult.original.isFieldEmpty(UDATPG_FRACTIONAL_SECOND_FIELD)
  ------------------
  |  Branch (2367:12): [True: 781, False: 298k]
  ------------------
 2368|  1.03M|        && skeletonResult.original.isFieldEmpty(UDATPG_SECOND_FIELD)) {
  ------------------
  |  Branch (2368:12): [True: 751, False: 30]
  ------------------
 2369|       |        // Force the use of seconds
 2370|  48.8k|        for (i = 0; dtTypes[i].patternChar != 0; i++) {
  ------------------
  |  Branch (2370:21): [True: 48.8k, False: 0]
  ------------------
 2371|  48.8k|            if (dtTypes[i].field == UDATPG_SECOND_FIELD) {
  ------------------
  |  Branch (2371:17): [True: 751, False: 48.0k]
  ------------------
 2372|       |                // first entry for UDATPG_SECOND_FIELD
 2373|    751|                skeletonResult.original.populate(UDATPG_SECOND_FIELD, dtTypes[i].patternChar, dtTypes[i].minLen);
 2374|    751|                skeletonResult.baseOriginal.populate(UDATPG_SECOND_FIELD, dtTypes[i].patternChar, dtTypes[i].minLen);
 2375|       |                // We add value.length, same as above, when type is first initialized.
 2376|       |                // The value we want to "fake" here is "s", and 1 means "s".length()
 2377|    751|                int16_t subField = dtTypes[i].type;
 2378|    751|                skeletonResult.type[UDATPG_SECOND_FIELD] = (subField > 0) ? subField + 1 : subField;
  ------------------
  |  Branch (2378:60): [True: 751, False: 0]
  ------------------
 2379|    751|                break;
 2380|    751|            }
 2381|  48.8k|        }
 2382|    751|    }
 2383|       |
 2384|       |    // #13183, handle special behavior for day period characters (a, b, B)
 2385|  1.03M|    if (!skeletonResult.original.isFieldEmpty(UDATPG_HOUR_FIELD)) {
  ------------------
  |  Branch (2385:9): [True: 328k, False: 703k]
  ------------------
 2386|   328k|        if (skeletonResult.original.getFieldChar(UDATPG_HOUR_FIELD)==LOW_H || skeletonResult.original.getFieldChar(UDATPG_HOUR_FIELD)==CAP_K) {
  ------------------
  |  |   76|   656k|#define LOW_H             ((char16_t)0x0068)
  ------------------
                      if (skeletonResult.original.getFieldChar(UDATPG_HOUR_FIELD)==LOW_H || skeletonResult.original.getFieldChar(UDATPG_HOUR_FIELD)==CAP_K) {
  ------------------
  |  |   55|   136k|#define CAP_K             ((char16_t)0x004B)
  ------------------
  |  Branch (2386:13): [True: 191k, False: 136k]
  |  Branch (2386:79): [True: 93, False: 135k]
  ------------------
 2387|       |            // We have a skeleton with 12-hour-cycle format
 2388|   192k|            if (skeletonResult.original.isFieldEmpty(UDATPG_DAYPERIOD_FIELD)) {
  ------------------
  |  Branch (2388:17): [True: 95.0k, False: 97.0k]
  ------------------
 2389|       |                // But we do not have a day period in the skeleton; add the default DAYPERIOD (currently "a")
 2390|  4.56M|                for (i = 0; dtTypes[i].patternChar != 0; i++) {
  ------------------
  |  Branch (2390:29): [True: 4.56M, False: 0]
  ------------------
 2391|  4.56M|                    if ( dtTypes[i].field == UDATPG_DAYPERIOD_FIELD ) {
  ------------------
  |  Branch (2391:26): [True: 95.0k, False: 4.46M]
  ------------------
 2392|       |                        // first entry for UDATPG_DAYPERIOD_FIELD
 2393|  95.0k|                        skeletonResult.original.populate(UDATPG_DAYPERIOD_FIELD, dtTypes[i].patternChar, dtTypes[i].minLen);
 2394|  95.0k|                        skeletonResult.baseOriginal.populate(UDATPG_DAYPERIOD_FIELD, dtTypes[i].patternChar, dtTypes[i].minLen);
 2395|  95.0k|                        skeletonResult.type[UDATPG_DAYPERIOD_FIELD] = dtTypes[i].type;
 2396|  95.0k|                        skeletonResult.addedDefaultDayPeriod = true;
 2397|  95.0k|                        break;
 2398|  95.0k|                    }
 2399|  4.56M|                }
 2400|  95.0k|            }
 2401|   192k|        } else {
 2402|       |            // Skeleton has 24-hour-cycle hour format and has dayPeriod, delete dayPeriod (i.e. ignore it)
 2403|   135k|            skeletonResult.original.clearField(UDATPG_DAYPERIOD_FIELD);
 2404|   135k|            skeletonResult.baseOriginal.clearField(UDATPG_DAYPERIOD_FIELD);
 2405|   135k|            skeletonResult.type[UDATPG_DAYPERIOD_FIELD] = NONE;
  ------------------
  |  |   31|   135k|#define NONE          0
  ------------------
 2406|   135k|        }
 2407|   328k|    }
 2408|  1.03M|    copyFrom(skeletonResult);
 2409|  1.03M|}
_ZN6icu_7815DateTimeMatcher14getBasePatternERNS_13UnicodeStringE:
 2412|   987k|DateTimeMatcher::getBasePattern(UnicodeString &result ) {
 2413|   987k|    result.remove(); // Reset the result first.
 2414|   987k|    skeleton.baseOriginal.appendTo(result);
 2415|   987k|}
_ZNK6icu_7815DateTimeMatcher11getDistanceERKS0_iRNS_12DistanceInfoE:
 2424|   545k|DateTimeMatcher::getDistance(const DateTimeMatcher& other, int32_t includeMask, DistanceInfo& distanceInfo) const {
 2425|   545k|    int32_t result = 0;
 2426|   545k|    distanceInfo.clear();
 2427|  9.27M|    for (int32_t i=0; i<UDATPG_FIELD_COUNT; ++i ) {
  ------------------
  |  Branch (2427:23): [True: 8.73M, False: 545k]
  ------------------
 2428|  8.73M|        int32_t myType = (includeMask&(1<<i))==0 ? 0 : skeleton.type[i];
  ------------------
  |  Branch (2428:26): [True: 864k, False: 7.86M]
  ------------------
 2429|  8.73M|        int32_t otherType = other.skeleton.type[i];
 2430|  8.73M|        if (myType==otherType) {
  ------------------
  |  Branch (2430:13): [True: 7.10M, False: 1.62M]
  ------------------
 2431|  7.10M|            continue;
 2432|  7.10M|        }
 2433|  1.62M|        if (myType==0) {// and other is not
  ------------------
  |  Branch (2433:13): [True: 1.33M, False: 286k]
  ------------------
 2434|  1.33M|            result += EXTRA_FIELD;
  ------------------
  |  |   32|  1.33M|#define EXTRA_FIELD   0x10000
  ------------------
 2435|  1.33M|            distanceInfo.addExtra(i);
 2436|  1.33M|        }
 2437|   286k|        else {
 2438|   286k|            if (otherType==0) {
  ------------------
  |  Branch (2438:17): [True: 244k, False: 41.8k]
  ------------------
 2439|   244k|                result += MISSING_FIELD;
  ------------------
  |  |   33|   244k|#define MISSING_FIELD  0x1000
  ------------------
 2440|   244k|                distanceInfo.addMissing(i);
 2441|   244k|            }
 2442|  41.8k|            else {
 2443|  41.8k|                result += abs(myType - otherType);
 2444|  41.8k|            }
 2445|   286k|        }
 2446|       |
 2447|  1.62M|    }
 2448|   545k|    return result;
 2449|   545k|}
_ZN6icu_7815DateTimeMatcher8copyFromERKNS_11PtnSkeletonE:
 2452|  2.12M|DateTimeMatcher::copyFrom(const PtnSkeleton& newSkeleton) {
 2453|  2.12M|    skeleton.copyFrom(newSkeleton);
 2454|  2.12M|}
_ZNK6icu_7815DateTimeMatcher6equalsEPKS0_:
 2463|   545k|DateTimeMatcher::equals(const DateTimeMatcher* other) const {
 2464|   545k|    if (other==nullptr) { return false; }
  ------------------
  |  Branch (2464:9): [True: 545k, False: 0]
  ------------------
 2465|      0|    return skeleton.original == other->skeleton.original;
 2466|   545k|}
_ZNK6icu_7815DateTimeMatcher12getFieldMaskEv:
 2469|  6.88k|DateTimeMatcher::getFieldMask() const {
 2470|  6.88k|    int32_t result = 0;
 2471|       |
 2472|   117k|    for (int32_t i=0; i<UDATPG_FIELD_COUNT; ++i) {
  ------------------
  |  Branch (2472:23): [True: 110k, False: 6.88k]
  ------------------
 2473|   110k|        if (skeleton.type[i]!=0) {
  ------------------
  |  Branch (2473:13): [True: 1.91k, False: 108k]
  ------------------
 2474|  1.91k|            result |= (1<<i);
 2475|  1.91k|        }
 2476|   110k|    }
 2477|  6.88k|    return result;
 2478|  6.88k|}
_ZN6icu_7815DateTimeMatcher14getSkeletonPtrEv:
 2481|  20.9k|DateTimeMatcher::getSkeletonPtr() {
 2482|  20.9k|    return &skeleton;
 2483|  20.9k|}
_ZN6icu_7812FormatParserC2Ev:
 2485|  51.6k|FormatParser::FormatParser () {
 2486|  51.6k|    status = START;
 2487|  51.6k|    itemNumber = 0;
 2488|  51.6k|}
_ZN6icu_7812FormatParserD2Ev:
 2491|  51.6k|FormatParser::~FormatParser () {
 2492|  51.6k|}
_ZN6icu_7812FormatParser9setTokensERKNS_13UnicodeStringEiPi:
 2498|  4.44M|FormatParser::setTokens(const UnicodeString& pattern, int32_t startPos, int32_t *len) {
 2499|  4.44M|    int32_t curLoc = startPos;
 2500|  4.44M|    if ( curLoc >= pattern.length()) {
  ------------------
  |  Branch (2500:10): [True: 1.02M, False: 3.41M]
  ------------------
 2501|  1.02M|        return DONE;
 2502|  1.02M|    }
 2503|       |    // check the current char is between A-Z or a-z
 2504|  74.6M|    do {
 2505|  74.6M|        char16_t c=pattern.charAt(curLoc);
 2506|  74.6M|        if ( (c>=CAP_A && c<=CAP_Z) || (c>=LOW_A && c<=LOW_Z) ) {
  ------------------
  |  |   46|   149M|#define CAP_A             ((char16_t)0x0041)
  ------------------
                      if ( (c>=CAP_A && c<=CAP_Z) || (c>=LOW_A && c<=LOW_Z) ) {
  ------------------
  |  |   67|  74.3M|#define CAP_Z             ((char16_t)0x005A)
  ------------------
                      if ( (c>=CAP_A && c<=CAP_Z) || (c>=LOW_A && c<=LOW_Z) ) {
  ------------------
  |  |   69|  33.5M|#define LOW_A             ((char16_t)0x0061)
  ------------------
                      if ( (c>=CAP_A && c<=CAP_Z) || (c>=LOW_A && c<=LOW_Z) ) {
  ------------------
  |  |   94|  16.4M|#define LOW_Z             ((char16_t)0x007A)
  ------------------
  |  Branch (2506:15): [True: 74.3M, False: 307k]
  |  Branch (2506:27): [True: 57.8M, False: 16.4M]
  |  Branch (2506:41): [True: 16.4M, False: 308k]
  |  Branch (2506:53): [True: 15.7M, False: 698k]
  ------------------
 2507|  73.6M|           curLoc++;
 2508|  73.6M|        }
 2509|  1.00M|        else {
 2510|  1.00M|               startPos = curLoc;
 2511|  1.00M|               *len=1;
 2512|  1.00M|               return ADD_TOKEN;
 2513|  1.00M|        }
 2514|       |
 2515|  73.6M|        if ( pattern.charAt(curLoc)!= pattern.charAt(startPos) ) {
  ------------------
  |  Branch (2515:14): [True: 2.41M, False: 71.2M]
  ------------------
 2516|  2.41M|            break;  // not the same token
 2517|  2.41M|        }
 2518|  73.6M|    } while(curLoc <= pattern.length());
  ------------------
  |  Branch (2518:13): [True: 71.2M, False: 0]
  ------------------
 2519|  2.41M|    *len = curLoc-startPos;
 2520|  2.41M|    return ADD_TOKEN;
 2521|  3.41M|}
_ZN6icu_7812FormatParser3setERKNS_13UnicodeStringE:
 2524|  1.03M|FormatParser::set(const UnicodeString& pattern) {
 2525|  1.03M|    int32_t startPos = 0;
 2526|  1.03M|    TokenStatus result = START;
 2527|  1.03M|    int32_t len = 0;
 2528|  1.03M|    itemNumber = 0;
 2529|       |
 2530|  4.44M|    do {
 2531|  4.44M|        result = setTokens( pattern, startPos, &len );
 2532|  4.44M|        if ( result == ADD_TOKEN )
  ------------------
  |  Branch (2532:14): [True: 3.41M, False: 1.02M]
  ------------------
 2533|  3.41M|        {
 2534|  3.41M|            items[itemNumber++] = UnicodeString(pattern, startPos, len );
 2535|  3.41M|            startPos += len;
 2536|  3.41M|        }
 2537|  1.02M|        else {
 2538|  1.02M|            break;
 2539|  1.02M|        }
 2540|  4.44M|    } while (result==ADD_TOKEN && itemNumber < MAX_DT_TOKEN);
  ------------------
  |  |   28|  3.41M|#define MAX_DT_TOKEN        50
  ------------------
  |  Branch (2540:14): [True: 3.41M, False: 0]
  |  Branch (2540:35): [True: 3.40M, False: 8.42k]
  ------------------
 2541|  1.03M|}
_ZN6icu_7812FormatParser17getCanonicalIndexERKNS_13UnicodeStringEa:
 2544|  3.36M|FormatParser::getCanonicalIndex(const UnicodeString& s, UBool strict) {
 2545|  3.36M|    int32_t len = s.length();
 2546|  3.36M|    if (len == 0) {
  ------------------
  |  Branch (2546:9): [True: 0, False: 3.36M]
  ------------------
 2547|      0|        return -1;
 2548|      0|    }
 2549|  3.36M|    char16_t ch = s.charAt(0);
 2550|       |
 2551|       |    // Verify that all are the same character.
 2552|  56.1M|    for (int32_t l = 1; l < len; l++) {
  ------------------
  |  Branch (2552:25): [True: 52.7M, False: 3.36M]
  ------------------
 2553|  52.7M|        if (ch != s.charAt(l)) {
  ------------------
  |  Branch (2553:13): [True: 0, False: 52.7M]
  ------------------
 2554|      0|            return -1;
 2555|      0|        }
 2556|  52.7M|    }
 2557|  3.36M|    int32_t i = 0;
 2558|  3.36M|    int32_t bestRow = -1;
 2559|   180M|    while (dtTypes[i].patternChar != 0x0000) {
  ------------------
  |  Branch (2559:12): [True: 179M, False: 975k]
  ------------------
 2560|   179M|        if ( dtTypes[i].patternChar != ch ) {
  ------------------
  |  Branch (2560:14): [True: 176M, False: 2.75M]
  ------------------
 2561|   176M|            ++i;
 2562|   176M|            continue;
 2563|   176M|        }
 2564|  2.75M|        bestRow = i;
 2565|  2.75M|        if (dtTypes[i].patternChar != dtTypes[i+1].patternChar) {
  ------------------
  |  Branch (2565:13): [True: 1.51M, False: 1.23M]
  ------------------
 2566|  1.51M|            return i;
 2567|  1.51M|        }
 2568|  1.23M|        if (dtTypes[i+1].minLen <= len) {
  ------------------
  |  Branch (2568:13): [True: 359k, False: 875k]
  ------------------
 2569|   359k|            ++i;
 2570|   359k|            continue;
 2571|   359k|        }
 2572|   875k|        return i;
 2573|  1.23M|    }
 2574|   975k|    return strict ? -1 : bestRow;
  ------------------
  |  Branch (2574:12): [True: 975k, False: 0]
  ------------------
 2575|  3.36M|}
_ZN6icu_7812FormatParser14isQuoteLiteralERKNS_13UnicodeStringE:
 2578|  3.37M|FormatParser::isQuoteLiteral(const UnicodeString& s) {
 2579|  3.37M|    return s.charAt(0) == SINGLE_QUOTE;
  ------------------
  |  |   35|  3.37M|#define SINGLE_QUOTE      ((char16_t)0x0027)
  ------------------
 2580|  3.37M|}
_ZN6icu_7812FormatParser15getQuoteLiteralERNS_13UnicodeStringEPi:
 2585|  6.21k|FormatParser::getQuoteLiteral(UnicodeString& quote, int32_t *itemIndex) {
 2586|  6.21k|    int32_t i = *itemIndex;
 2587|       |
 2588|  6.21k|    quote.remove();
 2589|  6.21k|    if (items[i].charAt(0)==SINGLE_QUOTE) {
  ------------------
  |  |   35|  6.21k|#define SINGLE_QUOTE      ((char16_t)0x0027)
  ------------------
  |  Branch (2589:9): [True: 6.21k, False: 0]
  ------------------
 2590|  6.21k|        quote += items[i];
 2591|  6.21k|        ++i;
 2592|  6.21k|    }
 2593|  41.4k|    while ( i < itemNumber ) {
  ------------------
  |  Branch (2593:13): [True: 40.5k, False: 880]
  ------------------
 2594|  40.5k|        if ( items[i].charAt(0)==SINGLE_QUOTE ) {
  ------------------
  |  |   35|  40.5k|#define SINGLE_QUOTE      ((char16_t)0x0027)
  ------------------
  |  Branch (2594:14): [True: 5.79k, False: 34.7k]
  ------------------
 2595|  5.79k|            if ( (i+1<itemNumber) && (items[i+1].charAt(0)==SINGLE_QUOTE)) {
  ------------------
  |  |   35|  5.41k|#define SINGLE_QUOTE      ((char16_t)0x0027)
  ------------------
  |  Branch (2595:18): [True: 5.41k, False: 378]
  |  Branch (2595:38): [True: 455, False: 4.95k]
  ------------------
 2596|       |                // two single quotes e.g. 'o''clock'
 2597|    455|                quote += items[i++];
 2598|    455|                quote += items[i++];
 2599|    455|                continue;
 2600|    455|            }
 2601|  5.33k|            else {
 2602|  5.33k|                quote += items[i];
 2603|  5.33k|                break;
 2604|  5.33k|            }
 2605|  5.79k|        }
 2606|  34.7k|        else {
 2607|  34.7k|            quote += items[i];
 2608|  34.7k|        }
 2609|  34.7k|        ++i;
 2610|  34.7k|    }
 2611|  6.21k|    *itemIndex=i;
 2612|  6.21k|}
_ZNK6icu_7812FormatParser18isPatternSeparatorERKNS_13UnicodeStringE:
 2615|  4.59k|FormatParser::isPatternSeparator(const UnicodeString& field) const {
 2616|  5.64k|    for (int32_t i=0; i<field.length(); ++i ) {
  ------------------
  |  Branch (2616:23): [True: 4.59k, False: 1.05k]
  ------------------
 2617|  4.59k|        char16_t c= field.charAt(i);
 2618|  4.59k|        if ( (c==SINGLE_QUOTE) || (c==BACKSLASH) || (c==SPACE) || (c==COLON) ||
  ------------------
  |  |   35|  4.59k|#define SINGLE_QUOTE      ((char16_t)0x0027)
  ------------------
                      if ( (c==SINGLE_QUOTE) || (c==BACKSLASH) || (c==SPACE) || (c==COLON) ||
  ------------------
  |  |   37|  4.59k|#define BACKSLASH         ((char16_t)0x005C)
  ------------------
                      if ( (c==SINGLE_QUOTE) || (c==BACKSLASH) || (c==SPACE) || (c==COLON) ||
  ------------------
  |  |   38|  4.59k|#define SPACE             ((char16_t)0x0020)
  ------------------
                      if ( (c==SINGLE_QUOTE) || (c==BACKSLASH) || (c==SPACE) || (c==COLON) ||
  ------------------
  |  |   45|  4.03k|#define COLON             ((char16_t)0x003A)
  ------------------
  |  Branch (2618:14): [True: 0, False: 4.59k]
  |  Branch (2618:35): [True: 0, False: 4.59k]
  |  Branch (2618:53): [True: 553, False: 4.03k]
  |  Branch (2618:67): [True: 463, False: 3.57k]
  ------------------
 2619|  4.59k|             (c==QUOTATION_MARK) || (c==COMMA) || (c==HYPHEN) ||(items[i].charAt(0)==DOT) ) {
  ------------------
  |  |   39|  3.57k|#define QUOTATION_MARK    ((char16_t)0x0022)
  ------------------
                           (c==QUOTATION_MARK) || (c==COMMA) || (c==HYPHEN) ||(items[i].charAt(0)==DOT) ) {
  ------------------
  |  |   42|  3.57k|#define COMMA             ((char16_t)0x002C)
  ------------------
                           (c==QUOTATION_MARK) || (c==COMMA) || (c==HYPHEN) ||(items[i].charAt(0)==DOT) ) {
  ------------------
  |  |   43|  3.54k|#define HYPHEN            ((char16_t)0x002D)
  ------------------
                           (c==QUOTATION_MARK) || (c==COMMA) || (c==HYPHEN) ||(items[i].charAt(0)==DOT) ) {
  ------------------
  |  |   44|  3.53k|#define DOT               ((char16_t)0x002E)
  ------------------
  |  Branch (2619:14): [True: 0, False: 3.57k]
  |  Branch (2619:37): [True: 29, False: 3.54k]
  |  Branch (2619:51): [True: 7, False: 3.53k]
  |  Branch (2619:65): [True: 0, False: 3.53k]
  ------------------
 2620|  1.05k|            continue;
 2621|  1.05k|        }
 2622|  3.53k|        else {
 2623|  3.53k|            return false;
 2624|  3.53k|        }
 2625|  4.59k|    }
 2626|  1.05k|    return true;
 2627|  4.59k|}
_ZN6icu_7812DistanceInfoD2Ev:
 2629|  23.2k|DistanceInfo::~DistanceInfo() {}
_ZN6icu_7812DistanceInfo5setToERKS0_:
 2632|  20.6k|DistanceInfo::setTo(const DistanceInfo& other) {
 2633|  20.6k|    missingFieldMask = other.missingFieldMask;
 2634|  20.6k|    extraFieldMask= other.extraFieldMask;
 2635|  20.6k|}
_ZN6icu_7818PatternMapIteratorC2ER10UErrorCode:
 2638|  8.44k|    bootIndex(0), nodePtr(nullptr), matcher(nullptr), patternMap(nullptr)
 2639|  8.44k|{
 2640|  8.44k|    if (U_FAILURE(status)) { return; }
  ------------------
  |  Branch (2640:9): [True: 0, False: 8.44k]
  ------------------
 2641|  8.44k|    matcher.adoptInsteadAndCheckErrorCode(new DateTimeMatcher(), status);
 2642|  8.44k|}
_ZN6icu_7818PatternMapIteratorD2Ev:
 2644|  8.44k|PatternMapIterator::~PatternMapIterator() {
 2645|  8.44k|}
_ZN6icu_7818PatternMapIterator3setERNS_10PatternMapE:
 2648|  8.44k|PatternMapIterator::set(PatternMap& newPatternMap) {
 2649|  8.44k|    this->patternMap=&newPatternMap;
 2650|  8.44k|}
_ZNK6icu_7818PatternMapIterator7hasNextEv:
 2663|   553k|PatternMapIterator::hasNext() const {
 2664|   553k|    int32_t headIndex = bootIndex;
 2665|   553k|    PtnElem *curPtr = nodePtr;
 2666|       |
 2667|   553k|    if (patternMap==nullptr) {
  ------------------
  |  Branch (2667:9): [True: 0, False: 553k]
  ------------------
 2668|      0|        return false;
 2669|      0|    }
 2670|   978k|    while ( headIndex < MAX_PATTERN_ENTRIES ) {
  ------------------
  |  |   26|   978k|#define MAX_PATTERN_ENTRIES 52
  ------------------
  |  Branch (2670:13): [True: 970k, False: 7.97k]
  ------------------
 2671|   970k|        if ( curPtr != nullptr ) {
  ------------------
  |  Branch (2671:14): [True: 545k, False: 425k]
  ------------------
 2672|   545k|            if ( curPtr->next != nullptr ) {
  ------------------
  |  Branch (2672:18): [True: 405k, False: 139k]
  ------------------
 2673|   405k|                return true;
 2674|   405k|            }
 2675|   139k|            else {
 2676|   139k|                headIndex++;
 2677|   139k|                curPtr=nullptr;
 2678|   139k|                continue;
 2679|   139k|            }
 2680|   545k|        }
 2681|   425k|        else {
 2682|   425k|            if ( patternMap->boot[headIndex] != nullptr ) {
  ------------------
  |  Branch (2682:18): [True: 139k, False: 285k]
  ------------------
 2683|   139k|                return true;
 2684|   139k|            }
 2685|   285k|            else {
 2686|   285k|                headIndex++;
 2687|   285k|                continue;
 2688|   285k|            }
 2689|   425k|        }
 2690|   970k|    }
 2691|  7.97k|    return false;
 2692|   553k|}
_ZN6icu_7818PatternMapIterator4nextEv:
 2695|   545k|PatternMapIterator::next() {
 2696|   955k|    while ( bootIndex < MAX_PATTERN_ENTRIES ) {
  ------------------
  |  |   26|   955k|#define MAX_PATTERN_ENTRIES 52
  ------------------
  |  Branch (2696:13): [True: 955k, False: 0]
  ------------------
 2697|   955k|        if ( nodePtr != nullptr ) {
  ------------------
  |  Branch (2697:14): [True: 537k, False: 417k]
  ------------------
 2698|   537k|            if ( nodePtr->next != nullptr ) {
  ------------------
  |  Branch (2698:18): [True: 405k, False: 131k]
  ------------------
 2699|   405k|                nodePtr = nodePtr->next.getAlias();
 2700|   405k|                break;
 2701|   405k|            }
 2702|   131k|            else {
 2703|   131k|                bootIndex++;
 2704|   131k|                nodePtr=nullptr;
 2705|   131k|                continue;
 2706|   131k|            }
 2707|   537k|        }
 2708|   417k|        else {
 2709|   417k|            if ( patternMap->boot[bootIndex] != nullptr ) {
  ------------------
  |  Branch (2709:18): [True: 139k, False: 277k]
  ------------------
 2710|   139k|                nodePtr = patternMap->boot[bootIndex];
 2711|   139k|                break;
 2712|   139k|            }
 2713|   277k|            else {
 2714|   277k|                bootIndex++;
 2715|   277k|                continue;
 2716|   277k|            }
 2717|   417k|        }
 2718|   955k|    }
 2719|   545k|    if (nodePtr!=nullptr) {
  ------------------
  |  Branch (2719:9): [True: 545k, False: 0]
  ------------------
 2720|   545k|        matcher->copyFrom(*nodePtr->skeleton);
 2721|   545k|    }
 2722|      0|    else {
 2723|      0|        matcher->copyFrom();
 2724|      0|    }
 2725|   545k|    return *matcher;
 2726|   545k|}
_ZN6icu_7814SkeletonFieldsC2Ev:
 2729|  7.05M|SkeletonFields::SkeletonFields() {
 2730|       |    // Set initial values to zero
 2731|  7.05M|    clear();
 2732|  7.05M|}
_ZN6icu_7814SkeletonFields5clearEv:
 2734|  9.11M|void SkeletonFields::clear() {
 2735|  9.11M|    uprv_memset(chars, 0, sizeof(chars));
  ------------------
  |  |  100|  9.11M|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|  9.11M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2736|  9.11M|    uprv_memset(lengths, 0, sizeof(lengths));
  ------------------
  |  |  100|  9.11M|#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
  |  |  ------------------
  |  |  |  |  393|  9.11M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
 2737|  9.11M|}
_ZN6icu_7814SkeletonFields8copyFromERKS0_:
 2739|  6.05M|void SkeletonFields::copyFrom(const SkeletonFields& other) {
 2740|  6.05M|    uprv_memcpy(chars, other.chars, sizeof(chars));
  ------------------
  |  |   42|  6.05M|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  6.05M|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  6.05M|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  6.05M|    _Pragma("clang diagnostic push") \
  |  |   45|  6.05M|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  6.05M|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  6.05M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  6.05M|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  6.05M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  6.05M|    _Pragma("clang diagnostic pop") \
  |  |   49|  6.05M|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  6.05M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  6.05M|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  6.05M|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2741|  6.05M|    uprv_memcpy(lengths, other.lengths, sizeof(lengths));
  ------------------
  |  |   42|  6.05M|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  6.05M|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  6.05M|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  6.05M|    _Pragma("clang diagnostic push") \
  |  |   45|  6.05M|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  6.05M|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  6.05M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  6.05M|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  6.05M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  6.05M|    _Pragma("clang diagnostic pop") \
  |  |   49|  6.05M|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  6.05M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  6.05M|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  6.05M|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2742|  6.05M|}
_ZN6icu_7814SkeletonFields10clearFieldEi:
 2744|   271k|void SkeletonFields::clearField(int32_t field) {
 2745|   271k|    chars[field] = 0;
 2746|   271k|    lengths[field] = 0;
 2747|   271k|}
_ZNK6icu_7814SkeletonFields12getFieldCharEi:
 2749|   466k|char16_t SkeletonFields::getFieldChar(int32_t field) const {
 2750|   466k|    return chars[field];
 2751|   466k|}
_ZNK6icu_7814SkeletonFields14getFieldLengthEi:
 2753|  4.21k|int32_t SkeletonFields::getFieldLength(int32_t field) const {
 2754|  4.21k|    return lengths[field];
 2755|  4.21k|}
_ZN6icu_7814SkeletonFields8populateEiRKNS_13UnicodeStringE:
 2757|  2.39M|void SkeletonFields::populate(int32_t field, const UnicodeString& value) {
 2758|  2.39M|    populate(field, value.charAt(0), value.length());
 2759|  2.39M|}
_ZN6icu_7814SkeletonFields8populateEiDsi:
 2761|  4.97M|void SkeletonFields::populate(int32_t field, char16_t ch, int32_t length) {
 2762|  4.97M|    chars[field] = static_cast<int8_t>(ch);
 2763|  4.97M|    lengths[field] = static_cast<int8_t>(length);
 2764|  4.97M|}
_ZNK6icu_7814SkeletonFields12isFieldEmptyEi:
 2766|  2.55M|UBool SkeletonFields::isFieldEmpty(int32_t field) const {
 2767|  2.55M|    return lengths[field] == 0;
 2768|  2.55M|}
_ZNK6icu_7814SkeletonFields8appendToERNS_13UnicodeStringE:
 2770|  1.02M|UnicodeString& SkeletonFields::appendTo(UnicodeString& string) const {
 2771|  17.4M|    for (int32_t i = 0; i < UDATPG_FIELD_COUNT; ++i) {
  ------------------
  |  Branch (2771:25): [True: 16.4M, False: 1.02M]
  ------------------
 2772|  16.4M|        appendFieldTo(i, string);
 2773|  16.4M|    }
 2774|  1.02M|    return string;
 2775|  1.02M|}
_ZNK6icu_7814SkeletonFields13appendFieldToEiRNS_13UnicodeStringE:
 2777|  16.4M|UnicodeString& SkeletonFields::appendFieldTo(int32_t field, UnicodeString& string) const {
 2778|  16.4M|    char16_t ch(chars[field]);
 2779|  16.4M|    int32_t length = static_cast<int32_t>(lengths[field]);
 2780|       |
 2781|  19.5M|    for (int32_t i=0; i<length; i++) {
  ------------------
  |  Branch (2781:23): [True: 3.12M, False: 16.4M]
  ------------------
 2782|  3.12M|        string += ch;
 2783|  3.12M|    }
 2784|  16.4M|    return string;
 2785|  16.4M|}
_ZNK6icu_7814SkeletonFields12getFirstCharEv:
 2787|  1.00M|char16_t SkeletonFields::getFirstChar() const {
 2788|  6.77M|    for (int32_t i = 0; i < UDATPG_FIELD_COUNT; ++i) {
  ------------------
  |  Branch (2788:25): [True: 6.77M, False: 0]
  ------------------
 2789|  6.77M|        if (lengths[i] != 0) {
  ------------------
  |  Branch (2789:13): [True: 1.00M, False: 5.77M]
  ------------------
 2790|  1.00M|            return chars[i];
 2791|  1.00M|        }
 2792|  6.77M|    }
 2793|      0|    return '\0';
 2794|  1.00M|}
_ZN6icu_7811PtnSkeletonC2Ev:
 2798|  2.62M|    : addedDefaultDayPeriod(false) {
 2799|  2.62M|}
_ZN6icu_7811PtnSkeletonC2ERKS0_:
 2801|   903k|PtnSkeleton::PtnSkeleton(const PtnSkeleton& other) {
 2802|   903k|    copyFrom(other);
 2803|   903k|}
_ZN6icu_7811PtnSkeleton8copyFromERKS0_:
 2805|  3.02M|void PtnSkeleton::copyFrom(const PtnSkeleton& other) {
 2806|  3.02M|    uprv_memcpy(type, other.type, sizeof(type));
  ------------------
  |  |   42|  3.02M|#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
  |  |  ------------------
  |  |  |  |  169|  3.02M|#define UPRV_BLOCK_MACRO_BEGIN do
  |  |  ------------------
  |  |   43|  3.02M|    /* Suppress warnings about addresses that will never be NULL */ \
  |  |   44|  3.02M|    _Pragma("clang diagnostic push") \
  |  |   45|  3.02M|    _Pragma("clang diagnostic ignored \"-Waddress\"") \
  |  |   46|  3.02M|    U_ASSERT(dst != NULL); \
  |  |  ------------------
  |  |  |  |   35|  3.02M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   47|  3.02M|    U_ASSERT(src != NULL); \
  |  |  ------------------
  |  |  |  |   35|  3.02M|#   define U_ASSERT(exp) (void)0
  |  |  ------------------
  |  |   48|  3.02M|    _Pragma("clang diagnostic pop") \
  |  |   49|  3.02M|    U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
  |  |  ------------------
  |  |  |  |  393|  3.02M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  |  |   50|  3.02M|} UPRV_BLOCK_MACRO_END
  |  |  ------------------
  |  |  |  |  178|  3.02M|#define UPRV_BLOCK_MACRO_END while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:37): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2807|  3.02M|    original.copyFrom(other.original);
 2808|  3.02M|    baseOriginal.copyFrom(other.baseOriginal);
 2809|  3.02M|    addedDefaultDayPeriod = other.addedDefaultDayPeriod;
 2810|  3.02M|}
_ZNK6icu_7811PtnSkeleton11getSkeletonEv:
 2826|  16.9k|PtnSkeleton::getSkeleton() const {
 2827|  16.9k|    UnicodeString result;
 2828|  16.9k|    result = original.appendTo(result);
 2829|  16.9k|    int32_t pos;
 2830|  16.9k|    if (addedDefaultDayPeriod && (pos = result.indexOf(LOW_A)) >= 0) {
  ------------------
  |  |   69|    464|#define LOW_A             ((char16_t)0x0061)
  ------------------
  |  Branch (2830:9): [True: 464, False: 16.4k]
  |  Branch (2830:34): [True: 464, False: 0]
  ------------------
 2831|       |        // for backward compatibility: if DateTimeMatcher.set added a single 'a' that
 2832|       |        // was not in the provided skeleton, remove it here before returning skeleton.
 2833|    464|        result.remove(pos, 1);
 2834|    464|    }
 2835|  16.9k|    return result;
 2836|  16.9k|}
_ZNK6icu_7811PtnSkeleton15getBaseSkeletonEv:
 2839|  22.1k|PtnSkeleton::getBaseSkeleton() const {
 2840|  22.1k|    UnicodeString result;
 2841|  22.1k|    result = baseOriginal.appendTo(result);
 2842|  22.1k|    int32_t pos;
 2843|  22.1k|    if (addedDefaultDayPeriod && (pos = result.indexOf(LOW_A)) >= 0) {
  ------------------
  |  |   69|    402|#define LOW_A             ((char16_t)0x0061)
  ------------------
  |  Branch (2843:9): [True: 402, False: 21.7k]
  |  Branch (2843:34): [True: 402, False: 0]
  ------------------
 2844|       |        // for backward compatibility: if DateTimeMatcher.set added a single 'a' that
 2845|       |        // was not in the provided skeleton, remove it here before returning skeleton.
 2846|    402|        result.remove(pos, 1);
 2847|    402|    }
 2848|  22.1k|    return result;
 2849|  22.1k|}
_ZNK6icu_7811PtnSkeleton12getFirstCharEv:
 2852|  1.00M|PtnSkeleton::getFirstChar() const {
 2853|  1.00M|    return baseOriginal.getFirstChar();
 2854|  1.00M|}
_ZN6icu_7811PtnSkeletonD2Ev:
 2856|  3.52M|PtnSkeleton::~PtnSkeleton() {
 2857|  3.52M|}
_ZN6icu_787PtnElemC2ERKNS_13UnicodeStringES3_:
 2860|   903k|    basePattern(basePat), skeleton(nullptr), pattern(pat), next(nullptr)
 2861|   903k|{
 2862|   903k|}
_ZN6icu_787PtnElemD2Ev:
 2864|   903k|PtnElem::~PtnElem() {
 2865|   903k|}
dtptngen.cpp:_ZN6icu_7812_GLOBAL__N_122AllowedHourFormatsSinkC2Ev:
  535|      1|    AllowedHourFormatsSink() {}
dtptngen.cpp:_ZN6icu_7812_GLOBAL__N_122AllowedHourFormatsSink3putEPKcRNS_13ResourceValueEaR10UErrorCode:
  539|      1|                     UErrorCode &errorCode) override {
  540|      1|        ResourceTable timeData = value.getTable(errorCode);
  541|      1|        if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (541:13): [True: 0, False: 1]
  ------------------
  542|    277|        for (int32_t i = 0; timeData.getKeyAndValue(i, key, value); ++i) {
  ------------------
  |  Branch (542:29): [True: 276, False: 1]
  ------------------
  543|    276|            const char *regionOrLocale = key;
  544|    276|            ResourceTable formatList = value.getTable(errorCode);
  545|    276|            if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (545:17): [True: 0, False: 276]
  ------------------
  546|       |            // below we construct a list[] that has an entry for the "preferred" value at [0],
  547|       |            // followed by 1 or more entries for the "allowed" values, terminated with an
  548|       |            // entry for ALLOWED_HOUR_FORMAT_UNKNOWN (not included in length below)
  549|    276|            LocalMemory<int32_t> list;
  550|    276|            int32_t length = 0;
  551|    276|            int32_t preferredFormat = ALLOWED_HOUR_FORMAT_UNKNOWN;
  552|    828|            for (int32_t j = 0; formatList.getKeyAndValue(j, key, value); ++j) {
  ------------------
  |  Branch (552:33): [True: 552, False: 276]
  ------------------
  553|    552|                if (uprv_strcmp(key, "allowed") == 0) {
  ------------------
  |  |   38|    552|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    552|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (553:21): [True: 276, False: 276]
  ------------------
  554|    276|                    if (value.getType() == URES_STRING) {
  ------------------
  |  Branch (554:25): [True: 14, False: 262]
  ------------------
  555|     14|                        length = 2; // 1 preferred to add later, 1 allowed to add now
  556|     14|                        if (list.allocateInsteadAndReset(length + 1) == nullptr) {
  ------------------
  |  Branch (556:29): [True: 0, False: 14]
  ------------------
  557|      0|                            errorCode = U_MEMORY_ALLOCATION_ERROR;
  558|      0|                            return;
  559|      0|                        }
  560|     14|                        list[1] = getHourFormatFromUnicodeString(value.getUnicodeString(errorCode));
  561|     14|                    }
  562|    262|                    else {
  563|    262|                        ResourceArray allowedFormats = value.getArray(errorCode);
  564|    262|                        length = allowedFormats.getSize() + 1; // 1 preferred, getSize allowed
  565|    262|                        if (list.allocateInsteadAndReset(length + 1) == nullptr) {
  ------------------
  |  Branch (565:29): [True: 0, False: 262]
  ------------------
  566|      0|                            errorCode = U_MEMORY_ALLOCATION_ERROR;
  567|      0|                            return;
  568|      0|                        }
  569|  1.11k|                        for (int32_t k = 1; k < length; ++k) {
  ------------------
  |  Branch (569:45): [True: 857, False: 262]
  ------------------
  570|    857|                            allowedFormats.getValue(k-1, value);
  571|    857|                            list[k] = getHourFormatFromUnicodeString(value.getUnicodeString(errorCode));
  572|    857|                        }
  573|    262|                    }
  574|    276|                } else if (uprv_strcmp(key, "preferred") == 0) {
  ------------------
  |  |   38|    276|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|    276|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (574:28): [True: 276, False: 0]
  ------------------
  575|    276|                    preferredFormat = getHourFormatFromUnicodeString(value.getUnicodeString(errorCode));
  576|    276|                }
  577|    552|            }
  578|    276|            if (length > 1) {
  ------------------
  |  Branch (578:17): [True: 276, False: 0]
  ------------------
  579|    276|                list[0] = (preferredFormat!=ALLOWED_HOUR_FORMAT_UNKNOWN)? preferredFormat: list[1];
  ------------------
  |  Branch (579:27): [True: 276, False: 0]
  ------------------
  580|    276|            } else {
  581|       |                // fallback handling for missing data
  582|      0|                length = 2; // 1 preferred, 1 allowed
  583|      0|                if (list.allocateInsteadAndReset(length + 1) == nullptr) {
  ------------------
  |  Branch (583:21): [True: 0, False: 0]
  ------------------
  584|      0|                    errorCode = U_MEMORY_ALLOCATION_ERROR;
  585|      0|                    return;
  586|      0|                }
  587|      0|                list[0] = (preferredFormat!=ALLOWED_HOUR_FORMAT_UNKNOWN)? preferredFormat: ALLOWED_HOUR_FORMAT_H;
  ------------------
  |  Branch (587:27): [True: 0, False: 0]
  ------------------
  588|      0|                list[1] = list[0];
  589|      0|            }
  590|    276|            list[length] = ALLOWED_HOUR_FORMAT_UNKNOWN;
  591|       |            // At this point list[] will have at least two non-ALLOWED_HOUR_FORMAT_UNKNOWN entries,
  592|       |            // followed by ALLOWED_HOUR_FORMAT_UNKNOWN.
  593|    276|            uhash_put(localeToAllowedHourFormatsMap, const_cast<char *>(regionOrLocale), list.orphan(), &errorCode);
  ------------------
  |  | 1032|    276|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|    276|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    276|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    276|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  594|    276|            if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (594:17): [True: 0, False: 276]
  ------------------
  595|    276|        }
  596|      1|    }
dtptngen.cpp:_ZN6icu_7812_GLOBAL__N_122AllowedHourFormatsSink30getHourFormatFromUnicodeStringERKNS_13UnicodeStringE:
  598|  1.14k|    AllowedHourFormat getHourFormatFromUnicodeString(const UnicodeString &s) {
  599|  1.14k|        if (s.length() == 1) {
  ------------------
  |  Branch (599:13): [True: 768, False: 379]
  ------------------
  600|    768|            if (s[0] == LOW_H) { return ALLOWED_HOUR_FORMAT_h; }
  ------------------
  |  |   76|    768|#define LOW_H             ((char16_t)0x0068)
  ------------------
  |  Branch (600:17): [True: 332, False: 436]
  ------------------
  601|    436|            if (s[0] == CAP_H) { return ALLOWED_HOUR_FORMAT_H; }
  ------------------
  |  |   53|    436|#define CAP_H             ((char16_t)0x0048)
  ------------------
  |  Branch (601:17): [True: 435, False: 1]
  ------------------
  602|      1|            if (s[0] == CAP_K) { return ALLOWED_HOUR_FORMAT_K; }
  ------------------
  |  |   55|      1|#define CAP_K             ((char16_t)0x004B)
  ------------------
  |  Branch (602:17): [True: 1, False: 0]
  ------------------
  603|      0|            if (s[0] == LOW_K) { return ALLOWED_HOUR_FORMAT_k; }
  ------------------
  |  |   79|      0|#define LOW_K             ((char16_t)0x006B)
  ------------------
  |  Branch (603:17): [True: 0, False: 0]
  ------------------
  604|    379|        } else if (s.length() == 2) {
  ------------------
  |  Branch (604:20): [True: 379, False: 0]
  ------------------
  605|    379|            if (s[0] == LOW_H && s[1] == LOW_B) { return ALLOWED_HOUR_FORMAT_hb; }
  ------------------
  |  |   76|    758|#define LOW_H             ((char16_t)0x0068)
  ------------------
                          if (s[0] == LOW_H && s[1] == LOW_B) { return ALLOWED_HOUR_FORMAT_hb; }
  ------------------
  |  |   70|    379|#define LOW_B             ((char16_t)0x0062)
  ------------------
  |  Branch (605:17): [True: 379, False: 0]
  |  Branch (605:34): [True: 149, False: 230]
  ------------------
  606|    230|            if (s[0] == LOW_H && s[1] == CAP_B) { return ALLOWED_HOUR_FORMAT_hB; }
  ------------------
  |  |   76|    460|#define LOW_H             ((char16_t)0x0068)
  ------------------
                          if (s[0] == LOW_H && s[1] == CAP_B) { return ALLOWED_HOUR_FORMAT_hB; }
  ------------------
  |  |   47|    230|#define CAP_B             ((char16_t)0x0042)
  ------------------
  |  Branch (606:17): [True: 230, False: 0]
  |  Branch (606:34): [True: 230, False: 0]
  ------------------
  607|      0|            if (s[0] == CAP_K && s[1] == LOW_B) { return ALLOWED_HOUR_FORMAT_Kb; }
  ------------------
  |  |   55|      0|#define CAP_K             ((char16_t)0x004B)
  ------------------
                          if (s[0] == CAP_K && s[1] == LOW_B) { return ALLOWED_HOUR_FORMAT_Kb; }
  ------------------
  |  |   70|      0|#define LOW_B             ((char16_t)0x0062)
  ------------------
  |  Branch (607:17): [True: 0, False: 0]
  |  Branch (607:34): [True: 0, False: 0]
  ------------------
  608|      0|            if (s[0] == CAP_K && s[1] == CAP_B) { return ALLOWED_HOUR_FORMAT_KB; }
  ------------------
  |  |   55|      0|#define CAP_K             ((char16_t)0x004B)
  ------------------
                          if (s[0] == CAP_K && s[1] == CAP_B) { return ALLOWED_HOUR_FORMAT_KB; }
  ------------------
  |  |   47|      0|#define CAP_B             ((char16_t)0x0042)
  ------------------
  |  Branch (608:17): [True: 0, False: 0]
  |  Branch (608:34): [True: 0, False: 0]
  ------------------
  609|      0|            if (s[0] == CAP_H && s[1] == LOW_B) { return ALLOWED_HOUR_FORMAT_Hb; }
  ------------------
  |  |   53|      0|#define CAP_H             ((char16_t)0x0048)
  ------------------
                          if (s[0] == CAP_H && s[1] == LOW_B) { return ALLOWED_HOUR_FORMAT_Hb; }
  ------------------
  |  |   70|      0|#define LOW_B             ((char16_t)0x0062)
  ------------------
  |  Branch (609:17): [True: 0, False: 0]
  |  Branch (609:34): [True: 0, False: 0]
  ------------------
  610|      0|            if (s[0] == CAP_H && s[1] == CAP_B) { return ALLOWED_HOUR_FORMAT_HB; }
  ------------------
  |  |   53|      0|#define CAP_H             ((char16_t)0x0048)
  ------------------
                          if (s[0] == CAP_H && s[1] == CAP_B) { return ALLOWED_HOUR_FORMAT_HB; }
  ------------------
  |  |   47|      0|#define CAP_B             ((char16_t)0x0042)
  ------------------
  |  Branch (610:17): [True: 0, False: 0]
  |  Branch (610:34): [True: 0, False: 0]
  ------------------
  611|      0|        }
  612|       |
  613|      0|        return ALLOWED_HOUR_FORMAT_UNKNOWN;
  614|  1.14k|    }
dtptngen.cpp:_ZN6icu_78L32getAllowedHourFormatsLangCountryEPKcS1_R10UErrorCode:
  643|  13.5k|static int32_t* getAllowedHourFormatsLangCountry(const char* language, const char* country, UErrorCode& status) {
  644|  13.5k|    CharString langCountry;
  645|  13.5k|    langCountry.append(language, status);
  646|  13.5k|    langCountry.append('_', status);
  647|  13.5k|    langCountry.append(country, status);
  648|       |
  649|  13.5k|    int32_t* allowedFormats;
  650|  13.5k|    allowedFormats = static_cast<int32_t*>(uhash_get(localeToAllowedHourFormatsMap, langCountry.data()));
  ------------------
  |  | 1007|  13.5k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|  13.5k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.5k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.5k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  651|  13.5k|    if (allowedFormats == nullptr) {
  ------------------
  |  Branch (651:9): [True: 13.1k, False: 397]
  ------------------
  652|  13.1k|        allowedFormats = static_cast<int32_t*>(uhash_get(localeToAllowedHourFormatsMap, const_cast<char*>(country)));
  ------------------
  |  | 1007|  13.1k|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|  13.1k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  13.1k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  13.1k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  653|  13.1k|    }
  654|       |
  655|  13.5k|    return allowedFormats;
  656|  13.5k|}
_ZN6icu_7824DateTimePatternGenerator21AppendItemFormatsSinkC2ERS0_:
  959|  13.5k|    AppendItemFormatsSink(DateTimePatternGenerator& _dtpg) : dtpg(_dtpg) {}
_ZN6icu_7824DateTimePatternGenerator21AppendItemFormatsSink13fillInMissingEv:
  972|  13.5k|    void fillInMissing() {
  973|  13.5k|        UnicodeString defaultItemFormat(true, UDATPG_ItemFormat, UPRV_LENGTHOF(UDATPG_ItemFormat)-1);  // Read-only alias.
  ------------------
  |  |   99|  13.5k|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
  974|   229k|        for (int32_t i = 0; i < UDATPG_FIELD_COUNT; i++) {
  ------------------
  |  Branch (974:29): [True: 216k, False: 13.5k]
  ------------------
  975|   216k|            UDateTimePatternField field = static_cast<UDateTimePatternField>(i);
  976|   216k|            if (dtpg.getAppendItemFormat(field).isEmpty()) {
  ------------------
  |  Branch (976:17): [True: 67.5k, False: 148k]
  ------------------
  977|  67.5k|                dtpg.setAppendItemFormat(field, defaultItemFormat);
  978|  67.5k|            }
  979|   216k|        }
  980|  13.5k|    }
_ZN6icu_7824DateTimePatternGenerator19AppendItemNamesSinkC2ERS0_:
  988|  13.5k|    AppendItemNamesSink(DateTimePatternGenerator& _dtpg) : dtpg(_dtpg) {}
_ZN6icu_7824DateTimePatternGenerator19AppendItemNamesSink13fillInMissingEv:
 1005|  13.5k|    void fillInMissing() {
 1006|   229k|        for (int32_t i = 0; i < UDATPG_FIELD_COUNT; i++) {
  ------------------
  |  Branch (1006:29): [True: 216k, False: 13.5k]
  ------------------
 1007|   216k|            UnicodeString& valueStr = dtpg.getMutableFieldDisplayName(static_cast<UDateTimePatternField>(i), UDATPG_WIDE);
 1008|   216k|            if (valueStr.isEmpty()) {
  ------------------
  |  Branch (1008:17): [True: 13.5k, False: 202k]
  ------------------
 1009|  13.5k|                valueStr = CAP_F;
  ------------------
  |  |   51|  13.5k|#define CAP_F             ((char16_t)0x0046)
  ------------------
 1010|  13.5k|                U_ASSERT(i < 20);
  ------------------
  |  |   35|  13.5k|#   define U_ASSERT(exp) (void)0
  ------------------
 1011|  13.5k|                if (i < 10) {
  ------------------
  |  Branch (1011:21): [True: 0, False: 13.5k]
  ------------------
 1012|       |                    // F0, F1, ..., F9
 1013|      0|                    valueStr += static_cast<char16_t>(i + 0x30);
 1014|  13.5k|                } else {
 1015|       |                    // F10, F11, ...
 1016|  13.5k|                    valueStr += static_cast<char16_t>(0x31);
 1017|  13.5k|                    valueStr += static_cast<char16_t>(i - 10 + 0x30);
 1018|  13.5k|                }
 1019|       |                // NUL-terminate for the C API.
 1020|  13.5k|                valueStr.getTerminatedBuffer();
 1021|  13.5k|            }
 1022|   648k|            for (int32_t j = 1; j < UDATPG_WIDTH_COUNT; j++) {
  ------------------
  |  Branch (1022:33): [True: 432k, False: 216k]
  ------------------
 1023|   432k|                UnicodeString& valueStr2 = dtpg.getMutableFieldDisplayName(static_cast<UDateTimePatternField>(i), static_cast<UDateTimePGDisplayWidth>(j));
 1024|   432k|                if (valueStr2.isEmpty()) {
  ------------------
  |  Branch (1024:21): [True: 27.0k, False: 405k]
  ------------------
 1025|  27.0k|                    valueStr2 = dtpg.getFieldDisplayName(static_cast<UDateTimePatternField>(i), static_cast<UDateTimePGDisplayWidth>(j - 1));
 1026|  27.0k|                }
 1027|   432k|            }
 1028|   216k|        }
 1029|  13.5k|    }
_ZN6icu_7824DateTimePatternGenerator20AvailableFormatsSinkC2ERS0_:
 1040|  13.5k|    AvailableFormatsSink(DateTimePatternGenerator& _dtpg) : dtpg(_dtpg) {}
_ZN6icu_7824DateTimePatternGenerator21AppendItemFormatsSink3putEPKcRNS_13ResourceValueEaR10UErrorCode:
  963|   208k|            UErrorCode &errorCode) override {
  964|   208k|        UDateTimePatternField field = dtpg.getAppendFormatNumber(key);
  965|   208k|        if (field == UDATPG_FIELD_COUNT) { return; }
  ------------------
  |  Branch (965:13): [True: 0, False: 208k]
  ------------------
  966|   208k|        const UnicodeString& valueStr = value.getUnicodeString(errorCode);
  967|   208k|        if (dtpg.getAppendItemFormat(field).isEmpty() && !valueStr.isEmpty()) {
  ------------------
  |  Branch (967:13): [True: 148k, False: 60.2k]
  |  Branch (967:58): [True: 148k, False: 0]
  ------------------
  968|   148k|            dtpg.setAppendItemFormat(field, valueStr);
  969|   148k|        }
  970|   208k|    }
_ZN6icu_7824DateTimePatternGenerator19AppendItemNamesSink3putEPKcRNS_13ResourceValueEaR10UErrorCode:
  992|  2.28M|            UErrorCode &errorCode) override {
  993|  2.28M|        UDateTimePGDisplayWidth width;
  994|  2.28M|        UDateTimePatternField field = dtpg.getFieldAndWidthIndices(key, &width);
  995|  2.28M|        if (field == UDATPG_FIELD_COUNT) { return; }
  ------------------
  |  Branch (995:13): [True: 705k, False: 1.57M]
  ------------------
  996|  1.57M|        ResourceTable detailsTable = value.getTable(errorCode);
  997|  1.57M|        if (U_FAILURE(errorCode)) { return; }
  ------------------
  |  Branch (997:13): [True: 0, False: 1.57M]
  ------------------
  998|  1.57M|        if (!detailsTable.findValue("dn", value)) { return; }
  ------------------
  |  Branch (998:13): [True: 36.3k, False: 1.53M]
  ------------------
  999|  1.53M|        const UnicodeString& valueStr = value.getUnicodeString(errorCode);
 1000|  1.53M|        if (U_SUCCESS(errorCode) && dtpg.getFieldDisplayName(field,width).isEmpty() && !valueStr.isEmpty()) {
  ------------------
  |  Branch (1000:13): [True: 1.53M, False: 0]
  |  Branch (1000:13): [True: 608k, False: 930k]
  |  Branch (1000:37): [True: 608k, False: 930k]
  |  Branch (1000:88): [True: 608k, False: 0]
  ------------------
 1001|   608k|            dtpg.setFieldDisplayName(field,width,valueStr);
 1002|   608k|        }
 1003|  1.53M|    }
_ZN6icu_7824DateTimePatternGenerator20AvailableFormatsSink3putEPKcRNS_13ResourceValueEaR10UErrorCode:
 1044|  1.09M|            UErrorCode &errorCode) override {
 1045|  1.09M|        const UnicodeString formatKey(key, -1, US_INV);
  ------------------
  |  |   98|  1.09M|#define US_INV icu::UnicodeString::kInvariant
  ------------------
 1046|  1.09M|        if (!dtpg.isAvailableFormatSet(formatKey) ) {
  ------------------
  |  Branch (1046:13): [True: 649k, False: 447k]
  ------------------
 1047|   649k|            dtpg.setAvailableFormat(formatKey, errorCode);
 1048|       |            // Add pattern with its associated skeleton. Override any duplicate
 1049|       |            // derived from std patterns, but not a previous availableFormats entry:
 1050|   649k|            const UnicodeString& formatValue = value.getUnicodeString(errorCode);
 1051|   649k|            conflictingPattern.remove();
 1052|   649k|            dtpg.addPatternWithSkeleton(formatValue, &formatKey, true, conflictingPattern, errorCode);
 1053|   649k|        }
 1054|  1.09M|    }

_ZN6icu_7812DistanceInfoC2Ev:
  218|  23.2k|    DistanceInfo() {}
_ZN6icu_7812FormatParser17getCanonicalIndexERKNS_13UnicodeStringE:
  198|  3.36M|    static int32_t getCanonicalIndex(const UnicodeString& s) { return getCanonicalIndex(s, true); }
_ZNK6icu_7814SkeletonFieldseqERKS0_:
  145|  3.22M|inline bool SkeletonFields::operator==(const SkeletonFields& other) const {
  146|  3.22M|    return (uprv_memcmp(chars, other.chars, sizeof(chars)) == 0
  ------------------
  |  |  101|  3.22M|#define uprv_memcmp(buffer1, buffer2, size) U_STANDARD_CPP_NAMESPACE memcmp(buffer1, buffer2,size)
  |  |  ------------------
  |  |  |  |  393|  3.22M|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (146:13): [True: 447k, False: 2.77M]
  ------------------
  147|  3.22M|        && uprv_memcmp(lengths, other.lengths, sizeof(lengths)) == 0);
  ------------------
  |  |  101|   447k|#define uprv_memcmp(buffer1, buffer2, size) U_STANDARD_CPP_NAMESPACE memcmp(buffer1, buffer2,size)
  |  |  ------------------
  |  |  |  |  393|   447k|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (147:12): [True: 102k, False: 344k]
  ------------------
  148|  3.22M|}
_ZN6icu_7812DistanceInfo5clearEv:
  220|   545k|    void clear() { missingFieldMask = extraFieldMask = 0; }
_ZN6icu_7812DistanceInfo8addExtraEi:
  223|  1.33M|    void addExtra(int32_t field) { extraFieldMask |= (1<<field); }
_ZN6icu_7812DistanceInfo10addMissingEi:
  222|   244k|    void addMissing(int32_t field) { missingFieldMask |= (1<<field); }

_ZN6icu_7816EthiopicCalendarC2ERKNS_6LocaleER10UErrorCode:
   35|      1|:   CECalendar(aLocale, success)
   36|      1|{
   37|      1|}
_ZN6icu_7816EthiopicCalendarD2Ev:
   40|      1|{
   41|      1|}
_ZNK6icu_7816EthiopicCalendar7getTypeEv:
   51|      1|{
   52|      1|    return "ethiopic";
   53|      1|}

_ZN6icu_7817GregorianCalendarC2ERKNS_6LocaleER10UErrorCode:
  182|  7.05k|:   GregorianCalendar(TimeZone::forLocaleOrDefault(aLocale), aLocale, status)
  183|  7.05k|{
  184|  7.05k|}
_ZN6icu_7817GregorianCalendarC2EPNS_8TimeZoneERKNS_6LocaleER10UErrorCode:
  190|  7.05k|                                     :   Calendar(zone, aLocale, status),
  191|  7.05k|                                     fGregorianCutover(kPapalCutover),
  192|  7.05k|                                     fCutoverJulianDay(kCutoverJulianDay), fGregorianCutoverYear(kDefaultCutoverYear),
  193|  7.05k|                                     fIsGregorian(true), fInvertGregorian(false)
  194|  7.05k|{
  195|  7.05k|    setTimeInMillis(getNow(), status);
  196|  7.05k|}
_ZN6icu_7817GregorianCalendarD2Ev:
  248|  6.07k|{
  249|  6.07k|}
_ZNK6icu_7817GregorianCalendar7getTypeEv:
 1235|  13.1k|GregorianCalendar::getType() const {
 1236|       |    //static const char kGregorianType = "gregorian";
 1237|       |
 1238|  13.1k|    return "gregorian";
 1239|  13.1k|}

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

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

_ZN6icu_7814HebrewCalendarC2ERKNS_6LocaleER10UErrorCode:
  164|      1|:   Calendar(TimeZone::forLocaleOrDefault(aLocale), aLocale, success)
  165|       |
  166|      1|{
  167|      1|}
_ZN6icu_7814HebrewCalendarD2Ev:
  170|      1|HebrewCalendar::~HebrewCalendar() {
  171|      1|}
_ZNK6icu_7814HebrewCalendar7getTypeEv:
  173|      1|const char *HebrewCalendar::getType() const {
  174|      1|    return "hebrew";
  175|      1|}

_ZN6icu_7814IndianCalendarC2ERKNS_6LocaleER10UErrorCode:
   42|      3|  :   Calendar(TimeZone::forLocaleOrDefault(aLocale), aLocale, success)
   43|      3|{
   44|      3|}
_ZN6icu_7814IndianCalendarD2Ev:
   50|      3|{
   51|      3|}
_ZNK6icu_7814IndianCalendar7getTypeEv:
   52|      3|const char *IndianCalendar::getType() const { 
   53|      3|   return "indian";
   54|      3|}

_ZNK6icu_7815IslamicCalendar7getTypeEv:
  194|      3|const char *IslamicCalendar::getType() const {
  195|      3|    return "islamic";
  196|      3|}
_ZN6icu_7815IslamicCalendarC2ERKNS_6LocaleER10UErrorCode:
  203|      3|:   Calendar(TimeZone::forLocaleOrDefault(aLocale), aLocale, success)
  204|      3|{
  205|      3|}
_ZN6icu_7815IslamicCalendarD2Ev:
  208|      3|{
  209|      3|}

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

_ZN6icu_7813OlsonTimeZoneC2EPK15UResourceBundleS3_RKNS_13UnicodeStringER10UErrorCode:
  124|     36|  BasicTimeZone(tzid), finalZone(nullptr)
  125|     36|{
  126|     36|    clearTransitionRules();
  127|     36|    U_DEBUG_TZ_MSG(("OlsonTimeZone(%s)\n", ures_getKey((UResourceBundle*)res)));
  128|     36|    if ((top == nullptr || res == nullptr) && U_SUCCESS(ec)) {
  ------------------
  |  Branch (128:10): [True: 0, False: 36]
  |  Branch (128:28): [True: 0, False: 36]
  |  Branch (128:47): [True: 0, False: 0]
  ------------------
  129|      0|        ec = U_ILLEGAL_ARGUMENT_ERROR;
  130|      0|    }
  131|     36|    if (U_SUCCESS(ec)) {
  ------------------
  |  Branch (131:9): [True: 36, 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|     36|        int32_t len;
  137|     36|        StackUResourceBundle r;
  138|       |
  139|       |        // Pre-32bit second transitions
  140|     36|        ures_getByKey(res, kTRANSPRE32, r.getAlias(), &ec);
  ------------------
  |  | 1661|     36|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      ures_getByKey(res, kTRANSPRE32, r.getAlias(), &ec);
  ------------------
  |  |   71|     36|#define kTRANSPRE32     "transPre32"
  ------------------
  141|     36|        transitionTimesPre32 = ures_getIntVector(r.getAlias(), &len, &ec);
  ------------------
  |  | 1665|     36|#define ures_getIntVector U_ICU_ENTRY_POINT_RENAME(ures_getIntVector)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  142|     36|        transitionCountPre32 = static_cast<int16_t>(len >> 1);
  143|     36|        if (ec == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (143:13): [True: 15, False: 21]
  ------------------
  144|       |            // No pre-32bit transitions
  145|     15|            transitionTimesPre32 = nullptr;
  146|     15|            transitionCountPre32 = 0;
  147|     15|            ec = U_ZERO_ERROR;
  148|     21|        } else if (U_SUCCESS(ec) && (len < 0 || len > 0x7FFF || (len & 1) != 0) /* len must be even */) {
  ------------------
  |  Branch (148:20): [True: 21, False: 0]
  |  Branch (148:38): [True: 0, False: 21]
  |  Branch (148:49): [True: 0, False: 21]
  |  Branch (148:65): [True: 0, False: 21]
  ------------------
  149|      0|            ec = U_INVALID_FORMAT_ERROR;
  150|      0|        }
  151|       |
  152|       |        // 32bit second transitions
  153|     36|        ures_getByKey(res, kTRANS, r.getAlias(), &ec);
  ------------------
  |  | 1661|     36|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      ures_getByKey(res, kTRANS, r.getAlias(), &ec);
  ------------------
  |  |   70|     36|#define kTRANS          "trans"
  ------------------
  154|     36|        transitionTimes32 = ures_getIntVector(r.getAlias(), &len, &ec);
  ------------------
  |  | 1665|     36|#define ures_getIntVector U_ICU_ENTRY_POINT_RENAME(ures_getIntVector)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  155|     36|        transitionCount32 = static_cast<int16_t>(len);
  156|     36|        if (ec == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (156:13): [True: 8, False: 28]
  ------------------
  157|       |            // No 32bit transitions
  158|      8|            transitionTimes32 = nullptr;
  159|      8|            transitionCount32 = 0;
  160|      8|            ec = U_ZERO_ERROR;
  161|     28|        } else if (U_SUCCESS(ec) && (len < 0 || len > 0x7FFF)) {
  ------------------
  |  Branch (161:20): [True: 28, False: 0]
  |  Branch (161:38): [True: 0, False: 28]
  |  Branch (161:49): [True: 0, False: 28]
  ------------------
  162|      0|            ec = U_INVALID_FORMAT_ERROR;
  163|      0|        }
  164|       |
  165|       |        // Post-32bit second transitions
  166|     36|        ures_getByKey(res, kTRANSPOST32, r.getAlias(), &ec);
  ------------------
  |  | 1661|     36|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      ures_getByKey(res, kTRANSPOST32, r.getAlias(), &ec);
  ------------------
  |  |   72|     36|#define kTRANSPOST32    "transPost32"
  ------------------
  167|     36|        transitionTimesPost32 = ures_getIntVector(r.getAlias(), &len, &ec);
  ------------------
  |  | 1665|     36|#define ures_getIntVector U_ICU_ENTRY_POINT_RENAME(ures_getIntVector)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|     36|        transitionCountPost32 = static_cast<int16_t>(len >> 1);
  169|     36|        if (ec == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (169:13): [True: 35, False: 1]
  ------------------
  170|       |            // No pre-32bit transitions
  171|     35|            transitionTimesPost32 = nullptr;
  172|     35|            transitionCountPost32 = 0;
  173|     35|            ec = U_ZERO_ERROR;
  174|     35|        } else if (U_SUCCESS(ec) && (len < 0 || len > 0x7FFF || (len & 1) != 0) /* len must be even */) {
  ------------------
  |  Branch (174:20): [True: 1, False: 0]
  |  Branch (174:38): [True: 0, False: 1]
  |  Branch (174:49): [True: 0, False: 1]
  |  Branch (174:65): [True: 0, False: 1]
  ------------------
  175|      0|            ec = U_INVALID_FORMAT_ERROR;
  176|      0|        }
  177|       |
  178|       |        // Type offsets list must be of even size, with size >= 2
  179|     36|        ures_getByKey(res, kTYPEOFFSETS, r.getAlias(), &ec);
  ------------------
  |  | 1661|     36|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      ures_getByKey(res, kTYPEOFFSETS, r.getAlias(), &ec);
  ------------------
  |  |   73|     36|#define kTYPEOFFSETS    "typeOffsets"
  ------------------
  180|     36|        typeOffsets = ures_getIntVector(r.getAlias(), &len, &ec);
  ------------------
  |  | 1665|     36|#define ures_getIntVector U_ICU_ENTRY_POINT_RENAME(ures_getIntVector)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  181|     36|        if (U_SUCCESS(ec) && (len < 2 || len > 0x7FFE || (len & 1) != 0)) {
  ------------------
  |  Branch (181:13): [True: 36, False: 0]
  |  Branch (181:31): [True: 0, False: 36]
  |  Branch (181:42): [True: 0, False: 36]
  |  Branch (181:58): [True: 0, False: 36]
  ------------------
  182|      0|            ec = U_INVALID_FORMAT_ERROR;
  183|      0|        }
  184|     36|        typeCount = static_cast<int16_t>(len) >> 1;
  185|       |
  186|       |        // Type map data must be of the same size as the transition count
  187|     36|        typeMapData =  nullptr;
  188|     36|        if (transitionCount() > 0) {
  ------------------
  |  Branch (188:13): [True: 28, False: 8]
  ------------------
  189|     28|            ures_getByKey(res, kTYPEMAP, r.getAlias(), &ec);
  ------------------
  |  | 1661|     28|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     28|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     28|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     28|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          ures_getByKey(res, kTYPEMAP, r.getAlias(), &ec);
  ------------------
  |  |   74|     28|#define kTYPEMAP        "typeMap"
  ------------------
  190|     28|            typeMapData = ures_getBinary(r.getAlias(), &len, &ec);
  ------------------
  |  | 1659|     28|#define ures_getBinary U_ICU_ENTRY_POINT_RENAME(ures_getBinary)
  |  |  ------------------
  |  |  |  |  123|     28|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     28|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     28|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|     28|            if (ec == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (191:17): [True: 0, False: 28]
  ------------------
  192|       |                // no type mapping data
  193|      0|                ec = U_INVALID_FORMAT_ERROR;
  194|     28|            } else if (U_SUCCESS(ec) && len != transitionCount()) {
  ------------------
  |  Branch (194:24): [True: 28, False: 0]
  |  Branch (194:41): [True: 0, False: 28]
  ------------------
  195|      0|                ec = U_INVALID_FORMAT_ERROR;
  196|      0|            }
  197|     28|        }
  198|       |
  199|       |        // Process final rule and data, if any
  200|     36|        if (U_SUCCESS(ec)) {
  ------------------
  |  Branch (200:13): [True: 36, False: 0]
  ------------------
  201|     36|            const char16_t *ruleIdUStr = ures_getStringByKey(res, kFINALRULE, &len, &ec);
  ------------------
  |  | 1677|     36|#define ures_getStringByKey U_ICU_ENTRY_POINT_RENAME(ures_getStringByKey)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          const char16_t *ruleIdUStr = ures_getStringByKey(res, kFINALRULE, &len, &ec);
  ------------------
  |  |   76|     36|#define kFINALRULE      "finalRule"
  ------------------
  202|     36|            ures_getByKey(res, kFINALRAW, r.getAlias(), &ec);
  ------------------
  |  | 1661|     36|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          ures_getByKey(res, kFINALRAW, r.getAlias(), &ec);
  ------------------
  |  |   77|     36|#define kFINALRAW       "finalRaw"
  ------------------
  203|     36|            int32_t ruleRaw = ures_getInt(r.getAlias(), &ec);
  ------------------
  |  | 1664|     36|#define ures_getInt U_ICU_ENTRY_POINT_RENAME(ures_getInt)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  204|     36|            ures_getByKey(res, kFINALYEAR, r.getAlias(), &ec);
  ------------------
  |  | 1661|     36|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          ures_getByKey(res, kFINALYEAR, r.getAlias(), &ec);
  ------------------
  |  |   78|     36|#define kFINALYEAR      "finalYear"
  ------------------
  205|     36|            int32_t ruleYear = ures_getInt(r.getAlias(), &ec);
  ------------------
  |  | 1664|     36|#define ures_getInt U_ICU_ENTRY_POINT_RENAME(ures_getInt)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  206|     36|            if (U_SUCCESS(ec)) {
  ------------------
  |  Branch (206:17): [True: 12, False: 24]
  ------------------
  207|     12|                UnicodeString ruleID(true, ruleIdUStr, len);
  208|     12|                UResourceBundle *rule = TimeZone::loadRule(top, ruleID, nullptr, ec);
  209|     12|                const int32_t *ruleData = ures_getIntVector(rule, &len, &ec); 
  ------------------
  |  | 1665|     12|#define ures_getIntVector U_ICU_ENTRY_POINT_RENAME(ures_getIntVector)
  |  |  ------------------
  |  |  |  |  123|     12|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     12|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     12|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|     12|                if (U_SUCCESS(ec) && len == 11) {
  ------------------
  |  Branch (210:21): [True: 12, False: 0]
  |  Branch (210:38): [True: 12, False: 0]
  ------------------
  211|     12|                    UnicodeString emptyStr;
  212|     12|                    finalZone = new SimpleTimeZone(
  213|     12|                        ruleRaw * U_MILLIS_PER_SECOND,
  ------------------
  |  |  221|     12|#define U_MILLIS_PER_SECOND        (1000)
  ------------------
  214|     12|                        emptyStr,
  215|     12|                        static_cast<int8_t>(ruleData[0]), static_cast<int8_t>(ruleData[1]), static_cast<int8_t>(ruleData[2]),
  216|     12|                        ruleData[3] * U_MILLIS_PER_SECOND,
  ------------------
  |  |  221|     12|#define U_MILLIS_PER_SECOND        (1000)
  ------------------
  217|     12|                        static_cast<SimpleTimeZone::TimeMode>(ruleData[4]),
  218|     12|                        static_cast<int8_t>(ruleData[5]), static_cast<int8_t>(ruleData[6]), static_cast<int8_t>(ruleData[7]),
  219|     12|                        ruleData[8] * U_MILLIS_PER_SECOND,
  ------------------
  |  |  221|     12|#define U_MILLIS_PER_SECOND        (1000)
  ------------------
  220|     12|                        static_cast<SimpleTimeZone::TimeMode>(ruleData[9]),
  221|     12|                        ruleData[10] * U_MILLIS_PER_SECOND, ec);
  ------------------
  |  |  221|     12|#define U_MILLIS_PER_SECOND        (1000)
  ------------------
  222|     12|                    if (finalZone == nullptr) {
  ------------------
  |  Branch (222:25): [True: 0, False: 12]
  ------------------
  223|      0|                        ec = U_MEMORY_ALLOCATION_ERROR;
  224|     12|                    } else {
  225|     12|                        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|     12|                        finalStartMillis = Grego::fieldsToDay(finalStartYear, 0, 1) * U_MILLIS_PER_DAY;
  ------------------
  |  |  227|     12|#define U_MILLIS_PER_DAY       (86400000)
  ------------------
  245|     12|                    }
  246|     12|                } else {
  247|      0|                    ec = U_INVALID_FORMAT_ERROR;
  248|      0|                }
  249|     12|                ures_close(rule);
  ------------------
  |  | 1652|     12|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|     12|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     12|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     12|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|     24|            } else if (ec == U_MISSING_RESOURCE_ERROR) {
  ------------------
  |  Branch (250:24): [True: 24, False: 0]
  ------------------
  251|       |                // No final zone
  252|     24|                ec = U_ZERO_ERROR;
  253|     24|            }
  254|     36|        }
  255|       |
  256|       |        // initialize canonical ID
  257|     36|        canonicalID = ZoneMeta::getCanonicalCLDRID(tzid, ec);
  258|     36|    }
  259|       |
  260|     36|    if (U_FAILURE(ec)) {
  ------------------
  |  Branch (260:9): [True: 0, False: 36]
  ------------------
  261|      0|        constructEmpty();
  262|      0|    }
  263|     36|}
_ZN6icu_7813OlsonTimeZoneC2ERKS0_:
  269|  6.95k|    BasicTimeZone(other), finalZone(nullptr) {
  270|  6.95k|    *this = other;
  271|  6.95k|}
_ZN6icu_7813OlsonTimeZoneaSERKS0_:
  276|  6.95k|OlsonTimeZone& OlsonTimeZone::operator=(const OlsonTimeZone& other) {
  277|  6.95k|    if (this == &other) { return *this; }  // self-assignment: no-op
  ------------------
  |  Branch (277:9): [True: 0, False: 6.95k]
  ------------------
  278|  6.95k|    canonicalID = other.canonicalID;
  279|       |
  280|  6.95k|    transitionTimesPre32 = other.transitionTimesPre32;
  281|  6.95k|    transitionTimes32 = other.transitionTimes32;
  282|  6.95k|    transitionTimesPost32 = other.transitionTimesPost32;
  283|       |
  284|  6.95k|    transitionCountPre32 = other.transitionCountPre32;
  285|  6.95k|    transitionCount32 = other.transitionCount32;
  286|  6.95k|    transitionCountPost32 = other.transitionCountPost32;
  287|       |
  288|  6.95k|    typeCount = other.typeCount;
  289|  6.95k|    typeOffsets = other.typeOffsets;
  290|  6.95k|    typeMapData = other.typeMapData;
  291|       |
  292|  6.95k|    delete finalZone;
  293|  6.95k|    finalZone = other.finalZone != nullptr ? other.finalZone->clone() : nullptr;
  ------------------
  |  Branch (293:17): [True: 0, False: 6.95k]
  ------------------
  294|       |
  295|  6.95k|    finalStartYear = other.finalStartYear;
  296|  6.95k|    finalStartMillis = other.finalStartMillis;
  297|       |
  298|  6.95k|    clearTransitionRules();
  299|       |
  300|  6.95k|    return *this;
  301|  6.95k|}
_ZN6icu_7813OlsonTimeZoneD2Ev:
  306|  6.01k|OlsonTimeZone::~OlsonTimeZone() {
  307|  6.01k|    deleteTransitionRules();
  308|  6.01k|    delete finalZone;
  309|  6.01k|}
_ZNK6icu_7813OlsonTimeZone5cloneEv:
  324|  6.95k|OlsonTimeZone* OlsonTimeZone::clone() const {
  325|  6.95k|    return new OlsonTimeZone(*this);
  326|  6.95k|}
_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|  13.0k|OlsonTimeZone::clearTransitionRules() {
  657|  13.0k|    initialRule = nullptr;
  658|  13.0k|    firstTZTransition = nullptr;
  659|  13.0k|    firstFinalTZTransition = nullptr;
  660|  13.0k|    historicRules = nullptr;
  661|  13.0k|    historicRuleCount = 0;
  662|  13.0k|    finalZoneWithStartYear = nullptr;
  663|  13.0k|    firstTZTransitionIdx = 0;
  664|  13.0k|    transitionRulesInitOnce.reset();
  665|  13.0k|}
_ZN6icu_7813OlsonTimeZone21deleteTransitionRulesEv:
  668|  6.01k|OlsonTimeZone::deleteTransitionRules() {
  669|  6.01k|    delete initialRule;
  670|  6.01k|    delete firstTZTransition;
  671|  6.01k|    delete firstFinalTZTransition;
  672|  6.01k|    delete finalZoneWithStartYear;
  673|  6.01k|    if (historicRules != nullptr) {
  ------------------
  |  Branch (673:9): [True: 0, False: 6.01k]
  ------------------
  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|  6.01k|    clearTransitionRules();
  682|  6.01k|}

_ZNK6icu_7813OlsonTimeZone15transitionCountEv:
  407|     65|OlsonTimeZone::transitionCount() const {
  408|     65|    return transitionCountPre32 + transitionCount32 + transitionCountPost32;
  409|     65|}
_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_7815PersianCalendar7getTypeEv:
  117|    302|const char *PersianCalendar::getType() const { 
  118|    302|    return "persian";
  119|    302|}
_ZN6icu_7815PersianCalendarC2ERKNS_6LocaleER10UErrorCode:
  126|    105|  :   Calendar(TimeZone::forLocaleOrDefault(aLocale), aLocale, success)
  127|    105|{
  128|    105|}
_ZN6icu_7815PersianCalendarD2Ev:
  134|     81|{
  135|     81|}

_ZN6icu_786Region14loadRegionDataER10UErrorCode:
   79|      1|void U_CALLCONV Region::loadRegionData(UErrorCode &status) {
   80|       |
   81|       |    // Construct service objs first
   82|      1|    LocalUHashtablePointer newRegionIDMap(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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  LocalUHashtablePointer newRegionIDMap(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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  LocalUHashtablePointer newRegionIDMap(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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   83|      1|    LocalUHashtablePointer newNumericCodeMap(uhash_open(uhash_hashLong,uhash_compareLong,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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  LocalUHashtablePointer newNumericCodeMap(uhash_open(uhash_hashLong,uhash_compareLong,nullptr,&status));
  ------------------
  |  | 1014|      1|#define uhash_hashLong U_ICU_ENTRY_POINT_RENAME(uhash_hashLong)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  LocalUHashtablePointer newNumericCodeMap(uhash_open(uhash_hashLong,uhash_compareLong,nullptr,&status));
  ------------------
  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   84|      1|    LocalUHashtablePointer newRegionAliases(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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  LocalUHashtablePointer newRegionAliases(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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  LocalUHashtablePointer newRegionAliases(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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   85|       |
   86|      1|    LocalPointer<UVector> continents(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status);
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  LocalPointer<UVector> continents(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   87|      1|    LocalPointer<UVector> groupings(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status);
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  LocalPointer<UVector> groupings(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   88|      1|    LocalPointer<UVector> lpAllRegions(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status);
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  LocalPointer<UVector> lpAllRegions(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   89|      1|    allRegions = lpAllRegions.orphan();
   90|       |
   91|      1|    LocalUResourceBundlePointer metadata(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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   92|      1|    LocalUResourceBundlePointer metadataAlias(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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   93|      1|    LocalUResourceBundlePointer territoryAlias(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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   94|       |
   95|      1|    LocalUResourceBundlePointer supplementalData(ures_openDirect(nullptr,"supplementalData",&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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|      1|    LocalUResourceBundlePointer codeMappings(ures_getByKey(supplementalData.getAlias(),"codeMappings",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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   97|       |
   98|      1|    LocalUResourceBundlePointer idValidity(ures_getByKey(supplementalData.getAlias(),"idValidity",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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   99|      1|    LocalUResourceBundlePointer regionList(ures_getByKey(idValidity.getAlias(),"region",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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  100|      1|    LocalUResourceBundlePointer regionRegular(ures_getByKey(regionList.getAlias(),"regular",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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  101|      1|    LocalUResourceBundlePointer regionMacro(ures_getByKey(regionList.getAlias(),"macroregion",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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  102|      1|    LocalUResourceBundlePointer regionUnknown(ures_getByKey(regionList.getAlias(),"unknown",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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  103|       |
  104|      1|    LocalUResourceBundlePointer territoryContainment(ures_getByKey(supplementalData.getAlias(),"territoryContainment",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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  105|      1|    LocalUResourceBundlePointer worldContainment(ures_getByKey(territoryContainment.getAlias(),"001",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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  106|      1|    LocalUResourceBundlePointer groupingContainment(ures_getByKey(territoryContainment.getAlias(),"grouping",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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|       |
  108|      1|    ucln_i18n_registerCleanup(UCLN_I18N_REGION, region_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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  109|      1|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (109:9): [True: 0, False: 1]
  ------------------
  110|      0|        return;
  111|      0|    }
  112|       |
  113|       |    // now, initialize
  114|      1|    uhash_setValueDeleter(newRegionIDMap.getAlias(), uprv_deleteUObject);  // regionIDMap owns objs
  ------------------
  |  | 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(newRegionIDMap.getAlias(), uprv_deleteUObject);  // regionIDMap owns objs
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  115|      1|    uhash_setKeyDeleter(newRegionAliases.getAlias(), uprv_deleteUObject);  // regionAliases owns the string keys
  ------------------
  |  | 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(newRegionAliases.getAlias(), uprv_deleteUObject);  // regionAliases owns the string keys
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  116|       |
  117|       |
  118|    120|    while (U_SUCCESS(status) && ures_hasNext(regionRegular.getAlias())) {
  ------------------
  |  | 1689|    120|#define ures_hasNext U_ICU_ENTRY_POINT_RENAME(ures_hasNext)
  |  |  ------------------
  |  |  |  |  123|    120|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    120|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    120|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (118:12): [True: 120, False: 0]
  |  Branch (118:33): [True: 119, False: 1]
  ------------------
  119|    119|        UnicodeString regionName = ures_getNextUnicodeString(regionRegular.getAlias(),nullptr,&status);
  120|    119|        int32_t rangeMarkerLocation = regionName.indexOf(RANGE_MARKER);
  121|    119|        char16_t buf[6];
  122|    119|        regionName.extract(buf,6,status);
  123|    119|        if ( rangeMarkerLocation > 0 ) {
  ------------------
  |  Branch (123:14): [True: 49, False: 70]
  ------------------
  124|     49|            char16_t endRange = regionName.charAt(rangeMarkerLocation+1);
  125|     49|            buf[rangeMarkerLocation] = 0;
  126|    236|            while (U_SUCCESS(status) && buf[rangeMarkerLocation-1] <= endRange) {
  ------------------
  |  Branch (126:20): [True: 236, False: 0]
  |  Branch (126:41): [True: 187, False: 49]
  ------------------
  127|    187|                LocalPointer<UnicodeString> newRegion(new UnicodeString(buf), status);
  128|    187|                allRegions->adoptElement(newRegion.orphan(), status);
  129|    187|                buf[rangeMarkerLocation-1]++;
  130|    187|            }
  131|     70|        } else {
  132|     70|            LocalPointer<UnicodeString> newRegion(new UnicodeString(regionName), status);
  133|     70|            allRegions->adoptElement(newRegion.orphan(), status);
  134|     70|        }
  135|    119|    }
  136|       |
  137|     25|    while (U_SUCCESS(status) && ures_hasNext(regionMacro.getAlias())) {
  ------------------
  |  | 1689|     25|#define ures_hasNext U_ICU_ENTRY_POINT_RENAME(ures_hasNext)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (137:12): [True: 25, False: 0]
  |  Branch (137:33): [True: 24, False: 1]
  ------------------
  138|     24|        UnicodeString regionName = ures_getNextUnicodeString(regionMacro.getAlias(),nullptr,&status);
  139|     24|        int32_t rangeMarkerLocation = regionName.indexOf(RANGE_MARKER);
  140|     24|        char16_t buf[6];
  141|     24|        regionName.extract(buf,6,status);
  142|     24|        if ( rangeMarkerLocation > 0 ) {
  ------------------
  |  Branch (142:14): [True: 8, False: 16]
  ------------------
  143|      8|            char16_t endRange = regionName.charAt(rangeMarkerLocation+1);
  144|      8|            buf[rangeMarkerLocation] = 0;
  145|     27|            while ( buf[rangeMarkerLocation-1] <= endRange && U_SUCCESS(status)) {
  ------------------
  |  Branch (145:21): [True: 19, False: 8]
  |  Branch (145:63): [True: 19, False: 0]
  ------------------
  146|     19|                LocalPointer<UnicodeString> newRegion(new UnicodeString(buf), status);
  147|     19|                allRegions->adoptElement(newRegion.orphan(),status);
  148|     19|                buf[rangeMarkerLocation-1]++;
  149|     19|            }
  150|     16|        } else {
  151|     16|            LocalPointer<UnicodeString> newRegion(new UnicodeString(regionName), status);
  152|     16|            allRegions->adoptElement(newRegion.orphan(),status);
  153|     16|        }
  154|     24|    }
  155|       |
  156|      2|    while (U_SUCCESS(status) && ures_hasNext(regionUnknown.getAlias())) {
  ------------------
  |  | 1689|      2|#define ures_hasNext U_ICU_ENTRY_POINT_RENAME(ures_hasNext)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (156:12): [True: 2, False: 0]
  |  Branch (156:33): [True: 1, False: 1]
  ------------------
  157|      1|        LocalPointer<UnicodeString> regionName (
  158|      1|            new UnicodeString(ures_getNextUnicodeString(regionUnknown.getAlias(), nullptr, &status), status));
  159|      1|        allRegions->adoptElement(regionName.orphan(),status);
  160|      1|    }
  161|       |
  162|      6|    while (U_SUCCESS(status) && ures_hasNext(worldContainment.getAlias())) {
  ------------------
  |  | 1689|      6|#define ures_hasNext U_ICU_ENTRY_POINT_RENAME(ures_hasNext)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (162:12): [True: 6, False: 0]
  |  Branch (162:33): [True: 5, False: 1]
  ------------------
  163|      5|        UnicodeString *continentName = new UnicodeString(ures_getNextUnicodeString(worldContainment.getAlias(),nullptr,&status));
  164|      5|        continents->adoptElement(continentName,status);
  165|      5|    }
  166|      1|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (166:9): [True: 0, False: 1]
  ------------------
  167|      0|        return;
  168|      0|    }
  169|       |
  170|    294|    for ( int32_t i = 0 ; i < allRegions->size() ; i++ ) {
  ------------------
  |  Branch (170:27): [True: 293, False: 1]
  ------------------
  171|    293|        LocalPointer<Region> r(new Region(), status);
  172|    293|        if ( U_FAILURE(status) ) {
  ------------------
  |  Branch (172:14): [True: 0, False: 293]
  ------------------
  173|      0|           return;
  174|      0|        }
  175|    293|        UnicodeString* regionName = static_cast<UnicodeString*>(allRegions->elementAt(i));
  176|    293|        r->idStr = *regionName;
  177|       |
  178|    293|        r->idStr.extract(0,r->idStr.length(),r->id,sizeof(r->id),US_INV);
  ------------------
  |  |   98|    293|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  179|    293|        r->fType = URGN_TERRITORY; // Only temporary - figure out the real type later once the aliases are known.
  180|       |
  181|    293|        int32_t pos = 0;
  182|    293|        int32_t result = ICU_Utility::parseAsciiInteger(r->idStr, pos);
  183|    293|        if (pos > 0) {
  ------------------
  |  Branch (183:13): [True: 31, False: 262]
  ------------------
  184|     31|            r->code = result; // Convert string to number
  185|     31|            uhash_iput(newNumericCodeMap.getAlias(),r->code,(void *)(r.getAlias()),&status);
  ------------------
  |  | 1024|     31|#define uhash_iput U_ICU_ENTRY_POINT_RENAME(uhash_iput)
  |  |  ------------------
  |  |  |  |  123|     31|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     31|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     31|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  186|     31|            r->fType = URGN_SUBCONTINENT;
  187|    262|        } else {
  188|    262|            r->code = -1;
  189|    262|        }
  190|    293|        void* idStrAlias = (void*)&(r->idStr); // about to orphan 'r'. Save this off.
  191|    293|        uhash_put(newRegionIDMap.getAlias(),idStrAlias,(void *)(r.orphan()),&status); // regionIDMap takes ownership
  ------------------
  |  | 1032|    293|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|    293|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    293|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    293|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|    293|    }
  193|       |
  194|      1|    UResourceBundle *groupingBundle = nullptr;
  195|      7|    while (U_SUCCESS(status) && ures_hasNext(groupingContainment.getAlias())) {
  ------------------
  |  | 1689|      7|#define ures_hasNext U_ICU_ENTRY_POINT_RENAME(ures_hasNext)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (195:12): [True: 7, False: 0]
  |  Branch (195:33): [True: 6, False: 1]
  ------------------
  196|      6|        groupingBundle = ures_getNextResource(groupingContainment.getAlias(), groupingBundle, &status);
  ------------------
  |  | 1672|      6|#define ures_getNextResource U_ICU_ENTRY_POINT_RENAME(ures_getNextResource)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|      6|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (197:13): [True: 0, False: 6]
  ------------------
  198|      0|            break;
  199|      0|        }
  200|      6|        UnicodeString *groupingName = new UnicodeString(ures_getKey(groupingBundle), -1, US_INV);
  ------------------
  |  | 1666|      6|#define ures_getKey U_ICU_ENTRY_POINT_RENAME(ures_getKey)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      UnicodeString *groupingName = new UnicodeString(ures_getKey(groupingBundle), -1, US_INV);
  ------------------
  |  |   98|      6|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  201|      6|        LocalPointer<UnicodeString> lpGroupingName(groupingName, status);
  202|      6|        groupings->adoptElement(lpGroupingName.orphan(), status);
  203|      6|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (203:13): [True: 0, False: 6]
  ------------------
  204|      0|            break;
  205|      0|        }
  206|      6|        Region* grouping = static_cast<Region*>(uhash_get(newRegionIDMap.getAlias(), groupingName));
  ------------------
  |  | 1007|      6|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  207|      6|        if (grouping != nullptr) {
  ------------------
  |  Branch (207:13): [True: 6, False: 0]
  ------------------
  208|    255|            for (int32_t i = 0; i < ures_getSize(groupingBundle) && U_SUCCESS(status); i++) {
  ------------------
  |  | 1674|    255|#define ures_getSize U_ICU_ENTRY_POINT_RENAME(ures_getSize)
  |  |  ------------------
  |  |  |  |  123|    255|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    255|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    255|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (208:33): [True: 249, False: 6]
  |  Branch (208:69): [True: 249, False: 0]
  ------------------
  209|    249|                UnicodeString child = ures_getUnicodeStringByIndex(groupingBundle, i, &status);
  210|    249|                if (U_SUCCESS(status)) {
  ------------------
  |  Branch (210:21): [True: 249, False: 0]
  ------------------
  211|    249|                    if (grouping->containedRegions == nullptr) {
  ------------------
  |  Branch (211:25): [True: 6, False: 243]
  ------------------
  212|      6|                        LocalPointer<UVector> lpContainedRegions(
  213|      6|                            new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status);
  ------------------
  |  | 1489|      6|#define uprv_deleteUObject U_ICU_ENTRY_POINT_RENAME(uprv_deleteUObject)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                          new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status);
  ------------------
  |  |  999|      6|#define uhash_compareUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_compareUnicodeString)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  214|      6|                        grouping->containedRegions = lpContainedRegions.orphan();
  215|      6|                        if (U_FAILURE(status)) {
  ------------------
  |  Branch (215:29): [True: 0, False: 6]
  ------------------
  216|      0|                            break;
  217|      0|                        }
  218|      6|                    }
  219|    249|                    LocalPointer<UnicodeString> lpChildCopy(new UnicodeString(child), status);
  220|    249|                    grouping->containedRegions->adoptElement(lpChildCopy.orphan(), status);
  221|    249|                }
  222|    249|            }
  223|      6|        }
  224|      6|    }
  225|      1|    ures_close(groupingBundle);
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  226|       |    
  227|       |    // Process the territory aliases
  228|    641|    while (U_SUCCESS(status) && ures_hasNext(territoryAlias.getAlias())) {
  ------------------
  |  | 1689|    641|#define ures_hasNext U_ICU_ENTRY_POINT_RENAME(ures_hasNext)
  |  |  ------------------
  |  |  |  |  123|    641|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    641|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    641|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (228:12): [True: 641, False: 0]
  |  Branch (228:33): [True: 640, False: 1]
  ------------------
  229|    640|        LocalUResourceBundlePointer res(ures_getNextResource(territoryAlias.getAlias(),nullptr,&status));
  ------------------
  |  | 1672|    640|#define ures_getNextResource U_ICU_ENTRY_POINT_RENAME(ures_getNextResource)
  |  |  ------------------
  |  |  |  |  123|    640|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    640|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    640|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  230|    640|        const char *aliasFrom = ures_getKey(res.getAlias());
  ------------------
  |  | 1666|    640|#define ures_getKey U_ICU_ENTRY_POINT_RENAME(ures_getKey)
  |  |  ------------------
  |  |  |  |  123|    640|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    640|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    640|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|    640|        LocalPointer<UnicodeString> aliasFromStr(new UnicodeString(aliasFrom, -1, US_INV), status);
  ------------------
  |  |   98|    640|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  232|    640|        UnicodeString aliasTo = ures_getUnicodeStringByKey(res.getAlias(),"replacement",&status);
  233|    640|        res.adoptInstead(nullptr);
  234|       |
  235|    640|        const Region* aliasToRegion = static_cast<Region*>(uhash_get(newRegionIDMap.getAlias(), &aliasTo));
  ------------------
  |  | 1007|    640|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|    640|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    640|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    640|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  236|    640|        Region* aliasFromRegion = static_cast<Region*>(uhash_get(newRegionIDMap.getAlias(), aliasFromStr.getAlias()));
  ------------------
  |  | 1007|    640|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|    640|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    640|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    640|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  237|       |
  238|    640|        if ( aliasToRegion != nullptr && aliasFromRegion == nullptr ) { // This is just an alias from some string to a region
  ------------------
  |  Branch (238:14): [True: 541, False: 99]
  |  Branch (238:42): [True: 541, False: 0]
  ------------------
  239|    541|            uhash_put(newRegionAliases.getAlias(),(void *)aliasFromStr.orphan(), (void *)aliasToRegion,&status);
  ------------------
  |  | 1032|    541|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|    541|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    541|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    541|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  240|    541|        } else {
  241|     99|            if ( aliasFromRegion == nullptr ) { // Deprecated region code not in the primary codes list - so need to create a deprecated region for it.
  ------------------
  |  Branch (241:18): [True: 99, False: 0]
  ------------------
  242|     99|                LocalPointer<Region> newRgn(new Region, status); 
  243|     99|                if ( U_SUCCESS(status) ) {
  ------------------
  |  Branch (243:22): [True: 99, False: 0]
  ------------------
  244|     99|                    aliasFromRegion = newRgn.orphan();
  245|     99|                } else {
  246|      0|                    return; // error out
  247|      0|                }
  248|     99|                aliasFromRegion->idStr.setTo(*aliasFromStr);
  249|     99|                aliasFromRegion->idStr.extract(0,aliasFromRegion->idStr.length(),aliasFromRegion->id,sizeof(aliasFromRegion->id),US_INV);
  ------------------
  |  |   98|     99|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  250|     99|                uhash_put(newRegionIDMap.getAlias(),(void *)&(aliasFromRegion->idStr),(void *)aliasFromRegion,&status);
  ------------------
  |  | 1032|     99|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|     99|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     99|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     99|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  251|     99|                int32_t pos = 0;
  252|     99|                int32_t result = ICU_Utility::parseAsciiInteger(aliasFromRegion->idStr, pos);
  253|     99|                if ( pos > 0 ) {
  ------------------
  |  Branch (253:22): [True: 49, False: 50]
  ------------------
  254|     49|                    aliasFromRegion->code = result; // Convert string to number
  255|     49|                    uhash_iput(newNumericCodeMap.getAlias(),aliasFromRegion->code,(void *)aliasFromRegion,&status);
  ------------------
  |  | 1024|     49|#define uhash_iput U_ICU_ENTRY_POINT_RENAME(uhash_iput)
  |  |  ------------------
  |  |  |  |  123|     49|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     49|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     49|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|     50|                } else {
  257|     50|                    aliasFromRegion->code = -1;
  258|     50|                }
  259|     99|                aliasFromRegion->fType = URGN_DEPRECATED;
  260|     99|            } else {
  261|      0|                aliasFromRegion->fType = URGN_DEPRECATED;
  262|      0|            }
  263|       |
  264|     99|            {
  265|     99|                LocalPointer<UVector> newPreferredValues(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status);
  ------------------
  |  | 1489|     99|#define uprv_deleteUObject U_ICU_ENTRY_POINT_RENAME(uprv_deleteUObject)
  |  |  ------------------
  |  |  |  |  123|     99|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     99|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     99|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                              LocalPointer<UVector> newPreferredValues(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status);
  ------------------
  |  |  999|     99|#define uhash_compareUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_compareUnicodeString)
  |  |  ------------------
  |  |  |  |  123|     99|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     99|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     99|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  266|     99|                aliasFromRegion->preferredValues = newPreferredValues.orphan();
  267|     99|            }
  268|     99|            if( U_FAILURE(status)) {
  ------------------
  |  Branch (268:17): [True: 0, False: 99]
  ------------------
  269|      0|                return;
  270|      0|            }
  271|     99|            UnicodeString currentRegion;
  272|       |            //currentRegion.remove();   TODO: was already 0 length?
  273|    551|            for (int32_t i = 0 ; i < aliasTo.length() && U_SUCCESS(status); i++ ) {
  ------------------
  |  Branch (273:34): [True: 452, False: 99]
  |  Branch (273:58): [True: 452, False: 0]
  ------------------
  274|    452|                if ( aliasTo.charAt(i) != 0x0020 ) {
  ------------------
  |  Branch (274:22): [True: 368, False: 84]
  ------------------
  275|    368|                    currentRegion.append(aliasTo.charAt(i));
  276|    368|                }
  277|    452|                if ( aliasTo.charAt(i) == 0x0020 || i+1 == aliasTo.length() ) {
  ------------------
  |  Branch (277:22): [True: 84, False: 368]
  |  Branch (277:53): [True: 99, False: 269]
  ------------------
  278|    183|                    Region* target = static_cast<Region*>(uhash_get(newRegionIDMap.getAlias(), &currentRegion));
  ------------------
  |  | 1007|    183|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|    183|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    183|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    183|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  279|    183|                    if (target) {
  ------------------
  |  Branch (279:25): [True: 107, False: 76]
  ------------------
  280|    107|                        LocalPointer<UnicodeString> preferredValue(new UnicodeString(target->idStr), status);
  281|    107|                        aliasFromRegion->preferredValues->adoptElement(preferredValue.orphan(),status);  // may add null if err
  282|    107|                    }
  283|    183|                    currentRegion.remove();
  284|    183|                }
  285|    452|            }
  286|     99|        }
  287|    640|    }
  288|       |
  289|       |    // Process the code mappings - This will allow us to assign numeric codes to most of the territories.
  290|    304|    while (U_SUCCESS(status) && ures_hasNext(codeMappings.getAlias())) {
  ------------------
  |  | 1689|    304|#define ures_hasNext U_ICU_ENTRY_POINT_RENAME(ures_hasNext)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (290:12): [True: 304, False: 0]
  |  Branch (290:33): [True: 303, False: 1]
  ------------------
  291|    303|        UResourceBundle *mapping = ures_getNextResource(codeMappings.getAlias(),nullptr,&status);
  ------------------
  |  | 1672|    303|#define ures_getNextResource U_ICU_ENTRY_POINT_RENAME(ures_getNextResource)
  |  |  ------------------
  |  |  |  |  123|    303|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    303|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    303|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  292|    303|        if (U_SUCCESS(status) && ures_getType(mapping) == URES_ARRAY && ures_getSize(mapping) == 3) {
  ------------------
  |  | 1679|    303|#define ures_getType U_ICU_ENTRY_POINT_RENAME(ures_getType)
  |  |  ------------------
  |  |  |  |  123|    303|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    303|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    303|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (U_SUCCESS(status) && ures_getType(mapping) == URES_ARRAY && ures_getSize(mapping) == 3) {
  ------------------
  |  | 1674|    303|#define ures_getSize U_ICU_ENTRY_POINT_RENAME(ures_getSize)
  |  |  ------------------
  |  |  |  |  123|    303|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    303|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    303|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (292:13): [True: 303, False: 0]
  |  Branch (292:34): [True: 303, False: 0]
  |  Branch (292:73): [True: 303, False: 0]
  ------------------
  293|    303|            UnicodeString codeMappingID = ures_getUnicodeStringByIndex(mapping,0,&status);
  294|    303|            UnicodeString codeMappingNumber = ures_getUnicodeStringByIndex(mapping,1,&status);
  295|    303|            UnicodeString codeMapping3Letter = ures_getUnicodeStringByIndex(mapping,2,&status);
  296|       |
  297|    303|            Region* r = static_cast<Region*>(uhash_get(newRegionIDMap.getAlias(), &codeMappingID));
  ------------------
  |  | 1007|    303|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|    303|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    303|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    303|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  298|    303|            if ( r ) {
  ------------------
  |  Branch (298:18): [True: 258, False: 45]
  ------------------
  299|    258|                int32_t pos = 0;
  300|    258|                int32_t result = ICU_Utility::parseAsciiInteger(codeMappingNumber, pos);
  301|    258|                if ( pos > 0 ) {
  ------------------
  |  Branch (301:22): [True: 258, False: 0]
  ------------------
  302|    258|                    r->code = result; // Convert string to number
  303|    258|                    uhash_iput(newNumericCodeMap.getAlias(),r->code,(void *)r,&status);
  ------------------
  |  | 1024|    258|#define uhash_iput U_ICU_ENTRY_POINT_RENAME(uhash_iput)
  |  |  ------------------
  |  |  |  |  123|    258|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    258|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    258|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  304|    258|                }
  305|    258|                LocalPointer<UnicodeString> code3(new UnicodeString(codeMapping3Letter), status);
  306|    258|                uhash_put(newRegionAliases.getAlias(),(void *)code3.orphan(), (void *)r,&status);
  ------------------
  |  | 1032|    258|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|    258|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    258|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    258|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  307|    258|            }
  308|    303|        }
  309|    303|        ures_close(mapping);
  ------------------
  |  | 1652|    303|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|    303|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    303|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    303|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  310|    303|    }
  311|       |
  312|       |    // Now fill in the special cases for WORLD, UNKNOWN, CONTINENTS, and GROUPINGS
  313|      1|    Region *r;
  314|      1|    UnicodeString WORLD_ID_STRING(WORLD_ID);
  315|      1|    r = static_cast<Region*>(uhash_get(newRegionIDMap.getAlias(), &WORLD_ID_STRING));
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|      1|    if ( r ) {
  ------------------
  |  Branch (316:10): [True: 1, False: 0]
  ------------------
  317|      1|        r->fType = URGN_WORLD;
  318|      1|    }
  319|       |
  320|      1|    UnicodeString UNKNOWN_REGION_ID_STRING(UNKNOWN_REGION_ID);
  321|      1|    r = static_cast<Region*>(uhash_get(newRegionIDMap.getAlias(), &UNKNOWN_REGION_ID_STRING));
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  322|      1|    if ( r ) {
  ------------------
  |  Branch (322:10): [True: 1, False: 0]
  ------------------
  323|      1|        r->fType = URGN_UNKNOWN;
  324|      1|    }
  325|       |
  326|      6|    for ( int32_t i = 0 ; i < continents->size() ; i++ ) {
  ------------------
  |  Branch (326:27): [True: 5, False: 1]
  ------------------
  327|      5|        r = static_cast<Region*>(uhash_get(newRegionIDMap.getAlias(), continents->elementAt(i)));
  ------------------
  |  | 1007|      5|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  328|      5|        if ( r ) {
  ------------------
  |  Branch (328:14): [True: 5, False: 0]
  ------------------
  329|      5|            r->fType = URGN_CONTINENT;
  330|      5|        }
  331|      5|    }
  332|       |
  333|      7|    for ( int32_t i = 0 ; i < groupings->size() ; i++ ) {
  ------------------
  |  Branch (333:27): [True: 6, False: 1]
  ------------------
  334|      6|        r = static_cast<Region*>(uhash_get(newRegionIDMap.getAlias(), groupings->elementAt(i)));
  ------------------
  |  | 1007|      6|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  335|      6|        if ( r ) {
  ------------------
  |  Branch (335:14): [True: 6, False: 0]
  ------------------
  336|      6|            r->fType = URGN_GROUPING;
  337|      6|        }
  338|      6|    }
  339|       |
  340|       |    // Special case: The region code "QO" (Outlying Oceania) is a subcontinent code added by CLDR
  341|       |    // even though it looks like a territory code.  Need to handle it here.
  342|       |
  343|      1|    UnicodeString OUTLYING_OCEANIA_REGION_ID_STRING(OUTLYING_OCEANIA_REGION_ID);
  344|      1|    r = static_cast<Region*>(uhash_get(newRegionIDMap.getAlias(), &OUTLYING_OCEANIA_REGION_ID_STRING));
  ------------------
  |  | 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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  345|      1|    if ( r ) {
  ------------------
  |  Branch (345:10): [True: 1, False: 0]
  ------------------
  346|      1|        r->fType = URGN_SUBCONTINENT;
  347|      1|    }
  348|       |
  349|       |    // Load territory containment info from the supplemental data.
  350|     33|    while ( ures_hasNext(territoryContainment.getAlias()) ) {
  ------------------
  |  | 1689|     33|#define ures_hasNext U_ICU_ENTRY_POINT_RENAME(ures_hasNext)
  |  |  ------------------
  |  |  |  |  123|     33|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     33|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     33|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (350:13): [True: 32, False: 1]
  ------------------
  351|     32|        LocalUResourceBundlePointer mapping(ures_getNextResource(territoryContainment.getAlias(),nullptr,&status));
  ------------------
  |  | 1672|     32|#define ures_getNextResource U_ICU_ENTRY_POINT_RENAME(ures_getNextResource)
  |  |  ------------------
  |  |  |  |  123|     32|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     32|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     32|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  352|     32|        if( U_FAILURE(status) ) {
  ------------------
  |  Branch (352:13): [True: 0, False: 32]
  ------------------
  353|      0|            return;  // error out
  354|      0|        }
  355|     32|        const char *parent = ures_getKey(mapping.getAlias());
  ------------------
  |  | 1666|     32|#define ures_getKey U_ICU_ENTRY_POINT_RENAME(ures_getKey)
  |  |  ------------------
  |  |  |  |  123|     32|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     32|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     32|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  356|     32|        if (uprv_strcmp(parent, "containedGroupings") == 0 || uprv_strcmp(parent, "deprecated") == 0) {
  ------------------
  |  |   38|     32|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|     32|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
                      if (uprv_strcmp(parent, "containedGroupings") == 0 || uprv_strcmp(parent, "deprecated") == 0) {
  ------------------
  |  |   38|     31|#define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2)
  |  |  ------------------
  |  |  |  |  393|     31|#define U_STANDARD_CPP_NAMESPACE        ::
  |  |  ------------------
  ------------------
  |  Branch (356:13): [True: 1, False: 31]
  |  Branch (356:63): [True: 1, False: 30]
  ------------------
  357|      2|            continue; // handle new pseudo-parent types added in ICU data per cldrbug 7808; for now just skip.
  358|       |            // #11232 is to do something useful with these.
  359|      2|        }
  360|     30|        UnicodeString parentStr = UnicodeString(parent, -1 , US_INV);
  ------------------
  |  |   98|     30|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  361|     30|        Region* parentRegion = static_cast<Region*>(uhash_get(newRegionIDMap.getAlias(), &parentStr));
  ------------------
  |  | 1007|     30|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|     30|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     30|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     30|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  362|       |
  363|    321|        for ( int j = 0 ; j < ures_getSize(mapping.getAlias()); j++ ) {
  ------------------
  |  | 1674|    321|#define ures_getSize U_ICU_ENTRY_POINT_RENAME(ures_getSize)
  |  |  ------------------
  |  |  |  |  123|    321|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    321|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    321|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (363:27): [True: 291, False: 30]
  ------------------
  364|    291|            UnicodeString child = ures_getUnicodeStringByIndex(mapping.getAlias(),j,&status);
  365|    291|            Region* childRegion = static_cast<Region*>(uhash_get(newRegionIDMap.getAlias(), &child));
  ------------------
  |  | 1007|    291|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|    291|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    291|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    291|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  366|    291|            if ( parentRegion != nullptr && childRegion != nullptr ) {
  ------------------
  |  Branch (366:18): [True: 285, False: 6]
  |  Branch (366:45): [True: 285, False: 0]
  ------------------
  367|       |
  368|       |                // Add the child region to the set of regions contained by the parent
  369|    285|                if (parentRegion->containedRegions == nullptr) {
  ------------------
  |  Branch (369:21): [True: 29, False: 256]
  ------------------
  370|     29|                    LocalPointer<UVector> lpContainedRegions(
  371|     29|                        new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status);
  ------------------
  |  | 1489|     29|#define uprv_deleteUObject U_ICU_ENTRY_POINT_RENAME(uprv_deleteUObject)
  |  |  ------------------
  |  |  |  |  123|     29|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     29|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     29|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                      new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status);
  ------------------
  |  |  999|     29|#define uhash_compareUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_compareUnicodeString)
  |  |  ------------------
  |  |  |  |  123|     29|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     29|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     29|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  372|     29|                    parentRegion->containedRegions = lpContainedRegions.orphan();
  373|     29|                    if (U_FAILURE(status)) {
  ------------------
  |  Branch (373:25): [True: 0, False: 29]
  ------------------
  374|      0|                        return;
  375|      0|                    }
  376|     29|                }
  377|       |
  378|    285|                LocalPointer<UnicodeString> childStr(new UnicodeString(), status);
  379|    285|                if (U_FAILURE(status)) {
  ------------------
  |  Branch (379:21): [True: 0, False: 285]
  ------------------
  380|      0|                    return;  // error out
  381|      0|                }
  382|    285|                childStr->fastCopyFrom(childRegion->idStr);
  383|    285|                parentRegion->containedRegions->adoptElement(childStr.orphan(),status);
  384|    285|                if (U_FAILURE(status)) {
  ------------------
  |  Branch (384:21): [True: 0, False: 285]
  ------------------
  385|      0|                    return;
  386|      0|                }
  387|       |
  388|       |                // Set the parent region to be the containing region of the child.
  389|       |                // Regions of type GROUPING can't be set as the parent, since another region
  390|       |                // such as a SUBCONTINENT, CONTINENT, or WORLD must always be the parent.
  391|    285|                if ( parentRegion->fType != URGN_GROUPING) {
  ------------------
  |  Branch (391:22): [True: 285, False: 0]
  ------------------
  392|    285|                    childRegion->containingRegion = parentRegion;
  393|    285|                }
  394|    285|            }
  395|    291|        }
  396|     30|    }
  397|       |
  398|       |    // Create the availableRegions lists
  399|      1|    int32_t pos = UHASH_FIRST;
  ------------------
  |  |  610|      1|#define UHASH_FIRST (-1)
  ------------------
  400|    393|    while ( const UHashElement* element = uhash_nextElement(newRegionIDMap.getAlias(),&pos)) {
  ------------------
  |  Branch (400:33): [True: 392, False: 1]
  ------------------
  401|    392|        Region* ar = static_cast<Region*>(element->value.pointer);
  402|    392|        if ( availableRegions[ar->fType] == nullptr ) {
  ------------------
  |  Branch (402:14): [True: 7, False: 385]
  ------------------
  403|      7|            LocalPointer<UVector> newAr(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status);
  ------------------
  |  | 1489|      7|#define uprv_deleteUObject U_ICU_ENTRY_POINT_RENAME(uprv_deleteUObject)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          LocalPointer<UVector> newAr(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status), status);
  ------------------
  |  |  999|      7|#define uhash_compareUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_compareUnicodeString)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  404|      7|            availableRegions[ar->fType] = newAr.orphan();
  405|      7|        }
  406|    392|        LocalPointer<UnicodeString> arString(new UnicodeString(ar->idStr), status);
  407|    392|        if( U_FAILURE(status) ) {
  ------------------
  |  Branch (407:13): [True: 0, False: 392]
  ------------------
  408|      0|            return;  // error out
  409|      0|        }
  410|    392|        availableRegions[ar->fType]->adoptElement(arString.orphan(), status);
  411|    392|    }
  412|       |    
  413|       |    // copy hashtables
  414|      1|    numericCodeMap = newNumericCodeMap.orphan();
  415|      1|    regionIDMap = newRegionIDMap.orphan();
  416|      1|    regionAliases = newRegionAliases.orphan();
  417|      1|}
_ZN6icu_786RegionC2Ev:
  449|    392|        : code(-1),
  450|    392|          fType(URGN_UNKNOWN),
  451|    392|          containingRegion(nullptr),
  452|    392|          containedRegions(nullptr),
  453|    392|          preferredValues(nullptr) {
  454|    392|    id[0] = 0;
  455|    392|}
_ZN6icu_786Region11getInstanceEPKcR10UErrorCode:
  487|    897|Region::getInstance(const char *region_code, UErrorCode &status) {
  488|       |
  489|    897|    umtx_initOnce(gRegionDataInitOnce, &loadRegionData, status);
  490|    897|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (490:9): [True: 0, False: 897]
  ------------------
  491|      0|        return nullptr;
  492|      0|    }
  493|       |
  494|    897|    if ( !region_code ) {
  ------------------
  |  Branch (494:10): [True: 0, False: 897]
  ------------------
  495|      0|        status = U_ILLEGAL_ARGUMENT_ERROR;
  496|      0|        return nullptr;
  497|      0|    }
  498|       |
  499|    897|    UnicodeString regionCodeString = UnicodeString(region_code, -1, US_INV);
  ------------------
  |  |   98|    897|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  500|    897|    Region* r = static_cast<Region*>(uhash_get(regionIDMap, &regionCodeString));
  ------------------
  |  | 1007|    897|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|    897|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    897|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    897|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  501|       |
  502|    897|    if ( !r ) {
  ------------------
  |  Branch (502:10): [True: 709, False: 188]
  ------------------
  503|    709|        r = static_cast<Region*>(uhash_get(regionAliases, &regionCodeString));
  ------------------
  |  | 1007|    709|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|    709|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    709|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    709|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  504|    709|    }
  505|       |
  506|    897|    if ( !r ) { // Unknown region code
  ------------------
  |  Branch (506:10): [True: 701, False: 196]
  ------------------
  507|    701|        status = U_ILLEGAL_ARGUMENT_ERROR;
  508|    701|        return nullptr;
  509|    701|    }
  510|       |
  511|    196|    if ( r->fType == URGN_DEPRECATED && r->preferredValues->size() == 1) {
  ------------------
  |  Branch (511:10): [True: 68, False: 128]
  |  Branch (511:41): [True: 0, False: 68]
  ------------------
  512|      0|        StringEnumeration *pv = r->getPreferredValues(status);
  513|      0|        pv->reset(status);
  514|      0|        const UnicodeString *ustr = pv->snext(status);
  515|      0|        r = static_cast<Region*>(uhash_get(regionIDMap, ustr));
  ------------------
  |  | 1007|      0|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  516|      0|        delete pv;
  517|      0|    }
  518|       |
  519|    196|    return r;
  520|       |
  521|    897|}
_ZNK6icu_786Region13getRegionCodeEv:
  703|    196|Region::getRegionCode() const {
  704|    196|    return id;
  705|    196|}

_ZN6icu_7814SharedCalendarC2EPNS_8CalendarE:
   24|  7.16k|    SharedCalendar(Calendar *calToAdopt) : ptr(calToAdopt) { }
_ZNK6icu_7814SharedCalendarptEv:
   27|  13.5k|    const Calendar *operator->() const { return ptr; }

_ZN6icu_7814SimpleTimeZoneC2EiRKNS_13UnicodeStringE:
   66|     19|:   BasicTimeZone(ID),
   67|     19|    startMonth(0),
   68|     19|    startDay(0),
   69|     19|    startDayOfWeek(0),
   70|     19|    startTime(0),
   71|     19|    startTimeMode(WALL_TIME),
   72|     19|    endTimeMode(WALL_TIME),
   73|     19|    endMonth(0),
   74|     19|    endDay(0),
   75|     19|    endDayOfWeek(0),
   76|     19|    endTime(0),
   77|     19|    startYear(0),
   78|     19|    rawOffset(rawOffsetGMT),
   79|     19|    useDaylight(false),
   80|     19|    startMode(DOM_MODE),
   81|     19|    endMode(DOM_MODE),
   82|     19|    dstSavings(U_MILLIS_PER_HOUR)
  ------------------
  |  |  225|     19|#define U_MILLIS_PER_HOUR       (3600000)
  ------------------
   83|     19|{
   84|     19|    clearTransitionRules();
   85|     19|}
_ZN6icu_7814SimpleTimeZoneC2EiRKNS_13UnicodeStringEaaaiNS0_8TimeModeEaaaiS4_iR10UErrorCode:
  135|     12|:   BasicTimeZone(ID)
  136|     12|{
  137|     12|    clearTransitionRules();
  138|     12|    construct(rawOffsetGMT,
  139|     12|              savingsStartMonth, savingsStartDay, savingsStartDayOfWeek,
  140|     12|              savingsStartTime, savingsStartTimeMode,
  141|     12|              savingsEndMonth, savingsEndDay, savingsEndDayOfWeek,
  142|     12|              savingsEndTime, savingsEndTimeMode,
  143|     12|              savingsDST, status);
  144|     12|}
_ZN6icu_7814SimpleTimeZone9constructEiaaaiNS0_8TimeModeEaaaiS1_iR10UErrorCode:
  162|     12|{
  163|     12|    this->rawOffset      = rawOffsetGMT;
  164|     12|    this->startMonth     = savingsStartMonth;
  165|     12|    this->startDay       = savingsStartDay;
  166|     12|    this->startDayOfWeek = savingsStartDayOfWeek;
  167|     12|    this->startTime      = savingsStartTime;
  168|     12|    this->startTimeMode  = savingsStartTimeMode;
  169|     12|    this->endMonth       = savingsEndMonth;
  170|     12|    this->endDay         = savingsEndDay;
  171|     12|    this->endDayOfWeek   = savingsEndDayOfWeek;
  172|     12|    this->endTime        = savingsEndTime;
  173|     12|    this->endTimeMode    = savingsEndTimeMode;
  174|     12|    this->dstSavings     = savingsDST;
  175|     12|    this->startYear      = 0;
  176|     12|    this->startMode      = DOM_MODE;
  177|     12|    this->endMode        = DOM_MODE;
  178|       |
  179|     12|    decodeRules(status);
  180|       |
  181|     12|    if (savingsDST == 0) {
  ------------------
  |  Branch (181:9): [True: 0, False: 12]
  ------------------
  182|      0|        status = U_ILLEGAL_ARGUMENT_ERROR;
  183|      0|    }
  184|     12|}
_ZN6icu_7814SimpleTimeZoneD2Ev:
  189|    162|{
  190|    162|    deleteTransitionRules();
  191|    162|}
_ZN6icu_7814SimpleTimeZoneC2ERKS0_:
  197|    154|:   BasicTimeZone(source)
  198|    154|{
  199|    154|    *this = source;
  200|    154|}
_ZN6icu_7814SimpleTimeZoneaSERKS0_:
  207|    154|{
  208|    154|    if (this != &right)
  ------------------
  |  Branch (208:9): [True: 154, False: 0]
  ------------------
  209|    154|    {
  210|    154|        TimeZone::operator=(right);
  211|    154|        rawOffset      = right.rawOffset;
  212|    154|        startMonth     = right.startMonth;
  213|    154|        startDay       = right.startDay;
  214|    154|        startDayOfWeek = right.startDayOfWeek;
  215|    154|        startTime      = right.startTime;
  216|    154|        startTimeMode  = right.startTimeMode;
  217|    154|        startMode      = right.startMode;
  218|    154|        endMonth       = right.endMonth;
  219|    154|        endDay         = right.endDay;
  220|    154|        endDayOfWeek   = right.endDayOfWeek;
  221|    154|        endTime        = right.endTime;
  222|    154|        endTimeMode    = right.endTimeMode;
  223|    154|        endMode        = right.endMode;
  224|    154|        startYear      = right.startYear;
  225|    154|        dstSavings     = right.dstSavings;
  226|    154|        useDaylight    = right.useDaylight;
  227|    154|        clearTransitionRules();
  228|    154|    }
  229|    154|    return *this;
  230|    154|}
_ZNK6icu_7814SimpleTimeZone5cloneEv:
  248|    154|{
  249|    154|    return new SimpleTimeZone(*this);
  250|    154|}
_ZN6icu_7814SimpleTimeZone11decodeRulesER10UErrorCode:
  840|     12|{
  841|     12|    decodeStartRule(status);
  842|     12|    decodeEndRule(status);
  843|     12|}
_ZN6icu_7814SimpleTimeZone15decodeStartRuleER10UErrorCode:
  871|     12|{
  872|     12|    if(U_FAILURE(status)) return;
  ------------------
  |  Branch (872:8): [True: 0, False: 12]
  ------------------
  873|       |
  874|     12|    useDaylight = static_cast<UBool>(startDay != 0 && endDay != 0);
  ------------------
  |  Branch (874:38): [True: 12, False: 0]
  |  Branch (874:55): [True: 12, False: 0]
  ------------------
  875|     12|    if (useDaylight && dstSavings == 0) {
  ------------------
  |  Branch (875:9): [True: 12, False: 0]
  |  Branch (875:24): [True: 0, False: 12]
  ------------------
  876|      0|        dstSavings = U_MILLIS_PER_HOUR;
  ------------------
  |  |  225|      0|#define U_MILLIS_PER_HOUR       (3600000)
  ------------------
  877|      0|    }
  878|     12|    if (startDay != 0) {
  ------------------
  |  Branch (878:9): [True: 12, False: 0]
  ------------------
  879|     12|        if (startMonth < UCAL_JANUARY || startMonth > UCAL_DECEMBER) {
  ------------------
  |  Branch (879:13): [True: 0, False: 12]
  |  Branch (879:42): [True: 0, False: 12]
  ------------------
  880|      0|            status = U_ILLEGAL_ARGUMENT_ERROR;
  881|      0|            return;
  882|      0|        }
  883|     12|        if (startTime < 0 || startTime > U_MILLIS_PER_DAY ||
  ------------------
  |  |  227|     24|#define U_MILLIS_PER_DAY       (86400000)
  ------------------
  |  Branch (883:13): [True: 0, False: 12]
  |  Branch (883:30): [True: 0, False: 12]
  ------------------
  884|     12|            startTimeMode < WALL_TIME || startTimeMode > UTC_TIME) {
  ------------------
  |  Branch (884:13): [True: 0, False: 12]
  |  Branch (884:42): [True: 0, False: 12]
  ------------------
  885|      0|            status = U_ILLEGAL_ARGUMENT_ERROR;
  886|      0|            return;
  887|      0|        }
  888|     12|        if (startDayOfWeek == 0) {
  ------------------
  |  Branch (888:13): [True: 0, False: 12]
  ------------------
  889|      0|            startMode = DOM_MODE;
  890|     12|        } else {
  891|     12|            if (startDayOfWeek > 0) {
  ------------------
  |  Branch (891:17): [True: 0, False: 12]
  ------------------
  892|      0|                startMode = DOW_IN_MONTH_MODE;
  893|     12|            } else {
  894|     12|                startDayOfWeek = static_cast<int8_t>(-startDayOfWeek);
  895|     12|                if (startDay > 0) {
  ------------------
  |  Branch (895:21): [True: 7, False: 5]
  ------------------
  896|      7|                    startMode = DOW_GE_DOM_MODE;
  897|      7|                } else {
  898|      5|                    startDay = static_cast<int8_t>(-startDay);
  899|      5|                    startMode = DOW_LE_DOM_MODE;
  900|      5|                }
  901|     12|            }
  902|     12|            if (startDayOfWeek > UCAL_SATURDAY) {
  ------------------
  |  Branch (902:17): [True: 0, False: 12]
  ------------------
  903|      0|                status = U_ILLEGAL_ARGUMENT_ERROR;
  904|      0|                return;
  905|      0|            }
  906|     12|        }
  907|     12|        if (startMode == DOW_IN_MONTH_MODE) {
  ------------------
  |  Branch (907:13): [True: 0, False: 12]
  ------------------
  908|      0|            if (startDay < -5 || startDay > 5) {
  ------------------
  |  Branch (908:17): [True: 0, False: 0]
  |  Branch (908:34): [True: 0, False: 0]
  ------------------
  909|      0|                status = U_ILLEGAL_ARGUMENT_ERROR;
  910|      0|                return;
  911|      0|            }
  912|     12|        } else if (startDay<1 || startDay > STATICMONTHLENGTH[startMonth]) {
  ------------------
  |  Branch (912:20): [True: 0, False: 12]
  |  Branch (912:34): [True: 0, False: 12]
  ------------------
  913|      0|            status = U_ILLEGAL_ARGUMENT_ERROR;
  914|      0|            return;
  915|      0|        }
  916|     12|    }
  917|     12|}
_ZN6icu_7814SimpleTimeZone13decodeEndRuleER10UErrorCode:
  926|     12|{
  927|     12|    if(U_FAILURE(status)) return;
  ------------------
  |  Branch (927:8): [True: 0, False: 12]
  ------------------
  928|       |
  929|     12|    useDaylight = static_cast<UBool>(startDay != 0 && endDay != 0);
  ------------------
  |  Branch (929:38): [True: 12, False: 0]
  |  Branch (929:55): [True: 12, False: 0]
  ------------------
  930|     12|    if (useDaylight && dstSavings == 0) {
  ------------------
  |  Branch (930:9): [True: 12, False: 0]
  |  Branch (930:24): [True: 0, False: 12]
  ------------------
  931|      0|        dstSavings = U_MILLIS_PER_HOUR;
  ------------------
  |  |  225|      0|#define U_MILLIS_PER_HOUR       (3600000)
  ------------------
  932|      0|    }
  933|     12|    if (endDay != 0) {
  ------------------
  |  Branch (933:9): [True: 12, False: 0]
  ------------------
  934|     12|        if (endMonth < UCAL_JANUARY || endMonth > UCAL_DECEMBER) {
  ------------------
  |  Branch (934:13): [True: 0, False: 12]
  |  Branch (934:40): [True: 0, False: 12]
  ------------------
  935|      0|            status = U_ILLEGAL_ARGUMENT_ERROR;
  936|      0|            return;
  937|      0|        }
  938|     12|        if (endTime < 0 || endTime > U_MILLIS_PER_DAY ||
  ------------------
  |  |  227|     24|#define U_MILLIS_PER_DAY       (86400000)
  ------------------
  |  Branch (938:13): [True: 0, False: 12]
  |  Branch (938:28): [True: 0, False: 12]
  ------------------
  939|     12|            endTimeMode < WALL_TIME || endTimeMode > UTC_TIME) {
  ------------------
  |  Branch (939:13): [True: 0, False: 12]
  |  Branch (939:40): [True: 0, False: 12]
  ------------------
  940|      0|            status = U_ILLEGAL_ARGUMENT_ERROR;
  941|      0|            return;
  942|      0|        }
  943|     12|        if (endDayOfWeek == 0) {
  ------------------
  |  Branch (943:13): [True: 0, False: 12]
  ------------------
  944|      0|            endMode = DOM_MODE;
  945|     12|        } else {
  946|     12|            if (endDayOfWeek > 0) {
  ------------------
  |  Branch (946:17): [True: 0, False: 12]
  ------------------
  947|      0|                endMode = DOW_IN_MONTH_MODE;
  948|     12|            } else {
  949|     12|                endDayOfWeek = static_cast<int8_t>(-endDayOfWeek);
  950|     12|                if (endDay > 0) {
  ------------------
  |  Branch (950:21): [True: 7, False: 5]
  ------------------
  951|      7|                    endMode = DOW_GE_DOM_MODE;
  952|      7|                } else {
  953|      5|                    endDay = static_cast<int8_t>(-endDay);
  954|      5|                    endMode = DOW_LE_DOM_MODE;
  955|      5|                }
  956|     12|            }
  957|     12|            if (endDayOfWeek > UCAL_SATURDAY) {
  ------------------
  |  Branch (957:17): [True: 0, False: 12]
  ------------------
  958|      0|                status = U_ILLEGAL_ARGUMENT_ERROR;
  959|      0|                return;
  960|      0|            }
  961|     12|        }
  962|     12|        if (endMode == DOW_IN_MONTH_MODE) {
  ------------------
  |  Branch (962:13): [True: 0, False: 12]
  ------------------
  963|      0|            if (endDay < -5 || endDay > 5) {
  ------------------
  |  Branch (963:17): [True: 0, False: 0]
  |  Branch (963:32): [True: 0, False: 0]
  ------------------
  964|      0|                status = U_ILLEGAL_ARGUMENT_ERROR;
  965|      0|                return;
  966|      0|            }
  967|     12|        } else if (endDay<1 || endDay > STATICMONTHLENGTH[endMonth]) {
  ------------------
  |  Branch (967:20): [True: 0, False: 12]
  |  Branch (967:32): [True: 0, False: 12]
  ------------------
  968|      0|            status = U_ILLEGAL_ARGUMENT_ERROR;
  969|      0|            return;
  970|      0|        }
  971|     12|    }
  972|     12|}
_ZN6icu_7814SimpleTimeZone20clearTransitionRulesEv:
 1043|    347|SimpleTimeZone::clearTransitionRules() {
 1044|    347|    initialRule = nullptr;
 1045|    347|    firstTransition = nullptr;
 1046|    347|    stdRule = nullptr;
 1047|    347|    dstRule = nullptr;
 1048|    347|    transitionRulesInitialized = false;
 1049|    347|}
_ZN6icu_7814SimpleTimeZone21deleteTransitionRulesEv:
 1052|    162|SimpleTimeZone::deleteTransitionRules() {
 1053|    162|    delete initialRule;
 1054|    162|    delete firstTransition;
 1055|    162|    delete stdRule;
 1056|    162|    delete dstRule;
 1057|    162|    clearTransitionRules();
 1058|    162| }

_ZN6icu_7814TaiwanCalendarC2ERKNS_6LocaleER10UErrorCode:
   37|      5|:   GregorianCalendar(aLocale, success)
   38|      5|{
   39|      5|}
_ZN6icu_7814TaiwanCalendarD2Ev:
   42|      5|{
   43|      5|}
_ZNK6icu_7814TaiwanCalendar7getTypeEv:
   56|      8|{
   57|      8|    return "roc";
   58|      8|}

_ZN6icu_788TimeZone8loadRuleEPK15UResourceBundleRKNS_13UnicodeStringEPS1_R10UErrorCode:
  259|     12|UResourceBundle* TimeZone::loadRule(const UResourceBundle* top, const UnicodeString& ruleid, UResourceBundle* oldbundle, UErrorCode& status) {
  260|     12|    char key[64];
  261|     12|    ruleid.extract(0, sizeof(key) - 1, key, static_cast<int32_t>(sizeof(key)) - 1, US_INV);
  ------------------
  |  |   98|     12|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  262|     12|    U_DEBUG_TZ_MSG(("loadRule(%s)\n", key));
  263|     12|    UResourceBundle *r = ures_getByKey(top, kRULES, oldbundle, &status);
  ------------------
  |  | 1661|     12|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     12|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     12|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     12|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  UResourceBundle *r = ures_getByKey(top, kRULES, oldbundle, &status);
  ------------------
  |  |   95|     12|#define kRULES    "Rules"
  ------------------
  264|     12|    U_DEBUG_TZ_MSG(("loadRule(%s) -> kRULES [%s]\n", key, u_errorName(status)));
  265|     12|    r = ures_getByKey(r, key, r, &status);
  ------------------
  |  | 1661|     12|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     12|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     12|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     12|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  266|     12|    U_DEBUG_TZ_MSG(("loadRule(%s) -> item [%s]\n", key, u_errorName(status)));
  267|     12|    return r;
  268|     12|}
_ZN6icu_788TimeZone10getUnknownEv:
  326|    154|{
  327|    154|    umtx_initOnce(gStaticZonesInitOnce, &initStaticTimeZones);
  328|    154|    return *reinterpret_cast<SimpleTimeZone*>(gRawUNKNOWN);
  329|    154|}
_ZN6icu_788TimeZoneC2ERKNS_13UnicodeStringE:
  352|     67|    :   UObject(), fID(id)
  353|     67|{
  354|     67|}
_ZN6icu_788TimeZoneD2Ev:
  359|  6.17k|{
  360|  6.17k|}
_ZN6icu_788TimeZoneC2ERKS0_:
  365|  7.11k|    :   UObject(source), fID(source.fID)
  366|  7.11k|{
  367|  7.11k|}
_ZN6icu_788TimeZoneaSERKS0_:
  373|    154|{
  374|    154|    if (this != &right) fID = right.fID;
  ------------------
  |  Branch (374:9): [True: 154, False: 0]
  ------------------
  375|    154|    return *this;
  376|    154|}
_ZN6icu_788TimeZone14createTimeZoneERKNS_13UnicodeStringE:
  431|    206|{
  432|       |    /* We first try to lookup the zone ID in our system list.  If this
  433|       |     * fails, we try to parse it as a custom string GMT[+-]hh:mm.  If
  434|       |     * all else fails, we return GMT, which is probably not what the
  435|       |     * user wants, but at least is a functioning TimeZone object.
  436|       |     *
  437|       |     * We cannot return nullptr, because that would break compatibility
  438|       |     * with the JDK.
  439|       |     */
  440|    206|    TimeZone* result = createSystemTimeZone(ID);
  441|       |
  442|    206|    if (result == nullptr) {
  ------------------
  |  Branch (442:9): [True: 171, False: 35]
  ------------------
  443|    171|        U_DEBUG_TZ_MSG(("failed to load system time zone with id - falling to custom"));
  444|    171|        result = createCustomTimeZone(ID);
  445|    171|    }
  446|    206|    if (result == nullptr) {
  ------------------
  |  Branch (446:9): [True: 154, False: 52]
  ------------------
  447|    154|        U_DEBUG_TZ_MSG(("failed to load time zone with id - falling to Etc/Unknown(GMT)"));
  448|    154|        const TimeZone& unknown = getUnknown();
  449|       |        // Unknown zone uses statically allocated memory, so creation of it can never fail due to OOM.
  450|    154|        result = unknown.clone();
  451|    154|    }
  452|    206|    return result;
  453|    206|}
_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|  6.95k|{
  574|  6.95k|    umtx_initOnce(gDefaultZoneInitOnce, initDefault);
  575|  6.95k|    {
  576|  6.95k|        Mutex lock(&gDefaultZoneMutex);
  577|  6.95k|        return (DEFAULT_ZONE != nullptr) ? DEFAULT_ZONE->clone() : nullptr;
  ------------------
  |  Branch (577:16): [True: 6.95k, False: 0]
  ------------------
  578|  6.95k|    }
  579|  6.95k|}
_ZN6icu_788TimeZone18forLocaleOrDefaultERKNS_6LocaleE:
  585|  7.16k|{
  586|  7.16k|    char buffer[ULOC_KEYWORDS_CAPACITY] = "";
  587|  7.16k|    UErrorCode localStatus = U_ZERO_ERROR;
  588|  7.16k|    int32_t count = locale.getKeywordValue("timezone", buffer, sizeof(buffer), localStatus);
  589|  7.16k|    if (U_FAILURE(localStatus) || localStatus == U_STRING_NOT_TERMINATED_WARNING) {
  ------------------
  |  Branch (589:9): [True: 14, False: 7.15k]
  |  Branch (589:35): [True: 1, False: 7.15k]
  ------------------
  590|       |        // the "timezone" keyword exceeds ULOC_KEYWORDS_CAPACITY; ignore and use default.
  591|     15|        count = 0;
  592|     15|    }
  593|  7.16k|    if (count > 0) {
  ------------------
  |  Branch (593:9): [True: 206, False: 6.95k]
  ------------------
  594|    206|        return TimeZone::createTimeZone(UnicodeString(buffer, count, US_INV));
  ------------------
  |  |   98|    206|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  595|    206|    }
  596|  6.95k|    return TimeZone::createDefault();
  597|  7.16k|}
_ZN6icu_788TimeZone6findIDERKNS_13UnicodeStringE:
 1097|     39|TimeZone::findID(const UnicodeString& id) {
 1098|     39|    const char16_t *result = nullptr;
 1099|     39|    UErrorCode ec = U_ZERO_ERROR;
 1100|     39|    UResourceBundle *rb = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  | 1693|     39|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  UResourceBundle *rb = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  |   92|     39|#define kZONEINFO "zoneinfo64"
  ------------------
 1101|       |
 1102|       |    // resolve zone index by name
 1103|     39|    UResourceBundle *names = ures_getByKey(rb, kNAMES, nullptr, &ec);
  ------------------
  |  | 1661|     39|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  UResourceBundle *names = ures_getByKey(rb, kNAMES, nullptr, &ec);
  ------------------
  |  |   96|     39|#define kNAMES    "Names"
  ------------------
 1104|     39|    int32_t idx = findInStringArray(names, id, ec);
 1105|     39|    result = ures_getStringByIndex(names, idx, nullptr, &ec);
  ------------------
  |  | 1676|     39|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1106|     39|    if (U_FAILURE(ec)) {
  ------------------
  |  Branch (1106:9): [True: 0, False: 39]
  ------------------
 1107|      0|        result = nullptr;
 1108|      0|    }
 1109|     39|    ures_close(names);
  ------------------
  |  | 1652|     39|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1110|     39|    ures_close(rb);
  ------------------
  |  | 1652|     39|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1111|     39|    return result;
 1112|     39|}
_ZN6icu_788TimeZone16dereferOlsonLinkERKNS_13UnicodeStringE:
 1116|     11|TimeZone::dereferOlsonLink(const UnicodeString& id) {
 1117|     11|    const char16_t *result = nullptr;
 1118|     11|    UErrorCode ec = U_ZERO_ERROR;
 1119|     11|    UResourceBundle *rb = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  | 1693|     11|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  UResourceBundle *rb = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  |   92|     11|#define kZONEINFO "zoneinfo64"
  ------------------
 1120|       |
 1121|       |    // resolve zone index by name
 1122|     11|    UResourceBundle *names = ures_getByKey(rb, kNAMES, nullptr, &ec);
  ------------------
  |  | 1661|     11|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  UResourceBundle *names = ures_getByKey(rb, kNAMES, nullptr, &ec);
  ------------------
  |  |   96|     11|#define kNAMES    "Names"
  ------------------
 1123|     11|    int32_t idx = findInStringArray(names, id, ec);
 1124|     11|    result = ures_getStringByIndex(names, idx, nullptr, &ec);
  ------------------
  |  | 1676|     11|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1125|       |
 1126|       |    // open the zone bundle by index
 1127|     11|    ures_getByKey(rb, kZONES, rb, &ec);
  ------------------
  |  | 1661|     11|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  ures_getByKey(rb, kZONES, rb, &ec);
  ------------------
  |  |   94|     11|#define kZONES    "Zones"
  ------------------
 1128|     11|    ures_getByIndex(rb, idx, rb, &ec); 
  ------------------
  |  | 1660|     11|#define ures_getByIndex U_ICU_ENTRY_POINT_RENAME(ures_getByIndex)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1129|       |
 1130|     11|    if (U_SUCCESS(ec)) {
  ------------------
  |  Branch (1130:9): [True: 11, False: 0]
  ------------------
 1131|     11|        if (ures_getType(rb) == URES_INT) {
  ------------------
  |  | 1679|     11|#define ures_getType U_ICU_ENTRY_POINT_RENAME(ures_getType)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1131:13): [True: 11, False: 0]
  ------------------
 1132|       |            // this is a link - dereference the link
 1133|     11|            int32_t deref = ures_getInt(rb, &ec);
  ------------------
  |  | 1664|     11|#define ures_getInt U_ICU_ENTRY_POINT_RENAME(ures_getInt)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1134|     11|            const char16_t* tmp = ures_getStringByIndex(names, deref, nullptr, &ec);
  ------------------
  |  | 1676|     11|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1135|     11|            if (U_SUCCESS(ec)) {
  ------------------
  |  Branch (1135:17): [True: 11, False: 0]
  ------------------
 1136|     11|                result = tmp;
 1137|     11|            }
 1138|     11|        }
 1139|     11|    }
 1140|       |
 1141|     11|    ures_close(names);
  ------------------
  |  | 1652|     11|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1142|     11|    ures_close(rb);
  ------------------
  |  | 1652|     11|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1143|       |
 1144|     11|    return result;
 1145|     11|}
_ZN6icu_788TimeZone20createCustomTimeZoneERKNS_13UnicodeStringE:
 1344|    171|{
 1345|    171|    int32_t sign, hour, min, sec;
 1346|    171|    if (parseCustomID(id, sign, hour, min, sec)) {
  ------------------
  |  Branch (1346:9): [True: 17, False: 154]
  ------------------
 1347|     17|        UnicodeString customID;
 1348|     17|        formatCustomID(hour, min, sec, (sign < 0), customID);
 1349|     17|        int32_t offset = sign * ((hour * 60 + min) * 60 + sec) * 1000;
 1350|     17|        return new SimpleTimeZone(offset, customID);
 1351|     17|    }
 1352|    154|    return nullptr;
 1353|    171|}
_ZN6icu_788TimeZone13parseCustomIDERKNS_13UnicodeStringERiS4_S4_S4_:
 1372|    171|                        int32_t& hour, int32_t& min, int32_t& sec) {
 1373|    171|    if (id.length() < GMT_ID_LENGTH) {
  ------------------
  |  Branch (1373:9): [True: 6, False: 165]
  ------------------
 1374|      6|      return false;
 1375|      6|    }
 1376|    165|    if (0 != u_strncasecmp(id.getBuffer(), GMT_ID, GMT_ID_LENGTH, 0)) {
  ------------------
  |  |  394|    165|#define u_strncasecmp U_ICU_ENTRY_POINT_RENAME(u_strncasecmp)
  |  |  ------------------
  |  |  |  |  123|    165|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    165|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    165|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1376:9): [True: 65, False: 100]
  ------------------
 1377|     65|        return false;
 1378|     65|    }
 1379|    100|    sign = 1;
 1380|    100|    hour = 0;
 1381|    100|    min = 0;
 1382|    100|    sec = 0;
 1383|       |
 1384|    100|    if (id[GMT_ID_LENGTH] == MINUS /*'-'*/) {
  ------------------
  |  |  102|    100|#define MINUS 0x002D
  ------------------
  |  Branch (1384:9): [True: 90, False: 10]
  ------------------
 1385|     90|        sign = -1;
 1386|     90|    } else if (id[GMT_ID_LENGTH] != PLUS /*'+'*/) {
  ------------------
  |  |  103|     10|#define PLUS 0x002B
  ------------------
  |  Branch (1386:16): [True: 4, False: 6]
  ------------------
 1387|      4|        return false;
 1388|      4|    }
 1389|       |
 1390|     96|    int32_t start = GMT_ID_LENGTH + 1;
 1391|     96|    int32_t pos = start;
 1392|     96|    hour = ICU_Utility::parseNumber(id, pos, 10);
 1393|     96|    if (pos == id.length()) {
  ------------------
  |  Branch (1393:9): [True: 67, False: 29]
  ------------------
 1394|       |        // Handle the following cases
 1395|       |        // HHmmss
 1396|       |        // Hmmss
 1397|       |        // HHmm
 1398|       |        // Hmm
 1399|       |        // HH
 1400|       |        // H
 1401|       |
 1402|       |        // Get all digits
 1403|       |        // Should be 1 to 6 digits.
 1404|     67|        int32_t length = pos - start;
 1405|     67|        switch (length) {
 1406|      1|            case 1:  // H
  ------------------
  |  Branch (1406:13): [True: 1, False: 66]
  ------------------
 1407|     10|            case 2:  // HH
  ------------------
  |  Branch (1407:13): [True: 9, False: 58]
  ------------------
 1408|       |                // already set to hour
 1409|     10|                break;
 1410|     10|            case 3:  // Hmm
  ------------------
  |  Branch (1410:13): [True: 10, False: 57]
  ------------------
 1411|     13|            case 4:  // HHmm
  ------------------
  |  Branch (1411:13): [True: 3, False: 64]
  ------------------
 1412|     13|                min = hour % 100;
 1413|     13|                hour /= 100;
 1414|     13|                break;
 1415|      5|            case 5:  // Hmmss
  ------------------
  |  Branch (1415:13): [True: 5, False: 62]
  ------------------
 1416|      7|            case 6:  // HHmmss
  ------------------
  |  Branch (1416:13): [True: 2, False: 65]
  ------------------
 1417|      7|                sec = hour % 100;
 1418|      7|                min = (hour/100) % 100;
 1419|      7|                hour /= 10000;
 1420|      7|                break;
 1421|     37|            default:
  ------------------
  |  Branch (1421:13): [True: 37, False: 30]
  ------------------
 1422|       |                // invalid range
 1423|     37|                return false;
 1424|     67|        }
 1425|     67|    } else {
 1426|       |        // Handle the following cases
 1427|       |        // HH:mm:ss
 1428|       |        // H:mm:ss
 1429|       |        // HH:mm
 1430|       |        // H:mm
 1431|     29|        if (pos - start < 1 || pos - start > 2 || id[pos] != COLON) {
  ------------------
  |  |  105|      7|#define COLON 0x003A
  ------------------
  |  Branch (1431:13): [True: 18, False: 11]
  |  Branch (1431:32): [True: 4, False: 7]
  |  Branch (1431:51): [True: 7, False: 0]
  ------------------
 1432|     29|            return false;
 1433|     29|        }
 1434|      0|        pos++; // skip : after H or HH
 1435|      0|        if (id.length() == pos) {
  ------------------
  |  Branch (1435:13): [True: 0, False: 0]
  ------------------
 1436|      0|            return false;
 1437|      0|        }
 1438|      0|        start = pos;
 1439|      0|        min = ICU_Utility::parseNumber(id, pos, 10);
 1440|      0|        if (pos - start != 2) {
  ------------------
  |  Branch (1440:13): [True: 0, False: 0]
  ------------------
 1441|      0|            return false;
 1442|      0|        }
 1443|      0|        if (id.length() > pos) {
  ------------------
  |  Branch (1443:13): [True: 0, False: 0]
  ------------------
 1444|      0|            if (id[pos] != COLON) {
  ------------------
  |  |  105|      0|#define COLON 0x003A
  ------------------
  |  Branch (1444:17): [True: 0, False: 0]
  ------------------
 1445|      0|                return false;
 1446|      0|            }
 1447|      0|            pos++; // skip : after mm
 1448|      0|            start = pos;
 1449|      0|            sec = ICU_Utility::parseNumber(id, pos, 10);
 1450|      0|            if (pos - start != 2 || id.length() > pos) {
  ------------------
  |  Branch (1450:17): [True: 0, False: 0]
  |  Branch (1450:37): [True: 0, False: 0]
  ------------------
 1451|      0|                return false;
 1452|      0|            }
 1453|      0|        }
 1454|      0|    }
 1455|     30|    if (hour > kMAX_CUSTOM_HOUR ||
  ------------------
  |  |   99|     60|#define kMAX_CUSTOM_HOUR    23
  ------------------
  |  Branch (1455:9): [True: 8, False: 22]
  ------------------
 1456|     30|        min > kMAX_CUSTOM_MIN ||
  ------------------
  |  |  100|     52|#define kMAX_CUSTOM_MIN     59
  ------------------
  |  Branch (1456:9): [True: 3, False: 19]
  ------------------
 1457|     30|        sec > kMAX_CUSTOM_SEC) {
  ------------------
  |  |  101|     19|#define kMAX_CUSTOM_SEC     59
  ------------------
  |  Branch (1457:9): [True: 2, False: 17]
  ------------------
 1458|     13|        return false;
 1459|     13|    }
 1460|     17|    return true;
 1461|     30|}
_ZN6icu_788TimeZone14formatCustomIDEiiiaRNS_13UnicodeStringE:
 1465|     17|                         UBool negative, UnicodeString& id) {
 1466|       |    // Create time zone ID - GMT[+|-]hhmm[ss]
 1467|     17|    id.setTo(GMT_ID, GMT_ID_LENGTH);
 1468|     17|    if (hour | min | sec) {
  ------------------
  |  Branch (1468:9): [True: 16, False: 1]
  ------------------
 1469|     16|        if (negative) {
  ------------------
  |  Branch (1469:13): [True: 15, False: 1]
  ------------------
 1470|     15|            id += static_cast<char16_t>(MINUS);
  ------------------
  |  |  102|     15|#define MINUS 0x002D
  ------------------
 1471|     15|        } else {
 1472|      1|            id += static_cast<char16_t>(PLUS);
  ------------------
  |  |  103|      1|#define PLUS 0x002B
  ------------------
 1473|      1|        }
 1474|       |
 1475|     16|        if (hour < 10) {
  ------------------
  |  Branch (1475:13): [True: 14, False: 2]
  ------------------
 1476|     14|            id += static_cast<char16_t>(ZERO_DIGIT);
  ------------------
  |  |  104|     14|#define ZERO_DIGIT 0x0030
  ------------------
 1477|     14|        } else {
 1478|      2|            id += static_cast<char16_t>(ZERO_DIGIT + hour / 10);
  ------------------
  |  |  104|      2|#define ZERO_DIGIT 0x0030
  ------------------
 1479|      2|        }
 1480|     16|        id += static_cast<char16_t>(ZERO_DIGIT + hour % 10);
  ------------------
  |  |  104|     16|#define ZERO_DIGIT 0x0030
  ------------------
 1481|     16|        id += static_cast<char16_t>(COLON);
  ------------------
  |  |  105|     16|#define COLON 0x003A
  ------------------
 1482|     16|        if (min < 10) {
  ------------------
  |  Branch (1482:13): [True: 9, False: 7]
  ------------------
 1483|      9|            id += static_cast<char16_t>(ZERO_DIGIT);
  ------------------
  |  |  104|      9|#define ZERO_DIGIT 0x0030
  ------------------
 1484|      9|        } else {
 1485|      7|            id += static_cast<char16_t>(ZERO_DIGIT + min / 10);
  ------------------
  |  |  104|      7|#define ZERO_DIGIT 0x0030
  ------------------
 1486|      7|        }
 1487|     16|        id += static_cast<char16_t>(ZERO_DIGIT + min % 10);
  ------------------
  |  |  104|     16|#define ZERO_DIGIT 0x0030
  ------------------
 1488|       |
 1489|     16|        if (sec) {
  ------------------
  |  Branch (1489:13): [True: 3, False: 13]
  ------------------
 1490|      3|            id += static_cast<char16_t>(COLON);
  ------------------
  |  |  105|      3|#define COLON 0x003A
  ------------------
 1491|      3|            if (sec < 10) {
  ------------------
  |  Branch (1491:17): [True: 1, False: 2]
  ------------------
 1492|      1|                id += static_cast<char16_t>(ZERO_DIGIT);
  ------------------
  |  |  104|      1|#define ZERO_DIGIT 0x0030
  ------------------
 1493|      2|            } else {
 1494|      2|                id += static_cast<char16_t>(ZERO_DIGIT + sec / 10);
  ------------------
  |  |  104|      2|#define ZERO_DIGIT 0x0030
  ------------------
 1495|      2|            }
 1496|      3|            id += static_cast<char16_t>(ZERO_DIGIT + sec % 10);
  ------------------
  |  |  104|      3|#define ZERO_DIGIT 0x0030
  ------------------
 1497|      3|        }
 1498|     16|    }
 1499|     17|    return id;
 1500|     17|}
timezone.cpp:_ZN6icu_7812_GLOBAL__N_119initStaticTimeZonesEv:
  310|      1|void U_CALLCONV initStaticTimeZones() {
  311|       |    // Initialize _GMT independently of other static data; it should
  312|       |    // be valid even if we can't load the time zone UDataMemory.
  313|      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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  314|       |
  315|       |    // new can't fail below, as we use placement new into statically allocated space.
  316|      1|    new(gRawGMT) SimpleTimeZone(0, UnicodeString(true, GMT_ID, GMT_ID_LENGTH));
  317|      1|    new(gRawUNKNOWN) SimpleTimeZone(0, UnicodeString(true, UNKNOWN_ZONE_ID, UNKNOWN_ZONE_ID_LENGTH));
  318|       |
  319|      1|    gStaticZonesInitialized = true;
  320|      1|}
timezone.cpp:_ZN6icu_7812_GLOBAL__N_120createSystemTimeZoneERKNS_13UnicodeStringE:
  422|    207|createSystemTimeZone(const UnicodeString& id) {
  423|    207|    UErrorCode ec = U_ZERO_ERROR;
  424|    207|    return createSystemTimeZone(id, ec);
  425|    207|}
timezone.cpp:_ZN6icu_7812_GLOBAL__N_120createSystemTimeZoneERKNS_13UnicodeStringER10UErrorCode:
  391|    207|createSystemTimeZone(const UnicodeString& id, UErrorCode& ec) {
  392|    207|    if (U_FAILURE(ec)) {
  ------------------
  |  Branch (392:9): [True: 0, False: 207]
  ------------------
  393|      0|        return nullptr;
  394|      0|    }
  395|    207|    TimeZone* z = nullptr;
  396|    207|    StackUResourceBundle res;
  397|    207|    U_DEBUG_TZ_MSG(("pre-err=%s\n", u_errorName(ec)));
  398|    207|    UResourceBundle *top = openOlsonResource(id, res.ref(), ec);
  399|    207|    U_DEBUG_TZ_MSG(("post-err=%s\n", u_errorName(ec)));
  400|    207|    if (U_SUCCESS(ec)) {
  ------------------
  |  Branch (400:9): [True: 36, False: 171]
  ------------------
  401|     36|        z = new OlsonTimeZone(top, res.getAlias(), id, ec);
  402|     36|        if (z == nullptr) {
  ------------------
  |  Branch (402:13): [True: 0, False: 36]
  ------------------
  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|     36|    }
  407|    207|    ures_close(top);
  ------------------
  |  | 1652|    207|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|    207|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    207|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    207|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  408|    207|    if (U_FAILURE(ec)) {
  ------------------
  |  Branch (408:9): [True: 171, False: 36]
  ------------------
  409|    171|        U_DEBUG_TZ_MSG(("cstz: failed to create, err %s\n", u_errorName(ec)));
  410|    171|        delete z;
  411|    171|        z = nullptr;
  412|    171|    }
  413|    207|    return z;
  414|    207|}
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|}
timezone.cpp:_ZN6icu_78L17openOlsonResourceERKNS_13UnicodeStringER15UResourceBundleR10UErrorCode:
  281|    207|{
  282|       |#ifdef U_DEBUG_TZ
  283|       |    char buf[128];
  284|       |    id.extract(0, sizeof(buf)-1, buf, sizeof(buf), "");
  285|       |#endif
  286|    207|    UResourceBundle *top = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  | 1693|    207|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|    207|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    207|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    207|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  UResourceBundle *top = ures_openDirect(nullptr, kZONEINFO, &ec);
  ------------------
  |  |   92|    207|#define kZONEINFO "zoneinfo64"
  ------------------
  287|    207|    U_DEBUG_TZ_MSG(("pre: res sz=%d\n", ures_getSize(&res)));
  288|    207|    /* &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|    207|    U_DEBUG_TZ_MSG(("Loading zone '%s' (%s, size %d) - %s\n", buf, ures_getKey((UResourceBundle*)&res), ures_getSize(&res), u_errorName(ec)));
  292|    207|    if (ures_getType(&res) == URES_INT) {
  ------------------
  |  | 1679|    207|#define ures_getType U_ICU_ENTRY_POINT_RENAME(ures_getType)
  |  |  ------------------
  |  |  |  |  123|    207|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    207|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    207|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (292:9): [True: 19, False: 188]
  ------------------
  293|     19|        int32_t deref = ures_getInt(&res, &ec) + 0;
  ------------------
  |  | 1664|     19|#define ures_getInt U_ICU_ENTRY_POINT_RENAME(ures_getInt)
  |  |  ------------------
  |  |  |  |  123|     19|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     19|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     19|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  294|     19|        U_DEBUG_TZ_MSG(("getInt: %s - type is %d\n", u_errorName(ec), ures_getType(&res)));
  295|     19|        UResourceBundle *ares = ures_getByKey(top, kZONES, nullptr, &ec); // dereference Zones section
  ------------------
  |  | 1661|     19|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     19|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     19|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     19|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      UResourceBundle *ares = ures_getByKey(top, kZONES, nullptr, &ec); // dereference Zones section
  ------------------
  |  |   94|     19|#define kZONES    "Zones"
  ------------------
  296|     19|        ures_getByIndex(ares, deref, &res, &ec);
  ------------------
  |  | 1660|     19|#define ures_getByIndex U_ICU_ENTRY_POINT_RENAME(ures_getByIndex)
  |  |  ------------------
  |  |  |  |  123|     19|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     19|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     19|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|     19|        ures_close(ares);
  ------------------
  |  | 1652|     19|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|     19|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     19|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     19|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  298|     19|        U_DEBUG_TZ_MSG(("alias to #%d (%s) - %s\n", deref, "??", u_errorName(ec)));
  299|    188|    } else {
  300|    188|        U_DEBUG_TZ_MSG(("not an alias - size %d\n", ures_getSize(&res)));
  301|    188|    }
  302|    207|    U_DEBUG_TZ_MSG(("%s - final status is %s\n", buf, u_errorName(ec)));
  303|    207|    return top;
  304|    207|}
timezone.cpp:_ZN6icu_78L13getZoneByNameEPK15UResourceBundleRKNS_13UnicodeStringEPS0_R10UErrorCode:
  230|    207|static UResourceBundle* getZoneByName(const UResourceBundle* top, const UnicodeString& id, UResourceBundle *oldbundle, UErrorCode& status) {
  231|       |    // load the Rules object
  232|    207|    UResourceBundle *tmp = ures_getByKey(top, kNAMES, nullptr, &status);
  ------------------
  |  | 1661|    207|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|    207|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    207|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    207|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  UResourceBundle *tmp = ures_getByKey(top, kNAMES, nullptr, &status);
  ------------------
  |  |   96|    207|#define kNAMES    "Names"
  ------------------
  233|       |
  234|       |    // search for the string
  235|    207|    int32_t idx = findInStringArray(tmp, id, status);
  236|       |
  237|    207|    if((idx == -1) && U_SUCCESS(status)) {
  ------------------
  |  Branch (237:8): [True: 171, False: 36]
  |  Branch (237:23): [True: 171, False: 0]
  ------------------
  238|       |        // not found
  239|    171|        status = U_MISSING_RESOURCE_ERROR;
  240|       |        //ures_close(oldbundle);
  241|       |        //oldbundle = nullptr;
  242|    171|    } else {
  243|     36|        U_DEBUG_TZ_MSG(("gzbn: oldbundle= size %d, type %d, %s\n", ures_getSize(tmp), ures_getType(tmp), u_errorName(status)));
  244|     36|        tmp = ures_getByKey(top, kZONES, tmp, &status); // get Zones object from top
  ------------------
  |  | 1661|     36|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      tmp = ures_getByKey(top, kZONES, tmp, &status); // get Zones object from top
  ------------------
  |  |   94|     36|#define kZONES    "Zones"
  ------------------
  245|     36|        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|     36|        oldbundle = ures_getByIndex(tmp, idx, oldbundle, &status); // get nth Zone object
  ------------------
  |  | 1660|     36|#define ures_getByIndex U_ICU_ENTRY_POINT_RENAME(ures_getByIndex)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  247|     36|        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|     36|    }
  249|    207|    ures_close(tmp);
  ------------------
  |  | 1652|    207|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|    207|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    207|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    207|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    207|    if(U_FAILURE(status)) {
  ------------------
  |  Branch (250:8): [True: 171, False: 36]
  ------------------
  251|       |        //ures_close(oldbundle);
  252|    171|        return nullptr;
  253|    171|    } else {
  254|     36|        return oldbundle;
  255|     36|    }
  256|    207|}
timezone.cpp:_ZN6icu_78L17findInStringArrayEP15UResourceBundleRKNS_13UnicodeStringER10UErrorCode:
  183|    257|{
  184|    257|    UnicodeString copy;
  185|    257|    const char16_t *u;
  186|    257|    int32_t len;
  187|       |
  188|    257|    int32_t start = 0;
  189|    257|    int32_t limit = ures_getSize(array);
  ------------------
  |  | 1674|    257|#define ures_getSize U_ICU_ENTRY_POINT_RENAME(ures_getSize)
  |  |  ------------------
  |  |  |  |  123|    257|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|    257|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|    257|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|    257|    int32_t mid;
  191|    257|    int32_t lastMid = INT32_MAX;
  192|    257|    if(U_FAILURE(status) || (limit < 1)) {
  ------------------
  |  Branch (192:8): [True: 0, False: 257]
  |  Branch (192:29): [True: 0, False: 257]
  ------------------
  193|      0|        return -1;
  194|      0|    }
  195|    257|    U_DEBUG_TZ_MSG(("fisa: Looking for %s, between %d and %d\n", U_DEBUG_TZ_STR(UnicodeString(id).getTerminatedBuffer()), start, limit));
  196|       |
  197|  2.62k|    for (;;) {
  198|  2.62k|        mid = static_cast<int32_t>((start + limit) / 2);
  199|  2.62k|        if (lastMid == mid) {   /* Have we moved? */
  ------------------
  |  Branch (199:13): [True: 171, False: 2.45k]
  ------------------
  200|    171|            break;  /* We haven't moved, and it wasn't found. */
  201|    171|        }
  202|  2.45k|        lastMid = mid;
  203|  2.45k|        u = ures_getStringByIndex(array, mid, &len, &status);
  ------------------
  |  | 1676|  2.45k|#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex)
  |  |  ------------------
  |  |  |  |  123|  2.45k|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|  2.45k|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|  2.45k|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  204|  2.45k|        if (U_FAILURE(status)) {
  ------------------
  |  Branch (204:13): [True: 0, False: 2.45k]
  ------------------
  205|      0|            break;
  206|      0|        }
  207|  2.45k|        U_DEBUG_TZ_MSG(("tz: compare to %s, %d .. [%d] .. %d\n", U_DEBUG_TZ_STR(u), start, mid, limit));
  208|  2.45k|        copy.setTo(true, u, len);
  209|  2.45k|        int r = id.compare(copy);
  210|  2.45k|        if(r==0) {
  ------------------
  |  Branch (210:12): [True: 86, False: 2.37k]
  ------------------
  211|     86|            U_DEBUG_TZ_MSG(("fisa: found at %d\n", mid));
  212|     86|            return mid;
  213|  2.37k|        } else if(r<0) {
  ------------------
  |  Branch (213:19): [True: 579, False: 1.79k]
  ------------------
  214|    579|            limit = mid;
  215|  1.79k|        } else {
  216|  1.79k|            start = mid;
  217|  1.79k|        }
  218|  2.45k|    }
  219|    171|    U_DEBUG_TZ_MSG(("fisa: not found\n"));
  220|    171|    return -1;
  221|    257|}

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

_ZNK6icu_7820DecimalFormatSymbols9getSymbolENS0_19ENumberFormatSymbolE:
  522|  13.3k|DecimalFormatSymbols::getSymbol(ENumberFormatSymbol symbol) const {
  523|  13.3k|    const UnicodeString *strPtr;
  524|  13.3k|    if(symbol < kFormatSymbolCount) {
  ------------------
  |  Branch (524:8): [True: 13.3k, False: 0]
  ------------------
  525|  13.3k|        strPtr = &fSymbols[symbol];
  526|  13.3k|    } else {
  527|      0|        strPtr = &fNoSymbol;
  528|      0|    }
  529|  13.3k|    return *strPtr;
  530|  13.3k|}
_ZNK6icu_7820DecimalFormatSymbols19getConstDigitSymbolEi:
  545|   133k|inline const UnicodeString& DecimalFormatSymbols::getConstDigitSymbol(int32_t digit) const {
  546|   133k|    if (digit < 0 || digit > 9) {
  ------------------
  |  Branch (546:9): [True: 0, False: 133k]
  |  Branch (546:22): [True: 0, False: 133k]
  ------------------
  547|      0|        digit = 0;
  548|      0|    }
  549|   133k|    if (digit == 0) {
  ------------------
  |  Branch (549:9): [True: 13.3k, False: 119k]
  ------------------
  550|  13.3k|        return fSymbols[kZeroDigitSymbol];
  551|  13.3k|    }
  552|   119k|    ENumberFormatSymbol key = static_cast<ENumberFormatSymbol>(kOneDigitSymbol + digit - 1);
  553|   119k|    return fSymbols[key];
  554|   133k|}
_ZN6icu_7820DecimalFormatSymbols9setSymbolENS0_19ENumberFormatSymbolERKNS_13UnicodeStringEa:
  560|   173k|DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propagateDigits = true) {
  561|   173k|    if (symbol == kCurrencySymbol) {
  ------------------
  |  Branch (561:9): [True: 0, False: 173k]
  ------------------
  562|      0|        fIsCustomCurrencySymbol = true;
  563|      0|    }
  564|   173k|    else if (symbol == kIntlCurrencySymbol) {
  ------------------
  |  Branch (564:14): [True: 0, False: 173k]
  ------------------
  565|      0|        fIsCustomIntlCurrencySymbol = true;
  566|      0|    }
  567|   173k|    if(symbol<kFormatSymbolCount) {
  ------------------
  |  Branch (567:8): [True: 173k, False: 0]
  ------------------
  568|   173k|        fSymbols[symbol]=value;
  569|   173k|    }
  570|       |
  571|       |    // If the zero digit is being set to a known zero digit according to Unicode,
  572|       |    // then we automatically set the corresponding 1-9 digits
  573|       |    // Also record updates to fCodePointZero. Be conservative if in doubt.
  574|   173k|    if (symbol == kZeroDigitSymbol) {
  ------------------
  |  Branch (574:9): [True: 0, False: 173k]
  ------------------
  575|      0|        UChar32 sym = value.char32At(0);
  576|      0|        if ( propagateDigits && u_charDigitValue(sym) == 0 && value.countChar32() == 1 ) {
  ------------------
  |  |  220|      0|#define u_charDigitValue U_ICU_ENTRY_POINT_RENAME(u_charDigitValue)
  |  |  ------------------
  |  |  |  |  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 (576:14): [True: 0, False: 0]
  |  Branch (576:33): [True: 0, False: 0]
  |  Branch (576:63): [True: 0, False: 0]
  ------------------
  577|      0|            fCodePointZero = sym;
  578|      0|            for ( int8_t i = 1 ; i<= 9 ; i++ ) {
  ------------------
  |  Branch (578:34): [True: 0, False: 0]
  ------------------
  579|      0|                sym++;
  580|      0|                fSymbols[static_cast<int>(kOneDigitSymbol) + i - 1] = UnicodeString(sym);
  581|      0|            }
  582|      0|        } else {
  583|      0|            fCodePointZero = -1;
  584|      0|        }
  585|   173k|    } else if (symbol >= kOneDigitSymbol && symbol <= kNineDigitSymbol) {
  ------------------
  |  Branch (585:16): [True: 26.6k, False: 146k]
  |  Branch (585:45): [True: 0, False: 26.6k]
  ------------------
  586|      0|        fCodePointZero = -1;
  587|      0|    }
  588|   173k|}

_ZN6icu_788ZoneMeta18getCanonicalCLDRIDERKNS_13UnicodeStringER10UErrorCode:
  229|     36|ZoneMeta::getCanonicalCLDRID(const UnicodeString &tzid, UErrorCode& status) {
  230|     36|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (230:9): [True: 0, False: 36]
  ------------------
  231|      0|        return nullptr;
  232|      0|    }
  233|       |
  234|     36|    if (tzid.isBogus() || tzid.length() > ZID_KEY_MAX) {
  ------------------
  |  |  113|     36|#define ZID_KEY_MAX 128
  ------------------
  |  Branch (234:9): [True: 0, False: 36]
  |  Branch (234:27): [True: 0, False: 36]
  ------------------
  235|      0|        status = U_ILLEGAL_ARGUMENT_ERROR;
  236|      0|        return nullptr;
  237|      0|    }
  238|       |
  239|       |    // Checking the cached results
  240|     36|    umtx_initOnce(gCanonicalIDCacheInitOnce, &initCanonicalIDCache, status);
  241|     36|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (241:9): [True: 0, False: 36]
  ------------------
  242|      0|        return nullptr;
  243|      0|    }
  244|       |
  245|     36|    const char16_t *canonicalID = nullptr;
  246|       |
  247|     36|    UErrorCode tmpStatus = U_ZERO_ERROR;
  248|     36|    char16_t utzid[ZID_KEY_MAX + 1];
  249|     36|    tzid.extract(utzid, ZID_KEY_MAX + 1, tmpStatus);
  ------------------
  |  |  113|     36|#define ZID_KEY_MAX 128
  ------------------
  250|     36|    U_ASSERT(tmpStatus == U_ZERO_ERROR);    // we checked the length of tzid already
  ------------------
  |  |   35|     36|#   define U_ASSERT(exp) (void)0
  ------------------
  251|       |
  252|     36|    if (!uprv_isInvariantUString(utzid, -1)) {
  ------------------
  |  | 1518|     36|#define uprv_isInvariantUString U_ICU_ENTRY_POINT_RENAME(uprv_isInvariantUString)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (252:9): [True: 0, False: 36]
  ------------------
  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|     36|    umtx_lock(&gZoneMetaLock);
  ------------------
  |  | 1250|     36|#define umtx_lock U_ICU_ENTRY_POINT_RENAME(umtx_lock)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  260|     36|    {
  261|     36|        canonicalID = static_cast<const char16_t*>(uhash_get(gCanonicalIDCache, utzid));
  ------------------
  |  | 1007|     36|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  262|     36|    }
  263|     36|    umtx_unlock(&gZoneMetaLock);
  ------------------
  |  | 1251|     36|#define umtx_unlock U_ICU_ENTRY_POINT_RENAME(umtx_unlock)
  |  |  ------------------
  |  |  |  |  123|     36|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     36|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     36|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  264|       |
  265|     36|    if (canonicalID != nullptr) {
  ------------------
  |  Branch (265:9): [True: 8, False: 28]
  ------------------
  266|      8|        return canonicalID;
  267|      8|    }
  268|       |
  269|       |    // If not, resolve CLDR canonical ID with resource data
  270|     28|    UBool isInputCanonical = false;
  271|     28|    char id[ZID_KEY_MAX + 1];
  272|     28|    tzid.extract(0, 0x7fffffff, id, UPRV_LENGTHOF(id), US_INV);
  ------------------
  |  |   99|     28|#define UPRV_LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
  ------------------
                  tzid.extract(0, 0x7fffffff, id, UPRV_LENGTHOF(id), US_INV);
  ------------------
  |  |   98|     28|#define US_INV icu::UnicodeString::kInvariant
  ------------------
  273|       |
  274|       |    // replace '/' with ':'
  275|     28|    char *p = id;
  276|    223|    while (*p++) {
  ------------------
  |  Branch (276:12): [True: 195, False: 28]
  ------------------
  277|    195|        if (*p == '/') {
  ------------------
  |  Branch (277:13): [True: 11, False: 184]
  ------------------
  278|     11|            *p = ':';
  279|     11|        }
  280|    195|    }
  281|       |
  282|     28|    UResourceBundle *top = ures_openDirect(nullptr, gKeyTypeData, &tmpStatus);
  ------------------
  |  | 1693|     28|#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect)
  |  |  ------------------
  |  |  |  |  123|     28|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     28|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     28|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  283|     28|    UResourceBundle *rb = ures_getByKey(top, gTypeMapTag, nullptr, &tmpStatus);
  ------------------
  |  | 1661|     28|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     28|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     28|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     28|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|     28|    ures_getByKey(rb, gTimezoneTag, rb, &tmpStatus);
  ------------------
  |  | 1661|     28|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     28|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     28|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     28|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  285|     28|    ures_getByKey(rb, id, rb, &tmpStatus);
  ------------------
  |  | 1661|     28|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     28|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     28|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     28|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  286|     28|    if (U_SUCCESS(tmpStatus)) {
  ------------------
  |  Branch (286:9): [True: 11, False: 17]
  ------------------
  287|       |        // type entry (canonical) found
  288|       |        // the input is the canonical ID. resolve to const char16_t*
  289|     11|        canonicalID = TimeZone::findID(tzid);
  290|     11|        isInputCanonical = true;
  291|     11|    }
  292|       |
  293|     28|    if (canonicalID == nullptr) {
  ------------------
  |  Branch (293:9): [True: 17, False: 11]
  ------------------
  294|       |        // If a map element not found, then look for an alias
  295|     17|        tmpStatus = U_ZERO_ERROR;
  296|     17|        ures_getByKey(top, gTypeAliasTag, rb, &tmpStatus);
  ------------------
  |  | 1661|     17|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     17|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     17|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     17|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|     17|        ures_getByKey(rb, gTimezoneTag, rb, &tmpStatus);
  ------------------
  |  | 1661|     17|#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey)
  |  |  ------------------
  |  |  |  |  123|     17|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     17|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     17|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  298|     17|        const char16_t *canonical = ures_getStringByKey(rb,id,nullptr,&tmpStatus);
  ------------------
  |  | 1677|     17|#define ures_getStringByKey U_ICU_ENTRY_POINT_RENAME(ures_getStringByKey)
  |  |  ------------------
  |  |  |  |  123|     17|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     17|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     17|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  299|     17|        if (U_SUCCESS(tmpStatus)) {
  ------------------
  |  Branch (299:13): [True: 6, False: 11]
  ------------------
  300|       |            // canonical map found
  301|      6|            canonicalID = canonical;
  302|      6|        }
  303|       |
  304|     17|        if (canonicalID == nullptr) {
  ------------------
  |  Branch (304:13): [True: 11, False: 6]
  ------------------
  305|       |            // Dereference the input ID using the tz data
  306|     11|            const char16_t *derefer = TimeZone::dereferOlsonLink(tzid);
  307|     11|            if (derefer == nullptr) {
  ------------------
  |  Branch (307:17): [True: 0, False: 11]
  ------------------
  308|      0|                status = U_ILLEGAL_ARGUMENT_ERROR;
  309|     11|            } else {
  310|     11|                int32_t len = u_strlen(derefer);
  ------------------
  |  |  393|     11|#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  311|     11|                u_UCharsToChars(derefer,id,len);
  ------------------
  |  |  211|     11|#define u_UCharsToChars U_ICU_ENTRY_POINT_RENAME(u_UCharsToChars)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  312|     11|                id[len] = static_cast<char>(0); // Make sure it is null terminated.
  313|       |
  314|       |                // replace '/' with ':'
  315|     11|                char *q = id;
  316|    203|                while (*q++) {
  ------------------
  |  Branch (316:24): [True: 192, False: 11]
  ------------------
  317|    192|                    if (*q == '/') {
  ------------------
  |  Branch (317:25): [True: 12, False: 180]
  ------------------
  318|     12|                        *q = ':';
  319|     12|                    }
  320|    192|                }
  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|     11|                tmpStatus = U_ZERO_ERROR;
  326|     11|                canonical = ures_getStringByKey(rb,id,nullptr,&tmpStatus);
  ------------------
  |  | 1677|     11|#define ures_getStringByKey U_ICU_ENTRY_POINT_RENAME(ures_getStringByKey)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  327|     11|                if (U_SUCCESS(tmpStatus)) {
  ------------------
  |  Branch (327:21): [True: 1, False: 10]
  ------------------
  328|       |                    // canonical map for the dereferenced ID found
  329|      1|                    canonicalID = canonical;
  330|     10|                } else {
  331|     10|                    canonicalID = derefer;
  332|     10|                    isInputCanonical = true;
  333|     10|                }
  334|     11|            }
  335|     11|        }
  336|     17|    }
  337|     28|    ures_close(rb);
  ------------------
  |  | 1652|     28|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|     28|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     28|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     28|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  338|     28|    ures_close(top);
  ------------------
  |  | 1652|     28|#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close)
  |  |  ------------------
  |  |  |  |  123|     28|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     28|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     28|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  339|       |
  340|     28|    if (U_SUCCESS(status)) {
  ------------------
  |  Branch (340:9): [True: 28, False: 0]
  ------------------
  341|     28|        U_ASSERT(canonicalID != nullptr);  // canocanilD must be non-nullptr here
  ------------------
  |  |   35|     28|#   define U_ASSERT(exp) (void)0
  ------------------
  342|       |
  343|       |        // Put the resolved canonical ID to the cache
  344|     28|        umtx_lock(&gZoneMetaLock);
  ------------------
  |  | 1250|     28|#define umtx_lock U_ICU_ENTRY_POINT_RENAME(umtx_lock)
  |  |  ------------------
  |  |  |  |  123|     28|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     28|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     28|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  345|     28|        {
  346|     28|            const char16_t* idInCache = static_cast<const char16_t*>(uhash_get(gCanonicalIDCache, utzid));
  ------------------
  |  | 1007|     28|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|     28|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     28|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     28|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  347|     28|            if (idInCache == nullptr) {
  ------------------
  |  Branch (347:17): [True: 28, False: 0]
  ------------------
  348|     28|                const char16_t* key = ZoneMeta::findTimeZoneID(tzid);
  349|     28|                U_ASSERT(key != nullptr);
  ------------------
  |  |   35|     28|#   define U_ASSERT(exp) (void)0
  ------------------
  350|     28|                if (key != nullptr) {
  ------------------
  |  Branch (350:21): [True: 28, False: 0]
  ------------------
  351|     28|                    idInCache = static_cast<const char16_t*>(uhash_put(gCanonicalIDCache, const_cast<char16_t*>(key), const_cast<char16_t*>(canonicalID), &status));
  ------------------
  |  | 1032|     28|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  123|     28|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     28|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     28|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  352|     28|                    U_ASSERT(idInCache == nullptr);
  ------------------
  |  |   35|     28|#   define U_ASSERT(exp) (void)0
  ------------------
  353|     28|                }
  354|     28|            }
  355|     28|            if (U_SUCCESS(status) && isInputCanonical) {
  ------------------
  |  Branch (355:17): [True: 28, False: 0]
  |  Branch (355:38): [True: 21, False: 7]
  ------------------
  356|       |                // Also put canonical ID itself into the cache if not exist
  357|     21|                const char16_t* canonicalInCache = static_cast<const char16_t*>(uhash_get(gCanonicalIDCache, canonicalID));
  ------------------
  |  | 1007|     21|#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
  |  |  ------------------
  |  |  |  |  123|     21|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     21|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     21|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  358|     21|                if (canonicalInCache == nullptr) {
  ------------------
  |  Branch (358:21): [True: 10, False: 11]
  ------------------
  359|     10|                    canonicalInCache = static_cast<const char16_t*>(uhash_put(gCanonicalIDCache, const_cast<char16_t*>(canonicalID), const_cast<char16_t*>(canonicalID), &status));
  ------------------
  |  | 1032|     10|#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
  |  |  ------------------
  |  |  |  |  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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  360|     10|                    U_ASSERT(canonicalInCache == nullptr);
  ------------------
  |  |   35|     10|#   define U_ASSERT(exp) (void)0
  ------------------
  361|     10|                }
  362|     21|            }
  363|     28|        }
  364|     28|        umtx_unlock(&gZoneMetaLock);
  ------------------
  |  | 1251|     28|#define umtx_unlock U_ICU_ENTRY_POINT_RENAME(umtx_unlock)
  |  |  ------------------
  |  |  |  |  123|     28|#       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
  |  |  |  |  ------------------
  |  |  |  |  |  |  122|     28|#       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  121|     28|#       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  365|     28|    }
  366|       |
  367|     28|    return canonicalID;
  368|     36|}
_ZN6icu_788ZoneMeta14findTimeZoneIDERKNS_13UnicodeStringE:
  854|     28|ZoneMeta::findTimeZoneID(const UnicodeString& tzid) {
  855|     28|    return TimeZone::findID(tzid);
  856|     28|}
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|}

LLVMFuzzerTestOneInput:
   13|  7.38k|extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
   14|  7.38k|  UErrorCode status = U_ZERO_ERROR;
   15|       |
   16|  7.38k|  uint16_t rnd16;
   17|       |
   18|  7.38k|  if (size < 2 + sizeof(rnd16))
  ------------------
  |  Branch (18:7): [True: 2, False: 7.38k]
  ------------------
   19|      2|    return 0;
   20|       |
   21|  7.38k|  std::memcpy(&rnd16, data, sizeof(rnd16));
   22|  7.38k|  size -= sizeof(rnd16);
   23|  7.38k|  data += sizeof(rnd16);
   24|  7.38k|  const icu::Locale& locale = GetRandomLocale(rnd16);
   25|       |
   26|  7.38k|  std::unique_ptr<char16_t[]> fuzzbuff(new char16_t[size/2]);
   27|  7.38k|  std::memcpy(fuzzbuff.get(), data, (size/2)*2);
   28|  7.38k|  icu::UnicodeString fuzzstr(false, fuzzbuff.get(), size/2);
   29|       |
   30|  7.38k|  icu::LocalPointer<icu::DateTimePatternGenerator > gen(
   31|  7.38k|      icu::DateTimePatternGenerator::createInstance(locale, status), status);
   32|  7.38k|  if (U_SUCCESS(status)) {
  ------------------
  |  Branch (32:7): [True: 7.38k, False: 0]
  ------------------
   33|       |
   34|  7.38k|      status = U_ZERO_ERROR;
   35|  7.38k|      gen->getSkeleton(fuzzstr, status);
   36|       |
   37|  7.38k|      status = U_ZERO_ERROR;
   38|  7.38k|      gen->getBaseSkeleton(fuzzstr, status);
   39|       |
   40|  7.38k|      status = U_ZERO_ERROR;
   41|  7.38k|      gen->getBaseSkeleton(fuzzstr, status);
   42|       |
   43|  7.38k|      status = U_ZERO_ERROR;
   44|  7.38k|      gen->getPatternForSkeleton(fuzzstr);
   45|       |
   46|  7.38k|      status = U_ZERO_ERROR;
   47|  7.38k|      gen->getBestPattern(fuzzstr, status);
   48|       |
   49|  7.38k|      status = U_ZERO_ERROR;
   50|  7.38k|      icu::DateTimePatternGenerator::staticGetSkeleton(fuzzstr, status);
   51|       |
   52|  7.38k|      status = U_ZERO_ERROR;
   53|  7.38k|      icu::DateTimePatternGenerator::staticGetBaseSkeleton (fuzzstr, status);
   54|  7.38k|  }
   55|       |
   56|  7.38k|  status = U_ZERO_ERROR;
   57|  7.38k|  std::string str(reinterpret_cast<const char*>(data), size);
   58|  7.38k|  gen.adoptInstead(icu::DateTimePatternGenerator::createInstance(icu::Locale(str.c_str()), status));
   59|  7.38k|  return 0;
   60|  7.38k|}

_Z15GetRandomLocalet:
   19|  7.38k|const icu::Locale& GetRandomLocale(uint16_t rnd) {
   20|  7.38k|  int32_t num_locales = 0;
   21|  7.38k|  const icu::Locale* locales = icu::Locale::getAvailableLocales(num_locales);
   22|  7.38k|  assert(num_locales > 0);
   23|  7.38k|  return locales[rnd % num_locales];
   24|  7.38k|}
_ZN14IcuEnvironmentC2Ev:
   14|      2|  IcuEnvironment() {
   15|       |    // nothing to initialize yet;
   16|      2|  }

