_ZN11flatbuffers9AllocatorD2Ev:
   28|  44.1k|  virtual ~Allocator() {}
_ZN11flatbuffers9Allocator19reallocate_downwardEPhmmmm:
   43|  12.3k|                                       size_t in_use_front) {
   44|  12.3k|    FLATBUFFERS_ASSERT(new_size > old_size);  // vector_downward only grows
   45|  12.3k|    uint8_t* new_p = allocate(new_size);
   46|  12.3k|    memcpy_downward(old_p, old_size, new_p, new_size, in_use_back,
   47|  12.3k|                    in_use_front);
   48|  12.3k|    deallocate(old_p, old_size);
   49|  12.3k|    return new_p;
   50|  12.3k|  }
_ZN11flatbuffers9Allocator15memcpy_downwardEPhmS1_mmm:
   59|  12.3k|                       size_t in_use_front) {
   60|  12.3k|    memcpy(new_p + new_size - in_use_back, old_p + old_size - in_use_back,
   61|  12.3k|           in_use_back);
   62|  12.3k|    memcpy(new_p, old_p, in_use_front);
   63|  12.3k|  }

_ZN11flatbuffers11IsConstTrueIbEEbT_:
  295|  6.79k|  template<typename T> FLATBUFFERS_CONSTEXPR inline bool IsConstTrue(T t) {
  296|  6.79k|    return !!t;
  297|  6.79k|  }
_ZN11flatbuffers12EndianScalarIjEET_S1_:
  416|   174M|template<typename T> T EndianScalar(T t) {
  417|   174M|  #if FLATBUFFERS_LITTLEENDIAN
  418|   174M|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|   174M|}
_ZN11flatbuffers10ReadScalarIjEET_PKv:
  427|   166M|T ReadScalar(const void *p) {
  428|   166M|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|   166M|}
_ZN11flatbuffers10ReadScalarIiEET_PKv:
  427|   170M|T ReadScalar(const void *p) {
  428|   170M|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|   170M|}
_ZN11flatbuffers12EndianScalarIiEET_S1_:
  416|   171M|template<typename T> T EndianScalar(T t) {
  417|   171M|  #if FLATBUFFERS_LITTLEENDIAN
  418|   171M|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|   171M|}
_ZN11flatbuffers10ReadScalarItEET_PKv:
  427|   190M|T ReadScalar(const void *p) {
  428|   190M|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|   190M|}
_ZN11flatbuffers12EndianScalarItEET_S1_:
  416|   193M|template<typename T> T EndianScalar(T t) {
  417|   193M|  #if FLATBUFFERS_LITTLEENDIAN
  418|   193M|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|   193M|}
_ZN11flatbuffers27VerifyAlignmentRequirementsEmm:
  360|  13.9k|inline bool VerifyAlignmentRequirements(size_t align, size_t min_align = 1) {
  361|  13.9k|  return (min_align <= align) && (align <= (FLATBUFFERS_MAX_ALIGNMENT)) &&
  ------------------
  |  |  354|  13.9k|  #define FLATBUFFERS_MAX_ALIGNMENT 32
  ------------------
  |  Branch (361:10): [True: 13.9k, False: 2]
  |  Branch (361:34): [True: 13.9k, False: 5]
  ------------------
  362|  13.9k|         (align & (align - 1)) == 0;  // must be power of 2
  ------------------
  |  Branch (362:10): [True: 13.9k, False: 2]
  ------------------
  363|  13.9k|}
_ZN11flatbuffers12PaddingBytesEmm:
  458|  6.28M|inline size_t PaddingBytes(size_t buf_size, size_t scalar_size) {
  459|  6.28M|  return ((~buf_size) + 1) & (scalar_size - 1);
  460|  6.28M|}
_ZN11flatbuffers10ReadScalarImEET_PKv:
  427|  15.7k|T ReadScalar(const void *p) {
  428|  15.7k|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|  15.7k|}
_ZN11flatbuffers12EndianScalarImEET_S1_:
  416|   482k|template<typename T> T EndianScalar(T t) {
  417|   482k|  #if FLATBUFFERS_LITTLEENDIAN
  418|   482k|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|   482k|}
_ZN11flatbuffers10ReadScalarIhEET_PKv:
  427|  28.7k|T ReadScalar(const void *p) {
  428|  28.7k|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|  28.7k|}
_ZN11flatbuffers12EndianScalarIhEET_S1_:
  416|   174k|template<typename T> T EndianScalar(T t) {
  417|   174k|  #if FLATBUFFERS_LITTLEENDIAN
  418|   174k|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|   174k|}
_ZN11flatbuffers10ReadScalarIaEET_PKv:
  427|  14.8k|T ReadScalar(const void *p) {
  428|  14.8k|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|  14.8k|}
_ZN11flatbuffers12EndianScalarIaEET_S1_:
  416|   150k|template<typename T> T EndianScalar(T t) {
  417|   150k|  #if FLATBUFFERS_LITTLEENDIAN
  418|   150k|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|   150k|}
_ZN11flatbuffers10ReadScalarIsEET_PKv:
  427|  1.36k|T ReadScalar(const void *p) {
  428|  1.36k|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|  1.36k|}
_ZN11flatbuffers12EndianScalarIsEET_S1_:
  416|  7.56k|template<typename T> T EndianScalar(T t) {
  417|  7.56k|  #if FLATBUFFERS_LITTLEENDIAN
  418|  7.56k|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|  7.56k|}
_ZN11flatbuffers10ReadScalarIlEET_PKv:
  427|  56.4k|T ReadScalar(const void *p) {
  428|  56.4k|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|  56.4k|}
_ZN11flatbuffers12EndianScalarIlEET_S1_:
  416|   341k|template<typename T> T EndianScalar(T t) {
  417|   341k|  #if FLATBUFFERS_LITTLEENDIAN
  418|   341k|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|   341k|}
_ZN11flatbuffers10ReadScalarIfEET_PKv:
  427|  79.6k|T ReadScalar(const void *p) {
  428|  79.6k|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|  79.6k|}
_ZN11flatbuffers12EndianScalarIfEET_S1_:
  416|  93.2k|template<typename T> T EndianScalar(T t) {
  417|  93.2k|  #if FLATBUFFERS_LITTLEENDIAN
  418|  93.2k|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|  93.2k|}
_ZN11flatbuffers10ReadScalarIdEET_PKv:
  427|  5.66M|T ReadScalar(const void *p) {
  428|  5.66M|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|  5.66M|}
_ZN11flatbuffers12EndianScalarIdEET_S1_:
  416|  5.70M|template<typename T> T EndianScalar(T t) {
  417|  5.70M|  #if FLATBUFFERS_LITTLEENDIAN
  418|  5.70M|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|  5.70M|}
_ZN11flatbuffers11IsTheSameAsIaEEbT_S1_:
  469|   470k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }
_ZN11flatbuffers11IsTheSameAsIiEEbT_S1_:
  469|   347k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }
_ZN11flatbuffers11IsTheSameAsItEEbT_S1_:
  469|   351k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }
_ZN11flatbuffers11IsTheSameAsIjEEbT_S1_:
  469|  1.32M|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }
_ZN11flatbuffers11WriteScalarItEEvPvT_:
  441|  3.20M|void WriteScalar(void *p, T t) {
  442|  3.20M|  *reinterpret_cast<T *>(p) = EndianScalar(t);
  443|  3.20M|}
_ZN11flatbuffers11WriteScalarIiEEvPvT_:
  441|   662k|void WriteScalar(void *p, T t) {
  442|   662k|  *reinterpret_cast<T *>(p) = EndianScalar(t);
  443|   662k|}
_ZN11flatbuffers11IsTheSameAsIlEEbT_S1_:
  469|   161k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }
_ZN11flatbuffers11IsTheSameAsIhEEbT_S1_:
  469|   339k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }
_ZN11flatbuffers11IsTheSameAsIdEEbT_S1_:
  469|  48.6k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }
_ZN11flatbuffers11IsTheSameAsImEEbT_S1_:
  469|  20.0k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }
_ZN11flatbuffers11IsTheSameAsIsEEbT_S1_:
  469|  2.71k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }
_ZN11flatbuffers11IsTheSameAsIfEEbT_S1_:
  469|  9.96k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }

_ZN11flatbuffers7AlignOfImEEmv:
   77|  33.9k|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|  33.9k|    #ifndef alignof
   83|  33.9k|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|  33.9k|  #endif
   88|       |  // clang-format on
   89|  33.9k|}
_ZN11flatbuffers11EndianCheckEv:
   68|  39.0k|inline void EndianCheck() {
   69|  39.0k|  int endiantest = 1;
   70|       |  // If this fails, see FLATBUFFERS_LITTLEENDIAN above.
   71|  39.0k|  FLATBUFFERS_ASSERT(*reinterpret_cast<char*>(&endiantest) ==
   72|  39.0k|                     FLATBUFFERS_LITTLEENDIAN);
   73|  39.0k|  (void)endiantest;
   74|  39.0k|}
_ZN11flatbuffers7GetRootINS_5TableEEEPKT_PKv:
  214|  5.09k|const T* GetRoot(const void* buf) {
  215|  5.09k|  return GetMutableRoot<T>(const_cast<void*>(buf));
  216|  5.09k|}
_ZN11flatbuffers14GetMutableRootINS_5TableEEEPT_Pv:
  201|  5.09k|T* GetMutableRoot(void* buf) {
  202|  5.09k|  if (!buf) return nullptr;
  ------------------
  |  Branch (202:7): [True: 0, False: 5.09k]
  ------------------
  203|  5.09k|  EndianCheck();
  204|  5.09k|  return reinterpret_cast<T*>(reinterpret_cast<uint8_t*>(buf) +
  205|  5.09k|                              EndianScalar(*reinterpret_cast<uoffset_t*>(buf)));
  206|  5.09k|}
_ZN11flatbuffers19BufferHasIdentifierEPKvPKcb:
  193|  5.09k|                                bool size_prefixed = false) {
  194|  5.09k|  return strncmp(GetBufferIdentifier(buf, size_prefixed), identifier,
  195|  5.09k|                 flatbuffers::kFileIdentifierLength) == 0;
  196|  5.09k|}
_ZN11flatbuffers19GetBufferIdentifierEPKvb:
  186|  5.09k|                                       bool size_prefixed = false) {
  187|  5.09k|  return reinterpret_cast<const char*>(buf) +
  188|  5.09k|         ((size_prefixed) ? 2 * sizeof(uoffset_t) : sizeof(uoffset_t));
  ------------------
  |  Branch (188:11): [True: 0, False: 5.09k]
  ------------------
  189|  5.09k|}
_ZN11flatbuffers14IndirectHelperINS_6OffsetIN10reflection6ObjectEEEvE4ReadEPKhj:
  130|  55.2k|  static return_type Read(const uint8_t* const p, const offset_type i) {
  131|       |    // Offsets are relative to themselves, so first update the pointer to
  132|       |    // point to the offset location.
  133|  55.2k|    const uint8_t* const offset_location = p + i * element_stride;
  134|       |
  135|       |    // Then read the scalar value of the offset (which may be 32 or 64-bits) and
  136|       |    // then determine the relative location from the offset location.
  137|  55.2k|    return reinterpret_cast<return_type>(
  138|  55.2k|        offset_location + ReadScalar<offset_type>(offset_location));
  139|  55.2k|  }
_ZN11flatbuffers14IndirectHelperINS_6OffsetIN10reflection5FieldEEEvE4ReadEPKhj:
  130|  40.8k|  static return_type Read(const uint8_t* const p, const offset_type i) {
  131|       |    // Offsets are relative to themselves, so first update the pointer to
  132|       |    // point to the offset location.
  133|  40.8k|    const uint8_t* const offset_location = p + i * element_stride;
  134|       |
  135|       |    // Then read the scalar value of the offset (which may be 32 or 64-bits) and
  136|       |    // then determine the relative location from the offset location.
  137|  40.8k|    return reinterpret_cast<return_type>(
  138|  40.8k|        offset_location + ReadScalar<offset_type>(offset_location));
  139|  40.8k|  }
_ZN11flatbuffers14IndirectHelperINS_6OffsetIN10reflection8KeyValueEEEvE4ReadEPKhj:
  130|    704|  static return_type Read(const uint8_t* const p, const offset_type i) {
  131|       |    // Offsets are relative to themselves, so first update the pointer to
  132|       |    // point to the offset location.
  133|    704|    const uint8_t* const offset_location = p + i * element_stride;
  134|       |
  135|       |    // Then read the scalar value of the offset (which may be 32 or 64-bits) and
  136|       |    // then determine the relative location from the offset location.
  137|    704|    return reinterpret_cast<return_type>(
  138|    704|        offset_location + ReadScalar<offset_type>(offset_location));
  139|    704|  }
_ZN11flatbuffers14IndirectHelperINS_6OffsetIN10reflection4EnumEEEvE4ReadEPKhj:
  130|  79.0k|  static return_type Read(const uint8_t* const p, const offset_type i) {
  131|       |    // Offsets are relative to themselves, so first update the pointer to
  132|       |    // point to the offset location.
  133|  79.0k|    const uint8_t* const offset_location = p + i * element_stride;
  134|       |
  135|       |    // Then read the scalar value of the offset (which may be 32 or 64-bits) and
  136|       |    // then determine the relative location from the offset location.
  137|  79.0k|    return reinterpret_cast<return_type>(
  138|  79.0k|        offset_location + ReadScalar<offset_type>(offset_location));
  139|  79.0k|  }
_ZN11flatbuffers14IndirectHelperINS_6OffsetIN10reflection7EnumValEEEvE4ReadEPKhj:
  130|   115k|  static return_type Read(const uint8_t* const p, const offset_type i) {
  131|       |    // Offsets are relative to themselves, so first update the pointer to
  132|       |    // point to the offset location.
  133|   115k|    const uint8_t* const offset_location = p + i * element_stride;
  134|       |
  135|       |    // Then read the scalar value of the offset (which may be 32 or 64-bits) and
  136|       |    // then determine the relative location from the offset location.
  137|   115k|    return reinterpret_cast<return_type>(
  138|   115k|        offset_location + ReadScalar<offset_type>(offset_location));
  139|   115k|  }
_ZN11flatbuffers14IndirectHelperINS_6OffsetIN10reflection7ServiceEEEvE4ReadEPKhj:
  130|    743|  static return_type Read(const uint8_t* const p, const offset_type i) {
  131|       |    // Offsets are relative to themselves, so first update the pointer to
  132|       |    // point to the offset location.
  133|    743|    const uint8_t* const offset_location = p + i * element_stride;
  134|       |
  135|       |    // Then read the scalar value of the offset (which may be 32 or 64-bits) and
  136|       |    // then determine the relative location from the offset location.
  137|    743|    return reinterpret_cast<return_type>(
  138|    743|        offset_location + ReadScalar<offset_type>(offset_location));
  139|    743|  }
_ZN11flatbuffers14IndirectHelperINS_6OffsetIN10reflection7RPCCallEEEvE4ReadEPKhj:
  130|  1.48k|  static return_type Read(const uint8_t* const p, const offset_type i) {
  131|       |    // Offsets are relative to themselves, so first update the pointer to
  132|       |    // point to the offset location.
  133|  1.48k|    const uint8_t* const offset_location = p + i * element_stride;
  134|       |
  135|       |    // Then read the scalar value of the offset (which may be 32 or 64-bits) and
  136|       |    // then determine the relative location from the offset location.
  137|  1.48k|    return reinterpret_cast<return_type>(
  138|  1.48k|        offset_location + ReadScalar<offset_type>(offset_location));
  139|  1.48k|  }
_ZN11flatbuffers7AlignOfIjEEmv:
   77|   636k|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|   636k|    #ifndef alignof
   83|   636k|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|   636k|  #endif
   88|       |  // clang-format on
   89|   636k|}
_ZNK11flatbuffers6OffsetINS_6StringEE6IsNullEv:
   38|   437k|  bool IsNull() const { return !o; }
_ZNK11flatbuffers6OffsetIN10reflection4TypeEE6IsNullEv:
   38|   232k|  bool IsNull() const { return !o; }
_ZNK11flatbuffers6OffsetINS_6VectorINS0_INS_6StringEEEjEEE6IsNullEv:
   38|   290k|  bool IsNull() const { return !o; }
_ZNK11flatbuffers6OffsetINS_6VectorINS0_IN10reflection8KeyValueEEEjEEE6IsNullEv:
   38|   290k|  bool IsNull() const { return !o; }
_ZN11flatbuffers7AlignOfINS_6OffsetIN10reflection8KeyValueEEEEEmv:
   77|    704|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|    704|    #ifndef alignof
   83|    704|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|    704|  #endif
   88|       |  // clang-format on
   89|    704|}
_ZNK11flatbuffers6OffsetINS_6VectorINS0_IN10reflection7EnumValEEEjEEE6IsNullEv:
   38|  79.0k|  bool IsNull() const { return !o; }
_ZN11flatbuffers7AlignOfINS_6OffsetIN10reflection7EnumValEEEEEmv:
   77|  79.0k|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|  79.0k|    #ifndef alignof
   83|  79.0k|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|  79.0k|  #endif
   88|       |  // clang-format on
   89|  79.0k|}
_ZNK11flatbuffers6OffsetINS_6VectorINS0_IN10reflection5FieldEEEjEEE6IsNullEv:
   38|  55.2k|  bool IsNull() const { return !o; }
_ZN11flatbuffers7AlignOfINS_6OffsetIN10reflection5FieldEEEEEmv:
   77|  55.2k|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|  55.2k|    #ifndef alignof
   83|  55.2k|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|  55.2k|  #endif
   88|       |  // clang-format on
   89|  55.2k|}
_ZNK11flatbuffers6OffsetIN10reflection6ObjectEE6IsNullEv:
   38|  8.05k|  bool IsNull() const { return !o; }
_ZNK11flatbuffers6OffsetINS_6VectorINS0_IN10reflection7RPCCallEEEjEEE6IsNullEv:
   38|    743|  bool IsNull() const { return !o; }
_ZN11flatbuffers7AlignOfINS_6OffsetIN10reflection7RPCCallEEEEEmv:
   77|    743|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|    743|    #ifndef alignof
   83|    743|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|    743|  #endif
   88|       |  // clang-format on
   89|    743|}
_ZNK11flatbuffers6OffsetINS_6VectorINS0_IN10reflection6ObjectEEEjEEE6IsNullEv:
   38|  5.09k|  bool IsNull() const { return !o; }
_ZNK11flatbuffers6OffsetINS_6VectorINS0_IN10reflection4EnumEEEjEEE6IsNullEv:
   38|  5.09k|  bool IsNull() const { return !o; }
_ZNK11flatbuffers6OffsetINS_6VectorINS0_IN10reflection7ServiceEEEjEEE6IsNullEv:
   38|  5.09k|  bool IsNull() const { return !o; }
_ZNK11flatbuffers6OffsetINS_6VectorINS0_IN10reflection10SchemaFileEEEjEEE6IsNullEv:
   38|  5.09k|  bool IsNull() const { return !o; }
_ZN11flatbuffers7AlignOfINS_6OffsetIN10reflection6ObjectEEEEEmv:
   77|  5.09k|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|  5.09k|    #ifndef alignof
   83|  5.09k|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|  5.09k|  #endif
   88|       |  // clang-format on
   89|  5.09k|}
_ZN11flatbuffers7AlignOfINS_6OffsetIN10reflection4EnumEEEEEmv:
   77|  5.09k|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|  5.09k|    #ifndef alignof
   83|  5.09k|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|  5.09k|  #endif
   88|       |  // clang-format on
   89|  5.09k|}
_ZN11flatbuffers7AlignOfINS_6OffsetIN10reflection7ServiceEEEEEmv:
   77|  5.09k|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|  5.09k|    #ifndef alignof
   83|  5.09k|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|  5.09k|  #endif
   88|       |  // clang-format on
   89|  5.09k|}
_ZN11flatbuffers8Offset64IvEC2Em:
   54|  11.2k|  Offset64(const offset_type offset) : o(offset) {}
_ZN11flatbuffers6OffsetIvEC2Ej:
   36|   112k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection6SchemaEEC2Ej:
   36|  5.09k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection5FieldEEC2Ej:
   36|  38.7k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection7RPCCallEEC2Ej:
   36|  1.48k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection7ServiceEEC2Ej:
   36|    743|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection4EnumEEC2Ej:
   36|  79.0k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection8KeyValueEEC2Ej:
   36|    704|  Offset(const offset_type _o) : o(_o) {}
idl_parser.cpp:_ZN11flatbuffersL14StringLessThanEPKcjS1_j:
   94|  2.41M|                                  const char* b_data, uoffset_t b_size) {
   95|  2.41M|  const auto cmp = memcmp(a_data, b_data, (std::min)(a_size, b_size));
   96|  2.41M|  return cmp == 0 ? a_size < b_size : cmp < 0;
  ------------------
  |  Branch (96:10): [True: 338k, False: 2.07M]
  ------------------
   97|  2.41M|}
_ZN11flatbuffers6OffsetINS_6VectorINS0_IN10reflection8KeyValueEEEjEEEC2Ej:
   36|   290k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection7EnumValEEC2Ej:
   36|   115k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection4TypeEEC2Ej:
   36|   232k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_6VectorINS0_INS_6StringEEEjEEEC2Ej:
   36|   290k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection6ObjectEEC2Ej:
   36|  63.3k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_6VectorINS0_IN10reflection5FieldEEEjEEEC2Ej:
   36|  55.2k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_6VectorINS0_IN10reflection6ObjectEEEjEEEC2Ej:
   36|  5.09k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_6VectorINS0_IN10reflection4EnumEEEjEEEC2Ej:
   36|  5.09k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_6VectorINS0_IN10reflection7ServiceEEEjEEEC2Ej:
   36|  5.09k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_6StringEEC2Ej:
   36|   442k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers14IndirectHelperIhvE4ReadEPKhm:
  113|    139|  static return_type Read(const uint8_t* p, const size_t i) {
  114|    139|    return EndianScalar((reinterpret_cast<const T*>(p))[i]);
  115|    139|  }
_ZN11flatbuffers8Offset64IvEC2Ev:
   53|  11.2k|  Offset64() : o(0) {}
_ZNK11flatbuffers8Offset64IvE6IsNullEv:
   56|  11.2k|  bool IsNull() const { return !o; }
_ZN11flatbuffers6OffsetIvEC2Ev:
   35|   112k|  Offset() : o(0) {}
_ZNK11flatbuffers6OffsetIvE6IsNullEv:
   38|  32.0k|  bool IsNull() const { return !o; }
_ZN11flatbuffers7AlignOfIhEEmv:
   77|  4.38k|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|  4.38k|    #ifndef alignof
   83|  4.38k|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|  4.38k|  #endif
   88|       |  // clang-format on
   89|  4.38k|}
_ZN11flatbuffers6OffsetINS_6VectorIhjEEEC2Ej:
   36|  4.38k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_5TableEEC2Ej:
   36|    224|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_6VectorINS0_IN10reflection10SchemaFileEEEjEEEC2Ev:
   35|  5.09k|  Offset() : o(0) {}
_ZN11flatbuffers6OffsetINS_6VectorINS0_IN10reflection7RPCCallEEEjEEEC2Ej:
   36|    743|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_6VectorINS0_IN10reflection7EnumValEEEjEEEC2Ej:
   36|  79.0k|  Offset(const offset_type _o) : o(_o) {}

_ZN11flatbuffers10DeallocateEPNS_9AllocatorEPhm:
   46|  15.8k|inline void Deallocate(Allocator* allocator, uint8_t* p, size_t size) {
   47|  15.8k|  if (allocator)
  ------------------
  |  Branch (47:7): [True: 0, False: 15.8k]
  ------------------
   48|      0|    allocator->deallocate(p, size);
   49|  15.8k|  else
   50|  15.8k|    DefaultAllocator().deallocate(p, size);
   51|  15.8k|}
_ZN11flatbuffers16DefaultAllocator8allocateEm:
   28|  28.2k|  uint8_t* allocate(size_t size) FLATBUFFERS_OVERRIDE {
   29|  28.2k|    return new uint8_t[size];
   30|  28.2k|  }
_ZN11flatbuffers16DefaultAllocator10deallocateEPhm:
   32|  28.2k|  void deallocate(uint8_t* p, size_t) FLATBUFFERS_OVERRIDE { delete[] p; }
_ZN11flatbuffers8AllocateEPNS_9AllocatorEm:
   41|  15.8k|inline uint8_t* Allocate(Allocator* allocator, size_t size) {
   42|  15.8k|  return allocator ? allocator->allocate(size)
  ------------------
  |  Branch (42:10): [True: 0, False: 15.8k]
  ------------------
   43|  15.8k|                   : DefaultAllocator().allocate(size);
   44|  15.8k|}
_ZN11flatbuffers18ReallocateDownwardEPNS_9AllocatorEPhmmmm:
   55|  12.3k|                                   size_t in_use_back, size_t in_use_front) {
   56|  12.3k|  return allocator ? allocator->reallocate_downward(old_p, old_size, new_size,
  ------------------
  |  Branch (56:10): [True: 0, False: 12.3k]
  ------------------
   57|      0|                                                    in_use_back, in_use_front)
   58|  12.3k|                   : DefaultAllocator().reallocate_downward(
   59|  12.3k|                         old_p, old_size, new_size, in_use_back, in_use_front);
   60|  12.3k|}

_ZN11flatbuffers21FlatBufferBuilderImplILb0EEC2EmPNS_9AllocatorEbm:
  100|  33.9k|      : buf_(initial_size, allocator, own_allocator, buffer_minalign,
  101|  33.9k|             static_cast<SizeT>(Is64Aware ? FLATBUFFERS_MAX_64_BUFFER_SIZE
  ------------------
  |  |  343|      0|#define FLATBUFFERS_MAX_64_BUFFER_SIZE (std::numeric_limits<::flatbuffers::soffset64_t>::max)()
  ------------------
  |  Branch (101:33): [Folded, False: 33.9k]
  ------------------
  102|  33.9k|                                          : FLATBUFFERS_MAX_BUFFER_SIZE)),
  ------------------
  |  |  342|  67.9k|#define FLATBUFFERS_MAX_BUFFER_SIZE (std::numeric_limits<::flatbuffers::soffset_t>::max)()
  ------------------
  103|  33.9k|        num_field_loc(0),
  104|  33.9k|        max_voffset_(0),
  105|  33.9k|        length_of_64_bit_region_(0),
  106|  33.9k|        nested(false),
  107|  33.9k|        finished(false),
  108|  33.9k|        minalign_(1),
  109|  33.9k|        force_defaults_(false),
  110|  33.9k|        dedup_vtables_(true),
  111|  33.9k|        string_pool(nullptr) {
  112|  33.9k|    EndianCheck();
  113|  33.9k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EED2Ev:
  158|  33.9k|  ~FlatBufferBuilderImpl() {
  159|  33.9k|    if (string_pool) delete string_pool;
  ------------------
  |  Branch (159:9): [True: 5.11k, False: 28.8k]
  ------------------
  160|  33.9k|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE16GetBufferPointerEv:
  209|  5.09k|  uint8_t* GetBufferPointer() const {
  210|  5.09k|    Finished();
  211|  5.09k|    return buf_.data();
  212|  5.09k|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE8FinishedEv:
  262|  5.09k|  void Finished() const {
  263|       |    // If you get this assert, you're attempting to get access a buffer
  264|       |    // which hasn't been finished yet. Be sure to call
  265|       |    // FlatBufferBuilder::Finish with your root table.
  266|       |    // If you really need to access an unfinished buffer, call
  267|       |    // GetCurrentBufferPointer instead.
  268|  5.09k|    FLATBUFFERS_ASSERT(finished);
  269|  5.09k|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE7GetSizeEv:
  181|  8.73M|  SizeT GetSize() const { return buf_.size(); }
_ZN11flatbuffers18FieldIndexToOffsetEt:
   44|   741k|inline voffset_t FieldIndexToOffset(voffset_t field_id) {
   45|       |  // Should correspond to what EndTable() below builds up.
   46|   741k|  const voffset_t fixed_fields =
   47|   741k|      2 * sizeof(voffset_t);  // Vtable size and Object Size.
   48|   741k|  size_t offset = fixed_fields + field_id * sizeof(voffset_t);
   49|   741k|  FLATBUFFERS_ASSERT(offset < std::numeric_limits<voffset_t>::max());
   50|   741k|  return static_cast<voffset_t>(offset);
   51|   741k|}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIaEEvtT_S3_:
  338|   470k|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|   470k|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 345k, False: 125k]
  |  Branch (340:32): [True: 345k, False: 0]
  ------------------
  341|   125k|    TrackField(field, PushElement(e));
  342|   125k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10TrackFieldEtj:
  327|  1.89M|  void TrackField(voffset_t field, uoffset_t off) {
  328|  1.89M|    FieldLoc fl = {off, field};
  329|  1.89M|    buf_.scratch_push_small(fl);
  330|  1.89M|    num_field_loc++;
  331|  1.89M|    if (field > max_voffset_) {
  ------------------
  |  Branch (331:9): [True: 713k, False: 1.18M]
  ------------------
  332|   713k|      max_voffset_ = field;
  333|   713k|    }
  334|  1.89M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIajEET0_T_:
  312|   135k|  ReturnT PushElement(T element) {
  313|   135k|    AssertScalarT<T>();
  314|   135k|    Align(sizeof(T));
  315|   135k|    buf_.push_small(EndianScalar(element));
  316|   135k|    return CalculateOffset<ReturnT>();
  317|   135k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTIaEEvv:
  305|   135k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|   135k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|   135k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE5AlignEm:
  290|  4.91M|  void Align(size_t elem_size) {
  291|  4.91M|    TrackMinAlign(elem_size);
  292|  4.91M|    buf_.fill(PaddingBytes(buf_.size(), elem_size));
  293|  4.91M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13TrackMinAlignEm:
  286|  5.63M|  void TrackMinAlign(size_t elem_size) {
  287|  5.63M|    if (elem_size > minalign_) minalign_ = elem_size;
  ------------------
  |  Branch (287:9): [True: 17.4k, False: 5.61M]
  ------------------
  288|  5.63M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE15CalculateOffsetIjEENSt3__19enable_ifIXsr3std7is_sameIT_jEE5valueES5_E4typeEv:
 1440|  4.06M|  CalculateOffset() {
 1441|       |    // Default to the end of the 32-bit region. This may or may not be the end
 1442|       |    // of the buffer, depending on if any 64-bit offsets have been added.
 1443|  4.06M|    return GetSizeRelative32BitRegion();
 1444|  4.06M|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE26GetSizeRelative32BitRegionILb0EEENSt3__19enable_ifIXntT_EjE4typeEv:
  202|  7.97M|      const {
  203|  7.97M|    return static_cast<uoffset_t>(GetSize());
  204|  7.97M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIiEEvtT_S3_:
  338|   347k|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|   347k|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 172k, False: 175k]
  |  Branch (340:32): [True: 172k, False: 0]
  ------------------
  341|   175k|    TrackField(field, PushElement(e));
  342|   175k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIijEET0_T_:
  312|   856k|  ReturnT PushElement(T element) {
  313|   856k|    AssertScalarT<T>();
  314|   856k|    Align(sizeof(T));
  315|   856k|    buf_.push_small(EndianScalar(element));
  316|   856k|    return CalculateOffset<ReturnT>();
  317|   856k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTIiEEvv:
  305|   856k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|   856k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|   856k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementItEEvtT_S3_:
  338|   351k|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|   351k|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 286k, False: 65.1k]
  |  Branch (340:32): [True: 286k, False: 0]
  ------------------
  341|  65.1k|    TrackField(field, PushElement(e));
  342|  65.1k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementItjEET0_T_:
  312|  68.1k|  ReturnT PushElement(T element) {
  313|  68.1k|    AssertScalarT<T>();
  314|  68.1k|    Align(sizeof(T));
  315|  68.1k|    buf_.push_small(EndianScalar(element));
  316|  68.1k|    return CalculateOffset<ReturnT>();
  317|  68.1k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTItEEvv:
  305|  68.1k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|  68.1k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|  68.1k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIjEEvtT_S3_:
  338|  1.32M|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|  1.32M|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 28.2k, False: 1.29M]
  |  Branch (340:32): [True: 28.2k, False: 0]
  ------------------
  341|  1.29M|    TrackField(field, PushElement(e));
  342|  1.29M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIjjEET0_T_:
  312|  2.30M|  ReturnT PushElement(T element) {
  313|  2.30M|    AssertScalarT<T>();
  314|  2.30M|    Align(sizeof(T));
  315|  2.30M|    buf_.push_small(EndianScalar(element));
  316|  2.30M|    return CalculateOffset<ReturnT>();
  317|  2.30M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTIjEEvv:
  305|  2.94M|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|  2.94M|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|  2.94M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10StartTableEv:
  420|   662k|  uoffset_t StartTable() {
  421|   662k|    NotNested();
  422|   662k|    nested = true;
  423|   662k|    return GetSizeRelative32BitRegion();
  424|   662k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9NotNestedEv:
  404|  1.30M|  void NotNested() {
  405|       |    // If you hit this, you're trying to construct a Table/Vector/String
  406|       |    // during the construction of its parent table (between the MyTableBuilder
  407|       |    // and table.Finish().
  408|       |    // Move the creation of these sub-objects to above the MyTableBuilder to
  409|       |    // not get this assert.
  410|       |    // Ignoring this assert may appear to work in simple cases, but the reason
  411|       |    // it is here is that storing objects in-line may cause vtable offsets
  412|       |    // to not fit anymore. It also leads to vtable duplication.
  413|  1.30M|    FLATBUFFERS_ASSERT(!nested);
  414|       |    // If you hit this, fields were added outside the scope of a table.
  415|  1.30M|    FLATBUFFERS_ASSERT(!num_field_loc);
  416|  1.30M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8EndTableEj:
  429|   662k|  uoffset_t EndTable(uoffset_t start) {
  430|       |    // If you get this assert, a corresponding StartTable wasn't called.
  431|   662k|    FLATBUFFERS_ASSERT(nested);
  432|       |    // Write the vtable offset, which is the start of any Table.
  433|       |    // We fill its value later.
  434|       |    // This is relative to the end of the 32-bit region.
  435|   662k|    const uoffset_t vtable_offset_loc =
  436|   662k|        static_cast<uoffset_t>(PushElement<soffset_t>(0));
  437|       |    // Write a vtable, which consists entirely of voffset_t elements.
  438|       |    // It starts with the number of offsets, followed by a type id, followed
  439|       |    // by the offsets themselves. In reverse:
  440|       |    // Include space for the last offset and ensure empty tables have a
  441|       |    // minimum size.
  442|   662k|    max_voffset_ =
  443|   662k|        (std::max)(static_cast<voffset_t>(max_voffset_ + sizeof(voffset_t)),
  444|   662k|                   FieldIndexToOffset(0));
  445|   662k|    buf_.fill_big(max_voffset_);
  446|   662k|    const uoffset_t table_object_size = vtable_offset_loc - start;
  447|       |    // Vtable use 16bit offsets.
  448|   662k|    FLATBUFFERS_ASSERT(table_object_size < 0x10000);
  449|   662k|    WriteScalar<voffset_t>(buf_.data() + sizeof(voffset_t),
  450|   662k|                           static_cast<voffset_t>(table_object_size));
  451|   662k|    WriteScalar<voffset_t>(buf_.data(), max_voffset_);
  452|       |    // Write the offsets into the table
  453|   662k|    for (auto it = buf_.scratch_end() - num_field_loc * sizeof(FieldLoc);
  454|  2.53M|         it < buf_.scratch_end(); it += sizeof(FieldLoc)) {
  ------------------
  |  Branch (454:10): [True: 1.87M, False: 662k]
  ------------------
  455|  1.87M|      auto field_location = reinterpret_cast<FieldLoc*>(it);
  456|  1.87M|      const voffset_t pos =
  457|  1.87M|          static_cast<voffset_t>(vtable_offset_loc - field_location->off);
  458|       |      // If this asserts, it means you've set a field twice.
  459|  1.87M|      FLATBUFFERS_ASSERT(
  460|  1.87M|          !ReadScalar<voffset_t>(buf_.data() + field_location->id));
  461|  1.87M|      WriteScalar<voffset_t>(buf_.data() + field_location->id, pos);
  462|  1.87M|    }
  463|   662k|    ClearOffsets();
  464|   662k|    auto vt1 = reinterpret_cast<voffset_t*>(buf_.data());
  465|   662k|    auto vt1_size = ReadScalar<voffset_t>(vt1);
  466|   662k|    auto vt_use = GetSizeRelative32BitRegion();
  467|       |    // See if we already have generated a vtable with this exact same
  468|       |    // layout before. If so, make it point to the old one, remove this one.
  469|   662k|    if (dedup_vtables_) {
  ------------------
  |  Branch (469:9): [True: 662k, False: 0]
  ------------------
  470|  1.89M|      for (auto it = buf_.scratch_data(); it < buf_.scratch_end();
  ------------------
  |  Branch (470:43): [True: 1.86M, False: 35.9k]
  ------------------
  471|  1.86M|           it += sizeof(uoffset_t)) {
  472|  1.86M|        auto vt_offset_ptr = reinterpret_cast<uoffset_t*>(it);
  473|  1.86M|        auto vt2 = reinterpret_cast<voffset_t*>(
  474|  1.86M|            buf_.data_at(*vt_offset_ptr + length_of_64_bit_region_));
  475|  1.86M|        auto vt2_size = ReadScalar<voffset_t>(vt2);
  476|  1.86M|        if (vt1_size != vt2_size || 0 != memcmp(vt2, vt1, vt1_size)) continue;
  ------------------
  |  Branch (476:13): [True: 1.00M, False: 855k]
  |  Branch (476:37): [True: 229k, False: 626k]
  ------------------
  477|   626k|        vt_use = *vt_offset_ptr;
  478|   626k|        buf_.pop(GetSizeRelative32BitRegion() - vtable_offset_loc);
  479|   626k|        break;
  480|  1.86M|      }
  481|   662k|    }
  482|       |    // If this is a new vtable, remember it.
  483|   662k|    if (vt_use == GetSizeRelative32BitRegion()) {
  ------------------
  |  Branch (483:9): [True: 35.9k, False: 626k]
  ------------------
  484|  35.9k|      buf_.scratch_push_small(vt_use);
  485|  35.9k|    }
  486|       |    // Fill the vtable offset we created above.
  487|       |    // The offset points from the beginning of the object to where the vtable is
  488|       |    // stored.
  489|       |    // Offsets default direction is downward in memory for future format
  490|       |    // flexibility (storing all vtables at the start of the file).
  491|   662k|    WriteScalar(buf_.data_at(vtable_offset_loc + length_of_64_bit_region_),
  492|   662k|                static_cast<soffset_t>(vt_use) -
  493|   662k|                    static_cast<soffset_t>(vtable_offset_loc));
  494|   662k|    nested = false;
  495|   662k|    return vtable_offset_loc;
  496|   662k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12ClearOffsetsEv:
  521|   766k|  void ClearOffsets() {
  522|   766k|    buf_.scratch_pop(num_field_loc * sizeof(FieldLoc));
  523|   766k|    num_field_loc = 0;
  524|   766k|    max_voffset_ = 0;
  525|   766k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6StringEEEvtNS_6OffsetIT_EE:
  350|   437k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|   437k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 437k]
  ------------------
  352|   437k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|   437k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE7ReferToEj:
  376|  1.23M|  uoffset_t ReferTo(uoffset_t off) {
  377|       |    // Align to ensure GetSizeRelative32BitRegion() below is correct.
  378|  1.23M|    Align(sizeof(uoffset_t));
  379|       |    // 32-bit offsets are relative to the tail of the 32-bit region of the
  380|       |    // buffer. For most cases (without 64-bit entities) this is equivalent to
  381|       |    // size of the whole buffer (e.g. GetSize())
  382|  1.23M|    return ReferTo(off, GetSizeRelative32BitRegion());
  383|  1.23M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE7ReferToIjEET_S3_S3_:
  399|  1.23M|  T ReferTo(const T off, const T size) {
  400|  1.23M|    FLATBUFFERS_ASSERT(off && off <= size);
  401|  1.23M|    return size - off + static_cast<T>(sizeof(T));
  402|  1.23M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8RequiredIN10reflection8KeyValueEEEvNS_6OffsetIT_EEt:
  506|    704|  void Required(Offset<T> table, voffset_t field) {
  507|    704|    auto table_ptr = reinterpret_cast<const Table*>(buf_.data_at(table.o));
  508|    704|    bool ok = table_ptr->GetOptionalFieldOffset(field) != 0;
  509|       |    // If this fails, the caller will show what field needs to be set.
  510|    704|    FLATBUFFERS_ASSERT(ok);
  511|    704|    (void)ok;
  512|    704|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateStringINS_6OffsetEEET_INS_6StringEEPKcm:
  549|   442k|  OffsetT<String> CreateString(const char* str, size_t len) {
  550|   442k|    CreateStringImpl(str, len);
  551|   442k|    return OffsetT<String>(
  552|   442k|        CalculateOffset<typename OffsetT<String>::offset_type>());
  553|   442k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE16CreateStringImplEPKcm:
 1412|   442k|  void CreateStringImpl(const char* str, size_t len) {
 1413|   442k|    NotNested();
 1414|   442k|    PreAlign<uoffset_t>(len + 1);  // Always 0-terminated.
 1415|   442k|    buf_.fill(1);
 1416|   442k|    PushBytes(reinterpret_cast<const uint8_t*>(str), len);
 1417|   442k|    PushElement(static_cast<uoffset_t>(len));
 1418|   442k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8PreAlignIjEEvm:
  538|   636k|  void PreAlign(size_t len) {
  539|   636k|    AssertScalarT<AlignT>();
  540|   636k|    PreAlign(len, AlignOf<AlignT>());
  541|   636k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8PreAlignEmm:
  529|   844k|  void PreAlign(size_t len, size_t alignment) {
  530|   844k|    if (len == 0) return;
  ------------------
  |  Branch (530:9): [True: 132k, False: 712k]
  ------------------
  531|   712k|    TrackMinAlign(alignment);
  532|   712k|    buf_.fill(PaddingBytes(GetSize() + len, alignment));
  533|   712k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9PushBytesEPKhm:
  300|   478k|  void PushBytes(const uint8_t* bytes, size_t size) { buf_.push(bytes, size); }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIlEEvtT_S3_:
  338|   161k|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|   161k|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 117k, False: 43.4k]
  |  Branch (340:32): [True: 117k, False: 0]
  ------------------
  341|  43.4k|    TrackField(field, PushElement(e));
  342|  43.4k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIljEET0_T_:
  312|  54.5k|  ReturnT PushElement(T element) {
  313|  54.5k|    AssertScalarT<T>();
  314|  54.5k|    Align(sizeof(T));
  315|  54.5k|    buf_.push_small(EndianScalar(element));
  316|  54.5k|    return CalculateOffset<ReturnT>();
  317|  54.5k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTIlEEvv:
  305|  54.5k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|  54.5k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|  54.5k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetIN10reflection4TypeEEEvtNS_6OffsetIT_EE:
  350|   232k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|   232k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 232k]
  ------------------
  352|   232k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|   232k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetINS_6StringEEEjEEEEvtNS4_IT_EE:
  350|   290k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|   290k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 290k, False: 0]
  ------------------
  352|      0|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|      0|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetIN10reflection8KeyValueEEEjEEEEvtNS4_IT_EE:
  350|   290k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|   290k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 289k, False: 704]
  ------------------
  352|    704|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|    704|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8RequiredIN10reflection7EnumValEEEvNS_6OffsetIT_EEt:
  506|   115k|  void Required(Offset<T> table, voffset_t field) {
  507|   115k|    auto table_ptr = reinterpret_cast<const Table*>(buf_.data_at(table.o));
  508|   115k|    bool ok = table_ptr->GetOptionalFieldOffset(field) != 0;
  509|       |    // If this fails, the caller will show what field needs to be set.
  510|   115k|    FLATBUFFERS_ASSERT(ok);
  511|   115k|    (void)ok;
  512|   115k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorINS_6OffsetEjEEvmmm:
  692|   194k|  void StartVector(size_t len, size_t elemsize, size_t alignment) {
  693|   194k|    NotNested();
  694|   194k|    nested = true;
  695|       |    // Align to the Length type of the vector (either 32-bit or 64-bit), so
  696|       |    // that the length of the buffer can be added without padding.
  697|   194k|    PreAlign<LenT>(len * elemsize);
  698|   194k|    PreAlign(len * elemsize, alignment);  // Just in case elemsize > uoffset_t.
  699|   194k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9EndVectorIjjEET0_m:
  684|   187k|  ReturnT EndVector(size_t len) {
  685|   187k|    FLATBUFFERS_ASSERT(nested);  // Hit if no corresponding StartVector.
  686|   187k|    nested = false;
  687|   187k|    return PushElement<LenT, ReturnT>(static_cast<LenT>(len));
  688|   187k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection8KeyValueENSt3__19allocatorINS_6OffsetIS4_EEEEEENS7_INS_6VectorINS7_IT_EEjEEEEPNS5_6vectorISC_T0_EE:
 1185|    704|      std::vector<Offset<T>, Alloc>* v) {
 1186|    704|    return CreateVectorOfSortedTables(data(*v), v->size());
 1187|    704|  }
_ZN11flatbuffers4dataINS_6OffsetIN10reflection8KeyValueEEENSt3__19allocatorIS4_EEEEPT_RNS5_6vectorIS8_T0_EE:
   61|    704|T* data(std::vector<T, Alloc>& v) {
   62|       |  // Eventually the returned pointer gets passed down to memcpy, so
   63|       |  // we need it to be non-null to avoid undefined behavior.
   64|    704|  static uint8_t t;
   65|    704|  return v.empty() ? reinterpret_cast<T*>(&t) : &v.front();
  ------------------
  |  Branch (65:10): [True: 0, False: 704]
  ------------------
   66|    704|}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection8KeyValueEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPS8_m:
 1171|    704|                                                       size_t len) {
 1172|    704|    std::stable_sort(v, v + len, TableKeyComparator<T>(buf_));
 1173|    704|    return CreateVector(v, len);
 1174|    704|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIN10reflection8KeyValueEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPKS8_m:
  802|    704|  Offset<Vector<Offset<T>>> CreateVector(const Offset<T>* v, size_t len) {
  803|    704|    StartVector<Offset<T>>(len);
  804|  1.40k|    for (auto i = len; i > 0;) {
  ------------------
  |  Branch (804:24): [True: 704, False: 704]
  ------------------
  805|    704|      PushElement(v[--i]);
  806|    704|    }
  807|    704|    return Offset<Vector<Offset<T>>>(EndVector(len));
  808|    704|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorINS_6OffsetIN10reflection8KeyValueEEES3_jEEvm:
  703|    704|  void StartVector(size_t len) {
  704|    704|    return StartVector<OffsetT, LenT>(len, sizeof(T), AlignOf<T>());
  705|    704|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIN10reflection8KeyValueENS_6OffsetEEEjT0_IT_E:
  320|    704|  uoffset_t PushElement(OffsetT<T> off) {
  321|       |    // Special case for offsets: see ReferTo below.
  322|    704|    return PushElement(ReferTo(off.o));
  323|    704|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetIN10reflection7EnumValEEEjEEEEvtNS4_IT_EE:
  350|  79.0k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|  79.0k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 79.0k]
  ------------------
  352|  79.0k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|  79.0k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIhEEvtT_S3_:
  338|   339k|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|   339k|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 226k, False: 113k]
  |  Branch (340:32): [True: 226k, False: 0]
  ------------------
  341|   113k|    TrackField(field, PushElement(e));
  342|   113k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIhjEET0_T_:
  312|   136k|  ReturnT PushElement(T element) {
  313|   136k|    AssertScalarT<T>();
  314|   136k|    Align(sizeof(T));
  315|   136k|    buf_.push_small(EndianScalar(element));
  316|   136k|    return CalculateOffset<ReturnT>();
  317|   136k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTIhEEvv:
  305|   140k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|   140k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|   140k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8RequiredIN10reflection4EnumEEEvNS_6OffsetIT_EEt:
  506|   237k|  void Required(Offset<T> table, voffset_t field) {
  507|   237k|    auto table_ptr = reinterpret_cast<const Table*>(buf_.data_at(table.o));
  508|   237k|    bool ok = table_ptr->GetOptionalFieldOffset(field) != 0;
  509|       |    // If this fails, the caller will show what field needs to be set.
  510|   237k|    FLATBUFFERS_ASSERT(ok);
  511|   237k|    (void)ok;
  512|   237k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIN10reflection7EnumValEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPKS8_m:
  802|  79.0k|  Offset<Vector<Offset<T>>> CreateVector(const Offset<T>* v, size_t len) {
  803|  79.0k|    StartVector<Offset<T>>(len);
  804|   194k|    for (auto i = len; i > 0;) {
  ------------------
  |  Branch (804:24): [True: 115k, False: 79.0k]
  ------------------
  805|   115k|      PushElement(v[--i]);
  806|   115k|    }
  807|  79.0k|    return Offset<Vector<Offset<T>>>(EndVector(len));
  808|  79.0k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorINS_6OffsetIN10reflection7EnumValEEES3_jEEvm:
  703|  79.0k|  void StartVector(size_t len) {
  704|  79.0k|    return StartVector<OffsetT, LenT>(len, sizeof(T), AlignOf<T>());
  705|  79.0k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIN10reflection7EnumValENS_6OffsetEEEjT0_IT_E:
  320|   115k|  uoffset_t PushElement(OffsetT<T> off) {
  321|       |    // Special case for offsets: see ReferTo below.
  322|   115k|    return PushElement(ReferTo(off.o));
  323|   115k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIdEEvtT_S3_:
  338|  48.6k|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|  48.6k|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 39.4k, False: 9.20k]
  |  Branch (340:32): [True: 39.4k, False: 0]
  ------------------
  341|  9.20k|    TrackField(field, PushElement(e));
  342|  9.20k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIdjEET0_T_:
  312|  15.0k|  ReturnT PushElement(T element) {
  313|  15.0k|    AssertScalarT<T>();
  314|  15.0k|    Align(sizeof(T));
  315|  15.0k|    buf_.push_small(EndianScalar(element));
  316|  15.0k|    return CalculateOffset<ReturnT>();
  317|  15.0k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTIdEEvv:
  305|  15.0k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|  15.0k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|  15.0k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8RequiredIN10reflection5FieldEEEvNS_6OffsetIT_EEt:
  506|  77.5k|  void Required(Offset<T> table, voffset_t field) {
  507|  77.5k|    auto table_ptr = reinterpret_cast<const Table*>(buf_.data_at(table.o));
  508|  77.5k|    bool ok = table_ptr->GetOptionalFieldOffset(field) != 0;
  509|       |    // If this fails, the caller will show what field needs to be set.
  510|  77.5k|    FLATBUFFERS_ASSERT(ok);
  511|  77.5k|    (void)ok;
  512|  77.5k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetIN10reflection5FieldEEEjEEEEvtNS4_IT_EE:
  350|  55.2k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|  55.2k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 55.2k]
  ------------------
  352|  55.2k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|  55.2k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8RequiredIN10reflection6ObjectEEEvNS_6OffsetIT_EEt:
  506|   110k|  void Required(Offset<T> table, voffset_t field) {
  507|   110k|    auto table_ptr = reinterpret_cast<const Table*>(buf_.data_at(table.o));
  508|   110k|    bool ok = table_ptr->GetOptionalFieldOffset(field) != 0;
  509|       |    // If this fails, the caller will show what field needs to be set.
  510|   110k|    FLATBUFFERS_ASSERT(ok);
  511|   110k|    (void)ok;
  512|   110k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection5FieldENSt3__19allocatorINS_6OffsetIS4_EEEEEENS7_INS_6VectorINS7_IT_EEjEEEEPNS5_6vectorISC_T0_EE:
 1185|  55.2k|      std::vector<Offset<T>, Alloc>* v) {
 1186|  55.2k|    return CreateVectorOfSortedTables(data(*v), v->size());
 1187|  55.2k|  }
_ZN11flatbuffers4dataINS_6OffsetIN10reflection5FieldEEENSt3__19allocatorIS4_EEEEPT_RNS5_6vectorIS8_T0_EE:
   61|  55.2k|T* data(std::vector<T, Alloc>& v) {
   62|       |  // Eventually the returned pointer gets passed down to memcpy, so
   63|       |  // we need it to be non-null to avoid undefined behavior.
   64|  55.2k|  static uint8_t t;
   65|  55.2k|  return v.empty() ? reinterpret_cast<T*>(&t) : &v.front();
  ------------------
  |  Branch (65:10): [True: 40.9k, False: 14.3k]
  ------------------
   66|  55.2k|}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection5FieldEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPS8_m:
 1171|  55.2k|                                                       size_t len) {
 1172|  55.2k|    std::stable_sort(v, v + len, TableKeyComparator<T>(buf_));
 1173|  55.2k|    return CreateVector(v, len);
 1174|  55.2k|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection5FieldEEclERKNS_6OffsetIS4_EES9_:
 1148|   160k|    bool operator()(const Offset<T>& a, const Offset<T>& b) const {
 1149|   160k|      auto table_a = reinterpret_cast<T*>(buf_.data_at(a.o));
 1150|   160k|      auto table_b = reinterpret_cast<T*>(buf_.data_at(b.o));
 1151|   160k|      return table_a->KeyCompareLessThan(table_b);
 1152|   160k|    }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIN10reflection5FieldEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPKS8_m:
  802|  55.2k|  Offset<Vector<Offset<T>>> CreateVector(const Offset<T>* v, size_t len) {
  803|  55.2k|    StartVector<Offset<T>>(len);
  804|  94.0k|    for (auto i = len; i > 0;) {
  ------------------
  |  Branch (804:24): [True: 38.7k, False: 55.2k]
  ------------------
  805|  38.7k|      PushElement(v[--i]);
  806|  38.7k|    }
  807|  55.2k|    return Offset<Vector<Offset<T>>>(EndVector(len));
  808|  55.2k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorINS_6OffsetIN10reflection5FieldEEES3_jEEvm:
  703|  55.2k|  void StartVector(size_t len) {
  704|  55.2k|    return StartVector<OffsetT, LenT>(len, sizeof(T), AlignOf<T>());
  705|  55.2k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIN10reflection5FieldENS_6OffsetEEEjT0_IT_E:
  320|  38.7k|  uoffset_t PushElement(OffsetT<T> off) {
  321|       |    // Special case for offsets: see ReferTo below.
  322|  38.7k|    return PushElement(ReferTo(off.o));
  323|  38.7k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetIN10reflection6ObjectEEEvtNS_6OffsetIT_EE:
  350|  8.05k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|  8.05k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 4.88k, False: 3.17k]
  ------------------
  352|  3.17k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|  3.17k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8RequiredIN10reflection7RPCCallEEEvNS_6OffsetIT_EEt:
  506|  4.44k|  void Required(Offset<T> table, voffset_t field) {
  507|  4.44k|    auto table_ptr = reinterpret_cast<const Table*>(buf_.data_at(table.o));
  508|  4.44k|    bool ok = table_ptr->GetOptionalFieldOffset(field) != 0;
  509|       |    // If this fails, the caller will show what field needs to be set.
  510|  4.44k|    FLATBUFFERS_ASSERT(ok);
  511|  4.44k|    (void)ok;
  512|  4.44k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetIN10reflection7RPCCallEEEjEEEEvtNS4_IT_EE:
  350|    743|  void AddOffset(voffset_t field, Offset<T> off) {
  351|    743|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 743]
  ------------------
  352|    743|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|    743|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8RequiredIN10reflection7ServiceEEEvNS_6OffsetIT_EEt:
  506|    743|  void Required(Offset<T> table, voffset_t field) {
  507|    743|    auto table_ptr = reinterpret_cast<const Table*>(buf_.data_at(table.o));
  508|    743|    bool ok = table_ptr->GetOptionalFieldOffset(field) != 0;
  509|       |    // If this fails, the caller will show what field needs to be set.
  510|    743|    FLATBUFFERS_ASSERT(ok);
  511|    743|    (void)ok;
  512|    743|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIN10reflection7RPCCallEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPKS8_m:
  802|    743|  Offset<Vector<Offset<T>>> CreateVector(const Offset<T>* v, size_t len) {
  803|    743|    StartVector<Offset<T>>(len);
  804|  2.22k|    for (auto i = len; i > 0;) {
  ------------------
  |  Branch (804:24): [True: 1.48k, False: 743]
  ------------------
  805|  1.48k|      PushElement(v[--i]);
  806|  1.48k|    }
  807|    743|    return Offset<Vector<Offset<T>>>(EndVector(len));
  808|    743|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorINS_6OffsetIN10reflection7RPCCallEEES3_jEEvm:
  703|    743|  void StartVector(size_t len) {
  704|    743|    return StartVector<OffsetT, LenT>(len, sizeof(T), AlignOf<T>());
  705|    743|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIN10reflection7RPCCallENS_6OffsetEEEjT0_IT_E:
  320|  1.48k|  uoffset_t PushElement(OffsetT<T> off) {
  321|       |    // Special case for offsets: see ReferTo below.
  322|  1.48k|    return PushElement(ReferTo(off.o));
  323|  1.48k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetIN10reflection6ObjectEEEjEEEEvtNS4_IT_EE:
  350|  5.09k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|  5.09k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 5.09k]
  ------------------
  352|  5.09k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|  5.09k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetIN10reflection4EnumEEEjEEEEvtNS4_IT_EE:
  350|  5.09k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|  5.09k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 5.09k]
  ------------------
  352|  5.09k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|  5.09k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetIN10reflection7ServiceEEEjEEEEvtNS4_IT_EE:
  350|  5.09k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|  5.09k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 5.09k]
  ------------------
  352|  5.09k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|  5.09k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementImEEvtT_S3_:
  338|  20.0k|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|  20.0k|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 5.49k, False: 14.5k]
  |  Branch (340:32): [True: 5.49k, False: 0]
  ------------------
  341|  14.5k|    TrackField(field, PushElement(e));
  342|  14.5k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementImjEET0_T_:
  312|  31.1k|  ReturnT PushElement(T element) {
  313|  31.1k|    AssertScalarT<T>();
  314|  31.1k|    Align(sizeof(T));
  315|  31.1k|    buf_.push_small(EndianScalar(element));
  316|  31.1k|    return CalculateOffset<ReturnT>();
  317|  31.1k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTImEEvv:
  305|  31.1k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|  31.1k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|  31.1k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetIN10reflection10SchemaFileEEEjEEEEvtNS4_IT_EE:
  350|  5.09k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|  5.09k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 5.09k, False: 0]
  ------------------
  352|      0|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|      0|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8RequiredIN10reflection6SchemaEEEvNS_6OffsetIT_EEt:
  506|  10.1k|  void Required(Offset<T> table, voffset_t field) {
  507|  10.1k|    auto table_ptr = reinterpret_cast<const Table*>(buf_.data_at(table.o));
  508|  10.1k|    bool ok = table_ptr->GetOptionalFieldOffset(field) != 0;
  509|       |    // If this fails, the caller will show what field needs to be set.
  510|  10.1k|    FLATBUFFERS_ASSERT(ok);
  511|  10.1k|    (void)ok;
  512|  10.1k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection6ObjectENSt3__19allocatorINS_6OffsetIS4_EEEEEENS7_INS_6VectorINS7_IT_EEjEEEEPNS5_6vectorISC_T0_EE:
 1185|  5.09k|      std::vector<Offset<T>, Alloc>* v) {
 1186|  5.09k|    return CreateVectorOfSortedTables(data(*v), v->size());
 1187|  5.09k|  }
_ZN11flatbuffers4dataINS_6OffsetIN10reflection6ObjectEEENSt3__19allocatorIS4_EEEEPT_RNS5_6vectorIS8_T0_EE:
   61|  5.09k|T* data(std::vector<T, Alloc>& v) {
   62|       |  // Eventually the returned pointer gets passed down to memcpy, so
   63|       |  // we need it to be non-null to avoid undefined behavior.
   64|  5.09k|  static uint8_t t;
   65|  5.09k|  return v.empty() ? reinterpret_cast<T*>(&t) : &v.front();
  ------------------
  |  Branch (65:10): [True: 2.40k, False: 2.69k]
  ------------------
   66|  5.09k|}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection6ObjectEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPS8_m:
 1171|  5.09k|                                                       size_t len) {
 1172|  5.09k|    std::stable_sort(v, v + len, TableKeyComparator<T>(buf_));
 1173|  5.09k|    return CreateVector(v, len);
 1174|  5.09k|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection6ObjectEEclERKNS_6OffsetIS4_EES9_:
 1148|   670k|    bool operator()(const Offset<T>& a, const Offset<T>& b) const {
 1149|   670k|      auto table_a = reinterpret_cast<T*>(buf_.data_at(a.o));
 1150|   670k|      auto table_b = reinterpret_cast<T*>(buf_.data_at(b.o));
 1151|   670k|      return table_a->KeyCompareLessThan(table_b);
 1152|   670k|    }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIN10reflection6ObjectEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPKS8_m:
  802|  5.09k|  Offset<Vector<Offset<T>>> CreateVector(const Offset<T>* v, size_t len) {
  803|  5.09k|    StartVector<Offset<T>>(len);
  804|  60.3k|    for (auto i = len; i > 0;) {
  ------------------
  |  Branch (804:24): [True: 55.2k, False: 5.09k]
  ------------------
  805|  55.2k|      PushElement(v[--i]);
  806|  55.2k|    }
  807|  5.09k|    return Offset<Vector<Offset<T>>>(EndVector(len));
  808|  5.09k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorINS_6OffsetIN10reflection6ObjectEEES3_jEEvm:
  703|  5.09k|  void StartVector(size_t len) {
  704|  5.09k|    return StartVector<OffsetT, LenT>(len, sizeof(T), AlignOf<T>());
  705|  5.09k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIN10reflection6ObjectENS_6OffsetEEEjT0_IT_E:
  320|  55.2k|  uoffset_t PushElement(OffsetT<T> off) {
  321|       |    // Special case for offsets: see ReferTo below.
  322|  55.2k|    return PushElement(ReferTo(off.o));
  323|  55.2k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection4EnumENSt3__19allocatorINS_6OffsetIS4_EEEEEENS7_INS_6VectorINS7_IT_EEjEEEEPNS5_6vectorISC_T0_EE:
 1185|  5.09k|      std::vector<Offset<T>, Alloc>* v) {
 1186|  5.09k|    return CreateVectorOfSortedTables(data(*v), v->size());
 1187|  5.09k|  }
_ZN11flatbuffers4dataINS_6OffsetIN10reflection4EnumEEENSt3__19allocatorIS4_EEEEPT_RNS5_6vectorIS8_T0_EE:
   61|  5.09k|T* data(std::vector<T, Alloc>& v) {
   62|       |  // Eventually the returned pointer gets passed down to memcpy, so
   63|       |  // we need it to be non-null to avoid undefined behavior.
   64|  5.09k|  static uint8_t t;
   65|  5.09k|  return v.empty() ? reinterpret_cast<T*>(&t) : &v.front();
  ------------------
  |  Branch (65:10): [True: 1.38k, False: 3.71k]
  ------------------
   66|  5.09k|}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection4EnumEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPS8_m:
 1171|  5.09k|                                                       size_t len) {
 1172|  5.09k|    std::stable_sort(v, v + len, TableKeyComparator<T>(buf_));
 1173|  5.09k|    return CreateVector(v, len);
 1174|  5.09k|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection4EnumEEclERKNS_6OffsetIS4_EES9_:
 1148|  1.29M|    bool operator()(const Offset<T>& a, const Offset<T>& b) const {
 1149|  1.29M|      auto table_a = reinterpret_cast<T*>(buf_.data_at(a.o));
 1150|  1.29M|      auto table_b = reinterpret_cast<T*>(buf_.data_at(b.o));
 1151|  1.29M|      return table_a->KeyCompareLessThan(table_b);
 1152|  1.29M|    }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIN10reflection4EnumEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPKS8_m:
  802|  5.09k|  Offset<Vector<Offset<T>>> CreateVector(const Offset<T>* v, size_t len) {
  803|  5.09k|    StartVector<Offset<T>>(len);
  804|  84.1k|    for (auto i = len; i > 0;) {
  ------------------
  |  Branch (804:24): [True: 79.0k, False: 5.09k]
  ------------------
  805|  79.0k|      PushElement(v[--i]);
  806|  79.0k|    }
  807|  5.09k|    return Offset<Vector<Offset<T>>>(EndVector(len));
  808|  5.09k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorINS_6OffsetIN10reflection4EnumEEES3_jEEvm:
  703|  5.09k|  void StartVector(size_t len) {
  704|  5.09k|    return StartVector<OffsetT, LenT>(len, sizeof(T), AlignOf<T>());
  705|  5.09k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIN10reflection4EnumENS_6OffsetEEEjT0_IT_E:
  320|  79.0k|  uoffset_t PushElement(OffsetT<T> off) {
  321|       |    // Special case for offsets: see ReferTo below.
  322|  79.0k|    return PushElement(ReferTo(off.o));
  323|  79.0k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection7ServiceENSt3__19allocatorINS_6OffsetIS4_EEEEEENS7_INS_6VectorINS7_IT_EEjEEEEPNS5_6vectorISC_T0_EE:
 1185|  5.09k|      std::vector<Offset<T>, Alloc>* v) {
 1186|  5.09k|    return CreateVectorOfSortedTables(data(*v), v->size());
 1187|  5.09k|  }
_ZN11flatbuffers4dataINS_6OffsetIN10reflection7ServiceEEENSt3__19allocatorIS4_EEEEPT_RNS5_6vectorIS8_T0_EE:
   61|  5.09k|T* data(std::vector<T, Alloc>& v) {
   62|       |  // Eventually the returned pointer gets passed down to memcpy, so
   63|       |  // we need it to be non-null to avoid undefined behavior.
   64|  5.09k|  static uint8_t t;
   65|  5.09k|  return v.empty() ? reinterpret_cast<T*>(&t) : &v.front();
  ------------------
  |  Branch (65:10): [True: 4.81k, False: 282]
  ------------------
   66|  5.09k|}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection7ServiceEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPS8_m:
 1171|  5.09k|                                                       size_t len) {
 1172|  5.09k|    std::stable_sort(v, v + len, TableKeyComparator<T>(buf_));
 1173|  5.09k|    return CreateVector(v, len);
 1174|  5.09k|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection7ServiceEEclERKNS_6OffsetIS4_EES9_:
 1148|  1.47k|    bool operator()(const Offset<T>& a, const Offset<T>& b) const {
 1149|  1.47k|      auto table_a = reinterpret_cast<T*>(buf_.data_at(a.o));
 1150|  1.47k|      auto table_b = reinterpret_cast<T*>(buf_.data_at(b.o));
 1151|  1.47k|      return table_a->KeyCompareLessThan(table_b);
 1152|  1.47k|    }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIN10reflection7ServiceEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPKS8_m:
  802|  5.09k|  Offset<Vector<Offset<T>>> CreateVector(const Offset<T>* v, size_t len) {
  803|  5.09k|    StartVector<Offset<T>>(len);
  804|  5.84k|    for (auto i = len; i > 0;) {
  ------------------
  |  Branch (804:24): [True: 743, False: 5.09k]
  ------------------
  805|    743|      PushElement(v[--i]);
  806|    743|    }
  807|  5.09k|    return Offset<Vector<Offset<T>>>(EndVector(len));
  808|  5.09k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorINS_6OffsetIN10reflection7ServiceEEES3_jEEvm:
  703|  5.09k|  void StartVector(size_t len) {
  704|  5.09k|    return StartVector<OffsetT, LenT>(len, sizeof(T), AlignOf<T>());
  705|  5.09k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIN10reflection7ServiceENS_6OffsetEEEjT0_IT_E:
  320|    743|  uoffset_t PushElement(OffsetT<T> off) {
  321|       |    // Special case for offsets: see ReferTo below.
  322|    743|    return PushElement(ReferTo(off.o));
  323|    743|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE6FinishIN10reflection6SchemaEEEvNS_6OffsetIT_EEPKc:
 1263|  5.09k|  void Finish(Offset<T> root, const char* file_identifier = nullptr) {
 1264|  5.09k|    Finish(root.o, file_identifier, false);
 1265|  5.09k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE6FinishEjPKcb:
 1293|  5.32k|  void Finish(uoffset_t root, const char* file_identifier, bool size_prefix) {
 1294|       |    // A buffer can only be finished once. To reuse a builder use `clear()`.
 1295|  5.32k|    FLATBUFFERS_ASSERT(!finished);
 1296|       |
 1297|  5.32k|    NotNested();
 1298|  5.32k|    buf_.clear_scratch();
 1299|       |
 1300|  5.32k|    const size_t prefix_size = size_prefix ? sizeof(SizeT) : 0;
  ------------------
  |  Branch (1300:32): [True: 0, False: 5.32k]
  ------------------
 1301|       |    // Make sure we track the alignment of the size prefix.
 1302|  5.32k|    TrackMinAlign(prefix_size);
 1303|       |
 1304|  5.32k|    const size_t root_offset_size = sizeof(uoffset_t);
 1305|  5.32k|    const size_t file_id_size = file_identifier ? kFileIdentifierLength : 0;
  ------------------
  |  Branch (1305:33): [True: 5.10k, False: 222]
  ------------------
 1306|       |
 1307|       |    // This will cause the whole buffer to be aligned.
 1308|  5.32k|    PreAlign(prefix_size + root_offset_size + file_id_size, minalign_);
 1309|       |
 1310|  5.32k|    if (file_identifier) {
  ------------------
  |  Branch (1310:9): [True: 5.10k, False: 222]
  ------------------
 1311|  5.10k|      FLATBUFFERS_ASSERT(strlen(file_identifier) == kFileIdentifierLength);
 1312|  5.10k|      PushBytes(reinterpret_cast<const uint8_t*>(file_identifier),
 1313|  5.10k|                kFileIdentifierLength);
 1314|  5.10k|    }
 1315|  5.32k|    PushElement(ReferTo(root));  // Location of root.
 1316|  5.32k|    if (size_prefix) {
  ------------------
  |  Branch (1316:9): [True: 0, False: 5.32k]
  ------------------
 1317|      0|      PushElement(GetSize());
 1318|      0|    }
 1319|  5.32k|    finished = true;
 1320|  5.32k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection8KeyValueEEC2ERNS_15vector_downwardIjEE:
 1146|    704|    explicit TableKeyComparator(vector_downward<SizeT>& buf) : buf_(buf) {}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection5FieldEEC2ERNS_15vector_downwardIjEE:
 1146|  55.2k|    explicit TableKeyComparator(vector_downward<SizeT>& buf) : buf_(buf) {}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection6ObjectEEC2ERNS_15vector_downwardIjEE:
 1146|  5.09k|    explicit TableKeyComparator(vector_downward<SizeT>& buf) : buf_(buf) {}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection4EnumEEC2ERNS_15vector_downwardIjEE:
 1146|  5.09k|    explicit TableKeyComparator(vector_downward<SizeT>& buf) : buf_(buf) {}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection7ServiceEEC2ERNS_15vector_downwardIjEE:
 1146|  5.09k|    explicit TableKeyComparator(vector_downward<SizeT>& buf) : buf_(buf) {}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE18CreateSharedStringENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
  647|   137k|  Offset<String> CreateSharedString(const flatbuffers::string_view str) {
  648|   137k|    return CreateSharedString(str.data(), str.size());
  649|   137k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE18CreateSharedStringEPKcm:
  618|   137k|  Offset<String> CreateSharedString(const char* str, size_t len) {
  619|   137k|    FLATBUFFERS_ASSERT(FLATBUFFERS_GENERAL_HEAP_ALLOC_OK);
  620|   137k|    if (!string_pool) {
  ------------------
  |  Branch (620:9): [True: 5.11k, False: 131k]
  ------------------
  621|  5.11k|      string_pool = new StringOffsetMap(StringOffsetCompare(buf_));
  622|  5.11k|    }
  623|       |
  624|   137k|    const size_t size_before_string = buf_.size();
  625|       |    // Must first serialize the string, since the set is all offsets into
  626|       |    // buffer.
  627|   137k|    const Offset<String> off = CreateString<Offset>(str, len);
  628|   137k|    auto it = string_pool->find(off);
  629|       |    // If it exists we reuse existing serialized data!
  630|   137k|    if (it != string_pool->end()) {
  ------------------
  |  Branch (630:9): [True: 130k, False: 6.37k]
  ------------------
  631|       |      // We can remove the string we serialized.
  632|   130k|      buf_.pop(buf_.size() - size_before_string);
  633|   130k|      return *it;
  634|   130k|    }
  635|       |    // Record this string for future use.
  636|  6.37k|    string_pool->insert(off);
  637|  6.37k|    return off;
  638|   137k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE19StringOffsetCompareC2ERKNS_15vector_downwardIjEE:
 1370|  5.11k|        : buf_(&buf) {}
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE19StringOffsetCompareclERKNS_6OffsetINS_6StringEEES7_:
 1371|   276k|    bool operator()(const Offset<String>& a, const Offset<String>& b) const {
 1372|   276k|      auto stra = reinterpret_cast<const String*>(buf_->data_at(a.o));
 1373|   276k|      auto strb = reinterpret_cast<const String*>(buf_->data_at(b.o));
 1374|   276k|      return StringLessThan(stra->data(), stra->size(), strb->data(),
 1375|   276k|                            strb->size());
 1376|   276k|    }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateStringINS_6OffsetEEET_INS_6StringEERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEE:
  575|   305k|  OffsetT<String> CreateString(const std::string& str) {
  576|   305k|    return CreateString<OffsetT>(str.c_str(), str.length());
  577|   305k|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE23GetCurrentBufferPointerEv:
  224|  41.0k|  uint8_t* GetCurrentBufferPointer() const { return buf_.data(); }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE15AddStructOffsetEtj:
  369|  20.5k|  void AddStructOffset(voffset_t field, uoffset_t off) {
  370|  20.5k|    TrackField(field, off);
  371|  20.5k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE20ForceVectorAlignmentEmmm:
  713|  9.78k|                            const size_t alignment) {
  714|  9.78k|    if (len == 0) return;
  ------------------
  |  Branch (714:9): [True: 1.61k, False: 8.16k]
  ------------------
  715|  8.16k|    FLATBUFFERS_ASSERT(VerifyAlignmentRequirements(alignment));
  716|  8.16k|    PreAlign(len * elemsize, alignment);
  717|  8.16k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIhNSt3__19allocatorIhEEEENS_6OffsetINS_6VectorIT_jEEEERKNS3_6vectorIS8_T0_EE:
  817|  4.38k|  Offset<Vector<T>> CreateVector(const std::vector<T, Alloc>& v) {
  818|  4.38k|    return CreateVector(data(v), v.size());
  819|  4.38k|  }
_ZN11flatbuffers4dataIhNSt3__19allocatorIhEEEEPKT_RKNS1_6vectorIS4_T0_EE:
   54|  4.38k|const T* data(const std::vector<T, Alloc>& v) {
   55|       |  // Eventually the returned pointer gets passed down to memcpy, so
   56|       |  // we need it to be non-null to avoid undefined behavior.
   57|  4.38k|  static uint8_t t;
   58|  4.38k|  return v.empty() ? reinterpret_cast<const T*>(&t) : &v.front();
  ------------------
  |  Branch (58:10): [True: 0, False: 4.38k]
  ------------------
   59|  4.38k|}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartStructEm:
  514|  32.5k|  uoffset_t StartStruct(size_t alignment) {
  515|  32.5k|    Align(alignment);
  516|  32.5k|    return GetSizeRelative32BitRegion();
  517|  32.5k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE3PadEm:
  284|   165k|  void Pad(size_t num_bytes) { buf_.fill(num_bytes); }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIhEEvtT_:
  345|  2.18k|  void AddElement(voffset_t field, T e) {
  346|  2.18k|    TrackField(field, PushElement(e));
  347|  2.18k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIaEEvtT_:
  345|  1.47k|  void AddElement(voffset_t field, T e) {
  346|  1.47k|    TrackField(field, PushElement(e));
  347|  1.47k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIsjEET0_T_:
  312|  6.20k|  ReturnT PushElement(T element) {
  313|  6.20k|    AssertScalarT<T>();
  314|  6.20k|    Align(sizeof(T));
  315|  6.20k|    buf_.push_small(EndianScalar(element));
  316|  6.20k|    return CalculateOffset<ReturnT>();
  317|  6.20k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTIsEEvv:
  305|  6.20k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|  6.20k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|  6.20k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIsEEvtT_:
  345|  1.68k|  void AddElement(voffset_t field, T e) {
  346|  1.68k|    TrackField(field, PushElement(e));
  347|  1.68k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIsEEvtT_S3_:
  338|  2.71k|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|  2.71k|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 614, False: 2.10k]
  |  Branch (340:32): [True: 614, False: 0]
  ------------------
  341|  2.10k|    TrackField(field, PushElement(e));
  342|  2.10k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementItEEvtT_:
  345|  1.09k|  void AddElement(voffset_t field, T e) {
  346|  1.09k|    TrackField(field, PushElement(e));
  347|  1.09k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIiEEvtT_:
  345|  1.19k|  void AddElement(voffset_t field, T e) {
  346|  1.19k|    TrackField(field, PushElement(e));
  347|  1.19k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIjEEvtT_:
  345|  2.69k|  void AddElement(voffset_t field, T e) {
  346|  2.69k|    TrackField(field, PushElement(e));
  347|  2.69k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIlEEvtT_:
  345|  3.74k|  void AddElement(voffset_t field, T e) {
  346|  3.74k|    TrackField(field, PushElement(e));
  347|  3.74k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementImEEvtT_:
  345|  6.28k|  void AddElement(voffset_t field, T e) {
  346|  6.28k|    TrackField(field, PushElement(e));
  347|  6.28k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIfjEET0_T_:
  312|  10.8k|  ReturnT PushElement(T element) {
  313|  10.8k|    AssertScalarT<T>();
  314|  10.8k|    Align(sizeof(T));
  315|  10.8k|    buf_.push_small(EndianScalar(element));
  316|  10.8k|    return CalculateOffset<ReturnT>();
  317|  10.8k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTIfEEvv:
  305|  10.8k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|  10.8k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|  10.8k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIfEEvtT_:
  345|  1.42k|  void AddElement(voffset_t field, T e) {
  346|  1.42k|    TrackField(field, PushElement(e));
  347|  1.42k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIfEEvtT_S3_:
  338|  9.96k|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|  9.96k|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 3.04k, False: 6.91k]
  |  Branch (340:32): [True: 3.04k, False: 0]
  ------------------
  341|  6.91k|    TrackField(field, PushElement(e));
  342|  6.91k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIdEEvtT_:
  345|  3.71k|  void AddElement(voffset_t field, T e) {
  346|  3.71k|    TrackField(field, PushElement(e));
  347|  3.71k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetIvEEvtNS_8Offset64IT_EE:
  356|  11.2k|  void AddOffset(voffset_t field, Offset64<T> off) {
  357|  11.2k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (357:9): [True: 0, False: 11.2k]
  ------------------
  358|  11.2k|    AddElement(field, ReferTo(off.o), static_cast<uoffset64_t>(0));
  359|  11.2k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE7ReferToEm:
  385|  11.2k|  uoffset64_t ReferTo(uoffset64_t off) {
  386|       |    // Align to ensure GetSize() below is correct.
  387|  11.2k|    Align(sizeof(uoffset64_t));
  388|       |    // 64-bit offsets are relative to tail of the whole buffer
  389|  11.2k|    return ReferTo(off, GetSize());
  390|  11.2k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE7ReferToImjEET_S3_T0_:
  393|  11.2k|  T ReferTo(const T off, const T2 size) {
  394|  11.2k|    FLATBUFFERS_ASSERT(off && off <= size);
  395|  11.2k|    return size - off + static_cast<T>(sizeof(T));
  396|  11.2k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetIvEEvtNS_6OffsetIT_EE:
  350|  32.0k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|  32.0k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 32.0k]
  ------------------
  352|  32.0k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|  32.0k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9EndStructEv:
  519|  32.4k|  uoffset_t EndStruct() { return GetSizeRelative32BitRegion(); }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8PopBytesEm:
  302|  32.4k|  void PopBytes(size_t amount) { buf_.pop(amount); }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIvNS_6OffsetEEEjT0_IT_E:
  320|  80.4k|  uoffset_t PushElement(OffsetT<T> off) {
  321|       |    // Special case for offsets: see ReferTo below.
  322|  80.4k|    return PushElement(ReferTo(off.o));
  323|  80.4k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9EndVectorImjEET0_m:
  684|  7.02k|  ReturnT EndVector(size_t len) {
  685|  7.02k|    FLATBUFFERS_ASSERT(nested);  // Hit if no corresponding StartVector.
  686|  7.02k|    nested = false;
  687|  7.02k|    return PushElement<LenT, ReturnT>(static_cast<LenT>(len));
  688|  7.02k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIhTtTpTyENS_6OffsetETtTpTyENS_6VectorEEET0_IJT1_IJT_EEEEPKS7_m:
  753|  4.38k|  OffsetT<VectorT<T>> CreateVector(const T* v, size_t len) {
  754|       |    // The type of the length field in the vector.
  755|  4.38k|    typedef typename VectorT<T>::size_type LenT;
  756|  4.38k|    typedef typename OffsetT<VectorT<T>>::offset_type offset_type;
  757|       |    // If this assert hits, you're specifying a template argument that is
  758|       |    // causing the wrong overload to be selected, remove it.
  759|  4.38k|    AssertScalarT<T>();
  760|  4.38k|    StartVector<T, OffsetT, LenT>(len);
  761|  4.38k|    if (len > 0) {
  ------------------
  |  Branch (761:9): [True: 4.38k, False: 0]
  ------------------
  762|       |      // clang-format off
  763|  4.38k|      #if FLATBUFFERS_LITTLEENDIAN
  764|  4.38k|        PushBytes(reinterpret_cast<const uint8_t *>(v), len * sizeof(T));
  765|       |      #else
  766|       |        if (sizeof(T) == 1) {
  767|       |          PushBytes(reinterpret_cast<const uint8_t *>(v), len);
  768|       |        } else {
  769|       |          for (auto i = len; i > 0; ) {
  770|       |            PushElement(v[--i]);
  771|       |          }
  772|       |        }
  773|       |      #endif
  774|       |      // clang-format on
  775|  4.38k|    }
  776|  4.38k|    return OffsetT<VectorT<T>>(EndVector<LenT, offset_type>(len));
  777|  4.38k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorIhNS_6OffsetEjEEvm:
  703|  4.38k|  void StartVector(size_t len) {
  704|  4.38k|    return StartVector<OffsetT, LenT>(len, sizeof(T), AlignOf<T>());
  705|  4.38k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE5ClearEv:
  169|  32.7k|  void Clear() {
  170|  32.7k|    ClearOffsets();
  171|  32.7k|    buf_.clear();
  172|  32.7k|    nested = false;
  173|  32.7k|    finished = false;
  174|  32.7k|    minalign_ = 1;
  175|  32.7k|    length_of_64_bit_region_ = 0;
  176|  32.7k|    if (string_pool) string_pool->clear();
  ------------------
  |  Branch (176:9): [True: 1, False: 32.7k]
  ------------------
  177|  32.7k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE6FinishINS_5TableEEEvNS_6OffsetIT_EEPKc:
 1263|    224|  void Finish(Offset<T> root, const char* file_identifier = nullptr) {
 1264|    224|    Finish(root.o, file_identifier, false);
 1265|    224|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorINS_6OffsetIN10reflection7RPCCallEEENSt3__19allocatorIS6_EEEENS3_INS_6VectorIT_jEEEERKNS7_6vectorISB_T0_EE:
  817|    743|  Offset<Vector<T>> CreateVector(const std::vector<T, Alloc>& v) {
  818|    743|    return CreateVector(data(v), v.size());
  819|    743|  }
_ZN11flatbuffers4dataINS_6OffsetIN10reflection7RPCCallEEENSt3__19allocatorIS4_EEEEPKT_RKNS5_6vectorIS8_T0_EE:
   54|    743|const T* data(const std::vector<T, Alloc>& v) {
   55|       |  // Eventually the returned pointer gets passed down to memcpy, so
   56|       |  // we need it to be non-null to avoid undefined behavior.
   57|    743|  static uint8_t t;
   58|    743|  return v.empty() ? reinterpret_cast<const T*>(&t) : &v.front();
  ------------------
  |  Branch (58:10): [True: 0, False: 743]
  ------------------
   59|    743|}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorINS_6OffsetIN10reflection7EnumValEEENSt3__19allocatorIS6_EEEENS3_INS_6VectorIT_jEEEERKNS7_6vectorISB_T0_EE:
  817|  79.0k|  Offset<Vector<T>> CreateVector(const std::vector<T, Alloc>& v) {
  818|  79.0k|    return CreateVector(data(v), v.size());
  819|  79.0k|  }
_ZN11flatbuffers4dataINS_6OffsetIN10reflection7EnumValEEENSt3__19allocatorIS4_EEEEPKT_RKNS5_6vectorIS8_T0_EE:
   54|  79.0k|const T* data(const std::vector<T, Alloc>& v) {
   55|       |  // Eventually the returned pointer gets passed down to memcpy, so
   56|       |  // we need it to be non-null to avoid undefined behavior.
   57|  79.0k|  static uint8_t t;
   58|  79.0k|  return v.empty() ? reinterpret_cast<const T*>(&t) : &v.front();
  ------------------
  |  Branch (58:10): [True: 0, False: 79.0k]
  ------------------
   59|  79.0k|}

_ZN11flexbuffers7BuilderC2EmNS_11BuilderFlagE:
 1044|  34.6k|      : buf_(initial_size),
 1045|  34.6k|        finished_(false),
 1046|  34.6k|        has_duplicate_keys_(false),
 1047|  34.6k|        flags_(flags),
 1048|  34.6k|        force_min_bit_width_(BIT_WIDTH_8),
 1049|  34.6k|        key_pool(KeyOffsetCompare(buf_)),
 1050|  34.6k|        string_pool(StringOffsetCompare(buf_)) {
 1051|  34.6k|    buf_.clear();
 1052|  34.6k|  }
_ZN11flexbuffers7Builder16KeyOffsetCompareC2ERKNSt3__16vectorIhNS2_9allocatorIhEEEE:
 1812|  34.6k|    explicit KeyOffsetCompare(const std::vector<uint8_t>& buf) : buf_(&buf) {}
_ZN11flexbuffers7Builder19StringOffsetCompareC2ERKNSt3__16vectorIhNS2_9allocatorIhEEEE:
 1824|  34.6k|        : buf_(&buf) {}
_ZN11flexbuffers9ReferenceC2Ev:
  407|  27.6k|      : data_(nullptr), parent_width_(0), byte_width_(0), type_(FBT_NULL) {}
_ZNK11flexbuffers7Builder9GetBufferEv:
 1061|  4.38k|  const std::vector<uint8_t>& GetBuffer() const {
 1062|  4.38k|    Finished();
 1063|  4.38k|    return buf_;
 1064|  4.38k|  }
_ZNK11flexbuffers7Builder7GetSizeEv:
 1067|  4.38k|  size_t GetSize() const { return buf_.size(); }
_ZN11flexbuffers7Builder4NullEv:
 1084|    391|  void Null() { stack_.push_back(Value()); }
_ZN11flexbuffers7Builder3IntEl:
 1090|   234k|  void Int(int64_t i) { stack_.push_back(Value(i, FBT_INT, WidthI(i))); }
_ZN11flexbuffers7Builder6DoubleEd:
 1108|  33.0k|  void Double(double f) { stack_.push_back(Value(f)); }
_ZN11flexbuffers7Builder4BoolEb:
 1114|    926|  void Bool(bool b) { stack_.push_back(Value(b)); }
_ZN11flexbuffers7Builder3KeyEPKcm:
 1150|   235k|  size_t Key(const char* str, size_t len) {
 1151|   235k|    auto sloc = buf_.size();
 1152|   235k|    WriteBytes(str, len + 1);
 1153|   235k|    if (flags_ & BUILDER_FLAG_SHARE_KEYS) {
  ------------------
  |  Branch (1153:9): [True: 235k, False: 0]
  ------------------
 1154|   235k|      auto it = key_pool.find(sloc);
 1155|   235k|      if (it != key_pool.end()) {
  ------------------
  |  Branch (1155:11): [True: 187k, False: 47.8k]
  ------------------
 1156|       |        // Already in the buffer. Remove key we just serialized, and use
 1157|       |        // existing offset instead.
 1158|   187k|        buf_.resize(sloc);
 1159|   187k|        sloc = *it;
 1160|   187k|      } else {
 1161|  47.8k|        key_pool.insert(sloc);
 1162|  47.8k|      }
 1163|   235k|    }
 1164|   235k|    stack_.push_back(Value(static_cast<uint64_t>(sloc), FBT_KEY, BIT_WIDTH_8));
 1165|   235k|    return sloc;
 1166|   235k|  }
_ZN11flexbuffers7Builder3KeyERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 1169|   235k|  size_t Key(const std::string& str) { return Key(str.c_str(), str.size()); }
_ZN11flexbuffers7Builder6StringEPKcm:
 1171|  4.59k|  size_t String(const char* str, size_t len) {
 1172|  4.59k|    auto reset_to = buf_.size();
 1173|  4.59k|    auto sloc = CreateBlob(str, len, 1, FBT_STRING);
 1174|  4.59k|    if (flags_ & BUILDER_FLAG_SHARE_STRINGS) {
  ------------------
  |  Branch (1174:9): [True: 4.59k, False: 0]
  ------------------
 1175|  4.59k|      StringOffset so(sloc, len);
 1176|  4.59k|      auto it = string_pool.find(so);
 1177|  4.59k|      if (it != string_pool.end()) {
  ------------------
  |  Branch (1177:11): [True: 1.02k, False: 3.56k]
  ------------------
 1178|       |        // Already in the buffer. Remove string we just serialized, and use
 1179|       |        // existing offset instead.
 1180|  1.02k|        buf_.resize(reset_to);
 1181|  1.02k|        sloc = it->first;
 1182|  1.02k|        stack_.back().u_ = sloc;
 1183|  3.56k|      } else {
 1184|  3.56k|        string_pool.insert(so);
 1185|  3.56k|      }
 1186|  4.59k|    }
 1187|  4.59k|    return sloc;
 1188|  4.59k|  }
_ZN11flexbuffers7Builder6StringERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 1190|  4.59k|  size_t String(const std::string& str) {
 1191|  4.59k|    return String(str.c_str(), str.size());
 1192|  4.59k|  }
_ZN11flexbuffers7Builder11StartVectorEv:
 1239|  6.34k|  size_t StartVector() { return stack_.size(); }
_ZN11flexbuffers7Builder8StartMapEv:
 1244|  39.6k|  size_t StartMap() { return stack_.size(); }
_ZN11flexbuffers7Builder9EndVectorEmbb:
 1252|  5.50k|  size_t EndVector(size_t start, bool typed, bool fixed) {
 1253|  5.50k|    auto vec = CreateVector(start, stack_.size() - start, 1, typed, fixed);
 1254|       |    // Remove temp elements and return vector.
 1255|  5.50k|    stack_.resize(start);
 1256|  5.50k|    stack_.push_back(vec);
 1257|  5.50k|    return static_cast<size_t>(vec.u_);
 1258|  5.50k|  }
_ZN11flexbuffers7Builder6EndMapEm:
 1260|  38.8k|  size_t EndMap(size_t start) {
 1261|       |    // We should have interleaved keys and values on the stack.
 1262|  38.8k|    auto len = MapElementCount(start);
 1263|       |    // Make sure keys are all strings:
 1264|   269k|    for (auto key = start; key < stack_.size(); key += 2) {
  ------------------
  |  Branch (1264:28): [True: 231k, False: 38.8k]
  ------------------
 1265|   231k|      FLATBUFFERS_ASSERT(stack_[key].type_ == FBT_KEY);
 1266|   231k|    }
 1267|       |    // Now sort values, so later we can do a binary search lookup.
 1268|       |    // We want to sort 2 array elements at a time.
 1269|  38.8k|    struct TwoValue {
 1270|  38.8k|      Value key;
 1271|  38.8k|      Value val;
 1272|  38.8k|    };
 1273|       |    // TODO(wvo): strict aliasing?
 1274|       |    // TODO(wvo): allow the caller to indicate the data is already sorted
 1275|       |    // for maximum efficiency? With an assert to check sortedness to make sure
 1276|       |    // we're not breaking binary search.
 1277|       |    // Or, we can track if the map is sorted as keys are added which would be
 1278|       |    // be quite cheap (cheaper than checking it here), so we can skip this
 1279|       |    // step automatically when appliccable, and encourage people to write in
 1280|       |    // sorted fashion.
 1281|       |    // std::sort is typically already a lot faster on sorted data though.
 1282|  38.8k|    auto dict = reinterpret_cast<TwoValue*>(stack_.data() + start);
 1283|  38.8k|    std::sort(dict, dict + len,
 1284|  38.8k|              [&](const TwoValue& a, const TwoValue& b) -> bool {
 1285|  38.8k|                auto as = reinterpret_cast<const char*>(buf_.data() + a.key.u_);
 1286|  38.8k|                auto bs = reinterpret_cast<const char*>(buf_.data() + b.key.u_);
 1287|  38.8k|                auto comp = strcmp(as, bs);
 1288|       |                // We want to disallow duplicate keys, since this results in a
 1289|       |                // map where values cannot be found.
 1290|       |                // But we can't assert here (since we don't want to fail on
 1291|       |                // random JSON input) or have an error mechanism.
 1292|       |                // Instead, we set has_duplicate_keys_ in the builder to
 1293|       |                // signal this.
 1294|       |                // TODO: Have to check for pointer equality, as some sort
 1295|       |                // implementation apparently call this function with the same
 1296|       |                // element?? Why?
 1297|  38.8k|                if (!comp && &a != &b) has_duplicate_keys_ = true;
 1298|  38.8k|                return comp < 0;
 1299|  38.8k|              });
 1300|       |    // First create a vector out of all keys.
 1301|       |    // TODO(wvo): if kBuilderFlagShareKeyVectors is true, see if we can share
 1302|       |    // the first vector.
 1303|  38.8k|    auto keys = CreateVector(start, len, 2, true, false);
 1304|  38.8k|    auto vec = CreateVector(start + 1, len, 2, false, false, &keys);
 1305|       |    // Remove temp elements and return map.
 1306|  38.8k|    stack_.resize(start);
 1307|  38.8k|    stack_.push_back(vec);
 1308|  38.8k|    return static_cast<size_t>(vec.u_);
 1309|  38.8k|  }
_ZNK11flexbuffers7Builder16HasDuplicateKeysEv:
 1313|  38.8k|  bool HasDuplicateKeys() const { return has_duplicate_keys_; }
_ZN11flexbuffers7Builder15MapElementCountEm:
 1434|  38.8k|  size_t MapElementCount(size_t start) {
 1435|       |    // Make sure it is an even number:
 1436|  38.8k|    auto len = stack_.size() - start;
 1437|  38.8k|    FLATBUFFERS_ASSERT(!(len & 1));
 1438|  38.8k|    len /= 2;
 1439|  38.8k|    return len;
 1440|  38.8k|  }
_ZN11flexbuffers7Builder6FinishEv:
 1509|  4.38k|  void Finish() {
 1510|       |    // If you hit this assert, you likely have objects that were never included
 1511|       |    // in a parent. You need to have exactly one root to finish a buffer.
 1512|       |    // Check your Start/End calls are matched, and all objects are inside
 1513|       |    // some other object.
 1514|  4.38k|    FLATBUFFERS_ASSERT(stack_.size() == 1);
 1515|       |
 1516|       |    // Write root value.
 1517|  4.38k|    auto byte_width = Align(stack_[0].ElemWidth(buf_.size(), 0));
 1518|  4.38k|    WriteAny(stack_[0], byte_width);
 1519|       |    // Write root type.
 1520|  4.38k|    Write(stack_[0].StoredPackedType(), 1);
 1521|       |    // Write root size. Normally determined by parent, but root has no parent :)
 1522|  4.38k|    Write(byte_width, 1);
 1523|       |
 1524|  4.38k|    finished_ = true;
 1525|  4.38k|  }
_ZNK11flexbuffers7Builder8FinishedEv:
 1528|  4.38k|  void Finished() const {
 1529|       |    // If you get this assert, you're attempting to get access a buffer
 1530|       |    // which hasn't been finished yet. Be sure to call
 1531|       |    // Builder::Finish with your root object.
 1532|  4.38k|    FLATBUFFERS_ASSERT(finished_);
 1533|  4.38k|  }
_ZN11flexbuffers7Builder5AlignENS_8BitWidthE:
 1536|  92.1k|  uint8_t Align(BitWidth alignment) {
 1537|  92.1k|    auto byte_width = 1U << alignment;
 1538|  92.1k|    buf_.insert(buf_.end(), flatbuffers::PaddingBytes(buf_.size(), byte_width),
 1539|  92.1k|                0);
 1540|  92.1k|    return static_cast<uint8_t>(byte_width);
 1541|  92.1k|  }
_ZN11flexbuffers7Builder10WriteBytesEPKvm:
 1543|   946k|  void WriteBytes(const void* val, size_t size) {
 1544|   946k|    buf_.insert(buf_.end(), reinterpret_cast<const uint8_t*>(val),
 1545|   946k|                reinterpret_cast<const uint8_t*>(val) + size);
 1546|   946k|  }
_ZN11flexbuffers7Builder11WriteDoubleEdh:
 1555|  31.0k|  void WriteDouble(double f, uint8_t byte_width) {
 1556|  31.0k|    switch (byte_width) {
 1557|  28.3k|      case 8:
  ------------------
  |  Branch (1557:7): [True: 28.3k, False: 2.64k]
  ------------------
 1558|  28.3k|        Write(f, byte_width);
 1559|  28.3k|        break;
 1560|  2.64k|      case 4:
  ------------------
  |  Branch (1560:7): [True: 2.64k, False: 28.3k]
  ------------------
 1561|  2.64k|        Write(static_cast<float>(f), byte_width);
 1562|  2.64k|        break;
 1563|       |      // case 2: Write(static_cast<half>(f), byte_width); break;
 1564|       |      // case 1: Write(static_cast<quarter>(f), byte_width); break;
 1565|      0|      default:
  ------------------
  |  Branch (1565:7): [True: 0, False: 31.0k]
  ------------------
 1566|      0|        FLATBUFFERS_ASSERT(0);
 1567|  31.0k|    }
 1568|  31.0k|  }
_ZN11flexbuffers7Builder11WriteOffsetEmh:
 1570|   308k|  void WriteOffset(uint64_t o, uint8_t byte_width) {
 1571|   308k|    auto reloff = buf_.size() - o;
 1572|   308k|    FLATBUFFERS_ASSERT(byte_width == 8 || reloff < 1ULL << (byte_width * 8));
 1573|   308k|    Write(reloff, byte_width);
 1574|   308k|  }
_ZN11flexbuffers7Builder5ValueC2Ev:
 1623|    391|    Value() : i_(0), type_(FBT_NULL), min_bit_width_(BIT_WIDTH_8) {}
_ZN11flexbuffers7Builder5ValueC2Eb:
 1626|    926|        : u_(static_cast<uint64_t>(b)),
 1627|    926|          type_(FBT_BOOL),
 1628|    926|          min_bit_width_(BIT_WIDTH_8) {}
_ZN11flexbuffers7Builder5ValueC2ElNS_4TypeENS_8BitWidthE:
 1631|   234k|        : i_(i), type_(t), min_bit_width_(bw) {}
_ZN11flexbuffers7Builder5ValueC2EmNS_4TypeENS_8BitWidthE:
 1633|   323k|        : u_(u), type_(t), min_bit_width_(bw) {}
_ZN11flexbuffers7Builder5ValueC2Ed:
 1639|  33.0k|    Value(double f) : f_(f), type_(FBT_FLOAT), min_bit_width_(WidthF(f)) {}
_ZNK11flexbuffers7Builder5Value16StoredPackedTypeENS_8BitWidthE:
 1641|   300k|    uint8_t StoredPackedType(BitWidth parent_bit_width_ = BIT_WIDTH_8) const {
 1642|   300k|      return PackedType(StoredWidth(parent_bit_width_), type_);
 1643|   300k|    }
_ZNK11flexbuffers7Builder5Value9ElemWidthEmm:
 1645|   570k|    BitWidth ElemWidth(size_t buf_size, size_t elem_index) const {
 1646|   570k|      if (IsInline(type_)) {
  ------------------
  |  Branch (1646:11): [True: 261k, False: 308k]
  ------------------
 1647|   261k|        return min_bit_width_;
 1648|   308k|      } else {
 1649|       |        // We have an absolute offset, but want to store a relative offset
 1650|       |        // elem_index elements beyond the current buffer end. Since whether
 1651|       |        // the relative offset fits in a certain byte_width depends on
 1652|       |        // the size of the elements before it (and their alignment), we have
 1653|       |        // to test for each size in turn.
 1654|   308k|        for (size_t byte_width = 1;
 1655|   489k|             byte_width <= sizeof(flatbuffers::largest_scalar_t);
  ------------------
  |  Branch (1655:14): [True: 489k, False: 0]
  ------------------
 1656|   489k|             byte_width *= 2) {
 1657|       |          // Where are we going to write this offset?
 1658|   489k|          auto offset_loc = buf_size +
 1659|   489k|                            flatbuffers::PaddingBytes(buf_size, byte_width) +
 1660|   489k|                            elem_index * byte_width;
 1661|       |          // Compute relative offset.
 1662|   489k|          auto offset = offset_loc - u_;
 1663|       |          // Does it fit?
 1664|   489k|          auto bit_width = WidthU(offset);
 1665|   489k|          if (static_cast<size_t>(static_cast<size_t>(1U) << bit_width) ==
  ------------------
  |  Branch (1665:15): [True: 308k, False: 180k]
  ------------------
 1666|   489k|              byte_width)
 1667|   308k|            return bit_width;
 1668|   489k|        }
 1669|      0|        FLATBUFFERS_ASSERT(false);  // Must match one of the sizes above.
 1670|      0|        return BIT_WIDTH_64;
 1671|      0|      }
 1672|   570k|    }
_ZNK11flexbuffers7Builder5Value11StoredWidthENS_8BitWidthE:
 1674|   300k|    BitWidth StoredWidth(BitWidth parent_bit_width_ = BIT_WIDTH_8) const {
 1675|   300k|      if (IsInline(type_)) {
  ------------------
  |  Branch (1675:11): [True: 261k, False: 38.8k]
  ------------------
 1676|   261k|        return (std::max)(min_bit_width_, parent_bit_width_);
 1677|   261k|      } else {
 1678|  38.8k|        return min_bit_width_;
 1679|  38.8k|      }
 1680|   300k|    }
_ZN11flexbuffers7Builder8WriteAnyERKNS0_5ValueEh:
 1684|   531k|  void WriteAny(const Value& val, uint8_t byte_width) {
 1685|   531k|    switch (val.type_) {
 1686|    291|      case FBT_NULL:
  ------------------
  |  Branch (1686:7): [True: 291, False: 531k]
  ------------------
 1687|   230k|      case FBT_INT:
  ------------------
  |  Branch (1687:7): [True: 229k, False: 301k]
  ------------------
 1688|   230k|        Write(val.i_, byte_width);
 1689|   230k|        break;
 1690|    516|      case FBT_BOOL:
  ------------------
  |  Branch (1690:7): [True: 516, False: 531k]
  ------------------
 1691|    516|      case FBT_UINT:
  ------------------
  |  Branch (1691:7): [True: 0, False: 531k]
  ------------------
 1692|    516|        Write(val.u_, byte_width);
 1693|    516|        break;
 1694|  31.0k|      case FBT_FLOAT:
  ------------------
  |  Branch (1694:7): [True: 31.0k, False: 500k]
  ------------------
 1695|  31.0k|        WriteDouble(val.f_, byte_width);
 1696|  31.0k|        break;
 1697|   269k|      default:
  ------------------
  |  Branch (1697:7): [True: 269k, False: 261k]
  ------------------
 1698|   269k|        WriteOffset(val.u_, byte_width);
 1699|   269k|        break;
 1700|   531k|    }
 1701|   531k|  }
_ZN11flexbuffers7Builder10CreateBlobEPKvmmNS_4TypeE:
 1703|  4.59k|  size_t CreateBlob(const void* data, size_t len, size_t trailing, Type type) {
 1704|  4.59k|    auto bit_width = WidthU(len);
 1705|  4.59k|    return CreateAlignedBlob(data, len, trailing, type, bit_width);
 1706|  4.59k|  }
_ZN11flexbuffers7Builder17CreateAlignedBlobEPKvmmNS_4TypeENS_8BitWidthE:
 1709|  4.59k|                           Type type, BitWidth alignment) {
 1710|  4.59k|    auto byte_width = Align(alignment);
 1711|  4.59k|    Write<uint64_t>(len, byte_width);
 1712|  4.59k|    auto sloc = buf_.size();
 1713|  4.59k|    WriteBytes(data, len + trailing);
 1714|  4.59k|    stack_.push_back(Value(static_cast<uint64_t>(sloc), type, alignment));
 1715|  4.59k|    return sloc;
 1716|  4.59k|  }
_ZN11flexbuffers7Builder12CreateVectorEmmmbbPKNS0_5ValueE:
 1740|  83.1k|                     bool fixed, const Value* keys = nullptr) {
 1741|  83.1k|    FLATBUFFERS_ASSERT(
 1742|  83.1k|        !fixed ||
 1743|  83.1k|        typed);  // typed=false, fixed=true combination is not supported.
 1744|       |    // Figure out smallest bit width we can store this vector with.
 1745|  83.1k|    auto bit_width = (std::max)(force_min_bit_width_, WidthU(vec_len));
 1746|  83.1k|    auto prefix_elems = 1;
 1747|  83.1k|    if (keys) {
  ------------------
  |  Branch (1747:9): [True: 38.8k, False: 44.3k]
  ------------------
 1748|       |      // If this vector is part of a map, we will pre-fix an offset to the keys
 1749|       |      // to this vector.
 1750|  38.8k|      bit_width = (std::max)(bit_width, keys->ElemWidth(buf_.size(), 0));
 1751|  38.8k|      prefix_elems += 2;
 1752|  38.8k|    }
 1753|  83.1k|    Type vector_type = FBT_KEY;
 1754|       |    // Check bit widths and types for all elements.
 1755|   610k|    for (size_t i = start; i < stack_.size(); i += step) {
  ------------------
  |  Branch (1755:28): [True: 527k, False: 83.1k]
  ------------------
 1756|   527k|      auto elem_width =
 1757|   527k|          stack_[i].ElemWidth(buf_.size(), i - start + prefix_elems);
 1758|   527k|      bit_width = (std::max)(bit_width, elem_width);
 1759|   527k|      if (typed) {
  ------------------
  |  Branch (1759:11): [True: 231k, False: 296k]
  ------------------
 1760|   231k|        if (i == start) {
  ------------------
  |  Branch (1760:13): [True: 37.2k, False: 193k]
  ------------------
 1761|  37.2k|          vector_type = stack_[i].type_;
 1762|   193k|        } else {
 1763|       |          // If you get this assert, you are writing a typed vector with
 1764|       |          // elements that are not all the same type.
 1765|   193k|          FLATBUFFERS_ASSERT(vector_type == stack_[i].type_);
 1766|   193k|        }
 1767|   231k|      }
 1768|   527k|    }
 1769|       |    // If you get this assert, your typed types are not one of:
 1770|       |    // Int / UInt / Float / Key.
 1771|  83.1k|    FLATBUFFERS_ASSERT(!typed || IsTypedVectorElementType(vector_type));
 1772|  83.1k|    auto byte_width = Align(bit_width);
 1773|       |    // Write vector. First the keys width/offset if available, and size.
 1774|  83.1k|    if (keys) {
  ------------------
  |  Branch (1774:9): [True: 38.8k, False: 44.3k]
  ------------------
 1775|  38.8k|      WriteOffset(keys->u_, byte_width);
 1776|  38.8k|      Write<uint64_t>(1ULL << keys->min_bit_width_, byte_width);
 1777|  38.8k|    }
 1778|  83.1k|    if (!fixed) Write<uint64_t>(vec_len, byte_width);
  ------------------
  |  Branch (1778:9): [True: 83.1k, False: 0]
  ------------------
 1779|       |    // Then the actual data.
 1780|  83.1k|    auto vloc = buf_.size();
 1781|   610k|    for (size_t i = start; i < stack_.size(); i += step) {
  ------------------
  |  Branch (1781:28): [True: 527k, False: 83.1k]
  ------------------
 1782|   527k|      WriteAny(stack_[i], byte_width);
 1783|   527k|    }
 1784|       |    // Then the types.
 1785|  83.1k|    if (!typed) {
  ------------------
  |  Branch (1785:9): [True: 44.3k, False: 38.8k]
  ------------------
 1786|   340k|      for (size_t i = start; i < stack_.size(); i += step) {
  ------------------
  |  Branch (1786:30): [True: 296k, False: 44.3k]
  ------------------
 1787|   296k|        buf_.push_back(stack_[i].StoredPackedType(bit_width));
 1788|   296k|      }
 1789|  44.3k|    }
 1790|  83.1k|    return Value(static_cast<uint64_t>(vloc),
 1791|  83.1k|                 keys ? FBT_MAP
  ------------------
  |  Branch (1791:18): [True: 38.8k, False: 44.3k]
  ------------------
 1792|  83.1k|                      : (typed ? ToTypedVector(vector_type, fixed ? vec_len : 0)
  ------------------
  |  Branch (1792:26): [True: 38.8k, False: 5.50k]
  |  Branch (1792:61): [True: 0, False: 38.8k]
  ------------------
 1793|  44.3k|                               : FBT_VECTOR),
 1794|  83.1k|                 bit_width);
 1795|  83.1k|  }
_ZNK11flexbuffers7Builder16KeyOffsetCompareclEmm:
 1813|  1.53M|    bool operator()(size_t a, size_t b) const {
 1814|  1.53M|      auto stra = reinterpret_cast<const char*>(buf_->data() + a);
 1815|  1.53M|      auto strb = reinterpret_cast<const char*>(buf_->data() + b);
 1816|  1.53M|      return strcmp(stra, strb) < 0;
 1817|  1.53M|    }
_ZNK11flexbuffers7Builder19StringOffsetCompareclERKNSt3__14pairImmEES6_:
 1825|  23.5k|    bool operator()(const StringOffset& a, const StringOffset& b) const {
 1826|  23.5k|      auto stra = buf_->data() + a.first;
 1827|  23.5k|      auto strb = buf_->data() + b.first;
 1828|  23.5k|      auto cr = memcmp(stra, strb, (std::min)(a.second, b.second) + 1);
 1829|  23.5k|      return cr < 0 || (cr == 0 && a.second < b.second);
  ------------------
  |  Branch (1829:14): [True: 13.6k, False: 9.88k]
  |  Branch (1829:25): [True: 2.16k, False: 7.72k]
  |  Branch (1829:36): [True: 75, False: 2.09k]
  ------------------
 1830|  23.5k|    }
_ZN11flexbuffers8IsInlineENS_4TypeE:
   89|   870k|inline bool IsInline(Type t) { return t <= FBT_FLOAT || t == FBT_BOOL; }
  ------------------
  |  Branch (89:39): [True: 522k, False: 348k]
  |  Branch (89:57): [True: 1.03k, False: 347k]
  ------------------
_ZN11flexbuffers24IsTypedVectorElementTypeENS_4TypeE:
   91|  77.6k|inline bool IsTypedVectorElementType(Type t) {
   92|  77.6k|  return (t >= FBT_INT && t <= FBT_STRING) || t == FBT_BOOL;
  ------------------
  |  Branch (92:11): [True: 77.6k, False: 0]
  |  Branch (92:27): [True: 77.6k, False: 0]
  |  Branch (92:47): [True: 0, False: 0]
  ------------------
   93|  77.6k|}
_ZN11flexbuffers13ToTypedVectorENS_4TypeEm:
  104|  38.8k|inline Type ToTypedVector(Type t, size_t fixed_len = 0) {
  105|  38.8k|  FLATBUFFERS_ASSERT(IsTypedVectorElementType(t));
  106|  38.8k|  switch (fixed_len) {
  107|  38.8k|    case 0:
  ------------------
  |  Branch (107:5): [True: 38.8k, False: 0]
  ------------------
  108|  38.8k|      return static_cast<Type>(t - FBT_INT + FBT_VECTOR_INT);
  109|      0|    case 2:
  ------------------
  |  Branch (109:5): [True: 0, False: 38.8k]
  ------------------
  110|      0|      return static_cast<Type>(t - FBT_INT + FBT_VECTOR_INT2);
  111|      0|    case 3:
  ------------------
  |  Branch (111:5): [True: 0, False: 38.8k]
  ------------------
  112|      0|      return static_cast<Type>(t - FBT_INT + FBT_VECTOR_INT3);
  113|      0|    case 4:
  ------------------
  |  Branch (113:5): [True: 0, False: 38.8k]
  ------------------
  114|      0|      return static_cast<Type>(t - FBT_INT + FBT_VECTOR_INT4);
  115|      0|    default:
  ------------------
  |  Branch (115:5): [True: 0, False: 38.8k]
  ------------------
  116|      0|      FLATBUFFERS_ASSERT(0);
  117|      0|      return FBT_NULL;
  118|  38.8k|  }
  119|  38.8k|}
_ZN11flexbuffers6WidthUEm:
  195|   811k|inline BitWidth WidthU(uint64_t u) {
  196|   811k|#define FLATBUFFERS_GET_FIELD_BIT_WIDTH(value, width)                   \
  197|   811k|  {                                                                     \
  198|   811k|    if (!((u) & ~((1ULL << (width)) - 1ULL))) return BIT_WIDTH_##width; \
  199|   811k|  }
  200|   811k|  FLATBUFFERS_GET_FIELD_BIT_WIDTH(u, 8);
  ------------------
  |  |  197|   811k|  {                                                                     \
  |  |  198|   811k|    if (!((u) & ~((1ULL << (width)) - 1ULL))) return BIT_WIDTH_##width; \
  |  |  ------------------
  |  |  |  Branch (198:9): [True: 446k, False: 365k]
  |  |  ------------------
  |  |  199|   811k|  }
  ------------------
  201|   365k|  FLATBUFFERS_GET_FIELD_BIT_WIDTH(u, 16);
  ------------------
  |  |  197|   365k|  {                                                                     \
  |  |  198|   365k|    if (!((u) & ~((1ULL << (width)) - 1ULL))) return BIT_WIDTH_##width; \
  |  |  ------------------
  |  |  |  Branch (198:9): [True: 360k, False: 4.98k]
  |  |  ------------------
  |  |  199|   365k|  }
  ------------------
  202|  4.98k|  FLATBUFFERS_GET_FIELD_BIT_WIDTH(u, 32);
  ------------------
  |  |  197|  4.98k|  {                                                                     \
  |  |  198|  4.98k|    if (!((u) & ~((1ULL << (width)) - 1ULL))) return BIT_WIDTH_##width; \
  |  |  ------------------
  |  |  |  Branch (198:9): [True: 4.35k, False: 631]
  |  |  ------------------
  |  |  199|  4.98k|  }
  ------------------
  203|    631|#undef FLATBUFFERS_GET_FIELD_BIT_WIDTH
  204|    631|  return BIT_WIDTH_64;
  205|  4.98k|}
_ZN11flexbuffers6WidthIEl:
  207|   234k|inline BitWidth WidthI(int64_t i) {
  208|   234k|  auto u = static_cast<uint64_t>(i) << 1;
  209|   234k|  return WidthU(i >= 0 ? u : ~u);
  ------------------
  |  Branch (209:17): [True: 233k, False: 851]
  ------------------
  210|   234k|}
_ZN11flexbuffers6WidthFEd:
  212|  33.0k|inline BitWidth WidthF(double f) {
  213|  33.0k|  return static_cast<double>(static_cast<float>(f)) == f ? BIT_WIDTH_32
  ------------------
  |  Branch (213:10): [True: 4.65k, False: 28.3k]
  ------------------
  214|  33.0k|                                                         : BIT_WIDTH_64;
  215|  33.0k|}
_ZN11flexbuffers10PackedTypeENS_8BitWidthENS_4TypeE:
  933|   300k|inline uint8_t PackedType(BitWidth bit_width, Type type) {
  934|   300k|  return static_cast<uint8_t>(bit_width | (type << 2));
  935|   300k|}
_ZN11flexbuffers7Builder5WriteIhEEvT_m:
 1549|  8.77k|  void Write(T val, size_t byte_width) {
 1550|  8.77k|    FLATBUFFERS_ASSERT(sizeof(T) >= byte_width);
 1551|  8.77k|    val = flatbuffers::EndianScalar(val);
 1552|  8.77k|    WriteBytes(&val, byte_width);
 1553|  8.77k|  }
_ZN11flexbuffers7Builder5WriteIdEEvT_m:
 1549|  28.3k|  void Write(T val, size_t byte_width) {
 1550|  28.3k|    FLATBUFFERS_ASSERT(sizeof(T) >= byte_width);
 1551|  28.3k|    val = flatbuffers::EndianScalar(val);
 1552|  28.3k|    WriteBytes(&val, byte_width);
 1553|  28.3k|  }
_ZN11flexbuffers7Builder5WriteIfEEvT_m:
 1549|  2.64k|  void Write(T val, size_t byte_width) {
 1550|  2.64k|    FLATBUFFERS_ASSERT(sizeof(T) >= byte_width);
 1551|  2.64k|    val = flatbuffers::EndianScalar(val);
 1552|  2.64k|    WriteBytes(&val, byte_width);
 1553|  2.64k|  }
_ZN11flexbuffers7Builder5WriteImEEvT_m:
 1549|   435k|  void Write(T val, size_t byte_width) {
 1550|   435k|    FLATBUFFERS_ASSERT(sizeof(T) >= byte_width);
 1551|   435k|    val = flatbuffers::EndianScalar(val);
 1552|   435k|    WriteBytes(&val, byte_width);
 1553|   435k|  }
_ZN11flexbuffers7Builder5WriteIlEEvT_m:
 1549|   230k|  void Write(T val, size_t byte_width) {
 1550|   230k|    FLATBUFFERS_ASSERT(sizeof(T) >= byte_width);
 1551|   230k|    val = flatbuffers::EndianScalar(val);
 1552|   230k|    WriteBytes(&val, byte_width);
 1553|   230k|  }
_ZZN11flexbuffers7Builder6EndMapEmENKUlRKZNS0_6EndMapEmE8TwoValueS3_E_clES3_S3_:
 1284|  2.44M|              [&](const TwoValue& a, const TwoValue& b) -> bool {
 1285|  2.44M|                auto as = reinterpret_cast<const char*>(buf_.data() + a.key.u_);
 1286|  2.44M|                auto bs = reinterpret_cast<const char*>(buf_.data() + b.key.u_);
 1287|  2.44M|                auto comp = strcmp(as, bs);
 1288|       |                // We want to disallow duplicate keys, since this results in a
 1289|       |                // map where values cannot be found.
 1290|       |                // But we can't assert here (since we don't want to fail on
 1291|       |                // random JSON input) or have an error mechanism.
 1292|       |                // Instead, we set has_duplicate_keys_ in the builder to
 1293|       |                // signal this.
 1294|       |                // TODO: Have to check for pointer equality, as some sort
 1295|       |                // implementation apparently call this function with the same
 1296|       |                // element?? Why?
 1297|  2.44M|                if (!comp && &a != &b) has_duplicate_keys_ = true;
  ------------------
  |  Branch (1297:21): [True: 1.18M, False: 1.26M]
  |  Branch (1297:30): [True: 1.18M, False: 0]
  ------------------
 1298|  2.44M|                return comp < 0;
 1299|  2.44M|              });

_ZN11flatbuffers18FindHashFunction16EPKc:
  101|     62|    const char* name) {
  102|     62|  std::size_t size = sizeof(kHashFunctions16) / sizeof(kHashFunctions16[0]);
  103|    158|  for (std::size_t i = 0; i < size; ++i) {
  ------------------
  |  Branch (103:27): [True: 113, False: 45]
  ------------------
  104|    113|    if (std::strcmp(name, kHashFunctions16[i].name) == 0) {
  ------------------
  |  Branch (104:9): [True: 17, False: 96]
  ------------------
  105|     17|      return kHashFunctions16[i].function;
  106|     17|    }
  107|    113|  }
  108|     45|  return nullptr;
  109|     62|}
_ZN11flatbuffers18FindHashFunction32EPKc:
  112|  1.34k|    const char* name) {
  113|  1.34k|  std::size_t size = sizeof(kHashFunctions32) / sizeof(kHashFunctions32[0]);
  114|  1.88k|  for (std::size_t i = 0; i < size; ++i) {
  ------------------
  |  Branch (114:27): [True: 1.82k, False: 63]
  ------------------
  115|  1.82k|    if (std::strcmp(name, kHashFunctions32[i].name) == 0) {
  ------------------
  |  Branch (115:9): [True: 1.27k, False: 546]
  ------------------
  116|  1.27k|      return kHashFunctions32[i].function;
  117|  1.27k|    }
  118|  1.82k|  }
  119|     63|  return nullptr;
  120|  1.34k|}
_ZN11flatbuffers18FindHashFunction64EPKc:
  123|  2.21k|    const char* name) {
  124|  2.21k|  std::size_t size = sizeof(kHashFunctions64) / sizeof(kHashFunctions64[0]);
  125|  3.35k|  for (std::size_t i = 0; i < size; ++i) {
  ------------------
  |  Branch (125:27): [True: 3.30k, False: 53]
  ------------------
  126|  3.30k|    if (std::strcmp(name, kHashFunctions64[i].name) == 0) {
  ------------------
  |  Branch (126:9): [True: 2.16k, False: 1.14k]
  ------------------
  127|  2.16k|      return kHashFunctions64[i].function;
  128|  2.16k|    }
  129|  3.30k|  }
  130|     53|  return nullptr;
  131|  2.21k|}
_ZN11flatbuffers8HashFnv1IjEET_PKc:
   46|    800|T HashFnv1(const char* input) {
   47|    800|  T hash = FnvTraits<T>::kOffsetBasis;
   48|  1.97k|  for (const char* c = input; *c; ++c) {
  ------------------
  |  Branch (48:31): [True: 1.17k, False: 800]
  ------------------
   49|  1.17k|    hash *= FnvTraits<T>::kFnvPrime;
   50|  1.17k|    hash ^= static_cast<unsigned char>(*c);
   51|  1.17k|  }
   52|    800|  return hash;
   53|    800|}
_ZN11flatbuffers9HashFnv1aIjEET_PKc:
   56|    380|T HashFnv1a(const char* input) {
   57|    380|  T hash = FnvTraits<T>::kOffsetBasis;
   58|    800|  for (const char* c = input; *c; ++c) {
  ------------------
  |  Branch (58:31): [True: 420, False: 380]
  ------------------
   59|    420|    hash ^= static_cast<unsigned char>(*c);
   60|    420|    hash *= FnvTraits<T>::kFnvPrime;
   61|    420|  }
   62|    380|  return hash;
   63|    380|}
_ZN11flatbuffers8HashFnv1ImEET_PKc:
   46|  1.04k|T HashFnv1(const char* input) {
   47|  1.04k|  T hash = FnvTraits<T>::kOffsetBasis;
   48|  2.18k|  for (const char* c = input; *c; ++c) {
  ------------------
  |  Branch (48:31): [True: 1.14k, False: 1.04k]
  ------------------
   49|  1.14k|    hash *= FnvTraits<T>::kFnvPrime;
   50|  1.14k|    hash ^= static_cast<unsigned char>(*c);
   51|  1.14k|  }
   52|  1.04k|  return hash;
   53|  1.04k|}
_ZN11flatbuffers9HashFnv1aImEET_PKc:
   56|  1.16k|T HashFnv1a(const char* input) {
   57|  1.16k|  T hash = FnvTraits<T>::kOffsetBasis;
   58|   116k|  for (const char* c = input; *c; ++c) {
  ------------------
  |  Branch (58:31): [True: 115k, False: 1.16k]
  ------------------
   59|   115k|    hash ^= static_cast<unsigned char>(*c);
   60|   115k|    hash *= FnvTraits<T>::kFnvPrime;
   61|   115k|  }
   62|  1.16k|  return hash;
   63|  1.16k|}

_ZN11flatbuffers10IDLOptionsC2Ev:
  811|  27.6k|      : gen_jvmstatic(false),
  812|  27.6k|        use_flexbuffers(false),
  813|  27.6k|        strict_json(false),
  814|  27.6k|        output_default_scalars_in_json(false),
  815|  27.6k|        indent_step(2),
  816|  27.6k|        cpp_minify_enums(false),
  817|  27.6k|        output_enum_identifiers(true),
  818|  27.6k|        prefixed_enums(true),
  819|  27.6k|        scoped_enums(false),
  820|  27.6k|        emit_min_max_enum_values(true),
  821|  27.6k|        swift_implementation_only(false),
  822|  27.6k|        include_dependence_headers(true),
  823|  27.6k|        mutable_buffer(false),
  824|  27.6k|        one_file(false),
  825|  27.6k|        proto_mode(false),
  826|  27.6k|        proto_oneof_union(false),
  827|  27.6k|        generate_all(false),
  828|  27.6k|        skip_unexpected_fields_in_json(false),
  829|  27.6k|        generate_name_strings(false),
  830|  27.6k|        generate_object_based_api(false),
  831|  27.6k|        gen_compare(false),
  832|  27.6k|        gen_absl_hash(false),
  833|  27.6k|        cpp_object_api_pointer_type("std::unique_ptr"),
  834|  27.6k|        cpp_object_api_string_flexible_constructor(false),
  835|  27.6k|        cpp_object_api_field_case_style(CaseStyle_Unchanged),
  836|  27.6k|        cpp_direct_copy(true),
  837|  27.6k|        gen_nullable(false),
  838|  27.6k|        java_checkerframework(false),
  839|  27.6k|        gen_generated(false),
  840|  27.6k|        gen_json_coders(false),
  841|  27.6k|        object_suffix("T"),
  842|  27.6k|        union_value_namespacing(true),
  843|  27.6k|        allow_non_utf8(false),
  844|  27.6k|        natural_utf8(false),
  845|  27.6k|        keep_prefix(false),
  846|  27.6k|        binary_schema_comments(false),
  847|  27.6k|        binary_schema_builtins(false),
  848|  27.6k|        binary_schema_gen_embed(false),
  849|  27.6k|        binary_schema_absolute_paths(false),
  850|  27.6k|        protobuf_ascii_alike(false),
  851|  27.6k|        size_prefixed(false),
  852|  27.6k|        force_defaults(false),
  853|  27.6k|        java_primitive_has_method(false),
  854|  27.6k|        cs_gen_json_serializer(false),
  855|  27.6k|        cpp_static_reflection(false),
  856|  27.6k|        filename_suffix("_generated"),
  857|  27.6k|        filename_extension(),
  858|  27.6k|        no_warnings(false),
  859|  27.6k|        warnings_as_errors(false),
  860|  27.6k|        project_root(""),
  861|  27.6k|        cs_global_alias(false),
  862|  27.6k|        json_nested_flatbuffers(true),
  863|  27.6k|        json_nested_flexbuffers(true),
  864|  27.6k|        json_nested_legacy_flatbuffers(false),
  865|  27.6k|        ts_no_import_ext(false),
  866|  27.6k|        no_leak_private_annotations(false),
  867|  27.6k|        require_json_eof(true),
  868|  27.6k|        keep_proto_id(false),
  869|  27.6k|        python_no_type_prefix_suffix(false),
  870|  27.6k|        python_typing(false),
  871|  27.6k|        python_gen_numpy(true),
  872|  27.6k|        ts_omit_entrypoint(false),
  873|  27.6k|        ts_undefined_for_optionals(false),
  874|  27.6k|        proto_id_gap_action(ProtoIdGapAction::WARNING),
  875|  27.6k|        mini_reflect(IDLOptions::kNone),
  876|  27.6k|        require_explicit_ids(false),
  877|  27.6k|        rust_serialize(false),
  878|  27.6k|        rust_module_root_file(false),
  879|  27.6k|        lang_to_generate(0),
  880|  27.6k|        set_empty_strings_to_null(true),
  881|  27.6k|        set_empty_vectors_to_null(true),
  882|  27.6k|        grpc_filename_suffix(".fb"),
  883|  27.6k|        grpc_use_system_headers(true),
  884|  27.6k|        grpc_callback_api(false),
  885|  27.6k|        grpc_python_typed_handlers(false) {}
_ZN11flatbuffers6ParserC2ERKNS_10IDLOptionsE:
  979|  27.6k|      : current_namespace_(nullptr),
  980|  27.6k|        empty_namespace_(nullptr),
  981|  27.6k|        flex_builder_(256, flexbuffers::BUILDER_FLAG_SHARE_ALL),
  982|  27.6k|        root_struct_def_(nullptr),
  983|  27.6k|        opts(options),
  984|  27.6k|        uses_flexbuffers_(false),
  985|  27.6k|        has_warning_(false),
  986|  27.6k|        advanced_features_(0),
  987|  27.6k|        source_(nullptr),
  988|  27.6k|        anonymous_counter_(0),
  989|  27.6k|        parse_depth_counter_(0) {
  990|  27.6k|    if (opts.force_defaults) {
  ------------------
  |  Branch (990:9): [True: 0, False: 27.6k]
  ------------------
  991|      0|      builder_.ForceDefaults(true);
  992|      0|    }
  993|       |    // Start out with the empty namespace being current.
  994|  27.6k|    empty_namespace_ = new Namespace();
  995|  27.6k|    namespaces_.push_back(empty_namespace_);
  996|  27.6k|    current_namespace_ = empty_namespace_;
  997|  27.6k|    known_attributes_["deprecated"] = true;
  998|  27.6k|    known_attributes_["required"] = true;
  999|  27.6k|    known_attributes_["key"] = true;
 1000|  27.6k|    known_attributes_["shared"] = true;
 1001|  27.6k|    known_attributes_["hash"] = true;
 1002|  27.6k|    known_attributes_["id"] = true;
 1003|  27.6k|    known_attributes_["force_align"] = true;
 1004|  27.6k|    known_attributes_["bit_flags"] = true;
 1005|  27.6k|    known_attributes_["original_order"] = true;
 1006|  27.6k|    known_attributes_["nested_flatbuffer"] = true;
 1007|  27.6k|    known_attributes_["csharp_partial"] = true;
 1008|  27.6k|    known_attributes_["streaming"] = true;
 1009|  27.6k|    known_attributes_["idempotent"] = true;
 1010|  27.6k|    known_attributes_["cpp_type"] = true;
 1011|  27.6k|    known_attributes_["cpp_ptr_type"] = true;
 1012|  27.6k|    known_attributes_["cpp_ptr_type_get"] = true;
 1013|  27.6k|    known_attributes_["cpp_str_type"] = true;
 1014|  27.6k|    known_attributes_["cpp_str_flex_ctor"] = true;
 1015|  27.6k|    known_attributes_["native_inline"] = true;
 1016|  27.6k|    known_attributes_["native_custom_alloc"] = true;
 1017|  27.6k|    known_attributes_["native_type"] = true;
 1018|  27.6k|    known_attributes_["native_type_pack_name"] = true;
 1019|  27.6k|    known_attributes_["native_default"] = true;
 1020|  27.6k|    known_attributes_["flexbuffer"] = true;
 1021|  27.6k|    known_attributes_["private"] = true;
 1022|       |
 1023|       |    // An attribute added to a field to indicate that is uses 64-bit addressing.
 1024|  27.6k|    known_attributes_["offset64"] = true;
 1025|       |
 1026|       |    // An attribute added to a vector field to indicate that it uses 64-bit
 1027|       |    // addressing and it has a 64-bit length.
 1028|  27.6k|    known_attributes_["vector64"] = true;
 1029|  27.6k|  }
_ZN11flatbuffers11ParserStateC2Ev:
  891|  27.6k|      : prev_cursor_(nullptr),
  892|  27.6k|        cursor_(nullptr),
  893|  27.6k|        line_start_(nullptr),
  894|  27.6k|        line_(0),
  895|  27.6k|        token_(-1),
  896|  27.6k|        attr_is_trivial_ascii_string_(true) {}
_ZN11flatbuffers9NamespaceC2Ev:
  278|  48.4k|  Namespace() : from_table(0) {}
_ZN11flatbuffers11SymbolTableINS_10ServiceDefEED2Ev:
  241|  27.6k|  ~SymbolTable() {
  242|  30.4k|    for (auto it = vec.begin(); it != vec.end(); ++it) {
  ------------------
  |  Branch (242:33): [True: 2.75k, False: 27.6k]
  ------------------
  243|  2.75k|      delete *it;
  244|  2.75k|    }
  245|  27.6k|  }
_ZN11flatbuffers11SymbolTableINS_7RPCCallEED2Ev:
  241|  2.75k|  ~SymbolTable() {
  242|  10.6k|    for (auto it = vec.begin(); it != vec.end(); ++it) {
  ------------------
  |  Branch (242:33): [True: 7.85k, False: 2.75k]
  ------------------
  243|  7.85k|      delete *it;
  244|  7.85k|    }
  245|  2.75k|  }
_ZN11flatbuffers11SymbolTableINS_5ValueEED2Ev:
  241|   992k|  ~SymbolTable() {
  242|  1.01M|    for (auto it = vec.begin(); it != vec.end(); ++it) {
  ------------------
  |  Branch (242:33): [True: 21.4k, False: 992k]
  ------------------
  243|  21.4k|      delete *it;
  244|  21.4k|    }
  245|   992k|  }
_ZN11flatbuffers11SymbolTableINS_7EnumDefEED2Ev:
  241|  27.6k|  ~SymbolTable() {
  242|   134k|    for (auto it = vec.begin(); it != vec.end(); ++it) {
  ------------------
  |  Branch (242:33): [True: 106k, False: 27.6k]
  ------------------
  243|   106k|      delete *it;
  244|   106k|    }
  245|  27.6k|  }
_ZN11flatbuffers11SymbolTableINS_7EnumValEED2Ev:
  241|   106k|  ~SymbolTable() {
  242|   672k|    for (auto it = vec.begin(); it != vec.end(); ++it) {
  ------------------
  |  Branch (242:33): [True: 565k, False: 106k]
  ------------------
  243|   565k|      delete *it;
  244|   565k|    }
  245|   106k|  }
_ZN11flatbuffers11SymbolTableINS_9StructDefEED2Ev:
  241|  27.6k|  ~SymbolTable() {
  242|   256k|    for (auto it = vec.begin(); it != vec.end(); ++it) {
  ------------------
  |  Branch (242:33): [True: 228k, False: 27.6k]
  ------------------
  243|   228k|      delete *it;
  244|   228k|    }
  245|  27.6k|  }
_ZN11flatbuffers11SymbolTableINS_8FieldDefEED2Ev:
  241|   228k|  ~SymbolTable() {
  242|   307k|    for (auto it = vec.begin(); it != vec.end(); ++it) {
  ------------------
  |  Branch (242:33): [True: 79.2k, False: 228k]
  ------------------
  243|  79.2k|      delete *it;
  244|  79.2k|    }
  245|   228k|  }
_ZN11flatbuffers11SymbolTableINS_4TypeEED2Ev:
  241|  27.6k|  ~SymbolTable() {
  242|   201k|    for (auto it = vec.begin(); it != vec.end(); ++it) {
  ------------------
  |  Branch (242:33): [True: 173k, False: 27.6k]
  ------------------
  243|   173k|      delete *it;
  244|   173k|    }
  245|  27.6k|  }
_ZN11flatbuffers6ParserD2Ev:
 1038|  27.6k|  ~Parser() {
 1039|  75.0k|    for (auto it = namespaces_.begin(); it != namespaces_.end(); ++it) {
  ------------------
  |  Branch (1039:41): [True: 47.4k, False: 27.6k]
  ------------------
 1040|  47.4k|      delete *it;
 1041|  47.4k|    }
 1042|  27.6k|  }
_ZN11flatbuffers4TypeC2ENS_8BaseTypeEPNS_9StructDefEPNS_7EnumDefEt:
  198|  1.66M|      : base_type(_base_type),
  199|  1.66M|        element(BASE_TYPE_NONE),
  200|  1.66M|        struct_def(_sd),
  201|  1.66M|        enum_def(_ed),
  202|  1.66M|        fixed_length(_fixed_length) {}
_ZNK11flatbuffers4Type10VectorTypeEv:
  209|  66.2k|  Type VectorType() const {
  210|  66.2k|    return Type(element, struct_def, enum_def, fixed_length);
  211|  66.2k|  }
_ZN11flatbuffers5ValueC2Ev:
  229|   334k|      : constant("0"),
  230|   334k|        offset(static_cast<voffset_t>(~(static_cast<voffset_t>(0U)))) {}
_ZN11flatbuffers10DefinitionC2Ev:
  303|   425k|      : generated(false),
  304|   425k|        defined_namespace(nullptr),
  305|   425k|        serialized_location(0),
  306|   425k|        index(-1),
  307|   425k|        refcount(1),
  308|   425k|        declaration_file(nullptr) {}
_ZN11flatbuffers8FieldDefC2Ev:
  333|  79.2k|      : deprecated(false),
  334|  79.2k|        key(false),
  335|  79.2k|        shared(false),
  336|  79.2k|        native_inline(false),
  337|  79.2k|        flexbuffer(false),
  338|  79.2k|        offset64(false),
  339|  79.2k|        presence(kDefault),
  340|  79.2k|        nested_flatbuffer(nullptr),
  341|  79.2k|        padding(0),
  342|  79.2k|        sibling_union_field(nullptr) {}
_ZNK11flatbuffers8FieldDef16IsScalarOptionalEv:
  349|   140k|  bool IsScalarOptional() const { return IsScalar() && IsOptional(); }
  ------------------
  |  Branch (349:42): [True: 91.4k, False: 49.0k]
  |  Branch (349:56): [True: 28.3k, False: 63.0k]
  ------------------
_ZNK11flatbuffers8FieldDef8IsScalarEv:
  350|   140k|  bool IsScalar() const {
  351|   140k|    return ::flatbuffers::IsScalar(value.type.base_type);
  352|   140k|  }
_ZNK11flatbuffers8FieldDef10IsOptionalEv:
  353|   131k|  bool IsOptional() const { return presence == kOptional; }
_ZNK11flatbuffers8FieldDef10IsRequiredEv:
  354|   309k|  bool IsRequired() const { return presence == kRequired; }
_ZN11flatbuffers8FieldDef17MakeFieldPresenceEbb:
  377|  52.5k|  Presence static MakeFieldPresence(bool optional, bool required) {
  378|  52.5k|    FLATBUFFERS_ASSERT(!(required && optional));
  379|       |    // clang-format off
  380|  52.5k|    return required ? FieldDef::kRequired
  ------------------
  |  Branch (380:12): [True: 160, False: 52.3k]
  ------------------
  381|  52.5k|         : optional ? FieldDef::kOptional
  ------------------
  |  Branch (381:12): [True: 48.2k, False: 4.16k]
  ------------------
  382|  52.3k|                    : FieldDef::kDefault;
  383|       |    // clang-format on
  384|  52.5k|  }
_ZN11flatbuffers9StructDefC2Ev:
  405|   228k|      : fixed(false),
  406|   228k|        predecl(true),
  407|   228k|        sortbysize(true),
  408|   228k|        has_key(false),
  409|   228k|        minalign(1),
  410|   228k|        bytesize(0),
  411|   228k|        cycle_status{CycleStatus::NotChecked} {}
_ZN11flatbuffers9StructDef12PadLastFieldEm:
  413|  75.3k|  void PadLastField(size_t min_align) {
  414|  75.3k|    auto padding = PaddingBytes(bytesize, min_align);
  415|  75.3k|    bytesize += padding;
  416|  75.3k|    if (fields.vec.size()) fields.vec.back()->padding = padding;
  ------------------
  |  Branch (416:9): [True: 28.7k, False: 46.5k]
  ------------------
  417|  75.3k|  }
_ZNK11flatbuffers7EnumVal11GetAsUInt64Ev:
  455|  7.66M|  uint64_t GetAsUInt64() const { return static_cast<uint64_t>(value); }
_ZNK11flatbuffers7EnumVal10GetAsInt64Ev:
  456|  6.42M|  int64_t GetAsInt64() const { return value; }
_ZN11flatbuffers7EnumValC2ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEl:
  470|   566k|  EnumVal(const std::string& _name, int64_t _val) : name(_name), value(_val) {}
_ZN11flatbuffers7EnumDefC2Ev:
  477|   106k|  EnumDef() : is_union(false), uses_multiple_type_instances(false) {}
_ZNK11flatbuffers7EnumDef4sizeEv:
  506|   103k|  size_t size() const { return vals.vec.size(); }
_ZNK11flatbuffers7EnumDef4ValsEv:
  508|   839k|  const std::vector<EnumVal*>& Vals() const { return vals.vec; }
_ZNK11flatbuffers7EnumDef6LookupERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  510|  4.41k|  const EnumVal* Lookup(const std::string& enum_name) const {
  511|  4.41k|    return vals.Lookup(enum_name);
  512|  4.41k|  }
_ZNK11flatbuffers7EnumDef8IsUInt64Ev:
  521|   234k|  bool IsUInt64() const {
  522|   234k|    return (BASE_TYPE_ULONG == underlying_type.base_type);
  523|   234k|  }
_ZN11flatbuffers11ParserState10ResetStateEPKc:
  899|  27.6k|  void ResetState(const char* source) {
  900|  27.6k|    prev_cursor_ = source;
  901|  27.6k|    cursor_ = source;
  902|  27.6k|    line_ = 0;
  903|  27.6k|    MarkNewLine();
  904|  27.6k|  }
_ZN11flatbuffers11ParserState11MarkNewLineEv:
  906|   134k|  void MarkNewLine() {
  907|   134k|    line_start_ = cursor_;
  908|   134k|    line_ += 1;
  909|   134k|  }
_ZNK11flatbuffers11ParserState14CursorPositionEv:
  911|  44.8k|  int64_t CursorPosition() const {
  912|  44.8k|    FLATBUFFERS_ASSERT(cursor_ && line_start_ && cursor_ >= line_start_);
  913|  44.8k|    return static_cast<int64_t>(cursor_ - line_start_);
  914|  44.8k|  }
_ZN11flatbuffers12CheckedErrorC2Eb:
  940|  14.8M|      : is_error_(error), has_been_checked_(false) {}
_ZN11flatbuffers12CheckedErroraSERKS0_:
  942|   267k|  CheckedError& operator=(const CheckedError& other) {
  943|   267k|    is_error_ = other.is_error_;
  944|   267k|    has_been_checked_ = false;
  945|   267k|    other.has_been_checked_ = true;
  946|   267k|    return *this;
  947|   267k|  }
_ZN11flatbuffers12CheckedErrorC2ERKS0_:
  949|   267k|  CheckedError(const CheckedError& other) {
  950|   267k|    *this = other;  // Use assignment operator.
  951|   267k|  }
_ZN11flatbuffers12CheckedErrorD2Ev:
  953|  15.1M|  ~CheckedError() { FLATBUFFERS_ASSERT(has_been_checked_); }
_ZN11flatbuffers12CheckedError5CheckEv:
  955|  14.9M|  bool Check() {
  956|  14.9M|    has_been_checked_ = true;
  957|  14.9M|    return is_error_;
  958|  14.9M|  }
_ZN11flatbuffers8IsScalarENS_8BaseTypeE:
  134|   603k|inline bool IsScalar (BaseType t) { return t >= BASE_TYPE_UTYPE &&
  ------------------
  |  Branch (134:44): [True: 588k, False: 14.5k]
  ------------------
  135|   588k|                                           t <= BASE_TYPE_DOUBLE; }
  ------------------
  |  Branch (135:44): [True: 486k, False: 101k]
  ------------------
_ZN11flatbuffers9IsIntegerENS_8BaseTypeE:
  136|   675k|inline bool IsInteger(BaseType t) { return t >= BASE_TYPE_UTYPE &&
  ------------------
  |  Branch (136:44): [True: 673k, False: 1.97k]
  ------------------
  137|   673k|                                           t <= BASE_TYPE_ULONG; }
  ------------------
  |  Branch (137:44): [True: 642k, False: 30.3k]
  ------------------
_ZN11flatbuffers7IsFloatENS_8BaseTypeE:
  138|   311k|inline bool IsFloat  (BaseType t) { return t == BASE_TYPE_FLOAT ||
  ------------------
  |  Branch (138:44): [True: 40.5k, False: 271k]
  ------------------
  139|   271k|                                           t == BASE_TYPE_DOUBLE; }
  ------------------
  |  Branch (139:44): [True: 21.9k, False: 249k]
  ------------------
_ZN11flatbuffers6IsBoolENS_8BaseTypeE:
  142|  54.3k|inline bool IsBool   (BaseType t) { return t == BASE_TYPE_BOOL; }
_ZN11flatbuffers8IsVectorENS_8BaseTypeE:
  145|   113k|inline bool IsVector (BaseType t) { return t == BASE_TYPE_VECTOR ||
  ------------------
  |  Branch (145:44): [True: 26.3k, False: 86.8k]
  ------------------
  146|  86.8k|                                           t == BASE_TYPE_VECTOR64; }
  ------------------
  |  Branch (146:44): [True: 307, False: 86.5k]
  ------------------
_ZN11flatbuffers10IsUnsignedENS_8BaseTypeE:
  148|  4.40k|inline bool IsUnsigned(BaseType t) {
  149|  4.40k|  return (t == BASE_TYPE_UTYPE)  || (t == BASE_TYPE_UCHAR) ||
  ------------------
  |  Branch (149:10): [True: 701, False: 3.70k]
  |  Branch (149:37): [True: 155, False: 3.55k]
  ------------------
  150|  3.55k|         (t == BASE_TYPE_USHORT) || (t == BASE_TYPE_UINT)  ||
  ------------------
  |  Branch (150:10): [True: 131, False: 3.42k]
  |  Branch (150:37): [True: 328, False: 3.09k]
  ------------------
  151|  3.09k|         (t == BASE_TYPE_ULONG);
  ------------------
  |  Branch (151:10): [True: 1.19k, False: 1.89k]
  ------------------
  152|  4.40k|}
_ZN11flatbuffers6SizeOfENS_8BaseTypeE:
  154|  1.03M|inline size_t SizeOf(const BaseType t) {
  155|  1.03M|  switch (t) {
  156|      0|  #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
  157|      0|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  158|      0|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  ------------------
  |  |  112|  55.0k|        FLATBUFFERS_GEN_TYPES_SCALAR(TD) \
  |  |  ------------------
  |  |  |  |   50|   344k|  TD(NONE,     "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 0) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|   344k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|   344k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 344k, False: 694k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   51|   344k|  TD(UTYPE,    "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 1) /* begin scalar/int */ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  90.0k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  90.0k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 90.0k, False: 949k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   52|  90.0k|  TD(BOOL,     "bool",   uint8_t,  boolean,bool,    bool,   bool,    bool, Boolean, Bool, 2) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  11.6k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  11.6k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 11.6k, False: 1.02M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|  37.8k|  TD(CHAR,     "byte",   int8_t,   byte,   int8,    sbyte,  int8,    i8,   Byte, Int8, 3) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  37.8k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  37.8k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 37.8k, False: 1.00M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   54|  37.8k|  TD(UCHAR,    "ubyte",  uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 4) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  22.5k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  22.5k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 22.5k, False: 1.01M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   55|  22.5k|  TD(SHORT,    "short",  int16_t,  short,  int16,   short,  int16,   i16,  Short, Int16, 5) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  19.0k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  19.0k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 19.0k, False: 1.02M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   56|  19.0k|  TD(USHORT,   "ushort", uint16_t, short,  uint16,  ushort, uint16,  u16,  UShort, UInt16, 6) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  15.7k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  15.7k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 15.7k, False: 1.02M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|  24.3k|  TD(INT,      "int",    int32_t,  int,    int32,   int,    int32,   i32,  Int, Int32, 7) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  24.3k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  24.3k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 24.3k, False: 1.01M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   58|  24.3k|  TD(UINT,     "uint",   uint32_t, int,    uint32,  uint,   uint32,  u32,  UInt, UInt32, 8) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  20.7k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  20.7k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 20.7k, False: 1.01M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   59|  61.7k|  TD(LONG,     "long",   int64_t,  long,   int64,   long,   int64,   i64,  Long, Int64, 9) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  61.7k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  61.7k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 61.7k, False: 977k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  61.7k|  TD(ULONG,    "ulong",  uint64_t, long,   uint64,  ulong,  uint64,  u64,  ULong, UInt64, 10) /* end int */ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  44.0k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  44.0k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 44.0k, False: 995k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  44.0k|  TD(FLOAT,    "float",  float,    float,  float32, float,  float32, f32,  Float, Float32, 11) /* begin float */ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  22.6k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  22.6k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 22.6k, False: 1.01M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   62|  55.0k|  TD(DOUBLE,   "double", double,   double, float64, double, float64, f64,  Double, Double, 12) /* end float/scalar */
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  55.0k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  55.0k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 55.0k, False: 984k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  113|  55.0k|        FLATBUFFERS_GEN_TYPES_POINTER(TD) \
  |  |  ------------------
  |  |  |  |   64|  14.8k|  TD(STRING,   "string", Offset<void>,   int, int, StringOffset, int, unused, Int, Offset<String>, 13) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  14.8k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  14.8k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 14.8k, False: 1.02M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   65|  96.0k|  TD(VECTOR,   "",       Offset<void>,   int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 14) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  96.0k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  96.0k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 96.0k, False: 943k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   66|  96.0k|  TD(VECTOR64, "",       Offset64<void>, int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 18) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  27.9k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  27.9k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 27.9k, False: 1.01M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   67|   117k|  TD(STRUCT,   "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 15) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|   117k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|   117k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 117k, False: 922k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   68|   117k|  TD(UNION,    "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 16)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  13.2k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  13.2k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 13.2k, False: 1.02M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  114|  13.2k|        FLATBUFFERS_GEN_TYPE_ARRAY(TD)
  |  |  ------------------
  |  |  |  |   70|    319|  TD(ARRAY,    "",       int,            int, int, int,          int, unused, Int, Offset<UOffset>, 17)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|    319|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|    319|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 319, False: 1.03M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  159|      0|  #undef FLATBUFFERS_TD
  160|      0|    default: FLATBUFFERS_ASSERT(0);
  ------------------
  |  Branch (160:5): [True: 0, False: 1.03M]
  ------------------
  161|  1.03M|  }
  162|      0|  return 0;
  163|  1.03M|}
_ZN11flatbuffers8TypeNameENS_8BaseTypeE:
  165|    284|inline const char* TypeName(const BaseType t) {
  166|    284|  switch (t) {
  167|      0|  #define FLATBUFFERS_TD(ENUM, IDLTYPE, ...) \
  168|      0|    case BASE_TYPE_##ENUM: return IDLTYPE;
  169|      0|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  ------------------
  |  |  112|     27|        FLATBUFFERS_GEN_TYPES_SCALAR(TD) \
  |  |  ------------------
  |  |  |  |   50|     20|  TD(NONE,     "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 0) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|     20|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|     20|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 20, False: 264]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   51|     20|  TD(UTYPE,    "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 1) /* begin scalar/int */ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      1|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      1|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 1, False: 283]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   52|     23|  TD(BOOL,     "bool",   uint8_t,  boolean,bool,    bool,   bool,    bool, Boolean, Bool, 2) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|     23|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|     23|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 23, False: 261]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|     23|  TD(CHAR,     "byte",   int8_t,   byte,   int8,    sbyte,  int8,    i8,   Byte, Int8, 3) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|     18|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|     18|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 18, False: 266]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   54|     18|  TD(UCHAR,    "ubyte",  uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 4) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      9|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      9|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 9, False: 275]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   55|      9|  TD(SHORT,    "short",  int16_t,  short,  int16,   short,  int16,   i16,  Short, Int16, 5) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      8|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      8|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 8, False: 276]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   56|      9|  TD(USHORT,   "ushort", uint16_t, short,  uint16,  ushort, uint16,  u16,  UShort, UInt16, 6) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      9|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      9|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 9, False: 275]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|     60|  TD(INT,      "int",    int32_t,  int,    int32,   int,    int32,   i32,  Int, Int32, 7) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|     60|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|     60|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 60, False: 224]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   58|     60|  TD(UINT,     "uint",   uint32_t, int,    uint32,  uint,   uint32,  u32,  UInt, UInt32, 8) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|     12|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|     12|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 12, False: 272]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   59|     22|  TD(LONG,     "long",   int64_t,  long,   int64,   long,   int64,   i64,  Long, Int64, 9) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|     22|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|     22|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 22, False: 262]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     22|  TD(ULONG,    "ulong",  uint64_t, long,   uint64,  ulong,  uint64,  u64,  ULong, UInt64, 10) /* end int */ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      7|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      7|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 7, False: 277]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     40|  TD(FLOAT,    "float",  float,    float,  float32, float,  float32, f32,  Float, Float32, 11) /* begin float */ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|     40|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|     40|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 40, False: 244]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   62|     40|  TD(DOUBLE,   "double", double,   double, float64, double, float64, f64,  Double, Double, 12) /* end float/scalar */
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|     27|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|     27|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 27, False: 257]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  113|     27|        FLATBUFFERS_GEN_TYPES_POINTER(TD) \
  |  |  ------------------
  |  |  |  |   64|      2|  TD(STRING,   "string", Offset<void>,   int, int, StringOffset, int, unused, Int, Offset<String>, 13) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      2|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      2|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 2, False: 282]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   65|      6|  TD(VECTOR,   "",       Offset<void>,   int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 14) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      6|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      6|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 6, False: 278]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   66|      6|  TD(VECTOR64, "",       Offset64<void>, int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 18) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      0|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      0|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 0, False: 284]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   67|     19|  TD(STRUCT,   "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 15) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|     19|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|     19|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 19, False: 265]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   68|     19|  TD(UNION,    "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 16)
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      0|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      0|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 0, False: 284]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  114|      1|        FLATBUFFERS_GEN_TYPE_ARRAY(TD)
  |  |  ------------------
  |  |  |  |   70|      1|  TD(ARRAY,    "",       int,            int, int, int,          int, unused, Int, Offset<UOffset>, 17)
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      1|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      1|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 1, False: 283]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|      0|  #undef FLATBUFFERS_TD
  171|      0|    default: FLATBUFFERS_ASSERT(0);
  ------------------
  |  Branch (171:5): [True: 0, False: 284]
  ------------------
  172|    284|  }
  173|      0|  return nullptr;
  174|    284|}
_ZN11flatbuffers8IsStringERKNS_4TypeE:
  529|   185k|inline bool IsString(const Type& type) {
  530|   185k|  return type.base_type == BASE_TYPE_STRING;
  531|   185k|}
_ZN11flatbuffers8IsStructERKNS_4TypeE:
  533|   470k|inline bool IsStruct(const Type& type) {
  534|   470k|  return type.base_type == BASE_TYPE_STRUCT && type.struct_def->fixed;
  ------------------
  |  Branch (534:10): [True: 208k, False: 262k]
  |  Branch (534:48): [True: 22.9k, False: 185k]
  ------------------
  535|   470k|}
_ZN11flatbuffers18IsIncompleteStructERKNS_4TypeE:
  537|  3.87k|inline bool IsIncompleteStruct(const Type& type) {
  538|  3.87k|  return type.base_type == BASE_TYPE_STRUCT && type.struct_def->predecl;
  ------------------
  |  Branch (538:10): [True: 603, False: 3.26k]
  |  Branch (538:48): [True: 5, False: 598]
  ------------------
  539|  3.87k|}
_ZN11flatbuffers7IsTableERKNS_4TypeE:
  541|     21|inline bool IsTable(const Type& type) {
  542|     21|  return type.base_type == BASE_TYPE_STRUCT && !type.struct_def->fixed;
  ------------------
  |  Branch (542:10): [True: 18, False: 3]
  |  Branch (542:48): [True: 18, False: 0]
  ------------------
  543|     21|}
_ZN11flatbuffers8IsVectorERKNS_4TypeE:
  553|   113k|inline bool IsVector(const Type& type) { return IsVector(type.base_type); }
_ZN11flatbuffers16IsVectorOfStructERKNS_4TypeE:
  555|     34|inline bool IsVectorOfStruct(const Type& type) {
  556|     34|  return IsVector(type) && IsStruct(type.VectorType());
  ------------------
  |  Branch (556:10): [True: 31, False: 3]
  |  Branch (556:28): [True: 10, False: 21]
  ------------------
  557|     34|}
_ZN11flatbuffers15IsVectorOfTableERKNS_4TypeE:
  559|     24|inline bool IsVectorOfTable(const Type& type) {
  560|     24|  return IsVector(type) && IsTable(type.VectorType());
  ------------------
  |  Branch (560:10): [True: 21, False: 3]
  |  Branch (560:28): [True: 18, False: 3]
  ------------------
  561|     24|}
_ZN11flatbuffers7IsArrayERKNS_4TypeE:
  563|   314k|inline bool IsArray(const Type& type) {
  564|   314k|  return type.base_type == BASE_TYPE_ARRAY;
  565|   314k|}
_ZN11flatbuffers8IsSeriesERKNS_4TypeE:
  567|  12.6k|inline bool IsSeries(const Type& type) {
  568|  12.6k|  return IsVector(type) || IsArray(type);
  ------------------
  |  Branch (568:10): [True: 1, False: 12.6k]
  |  Branch (568:28): [True: 1, False: 12.6k]
  ------------------
  569|  12.6k|}
_ZN11flatbuffers6IsEnumERKNS_4TypeE:
  571|    328|inline bool IsEnum(const Type& type) {
  572|    328|  return type.enum_def != nullptr && IsInteger(type.base_type);
  ------------------
  |  Branch (572:10): [True: 1, False: 327]
  |  Branch (572:38): [True: 1, False: 0]
  ------------------
  573|    328|}
_ZN11flatbuffers10InlineSizeERKNS_4TypeE:
  575|  66.6k|inline size_t InlineSize(const Type& type) {
  576|  66.6k|  return IsStruct(type)
  ------------------
  |  Branch (576:10): [True: 731, False: 65.9k]
  ------------------
  577|  66.6k|             ? type.struct_def->bytesize
  578|  66.6k|             : (IsArray(type)
  ------------------
  |  Branch (578:17): [True: 12.9k, False: 52.9k]
  ------------------
  579|  65.9k|                    ? InlineSize(type.VectorType()) * type.fixed_length
  580|  65.9k|                    : SizeOf(type.base_type));
  581|  66.6k|}
_ZN11flatbuffers15InlineAlignmentERKNS_4TypeE:
  583|   119k|inline size_t InlineAlignment(const Type& type) {
  584|   119k|  if (IsStruct(type)) {
  ------------------
  |  Branch (584:7): [True: 888, False: 118k]
  ------------------
  585|    888|    return type.struct_def->minalign;
  586|   118k|  } else if (IsArray(type)) {
  ------------------
  |  Branch (586:14): [True: 998, False: 117k]
  ------------------
  587|    998|    return IsStruct(type.VectorType()) ? type.struct_def->minalign
  ------------------
  |  Branch (587:12): [True: 109, False: 889]
  ------------------
  588|    998|                                       : SizeOf(type.element);
  589|   117k|  } else {
  590|   117k|    return SizeOf(type.base_type);
  591|   117k|  }
  592|   119k|}
_ZNK11flatbuffers11SymbolTableINS_7EnumValEE6LookupERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  266|  4.41k|  T* Lookup(const std::string& name) const {
  267|  4.41k|    auto it = dict.find(name);
  268|  4.41k|    return it == dict.end() ? nullptr : it->second;
  ------------------
  |  Branch (268:12): [True: 384, False: 4.03k]
  ------------------
  269|  4.41k|  }
_ZNK11flatbuffers11SymbolTableINS_5ValueEE6LookupERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  266|  1.42M|  T* Lookup(const std::string& name) const {
  267|  1.42M|    auto it = dict.find(name);
  268|  1.42M|    return it == dict.end() ? nullptr : it->second;
  ------------------
  |  Branch (268:12): [True: 1.22M, False: 195k]
  ------------------
  269|  1.42M|  }
_ZNK11flatbuffers11SymbolTableINS_9StructDefEE6LookupERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  266|  1.46M|  T* Lookup(const std::string& name) const {
  267|  1.46M|    auto it = dict.find(name);
  268|  1.46M|    return it == dict.end() ? nullptr : it->second;
  ------------------
  |  Branch (268:12): [True: 1.23M, False: 228k]
  ------------------
  269|  1.46M|  }
_ZN11flatbuffers11SymbolTableINS_8FieldDefEE3AddERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPS1_:
  247|  79.2k|  bool Add(const std::string& name, T* e) {
  248|  79.2k|    vec.emplace_back(e);
  249|  79.2k|    auto it = dict.find(name);
  250|  79.2k|    if (it != dict.end()) return true;
  ------------------
  |  Branch (250:9): [True: 62, False: 79.1k]
  ------------------
  251|  79.1k|    dict[name] = e;
  252|  79.1k|    return false;
  253|  79.2k|  }
_ZN11flatbuffers11SymbolTableINS_5ValueEE3AddERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPS1_:
  247|  21.4k|  bool Add(const std::string& name, T* e) {
  248|  21.4k|    vec.emplace_back(e);
  249|  21.4k|    auto it = dict.find(name);
  250|  21.4k|    if (it != dict.end()) return true;
  ------------------
  |  Branch (250:9): [True: 3.66k, False: 17.7k]
  ------------------
  251|  17.7k|    dict[name] = e;
  252|  17.7k|    return false;
  253|  21.4k|  }
_ZNK11flatbuffers11SymbolTableINS_8FieldDefEE6LookupERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  266|   182k|  T* Lookup(const std::string& name) const {
  267|   182k|    auto it = dict.find(name);
  268|   182k|    return it == dict.end() ? nullptr : it->second;
  ------------------
  |  Branch (268:12): [True: 2.58k, False: 180k]
  ------------------
  269|   182k|  }
_ZN11flatbuffers11SymbolTableINS_9StructDefEE4MoveERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEESB_:
  255|  9.76k|  void Move(const std::string& oldname, const std::string& newname) {
  256|  9.76k|    auto it = dict.find(oldname);
  257|  9.76k|    if (it != dict.end()) {
  ------------------
  |  Branch (257:9): [True: 9.76k, False: 0]
  ------------------
  258|  9.76k|      auto obj = it->second;
  259|  9.76k|      dict.erase(it);
  260|  9.76k|      dict[newname] = obj;
  261|  9.76k|    } else {
  262|      0|      FLATBUFFERS_ASSERT(false);
  263|      0|    }
  264|  9.76k|  }
_ZN11flatbuffers11SymbolTableINS_9StructDefEE3AddERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPS1_:
  247|   228k|  bool Add(const std::string& name, T* e) {
  248|   228k|    vec.emplace_back(e);
  249|   228k|    auto it = dict.find(name);
  250|   228k|    if (it != dict.end()) return true;
  ------------------
  |  Branch (250:9): [True: 0, False: 228k]
  ------------------
  251|   228k|    dict[name] = e;
  252|   228k|    return false;
  253|   228k|  }
_ZN11flatbuffers11SymbolTableINS_7EnumValEE3AddERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPS1_:
  247|   565k|  bool Add(const std::string& name, T* e) {
  248|   565k|    vec.emplace_back(e);
  249|   565k|    auto it = dict.find(name);
  250|   565k|    if (it != dict.end()) return true;
  ------------------
  |  Branch (250:9): [True: 52, False: 565k]
  ------------------
  251|   565k|    dict[name] = e;
  252|   565k|    return false;
  253|   565k|  }
_ZN11flatbuffers11SymbolTableINS_4TypeEE3AddERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPS1_:
  247|   173k|  bool Add(const std::string& name, T* e) {
  248|   173k|    vec.emplace_back(e);
  249|   173k|    auto it = dict.find(name);
  250|   173k|    if (it != dict.end()) return true;
  ------------------
  |  Branch (250:9): [True: 4, False: 173k]
  ------------------
  251|   173k|    dict[name] = e;
  252|   173k|    return false;
  253|   173k|  }
_ZN11flatbuffers11SymbolTableINS_10ServiceDefEE3AddERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPS1_:
  247|  2.75k|  bool Add(const std::string& name, T* e) {
  248|  2.75k|    vec.emplace_back(e);
  249|  2.75k|    auto it = dict.find(name);
  250|  2.75k|    if (it != dict.end()) return true;
  ------------------
  |  Branch (250:9): [True: 6, False: 2.74k]
  ------------------
  251|  2.74k|    dict[name] = e;
  252|  2.74k|    return false;
  253|  2.75k|  }
_ZN11flatbuffers11SymbolTableINS_7RPCCallEE3AddERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPS1_:
  247|  7.85k|  bool Add(const std::string& name, T* e) {
  248|  7.85k|    vec.emplace_back(e);
  249|  7.85k|    auto it = dict.find(name);
  250|  7.85k|    if (it != dict.end()) return true;
  ------------------
  |  Branch (250:9): [True: 14, False: 7.84k]
  ------------------
  251|  7.84k|    dict[name] = e;
  252|  7.84k|    return false;
  253|  7.85k|  }
_ZN11flatbuffers11SymbolTableINS_7EnumDefEE3AddERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPS1_:
  247|   106k|  bool Add(const std::string& name, T* e) {
  248|   106k|    vec.emplace_back(e);
  249|   106k|    auto it = dict.find(name);
  250|   106k|    if (it != dict.end()) return true;
  ------------------
  |  Branch (250:9): [True: 74, False: 106k]
  ------------------
  251|   106k|    dict[name] = e;
  252|   106k|    return false;
  253|   106k|  }
_ZNK11flatbuffers11SymbolTableINS_7EnumDefEE6LookupERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  266|   112k|  T* Lookup(const std::string& name) const {
  267|   112k|    auto it = dict.find(name);
  268|   112k|    return it == dict.end() ? nullptr : it->second;
  ------------------
  |  Branch (268:12): [True: 73.2k, False: 39.1k]
  ------------------
  269|   112k|  }

_ZN11flatbuffers20UnionTypeFieldSuffixEv:
  425|  94.6k|constexpr const char* UnionTypeFieldSuffix() { return "_type"; }

_ZN10reflection18VerifySchemaBufferILb0EEEbRN11flatbuffers16VerifierTemplateIXT_EEE:
 1513|  5.09k|    ::flatbuffers::VerifierTemplate<B> &verifier) {
 1514|  5.09k|  return verifier.template VerifyBuffer<reflection::Schema>(SchemaIdentifier());
 1515|  5.09k|}
_ZNK10reflection6Schema6VerifyILb0EEEbRN11flatbuffers16VerifierTemplateIXT_EEE:
 1373|  5.09k|  bool Verify(::flatbuffers::VerifierTemplate<B> &verifier) const {
 1374|  5.09k|    return VerifyTableStart(verifier) &&
  ------------------
  |  Branch (1374:12): [True: 5.09k, False: 0]
  ------------------
 1375|  5.09k|           VerifyOffsetRequired(verifier, VT_OBJECTS) &&
  ------------------
  |  Branch (1375:12): [True: 5.09k, False: 0]
  ------------------
 1376|  5.09k|           verifier.VerifyVector(objects()) &&
  ------------------
  |  Branch (1376:12): [True: 5.09k, False: 0]
  ------------------
 1377|  5.09k|           verifier.VerifyVectorOfTables(objects()) &&
  ------------------
  |  Branch (1377:12): [True: 5.09k, False: 0]
  ------------------
 1378|  5.09k|           VerifyOffsetRequired(verifier, VT_ENUMS) &&
  ------------------
  |  Branch (1378:12): [True: 5.09k, False: 0]
  ------------------
 1379|  5.09k|           verifier.VerifyVector(enums()) &&
  ------------------
  |  Branch (1379:12): [True: 5.09k, False: 0]
  ------------------
 1380|  5.09k|           verifier.VerifyVectorOfTables(enums()) &&
  ------------------
  |  Branch (1380:12): [True: 5.09k, False: 0]
  ------------------
 1381|  5.09k|           VerifyOffset(verifier, VT_FILE_IDENT) &&
  ------------------
  |  Branch (1381:12): [True: 5.09k, False: 0]
  ------------------
 1382|  5.09k|           verifier.VerifyString(file_ident()) &&
  ------------------
  |  Branch (1382:12): [True: 5.09k, False: 0]
  ------------------
 1383|  5.09k|           VerifyOffset(verifier, VT_FILE_EXT) &&
  ------------------
  |  Branch (1383:12): [True: 5.09k, False: 0]
  ------------------
 1384|  5.09k|           verifier.VerifyString(file_ext()) &&
  ------------------
  |  Branch (1384:12): [True: 5.09k, False: 0]
  ------------------
 1385|  5.09k|           VerifyOffset(verifier, VT_ROOT_TABLE) &&
  ------------------
  |  Branch (1385:12): [True: 5.09k, False: 0]
  ------------------
 1386|  5.09k|           verifier.VerifyTable(root_table()) &&
  ------------------
  |  Branch (1386:12): [True: 5.09k, False: 0]
  ------------------
 1387|  5.09k|           VerifyOffset(verifier, VT_SERVICES) &&
  ------------------
  |  Branch (1387:12): [True: 5.09k, False: 0]
  ------------------
 1388|  5.09k|           verifier.VerifyVector(services()) &&
  ------------------
  |  Branch (1388:12): [True: 5.09k, False: 0]
  ------------------
 1389|  5.09k|           verifier.VerifyVectorOfTables(services()) &&
  ------------------
  |  Branch (1389:12): [True: 5.09k, False: 0]
  ------------------
 1390|  5.09k|           VerifyField<uint64_t>(verifier, VT_ADVANCED_FEATURES, 8) &&
  ------------------
  |  Branch (1390:12): [True: 5.09k, False: 0]
  ------------------
 1391|  5.09k|           VerifyOffset(verifier, VT_FBS_FILES) &&
  ------------------
  |  Branch (1391:12): [True: 5.09k, False: 0]
  ------------------
 1392|  5.09k|           verifier.VerifyVector(fbs_files()) &&
  ------------------
  |  Branch (1392:12): [True: 5.09k, False: 0]
  ------------------
 1393|  5.09k|           verifier.VerifyVectorOfTables(fbs_files()) &&
  ------------------
  |  Branch (1393:12): [True: 5.09k, False: 0]
  ------------------
 1394|  5.09k|           verifier.EndTable();
  ------------------
  |  Branch (1394:12): [True: 5.09k, False: 0]
  ------------------
 1395|  5.09k|  }
_ZNK10reflection6Schema7objectsEv:
 1346|  10.1k|  const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::Object>> *objects() const {
 1347|  10.1k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::Object>> *>(VT_OBJECTS);
 1348|  10.1k|  }
_ZNK10reflection6Object6VerifyILb0EEEbRN11flatbuffers16VerifierTemplateIXT_EEE:
  889|  58.4k|  bool Verify(::flatbuffers::VerifierTemplate<B> &verifier) const {
  890|  58.4k|    return VerifyTableStart(verifier) &&
  ------------------
  |  Branch (890:12): [True: 58.4k, False: 0]
  ------------------
  891|  58.4k|           VerifyOffsetRequired(verifier, VT_NAME) &&
  ------------------
  |  Branch (891:12): [True: 58.4k, False: 0]
  ------------------
  892|  58.4k|           verifier.VerifyString(name()) &&
  ------------------
  |  Branch (892:12): [True: 58.4k, False: 0]
  ------------------
  893|  58.4k|           VerifyOffsetRequired(verifier, VT_FIELDS) &&
  ------------------
  |  Branch (893:12): [True: 58.4k, False: 0]
  ------------------
  894|  58.4k|           verifier.VerifyVector(fields()) &&
  ------------------
  |  Branch (894:12): [True: 58.4k, False: 0]
  ------------------
  895|  58.4k|           verifier.VerifyVectorOfTables(fields()) &&
  ------------------
  |  Branch (895:12): [True: 58.4k, False: 0]
  ------------------
  896|  58.4k|           VerifyField<uint8_t>(verifier, VT_IS_STRUCT, 1) &&
  ------------------
  |  Branch (896:12): [True: 58.4k, False: 0]
  ------------------
  897|  58.4k|           VerifyField<int32_t>(verifier, VT_MINALIGN, 4) &&
  ------------------
  |  Branch (897:12): [True: 58.4k, False: 0]
  ------------------
  898|  58.4k|           VerifyField<int32_t>(verifier, VT_BYTESIZE, 4) &&
  ------------------
  |  Branch (898:12): [True: 58.4k, False: 0]
  ------------------
  899|  58.4k|           VerifyOffset(verifier, VT_ATTRIBUTES) &&
  ------------------
  |  Branch (899:12): [True: 58.4k, False: 0]
  ------------------
  900|  58.4k|           verifier.VerifyVector(attributes()) &&
  ------------------
  |  Branch (900:12): [True: 58.4k, False: 0]
  ------------------
  901|  58.4k|           verifier.VerifyVectorOfTables(attributes()) &&
  ------------------
  |  Branch (901:12): [True: 58.4k, False: 0]
  ------------------
  902|  58.4k|           VerifyOffset(verifier, VT_DOCUMENTATION) &&
  ------------------
  |  Branch (902:12): [True: 58.4k, False: 0]
  ------------------
  903|  58.4k|           verifier.VerifyVector(documentation()) &&
  ------------------
  |  Branch (903:12): [True: 58.4k, False: 0]
  ------------------
  904|  58.4k|           verifier.VerifyVectorOfStrings(documentation()) &&
  ------------------
  |  Branch (904:12): [True: 58.4k, False: 0]
  ------------------
  905|  58.4k|           VerifyOffset(verifier, VT_DECLARATION_FILE) &&
  ------------------
  |  Branch (905:12): [True: 58.4k, False: 0]
  ------------------
  906|  58.4k|           verifier.VerifyString(declaration_file()) &&
  ------------------
  |  Branch (906:12): [True: 58.4k, False: 0]
  ------------------
  907|  58.4k|           verifier.EndTable();
  ------------------
  |  Branch (907:12): [True: 58.4k, False: 0]
  ------------------
  908|  58.4k|  }
_ZNK10reflection6Object4nameEv:
  851|  1.39M|  const ::flatbuffers::String *name() const {
  852|  1.39M|    return GetPointer<const ::flatbuffers::String *>(VT_NAME);
  853|  1.39M|  }
_ZNK10reflection6Object6fieldsEv:
  866|   116k|  const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::Field>> *fields() const {
  867|   116k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::Field>> *>(VT_FIELDS);
  868|   116k|  }
_ZNK10reflection5Field6VerifyILb0EEEbRN11flatbuffers16VerifierTemplateIXT_EEE:
  683|  40.8k|  bool Verify(::flatbuffers::VerifierTemplate<B> &verifier) const {
  684|  40.8k|    return VerifyTableStart(verifier) &&
  ------------------
  |  Branch (684:12): [True: 40.8k, False: 0]
  ------------------
  685|  40.8k|           VerifyOffsetRequired(verifier, VT_NAME) &&
  ------------------
  |  Branch (685:12): [True: 40.8k, False: 0]
  ------------------
  686|  40.8k|           verifier.VerifyString(name()) &&
  ------------------
  |  Branch (686:12): [True: 40.8k, False: 0]
  ------------------
  687|  40.8k|           VerifyOffsetRequired(verifier, VT_TYPE) &&
  ------------------
  |  Branch (687:12): [True: 40.8k, False: 0]
  ------------------
  688|  40.8k|           verifier.VerifyTable(type()) &&
  ------------------
  |  Branch (688:12): [True: 40.8k, False: 0]
  ------------------
  689|  40.8k|           VerifyField<uint16_t>(verifier, VT_ID, 2) &&
  ------------------
  |  Branch (689:12): [True: 40.8k, False: 0]
  ------------------
  690|  40.8k|           VerifyField<uint16_t>(verifier, VT_OFFSET, 2) &&
  ------------------
  |  Branch (690:12): [True: 40.8k, False: 0]
  ------------------
  691|  40.8k|           VerifyField<int64_t>(verifier, VT_DEFAULT_INTEGER, 8) &&
  ------------------
  |  Branch (691:12): [True: 40.8k, False: 0]
  ------------------
  692|  40.8k|           VerifyField<double>(verifier, VT_DEFAULT_REAL, 8) &&
  ------------------
  |  Branch (692:12): [True: 40.8k, False: 0]
  ------------------
  693|  40.8k|           VerifyField<uint8_t>(verifier, VT_DEPRECATED, 1) &&
  ------------------
  |  Branch (693:12): [True: 40.8k, False: 0]
  ------------------
  694|  40.8k|           VerifyField<uint8_t>(verifier, VT_REQUIRED, 1) &&
  ------------------
  |  Branch (694:12): [True: 40.8k, False: 0]
  ------------------
  695|  40.8k|           VerifyField<uint8_t>(verifier, VT_KEY, 1) &&
  ------------------
  |  Branch (695:12): [True: 40.8k, False: 0]
  ------------------
  696|  40.8k|           VerifyOffset(verifier, VT_ATTRIBUTES) &&
  ------------------
  |  Branch (696:12): [True: 40.8k, False: 0]
  ------------------
  697|  40.8k|           verifier.VerifyVector(attributes()) &&
  ------------------
  |  Branch (697:12): [True: 40.8k, False: 0]
  ------------------
  698|  40.8k|           verifier.VerifyVectorOfTables(attributes()) &&
  ------------------
  |  Branch (698:12): [True: 40.8k, False: 0]
  ------------------
  699|  40.8k|           VerifyOffset(verifier, VT_DOCUMENTATION) &&
  ------------------
  |  Branch (699:12): [True: 40.8k, False: 0]
  ------------------
  700|  40.8k|           verifier.VerifyVector(documentation()) &&
  ------------------
  |  Branch (700:12): [True: 40.8k, False: 0]
  ------------------
  701|  40.8k|           verifier.VerifyVectorOfStrings(documentation()) &&
  ------------------
  |  Branch (701:12): [True: 40.8k, False: 0]
  ------------------
  702|  40.8k|           VerifyField<uint8_t>(verifier, VT_OPTIONAL, 1) &&
  ------------------
  |  Branch (702:12): [True: 40.8k, False: 0]
  ------------------
  703|  40.8k|           VerifyField<uint16_t>(verifier, VT_PADDING, 2) &&
  ------------------
  |  Branch (703:12): [True: 40.8k, False: 0]
  ------------------
  704|  40.8k|           VerifyField<uint8_t>(verifier, VT_OFFSET64, 1) &&
  ------------------
  |  Branch (704:12): [True: 40.8k, False: 0]
  ------------------
  705|  40.8k|           verifier.EndTable();
  ------------------
  |  Branch (705:12): [True: 40.8k, False: 0]
  ------------------
  706|  40.8k|  }
_ZNK10reflection5Field4nameEv:
  626|   362k|  const ::flatbuffers::String *name() const {
  627|   362k|    return GetPointer<const ::flatbuffers::String *>(VT_NAME);
  628|   362k|  }
_ZNK10reflection4Type6VerifyILb0EEEbRN11flatbuffers16VerifierTemplateIXT_EEE:
  200|   234k|  bool Verify(::flatbuffers::VerifierTemplate<B> &verifier) const {
  201|   234k|    return VerifyTableStart(verifier) &&
  ------------------
  |  Branch (201:12): [True: 234k, False: 0]
  ------------------
  202|   234k|           VerifyField<int8_t>(verifier, VT_BASE_TYPE, 1) &&
  ------------------
  |  Branch (202:12): [True: 234k, False: 0]
  ------------------
  203|   234k|           VerifyField<int8_t>(verifier, VT_ELEMENT, 1) &&
  ------------------
  |  Branch (203:12): [True: 234k, False: 0]
  ------------------
  204|   234k|           VerifyField<int32_t>(verifier, VT_INDEX, 4) &&
  ------------------
  |  Branch (204:12): [True: 234k, False: 0]
  ------------------
  205|   234k|           VerifyField<uint16_t>(verifier, VT_FIXED_LENGTH, 2) &&
  ------------------
  |  Branch (205:12): [True: 234k, False: 0]
  ------------------
  206|   234k|           VerifyField<uint32_t>(verifier, VT_BASE_SIZE, 4) &&
  ------------------
  |  Branch (206:12): [True: 234k, False: 0]
  ------------------
  207|   234k|           VerifyField<uint32_t>(verifier, VT_ELEMENT_SIZE, 4) &&
  ------------------
  |  Branch (207:12): [True: 234k, False: 0]
  ------------------
  208|   234k|           verifier.EndTable();
  ------------------
  |  Branch (208:12): [True: 234k, False: 0]
  ------------------
  209|   234k|  }
_ZNK10reflection5Field4typeEv:
  641|  40.8k|  const reflection::Type *type() const {
  642|  40.8k|    return GetPointer<const reflection::Type *>(VT_TYPE);
  643|  40.8k|  }
_ZNK10reflection5Field10attributesEv:
  665|  81.6k|  const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes() const {
  666|  81.6k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *>(VT_ATTRIBUTES);
  667|  81.6k|  }
_ZNK10reflection5Field13documentationEv:
  668|  81.6k|  const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation() const {
  669|  81.6k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *>(VT_DOCUMENTATION);
  670|  81.6k|  }
_ZNK10reflection6Object10attributesEv:
  878|   116k|  const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes() const {
  879|   116k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *>(VT_ATTRIBUTES);
  880|   116k|  }
_ZNK10reflection8KeyValue6VerifyILb0EEEbRN11flatbuffers16VerifierTemplateIXT_EEE:
  288|    704|  bool Verify(::flatbuffers::VerifierTemplate<B> &verifier) const {
  289|    704|    return VerifyTableStart(verifier) &&
  ------------------
  |  Branch (289:12): [True: 704, False: 0]
  ------------------
  290|    704|           VerifyOffsetRequired(verifier, VT_KEY) &&
  ------------------
  |  Branch (290:12): [True: 704, False: 0]
  ------------------
  291|    704|           verifier.VerifyString(key()) &&
  ------------------
  |  Branch (291:12): [True: 704, False: 0]
  ------------------
  292|    704|           VerifyOffset(verifier, VT_VALUE) &&
  ------------------
  |  Branch (292:12): [True: 704, False: 0]
  ------------------
  293|    704|           verifier.VerifyString(value()) &&
  ------------------
  |  Branch (293:12): [True: 704, False: 0]
  ------------------
  294|    704|           verifier.EndTable();
  ------------------
  |  Branch (294:12): [True: 704, False: 0]
  ------------------
  295|    704|  }
_ZNK10reflection8KeyValue3keyEv:
  269|    704|  const ::flatbuffers::String *key() const {
  270|    704|    return GetPointer<const ::flatbuffers::String *>(VT_KEY);
  271|    704|  }
_ZNK10reflection8KeyValue5valueEv:
  284|    704|  const ::flatbuffers::String *value() const {
  285|    704|    return GetPointer<const ::flatbuffers::String *>(VT_VALUE);
  286|    704|  }
_ZNK10reflection6Object13documentationEv:
  881|   116k|  const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation() const {
  882|   116k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *>(VT_DOCUMENTATION);
  883|   116k|  }
_ZNK10reflection6Object16declaration_fileEv:
  885|  58.4k|  const ::flatbuffers::String *declaration_file() const {
  886|  58.4k|    return GetPointer<const ::flatbuffers::String *>(VT_DECLARATION_FILE);
  887|  58.4k|  }
_ZNK10reflection6Schema5enumsEv:
 1349|  10.1k|  const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::Enum>> *enums() const {
 1350|  10.1k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::Enum>> *>(VT_ENUMS);
 1351|  10.1k|  }
_ZNK10reflection4Enum6VerifyILb0EEEbRN11flatbuffers16VerifierTemplateIXT_EEE:
  502|  79.0k|  bool Verify(::flatbuffers::VerifierTemplate<B> &verifier) const {
  503|  79.0k|    return VerifyTableStart(verifier) &&
  ------------------
  |  Branch (503:12): [True: 79.0k, False: 0]
  ------------------
  504|  79.0k|           VerifyOffsetRequired(verifier, VT_NAME) &&
  ------------------
  |  Branch (504:12): [True: 79.0k, False: 0]
  ------------------
  505|  79.0k|           verifier.VerifyString(name()) &&
  ------------------
  |  Branch (505:12): [True: 79.0k, False: 0]
  ------------------
  506|  79.0k|           VerifyOffsetRequired(verifier, VT_VALUES) &&
  ------------------
  |  Branch (506:12): [True: 79.0k, False: 0]
  ------------------
  507|  79.0k|           verifier.VerifyVector(values()) &&
  ------------------
  |  Branch (507:12): [True: 79.0k, False: 0]
  ------------------
  508|  79.0k|           verifier.VerifyVectorOfTables(values()) &&
  ------------------
  |  Branch (508:12): [True: 79.0k, False: 0]
  ------------------
  509|  79.0k|           VerifyField<uint8_t>(verifier, VT_IS_UNION, 1) &&
  ------------------
  |  Branch (509:12): [True: 79.0k, False: 0]
  ------------------
  510|  79.0k|           VerifyOffsetRequired(verifier, VT_UNDERLYING_TYPE) &&
  ------------------
  |  Branch (510:12): [True: 79.0k, False: 0]
  ------------------
  511|  79.0k|           verifier.VerifyTable(underlying_type()) &&
  ------------------
  |  Branch (511:12): [True: 79.0k, False: 0]
  ------------------
  512|  79.0k|           VerifyOffset(verifier, VT_ATTRIBUTES) &&
  ------------------
  |  Branch (512:12): [True: 79.0k, False: 0]
  ------------------
  513|  79.0k|           verifier.VerifyVector(attributes()) &&
  ------------------
  |  Branch (513:12): [True: 79.0k, False: 0]
  ------------------
  514|  79.0k|           verifier.VerifyVectorOfTables(attributes()) &&
  ------------------
  |  Branch (514:12): [True: 79.0k, False: 0]
  ------------------
  515|  79.0k|           VerifyOffset(verifier, VT_DOCUMENTATION) &&
  ------------------
  |  Branch (515:12): [True: 79.0k, False: 0]
  ------------------
  516|  79.0k|           verifier.VerifyVector(documentation()) &&
  ------------------
  |  Branch (516:12): [True: 79.0k, False: 0]
  ------------------
  517|  79.0k|           verifier.VerifyVectorOfStrings(documentation()) &&
  ------------------
  |  Branch (517:12): [True: 79.0k, False: 0]
  ------------------
  518|  79.0k|           VerifyOffset(verifier, VT_DECLARATION_FILE) &&
  ------------------
  |  Branch (518:12): [True: 79.0k, False: 0]
  ------------------
  519|  79.0k|           verifier.VerifyString(declaration_file()) &&
  ------------------
  |  Branch (519:12): [True: 79.0k, False: 0]
  ------------------
  520|  79.0k|           verifier.EndTable();
  ------------------
  |  Branch (520:12): [True: 79.0k, False: 0]
  ------------------
  521|  79.0k|  }
_ZNK10reflection4Enum4nameEv:
  467|  2.67M|  const ::flatbuffers::String *name() const {
  468|  2.67M|    return GetPointer<const ::flatbuffers::String *>(VT_NAME);
  469|  2.67M|  }
_ZNK10reflection4Enum6valuesEv:
  482|   158k|  const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::EnumVal>> *values() const {
  483|   158k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::EnumVal>> *>(VT_VALUES);
  484|   158k|  }
_ZNK10reflection7EnumVal6VerifyILb0EEEbRN11flatbuffers16VerifierTemplateIXT_EEE:
  373|   115k|  bool Verify(::flatbuffers::VerifierTemplate<B> &verifier) const {
  374|   115k|    return VerifyTableStart(verifier) &&
  ------------------
  |  Branch (374:12): [True: 115k, False: 0]
  ------------------
  375|   115k|           VerifyOffsetRequired(verifier, VT_NAME) &&
  ------------------
  |  Branch (375:12): [True: 115k, False: 0]
  ------------------
  376|   115k|           verifier.VerifyString(name()) &&
  ------------------
  |  Branch (376:12): [True: 115k, False: 0]
  ------------------
  377|   115k|           VerifyField<int64_t>(verifier, VT_VALUE, 8) &&
  ------------------
  |  Branch (377:12): [True: 115k, False: 0]
  ------------------
  378|   115k|           VerifyOffset(verifier, VT_UNION_TYPE) &&
  ------------------
  |  Branch (378:12): [True: 115k, False: 0]
  ------------------
  379|   115k|           verifier.VerifyTable(union_type()) &&
  ------------------
  |  Branch (379:12): [True: 115k, False: 0]
  ------------------
  380|   115k|           VerifyOffset(verifier, VT_DOCUMENTATION) &&
  ------------------
  |  Branch (380:12): [True: 115k, False: 0]
  ------------------
  381|   115k|           verifier.VerifyVector(documentation()) &&
  ------------------
  |  Branch (381:12): [True: 115k, False: 0]
  ------------------
  382|   115k|           verifier.VerifyVectorOfStrings(documentation()) &&
  ------------------
  |  Branch (382:12): [True: 115k, False: 0]
  ------------------
  383|   115k|           VerifyOffset(verifier, VT_ATTRIBUTES) &&
  ------------------
  |  Branch (383:12): [True: 115k, False: 0]
  ------------------
  384|   115k|           verifier.VerifyVector(attributes()) &&
  ------------------
  |  Branch (384:12): [True: 115k, False: 0]
  ------------------
  385|   115k|           verifier.VerifyVectorOfTables(attributes()) &&
  ------------------
  |  Branch (385:12): [True: 115k, False: 0]
  ------------------
  386|   115k|           verifier.EndTable();
  ------------------
  |  Branch (386:12): [True: 115k, False: 0]
  ------------------
  387|   115k|  }
_ZNK10reflection7EnumVal4nameEv:
  351|   115k|  const ::flatbuffers::String *name() const {
  352|   115k|    return GetPointer<const ::flatbuffers::String *>(VT_NAME);
  353|   115k|  }
_ZNK10reflection7EnumVal10union_typeEv:
  363|   115k|  const reflection::Type *union_type() const {
  364|   115k|    return GetPointer<const reflection::Type *>(VT_UNION_TYPE);
  365|   115k|  }
_ZNK10reflection7EnumVal13documentationEv:
  366|   230k|  const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation() const {
  367|   230k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *>(VT_DOCUMENTATION);
  368|   230k|  }
_ZNK10reflection7EnumVal10attributesEv:
  369|   230k|  const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes() const {
  370|   230k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *>(VT_ATTRIBUTES);
  371|   230k|  }
_ZNK10reflection4Enum15underlying_typeEv:
  488|  79.0k|  const reflection::Type *underlying_type() const {
  489|  79.0k|    return GetPointer<const reflection::Type *>(VT_UNDERLYING_TYPE);
  490|  79.0k|  }
_ZNK10reflection4Enum10attributesEv:
  491|   158k|  const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes() const {
  492|   158k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *>(VT_ATTRIBUTES);
  493|   158k|  }
_ZNK10reflection4Enum13documentationEv:
  494|   158k|  const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation() const {
  495|   158k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *>(VT_DOCUMENTATION);
  496|   158k|  }
_ZNK10reflection4Enum16declaration_fileEv:
  498|  79.0k|  const ::flatbuffers::String *declaration_file() const {
  499|  79.0k|    return GetPointer<const ::flatbuffers::String *>(VT_DECLARATION_FILE);
  500|  79.0k|  }
_ZNK10reflection6Schema10file_identEv:
 1352|  5.09k|  const ::flatbuffers::String *file_ident() const {
 1353|  5.09k|    return GetPointer<const ::flatbuffers::String *>(VT_FILE_IDENT);
 1354|  5.09k|  }
_ZNK10reflection6Schema8file_extEv:
 1355|  5.09k|  const ::flatbuffers::String *file_ext() const {
 1356|  5.09k|    return GetPointer<const ::flatbuffers::String *>(VT_FILE_EXT);
 1357|  5.09k|  }
_ZNK10reflection6Schema10root_tableEv:
 1358|  5.09k|  const reflection::Object *root_table() const {
 1359|  5.09k|    return GetPointer<const reflection::Object *>(VT_ROOT_TABLE);
 1360|  5.09k|  }
_ZNK10reflection6Schema8servicesEv:
 1361|  10.1k|  const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::Service>> *services() const {
 1362|  10.1k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::Service>> *>(VT_SERVICES);
 1363|  10.1k|  }
_ZNK10reflection7Service6VerifyILb0EEEbRN11flatbuffers16VerifierTemplateIXT_EEE:
 1162|    743|  bool Verify(::flatbuffers::VerifierTemplate<B> &verifier) const {
 1163|    743|    return VerifyTableStart(verifier) &&
  ------------------
  |  Branch (1163:12): [True: 743, False: 0]
  ------------------
 1164|    743|           VerifyOffsetRequired(verifier, VT_NAME) &&
  ------------------
  |  Branch (1164:12): [True: 743, False: 0]
  ------------------
 1165|    743|           verifier.VerifyString(name()) &&
  ------------------
  |  Branch (1165:12): [True: 743, False: 0]
  ------------------
 1166|    743|           VerifyOffset(verifier, VT_CALLS) &&
  ------------------
  |  Branch (1166:12): [True: 743, False: 0]
  ------------------
 1167|    743|           verifier.VerifyVector(calls()) &&
  ------------------
  |  Branch (1167:12): [True: 743, False: 0]
  ------------------
 1168|    743|           verifier.VerifyVectorOfTables(calls()) &&
  ------------------
  |  Branch (1168:12): [True: 743, False: 0]
  ------------------
 1169|    743|           VerifyOffset(verifier, VT_ATTRIBUTES) &&
  ------------------
  |  Branch (1169:12): [True: 743, False: 0]
  ------------------
 1170|    743|           verifier.VerifyVector(attributes()) &&
  ------------------
  |  Branch (1170:12): [True: 743, False: 0]
  ------------------
 1171|    743|           verifier.VerifyVectorOfTables(attributes()) &&
  ------------------
  |  Branch (1171:12): [True: 743, False: 0]
  ------------------
 1172|    743|           VerifyOffset(verifier, VT_DOCUMENTATION) &&
  ------------------
  |  Branch (1172:12): [True: 743, False: 0]
  ------------------
 1173|    743|           verifier.VerifyVector(documentation()) &&
  ------------------
  |  Branch (1173:12): [True: 743, False: 0]
  ------------------
 1174|    743|           verifier.VerifyVectorOfStrings(documentation()) &&
  ------------------
  |  Branch (1174:12): [True: 743, False: 0]
  ------------------
 1175|    743|           VerifyOffset(verifier, VT_DECLARATION_FILE) &&
  ------------------
  |  Branch (1175:12): [True: 743, False: 0]
  ------------------
 1176|    743|           verifier.VerifyString(declaration_file()) &&
  ------------------
  |  Branch (1176:12): [True: 743, False: 0]
  ------------------
 1177|    743|           verifier.EndTable();
  ------------------
  |  Branch (1177:12): [True: 743, False: 0]
  ------------------
 1178|    743|  }
_ZNK10reflection7Service4nameEv:
 1133|  3.69k|  const ::flatbuffers::String *name() const {
 1134|  3.69k|    return GetPointer<const ::flatbuffers::String *>(VT_NAME);
 1135|  3.69k|  }
_ZNK10reflection7Service5callsEv:
 1148|  1.48k|  const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::RPCCall>> *calls() const {
 1149|  1.48k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::RPCCall>> *>(VT_CALLS);
 1150|  1.48k|  }
_ZNK10reflection7RPCCall6VerifyILb0EEEbRN11flatbuffers16VerifierTemplateIXT_EEE:
 1038|  1.48k|  bool Verify(::flatbuffers::VerifierTemplate<B> &verifier) const {
 1039|  1.48k|    return VerifyTableStart(verifier) &&
  ------------------
  |  Branch (1039:12): [True: 1.48k, False: 0]
  ------------------
 1040|  1.48k|           VerifyOffsetRequired(verifier, VT_NAME) &&
  ------------------
  |  Branch (1040:12): [True: 1.48k, False: 0]
  ------------------
 1041|  1.48k|           verifier.VerifyString(name()) &&
  ------------------
  |  Branch (1041:12): [True: 1.48k, False: 0]
  ------------------
 1042|  1.48k|           VerifyOffsetRequired(verifier, VT_REQUEST) &&
  ------------------
  |  Branch (1042:12): [True: 1.48k, False: 0]
  ------------------
 1043|  1.48k|           verifier.VerifyTable(request()) &&
  ------------------
  |  Branch (1043:12): [True: 1.48k, False: 0]
  ------------------
 1044|  1.48k|           VerifyOffsetRequired(verifier, VT_RESPONSE) &&
  ------------------
  |  Branch (1044:12): [True: 1.48k, False: 0]
  ------------------
 1045|  1.48k|           verifier.VerifyTable(response()) &&
  ------------------
  |  Branch (1045:12): [True: 1.48k, False: 0]
  ------------------
 1046|  1.48k|           VerifyOffset(verifier, VT_ATTRIBUTES) &&
  ------------------
  |  Branch (1046:12): [True: 1.48k, False: 0]
  ------------------
 1047|  1.48k|           verifier.VerifyVector(attributes()) &&
  ------------------
  |  Branch (1047:12): [True: 1.48k, False: 0]
  ------------------
 1048|  1.48k|           verifier.VerifyVectorOfTables(attributes()) &&
  ------------------
  |  Branch (1048:12): [True: 1.48k, False: 0]
  ------------------
 1049|  1.48k|           VerifyOffset(verifier, VT_DOCUMENTATION) &&
  ------------------
  |  Branch (1049:12): [True: 1.48k, False: 0]
  ------------------
 1050|  1.48k|           verifier.VerifyVector(documentation()) &&
  ------------------
  |  Branch (1050:12): [True: 1.48k, False: 0]
  ------------------
 1051|  1.48k|           verifier.VerifyVectorOfStrings(documentation()) &&
  ------------------
  |  Branch (1051:12): [True: 1.48k, False: 0]
  ------------------
 1052|  1.48k|           verifier.EndTable();
  ------------------
  |  Branch (1052:12): [True: 1.48k, False: 0]
  ------------------
 1053|  1.48k|  }
_ZNK10reflection7RPCCall4nameEv:
 1010|  1.48k|  const ::flatbuffers::String *name() const {
 1011|  1.48k|    return GetPointer<const ::flatbuffers::String *>(VT_NAME);
 1012|  1.48k|  }
_ZNK10reflection7RPCCall7requestEv:
 1025|  1.48k|  const reflection::Object *request() const {
 1026|  1.48k|    return GetPointer<const reflection::Object *>(VT_REQUEST);
 1027|  1.48k|  }
_ZNK10reflection7RPCCall8responseEv:
 1028|  1.48k|  const reflection::Object *response() const {
 1029|  1.48k|    return GetPointer<const reflection::Object *>(VT_RESPONSE);
 1030|  1.48k|  }
_ZNK10reflection7RPCCall10attributesEv:
 1031|  2.96k|  const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes() const {
 1032|  2.96k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *>(VT_ATTRIBUTES);
 1033|  2.96k|  }
_ZNK10reflection7RPCCall13documentationEv:
 1034|  2.96k|  const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation() const {
 1035|  2.96k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *>(VT_DOCUMENTATION);
 1036|  2.96k|  }
_ZNK10reflection7Service10attributesEv:
 1151|  1.48k|  const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *attributes() const {
 1152|  1.48k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>> *>(VT_ATTRIBUTES);
 1153|  1.48k|  }
_ZNK10reflection7Service13documentationEv:
 1154|  1.48k|  const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *documentation() const {
 1155|  1.48k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *>(VT_DOCUMENTATION);
 1156|  1.48k|  }
_ZNK10reflection7Service16declaration_fileEv:
 1158|    743|  const ::flatbuffers::String *declaration_file() const {
 1159|    743|    return GetPointer<const ::flatbuffers::String *>(VT_DECLARATION_FILE);
 1160|    743|  }
_ZNK10reflection6Schema9fbs_filesEv:
 1369|  10.1k|  const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::SchemaFile>> *fbs_files() const {
 1370|  10.1k|    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<reflection::SchemaFile>> *>(VT_FBS_FILES);
 1371|  10.1k|  }
_ZN10reflection16SchemaIdentifierEv:
 1497|  10.1k|inline const char *SchemaIdentifier() {
 1498|  10.1k|  return "BFBS";
 1499|  10.1k|}
_ZN10reflection11TypeBuilder13add_base_typeENS_8BaseTypeE:
  216|   232k|  void add_base_type(reflection::BaseType base_type) {
  217|   232k|    fbb_.AddElement<int8_t>(Type::VT_BASE_TYPE, static_cast<int8_t>(base_type), 0);
  218|   232k|  }
_ZN10reflection11TypeBuilder11add_elementENS_8BaseTypeE:
  219|   232k|  void add_element(reflection::BaseType element) {
  220|   232k|    fbb_.AddElement<int8_t>(Type::VT_ELEMENT, static_cast<int8_t>(element), 0);
  221|   232k|  }
_ZN10reflection11TypeBuilder9add_indexEi:
  222|   232k|  void add_index(int32_t index) {
  223|   232k|    fbb_.AddElement<int32_t>(Type::VT_INDEX, index, -1);
  224|   232k|  }
_ZN10reflection11TypeBuilder16add_fixed_lengthEt:
  225|   232k|  void add_fixed_length(uint16_t fixed_length) {
  226|   232k|    fbb_.AddElement<uint16_t>(Type::VT_FIXED_LENGTH, fixed_length, 0);
  227|   232k|  }
_ZN10reflection11TypeBuilder13add_base_sizeEj:
  228|   232k|  void add_base_size(uint32_t base_size) {
  229|   232k|    fbb_.AddElement<uint32_t>(Type::VT_BASE_SIZE, base_size, 4);
  230|   232k|  }
_ZN10reflection11TypeBuilder16add_element_sizeEj:
  231|   232k|  void add_element_size(uint32_t element_size) {
  232|   232k|    fbb_.AddElement<uint32_t>(Type::VT_ELEMENT_SIZE, element_size, 0);
  233|   232k|  }
_ZN10reflection11TypeBuilderC2ERN11flatbuffers21FlatBufferBuilderImplILb0EEE:
  235|   232k|        : fbb_(_fbb) {
  236|   232k|    start_ = fbb_.StartTable();
  237|   232k|  }
_ZN10reflection11TypeBuilder6FinishEv:
  238|   232k|  ::flatbuffers::Offset<Type> Finish() {
  239|   232k|    const auto end = fbb_.EndTable(start_);
  240|   232k|    auto o = ::flatbuffers::Offset<Type>(end);
  241|   232k|    return o;
  242|   232k|  }
_ZN10reflection15KeyValueBuilder7add_keyEN11flatbuffers6OffsetINS1_6StringEEE:
  302|    704|  void add_key(::flatbuffers::Offset<::flatbuffers::String> key) {
  303|    704|    fbb_.AddOffset(KeyValue::VT_KEY, key);
  304|    704|  }
_ZN10reflection15KeyValueBuilder9add_valueEN11flatbuffers6OffsetINS1_6StringEEE:
  305|    704|  void add_value(::flatbuffers::Offset<::flatbuffers::String> value) {
  306|    704|    fbb_.AddOffset(KeyValue::VT_VALUE, value);
  307|    704|  }
_ZN10reflection15KeyValueBuilderC2ERN11flatbuffers21FlatBufferBuilderImplILb0EEE:
  309|    704|        : fbb_(_fbb) {
  310|    704|    start_ = fbb_.StartTable();
  311|    704|  }
_ZN10reflection15KeyValueBuilder6FinishEv:
  312|    704|  ::flatbuffers::Offset<KeyValue> Finish() {
  313|    704|    const auto end = fbb_.EndTable(start_);
  314|    704|    auto o = ::flatbuffers::Offset<KeyValue>(end);
  315|    704|    fbb_.Required(o, KeyValue::VT_KEY);
  316|    704|    return o;
  317|    704|  }
_ZN10reflection14EnumValBuilder8add_nameEN11flatbuffers6OffsetINS1_6StringEEE:
  394|   115k|  void add_name(::flatbuffers::Offset<::flatbuffers::String> name) {
  395|   115k|    fbb_.AddOffset(EnumVal::VT_NAME, name);
  396|   115k|  }
_ZN10reflection14EnumValBuilder9add_valueEl:
  397|   115k|  void add_value(int64_t value) {
  398|   115k|    fbb_.AddElement<int64_t>(EnumVal::VT_VALUE, value, 0);
  399|   115k|  }
_ZN10reflection14EnumValBuilder14add_union_typeEN11flatbuffers6OffsetINS_4TypeEEE:
  400|   115k|  void add_union_type(::flatbuffers::Offset<reflection::Type> union_type) {
  401|   115k|    fbb_.AddOffset(EnumVal::VT_UNION_TYPE, union_type);
  402|   115k|  }
_ZN10reflection14EnumValBuilder17add_documentationEN11flatbuffers6OffsetINS1_6VectorINS2_INS1_6StringEEEjEEEE:
  403|   115k|  void add_documentation(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation) {
  404|   115k|    fbb_.AddOffset(EnumVal::VT_DOCUMENTATION, documentation);
  405|   115k|  }
_ZN10reflection14EnumValBuilder14add_attributesEN11flatbuffers6OffsetINS1_6VectorINS2_INS_8KeyValueEEEjEEEE:
  406|   115k|  void add_attributes(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes) {
  407|   115k|    fbb_.AddOffset(EnumVal::VT_ATTRIBUTES, attributes);
  408|   115k|  }
_ZN10reflection14EnumValBuilderC2ERN11flatbuffers21FlatBufferBuilderImplILb0EEE:
  410|   115k|        : fbb_(_fbb) {
  411|   115k|    start_ = fbb_.StartTable();
  412|   115k|  }
_ZN10reflection14EnumValBuilder6FinishEv:
  413|   115k|  ::flatbuffers::Offset<EnumVal> Finish() {
  414|   115k|    const auto end = fbb_.EndTable(start_);
  415|   115k|    auto o = ::flatbuffers::Offset<EnumVal>(end);
  416|   115k|    fbb_.Required(o, EnumVal::VT_NAME);
  417|   115k|    return o;
  418|   115k|  }
_ZNK10reflection4Enum18KeyCompareLessThanEPKS0_:
  470|  1.29M|  bool KeyCompareLessThan(const Enum * const o) const {
  471|  1.29M|    return *name() < *o->name();
  472|  1.29M|  }
_ZN10reflection11EnumBuilder8add_nameEN11flatbuffers6OffsetINS1_6StringEEE:
  528|  79.0k|  void add_name(::flatbuffers::Offset<::flatbuffers::String> name) {
  529|  79.0k|    fbb_.AddOffset(Enum::VT_NAME, name);
  530|  79.0k|  }
_ZN10reflection11EnumBuilder10add_valuesEN11flatbuffers6OffsetINS1_6VectorINS2_INS_7EnumValEEEjEEEE:
  531|  79.0k|  void add_values(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::EnumVal>>> values) {
  532|  79.0k|    fbb_.AddOffset(Enum::VT_VALUES, values);
  533|  79.0k|  }
_ZN10reflection11EnumBuilder12add_is_unionEb:
  534|  79.0k|  void add_is_union(bool is_union) {
  535|  79.0k|    fbb_.AddElement<uint8_t>(Enum::VT_IS_UNION, static_cast<uint8_t>(is_union), 0);
  536|  79.0k|  }
_ZN10reflection11EnumBuilder19add_underlying_typeEN11flatbuffers6OffsetINS_4TypeEEE:
  537|  79.0k|  void add_underlying_type(::flatbuffers::Offset<reflection::Type> underlying_type) {
  538|  79.0k|    fbb_.AddOffset(Enum::VT_UNDERLYING_TYPE, underlying_type);
  539|  79.0k|  }
_ZN10reflection11EnumBuilder14add_attributesEN11flatbuffers6OffsetINS1_6VectorINS2_INS_8KeyValueEEEjEEEE:
  540|  79.0k|  void add_attributes(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes) {
  541|  79.0k|    fbb_.AddOffset(Enum::VT_ATTRIBUTES, attributes);
  542|  79.0k|  }
_ZN10reflection11EnumBuilder17add_documentationEN11flatbuffers6OffsetINS1_6VectorINS2_INS1_6StringEEEjEEEE:
  543|  79.0k|  void add_documentation(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation) {
  544|  79.0k|    fbb_.AddOffset(Enum::VT_DOCUMENTATION, documentation);
  545|  79.0k|  }
_ZN10reflection11EnumBuilder20add_declaration_fileEN11flatbuffers6OffsetINS1_6StringEEE:
  546|  79.0k|  void add_declaration_file(::flatbuffers::Offset<::flatbuffers::String> declaration_file) {
  547|  79.0k|    fbb_.AddOffset(Enum::VT_DECLARATION_FILE, declaration_file);
  548|  79.0k|  }
_ZN10reflection11EnumBuilderC2ERN11flatbuffers21FlatBufferBuilderImplILb0EEE:
  550|  79.0k|        : fbb_(_fbb) {
  551|  79.0k|    start_ = fbb_.StartTable();
  552|  79.0k|  }
_ZN10reflection11EnumBuilder6FinishEv:
  553|  79.0k|  ::flatbuffers::Offset<Enum> Finish() {
  554|  79.0k|    const auto end = fbb_.EndTable(start_);
  555|  79.0k|    auto o = ::flatbuffers::Offset<Enum>(end);
  556|  79.0k|    fbb_.Required(o, Enum::VT_NAME);
  557|  79.0k|    fbb_.Required(o, Enum::VT_VALUES);
  558|  79.0k|    fbb_.Required(o, Enum::VT_UNDERLYING_TYPE);
  559|  79.0k|    return o;
  560|  79.0k|  }
_ZNK10reflection5Field18KeyCompareLessThanEPKS0_:
  629|   160k|  bool KeyCompareLessThan(const Field * const o) const {
  630|   160k|    return *name() < *o->name();
  631|   160k|  }
_ZN10reflection12FieldBuilder8add_nameEN11flatbuffers6OffsetINS1_6StringEEE:
  713|  38.7k|  void add_name(::flatbuffers::Offset<::flatbuffers::String> name) {
  714|  38.7k|    fbb_.AddOffset(Field::VT_NAME, name);
  715|  38.7k|  }
_ZN10reflection12FieldBuilder8add_typeEN11flatbuffers6OffsetINS_4TypeEEE:
  716|  38.7k|  void add_type(::flatbuffers::Offset<reflection::Type> type) {
  717|  38.7k|    fbb_.AddOffset(Field::VT_TYPE, type);
  718|  38.7k|  }
_ZN10reflection12FieldBuilder6add_idEt:
  719|  38.7k|  void add_id(uint16_t id) {
  720|  38.7k|    fbb_.AddElement<uint16_t>(Field::VT_ID, id, 0);
  721|  38.7k|  }
_ZN10reflection12FieldBuilder10add_offsetEt:
  722|  38.7k|  void add_offset(uint16_t offset) {
  723|  38.7k|    fbb_.AddElement<uint16_t>(Field::VT_OFFSET, offset, 0);
  724|  38.7k|  }
_ZN10reflection12FieldBuilder19add_default_integerEl:
  725|  38.7k|  void add_default_integer(int64_t default_integer) {
  726|  38.7k|    fbb_.AddElement<int64_t>(Field::VT_DEFAULT_INTEGER, default_integer, 0);
  727|  38.7k|  }
_ZN10reflection12FieldBuilder16add_default_realEd:
  728|  38.7k|  void add_default_real(double default_real) {
  729|  38.7k|    fbb_.AddElement<double>(Field::VT_DEFAULT_REAL, default_real, 0.0);
  730|  38.7k|  }
_ZN10reflection12FieldBuilder14add_deprecatedEb:
  731|  38.7k|  void add_deprecated(bool deprecated) {
  732|  38.7k|    fbb_.AddElement<uint8_t>(Field::VT_DEPRECATED, static_cast<uint8_t>(deprecated), 0);
  733|  38.7k|  }
_ZN10reflection12FieldBuilder12add_requiredEb:
  734|  38.7k|  void add_required(bool required) {
  735|  38.7k|    fbb_.AddElement<uint8_t>(Field::VT_REQUIRED, static_cast<uint8_t>(required), 0);
  736|  38.7k|  }
_ZN10reflection12FieldBuilder7add_keyEb:
  737|  38.7k|  void add_key(bool key) {
  738|  38.7k|    fbb_.AddElement<uint8_t>(Field::VT_KEY, static_cast<uint8_t>(key), 0);
  739|  38.7k|  }
_ZN10reflection12FieldBuilder14add_attributesEN11flatbuffers6OffsetINS1_6VectorINS2_INS_8KeyValueEEEjEEEE:
  740|  38.7k|  void add_attributes(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes) {
  741|  38.7k|    fbb_.AddOffset(Field::VT_ATTRIBUTES, attributes);
  742|  38.7k|  }
_ZN10reflection12FieldBuilder17add_documentationEN11flatbuffers6OffsetINS1_6VectorINS2_INS1_6StringEEEjEEEE:
  743|  38.7k|  void add_documentation(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation) {
  744|  38.7k|    fbb_.AddOffset(Field::VT_DOCUMENTATION, documentation);
  745|  38.7k|  }
_ZN10reflection12FieldBuilder12add_optionalEb:
  746|  38.7k|  void add_optional(bool optional) {
  747|  38.7k|    fbb_.AddElement<uint8_t>(Field::VT_OPTIONAL, static_cast<uint8_t>(optional), 0);
  748|  38.7k|  }
_ZN10reflection12FieldBuilder11add_paddingEt:
  749|  38.7k|  void add_padding(uint16_t padding) {
  750|  38.7k|    fbb_.AddElement<uint16_t>(Field::VT_PADDING, padding, 0);
  751|  38.7k|  }
_ZN10reflection12FieldBuilder12add_offset64Eb:
  752|  38.7k|  void add_offset64(bool offset64) {
  753|  38.7k|    fbb_.AddElement<uint8_t>(Field::VT_OFFSET64, static_cast<uint8_t>(offset64), 0);
  754|  38.7k|  }
_ZN10reflection12FieldBuilderC2ERN11flatbuffers21FlatBufferBuilderImplILb0EEE:
  756|  38.7k|        : fbb_(_fbb) {
  757|  38.7k|    start_ = fbb_.StartTable();
  758|  38.7k|  }
_ZN10reflection12FieldBuilder6FinishEv:
  759|  38.7k|  ::flatbuffers::Offset<Field> Finish() {
  760|  38.7k|    const auto end = fbb_.EndTable(start_);
  761|  38.7k|    auto o = ::flatbuffers::Offset<Field>(end);
  762|  38.7k|    fbb_.Required(o, Field::VT_NAME);
  763|  38.7k|    fbb_.Required(o, Field::VT_TYPE);
  764|  38.7k|    return o;
  765|  38.7k|  }
_ZNK10reflection6Object18KeyCompareLessThanEPKS0_:
  854|   670k|  bool KeyCompareLessThan(const Object * const o) const {
  855|   670k|    return *name() < *o->name();
  856|   670k|  }
_ZN10reflection13ObjectBuilder8add_nameEN11flatbuffers6OffsetINS1_6StringEEE:
  915|  55.2k|  void add_name(::flatbuffers::Offset<::flatbuffers::String> name) {
  916|  55.2k|    fbb_.AddOffset(Object::VT_NAME, name);
  917|  55.2k|  }
_ZN10reflection13ObjectBuilder10add_fieldsEN11flatbuffers6OffsetINS1_6VectorINS2_INS_5FieldEEEjEEEE:
  918|  55.2k|  void add_fields(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::Field>>> fields) {
  919|  55.2k|    fbb_.AddOffset(Object::VT_FIELDS, fields);
  920|  55.2k|  }
_ZN10reflection13ObjectBuilder13add_is_structEb:
  921|  55.2k|  void add_is_struct(bool is_struct) {
  922|  55.2k|    fbb_.AddElement<uint8_t>(Object::VT_IS_STRUCT, static_cast<uint8_t>(is_struct), 0);
  923|  55.2k|  }
_ZN10reflection13ObjectBuilder12add_minalignEi:
  924|  55.2k|  void add_minalign(int32_t minalign) {
  925|  55.2k|    fbb_.AddElement<int32_t>(Object::VT_MINALIGN, minalign, 0);
  926|  55.2k|  }
_ZN10reflection13ObjectBuilder12add_bytesizeEi:
  927|  55.2k|  void add_bytesize(int32_t bytesize) {
  928|  55.2k|    fbb_.AddElement<int32_t>(Object::VT_BYTESIZE, bytesize, 0);
  929|  55.2k|  }
_ZN10reflection13ObjectBuilder14add_attributesEN11flatbuffers6OffsetINS1_6VectorINS2_INS_8KeyValueEEEjEEEE:
  930|  55.2k|  void add_attributes(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes) {
  931|  55.2k|    fbb_.AddOffset(Object::VT_ATTRIBUTES, attributes);
  932|  55.2k|  }
_ZN10reflection13ObjectBuilder17add_documentationEN11flatbuffers6OffsetINS1_6VectorINS2_INS1_6StringEEEjEEEE:
  933|  55.2k|  void add_documentation(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation) {
  934|  55.2k|    fbb_.AddOffset(Object::VT_DOCUMENTATION, documentation);
  935|  55.2k|  }
_ZN10reflection13ObjectBuilder20add_declaration_fileEN11flatbuffers6OffsetINS1_6StringEEE:
  936|  55.2k|  void add_declaration_file(::flatbuffers::Offset<::flatbuffers::String> declaration_file) {
  937|  55.2k|    fbb_.AddOffset(Object::VT_DECLARATION_FILE, declaration_file);
  938|  55.2k|  }
_ZN10reflection13ObjectBuilderC2ERN11flatbuffers21FlatBufferBuilderImplILb0EEE:
  940|  55.2k|        : fbb_(_fbb) {
  941|  55.2k|    start_ = fbb_.StartTable();
  942|  55.2k|  }
_ZN10reflection13ObjectBuilder6FinishEv:
  943|  55.2k|  ::flatbuffers::Offset<Object> Finish() {
  944|  55.2k|    const auto end = fbb_.EndTable(start_);
  945|  55.2k|    auto o = ::flatbuffers::Offset<Object>(end);
  946|  55.2k|    fbb_.Required(o, Object::VT_NAME);
  947|  55.2k|    fbb_.Required(o, Object::VT_FIELDS);
  948|  55.2k|    return o;
  949|  55.2k|  }
_ZN10reflection14RPCCallBuilder8add_nameEN11flatbuffers6OffsetINS1_6StringEEE:
 1060|  1.48k|  void add_name(::flatbuffers::Offset<::flatbuffers::String> name) {
 1061|  1.48k|    fbb_.AddOffset(RPCCall::VT_NAME, name);
 1062|  1.48k|  }
_ZN10reflection14RPCCallBuilder11add_requestEN11flatbuffers6OffsetINS_6ObjectEEE:
 1063|  1.48k|  void add_request(::flatbuffers::Offset<reflection::Object> request) {
 1064|  1.48k|    fbb_.AddOffset(RPCCall::VT_REQUEST, request);
 1065|  1.48k|  }
_ZN10reflection14RPCCallBuilder12add_responseEN11flatbuffers6OffsetINS_6ObjectEEE:
 1066|  1.48k|  void add_response(::flatbuffers::Offset<reflection::Object> response) {
 1067|  1.48k|    fbb_.AddOffset(RPCCall::VT_RESPONSE, response);
 1068|  1.48k|  }
_ZN10reflection14RPCCallBuilder14add_attributesEN11flatbuffers6OffsetINS1_6VectorINS2_INS_8KeyValueEEEjEEEE:
 1069|  1.48k|  void add_attributes(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes) {
 1070|  1.48k|    fbb_.AddOffset(RPCCall::VT_ATTRIBUTES, attributes);
 1071|  1.48k|  }
_ZN10reflection14RPCCallBuilder17add_documentationEN11flatbuffers6OffsetINS1_6VectorINS2_INS1_6StringEEEjEEEE:
 1072|  1.48k|  void add_documentation(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation) {
 1073|  1.48k|    fbb_.AddOffset(RPCCall::VT_DOCUMENTATION, documentation);
 1074|  1.48k|  }
_ZN10reflection14RPCCallBuilderC2ERN11flatbuffers21FlatBufferBuilderImplILb0EEE:
 1076|  1.48k|        : fbb_(_fbb) {
 1077|  1.48k|    start_ = fbb_.StartTable();
 1078|  1.48k|  }
_ZN10reflection14RPCCallBuilder6FinishEv:
 1079|  1.48k|  ::flatbuffers::Offset<RPCCall> Finish() {
 1080|  1.48k|    const auto end = fbb_.EndTable(start_);
 1081|  1.48k|    auto o = ::flatbuffers::Offset<RPCCall>(end);
 1082|  1.48k|    fbb_.Required(o, RPCCall::VT_NAME);
 1083|  1.48k|    fbb_.Required(o, RPCCall::VT_REQUEST);
 1084|  1.48k|    fbb_.Required(o, RPCCall::VT_RESPONSE);
 1085|  1.48k|    return o;
 1086|  1.48k|  }
_ZNK10reflection7Service18KeyCompareLessThanEPKS0_:
 1136|  1.47k|  bool KeyCompareLessThan(const Service * const o) const {
 1137|  1.47k|    return *name() < *o->name();
 1138|  1.47k|  }
_ZN10reflection14ServiceBuilder8add_nameEN11flatbuffers6OffsetINS1_6StringEEE:
 1185|    743|  void add_name(::flatbuffers::Offset<::flatbuffers::String> name) {
 1186|    743|    fbb_.AddOffset(Service::VT_NAME, name);
 1187|    743|  }
_ZN10reflection14ServiceBuilder9add_callsEN11flatbuffers6OffsetINS1_6VectorINS2_INS_7RPCCallEEEjEEEE:
 1188|    743|  void add_calls(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::RPCCall>>> calls) {
 1189|    743|    fbb_.AddOffset(Service::VT_CALLS, calls);
 1190|    743|  }
_ZN10reflection14ServiceBuilder14add_attributesEN11flatbuffers6OffsetINS1_6VectorINS2_INS_8KeyValueEEEjEEEE:
 1191|    743|  void add_attributes(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes) {
 1192|    743|    fbb_.AddOffset(Service::VT_ATTRIBUTES, attributes);
 1193|    743|  }
_ZN10reflection14ServiceBuilder17add_documentationEN11flatbuffers6OffsetINS1_6VectorINS2_INS1_6StringEEEjEEEE:
 1194|    743|  void add_documentation(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation) {
 1195|    743|    fbb_.AddOffset(Service::VT_DOCUMENTATION, documentation);
 1196|    743|  }
_ZN10reflection14ServiceBuilder20add_declaration_fileEN11flatbuffers6OffsetINS1_6StringEEE:
 1197|    743|  void add_declaration_file(::flatbuffers::Offset<::flatbuffers::String> declaration_file) {
 1198|    743|    fbb_.AddOffset(Service::VT_DECLARATION_FILE, declaration_file);
 1199|    743|  }
_ZN10reflection14ServiceBuilderC2ERN11flatbuffers21FlatBufferBuilderImplILb0EEE:
 1201|    743|        : fbb_(_fbb) {
 1202|    743|    start_ = fbb_.StartTable();
 1203|    743|  }
_ZN10reflection14ServiceBuilder6FinishEv:
 1204|    743|  ::flatbuffers::Offset<Service> Finish() {
 1205|    743|    const auto end = fbb_.EndTable(start_);
 1206|    743|    auto o = ::flatbuffers::Offset<Service>(end);
 1207|    743|    fbb_.Required(o, Service::VT_NAME);
 1208|    743|    return o;
 1209|    743|  }
_ZN10reflection13SchemaBuilder11add_objectsEN11flatbuffers6OffsetINS1_6VectorINS2_INS_6ObjectEEEjEEEE:
 1402|  5.09k|  void add_objects(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::Object>>> objects) {
 1403|  5.09k|    fbb_.AddOffset(Schema::VT_OBJECTS, objects);
 1404|  5.09k|  }
_ZN10reflection13SchemaBuilder9add_enumsEN11flatbuffers6OffsetINS1_6VectorINS2_INS_4EnumEEEjEEEE:
 1405|  5.09k|  void add_enums(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::Enum>>> enums) {
 1406|  5.09k|    fbb_.AddOffset(Schema::VT_ENUMS, enums);
 1407|  5.09k|  }
_ZN10reflection13SchemaBuilder14add_file_identEN11flatbuffers6OffsetINS1_6StringEEE:
 1408|  5.09k|  void add_file_ident(::flatbuffers::Offset<::flatbuffers::String> file_ident) {
 1409|  5.09k|    fbb_.AddOffset(Schema::VT_FILE_IDENT, file_ident);
 1410|  5.09k|  }
_ZN10reflection13SchemaBuilder12add_file_extEN11flatbuffers6OffsetINS1_6StringEEE:
 1411|  5.09k|  void add_file_ext(::flatbuffers::Offset<::flatbuffers::String> file_ext) {
 1412|  5.09k|    fbb_.AddOffset(Schema::VT_FILE_EXT, file_ext);
 1413|  5.09k|  }
_ZN10reflection13SchemaBuilder14add_root_tableEN11flatbuffers6OffsetINS_6ObjectEEE:
 1414|  5.09k|  void add_root_table(::flatbuffers::Offset<reflection::Object> root_table) {
 1415|  5.09k|    fbb_.AddOffset(Schema::VT_ROOT_TABLE, root_table);
 1416|  5.09k|  }
_ZN10reflection13SchemaBuilder12add_servicesEN11flatbuffers6OffsetINS1_6VectorINS2_INS_7ServiceEEEjEEEE:
 1417|  5.09k|  void add_services(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::Service>>> services) {
 1418|  5.09k|    fbb_.AddOffset(Schema::VT_SERVICES, services);
 1419|  5.09k|  }
_ZN10reflection13SchemaBuilder21add_advanced_featuresENS_16AdvancedFeaturesE:
 1420|  5.09k|  void add_advanced_features(reflection::AdvancedFeatures advanced_features) {
 1421|  5.09k|    fbb_.AddElement<uint64_t>(Schema::VT_ADVANCED_FEATURES, static_cast<uint64_t>(advanced_features), 0);
 1422|  5.09k|  }
_ZN10reflection13SchemaBuilder13add_fbs_filesEN11flatbuffers6OffsetINS1_6VectorINS2_INS_10SchemaFileEEEjEEEE:
 1423|  5.09k|  void add_fbs_files(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::SchemaFile>>> fbs_files) {
 1424|  5.09k|    fbb_.AddOffset(Schema::VT_FBS_FILES, fbs_files);
 1425|  5.09k|  }
_ZN10reflection13SchemaBuilderC2ERN11flatbuffers21FlatBufferBuilderImplILb0EEE:
 1427|  5.09k|        : fbb_(_fbb) {
 1428|  5.09k|    start_ = fbb_.StartTable();
 1429|  5.09k|  }
_ZN10reflection13SchemaBuilder6FinishEv:
 1430|  5.09k|  ::flatbuffers::Offset<Schema> Finish() {
 1431|  5.09k|    const auto end = fbb_.EndTable(start_);
 1432|  5.09k|    auto o = ::flatbuffers::Offset<Schema>(end);
 1433|  5.09k|    fbb_.Required(o, Schema::VT_OBJECTS);
 1434|  5.09k|    fbb_.Required(o, Schema::VT_ENUMS);
 1435|  5.09k|    return o;
 1436|  5.09k|  }
_ZN10reflection10CreateTypeERN11flatbuffers21FlatBufferBuilderImplILb0EEENS_8BaseTypeES4_itjj:
  252|   232k|    uint32_t element_size = 0) {
  253|   232k|  TypeBuilder builder_(_fbb);
  254|   232k|  builder_.add_element_size(element_size);
  255|   232k|  builder_.add_base_size(base_size);
  256|   232k|  builder_.add_index(index);
  257|   232k|  builder_.add_fixed_length(fixed_length);
  258|   232k|  builder_.add_element(element);
  259|   232k|  builder_.add_base_type(base_type);
  260|   232k|  return builder_.Finish();
  261|   232k|}
_ZN10reflection14CreateKeyValueERN11flatbuffers21FlatBufferBuilderImplILb0EEENS0_6OffsetINS0_6StringEEES6_:
  323|    704|    ::flatbuffers::Offset<::flatbuffers::String> value = 0) {
  324|    704|  KeyValueBuilder builder_(_fbb);
  325|    704|  builder_.add_value(value);
  326|    704|  builder_.add_key(key);
  327|    704|  return builder_.Finish();
  328|    704|}
_ZN10reflection13CreateEnumValERN11flatbuffers21FlatBufferBuilderImplILb0EEENS0_6OffsetINS0_6StringEEElNS4_INS_4TypeEEENS4_INS0_6VectorIS6_jEEEENS4_INS9_INS4_INS_8KeyValueEEEjEEEE:
  427|   115k|    ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::KeyValue>>> attributes = 0) {
  428|   115k|  EnumValBuilder builder_(_fbb);
  429|   115k|  builder_.add_value(value);
  430|   115k|  builder_.add_attributes(attributes);
  431|   115k|  builder_.add_documentation(documentation);
  432|   115k|  builder_.add_union_type(union_type);
  433|   115k|  builder_.add_name(name);
  434|   115k|  return builder_.Finish();
  435|   115k|}
_ZN10reflection10CreateEnumERN11flatbuffers21FlatBufferBuilderImplILb0EEENS0_6OffsetINS0_6StringEEENS4_INS0_6VectorINS4_INS_7EnumValEEEjEEEEbNS4_INS_4TypeEEENS4_INS7_INS4_INS_8KeyValueEEEjEEEENS4_INS7_IS6_jEEEES6_:
  571|  79.0k|    ::flatbuffers::Offset<::flatbuffers::String> declaration_file = 0) {
  572|  79.0k|  EnumBuilder builder_(_fbb);
  573|  79.0k|  builder_.add_declaration_file(declaration_file);
  574|  79.0k|  builder_.add_documentation(documentation);
  575|  79.0k|  builder_.add_attributes(attributes);
  576|  79.0k|  builder_.add_underlying_type(underlying_type);
  577|  79.0k|  builder_.add_values(values);
  578|  79.0k|  builder_.add_name(name);
  579|  79.0k|  builder_.add_is_union(is_union);
  580|  79.0k|  return builder_.Finish();
  581|  79.0k|}
_ZN10reflection11CreateFieldERN11flatbuffers21FlatBufferBuilderImplILb0EEENS0_6OffsetINS0_6StringEEENS4_INS_4TypeEEEttldbbbNS4_INS0_6VectorINS4_INS_8KeyValueEEEjEEEENS4_INS9_IS6_jEEEEbtb:
  783|  38.7k|    bool offset64 = false) {
  784|  38.7k|  FieldBuilder builder_(_fbb);
  785|  38.7k|  builder_.add_default_real(default_real);
  786|  38.7k|  builder_.add_default_integer(default_integer);
  787|  38.7k|  builder_.add_documentation(documentation);
  788|  38.7k|  builder_.add_attributes(attributes);
  789|  38.7k|  builder_.add_type(type);
  790|  38.7k|  builder_.add_name(name);
  791|  38.7k|  builder_.add_padding(padding);
  792|  38.7k|  builder_.add_offset(offset);
  793|  38.7k|  builder_.add_id(id);
  794|  38.7k|  builder_.add_offset64(offset64);
  795|  38.7k|  builder_.add_optional(optional);
  796|  38.7k|  builder_.add_key(key);
  797|  38.7k|  builder_.add_required(required);
  798|  38.7k|  builder_.add_deprecated(deprecated);
  799|  38.7k|  return builder_.Finish();
  800|  38.7k|}
_ZN10reflection12CreateObjectERN11flatbuffers21FlatBufferBuilderImplILb0EEENS0_6OffsetINS0_6StringEEENS4_INS0_6VectorINS4_INS_5FieldEEEjEEEEbiiNS4_INS7_INS4_INS_8KeyValueEEEjEEEENS4_INS7_IS6_jEEEES6_:
  961|  55.2k|    ::flatbuffers::Offset<::flatbuffers::String> declaration_file = 0) {
  962|  55.2k|  ObjectBuilder builder_(_fbb);
  963|  55.2k|  builder_.add_declaration_file(declaration_file);
  964|  55.2k|  builder_.add_documentation(documentation);
  965|  55.2k|  builder_.add_attributes(attributes);
  966|  55.2k|  builder_.add_bytesize(bytesize);
  967|  55.2k|  builder_.add_minalign(minalign);
  968|  55.2k|  builder_.add_fields(fields);
  969|  55.2k|  builder_.add_name(name);
  970|  55.2k|  builder_.add_is_struct(is_struct);
  971|  55.2k|  return builder_.Finish();
  972|  55.2k|}
_ZN10reflection13CreateRPCCallERN11flatbuffers21FlatBufferBuilderImplILb0EEENS0_6OffsetINS0_6StringEEENS4_INS_6ObjectEEES8_NS4_INS0_6VectorINS4_INS_8KeyValueEEEjEEEENS4_INS9_IS6_jEEEE:
 1095|  1.48k|    ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> documentation = 0) {
 1096|  1.48k|  RPCCallBuilder builder_(_fbb);
 1097|  1.48k|  builder_.add_documentation(documentation);
 1098|  1.48k|  builder_.add_attributes(attributes);
 1099|  1.48k|  builder_.add_response(response);
 1100|  1.48k|  builder_.add_request(request);
 1101|  1.48k|  builder_.add_name(name);
 1102|  1.48k|  return builder_.Finish();
 1103|  1.48k|}
_ZN10reflection13CreateServiceERN11flatbuffers21FlatBufferBuilderImplILb0EEENS0_6OffsetINS0_6StringEEENS4_INS0_6VectorINS4_INS_7RPCCallEEEjEEEENS4_INS7_INS4_INS_8KeyValueEEEjEEEENS4_INS7_IS6_jEEEES6_:
 1218|    743|    ::flatbuffers::Offset<::flatbuffers::String> declaration_file = 0) {
 1219|    743|  ServiceBuilder builder_(_fbb);
 1220|    743|  builder_.add_declaration_file(declaration_file);
 1221|    743|  builder_.add_documentation(documentation);
 1222|    743|  builder_.add_attributes(attributes);
 1223|    743|  builder_.add_calls(calls);
 1224|    743|  builder_.add_name(name);
 1225|    743|  return builder_.Finish();
 1226|    743|}
_ZN10reflection12CreateSchemaERN11flatbuffers21FlatBufferBuilderImplILb0EEENS0_6OffsetINS0_6VectorINS4_INS_6ObjectEEEjEEEENS4_INS5_INS4_INS_4EnumEEEjEEEENS4_INS0_6StringEEESF_S7_NS4_INS5_INS4_INS_7ServiceEEEjEEEENS_16AdvancedFeaturesENS4_INS5_INS4_INS_10SchemaFileEEEjEEEE:
 1448|  5.09k|    ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<reflection::SchemaFile>>> fbs_files = 0) {
 1449|  5.09k|  SchemaBuilder builder_(_fbb);
 1450|  5.09k|  builder_.add_advanced_features(advanced_features);
 1451|  5.09k|  builder_.add_fbs_files(fbs_files);
 1452|  5.09k|  builder_.add_services(services);
 1453|  5.09k|  builder_.add_root_table(root_table);
 1454|  5.09k|  builder_.add_file_ext(file_ext);
 1455|  5.09k|  builder_.add_file_ident(file_ident);
 1456|  5.09k|  builder_.add_enums(enums);
 1457|  5.09k|  builder_.add_objects(objects);
 1458|  5.09k|  return builder_.Finish();
 1459|  5.09k|}

_ZNK11flatbuffers6StringltERKS0_:
   42|  2.14M|  bool operator<(const String& o) const {
   43|  2.14M|    return StringLessThan(this->data(), this->size(), o.data(), o.size());
   44|  2.14M|  }

_ZNK11flatbuffers5Table20VerifyOffsetRequiredIjLb0EEEbRKNS_16VerifierTemplateIXT0_EEEt:
  189|   566k|                            voffset_t field) const {
  190|   566k|    auto field_offset = GetOptionalFieldOffset(field);
  191|   566k|    return verifier.Check(field_offset != 0) &&
  ------------------
  |  Branch (191:12): [True: 566k, False: 0]
  ------------------
  192|   566k|           verifier.template VerifyOffset<OffsetT>(data_, field_offset);
  ------------------
  |  Branch (192:12): [True: 566k, False: 0]
  ------------------
  193|   566k|  }
_ZNK11flatbuffers5Table22GetOptionalFieldOffsetEt:
   36|   169M|  voffset_t GetOptionalFieldOffset(voffset_t field) const {
   37|       |    // The vtable offset is always at the start.
   38|   169M|    auto vtable = GetVTable();
   39|       |    // The first element is the size of the vtable (fields + type id + itself).
   40|   169M|    auto vtsize = ReadScalar<voffset_t>(vtable);
   41|       |    // If the field we're accessing is outside the vtable, we're reading older
   42|       |    // data, so it's the same as if the offset was 0 (not present).
   43|   169M|    return field < vtsize ? ReadScalar<voffset_t>(vtable + field) : 0;
  ------------------
  |  Branch (43:12): [True: 15.5M, False: 154M]
  ------------------
   44|   169M|  }
_ZNK11flatbuffers5Table9GetVTableEv:
   30|   169M|  const uint8_t* GetVTable() const {
   31|   169M|    return data_ - ReadScalar<soffset_t>(data_);
   32|   169M|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection6ObjectEEEjEEjEET_t:
   60|  10.1k|  P GetPointer(voffset_t field) const {
   61|  10.1k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|  10.1k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection6ObjectEEEjEEjEET_t:
   53|  10.1k|  P GetPointer(voffset_t field) {
   54|  10.1k|    auto field_offset = GetOptionalFieldOffset(field);
   55|  10.1k|    auto p = data_ + field_offset;
   56|  10.1k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 10.1k, False: 0]
  ------------------
   57|  10.1k|                        : nullptr;
   58|  10.1k|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6StringEjEET_t:
   60|  4.70M|  P GetPointer(voffset_t field) const {
   61|  4.70M|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|  4.70M|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6StringEjEET_t:
   53|  4.70M|  P GetPointer(voffset_t field) {
   54|  4.70M|    auto field_offset = GetOptionalFieldOffset(field);
   55|  4.70M|    auto p = data_ + field_offset;
   56|  4.70M|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 4.70M, False: 0]
  ------------------
   57|  4.70M|                        : nullptr;
   58|  4.70M|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection5FieldEEEjEEjEET_t:
   60|   116k|  P GetPointer(voffset_t field) const {
   61|   116k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|   116k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection5FieldEEEjEEjEET_t:
   53|   116k|  P GetPointer(voffset_t field) {
   54|   116k|    auto field_offset = GetOptionalFieldOffset(field);
   55|   116k|    auto p = data_ + field_offset;
   56|   116k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 116k, False: 0]
  ------------------
   57|   116k|                        : nullptr;
   58|   116k|  }
_ZNK11flatbuffers5Table11VerifyFieldIaLb0EEEbRKNS_16VerifierTemplateIXT0_EEEtm:
  160|   469k|                   size_t align) const {
  161|       |    // Calling GetOptionalFieldOffset should be safe now thanks to
  162|       |    // VerifyTable().
  163|   469k|    auto field_offset = GetOptionalFieldOffset(field);
  164|       |    // Check the actual field.
  165|   469k|    return !field_offset ||
  ------------------
  |  Branch (165:12): [True: 344k, False: 125k]
  ------------------
  166|   125k|           verifier.template VerifyField<T>(data_, field_offset, align);
  ------------------
  |  Branch (166:12): [True: 125k, False: 0]
  ------------------
  167|   469k|  }
_ZNK11flatbuffers5Table11VerifyFieldIjLb0EEEbRKNS_16VerifierTemplateIXT0_EEEtm:
  160|   469k|                   size_t align) const {
  161|       |    // Calling GetOptionalFieldOffset should be safe now thanks to
  162|       |    // VerifyTable().
  163|   469k|    auto field_offset = GetOptionalFieldOffset(field);
  164|       |    // Check the actual field.
  165|   469k|    return !field_offset ||
  ------------------
  |  Branch (165:12): [True: 29.7k, False: 440k]
  ------------------
  166|   440k|           verifier.template VerifyField<T>(data_, field_offset, align);
  ------------------
  |  Branch (166:12): [True: 440k, False: 0]
  ------------------
  167|   469k|  }
_ZNK11flatbuffers5Table10GetPointerIPKN10reflection4TypeEjEET_t:
   60|   234k|  P GetPointer(voffset_t field) const {
   61|   234k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|   234k|  }
_ZN11flatbuffers5Table10GetPointerIPKN10reflection4TypeEjEET_t:
   53|   234k|  P GetPointer(voffset_t field) {
   54|   234k|    auto field_offset = GetOptionalFieldOffset(field);
   55|   234k|    auto p = data_ + field_offset;
   56|   234k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 234k, False: 0]
  ------------------
   57|   234k|                        : nullptr;
   58|   234k|  }
_ZNK11flatbuffers5Table11VerifyFieldItLb0EEEbRKNS_16VerifierTemplateIXT0_EEEtm:
  160|   357k|                   size_t align) const {
  161|       |    // Calling GetOptionalFieldOffset should be safe now thanks to
  162|       |    // VerifyTable().
  163|   357k|    auto field_offset = GetOptionalFieldOffset(field);
  164|       |    // Check the actual field.
  165|   357k|    return !field_offset ||
  ------------------
  |  Branch (165:12): [True: 290k, False: 67.3k]
  ------------------
  166|  67.3k|           verifier.template VerifyField<T>(data_, field_offset, align);
  ------------------
  |  Branch (166:12): [True: 67.3k, False: 0]
  ------------------
  167|   357k|  }
_ZNK11flatbuffers5Table11VerifyFieldIlLb0EEEbRKNS_16VerifierTemplateIXT0_EEEtm:
  160|   155k|                   size_t align) const {
  161|       |    // Calling GetOptionalFieldOffset should be safe now thanks to
  162|       |    // VerifyTable().
  163|   155k|    auto field_offset = GetOptionalFieldOffset(field);
  164|       |    // Check the actual field.
  165|   155k|    return !field_offset ||
  ------------------
  |  Branch (165:12): [True: 119k, False: 36.7k]
  ------------------
  166|  36.7k|           verifier.template VerifyField<T>(data_, field_offset, align);
  ------------------
  |  Branch (166:12): [True: 36.7k, False: 0]
  ------------------
  167|   155k|  }
_ZNK11flatbuffers5Table11VerifyFieldIdLb0EEEbRKNS_16VerifierTemplateIXT0_EEEtm:
  160|  40.8k|                   size_t align) const {
  161|       |    // Calling GetOptionalFieldOffset should be safe now thanks to
  162|       |    // VerifyTable().
  163|  40.8k|    auto field_offset = GetOptionalFieldOffset(field);
  164|       |    // Check the actual field.
  165|  40.8k|    return !field_offset ||
  ------------------
  |  Branch (165:12): [True: 40.7k, False: 91]
  ------------------
  166|     91|           verifier.template VerifyField<T>(data_, field_offset, align);
  ------------------
  |  Branch (166:12): [True: 91, False: 0]
  ------------------
  167|  40.8k|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection8KeyValueEEEjEEjEET_t:
   60|   591k|  P GetPointer(voffset_t field) const {
   61|   591k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|   591k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection8KeyValueEEEjEEjEET_t:
   53|   591k|  P GetPointer(voffset_t field) {
   54|   591k|    auto field_offset = GetOptionalFieldOffset(field);
   55|   591k|    auto p = data_ + field_offset;
   56|   591k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 1.40k, False: 589k]
  ------------------
   57|   591k|                        : nullptr;
   58|   591k|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetINS_6StringEEEjEEjEET_t:
   60|   591k|  P GetPointer(voffset_t field) const {
   61|   591k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|   591k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetINS_6StringEEEjEEjEET_t:
   53|   591k|  P GetPointer(voffset_t field) {
   54|   591k|    auto field_offset = GetOptionalFieldOffset(field);
   55|   591k|    auto p = data_ + field_offset;
   56|   591k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 0, False: 591k]
  ------------------
   57|   591k|                        : nullptr;
   58|   591k|  }
_ZNK11flatbuffers5Table11VerifyFieldIhLb0EEEbRKNS_16VerifierTemplateIXT0_EEEtm:
  160|   341k|                   size_t align) const {
  161|       |    // Calling GetOptionalFieldOffset should be safe now thanks to
  162|       |    // VerifyTable().
  163|   341k|    auto field_offset = GetOptionalFieldOffset(field);
  164|       |    // Check the actual field.
  165|   341k|    return !field_offset ||
  ------------------
  |  Branch (165:12): [True: 237k, False: 104k]
  ------------------
  166|   104k|           verifier.template VerifyField<T>(data_, field_offset, align);
  ------------------
  |  Branch (166:12): [True: 104k, False: 0]
  ------------------
  167|   341k|  }
_ZNK11flatbuffers5Table11VerifyFieldIiLb0EEEbRKNS_16VerifierTemplateIXT0_EEEtm:
  160|   351k|                   size_t align) const {
  161|       |    // Calling GetOptionalFieldOffset should be safe now thanks to
  162|       |    // VerifyTable().
  163|   351k|    auto field_offset = GetOptionalFieldOffset(field);
  164|       |    // Check the actual field.
  165|   351k|    return !field_offset ||
  ------------------
  |  Branch (165:12): [True: 174k, False: 177k]
  ------------------
  166|   177k|           verifier.template VerifyField<T>(data_, field_offset, align);
  ------------------
  |  Branch (166:12): [True: 177k, False: 0]
  ------------------
  167|   351k|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection4EnumEEEjEEjEET_t:
   60|  10.1k|  P GetPointer(voffset_t field) const {
   61|  10.1k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|  10.1k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection4EnumEEEjEEjEET_t:
   53|  10.1k|  P GetPointer(voffset_t field) {
   54|  10.1k|    auto field_offset = GetOptionalFieldOffset(field);
   55|  10.1k|    auto p = data_ + field_offset;
   56|  10.1k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 10.1k, False: 0]
  ------------------
   57|  10.1k|                        : nullptr;
   58|  10.1k|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection7EnumValEEEjEEjEET_t:
   60|   158k|  P GetPointer(voffset_t field) const {
   61|   158k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|   158k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection7EnumValEEEjEEjEET_t:
   53|   158k|  P GetPointer(voffset_t field) {
   54|   158k|    auto field_offset = GetOptionalFieldOffset(field);
   55|   158k|    auto p = data_ + field_offset;
   56|   158k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 158k, False: 0]
  ------------------
   57|   158k|                        : nullptr;
   58|   158k|  }
_ZNK11flatbuffers5Table12VerifyOffsetIjLb0EEEbRKNS_16VerifierTemplateIXT0_EEEt:
  181|   871k|                    voffset_t field) const {
  182|   871k|    auto field_offset = GetOptionalFieldOffset(field);
  183|   871k|    return !field_offset ||
  ------------------
  |  Branch (183:12): [True: 600k, False: 270k]
  ------------------
  184|   270k|           verifier.template VerifyOffset<OffsetT>(data_, field_offset);
  ------------------
  |  Branch (184:12): [True: 270k, False: 0]
  ------------------
  185|   871k|  }
_ZNK11flatbuffers5Table10GetPointerIPKN10reflection6ObjectEjEET_t:
   60|  8.05k|  P GetPointer(voffset_t field) const {
   61|  8.05k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|  8.05k|  }
_ZN11flatbuffers5Table10GetPointerIPKN10reflection6ObjectEjEET_t:
   53|  8.05k|  P GetPointer(voffset_t field) {
   54|  8.05k|    auto field_offset = GetOptionalFieldOffset(field);
   55|  8.05k|    auto p = data_ + field_offset;
   56|  8.05k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 3.17k, False: 4.88k]
  ------------------
   57|  8.05k|                        : nullptr;
   58|  8.05k|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection7ServiceEEEjEEjEET_t:
   60|  10.1k|  P GetPointer(voffset_t field) const {
   61|  10.1k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|  10.1k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection7ServiceEEEjEEjEET_t:
   53|  10.1k|  P GetPointer(voffset_t field) {
   54|  10.1k|    auto field_offset = GetOptionalFieldOffset(field);
   55|  10.1k|    auto p = data_ + field_offset;
   56|  10.1k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 10.1k, False: 0]
  ------------------
   57|  10.1k|                        : nullptr;
   58|  10.1k|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection7RPCCallEEEjEEjEET_t:
   60|  1.48k|  P GetPointer(voffset_t field) const {
   61|  1.48k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|  1.48k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection7RPCCallEEEjEEjEET_t:
   53|  1.48k|  P GetPointer(voffset_t field) {
   54|  1.48k|    auto field_offset = GetOptionalFieldOffset(field);
   55|  1.48k|    auto p = data_ + field_offset;
   56|  1.48k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 1.48k, False: 0]
  ------------------
   57|  1.48k|                        : nullptr;
   58|  1.48k|  }
_ZNK11flatbuffers5Table11VerifyFieldImLb0EEEbRKNS_16VerifierTemplateIXT0_EEEtm:
  160|  5.09k|                   size_t align) const {
  161|       |    // Calling GetOptionalFieldOffset should be safe now thanks to
  162|       |    // VerifyTable().
  163|  5.09k|    auto field_offset = GetOptionalFieldOffset(field);
  164|       |    // Check the actual field.
  165|  5.09k|    return !field_offset ||
  ------------------
  |  Branch (165:12): [True: 4.87k, False: 228]
  ------------------
  166|    228|           verifier.template VerifyField<T>(data_, field_offset, align);
  ------------------
  |  Branch (166:12): [True: 228, False: 0]
  ------------------
  167|  5.09k|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection10SchemaFileEEEjEEjEET_t:
   60|  10.1k|  P GetPointer(voffset_t field) const {
   61|  10.1k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|  10.1k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection10SchemaFileEEEjEEjEET_t:
   53|  10.1k|  P GetPointer(voffset_t field) {
   54|  10.1k|    auto field_offset = GetOptionalFieldOffset(field);
   55|  10.1k|    auto p = data_ + field_offset;
   56|  10.1k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 0, False: 10.1k]
  ------------------
   57|  10.1k|                        : nullptr;
   58|  10.1k|  }
_ZNK11flatbuffers5Table16VerifyTableStartILb0EEEbRNS_16VerifierTemplateIXT_EEE:
  153|   536k|  bool VerifyTableStart(VerifierTemplate<B>& verifier) const {
  154|   536k|    return verifier.VerifyTableStart(data_);
  155|   536k|  }
_ZN11flatbuffers5Table12GetAddressOfEt:
  138|   158M|  uint8_t* GetAddressOf(voffset_t field) {
  139|   158M|    auto field_offset = GetOptionalFieldOffset(field);
  140|   158M|    return field_offset ? data_ + field_offset : nullptr;
  ------------------
  |  Branch (140:12): [True: 5.87M, False: 153M]
  ------------------
  141|   158M|  }
_ZNK11flatbuffers5Table12GetAddressOfEt:
  142|   158M|  const uint8_t* GetAddressOf(voffset_t field) const {
  143|   158M|    return const_cast<Table*>(this)->GetAddressOf(field);
  144|   158M|  }

_ZN11flatbuffers13ClassicLocale3GetEv:
  228|  77.2M|    static locale_type Get() { return instance_.locale_; }
_ZN11flatbuffers17check_ascii_rangeEccc:
   44|   171M|inline bool check_ascii_range(char x, char a, char b) {
   45|   171M|  FLATBUFFERS_ASSERT(a <= b);
   46|       |  // (Hacker's Delight): `a <= x <= b` <=> `(x-a) <={u} (b-a)`.
   47|       |  // The x, a, b will be promoted to int and subtracted without overflow.
   48|   171M|  return static_cast<unsigned int>(x - a) <= static_cast<unsigned int>(b - a);
   49|   171M|}
_ZN11flatbuffers8is_alphaEc:
   52|  87.5M|inline bool is_alpha(char c) {
   53|       |  // ASCII only: alpha to upper case => reset bit 0x20 (~0x20 = 0xDF).
   54|  87.5M|  return check_ascii_range(c & 0xDF, 'a' & 0xDF, 'z' & 0xDF);
   55|  87.5M|}
_ZN11flatbuffers13is_alpha_charEcc:
   61|  77.2M|inline bool is_alpha_char(char c, char alpha) {
   62|  77.2M|  FLATBUFFERS_ASSERT(is_alpha(alpha));
   63|       |  // ASCII only: alpha to upper case => reset bit 0x20 (~0x20 = 0xDF).
   64|  77.2M|  return ((c & 0xDF) == (alpha & 0xDF));
   65|  77.2M|}
_ZN11flatbuffers8is_digitEc:
   72|  82.2M|inline bool is_digit(char c) { return check_ascii_range(c, '0', '9'); }
_ZN11flatbuffers9is_xdigitEc:
   74|  70.9k|inline bool is_xdigit(char c) {
   75|       |  // Replace by look-up table.
   76|  70.9k|  return is_digit(c) || check_ascii_range(c & 0xDF, 'a' & 0xDF, 'f' & 0xDF);
  ------------------
  |  Branch (76:10): [True: 46.1k, False: 24.7k]
  |  Branch (76:25): [True: 19.2k, False: 5.51k]
  ------------------
   77|  70.9k|}
_ZN11flatbuffers11NumToStringIaEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  146|    695|inline std::string NumToString<signed char>(signed char t) {
  147|    695|  return NumToString(static_cast<int>(t));
  148|    695|}
_ZN11flatbuffers11NumToStringIhEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  150|  1.13k|inline std::string NumToString<unsigned char>(unsigned char t) {
  151|  1.13k|  return NumToString(static_cast<int>(t));
  152|  1.13k|}
_ZN11flatbuffers11NumToStringIcEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  154|    328|inline std::string NumToString<char>(char t) {
  155|    328|  return NumToString(static_cast<int>(t));
  156|    328|}
_ZN11flatbuffers11NumToStringIdEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  188|  4.19k|inline std::string NumToString<double>(double t) {
  189|  4.19k|  return FloatToString(t, 12);
  190|  4.19k|}
_ZN11flatbuffers13strtoval_implEPlPKcPPci:
  255|  77.0M|                                 int base) {
  256|  77.0M|    *val = __strtoll_impl(str, endptr, base);
  ------------------
  |  |  238|  77.0M|    #define __strtoll_impl(s, pe, b) strtoll_l(s, pe, b, ClassicLocale::Get())
  ------------------
  257|  77.0M|}
_ZN11flatbuffers13strtoval_implEPmPKcPPci:
  260|  88.8k|                                 int base) {
  261|  88.8k|  *val = __strtoull_impl(str, endptr, base);
  ------------------
  |  |  237|  88.8k|    #define __strtoull_impl(s, pe, b) strtoull_l(s, pe, b, ClassicLocale::Get())
  ------------------
  262|  88.8k|}
_ZN11flatbuffers13strtoval_implEPdPKcPPc:
  264|   103k|inline void strtoval_impl(double *val, const char *str, char **endptr) {
  265|   103k|  *val = __strtod_impl(str, endptr);
  ------------------
  |  |  239|   103k|    #define __strtod_impl(s, pe) strtod_l(s, pe, ClassicLocale::Get())
  ------------------
  266|   103k|}
_ZN11flatbuffers13strtoval_implEPfPKcPPc:
  270|  25.3k|inline void strtoval_impl(float *val, const char *str, char **endptr) {
  271|  25.3k|  *val = __strtof_impl(str, endptr);
  ------------------
  |  |  240|  25.3k|    #define __strtof_impl(s, pe) strtof_l(s, pe, ClassicLocale::Get())
  ------------------
  272|  25.3k|}
_ZN11flatbuffers14StringToNumberIlEEbPKcPT_:
  367|  76.5M|inline bool StringToNumber<int64_t>(const char* str, int64_t* val) {
  368|  76.5M|  return StringToIntegerImpl(val, str);
  369|  76.5M|}
_ZN11flatbuffers14StringToNumberImEEbPKcPT_:
  372|  86.7k|inline bool StringToNumber<uint64_t>(const char* str, uint64_t* val) {
  373|  86.7k|  if (!StringToIntegerImpl(val, str)) return false;
  ------------------
  |  Branch (373:7): [True: 71, False: 86.6k]
  ------------------
  374|       |  // The strtoull accepts negative numbers:
  375|       |  // If the minus sign was part of the input sequence, the numeric value
  376|       |  // calculated from the sequence of digits is negated as if by unary minus
  377|       |  // in the result type, which applies unsigned integer wraparound rules.
  378|       |  // Fix this behaviour (except -0).
  379|  86.6k|  if (*val) {
  ------------------
  |  Branch (379:7): [True: 74.3k, False: 12.2k]
  ------------------
  380|  74.3k|    auto s = str;
  381|  75.6k|    while (*s && !is_digit(*s)) s++;
  ------------------
  |  Branch (381:12): [True: 75.6k, False: 0]
  |  Branch (381:18): [True: 1.28k, False: 74.3k]
  ------------------
  382|  74.3k|    s = (s > str) ? (s - 1) : s;  // step back to one symbol
  ------------------
  |  Branch (382:9): [True: 755, False: 73.5k]
  ------------------
  383|  74.3k|    if (*s == '-') {
  ------------------
  |  Branch (383:9): [True: 70, False: 74.2k]
  ------------------
  384|       |      // For unsigned types return the max to distinguish from
  385|       |      // "no conversion can be performed".
  386|     70|      *val = (flatbuffers::numeric_limits<uint64_t>::max)();
  387|     70|      return false;
  388|     70|    }
  389|  74.3k|  }
  390|  86.5k|  return true;
  391|  86.6k|}
_ZN11flatbuffers14StringToNumberIfEEbPKcPT_:
  394|  25.3k|inline bool StringToNumber(const char* s, float* val) {
  395|  25.3k|  return StringToFloatImpl(val, s);
  396|  25.3k|}
_ZN11flatbuffers14StringToNumberIdEEbPKcPT_:
  399|   103k|inline bool StringToNumber(const char* s, double* val) {
  400|   103k|  return StringToFloatImpl(val, s);
  401|   103k|}
_ZN11flatbuffers11StringToIntEPKci:
  403|   247k|inline int64_t StringToInt(const char* s, int base = 10) {
  404|   247k|  int64_t val;
  405|   247k|  return StringToIntegerImpl(&val, s, base) ? val : 0;
  ------------------
  |  Branch (405:10): [True: 246k, False: 580]
  ------------------
  406|   247k|}
_ZN11flatbuffers12StringToUIntEPKci:
  408|  2.15k|inline uint64_t StringToUInt(const char* s, int base = 10) {
  409|  2.15k|  uint64_t val;
  410|  2.15k|  return StringToIntegerImpl(&val, s, base) ? val : 0;
  ------------------
  |  Branch (410:10): [True: 2.15k, False: 0]
  ------------------
  411|  2.15k|}
_ZN11flatbuffers6ToUTF8EjPNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE:
  517|  1.24k|inline int ToUTF8(uint32_t ucc, std::string* out) {
  518|  1.24k|  FLATBUFFERS_ASSERT(!(ucc & 0x80000000));  // Top bit can't be set.
  519|       |  // 6 possible encodings: http://en.wikipedia.org/wiki/UTF-8
  520|  3.68k|  for (int i = 0; i < 6; i++) {
  ------------------
  |  Branch (520:19): [True: 3.68k, False: 0]
  ------------------
  521|       |    // Max bits this encoding can represent.
  522|  3.68k|    uint32_t max_bits = 6 + i * 5 + static_cast<int>(!i);
  523|  3.68k|    if (ucc < (1u << max_bits)) {  // does it fit?
  ------------------
  |  Branch (523:9): [True: 1.24k, False: 2.44k]
  ------------------
  524|       |      // Remaining bits not encoded in the first byte, store 6 bits each
  525|  1.24k|      uint32_t remain_bits = i * 6;
  526|       |      // Store first byte:
  527|  1.24k|      (*out) += static_cast<char>((0xFE << (max_bits - remain_bits)) |
  528|  1.24k|                                  (ucc >> remain_bits));
  529|       |      // Store remaining bytes:
  530|  3.68k|      for (int j = i - 1; j >= 0; j--) {
  ------------------
  |  Branch (530:27): [True: 2.44k, False: 1.24k]
  ------------------
  531|  2.44k|        (*out) += static_cast<char>(((ucc >> (j * 6)) & 0x3F) | 0x80);
  532|  2.44k|      }
  533|  1.24k|      return i + 1;  // Return the number of bytes added.
  534|  1.24k|    }
  535|  3.68k|  }
  536|      0|  FLATBUFFERS_ASSERT(0);  // Impossible to arrive here.
  537|      0|  return -1;
  538|      0|}
_ZN11flatbuffers8FromUTF8EPPKc:
  545|  9.66k|inline int FromUTF8(const char** in) {
  546|  9.66k|  int len = 0;
  547|       |  // Count leading 1 bits.
  548|  13.9k|  for (int mask = 0x80; mask >= 0x04; mask >>= 1) {
  ------------------
  |  Branch (548:25): [True: 13.9k, False: 5]
  ------------------
  549|  13.9k|    if (**in & mask) {
  ------------------
  |  Branch (549:9): [True: 4.29k, False: 9.66k]
  ------------------
  550|  4.29k|      len++;
  551|  9.66k|    } else {
  552|  9.66k|      break;
  553|  9.66k|    }
  554|  13.9k|  }
  555|  9.66k|  if ((static_cast<unsigned char>(**in) << len) & 0x80)
  ------------------
  |  Branch (555:7): [True: 2, False: 9.66k]
  ------------------
  556|      2|    return -1;  // Bit after leading 1's must be 0.
  557|  9.66k|  if (!len) return *(*in)++;
  ------------------
  |  Branch (557:7): [True: 8.26k, False: 1.40k]
  ------------------
  558|       |  // UTF-8 encoded values with a length are between 2 and 4 bytes.
  559|  1.40k|  if (len < 2 || len > 4) {
  ------------------
  |  Branch (559:7): [True: 6, False: 1.39k]
  |  Branch (559:18): [True: 4, False: 1.39k]
  ------------------
  560|     10|    return -1;
  561|     10|  }
  562|       |  // Grab initial bits of the code.
  563|  1.39k|  int ucc = *(*in)++ & ((1 << (7 - len)) - 1);
  564|  4.22k|  for (int i = 0; i < len - 1; i++) {
  ------------------
  |  Branch (564:19): [True: 2.84k, False: 1.37k]
  ------------------
  565|  2.84k|    if ((**in & 0xC0) != 0x80) return -1;  // Upper bits must 1 0.
  ------------------
  |  Branch (565:9): [True: 18, False: 2.83k]
  ------------------
  566|  2.83k|    ucc <<= 6;
  567|  2.83k|    ucc |= *(*in)++ & 0x3F;  // Grab 6 more bits of the code.
  568|  2.83k|  }
  569|       |  // UTF-8 cannot encode values between 0xD800 and 0xDFFF (reserved for
  570|       |  // UTF-16 surrogate pairs).
  571|  1.37k|  if (ucc >= 0xD800 && ucc <= 0xDFFF) {
  ------------------
  |  Branch (571:7): [True: 780, False: 594]
  |  Branch (571:24): [True: 11, False: 769]
  ------------------
  572|     11|    return -1;
  573|     11|  }
  574|       |  // UTF-8 must represent code points in their shortest possible encoding.
  575|  1.36k|  switch (len) {
  ------------------
  |  Branch (575:11): [True: 1.36k, False: 0]
  ------------------
  576|    266|    case 2:
  ------------------
  |  Branch (576:5): [True: 266, False: 1.09k]
  ------------------
  577|       |      // Two bytes of UTF-8 can represent code points from U+0080 to U+07FF.
  578|    266|      if (ucc < 0x0080 || ucc > 0x07FF) {
  ------------------
  |  Branch (578:11): [True: 9, False: 257]
  |  Branch (578:27): [True: 0, False: 257]
  ------------------
  579|      9|        return -1;
  580|      9|      }
  581|    257|      break;
  582|    762|    case 3:
  ------------------
  |  Branch (582:5): [True: 762, False: 601]
  ------------------
  583|       |      // Three bytes of UTF-8 can represent code points from U+0800 to U+FFFF.
  584|    762|      if (ucc < 0x0800 || ucc > 0xFFFF) {
  ------------------
  |  Branch (584:11): [True: 8, False: 754]
  |  Branch (584:27): [True: 0, False: 754]
  ------------------
  585|      8|        return -1;
  586|      8|      }
  587|    754|      break;
  588|    754|    case 4:
  ------------------
  |  Branch (588:5): [True: 335, False: 1.02k]
  ------------------
  589|       |      // Four bytes of UTF-8 can represent code points from U+10000 to U+10FFFF.
  590|    335|      if (ucc < 0x10000 || ucc > 0x10FFFF) {
  ------------------
  |  Branch (590:11): [True: 12, False: 323]
  |  Branch (590:28): [True: 11, False: 312]
  ------------------
  591|     23|        return -1;
  592|     23|      }
  593|    312|      break;
  594|  1.36k|  }
  595|  1.32k|  return ucc;
  596|  1.36k|}
_ZN11flatbuffers11NumToStringIiEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  131|   220k|std::string NumToString(T t) {
  132|       |  // clang-format off
  133|       |
  134|   220k|  #ifndef FLATBUFFERS_PREFER_PRINTF
  135|   220k|    std::stringstream ss;
  136|   220k|    ss << t;
  137|   220k|    return ss.str();
  138|       |  #else // FLATBUFFERS_PREFER_PRINTF
  139|       |    auto v = static_cast<long long>(t);
  140|       |    return NumToStringImplWrapper(v, "%.*lld");
  141|       |  #endif // FLATBUFFERS_PREFER_PRINTF
  142|       |  // clang-format on
  143|   220k|}
_ZN11flatbuffers13FloatToStringIdEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_i:
  160|  4.19k|std::string FloatToString(T t, int precision) {
  161|       |  // clang-format off
  162|       |
  163|  4.19k|  #ifndef FLATBUFFERS_PREFER_PRINTF
  164|       |    // to_string() prints different numbers of digits for floats depending on
  165|       |    // platform and isn't available on Android, so we use stringstream
  166|  4.19k|    std::stringstream ss;
  167|       |    // Use std::fixed to suppress scientific notation.
  168|  4.19k|    ss << std::fixed;
  169|       |    // Default precision is 6, we want that to be higher for doubles.
  170|  4.19k|    ss << std::setprecision(precision);
  171|  4.19k|    ss << t;
  172|  4.19k|    auto s = ss.str();
  173|       |  #else // FLATBUFFERS_PREFER_PRINTF
  174|       |    auto v = static_cast<double>(t);
  175|       |    auto s = NumToStringImplWrapper(v, "%0.*f", precision);
  176|       |  #endif // FLATBUFFERS_PREFER_PRINTF
  177|       |  // clang-format on
  178|       |  // Sadly, std::fixed turns "1" into "1.00000", so here we undo that.
  179|  4.19k|  auto p = s.find_last_not_of('0');
  180|  4.19k|  if (p != std::string::npos) {
  ------------------
  |  Branch (180:7): [True: 4.19k, False: 0]
  ------------------
  181|       |    // Strip trailing zeroes. If it is a whole number, keep one zero.
  182|  4.19k|    s.resize(p + (s[p] == '.' ? 2 : 1));
  ------------------
  |  Branch (182:19): [True: 834, False: 3.35k]
  ------------------
  183|  4.19k|  }
  184|  4.19k|  return s;
  185|  4.19k|}
_ZN11flatbuffers19StringToIntegerImplIlEEbPT_PKcib:
  294|   153M|                                const bool check_errno = true) {
  295|       |  // T is int64_t or uint64_T
  296|   153M|  FLATBUFFERS_ASSERT(str);
  297|   153M|  if (base <= 0) {
  ------------------
  |  Branch (297:7): [True: 76.7M, False: 77.0M]
  ------------------
  298|  76.7M|    auto s = str;
  299|  76.7M|    while (*s && !is_digit(*s)) s++;
  ------------------
  |  Branch (299:12): [True: 76.7M, False: 177]
  |  Branch (299:18): [True: 11.4k, False: 76.7M]
  ------------------
  300|  76.7M|    if (s[0] == '0' && is_alpha_char(s[1], 'X'))
  ------------------
  |  Branch (300:9): [True: 76.5M, False: 169k]
  |  Branch (300:24): [True: 3.69k, False: 76.5M]
  ------------------
  301|  3.69k|      return StringToIntegerImpl(val, str, 16, check_errno);
  302|       |    // if a prefix not match, try base=10
  303|  76.7M|    return StringToIntegerImpl(val, str, 10, check_errno);
  304|  77.0M|  } else {
  305|  77.0M|    if (check_errno) errno = 0;  // clear thread-local errno
  ------------------
  |  Branch (305:9): [True: 76.8M, False: 167k]
  ------------------
  306|  77.0M|    auto endptr = str;
  307|  77.0M|    strtoval_impl(val, str, const_cast<char**>(&endptr), base);
  308|  77.0M|    if ((*endptr != '\0') || (endptr == str)) {
  ------------------
  |  Branch (308:9): [True: 588, False: 77.0M]
  |  Branch (308:30): [True: 28, False: 77.0M]
  ------------------
  309|    616|      *val = 0;      // erase partial result
  310|    616|      return false;  // invalid string
  311|    616|    }
  312|       |    // errno is out-of-range, return MAX/MIN
  313|  77.0M|    if (check_errno && errno) return false;
  ------------------
  |  Branch (313:9): [True: 76.8M, False: 166k]
  |  Branch (313:24): [True: 313, False: 76.8M]
  ------------------
  314|  77.0M|    return true;
  315|  77.0M|  }
  316|   153M|}
_ZN11flatbuffers19StringToIntegerImplImEEbPT_PKcib:
  294|   175k|                                const bool check_errno = true) {
  295|       |  // T is int64_t or uint64_T
  296|   175k|  FLATBUFFERS_ASSERT(str);
  297|   175k|  if (base <= 0) {
  ------------------
  |  Branch (297:7): [True: 86.7k, False: 88.8k]
  ------------------
  298|  86.7k|    auto s = str;
  299|  88.2k|    while (*s && !is_digit(*s)) s++;
  ------------------
  |  Branch (299:12): [True: 88.2k, False: 27]
  |  Branch (299:18): [True: 1.57k, False: 86.6k]
  ------------------
  300|  86.7k|    if (s[0] == '0' && is_alpha_char(s[1], 'X'))
  ------------------
  |  Branch (300:9): [True: 14.4k, False: 72.2k]
  |  Branch (300:24): [True: 1.01k, False: 13.4k]
  ------------------
  301|  1.01k|      return StringToIntegerImpl(val, str, 16, check_errno);
  302|       |    // if a prefix not match, try base=10
  303|  85.6k|    return StringToIntegerImpl(val, str, 10, check_errno);
  304|  88.8k|  } else {
  305|  88.8k|    if (check_errno) errno = 0;  // clear thread-local errno
  ------------------
  |  Branch (305:9): [True: 88.8k, False: 0]
  ------------------
  306|  88.8k|    auto endptr = str;
  307|  88.8k|    strtoval_impl(val, str, const_cast<char**>(&endptr), base);
  308|  88.8k|    if ((*endptr != '\0') || (endptr == str)) {
  ------------------
  |  Branch (308:9): [True: 33, False: 88.8k]
  |  Branch (308:30): [True: 12, False: 88.8k]
  ------------------
  309|     45|      *val = 0;      // erase partial result
  310|     45|      return false;  // invalid string
  311|     45|    }
  312|       |    // errno is out-of-range, return MAX/MIN
  313|  88.8k|    if (check_errno && errno) return false;
  ------------------
  |  Branch (313:9): [True: 88.8k, False: 0]
  |  Branch (313:24): [True: 26, False: 88.7k]
  ------------------
  314|  88.7k|    return true;
  315|  88.8k|  }
  316|   175k|}
_ZN11flatbuffers17StringToFloatImplIfEEbPT_PKc:
  319|  25.3k|inline bool StringToFloatImpl(T* val, const char* const str) {
  320|       |  // Type T must be either float or double.
  321|  25.3k|  FLATBUFFERS_ASSERT(str && val);
  322|  25.3k|  auto end = str;
  323|  25.3k|  strtoval_impl(val, str, const_cast<char**>(&end));
  324|  25.3k|  auto done = (end != str) && (*end == '\0');
  ------------------
  |  Branch (324:15): [True: 25.2k, False: 71]
  |  Branch (324:31): [True: 25.2k, False: 9]
  ------------------
  325|  25.3k|  if (!done) *val = 0;  // erase partial result
  ------------------
  |  Branch (325:7): [True: 80, False: 25.2k]
  ------------------
  326|  25.3k|  if (done && std::isnan(*val)) {
  ------------------
  |  Branch (326:7): [True: 25.2k, False: 80]
  |  Branch (326:15): [True: 202, False: 25.0k]
  ------------------
  327|    202|    *val = std::numeric_limits<T>::quiet_NaN();
  328|    202|  }
  329|  25.3k|  return done;
  330|  25.3k|}
_ZN11flatbuffers17StringToFloatImplIdEEbPT_PKc:
  319|   103k|inline bool StringToFloatImpl(T* val, const char* const str) {
  320|       |  // Type T must be either float or double.
  321|   103k|  FLATBUFFERS_ASSERT(str && val);
  322|   103k|  auto end = str;
  323|   103k|  strtoval_impl(val, str, const_cast<char**>(&end));
  324|   103k|  auto done = (end != str) && (*end == '\0');
  ------------------
  |  Branch (324:15): [True: 102k, False: 626]
  |  Branch (324:31): [True: 102k, False: 253]
  ------------------
  325|   103k|  if (!done) *val = 0;  // erase partial result
  ------------------
  |  Branch (325:7): [True: 879, False: 102k]
  ------------------
  326|   103k|  if (done && std::isnan(*val)) {
  ------------------
  |  Branch (326:7): [True: 102k, False: 879]
  |  Branch (326:15): [True: 941, False: 101k]
  ------------------
  327|    941|    *val = std::numeric_limits<T>::quiet_NaN();
  328|    941|  }
  329|   103k|  return done;
  330|   103k|}
_ZN11flatbuffers11NumToStringIlEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  131|  50.0k|std::string NumToString(T t) {
  132|       |  // clang-format off
  133|       |
  134|  50.0k|  #ifndef FLATBUFFERS_PREFER_PRINTF
  135|  50.0k|    std::stringstream ss;
  136|  50.0k|    ss << t;
  137|  50.0k|    return ss.str();
  138|       |  #else // FLATBUFFERS_PREFER_PRINTF
  139|       |    auto v = static_cast<long long>(t);
  140|       |    return NumToStringImplWrapper(v, "%.*lld");
  141|       |  #endif // FLATBUFFERS_PREFER_PRINTF
  142|       |  // clang-format on
  143|  50.0k|}
_ZN11flatbuffers11NumToStringImEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  131|  1.95k|std::string NumToString(T t) {
  132|       |  // clang-format off
  133|       |
  134|  1.95k|  #ifndef FLATBUFFERS_PREFER_PRINTF
  135|  1.95k|    std::stringstream ss;
  136|  1.95k|    ss << t;
  137|  1.95k|    return ss.str();
  138|       |  #else // FLATBUFFERS_PREFER_PRINTF
  139|       |    auto v = static_cast<long long>(t);
  140|       |    return NumToStringImplWrapper(v, "%.*lld");
  141|       |  #endif // FLATBUFFERS_PREFER_PRINTF
  142|       |  // clang-format on
  143|  1.95k|}
_ZN11flatbuffers14StringToNumberIhEEbPKcPT_:
  339|  57.6k|inline bool StringToNumber(const char* s, T* val) {
  340|       |  // Assert on `unsigned long` and `signed long` on LP64.
  341|       |  // If it is necessary, it could be solved with flatbuffers::enable_if<B,T>.
  342|  57.6k|  static_assert(sizeof(T) < sizeof(int64_t), "unexpected type T");
  343|  57.6k|  FLATBUFFERS_ASSERT(s && val);
  344|  57.6k|  int64_t i64;
  345|       |  // The errno check isn't needed, will return MAX/MIN on overflow.
  346|  57.6k|  if (StringToIntegerImpl(&i64, s, 0, false)) {
  ------------------
  |  Branch (346:7): [True: 57.5k, False: 76]
  ------------------
  347|  57.5k|    const int64_t max = (flatbuffers::numeric_limits<T>::max)();
  348|  57.5k|    const int64_t min = flatbuffers::numeric_limits<T>::lowest();
  349|  57.5k|    if (i64 > max) {
  ------------------
  |  Branch (349:9): [True: 75, False: 57.5k]
  ------------------
  350|     75|      *val = static_cast<T>(max);
  351|     75|      return false;
  352|     75|    }
  353|  57.5k|    if (i64 < min) {
  ------------------
  |  Branch (353:9): [True: 175, False: 57.3k]
  ------------------
  354|       |      // For unsigned types return max to distinguish from
  355|       |      // "no conversion can be performed" when 0 is returned.
  356|    175|      *val = static_cast<T>(flatbuffers::is_unsigned<T>::value ? max : min);
  ------------------
  |  Branch (356:29): [True: 175, Folded]
  ------------------
  357|    175|      return false;
  358|    175|    }
  359|  57.3k|    *val = static_cast<T>(i64);
  360|  57.3k|    return true;
  361|  57.5k|  }
  362|     76|  *val = 0;
  363|     76|  return false;
  364|  57.6k|}
_ZN11flatbuffers14StringToNumberItEEbPKcPT_:
  339|  14.7k|inline bool StringToNumber(const char* s, T* val) {
  340|       |  // Assert on `unsigned long` and `signed long` on LP64.
  341|       |  // If it is necessary, it could be solved with flatbuffers::enable_if<B,T>.
  342|  14.7k|  static_assert(sizeof(T) < sizeof(int64_t), "unexpected type T");
  343|  14.7k|  FLATBUFFERS_ASSERT(s && val);
  344|  14.7k|  int64_t i64;
  345|       |  // The errno check isn't needed, will return MAX/MIN on overflow.
  346|  14.7k|  if (StringToIntegerImpl(&i64, s, 0, false)) {
  ------------------
  |  Branch (346:7): [True: 14.7k, False: 39]
  ------------------
  347|  14.7k|    const int64_t max = (flatbuffers::numeric_limits<T>::max)();
  348|  14.7k|    const int64_t min = flatbuffers::numeric_limits<T>::lowest();
  349|  14.7k|    if (i64 > max) {
  ------------------
  |  Branch (349:9): [True: 45, False: 14.7k]
  ------------------
  350|     45|      *val = static_cast<T>(max);
  351|     45|      return false;
  352|     45|    }
  353|  14.7k|    if (i64 < min) {
  ------------------
  |  Branch (353:9): [True: 155, False: 14.5k]
  ------------------
  354|       |      // For unsigned types return max to distinguish from
  355|       |      // "no conversion can be performed" when 0 is returned.
  356|    155|      *val = static_cast<T>(flatbuffers::is_unsigned<T>::value ? max : min);
  ------------------
  |  Branch (356:29): [True: 155, Folded]
  ------------------
  357|    155|      return false;
  358|    155|    }
  359|  14.5k|    *val = static_cast<T>(i64);
  360|  14.5k|    return true;
  361|  14.7k|  }
  362|     39|  *val = 0;
  363|     39|  return false;
  364|  14.7k|}
_ZN11flatbuffers11NumToStringIjEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  131|   182k|std::string NumToString(T t) {
  132|       |  // clang-format off
  133|       |
  134|   182k|  #ifndef FLATBUFFERS_PREFER_PRINTF
  135|   182k|    std::stringstream ss;
  136|   182k|    ss << t;
  137|   182k|    return ss.str();
  138|       |  #else // FLATBUFFERS_PREFER_PRINTF
  139|       |    auto v = static_cast<long long>(t);
  140|       |    return NumToStringImplWrapper(v, "%.*lld");
  141|       |  #endif // FLATBUFFERS_PREFER_PRINTF
  142|       |  // clang-format on
  143|   182k|}
_ZN11flatbuffers14StringToNumberIjEEbPKcPT_:
  339|  18.7k|inline bool StringToNumber(const char* s, T* val) {
  340|       |  // Assert on `unsigned long` and `signed long` on LP64.
  341|       |  // If it is necessary, it could be solved with flatbuffers::enable_if<B,T>.
  342|  18.7k|  static_assert(sizeof(T) < sizeof(int64_t), "unexpected type T");
  343|  18.7k|  FLATBUFFERS_ASSERT(s && val);
  344|  18.7k|  int64_t i64;
  345|       |  // The errno check isn't needed, will return MAX/MIN on overflow.
  346|  18.7k|  if (StringToIntegerImpl(&i64, s, 0, false)) {
  ------------------
  |  Branch (346:7): [True: 18.6k, False: 37]
  ------------------
  347|  18.6k|    const int64_t max = (flatbuffers::numeric_limits<T>::max)();
  348|  18.6k|    const int64_t min = flatbuffers::numeric_limits<T>::lowest();
  349|  18.6k|    if (i64 > max) {
  ------------------
  |  Branch (349:9): [True: 27, False: 18.6k]
  ------------------
  350|     27|      *val = static_cast<T>(max);
  351|     27|      return false;
  352|     27|    }
  353|  18.6k|    if (i64 < min) {
  ------------------
  |  Branch (353:9): [True: 77, False: 18.5k]
  ------------------
  354|       |      // For unsigned types return max to distinguish from
  355|       |      // "no conversion can be performed" when 0 is returned.
  356|     77|      *val = static_cast<T>(flatbuffers::is_unsigned<T>::value ? max : min);
  ------------------
  |  Branch (356:29): [True: 77, Folded]
  ------------------
  357|     77|      return false;
  358|     77|    }
  359|  18.5k|    *val = static_cast<T>(i64);
  360|  18.5k|    return true;
  361|  18.6k|  }
  362|     37|  *val = 0;
  363|     37|  return false;
  364|  18.7k|}
_ZN11flatbuffers14StringToNumberIaEEbPKcPT_:
  339|  20.7k|inline bool StringToNumber(const char* s, T* val) {
  340|       |  // Assert on `unsigned long` and `signed long` on LP64.
  341|       |  // If it is necessary, it could be solved with flatbuffers::enable_if<B,T>.
  342|  20.7k|  static_assert(sizeof(T) < sizeof(int64_t), "unexpected type T");
  343|  20.7k|  FLATBUFFERS_ASSERT(s && val);
  344|  20.7k|  int64_t i64;
  345|       |  // The errno check isn't needed, will return MAX/MIN on overflow.
  346|  20.7k|  if (StringToIntegerImpl(&i64, s, 0, false)) {
  ------------------
  |  Branch (346:7): [True: 20.6k, False: 30]
  ------------------
  347|  20.6k|    const int64_t max = (flatbuffers::numeric_limits<T>::max)();
  348|  20.6k|    const int64_t min = flatbuffers::numeric_limits<T>::lowest();
  349|  20.6k|    if (i64 > max) {
  ------------------
  |  Branch (349:9): [True: 42, False: 20.6k]
  ------------------
  350|     42|      *val = static_cast<T>(max);
  351|     42|      return false;
  352|     42|    }
  353|  20.6k|    if (i64 < min) {
  ------------------
  |  Branch (353:9): [True: 76, False: 20.5k]
  ------------------
  354|       |      // For unsigned types return max to distinguish from
  355|       |      // "no conversion can be performed" when 0 is returned.
  356|     76|      *val = static_cast<T>(flatbuffers::is_unsigned<T>::value ? max : min);
  ------------------
  |  Branch (356:29): [Folded, False: 76]
  ------------------
  357|     76|      return false;
  358|     76|    }
  359|  20.5k|    *val = static_cast<T>(i64);
  360|  20.5k|    return true;
  361|  20.6k|  }
  362|     30|  *val = 0;
  363|     30|  return false;
  364|  20.7k|}
_ZN11flatbuffers14StringToNumberIsEEbPKcPT_:
  339|  17.3k|inline bool StringToNumber(const char* s, T* val) {
  340|       |  // Assert on `unsigned long` and `signed long` on LP64.
  341|       |  // If it is necessary, it could be solved with flatbuffers::enable_if<B,T>.
  342|  17.3k|  static_assert(sizeof(T) < sizeof(int64_t), "unexpected type T");
  343|  17.3k|  FLATBUFFERS_ASSERT(s && val);
  344|  17.3k|  int64_t i64;
  345|       |  // The errno check isn't needed, will return MAX/MIN on overflow.
  346|  17.3k|  if (StringToIntegerImpl(&i64, s, 0, false)) {
  ------------------
  |  Branch (346:7): [True: 17.3k, False: 32]
  ------------------
  347|  17.3k|    const int64_t max = (flatbuffers::numeric_limits<T>::max)();
  348|  17.3k|    const int64_t min = flatbuffers::numeric_limits<T>::lowest();
  349|  17.3k|    if (i64 > max) {
  ------------------
  |  Branch (349:9): [True: 32, False: 17.2k]
  ------------------
  350|     32|      *val = static_cast<T>(max);
  351|     32|      return false;
  352|     32|    }
  353|  17.2k|    if (i64 < min) {
  ------------------
  |  Branch (353:9): [True: 68, False: 17.2k]
  ------------------
  354|       |      // For unsigned types return max to distinguish from
  355|       |      // "no conversion can be performed" when 0 is returned.
  356|     68|      *val = static_cast<T>(flatbuffers::is_unsigned<T>::value ? max : min);
  ------------------
  |  Branch (356:29): [Folded, False: 68]
  ------------------
  357|     68|      return false;
  358|     68|    }
  359|  17.2k|    *val = static_cast<T>(i64);
  360|  17.2k|    return true;
  361|  17.2k|  }
  362|     32|  *val = 0;
  363|     32|  return false;
  364|  17.3k|}
_ZN11flatbuffers14StringToNumberIiEEbPKcPT_:
  339|  37.9k|inline bool StringToNumber(const char* s, T* val) {
  340|       |  // Assert on `unsigned long` and `signed long` on LP64.
  341|       |  // If it is necessary, it could be solved with flatbuffers::enable_if<B,T>.
  342|  37.9k|  static_assert(sizeof(T) < sizeof(int64_t), "unexpected type T");
  343|  37.9k|  FLATBUFFERS_ASSERT(s && val);
  344|  37.9k|  int64_t i64;
  345|       |  // The errno check isn't needed, will return MAX/MIN on overflow.
  346|  37.9k|  if (StringToIntegerImpl(&i64, s, 0, false)) {
  ------------------
  |  Branch (346:7): [True: 37.8k, False: 43]
  ------------------
  347|  37.8k|    const int64_t max = (flatbuffers::numeric_limits<T>::max)();
  348|  37.8k|    const int64_t min = flatbuffers::numeric_limits<T>::lowest();
  349|  37.8k|    if (i64 > max) {
  ------------------
  |  Branch (349:9): [True: 17, False: 37.8k]
  ------------------
  350|     17|      *val = static_cast<T>(max);
  351|     17|      return false;
  352|     17|    }
  353|  37.8k|    if (i64 < min) {
  ------------------
  |  Branch (353:9): [True: 55, False: 37.8k]
  ------------------
  354|       |      // For unsigned types return max to distinguish from
  355|       |      // "no conversion can be performed" when 0 is returned.
  356|     55|      *val = static_cast<T>(flatbuffers::is_unsigned<T>::value ? max : min);
  ------------------
  |  Branch (356:29): [Folded, False: 55]
  ------------------
  357|     55|      return false;
  358|     55|    }
  359|  37.8k|    *val = static_cast<T>(i64);
  360|  37.8k|    return true;
  361|  37.8k|  }
  362|     43|  *val = 0;
  363|     43|  return false;
  364|  37.9k|}
_ZN11flatbuffers11NumToStringIsEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  131|    579|std::string NumToString(T t) {
  132|       |  // clang-format off
  133|       |
  134|    579|  #ifndef FLATBUFFERS_PREFER_PRINTF
  135|    579|    std::stringstream ss;
  136|    579|    ss << t;
  137|    579|    return ss.str();
  138|       |  #else // FLATBUFFERS_PREFER_PRINTF
  139|       |    auto v = static_cast<long long>(t);
  140|       |    return NumToStringImplWrapper(v, "%.*lld");
  141|       |  #endif // FLATBUFFERS_PREFER_PRINTF
  142|       |  // clang-format on
  143|    579|}
_ZN11flatbuffers11NumToStringItEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  131|    847|std::string NumToString(T t) {
  132|       |  // clang-format off
  133|       |
  134|    847|  #ifndef FLATBUFFERS_PREFER_PRINTF
  135|    847|    std::stringstream ss;
  136|    847|    ss << t;
  137|    847|    return ss.str();
  138|       |  #else // FLATBUFFERS_PREFER_PRINTF
  139|       |    auto v = static_cast<long long>(t);
  140|       |    return NumToStringImplWrapper(v, "%.*lld");
  141|       |  #endif // FLATBUFFERS_PREFER_PRINTF
  142|       |  // clang-format on
  143|    847|}

_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection6ObjectEEEjE4sizeEv:
  178|   115k|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection6ObjectEEEjE3GetEj:
  194|  55.2k|  return_type Get(SizeT i) const {
  195|  55.2k|    FLATBUFFERS_ASSERT(i < size());
  196|  55.2k|    return IndirectHelper<T>::Read(Data(), i);
  197|  55.2k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection6ObjectEEEjE4DataEv:
  274|  55.2k|  const uint8_t* Data() const {
  275|  55.2k|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|  55.2k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection5FieldEEEjE4sizeEv:
  178|   140k|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection5FieldEEEjE3GetEj:
  194|  40.8k|  return_type Get(SizeT i) const {
  195|  40.8k|    FLATBUFFERS_ASSERT(i < size());
  196|  40.8k|    return IndirectHelper<T>::Read(Data(), i);
  197|  40.8k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection5FieldEEEjE4DataEv:
  274|  40.8k|  const uint8_t* Data() const {
  275|  40.8k|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|  40.8k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection8KeyValueEEEjE4sizeEv:
  178|  2.11k|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection8KeyValueEEEjE3GetEj:
  194|    704|  return_type Get(SizeT i) const {
  195|    704|    FLATBUFFERS_ASSERT(i < size());
  196|    704|    return IndirectHelper<T>::Read(Data(), i);
  197|    704|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection8KeyValueEEEjE4DataEv:
  274|    704|  const uint8_t* Data() const {
  275|    704|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|    704|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection4EnumEEEjE4sizeEv:
  178|   163k|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection4EnumEEEjE3GetEj:
  194|  79.0k|  return_type Get(SizeT i) const {
  195|  79.0k|    FLATBUFFERS_ASSERT(i < size());
  196|  79.0k|    return IndirectHelper<T>::Read(Data(), i);
  197|  79.0k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection4EnumEEEjE4DataEv:
  274|  79.0k|  const uint8_t* Data() const {
  275|  79.0k|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|  79.0k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7EnumValEEEjE4sizeEv:
  178|   309k|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7EnumValEEEjE3GetEj:
  194|   115k|  return_type Get(SizeT i) const {
  195|   115k|    FLATBUFFERS_ASSERT(i < size());
  196|   115k|    return IndirectHelper<T>::Read(Data(), i);
  197|   115k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7EnumValEEEjE4DataEv:
  274|   115k|  const uint8_t* Data() const {
  275|   115k|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|   115k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7ServiceEEEjE4sizeEv:
  178|  6.58k|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7ServiceEEEjE3GetEj:
  194|    743|  return_type Get(SizeT i) const {
  195|    743|    FLATBUFFERS_ASSERT(i < size());
  196|    743|    return IndirectHelper<T>::Read(Data(), i);
  197|    743|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7ServiceEEEjE4DataEv:
  274|    743|  const uint8_t* Data() const {
  275|    743|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|    743|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7RPCCallEEEjE4sizeEv:
  178|  3.70k|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7RPCCallEEEjE3GetEj:
  194|  1.48k|  return_type Get(SizeT i) const {
  195|  1.48k|    FLATBUFFERS_ASSERT(i < size());
  196|  1.48k|    return IndirectHelper<T>::Read(Data(), i);
  197|  1.48k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7RPCCallEEEjE4DataEv:
  274|  1.48k|  const uint8_t* Data() const {
  275|  1.48k|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|  1.48k|  }
_ZNK11flatbuffers11VectorOfAny4sizeEv:
  417|     43|  uoffset_t size() const { return EndianScalar(length_); }
_ZN11flatbuffers11VectorOfAny4DataEv:
  422|     86|  uint8_t* Data() { return reinterpret_cast<uint8_t*>(&length_ + 1); }
_ZNK11flatbuffers6VectorIcjE4DataEv:
  274|  4.83M|  const uint8_t* Data() const {
  275|  4.83M|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|  4.83M|  }
_ZNK11flatbuffers6VectorIcjE4sizeEv:
  178|  4.83M|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorIcjE4dataEv:
  281|  4.83M|  const T* data() const { return reinterpret_cast<const T*>(Data()); }
_ZNK11flatbuffers6VectorIhjE4sizeEv:
  178|    282|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorIhjE3GetEj:
  194|    139|  return_type Get(SizeT i) const {
  195|    139|    FLATBUFFERS_ASSERT(i < size());
  196|    139|    return IndirectHelper<T>::Read(Data(), i);
  197|    139|  }
_ZNK11flatbuffers6VectorIhjE4DataEv:
  274|    139|  const uint8_t* Data() const {
  275|    139|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|    139|  }
_ZN11flatbuffers6VectorINS_6OffsetINS_5TableEEEjE4dataEv:
  282|  4.69k|  T* data() { return reinterpret_cast<T*>(Data()); }
_ZN11flatbuffers6VectorINS_6OffsetINS_5TableEEEjE4DataEv:
  278|  4.69k|  uint8_t* Data() { return reinterpret_cast<uint8_t*>(&length_ + 1); }
_ZNK11flatbuffers6VectorINS_6OffsetINS_5TableEEEjE4sizeEv:
  178|  2.34k|  SizeT size() const { return EndianScalar(length_); }

_ZN11flatbuffers15vector_downwardIjEC2EmPNS_9AllocatorEbmj:
   41|  33.9k|      : allocator_(allocator),
   42|  33.9k|        own_allocator_(own_allocator),
   43|  33.9k|        initial_size_(initial_size),
   44|  33.9k|        max_size_(max_size),
   45|  33.9k|        buffer_minalign_(buffer_minalign),
   46|  33.9k|        reserved_(0),
   47|  33.9k|        size_(0),
   48|  33.9k|        buf_(nullptr),
   49|  33.9k|        cur_(nullptr),
   50|  33.9k|        scratch_(nullptr) {}
_ZN11flatbuffers15vector_downwardIjED2Ev:
   81|  33.9k|  ~vector_downward() {
   82|  33.9k|    clear_buffer();
   83|  33.9k|    clear_allocator();
   84|  33.9k|  }
_ZN11flatbuffers15vector_downwardIjE12clear_bufferEv:
  112|  33.9k|  void clear_buffer() {
  113|  33.9k|    if (buf_) Deallocate(allocator_, buf_, reserved_);
  ------------------
  |  Branch (113:9): [True: 15.8k, False: 18.0k]
  ------------------
  114|  33.9k|    buf_ = nullptr;
  115|  33.9k|  }
_ZN11flatbuffers15vector_downwardIjE15clear_allocatorEv:
  104|  33.9k|  void clear_allocator() {
  105|  33.9k|    if (own_allocator_ && allocator_) {
  ------------------
  |  Branch (105:9): [True: 0, False: 33.9k]
  |  Branch (105:27): [True: 0, False: 0]
  ------------------
  106|      0|      delete allocator_;
  107|      0|    }
  108|  33.9k|    allocator_ = nullptr;
  109|  33.9k|    own_allocator_ = false;
  110|  33.9k|  }
_ZNK11flatbuffers15vector_downwardIjE4dataEv:
  183|  5.78M|  uint8_t* data() const {
  184|  5.78M|    FLATBUFFERS_ASSERT(cur_);
  185|  5.78M|    return cur_;
  186|  5.78M|  }
_ZNK11flatbuffers15vector_downwardIjE4sizeEv:
  171|  21.6M|  inline SizeT size() const { return size_; }
_ZN11flatbuffers15vector_downwardIjE18scratch_push_smallINS_21FlatBufferBuilderImplILb0EE8FieldLocEEEvRKT_:
  214|  1.89M|  void scratch_push_small(const T& t) {
  215|  1.89M|    ensure_space(sizeof(T));
  216|  1.89M|    *reinterpret_cast<T*>(scratch_) = t;
  217|  1.89M|    scratch_ += sizeof(T);
  218|  1.89M|  }
_ZN11flatbuffers15vector_downwardIjE12ensure_spaceEm:
  144|  7.72M|  size_t ensure_space(size_t len) {
  145|  7.72M|    FLATBUFFERS_ASSERT(cur_ >= scratch_ && scratch_ >= buf_);
  146|       |    // If the length is larger than the unused part of the buffer, we need to
  147|       |    // grow.
  148|  7.72M|    if (len > unused_buffer_size()) {
  ------------------
  |  Branch (148:9): [True: 28.2k, False: 7.69M]
  ------------------
  149|  28.2k|      reallocate(len);
  150|  28.2k|    }
  151|  7.72M|    FLATBUFFERS_ASSERT(size() < max_size_);
  152|  7.72M|    return len;
  153|  7.72M|  }
_ZNK11flatbuffers15vector_downwardIjE18unused_buffer_sizeEv:
  174|  7.72M|  SizeT unused_buffer_size() const {
  175|  7.72M|    return static_cast<SizeT>(cur_ - scratch_);
  176|  7.72M|  }
_ZN11flatbuffers15vector_downwardIjE10reallocateEm:
  278|  28.2k|  void reallocate(size_t len) {
  279|  28.2k|    auto old_reserved = reserved_;
  280|  28.2k|    auto old_size = size();
  281|  28.2k|    auto old_scratch_size = scratch_size();
  282|  28.2k|    reserved_ +=
  283|  28.2k|        (std::max)(len, old_reserved ? old_reserved / 2 : initial_size_);
  ------------------
  |  Branch (283:25): [True: 12.3k, False: 15.8k]
  ------------------
  284|  28.2k|    reserved_ = (reserved_ + buffer_minalign_ - 1) & ~(buffer_minalign_ - 1);
  285|  28.2k|    if (buf_) {
  ------------------
  |  Branch (285:9): [True: 12.3k, False: 15.8k]
  ------------------
  286|  12.3k|      buf_ = ReallocateDownward(allocator_, buf_, old_reserved, reserved_,
  287|  12.3k|                                old_size, old_scratch_size);
  288|  15.8k|    } else {
  289|  15.8k|      buf_ = Allocate(allocator_, reserved_);
  290|  15.8k|    }
  291|  28.2k|    cur_ = buf_ + reserved_ - old_size;
  292|  28.2k|    scratch_ = buf_ + old_scratch_size;
  293|  28.2k|  }
_ZNK11flatbuffers15vector_downwardIjE12scratch_sizeEv:
  179|  28.2k|  SizeT scratch_size() const { return static_cast<SizeT>(scratch_ - buf_); }
_ZN11flatbuffers15vector_downwardIjE4fillEm:
  222|  6.23M|  void fill(size_t zero_pad_bytes) {
  223|  6.23M|    make_space(zero_pad_bytes);
  224|  9.24M|    for (size_t i = 0; i < zero_pad_bytes; i++) cur_[i] = 0;
  ------------------
  |  Branch (224:24): [True: 3.00M, False: 6.23M]
  ------------------
  225|  6.23M|  }
_ZN11flatbuffers15vector_downwardIjE10make_spaceEm:
  155|  10.8M|  inline uint8_t* make_space(size_t len) {
  156|  10.8M|    if (len) {
  ------------------
  |  Branch (156:9): [True: 5.79M, False: 5.05M]
  ------------------
  157|  5.79M|      ensure_space(len);
  158|  5.79M|      cur_ -= len;
  159|  5.79M|      size_ += static_cast<SizeT>(len);
  160|  5.79M|    }
  161|  10.8M|    return cur_;
  162|  10.8M|  }
_ZN11flatbuffers15vector_downwardIjE10push_smallIaEEvRKT_:
  208|   135k|  void push_small(const T& little_endian_t) {
  209|   135k|    make_space(sizeof(T));
  210|   135k|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|   135k|  }
_ZN11flatbuffers15vector_downwardIjE10push_smallIiEEvRKT_:
  208|   856k|  void push_small(const T& little_endian_t) {
  209|   856k|    make_space(sizeof(T));
  210|   856k|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|   856k|  }
_ZN11flatbuffers15vector_downwardIjE10push_smallItEEvRKT_:
  208|  68.1k|  void push_small(const T& little_endian_t) {
  209|  68.1k|    make_space(sizeof(T));
  210|  68.1k|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|  68.1k|  }
_ZN11flatbuffers15vector_downwardIjE10push_smallIjEEvRKT_:
  208|  2.30M|  void push_small(const T& little_endian_t) {
  209|  2.30M|    make_space(sizeof(T));
  210|  2.30M|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|  2.30M|  }
_ZN11flatbuffers15vector_downwardIjE8fill_bigEm:
  229|   662k|  void fill_big(size_t zero_pad_bytes) {
  230|   662k|    memset(make_space(zero_pad_bytes), 0, zero_pad_bytes);
  231|   662k|  }
_ZNK11flatbuffers15vector_downwardIjE11scratch_endEv:
  193|  5.09M|  uint8_t* scratch_end() const {
  194|  5.09M|    FLATBUFFERS_ASSERT(scratch_);
  195|  5.09M|    return scratch_;
  196|  5.09M|  }
_ZN11flatbuffers15vector_downwardIjE11scratch_popEm:
  238|   766k|  void scratch_pop(size_t bytes_to_remove) { scratch_ -= bytes_to_remove; }
_ZNK11flatbuffers15vector_downwardIjE12scratch_dataEv:
  188|   662k|  uint8_t* scratch_data() const {
  189|   662k|    FLATBUFFERS_ASSERT(buf_);
  190|   662k|    return buf_;
  191|   662k|  }
_ZNK11flatbuffers15vector_downwardIjE7data_atEm:
  198|  7.89M|  uint8_t* data_at(size_t offset) const { return buf_ + reserved_ - offset; }
_ZN11flatbuffers15vector_downwardIjE3popEm:
  233|   789k|  void pop(size_t bytes_to_remove) {
  234|   789k|    cur_ += bytes_to_remove;
  235|   789k|    size_ -= static_cast<SizeT>(bytes_to_remove);
  236|   789k|  }
_ZN11flatbuffers15vector_downwardIjE18scratch_push_smallIjEEvRKT_:
  214|  35.9k|  void scratch_push_small(const T& t) {
  215|  35.9k|    ensure_space(sizeof(T));
  216|  35.9k|    *reinterpret_cast<T*>(scratch_) = t;
  217|  35.9k|    scratch_ += sizeof(T);
  218|  35.9k|  }
_ZN11flatbuffers15vector_downwardIjE4pushEPKhm:
  200|   478k|  void push(const uint8_t* bytes, size_t num) {
  201|   478k|    if (num > 0) {
  ------------------
  |  Branch (201:9): [True: 331k, False: 146k]
  ------------------
  202|   331k|      memcpy(make_space(num), bytes, num);
  203|   331k|    }
  204|   478k|  }
_ZN11flatbuffers15vector_downwardIjE10push_smallIlEEvRKT_:
  208|  54.5k|  void push_small(const T& little_endian_t) {
  209|  54.5k|    make_space(sizeof(T));
  210|  54.5k|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|  54.5k|  }
_ZN11flatbuffers15vector_downwardIjE10push_smallIhEEvRKT_:
  208|   136k|  void push_small(const T& little_endian_t) {
  209|   136k|    make_space(sizeof(T));
  210|   136k|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|   136k|  }
_ZN11flatbuffers15vector_downwardIjE10push_smallIdEEvRKT_:
  208|  15.0k|  void push_small(const T& little_endian_t) {
  209|  15.0k|    make_space(sizeof(T));
  210|  15.0k|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|  15.0k|  }
_ZN11flatbuffers15vector_downwardIjE10push_smallImEEvRKT_:
  208|  31.1k|  void push_small(const T& little_endian_t) {
  209|  31.1k|    make_space(sizeof(T));
  210|  31.1k|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|  31.1k|  }
_ZN11flatbuffers15vector_downwardIjE13clear_scratchEv:
  102|  38.1k|  void clear_scratch() { scratch_ = buf_; }
_ZN11flatbuffers15vector_downwardIjE10push_smallIsEEvRKT_:
  208|  6.20k|  void push_small(const T& little_endian_t) {
  209|  6.20k|    make_space(sizeof(T));
  210|  6.20k|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|  6.20k|  }
_ZN11flatbuffers15vector_downwardIjE10push_smallIfEEvRKT_:
  208|  10.8k|  void push_small(const T& little_endian_t) {
  209|  10.8k|    make_space(sizeof(T));
  210|  10.8k|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|  10.8k|  }
_ZN11flatbuffers15vector_downwardIjE5clearEv:
   91|  32.7k|  void clear() {
   92|  32.7k|    if (buf_) {
  ------------------
  |  Branch (92:9): [True: 204, False: 32.5k]
  ------------------
   93|    204|      cur_ = buf_ + reserved_;
   94|  32.5k|    } else {
   95|  32.5k|      reserved_ = 0;
   96|  32.5k|      cur_ = nullptr;
   97|  32.5k|    }
   98|  32.7k|    size_ = 0;
   99|  32.7k|    clear_scratch();
  100|  32.7k|  }

_ZN11flatbuffers16VerifierTemplateILb0EEC2EPKhmjjb:
   55|  5.09k|      : VerifierTemplate(buf, buf_len, [&] {
   56|  5.09k|          Options opts;
   57|  5.09k|          opts.max_depth = max_depth;
   58|  5.09k|          opts.max_tables = max_tables;
   59|  5.09k|          opts.check_alignment = check_alignment;
   60|  5.09k|          return opts;
   61|  5.09k|        }()) {}
_ZZN11flatbuffers16VerifierTemplateILb0EEC1EPKhmjjbENKUlvE_clEv:
   55|  5.09k|      : VerifierTemplate(buf, buf_len, [&] {
   56|  5.09k|          Options opts;
   57|  5.09k|          opts.max_depth = max_depth;
   58|  5.09k|          opts.max_tables = max_tables;
   59|  5.09k|          opts.check_alignment = check_alignment;
   60|  5.09k|          return opts;
   61|  5.09k|        }()) {}
_ZN11flatbuffers16VerifierTemplateILb0EEC2EPKhmRKNS1_7OptionsE:
   46|  5.09k|      : buf_(buf), size_(buf_len), opts_(opts) {
   47|  5.09k|    FLATBUFFERS_ASSERT(size_ < opts.max_size);
   48|  5.09k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE12VerifyBufferIN10reflection6SchemaEEEbPKc:
  251|  5.09k|  bool VerifyBuffer(const char* const identifier) {
  252|  5.09k|    return VerifyBufferFromStart<T>(identifier, 0);
  253|  5.09k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE21VerifyBufferFromStartIN10reflection6SchemaEEEbPKcm:
  203|  5.09k|  bool VerifyBufferFromStart(const char* const identifier, const size_t start) {
  204|       |    // Buffers have to be of some size to be valid. The reason it is a runtime
  205|       |    // check instead of static_assert, is that nested flatbuffers go through
  206|       |    // this call and their size is determined at runtime.
  207|  5.09k|    if (!Check(size_ >= FLATBUFFERS_MIN_BUFFER_SIZE)) return false;
  ------------------
  |  |  349|  5.09k|#define FLATBUFFERS_MIN_BUFFER_SIZE sizeof(::flatbuffers::uoffset_t) + \
  |  |  350|  5.09k|  sizeof(::flatbuffers::soffset_t) + sizeof(uint16_t) + sizeof(uint16_t)
  ------------------
  |  Branch (207:9): [True: 0, False: 5.09k]
  ------------------
  208|       |
  209|       |    // If an identifier is provided, check that we have a buffer
  210|  5.09k|    if (identifier && !Check((size_ >= 2 * sizeof(flatbuffers::uoffset_t) &&
  ------------------
  |  Branch (210:9): [True: 5.09k, False: 0]
  |  Branch (210:23): [True: 0, False: 5.09k]
  |  Branch (210:31): [True: 5.09k, False: 0]
  ------------------
  211|  5.09k|                              BufferHasIdentifier(buf_ + start, identifier)))) {
  ------------------
  |  Branch (211:31): [True: 5.09k, False: 0]
  ------------------
  212|      0|      return false;
  213|      0|    }
  214|       |
  215|       |    // Call T::Verify, which must be in the generated code for this type.
  216|  5.09k|    const auto o = VerifyOffset<uoffset_t>(start);
  217|  5.09k|    if (!Check(o != 0)) return false;
  ------------------
  |  Branch (217:9): [True: 0, False: 5.09k]
  ------------------
  218|  5.09k|    if (!(reinterpret_cast<const T*>(buf_ + start + o)->Verify(*this))) {
  ------------------
  |  Branch (218:9): [True: 0, False: 5.09k]
  ------------------
  219|      0|      return false;
  220|      0|    }
  221|  5.09k|    if (TrackVerifierBufferSize) {
  ------------------
  |  Branch (221:9): [Folded, False: 5.09k]
  ------------------
  222|      0|      if (GetComputedSize() == 0) return false;
  ------------------
  |  Branch (222:11): [True: 0, False: 0]
  ------------------
  223|      0|    }
  224|  5.09k|    return true;
  225|  5.09k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE5CheckEb:
   64|  14.3M|  bool Check(const bool ok) const {
   65|       |    // clang-format off
   66|       |    #ifdef FLATBUFFERS_DEBUG_VERIFICATION_FAILURE
   67|       |      if (opts_.assert) { FLATBUFFERS_ASSERT(ok); }
   68|       |    #endif
   69|       |    // clang-format on
   70|  14.3M|    if (TrackVerifierBufferSize) {
  ------------------
  |  Branch (70:9): [Folded, False: 14.3M]
  ------------------
   71|      0|      if (!ok) {
  ------------------
  |  Branch (71:11): [True: 0, False: 0]
  ------------------
   72|      0|        upper_bound_ = 0;
   73|      0|      }
   74|      0|    }
   75|  14.3M|    return ok;
   76|  14.3M|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyOffsetIjiEEmm:
  265|   843k|  size_t VerifyOffset(const size_t start) const {
  266|   843k|    if (!Verify<OffsetT>(start)) return 0;
  ------------------
  |  Branch (266:9): [True: 0, False: 843k]
  ------------------
  267|   843k|    const auto o = ReadScalar<OffsetT>(buf_ + start);
  268|       |    // May not point to itself.
  269|   843k|    if (!Check(o != 0)) return 0;
  ------------------
  |  Branch (269:9): [True: 0, False: 843k]
  ------------------
  270|       |    // Can't wrap around larger than the max size.
  271|   843k|    if (!Check(static_cast<SOffsetT>(o) >= 0)) return 0;
  ------------------
  |  Branch (271:9): [True: 0, False: 843k]
  ------------------
  272|       |    // Must be inside the buffer to create a pointer from it (pointer outside
  273|       |    // buffer is UB).
  274|   843k|    if (!Verify(start + o, 1)) return 0;
  ------------------
  |  Branch (274:9): [True: 0, False: 843k]
  ------------------
  275|   843k|    return o;
  276|   843k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE6VerifyIjEEbm:
   95|  1.44M|  bool Verify(const size_t elem) const {
   96|  1.44M|    return VerifyAlignment(elem, sizeof(T)) && Verify(elem, sizeof(T));
  ------------------
  |  Branch (96:12): [True: 1.44M, False: 0]
  |  Branch (96:48): [True: 1.44M, False: 0]
  ------------------
   97|  1.44M|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE15VerifyAlignmentEmm:
   89|  4.01M|  bool VerifyAlignment(const size_t elem, const size_t align) const {
   90|  4.01M|    return Check((elem & (align - 1)) == 0 || !opts_.check_alignment);
  ------------------
  |  Branch (90:18): [True: 4.01M, False: 0]
  |  Branch (90:47): [True: 0, False: 0]
  ------------------
   91|  4.01M|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE6VerifyEmm:
   79|  5.90M|  bool Verify(const size_t elem, const size_t elem_len) const {
   80|  5.90M|    if (TrackVerifierBufferSize) {
  ------------------
  |  Branch (80:9): [Folded, False: 5.90M]
  ------------------
   81|      0|      auto upper_bound = elem + elem_len;
   82|      0|      if (upper_bound_ < upper_bound) {
  ------------------
  |  Branch (82:11): [True: 0, False: 0]
  ------------------
   83|      0|        upper_bound_ = upper_bound;
   84|      0|      }
   85|      0|    }
   86|  5.90M|    return Check(elem_len < size_ && elem <= size_ - elem_len);
  ------------------
  |  Branch (86:18): [True: 5.90M, False: 0]
  |  Branch (86:38): [True: 5.89M, False: 5.09k]
  ------------------
   87|  5.90M|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyOffsetIjEEmPKht:
  279|   837k|  size_t VerifyOffset(const uint8_t* const base, const voffset_t start) const {
  280|   837k|    return VerifyOffset<OffsetT>(static_cast<size_t>(base - buf_) + start);
  281|   837k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection6ObjectEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|  5.09k|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|  5.09k|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 0, False: 5.09k]
  |  Branch (126:20): [True: 5.09k, False: 0]
  ------------------
  127|  5.09k|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|  5.09k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOrStringIjEEbPKhmPm:
  148|   599k|                            size_t* const end = nullptr) const {
  149|   599k|    const auto vec_offset = static_cast<size_t>(vec - buf_);
  150|       |    // Check we can read the size field.
  151|   599k|    if (!Verify<LenT>(vec_offset)) return false;
  ------------------
  |  Branch (151:9): [True: 0, False: 599k]
  ------------------
  152|       |    // Check the whole array. If this is a string, the byte past the array must
  153|       |    // be 0.
  154|   599k|    const LenT size = ReadScalar<LenT>(vec);
  155|   599k|    const auto max_elems = opts_.max_size / elem_size;
  156|   599k|    if (!Check(size < max_elems))
  ------------------
  |  Branch (156:9): [True: 0, False: 599k]
  ------------------
  157|      0|      return false;  // Protect against byte_size overflowing.
  158|   599k|    const auto byte_size = sizeof(LenT) + elem_size * size;
  159|   599k|    if (end) *end = vec_offset + byte_size;
  ------------------
  |  Branch (159:9): [True: 445k, False: 154k]
  ------------------
  160|   599k|    return Verify(vec_offset, byte_size);
  161|   599k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOfTablesIN10reflection6ObjectEEEbPKNS_6VectorINS_6OffsetIT_EEjEE:
  175|  5.09k|  bool VerifyVectorOfTables(const Vector<Offset<T>>* const vec) {
  176|  5.09k|    if (vec) {
  ------------------
  |  Branch (176:9): [True: 5.09k, False: 0]
  ------------------
  177|  60.3k|      for (uoffset_t i = 0; i < vec->size(); i++) {
  ------------------
  |  Branch (177:29): [True: 55.2k, False: 5.09k]
  ------------------
  178|  55.2k|        if (!vec->Get(i)->Verify(*this)) return false;
  ------------------
  |  Branch (178:13): [True: 0, False: 55.2k]
  ------------------
  179|  55.2k|      }
  180|  5.09k|    }
  181|  5.09k|    return true;
  182|  5.09k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection5FieldEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|  58.4k|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|  58.4k|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 0, False: 58.4k]
  |  Branch (126:20): [True: 58.4k, False: 0]
  ------------------
  127|  58.4k|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|  58.4k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOfTablesIN10reflection5FieldEEEbPKNS_6VectorINS_6OffsetIT_EEjEE:
  175|  58.4k|  bool VerifyVectorOfTables(const Vector<Offset<T>>* const vec) {
  176|  58.4k|    if (vec) {
  ------------------
  |  Branch (176:9): [True: 58.4k, False: 0]
  ------------------
  177|  99.2k|      for (uoffset_t i = 0; i < vec->size(); i++) {
  ------------------
  |  Branch (177:29): [True: 40.8k, False: 58.4k]
  ------------------
  178|  40.8k|        if (!vec->Get(i)->Verify(*this)) return false;
  ------------------
  |  Branch (178:13): [True: 0, False: 40.8k]
  ------------------
  179|  40.8k|      }
  180|  58.4k|    }
  181|  58.4k|    return true;
  182|  58.4k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE11VerifyTableIN10reflection4TypeEEEbPKT_:
  119|   234k|  bool VerifyTable(const T* const table) {
  120|   234k|    return !table || table->Verify(*this);
  ------------------
  |  Branch (120:12): [True: 0, False: 234k]
  |  Branch (120:22): [True: 234k, False: 0]
  ------------------
  121|   234k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE11VerifyFieldIaEEbPKhtm:
  112|   125k|                   const size_t align) const {
  113|   125k|    const auto f = static_cast<size_t>(base - buf_) + elem_off;
  114|   125k|    return VerifyAlignment(f, align) && Verify(f, sizeof(T));
  ------------------
  |  Branch (114:12): [True: 125k, False: 0]
  |  Branch (114:41): [True: 125k, False: 0]
  ------------------
  115|   125k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE11VerifyFieldIjEEbPKhtm:
  112|   440k|                   const size_t align) const {
  113|   440k|    const auto f = static_cast<size_t>(base - buf_) + elem_off;
  114|   440k|    return VerifyAlignment(f, align) && Verify(f, sizeof(T));
  ------------------
  |  Branch (114:12): [True: 440k, False: 0]
  |  Branch (114:41): [True: 440k, False: 0]
  ------------------
  115|   440k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE11VerifyFieldItEEbPKhtm:
  112|  67.3k|                   const size_t align) const {
  113|  67.3k|    const auto f = static_cast<size_t>(base - buf_) + elem_off;
  114|  67.3k|    return VerifyAlignment(f, align) && Verify(f, sizeof(T));
  ------------------
  |  Branch (114:12): [True: 67.3k, False: 0]
  |  Branch (114:41): [True: 67.3k, False: 0]
  ------------------
  115|  67.3k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE11VerifyFieldIlEEbPKhtm:
  112|  36.7k|                   const size_t align) const {
  113|  36.7k|    const auto f = static_cast<size_t>(base - buf_) + elem_off;
  114|  36.7k|    return VerifyAlignment(f, align) && Verify(f, sizeof(T));
  ------------------
  |  Branch (114:12): [True: 36.7k, False: 0]
  |  Branch (114:41): [True: 36.7k, False: 0]
  ------------------
  115|  36.7k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE11VerifyFieldIdEEbPKhtm:
  112|     91|                   const size_t align) const {
  113|     91|    const auto f = static_cast<size_t>(base - buf_) + elem_off;
  114|     91|    return VerifyAlignment(f, align) && Verify(f, sizeof(T));
  ------------------
  |  Branch (114:12): [True: 91, False: 0]
  |  Branch (114:41): [True: 91, False: 0]
  ------------------
  115|     91|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE11VerifyFieldIhEEbPKhtm:
  112|   104k|                   const size_t align) const {
  113|   104k|    const auto f = static_cast<size_t>(base - buf_) + elem_off;
  114|   104k|    return VerifyAlignment(f, align) && Verify(f, sizeof(T));
  ------------------
  |  Branch (114:12): [True: 104k, False: 0]
  |  Branch (114:41): [True: 104k, False: 0]
  ------------------
  115|   104k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE11VerifyFieldIiEEbPKhtm:
  112|   177k|                   const size_t align) const {
  113|   177k|    const auto f = static_cast<size_t>(base - buf_) + elem_off;
  114|   177k|    return VerifyAlignment(f, align) && Verify(f, sizeof(T));
  ------------------
  |  Branch (114:12): [True: 177k, False: 0]
  |  Branch (114:41): [True: 177k, False: 0]
  ------------------
  115|   177k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection8KeyValueEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|   295k|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|   295k|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 294k, False: 704]
  |  Branch (126:20): [True: 704, False: 0]
  ------------------
  127|    704|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|   295k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOfTablesIN10reflection8KeyValueEEEbPKNS_6VectorINS_6OffsetIT_EEjEE:
  175|   295k|  bool VerifyVectorOfTables(const Vector<Offset<T>>* const vec) {
  176|   295k|    if (vec) {
  ------------------
  |  Branch (176:9): [True: 704, False: 294k]
  ------------------
  177|  1.40k|      for (uoffset_t i = 0; i < vec->size(); i++) {
  ------------------
  |  Branch (177:29): [True: 704, False: 704]
  ------------------
  178|    704|        if (!vec->Get(i)->Verify(*this)) return false;
  ------------------
  |  Branch (178:13): [True: 0, False: 704]
  ------------------
  179|    704|      }
  180|    704|    }
  181|   295k|    return true;
  182|   295k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetINS_6StringEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|   295k|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|   295k|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 295k, False: 0]
  |  Branch (126:20): [True: 0, False: 0]
  ------------------
  127|      0|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|   295k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE21VerifyVectorOfStringsEPKNS_6VectorINS_6OffsetINS_6StringEEEjEE:
  164|   295k|  bool VerifyVectorOfStrings(const Vector<Offset<String>>* const vec) const {
  165|   295k|    if (vec) {
  ------------------
  |  Branch (165:9): [True: 0, False: 295k]
  ------------------
  166|      0|      for (uoffset_t i = 0; i < vec->size(); i++) {
  ------------------
  |  Branch (166:29): [True: 0, False: 0]
  ------------------
  167|      0|        if (!VerifyString(vec->Get(i))) return false;
  ------------------
  |  Branch (167:13): [True: 0, False: 0]
  ------------------
  168|      0|      }
  169|      0|    }
  170|   295k|    return true;
  171|   295k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection4EnumEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|  5.09k|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|  5.09k|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 0, False: 5.09k]
  |  Branch (126:20): [True: 5.09k, False: 0]
  ------------------
  127|  5.09k|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|  5.09k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOfTablesIN10reflection4EnumEEEbPKNS_6VectorINS_6OffsetIT_EEjEE:
  175|  5.09k|  bool VerifyVectorOfTables(const Vector<Offset<T>>* const vec) {
  176|  5.09k|    if (vec) {
  ------------------
  |  Branch (176:9): [True: 5.09k, False: 0]
  ------------------
  177|  84.1k|      for (uoffset_t i = 0; i < vec->size(); i++) {
  ------------------
  |  Branch (177:29): [True: 79.0k, False: 5.09k]
  ------------------
  178|  79.0k|        if (!vec->Get(i)->Verify(*this)) return false;
  ------------------
  |  Branch (178:13): [True: 0, False: 79.0k]
  ------------------
  179|  79.0k|      }
  180|  5.09k|    }
  181|  5.09k|    return true;
  182|  5.09k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection7EnumValEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|  79.0k|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|  79.0k|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 0, False: 79.0k]
  |  Branch (126:20): [True: 79.0k, False: 0]
  ------------------
  127|  79.0k|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|  79.0k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOfTablesIN10reflection7EnumValEEEbPKNS_6VectorINS_6OffsetIT_EEjEE:
  175|  79.0k|  bool VerifyVectorOfTables(const Vector<Offset<T>>* const vec) {
  176|  79.0k|    if (vec) {
  ------------------
  |  Branch (176:9): [True: 79.0k, False: 0]
  ------------------
  177|   194k|      for (uoffset_t i = 0; i < vec->size(); i++) {
  ------------------
  |  Branch (177:29): [True: 115k, False: 79.0k]
  ------------------
  178|   115k|        if (!vec->Get(i)->Verify(*this)) return false;
  ------------------
  |  Branch (178:13): [True: 0, False: 115k]
  ------------------
  179|   115k|      }
  180|  79.0k|    }
  181|  79.0k|    return true;
  182|  79.0k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyStringEPKNS_6StringE:
  137|   445k|  bool VerifyString(const String* const str) const {
  138|   445k|    size_t end;
  139|   445k|    return !str || (VerifyVectorOrString<uoffset_t>(
  ------------------
  |  Branch (139:12): [True: 0, False: 445k]
  |  Branch (139:21): [True: 445k, False: 0]
  ------------------
  140|   445k|                        reinterpret_cast<const uint8_t*>(str), 1, &end) &&
  141|   445k|                    Verify(end, 1) &&           // Must have terminator
  ------------------
  |  Branch (141:21): [True: 445k, False: 0]
  ------------------
  142|   445k|                    Check(buf_[end] == '\0'));  // Terminating byte must be 0.
  ------------------
  |  Branch (142:21): [True: 445k, False: 0]
  ------------------
  143|   445k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE11VerifyTableIN10reflection6ObjectEEEbPKT_:
  119|  8.05k|  bool VerifyTable(const T* const table) {
  120|  8.05k|    return !table || table->Verify(*this);
  ------------------
  |  Branch (120:12): [True: 4.88k, False: 3.17k]
  |  Branch (120:22): [True: 3.17k, False: 0]
  ------------------
  121|  8.05k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection7ServiceEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|  5.09k|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|  5.09k|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 0, False: 5.09k]
  |  Branch (126:20): [True: 5.09k, False: 0]
  ------------------
  127|  5.09k|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|  5.09k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOfTablesIN10reflection7ServiceEEEbPKNS_6VectorINS_6OffsetIT_EEjEE:
  175|  5.09k|  bool VerifyVectorOfTables(const Vector<Offset<T>>* const vec) {
  176|  5.09k|    if (vec) {
  ------------------
  |  Branch (176:9): [True: 5.09k, False: 0]
  ------------------
  177|  5.84k|      for (uoffset_t i = 0; i < vec->size(); i++) {
  ------------------
  |  Branch (177:29): [True: 743, False: 5.09k]
  ------------------
  178|    743|        if (!vec->Get(i)->Verify(*this)) return false;
  ------------------
  |  Branch (178:13): [True: 0, False: 743]
  ------------------
  179|    743|      }
  180|  5.09k|    }
  181|  5.09k|    return true;
  182|  5.09k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection7RPCCallEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|    743|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|    743|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 0, False: 743]
  |  Branch (126:20): [True: 743, False: 0]
  ------------------
  127|    743|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|    743|  }
_ZN11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOfTablesIN10reflection7RPCCallEEEbPKNS_6VectorINS_6OffsetIT_EEjEE:
  175|    743|  bool VerifyVectorOfTables(const Vector<Offset<T>>* const vec) {
  176|    743|    if (vec) {
  ------------------
  |  Branch (176:9): [True: 743, False: 0]
  ------------------
  177|  2.22k|      for (uoffset_t i = 0; i < vec->size(); i++) {
  ------------------
  |  Branch (177:29): [True: 1.48k, False: 743]
  ------------------
  178|  1.48k|        if (!vec->Get(i)->Verify(*this)) return false;
  ------------------
  |  Branch (178:13): [True: 0, False: 1.48k]
  ------------------
  179|  1.48k|      }
  180|    743|    }
  181|    743|    return true;
  182|    743|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE11VerifyFieldImEEbPKhtm:
  112|    228|                   const size_t align) const {
  113|    228|    const auto f = static_cast<size_t>(base - buf_) + elem_off;
  114|    228|    return VerifyAlignment(f, align) && Verify(f, sizeof(T));
  ------------------
  |  Branch (114:12): [True: 228, False: 0]
  |  Branch (114:41): [True: 228, False: 0]
  ------------------
  115|    228|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection10SchemaFileEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|  5.09k|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|  5.09k|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 5.09k, False: 0]
  |  Branch (126:20): [True: 0, False: 0]
  ------------------
  127|      0|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|  5.09k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOfTablesIN10reflection10SchemaFileEEEbPKNS_6VectorINS_6OffsetIT_EEjEE:
  175|  5.09k|  bool VerifyVectorOfTables(const Vector<Offset<T>>* const vec) {
  176|  5.09k|    if (vec) {
  ------------------
  |  Branch (176:9): [True: 0, False: 5.09k]
  ------------------
  177|      0|      for (uoffset_t i = 0; i < vec->size(); i++) {
  ------------------
  |  Branch (177:29): [True: 0, False: 0]
  ------------------
  178|      0|        if (!vec->Get(i)->Verify(*this)) return false;
  ------------------
  |  Branch (178:13): [True: 0, False: 0]
  ------------------
  179|      0|      }
  180|      0|    }
  181|  5.09k|    return true;
  182|  5.09k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE8EndTableEv:
  293|   536k|  bool EndTable() {
  294|   536k|    depth_--;
  295|   536k|    return true;
  296|   536k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE16VerifyTableStartEPKh:
  185|   541k|  bool VerifyTableStart(const uint8_t* const table) {
  186|       |    // Check the vtable offset.
  187|   541k|    const auto tableo = static_cast<size_t>(table - buf_);
  188|   541k|    if (!Verify<soffset_t>(tableo)) return false;
  ------------------
  |  Branch (188:9): [True: 0, False: 541k]
  ------------------
  189|       |    // This offset may be signed, but doing the subtraction unsigned always
  190|       |    // gives the result we want.
  191|   541k|    const auto vtableo =
  192|   541k|        tableo - static_cast<size_t>(ReadScalar<soffset_t>(table));
  193|       |    // Check the vtable size field, then check vtable fits in its entirety.
  194|   541k|    if (!(VerifyComplexity() && Verify<voffset_t>(vtableo) &&
  ------------------
  |  Branch (194:11): [True: 541k, False: 0]
  |  Branch (194:33): [True: 536k, False: 5.09k]
  ------------------
  195|   536k|          VerifyAlignment(ReadScalar<voffset_t>(buf_ + vtableo),
  ------------------
  |  Branch (195:11): [True: 536k, False: 0]
  ------------------
  196|   536k|                          sizeof(voffset_t))))
  197|  5.09k|      return false;
  198|   536k|    const auto vsize = ReadScalar<voffset_t>(buf_ + vtableo);
  199|   536k|    return Check((vsize & 1) == 0) && Verify(vtableo, vsize);
  ------------------
  |  Branch (199:12): [True: 536k, False: 0]
  |  Branch (199:39): [True: 536k, False: 0]
  ------------------
  200|   541k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE6VerifyIiEEbm:
   95|   541k|  bool Verify(const size_t elem) const {
   96|   541k|    return VerifyAlignment(elem, sizeof(T)) && Verify(elem, sizeof(T));
  ------------------
  |  Branch (96:12): [True: 541k, False: 0]
  |  Branch (96:48): [True: 541k, False: 0]
  ------------------
   97|   541k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE16VerifyComplexityEv:
  286|   541k|  bool VerifyComplexity() {
  287|   541k|    depth_++;
  288|   541k|    num_tables_++;
  289|   541k|    return Check(depth_ <= opts_.max_depth && num_tables_ <= opts_.max_tables);
  ------------------
  |  Branch (289:18): [True: 541k, False: 0]
  |  Branch (289:47): [True: 541k, False: 0]
  ------------------
  290|   541k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE6VerifyItEEbm:
   95|   541k|  bool Verify(const size_t elem) const {
   96|   541k|    return VerifyAlignment(elem, sizeof(T)) && Verify(elem, sizeof(T));
  ------------------
  |  Branch (96:12): [True: 541k, False: 0]
  |  Branch (96:48): [True: 536k, False: 5.09k]
  ------------------
   97|   541k|  }

_ZN11flatbuffers6Parser7MessageERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  386|  44.8k|void Parser::Message(const std::string& msg) {
  387|  44.8k|  if (!error_.empty()) error_ += "\n";  // log all warnings and errors
  ------------------
  |  Branch (387:7): [True: 21.1k, False: 23.6k]
  ------------------
  388|  44.8k|  error_ += file_being_parsed_.length() ? AbsolutePath(file_being_parsed_) : "";
  ------------------
  |  Branch (388:13): [True: 14, False: 44.8k]
  ------------------
  389|       |  // clang-format off
  390|       |
  391|       |  #ifdef _WIN32  // MSVC alike
  392|       |    error_ +=
  393|       |        "(" + NumToString(line_) + ", " + NumToString(CursorPosition()) + ")";
  394|       |  #else  // gcc alike
  395|  44.8k|    if (file_being_parsed_.length()) error_ += ":";
  ------------------
  |  Branch (395:9): [True: 14, False: 44.8k]
  ------------------
  396|  44.8k|    error_ += NumToString(line_) + ": " + NumToString(CursorPosition());
  397|  44.8k|  #endif
  398|       |  // clang-format on
  399|  44.8k|  error_ += ": " + msg;
  400|  44.8k|}
_ZN11flatbuffers6Parser7WarningERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  402|  22.2k|void Parser::Warning(const std::string& msg) {
  403|  22.2k|  if (!opts.no_warnings) {
  ------------------
  |  Branch (403:7): [True: 22.2k, False: 0]
  ------------------
  404|  22.2k|    Message("warning: " + msg);
  405|  22.2k|    has_warning_ = true;  // for opts.warnings_as_errors
  406|  22.2k|  }
  407|  22.2k|}
_ZN11flatbuffers6Parser5ErrorERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  409|  22.6k|CheckedError Parser::Error(const std::string& msg) {
  410|  22.6k|  Message("error: " + msg);
  411|  22.6k|  return CheckedError(true);
  412|  22.6k|}
_ZN11flatbuffers6Parser12RecurseErrorEv:
  414|     13|CheckedError Parser::RecurseError() {
  415|     13|  return Error("maximum parsing depth " + NumToString(parse_depth_counter_) +
  416|     13|               " reached");
  417|     13|}
_ZNK11flatbuffers9Namespace21GetFullyQualifiedNameERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEm:
  449|  3.13M|                                             size_t max_components) const {
  450|       |  // Early exit if we don't have a defined namespace.
  451|  3.13M|  if (components.empty() || !max_components) {
  ------------------
  |  Branch (451:7): [True: 407k, False: 2.72M]
  |  Branch (451:29): [True: 0, False: 2.72M]
  ------------------
  452|   407k|    return name;
  453|   407k|  }
  454|  2.72M|  std::string stream_str;
  455|  6.67M|  for (size_t i = 0; i < std::min(components.size(), max_components); i++) {
  ------------------
  |  Branch (455:22): [True: 3.94M, False: 2.72M]
  ------------------
  456|  3.94M|    stream_str += components[i];
  457|  3.94M|    stream_str += '.';
  458|  3.94M|  }
  459|  2.72M|  if (!stream_str.empty()) stream_str.pop_back();
  ------------------
  |  Branch (459:7): [True: 2.72M, False: 0]
  ------------------
  460|  2.72M|  if (name.length()) {
  ------------------
  |  Branch (460:7): [True: 2.72M, False: 37]
  ------------------
  461|  2.72M|    stream_str += '.';
  462|  2.72M|    stream_str += name;
  463|  2.72M|  }
  464|  2.72M|  return stream_str;
  465|  3.13M|}
_ZNK11flatbuffers6Parser15TokenToStringIdEi:
  467|  8.71k|std::string Parser::TokenToStringId(int t) const {
  468|  8.71k|  return t == kTokenIdentifier ? attribute_ : TokenToString(t);
  ------------------
  |  Branch (468:10): [True: 516, False: 8.19k]
  ------------------
  469|  8.71k|}
_ZN11flatbuffers6Parser11ParseHexNumEiPm:
  472|  2.19k|CheckedError Parser::ParseHexNum(int nibbles, uint64_t* val) {
  473|  2.19k|  FLATBUFFERS_ASSERT(nibbles > 0);
  474|  10.3k|  for (int i = 0; i < nibbles; i++)
  ------------------
  |  Branch (474:19): [True: 8.24k, False: 2.15k]
  ------------------
  475|  8.24k|    if (!is_xdigit(cursor_[i]))
  ------------------
  |  Branch (475:9): [True: 39, False: 8.20k]
  ------------------
  476|     39|      return Error("escape code must be followed by " + NumToString(nibbles) +
  477|     39|                   " hex digits");
  478|  2.15k|  std::string target(cursor_, cursor_ + nibbles);
  479|  2.15k|  *val = StringToUInt(target.c_str(), 16);
  480|  2.15k|  cursor_ += nibbles;
  481|  2.15k|  return NoError();
  482|  2.19k|}
_ZN11flatbuffers6Parser17SkipByteOrderMarkEv:
  484|  27.6k|CheckedError Parser::SkipByteOrderMark() {
  485|  27.6k|  if (static_cast<unsigned char>(*cursor_) != 0xef) return NoError();
  ------------------
  |  Branch (485:7): [True: 27.6k, False: 19]
  ------------------
  486|     19|  cursor_++;
  487|     19|  if (static_cast<unsigned char>(*cursor_) != 0xbb)
  ------------------
  |  Branch (487:7): [True: 7, False: 12]
  ------------------
  488|      7|    return Error("invalid utf-8 byte order mark");
  489|     12|  cursor_++;
  490|     12|  if (static_cast<unsigned char>(*cursor_) != 0xbf)
  ------------------
  |  Branch (490:7): [True: 10, False: 2]
  ------------------
  491|     10|    return Error("invalid utf-8 byte order mark");
  492|      2|  cursor_++;
  493|      2|  return NoError();
  494|     12|}
_ZN11flatbuffers6Parser4NextEv:
  496|  4.60M|CheckedError Parser::Next() {
  497|  4.60M|  doc_comment_.clear();
  498|  4.60M|  prev_cursor_ = cursor_;
  499|  4.60M|  bool seen_newline = cursor_ == source_;
  500|  4.60M|  attribute_.clear();
  501|  4.60M|  attr_is_trivial_ascii_string_ = true;
  502|  4.92M|  for (;;) {
  503|  4.92M|    char c = *cursor_++;
  504|  4.92M|    token_ = c;
  505|  4.92M|    switch (c) {
  506|  28.6k|      case '\0':
  ------------------
  |  Branch (506:7): [True: 28.6k, False: 4.89M]
  ------------------
  507|  28.6k|        cursor_--;
  508|  28.6k|        token_ = kTokenEof;
  509|  28.6k|        return NoError();
  510|  11.6k|      case ' ':
  ------------------
  |  Branch (510:7): [True: 11.6k, False: 4.91M]
  ------------------
  511|  25.5k|      case '\r':
  ------------------
  |  Branch (511:7): [True: 13.9k, False: 4.90M]
  ------------------
  512|   178k|      case '\t':
  ------------------
  |  Branch (512:7): [True: 153k, False: 4.76M]
  ------------------
  513|   178k|        break;
  514|   106k|      case '\n':
  ------------------
  |  Branch (514:7): [True: 106k, False: 4.81M]
  ------------------
  515|   106k|        MarkNewLine();
  516|   106k|        seen_newline = true;
  517|   106k|        break;
  518|   286k|      case '{':
  ------------------
  |  Branch (518:7): [True: 286k, False: 4.63M]
  ------------------
  519|   558k|      case '}':
  ------------------
  |  Branch (519:7): [True: 272k, False: 4.65M]
  ------------------
  520|   584k|      case '(':
  ------------------
  |  Branch (520:7): [True: 26.2k, False: 4.89M]
  ------------------
  521|   610k|      case ')':
  ------------------
  |  Branch (521:7): [True: 25.5k, False: 4.89M]
  ------------------
  522|   796k|      case '[':
  ------------------
  |  Branch (522:7): [True: 185k, False: 4.73M]
  ------------------
  523|   972k|      case ']':
  ------------------
  |  Branch (523:7): [True: 176k, False: 4.74M]
  ------------------
  524|   972k|      case '<':
  ------------------
  |  Branch (524:7): [True: 9, False: 4.92M]
  ------------------
  525|   972k|      case '>':
  ------------------
  |  Branch (525:7): [True: 8, False: 4.92M]
  ------------------
  526|  1.96M|      case ',':
  ------------------
  |  Branch (526:7): [True: 993k, False: 3.92M]
  ------------------
  527|  2.31M|      case ':':
  ------------------
  |  Branch (527:7): [True: 346k, False: 4.57M]
  ------------------
  528|  2.41M|      case ';':
  ------------------
  |  Branch (528:7): [True: 99.1k, False: 4.82M]
  ------------------
  529|  2.54M|      case '=':
  ------------------
  |  Branch (529:7): [True: 134k, False: 4.78M]
  ------------------
  530|  2.54M|        return NoError();
  531|  14.8k|      case '\"':
  ------------------
  |  Branch (531:7): [True: 14.8k, False: 4.90M]
  ------------------
  532|  61.1k|      case '\'': {
  ------------------
  |  Branch (532:7): [True: 46.3k, False: 4.87M]
  ------------------
  533|  61.1k|        int unicode_high_surrogate = -1;
  534|       |
  535|  1.68M|        while (*cursor_ != c) {
  ------------------
  |  Branch (535:16): [True: 1.61M, False: 60.8k]
  ------------------
  536|  1.61M|          if (*cursor_ < ' ' && static_cast<signed char>(*cursor_) >= 0)
  ------------------
  |  Branch (536:15): [True: 365k, False: 1.25M]
  |  Branch (536:33): [True: 267, False: 364k]
  ------------------
  537|    267|            return Error("illegal character in string constant");
  538|  1.61M|          if (*cursor_ == '\\') {
  ------------------
  |  Branch (538:15): [True: 5.06k, False: 1.61M]
  ------------------
  539|  5.06k|            attr_is_trivial_ascii_string_ = false;  // has escape sequence
  540|  5.06k|            cursor_++;
  541|  5.06k|            if (unicode_high_surrogate != -1 && *cursor_ != 'u') {
  ------------------
  |  Branch (541:17): [True: 634, False: 4.42k]
  |  Branch (541:49): [True: 13, False: 621]
  ------------------
  542|     13|              return Error(
  543|     13|                  "illegal Unicode sequence (unpaired high surrogate)");
  544|     13|            }
  545|  5.04k|            switch (*cursor_) {
  546|    467|              case 'n':
  ------------------
  |  Branch (546:15): [True: 467, False: 4.58k]
  ------------------
  547|    467|                attribute_ += '\n';
  548|    467|                cursor_++;
  549|    467|                break;
  550|    515|              case 't':
  ------------------
  |  Branch (550:15): [True: 515, False: 4.53k]
  ------------------
  551|    515|                attribute_ += '\t';
  552|    515|                cursor_++;
  553|    515|                break;
  554|    239|              case 'r':
  ------------------
  |  Branch (554:15): [True: 239, False: 4.81k]
  ------------------
  555|    239|                attribute_ += '\r';
  556|    239|                cursor_++;
  557|    239|                break;
  558|    301|              case 'b':
  ------------------
  |  Branch (558:15): [True: 301, False: 4.74k]
  ------------------
  559|    301|                attribute_ += '\b';
  560|    301|                cursor_++;
  561|    301|                break;
  562|    296|              case 'f':
  ------------------
  |  Branch (562:15): [True: 296, False: 4.75k]
  ------------------
  563|    296|                attribute_ += '\f';
  564|    296|                cursor_++;
  565|    296|                break;
  566|    202|              case '\"':
  ------------------
  |  Branch (566:15): [True: 202, False: 4.84k]
  ------------------
  567|    202|                attribute_ += '\"';
  568|    202|                cursor_++;
  569|    202|                break;
  570|    238|              case '\'':
  ------------------
  |  Branch (570:15): [True: 238, False: 4.81k]
  ------------------
  571|    238|                attribute_ += '\'';
  572|    238|                cursor_++;
  573|    238|                break;
  574|    380|              case '\\':
  ------------------
  |  Branch (574:15): [True: 380, False: 4.66k]
  ------------------
  575|    380|                attribute_ += '\\';
  576|    380|                cursor_++;
  577|    380|                break;
  578|    201|              case '/':
  ------------------
  |  Branch (578:15): [True: 201, False: 4.84k]
  ------------------
  579|    201|                attribute_ += '/';
  580|    201|                cursor_++;
  581|    201|                break;
  582|    237|              case 'x': {  // Not in the JSON standard
  ------------------
  |  Branch (582:15): [True: 237, False: 4.81k]
  ------------------
  583|    237|                cursor_++;
  584|    237|                uint64_t val;
  585|    237|                ECHECK(ParseHexNum(2, &val));
  ------------------
  |  |   56|    237|  {                            \
  |  |   57|    237|    auto ce = (call);          \
  |  |   58|    237|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 7, False: 230]
  |  |  ------------------
  |  |   59|    237|  }
  ------------------
  586|    230|                attribute_ += static_cast<char>(val);
  587|    230|                break;
  588|    237|              }
  589|  1.95k|              case 'u': {
  ------------------
  |  Branch (589:15): [True: 1.95k, False: 3.09k]
  ------------------
  590|  1.95k|                cursor_++;
  591|  1.95k|                uint64_t val;
  592|  1.95k|                ECHECK(ParseHexNum(4, &val));
  ------------------
  |  |   56|  1.95k|  {                            \
  |  |   57|  1.95k|    auto ce = (call);          \
  |  |   58|  1.95k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 32, False: 1.92k]
  |  |  ------------------
  |  |   59|  1.95k|  }
  ------------------
  593|  1.92k|                if (val >= 0xD800 && val <= 0xDBFF) {
  ------------------
  |  Branch (593:21): [True: 1.56k, False: 363]
  |  Branch (593:38): [True: 673, False: 891]
  ------------------
  594|    673|                  if (unicode_high_surrogate != -1) {
  ------------------
  |  Branch (594:23): [True: 1, False: 672]
  ------------------
  595|      1|                    return Error(
  596|      1|                        "illegal Unicode sequence (multiple high surrogates)");
  597|    672|                  } else {
  598|    672|                    unicode_high_surrogate = static_cast<int>(val);
  599|    672|                  }
  600|  1.25k|                } else if (val >= 0xDC00 && val <= 0xDFFF) {
  ------------------
  |  Branch (600:28): [True: 891, False: 363]
  |  Branch (600:45): [True: 619, False: 272]
  ------------------
  601|    619|                  if (unicode_high_surrogate == -1) {
  ------------------
  |  Branch (601:23): [True: 9, False: 610]
  ------------------
  602|      9|                    return Error(
  603|      9|                        "illegal Unicode sequence (unpaired low surrogate)");
  604|    610|                  } else {
  605|    610|                    int code_point = 0x10000 +
  606|    610|                                     ((unicode_high_surrogate & 0x03FF) << 10) +
  607|    610|                                     (val & 0x03FF);
  608|    610|                    ToUTF8(code_point, &attribute_);
  609|    610|                    unicode_high_surrogate = -1;
  610|    610|                  }
  611|    635|                } else {
  612|    635|                  if (unicode_high_surrogate != -1) {
  ------------------
  |  Branch (612:23): [True: 1, False: 634]
  ------------------
  613|      1|                    return Error(
  614|      1|                        "illegal Unicode sequence (unpaired high surrogate)");
  615|      1|                  }
  616|    634|                  ToUTF8(static_cast<int>(val), &attribute_);
  617|    634|                }
  618|  1.91k|                break;
  619|  1.92k|              }
  620|  1.91k|              default:
  ------------------
  |  Branch (620:15): [True: 14, False: 5.03k]
  ------------------
  621|     14|                return Error("unknown escape code in string constant");
  622|  5.04k|            }
  623|  1.61M|          } else {  // printable chars + UTF-8 bytes
  624|  1.61M|            if (unicode_high_surrogate != -1) {
  ------------------
  |  Branch (624:17): [True: 15, False: 1.61M]
  ------------------
  625|     15|              return Error(
  626|     15|                  "illegal Unicode sequence (unpaired high surrogate)");
  627|     15|            }
  628|       |            // reset if non-printable
  629|  1.61M|            attr_is_trivial_ascii_string_ &=
  630|  1.61M|                check_ascii_range(*cursor_, ' ', '~');
  631|       |
  632|  1.61M|            attribute_ += *cursor_++;
  633|  1.61M|          }
  634|  1.61M|        }
  635|  60.8k|        if (unicode_high_surrogate != -1) {
  ------------------
  |  Branch (635:13): [True: 11, False: 60.8k]
  ------------------
  636|     11|          return Error("illegal Unicode sequence (unpaired high surrogate)");
  637|     11|        }
  638|  60.8k|        cursor_++;
  639|  60.8k|        if (!attr_is_trivial_ascii_string_ && !opts.allow_non_utf8 &&
  ------------------
  |  Branch (639:13): [True: 33.8k, False: 26.9k]
  |  Branch (639:47): [True: 686, False: 33.1k]
  ------------------
  640|    686|            !ValidateUTF8(attribute_)) {
  ------------------
  |  Branch (640:13): [True: 81, False: 605]
  ------------------
  641|     81|          return Error("illegal UTF-8 sequence");
  642|     81|        }
  643|  60.7k|        token_ = kTokenStringConstant;
  644|  60.7k|        return NoError();
  645|  60.8k|      }
  646|  29.0k|      case '/':
  ------------------
  |  Branch (646:7): [True: 29.0k, False: 4.89M]
  ------------------
  647|  29.0k|        if (*cursor_ == '/') {
  ------------------
  |  Branch (647:13): [True: 28.7k, False: 269]
  ------------------
  648|  28.7k|          const char* start = ++cursor_;
  649|   164k|          while (*cursor_ && *cursor_ != '\n' && *cursor_ != '\r') cursor_++;
  ------------------
  |  Branch (649:18): [True: 164k, False: 241]
  |  Branch (649:30): [True: 136k, False: 27.7k]
  |  Branch (649:50): [True: 135k, False: 733]
  ------------------
  650|  28.7k|          if (*start == '/') {  // documentation comment
  ------------------
  |  Branch (650:15): [True: 23.0k, False: 5.72k]
  ------------------
  651|  23.0k|            if (!seen_newline)
  ------------------
  |  Branch (651:17): [True: 2, False: 23.0k]
  ------------------
  652|      2|              return Error(
  653|      2|                  "a documentation comment should be on a line on its own");
  654|  23.0k|            doc_comment_.push_back(std::string(start + 1, cursor_));
  655|  23.0k|          }
  656|  28.7k|          break;
  657|  28.7k|        } else if (*cursor_ == '*') {
  ------------------
  |  Branch (657:20): [True: 238, False: 31]
  ------------------
  658|    238|          cursor_++;
  659|       |          // TODO: make nested.
  660|  2.99k|          while (*cursor_ != '*' || cursor_[1] != '/') {
  ------------------
  |  Branch (660:18): [True: 2.59k, False: 400]
  |  Branch (660:37): [True: 206, False: 194]
  ------------------
  661|  2.79k|            if (*cursor_ == '\n') MarkNewLine();
  ------------------
  |  Branch (661:17): [True: 197, False: 2.60k]
  ------------------
  662|  2.79k|            if (!*cursor_) return Error("end of file in comment");
  ------------------
  |  Branch (662:17): [True: 44, False: 2.75k]
  ------------------
  663|  2.75k|            cursor_++;
  664|  2.75k|          }
  665|    194|          cursor_ += 2;
  666|    194|          break;
  667|    238|        }
  668|     31|        FLATBUFFERS_FALLTHROUGH();  // else fall thru
  ------------------
  |  |  306|     31|  #define FLATBUFFERS_FALLTHROUGH() [[fallthrough]]
  ------------------
  669|  1.97M|      default:
  ------------------
  |  Branch (669:7): [True: 1.97M, False: 2.95M]
  ------------------
  670|  1.97M|        if (IsIdentifierStart(c)) {
  ------------------
  |  Branch (670:13): [True: 1.36M, False: 611k]
  ------------------
  671|       |          // Collect all chars of an identifier:
  672|  1.36M|          const char* start = cursor_ - 1;
  673|  8.26M|          while (IsIdentifierStart(*cursor_) || is_digit(*cursor_)) cursor_++;
  ------------------
  |  Branch (673:18): [True: 6.01M, False: 2.24M]
  |  Branch (673:49): [True: 888k, False: 1.36M]
  ------------------
  674|  1.36M|          attribute_.append(start, cursor_);
  675|  1.36M|          token_ = kTokenIdentifier;
  676|  1.36M|          return NoError();
  677|  1.36M|        }
  678|       |
  679|   611k|        const auto has_sign = (c == '+') || (c == '-');
  ------------------
  |  Branch (679:31): [True: 3.43k, False: 607k]
  |  Branch (679:45): [True: 5.92k, False: 601k]
  ------------------
  680|   611k|        if (has_sign) {
  ------------------
  |  Branch (680:13): [True: 9.36k, False: 601k]
  ------------------
  681|       |          // Check for +/-inf which is considered a float constant.
  682|  9.36k|          if (strncmp(cursor_, "inf", 3) == 0 &&
  ------------------
  |  Branch (682:15): [True: 1.73k, False: 7.62k]
  ------------------
  683|  1.73k|              !(IsIdentifierStart(cursor_[3]) || is_digit(cursor_[3]))) {
  ------------------
  |  Branch (683:17): [True: 646, False: 1.09k]
  |  Branch (683:50): [True: 307, False: 783]
  ------------------
  684|    783|            attribute_.assign(cursor_ - 1, cursor_ + 3);
  685|    783|            token_ = kTokenFloatConstant;
  686|    783|            cursor_ += 3;
  687|    783|            return NoError();
  688|    783|          }
  689|       |
  690|  8.57k|          if (IsIdentifierStart(*cursor_)) {
  ------------------
  |  Branch (690:15): [True: 2.13k, False: 6.44k]
  ------------------
  691|       |            // '-'/'+' and following identifier - it could be a predefined
  692|       |            // constant. Return the sign in token_, see ParseSingleValue.
  693|  2.13k|            return NoError();
  694|  2.13k|          }
  695|  8.57k|        }
  696|       |
  697|   608k|        auto dot_lvl =
  698|   608k|            (c == '.') ? 0 : 1;  // dot_lvl==0 <=> exactly one '.' seen
  ------------------
  |  Branch (698:13): [True: 61.1k, False: 547k]
  ------------------
  699|   608k|        if (!dot_lvl && !is_digit(*cursor_)) return NoError();  // enum?
  ------------------
  |  Branch (699:13): [True: 61.1k, False: 547k]
  |  Branch (699:25): [True: 31.7k, False: 29.3k]
  ------------------
  700|       |        // Parser accepts hexadecimal-floating-literal (see C++ 5.13.4).
  701|   576k|        if (is_digit(c) || has_sign || !dot_lvl) {
  ------------------
  |  Branch (701:13): [True: 540k, False: 36.2k]
  |  Branch (701:28): [True: 6.44k, False: 29.8k]
  |  Branch (701:40): [True: 29.3k, False: 446]
  ------------------
  702|   576k|          const auto start = cursor_ - 1;
  703|   576k|          auto start_digits = !is_digit(c) ? cursor_ : cursor_ - 1;
  ------------------
  |  Branch (703:31): [True: 35.8k, False: 540k]
  ------------------
  704|   576k|          if (!is_digit(c) && is_digit(*cursor_)) {
  ------------------
  |  Branch (704:15): [True: 35.8k, False: 540k]
  |  Branch (704:31): [True: 34.9k, False: 903]
  ------------------
  705|  34.9k|            start_digits = cursor_;  // see digit in cursor_ position
  706|  34.9k|            c = *cursor_++;
  707|  34.9k|          }
  708|       |          // hex-float can't begind with '.'
  709|   576k|          auto use_hex = dot_lvl && (c == '0') && is_alpha_char(*cursor_, 'X');
  ------------------
  |  Branch (709:26): [True: 546k, False: 29.3k]
  |  Branch (709:37): [True: 108k, False: 438k]
  |  Branch (709:51): [True: 5.21k, False: 102k]
  ------------------
  710|   576k|          if (use_hex) start_digits = ++cursor_;  // '0x' is the prefix, skip it
  ------------------
  |  Branch (710:15): [True: 5.21k, False: 570k]
  ------------------
  711|       |          // Read an integer number or mantisa of float-point number.
  712|   578k|          do {
  713|   578k|            if (use_hex) {
  ------------------
  |  Branch (713:17): [True: 5.47k, False: 573k]
  ------------------
  714|  62.6k|              while (is_xdigit(*cursor_)) cursor_++;
  ------------------
  |  Branch (714:22): [True: 57.1k, False: 5.47k]
  ------------------
  715|   573k|            } else {
  716|  1.10M|              while (is_digit(*cursor_)) cursor_++;
  ------------------
  |  Branch (716:22): [True: 532k, False: 573k]
  ------------------
  717|   573k|            }
  718|   578k|          } while ((*cursor_ == '.') && (++cursor_) && (--dot_lvl >= 0));
  ------------------
  |  Branch (718:20): [True: 2.71k, False: 576k]
  |  Branch (718:41): [True: 2.71k, False: 0]
  |  Branch (718:56): [True: 2.70k, False: 7]
  ------------------
  719|       |          // Exponent of float-point number.
  720|   576k|          if ((dot_lvl >= 0) && (cursor_ > start_digits)) {
  ------------------
  |  Branch (720:15): [True: 576k, False: 7]
  |  Branch (720:33): [True: 576k, False: 63]
  ------------------
  721|       |            // The exponent suffix of hexadecimal float number is mandatory.
  722|   576k|            if (use_hex && !dot_lvl) start_digits = cursor_;
  ------------------
  |  Branch (722:17): [True: 5.20k, False: 570k]
  |  Branch (722:28): [True: 262, False: 4.93k]
  ------------------
  723|   576k|            if ((use_hex && is_alpha_char(*cursor_, 'P')) ||
  ------------------
  |  Branch (723:18): [True: 5.20k, False: 570k]
  |  Branch (723:29): [True: 259, False: 4.94k]
  ------------------
  724|   575k|                is_alpha_char(*cursor_, 'E')) {
  ------------------
  |  Branch (724:17): [True: 1.47k, False: 574k]
  ------------------
  725|  1.73k|              dot_lvl = 0;  // Emulate dot to signal about float-point number.
  726|  1.73k|              cursor_++;
  727|  1.73k|              if (*cursor_ == '+' || *cursor_ == '-') cursor_++;
  ------------------
  |  Branch (727:19): [True: 202, False: 1.53k]
  |  Branch (727:38): [True: 389, False: 1.14k]
  ------------------
  728|  1.73k|              start_digits = cursor_;  // the exponent-part has to have digits
  729|       |              // Exponent is decimal integer number
  730|  13.4k|              while (is_digit(*cursor_)) cursor_++;
  ------------------
  |  Branch (730:22): [True: 11.7k, False: 1.73k]
  ------------------
  731|  1.73k|              if (*cursor_ == '.') {
  ------------------
  |  Branch (731:19): [True: 1, False: 1.73k]
  ------------------
  732|      1|                cursor_++;  // If see a dot treat it as part of invalid number.
  733|      1|                dot_lvl = -1;  // Fall thru to Error().
  734|      1|              }
  735|  1.73k|            }
  736|   576k|          }
  737|       |          // Finalize.
  738|   576k|          if ((dot_lvl >= 0) && (cursor_ > start_digits)) {
  ------------------
  |  Branch (738:15): [True: 576k, False: 8]
  |  Branch (738:33): [True: 575k, False: 119]
  ------------------
  739|   575k|            attribute_.append(start, cursor_);
  740|   575k|            token_ = dot_lvl ? kTokenIntegerConstant : kTokenFloatConstant;
  ------------------
  |  Branch (740:22): [True: 542k, False: 33.5k]
  ------------------
  741|   575k|            return NoError();
  742|   575k|          } else {
  743|    127|            return Error("invalid number: " + std::string(start, cursor_));
  744|    127|          }
  745|   576k|        }
  746|    446|        std::string ch;
  747|    446|        ch = c;
  748|    446|        if (false == check_ascii_range(c, ' ', '~'))
  ------------------
  |  Branch (748:13): [True: 328, False: 118]
  ------------------
  749|    328|          ch = "code: " + NumToString(c);
  750|    446|        return Error("illegal character: " + ch);
  751|  4.92M|    }
  752|  4.92M|  }
  753|  4.60M|}
_ZNK11flatbuffers6Parser2IsEi:
  756|  5.14M|bool Parser::Is(int t) const { return t == token_; }
_ZNK11flatbuffers6Parser7IsIdentEPKc:
  758|  3.11M|bool Parser::IsIdent(const char* id) const {
  759|  3.11M|  return token_ == kTokenIdentifier && attribute_ == id;
  ------------------
  |  Branch (759:10): [True: 2.92M, False: 190k]
  |  Branch (759:40): [True: 247k, False: 2.67M]
  ------------------
  760|  3.11M|}
_ZN11flatbuffers6Parser6ExpectEi:
  763|  3.01M|CheckedError Parser::Expect(int t) {
  764|  3.01M|  if (t != token_) {
  ------------------
  |  Branch (764:7): [True: 8.23k, False: 3.00M]
  ------------------
  765|  8.23k|    return Error("expecting: " + TokenToString(t) +
  766|  8.23k|                 " instead got: " + TokenToStringId(token_));
  767|  8.23k|  }
  768|  3.00M|  NEXT();
  ------------------
  |  |   63|  3.00M|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  3.00M|  {                            \
  |  |  |  |   57|  3.00M|    auto ce = (call);          \
  |  |  |  |   58|  3.00M|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 326, False: 3.00M]
  |  |  |  |  ------------------
  |  |  |  |   59|  3.00M|  }
  |  |  ------------------
  ------------------
  769|  3.00M|  return NoError();
  770|  3.00M|}
_ZN11flatbuffers6Parser16ParseNamespacingEPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES8_:
  772|   405k|CheckedError Parser::ParseNamespacing(std::string* id, std::string* last) {
  773|   414k|  while (Is('.')) {
  ------------------
  |  Branch (773:10): [True: 9.69k, False: 404k]
  ------------------
  774|  9.69k|    NEXT();
  ------------------
  |  |   63|  9.69k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  9.69k|  {                            \
  |  |  |  |   57|  9.69k|    auto ce = (call);          \
  |  |  |  |   58|  9.69k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 9.69k]
  |  |  |  |  ------------------
  |  |  |  |   59|  9.69k|  }
  |  |  ------------------
  ------------------
  775|  9.69k|    *id += ".";
  776|  9.69k|    *id += attribute_;
  777|  9.69k|    if (last) *last = attribute_;
  ------------------
  |  Branch (777:9): [True: 8.23k, False: 1.45k]
  ------------------
  778|  9.69k|    EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|  9.69k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  9.69k|  {                            \
  |  |  |  |   57|  9.69k|    auto ce = (call);          \
  |  |  |  |   58|  9.69k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 35, False: 9.65k]
  |  |  |  |  ------------------
  |  |  |  |   59|  9.69k|  }
  |  |  ------------------
  ------------------
  779|  9.65k|  }
  780|   404k|  return NoError();
  781|   405k|}
_ZN11flatbuffers6Parser10LookupEnumERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  783|  77.7k|EnumDef* Parser::LookupEnum(const std::string& id) {
  784|       |  // Search thru parent namespaces.
  785|  77.7k|  return LookupTableByName(enums_, id, *current_namespace_, 0);
  786|  77.7k|}
_ZNK11flatbuffers6Parser12LookupStructERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  788|   792k|StructDef* Parser::LookupStruct(const std::string& id) const {
  789|   792k|  auto sd = structs_.Lookup(id);
  790|   792k|  if (sd) sd->refcount++;
  ------------------
  |  Branch (790:7): [True: 225k, False: 566k]
  ------------------
  791|   792k|  return sd;
  792|   792k|}
_ZNK11flatbuffers6Parser32LookupStructThruParentNamespacesERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  795|   222k|    const std::string& id) const {
  796|   222k|  auto sd = LookupTableByName(structs_, id, *current_namespace_, 1);
  797|   222k|  if (sd) sd->refcount++;
  ------------------
  |  Branch (797:7): [True: 2.88k, False: 219k]
  ------------------
  798|   222k|  return sd;
  799|   222k|}
_ZN11flatbuffers6Parser14ParseTypeIdentERNS_4TypeE:
  801|  77.5k|CheckedError Parser::ParseTypeIdent(Type& type) {
  802|  77.5k|  std::string id = attribute_;
  803|  77.5k|  EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|  77.5k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  77.5k|  {                            \
  |  |  |  |   57|  77.5k|    auto ce = (call);          \
  |  |  |  |   58|  77.5k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 25, False: 77.4k]
  |  |  |  |  ------------------
  |  |  |  |   59|  77.5k|  }
  |  |  ------------------
  ------------------
  804|  77.4k|  ECHECK(ParseNamespacing(&id, nullptr));
  ------------------
  |  |   56|  77.4k|  {                            \
  |  |   57|  77.4k|    auto ce = (call);          \
  |  |   58|  77.4k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 19, False: 77.4k]
  |  |  ------------------
  |  |   59|  77.4k|  }
  ------------------
  805|  77.4k|  auto enum_def = LookupEnum(id);
  806|  77.4k|  if (enum_def) {
  ------------------
  |  Branch (806:7): [True: 38.8k, False: 38.6k]
  ------------------
  807|  38.8k|    type = enum_def->underlying_type;
  808|  38.8k|    if (enum_def->is_union) type.base_type = BASE_TYPE_UNION;
  ------------------
  |  Branch (808:9): [True: 22.4k, False: 16.3k]
  ------------------
  809|  38.8k|  } else {
  810|  38.6k|    type.base_type = BASE_TYPE_STRUCT;
  811|  38.6k|    type.struct_def = LookupCreateStruct(id);
  812|  38.6k|  }
  813|  77.4k|  return NoError();
  814|  77.4k|}
_ZN11flatbuffers6Parser9ParseTypeERNS_4TypeE:
  817|  94.6k|CheckedError Parser::ParseType(Type& type) {
  818|  94.6k|  if (token_ == kTokenIdentifier) {
  ------------------
  |  Branch (818:7): [True: 81.7k, False: 12.9k]
  ------------------
  819|  81.7k|    if (IsIdent("bool")) {
  ------------------
  |  Branch (819:9): [True: 640, False: 81.0k]
  ------------------
  820|    640|      type.base_type = BASE_TYPE_BOOL;
  821|    640|      NEXT();
  ------------------
  |  |   63|    640|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    640|  {                            \
  |  |  |  |   57|    640|    auto ce = (call);          \
  |  |  |  |   58|    640|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 639]
  |  |  |  |  ------------------
  |  |  |  |   59|    640|  }
  |  |  ------------------
  ------------------
  822|  81.0k|    } else if (IsIdent("byte") || IsIdent("int8")) {
  ------------------
  |  Branch (822:16): [True: 593, False: 80.4k]
  |  Branch (822:35): [True: 378, False: 80.1k]
  ------------------
  823|    971|      type.base_type = BASE_TYPE_CHAR;
  824|    971|      NEXT();
  ------------------
  |  |   63|    971|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    971|  {                            \
  |  |  |  |   57|    971|    auto ce = (call);          \
  |  |  |  |   58|    971|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 970]
  |  |  |  |  ------------------
  |  |  |  |   59|    971|  }
  |  |  ------------------
  ------------------
  825|  80.1k|    } else if (IsIdent("ubyte") || IsIdent("uint8")) {
  ------------------
  |  Branch (825:16): [True: 4.50k, False: 75.5k]
  |  Branch (825:36): [True: 257, False: 75.3k]
  ------------------
  826|  4.75k|      type.base_type = BASE_TYPE_UCHAR;
  827|  4.75k|      NEXT();
  ------------------
  |  |   63|  4.75k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  4.75k|  {                            \
  |  |  |  |   57|  4.75k|    auto ce = (call);          \
  |  |  |  |   58|  4.75k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 4.75k]
  |  |  |  |  ------------------
  |  |  |  |   59|  4.75k|  }
  |  |  ------------------
  ------------------
  828|  75.3k|    } else if (IsIdent("short") || IsIdent("int16")) {
  ------------------
  |  Branch (828:16): [True: 359, False: 74.9k]
  |  Branch (828:36): [True: 446, False: 74.5k]
  ------------------
  829|    805|      type.base_type = BASE_TYPE_SHORT;
  830|    805|      NEXT();
  ------------------
  |  |   63|    805|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    805|  {                            \
  |  |  |  |   57|    805|    auto ce = (call);          \
  |  |  |  |   58|    805|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 804]
  |  |  |  |  ------------------
  |  |  |  |   59|    805|  }
  |  |  ------------------
  ------------------
  831|  74.5k|    } else if (IsIdent("ushort") || IsIdent("uint16")) {
  ------------------
  |  Branch (831:16): [True: 296, False: 74.2k]
  |  Branch (831:37): [True: 408, False: 73.8k]
  ------------------
  832|    704|      type.base_type = BASE_TYPE_USHORT;
  833|    704|      NEXT();
  ------------------
  |  |   63|    704|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    704|  {                            \
  |  |  |  |   57|    704|    auto ce = (call);          \
  |  |  |  |   58|    704|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 703]
  |  |  |  |  ------------------
  |  |  |  |   59|    704|  }
  |  |  ------------------
  ------------------
  834|  73.8k|    } else if (IsIdent("int") || IsIdent("int32")) {
  ------------------
  |  Branch (834:16): [True: 1.36k, False: 72.4k]
  |  Branch (834:34): [True: 319, False: 72.1k]
  ------------------
  835|  1.68k|      type.base_type = BASE_TYPE_INT;
  836|  1.68k|      NEXT();
  ------------------
  |  |   63|  1.68k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  1.68k|  {                            \
  |  |  |  |   57|  1.68k|    auto ce = (call);          \
  |  |  |  |   58|  1.68k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 1.68k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.68k|  }
  |  |  ------------------
  ------------------
  837|  72.1k|    } else if (IsIdent("uint") || IsIdent("uint32")) {
  ------------------
  |  Branch (837:16): [True: 710, False: 71.4k]
  |  Branch (837:35): [True: 677, False: 70.7k]
  ------------------
  838|  1.38k|      type.base_type = BASE_TYPE_UINT;
  839|  1.38k|      NEXT();
  ------------------
  |  |   63|  1.38k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  1.38k|  {                            \
  |  |  |  |   57|  1.38k|    auto ce = (call);          \
  |  |  |  |   58|  1.38k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 1.38k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.38k|  }
  |  |  ------------------
  ------------------
  840|  70.7k|    } else if (IsIdent("long") || IsIdent("int64")) {
  ------------------
  |  Branch (840:16): [True: 1.78k, False: 68.9k]
  |  Branch (840:35): [True: 434, False: 68.5k]
  ------------------
  841|  2.22k|      type.base_type = BASE_TYPE_LONG;
  842|  2.22k|      NEXT();
  ------------------
  |  |   63|  2.22k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  2.22k|  {                            \
  |  |  |  |   57|  2.22k|    auto ce = (call);          \
  |  |  |  |   58|  2.22k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 2.22k]
  |  |  |  |  ------------------
  |  |  |  |   59|  2.22k|  }
  |  |  ------------------
  ------------------
  843|  68.5k|    } else if (IsIdent("ulong") || IsIdent("uint64")) {
  ------------------
  |  Branch (843:16): [True: 3.39k, False: 65.1k]
  |  Branch (843:36): [True: 1.43k, False: 63.7k]
  ------------------
  844|  4.82k|      type.base_type = BASE_TYPE_ULONG;
  845|  4.82k|      NEXT();
  ------------------
  |  |   63|  4.82k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  4.82k|  {                            \
  |  |  |  |   57|  4.82k|    auto ce = (call);          \
  |  |  |  |   58|  4.82k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 4.82k]
  |  |  |  |  ------------------
  |  |  |  |   59|  4.82k|  }
  |  |  ------------------
  ------------------
  846|  63.7k|    } else if (IsIdent("float") || IsIdent("float32")) {
  ------------------
  |  Branch (846:16): [True: 684, False: 63.0k]
  |  Branch (846:36): [True: 205, False: 62.8k]
  ------------------
  847|    889|      type.base_type = BASE_TYPE_FLOAT;
  848|    889|      NEXT();
  ------------------
  |  |   63|    889|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    889|  {                            \
  |  |  |  |   57|    889|    auto ce = (call);          \
  |  |  |  |   58|    889|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 887]
  |  |  |  |  ------------------
  |  |  |  |   59|    889|  }
  |  |  ------------------
  ------------------
  849|  62.8k|    } else if (IsIdent("double") || IsIdent("float64")) {
  ------------------
  |  Branch (849:16): [True: 461, False: 62.3k]
  |  Branch (849:37): [True: 131, False: 62.2k]
  ------------------
  850|    592|      type.base_type = BASE_TYPE_DOUBLE;
  851|    592|      NEXT();
  ------------------
  |  |   63|    592|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    592|  {                            \
  |  |  |  |   57|    592|    auto ce = (call);          \
  |  |  |  |   58|    592|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 591]
  |  |  |  |  ------------------
  |  |  |  |   59|    592|  }
  |  |  ------------------
  ------------------
  852|  62.2k|    } else if (IsIdent("string")) {
  ------------------
  |  Branch (852:16): [True: 472, False: 61.7k]
  ------------------
  853|    472|      type.base_type = BASE_TYPE_STRING;
  854|    472|      NEXT();
  ------------------
  |  |   63|    472|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    472|  {                            \
  |  |  |  |   57|    472|    auto ce = (call);          \
  |  |  |  |   58|    472|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 471]
  |  |  |  |  ------------------
  |  |  |  |   59|    472|  }
  |  |  ------------------
  ------------------
  855|  61.7k|    } else {
  856|  61.7k|      ECHECK(ParseTypeIdent(type));
  ------------------
  |  |   56|  61.7k|  {                            \
  |  |   57|  61.7k|    auto ce = (call);          \
  |  |   58|  61.7k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 34, False: 61.7k]
  |  |  ------------------
  |  |   59|  61.7k|  }
  ------------------
  857|  61.7k|    }
  858|  81.7k|  } else if (token_ == '[') {
  ------------------
  |  Branch (858:14): [True: 12.9k, False: 48]
  ------------------
  859|  12.9k|    ParseDepthGuard depth_guard(this);
  860|  12.9k|    ECHECK(depth_guard.Check());
  ------------------
  |  |   56|  12.9k|  {                            \
  |  |   57|  12.9k|    auto ce = (call);          \
  |  |   58|  12.9k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1, False: 12.9k]
  |  |  ------------------
  |  |   59|  12.9k|  }
  ------------------
  861|  12.9k|    NEXT();
  ------------------
  |  |   63|  12.9k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  12.9k|  {                            \
  |  |  |  |   57|  12.9k|    auto ce = (call);          \
  |  |  |  |   58|  12.9k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 12.9k]
  |  |  |  |  ------------------
  |  |  |  |   59|  12.9k|  }
  |  |  ------------------
  ------------------
  862|  12.9k|    Type subtype;
  863|  12.9k|    ECHECK(ParseType(subtype));
  ------------------
  |  |   56|  12.9k|  {                            \
  |  |   57|  12.9k|    auto ce = (call);          \
  |  |   58|  12.9k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 246, False: 12.6k]
  |  |  ------------------
  |  |   59|  12.9k|  }
  ------------------
  864|  12.6k|    if (IsSeries(subtype)) {
  ------------------
  |  Branch (864:9): [True: 2, False: 12.6k]
  ------------------
  865|       |      // We could support this, but it will complicate things, and it's
  866|       |      // easier to work around with a struct around the inner vector.
  867|      2|      return Error("nested vector types not supported (wrap in table first)");
  868|      2|    }
  869|  12.6k|    if (token_ == ':') {
  ------------------
  |  Branch (869:9): [True: 1.16k, False: 11.5k]
  ------------------
  870|  1.16k|      NEXT();
  ------------------
  |  |   63|  1.16k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  1.16k|  {                            \
  |  |  |  |   57|  1.16k|    auto ce = (call);          \
  |  |  |  |   58|  1.16k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 1.16k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.16k|  }
  |  |  ------------------
  ------------------
  871|  1.16k|      if (token_ != kTokenIntegerConstant) {
  ------------------
  |  Branch (871:11): [True: 11, False: 1.15k]
  ------------------
  872|     11|        return Error("length of fixed-length array must be an integer value");
  873|     11|      }
  874|  1.15k|      uint16_t fixed_length = 0;
  875|  1.15k|      bool check = StringToNumber(attribute_.c_str(), &fixed_length);
  876|  1.15k|      if (!check || fixed_length < 1) {
  ------------------
  |  Branch (876:11): [True: 100, False: 1.05k]
  |  Branch (876:21): [True: 5, False: 1.04k]
  ------------------
  877|    105|        return Error(
  878|    105|            "length of fixed-length array must be positive and fit to "
  879|    105|            "uint16_t type");
  880|    105|      }
  881|  1.04k|      type = Type(BASE_TYPE_ARRAY, subtype.struct_def, subtype.enum_def,
  882|  1.04k|                  fixed_length);
  883|  1.04k|      NEXT();
  ------------------
  |  |   63|  1.04k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  1.04k|  {                            \
  |  |  |  |   57|  1.04k|    auto ce = (call);          \
  |  |  |  |   58|  1.04k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 6, False: 1.03k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.04k|  }
  |  |  ------------------
  ------------------
  884|  11.5k|    } else {
  885|  11.5k|      type = Type(BASE_TYPE_VECTOR, subtype.struct_def, subtype.enum_def);
  886|  11.5k|    }
  887|  12.5k|    type.element = subtype.base_type;
  888|  12.5k|    EXPECT(']');
  ------------------
  |  |   64|  12.5k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  12.5k|  {                            \
  |  |  |  |   57|  12.5k|    auto ce = (call);          \
  |  |  |  |   58|  12.5k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 47, False: 12.5k]
  |  |  |  |  ------------------
  |  |  |  |   59|  12.5k|  }
  |  |  ------------------
  ------------------
  889|  12.5k|  } else {
  890|     48|    return Error("illegal type syntax");
  891|     48|  }
  892|  94.1k|  return NoError();
  893|  94.6k|}
_ZN11flatbuffers6Parser8AddFieldERNS_9StructDefERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKNS_4TypeEPPNS_8FieldDefE:
  896|  79.2k|                              const Type& type, FieldDef** dest) {
  897|  79.2k|  auto& field = *new FieldDef();
  898|  79.2k|  field.value.offset =
  899|  79.2k|      FieldIndexToOffset(static_cast<voffset_t>(struct_def.fields.vec.size()));
  900|  79.2k|  field.name = name;
  901|  79.2k|  field.file = struct_def.file;
  902|  79.2k|  field.value.type = type;
  903|  79.2k|  if (struct_def.fixed) {  // statically compute the field offset
  ------------------
  |  Branch (903:7): [True: 2.86k, False: 76.4k]
  ------------------
  904|  2.86k|    auto size = InlineSize(type);
  905|  2.86k|    auto alignment = InlineAlignment(type);
  906|       |    // structs_ need to have a predictable format, so we need to align to
  907|       |    // the largest scalar
  908|  2.86k|    struct_def.minalign = std::max(struct_def.minalign, alignment);
  909|  2.86k|    struct_def.PadLastField(alignment);
  910|  2.86k|    field.value.offset = static_cast<voffset_t>(struct_def.bytesize);
  911|  2.86k|    struct_def.bytesize += size;
  912|  2.86k|  }
  913|  79.2k|  if (struct_def.fields.Add(name, &field))
  ------------------
  |  Branch (913:7): [True: 62, False: 79.1k]
  ------------------
  914|     62|    return Error("field already exists: " + name);
  915|  79.1k|  *dest = &field;
  916|  79.1k|  return NoError();
  917|  79.2k|}
_ZN11flatbuffers6Parser10ParseFieldERNS_9StructDefE:
  919|  57.1k|CheckedError Parser::ParseField(StructDef& struct_def) {
  920|  57.1k|  std::string name = attribute_;
  921|       |
  922|  57.1k|  if (LookupCreateStruct(name, false, false))
  ------------------
  |  Branch (922:7): [True: 26, False: 57.1k]
  ------------------
  923|     26|    return Error("field name can not be the same as table/struct name");
  924|       |
  925|  57.1k|  if (!IsLowerSnakeCase(name)) {
  ------------------
  |  Branch (925:7): [True: 18.3k, False: 38.8k]
  ------------------
  926|  18.3k|    Warning("field names should be lowercase snake_case, got: " + name);
  927|  18.3k|  }
  928|       |
  929|  57.1k|  std::vector<std::string> dc = doc_comment_;
  930|  57.1k|  EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|  57.1k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  57.1k|  {                            \
  |  |  |  |   57|  57.1k|    auto ce = (call);          \
  |  |  |  |   58|  57.1k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 163, False: 56.9k]
  |  |  |  |  ------------------
  |  |  |  |   59|  57.1k|  }
  |  |  ------------------
  ------------------
  931|  56.9k|  EXPECT(':');
  ------------------
  |  |   64|  56.9k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  56.9k|  {                            \
  |  |  |  |   57|  56.9k|    auto ce = (call);          \
  |  |  |  |   58|  56.9k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 111, False: 56.8k]
  |  |  |  |  ------------------
  |  |  |  |   59|  56.9k|  }
  |  |  ------------------
  ------------------
  932|  56.8k|  Type type;
  933|  56.8k|  ECHECK(ParseType(type));
  ------------------
  |  |   56|  56.8k|  {                            \
  |  |   57|  56.8k|    auto ce = (call);          \
  |  |   58|  56.8k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 75, False: 56.8k]
  |  |  ------------------
  |  |   59|  56.8k|  }
  ------------------
  934|       |
  935|  56.8k|  if (struct_def.fixed) {
  ------------------
  |  Branch (935:7): [True: 2.87k, False: 53.9k]
  ------------------
  936|  2.87k|    if (IsIncompleteStruct(type) ||
  ------------------
  |  Branch (936:9): [True: 3, False: 2.86k]
  |  Branch (936:9): [True: 5, False: 2.86k]
  ------------------
  937|  2.86k|        (IsArray(type) && IsIncompleteStruct(type.VectorType()))) {
  ------------------
  |  Branch (937:10): [True: 1.00k, False: 1.86k]
  |  Branch (937:27): [True: 2, False: 999]
  ------------------
  938|      5|      std::string type_name = IsArray(type) ? type.VectorType().struct_def->name
  ------------------
  |  Branch (938:31): [True: 2, False: 3]
  ------------------
  939|      5|                                            : type.struct_def->name;
  940|      5|      return Error(
  941|      5|          std::string("Incomplete type in struct is not allowed, type name: ") +
  942|      5|          type_name);
  943|      5|    }
  944|       |
  945|  2.86k|    auto valid = IsScalar(type.base_type) || IsStruct(type);
  ------------------
  |  Branch (945:18): [True: 1.37k, False: 1.49k]
  |  Branch (945:46): [True: 489, False: 1.00k]
  ------------------
  946|  2.86k|    if (!valid && IsArray(type)) {
  ------------------
  |  Branch (946:9): [True: 1.00k, False: 1.86k]
  |  Branch (946:19): [True: 999, False: 3]
  ------------------
  947|    999|      const auto& elem_type = type.VectorType();
  948|    999|      valid |= IsScalar(elem_type.base_type) || IsStruct(elem_type);
  ------------------
  |  Branch (948:16): [True: 889, False: 110]
  |  Branch (948:49): [True: 109, False: 1]
  ------------------
  949|    999|    }
  950|  2.86k|    if (!valid)
  ------------------
  |  Branch (950:9): [True: 4, False: 2.86k]
  ------------------
  951|      4|      return Error("structs may contain only scalar or struct fields");
  952|  2.86k|  }
  953|       |
  954|  56.7k|  if (!struct_def.fixed && IsArray(type))
  ------------------
  |  Branch (954:7): [True: 53.9k, False: 2.86k]
  |  Branch (954:28): [True: 1, False: 53.9k]
  ------------------
  955|      1|    return Error("fixed-length array in table must be wrapped in struct");
  956|       |
  957|  56.7k|  if (IsArray(type)) {
  ------------------
  |  Branch (957:7): [True: 998, False: 55.7k]
  ------------------
  958|    998|    advanced_features_ |= reflection::AdvancedArrayFeatures;
  959|    998|    if (!SupportsAdvancedArrayFeatures()) {
  ------------------
  |  Branch (959:9): [True: 0, False: 998]
  ------------------
  960|      0|      return Error(
  961|      0|          "Arrays are not yet supported in all "
  962|      0|          "the specified programming languages.");
  963|      0|    }
  964|    998|  }
  965|       |
  966|  56.7k|  FieldDef* typefield = nullptr;
  967|  56.7k|  if (type.base_type == BASE_TYPE_UNION) {
  ------------------
  |  Branch (967:7): [True: 20.1k, False: 36.6k]
  ------------------
  968|       |    // For union fields, add a second auto-generated field to hold the type,
  969|       |    // with a special suffix.
  970|       |
  971|       |    // To ensure compatibility with many codes that rely on the BASE_TYPE_UTYPE
  972|       |    // value to identify union type fields.
  973|  20.1k|    Type union_type(type.enum_def->underlying_type);
  974|  20.1k|    union_type.base_type = BASE_TYPE_UTYPE;
  975|  20.1k|    ECHECK(AddField(struct_def, name + UnionTypeFieldSuffix(), union_type,
  ------------------
  |  |   56|  20.1k|  {                            \
  |  |   57|  20.1k|    auto ce = (call);          \
  |  |   58|  20.1k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 3, False: 20.1k]
  |  |  ------------------
  |  |   59|  20.1k|  }
  ------------------
  976|  20.1k|                    &typefield));
  977|       |
  978|  36.6k|  } else if (IsVector(type) && type.element == BASE_TYPE_UNION) {
  ------------------
  |  Branch (978:14): [True: 11.4k, False: 25.1k]
  |  Branch (978:32): [True: 2.35k, False: 9.13k]
  ------------------
  979|  2.35k|    advanced_features_ |= reflection::AdvancedUnionFeatures;
  980|       |    // Only cpp, js and ts supports the union vector feature so far.
  981|  2.35k|    if (!SupportsAdvancedUnionFeatures()) {
  ------------------
  |  Branch (981:9): [True: 0, False: 2.35k]
  ------------------
  982|      0|      return Error(
  983|      0|          "Vectors of unions are not yet supported in at least one of "
  984|      0|          "the specified programming languages.");
  985|      0|    }
  986|       |    // For vector of union fields, add a second auto-generated vector field to
  987|       |    // hold the types, with a special suffix.
  988|  2.35k|    Type union_vector(BASE_TYPE_VECTOR, nullptr, type.enum_def);
  989|  2.35k|    union_vector.element = BASE_TYPE_UTYPE;
  990|  2.35k|    ECHECK(AddField(struct_def, name + UnionTypeFieldSuffix(), union_vector,
  ------------------
  |  |   56|  2.35k|  {                            \
  |  |   57|  2.35k|    auto ce = (call);          \
  |  |   58|  2.35k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1, False: 2.35k]
  |  |  ------------------
  |  |   59|  2.35k|  }
  ------------------
  991|  2.35k|                    &typefield));
  992|  2.35k|  }
  993|       |
  994|  56.7k|  FieldDef* field;
  995|  56.7k|  ECHECK(AddField(struct_def, name, type, &field));
  ------------------
  |  |   56|  56.7k|  {                            \
  |  |   57|  56.7k|    auto ce = (call);          \
  |  |   58|  56.7k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 58, False: 56.7k]
  |  |  ------------------
  |  |   59|  56.7k|  }
  ------------------
  996|       |
  997|  56.7k|  if (typefield) {
  ------------------
  |  Branch (997:7): [True: 22.4k, False: 34.2k]
  ------------------
  998|       |    // We preserve the relation between the typefield
  999|       |    // and field, so we can easily map it in the code
 1000|       |    // generators.
 1001|  22.4k|    typefield->sibling_union_field = field;
 1002|  22.4k|    field->sibling_union_field = typefield;
 1003|  22.4k|  }
 1004|       |
 1005|  56.7k|  if (token_ == '=') {
  ------------------
  |  Branch (1005:7): [True: 4.27k, False: 52.4k]
  ------------------
 1006|  4.27k|    NEXT();
  ------------------
  |  |   63|  4.27k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  4.27k|  {                            \
  |  |  |  |   57|  4.27k|    auto ce = (call);          \
  |  |  |  |   58|  4.27k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 4, False: 4.26k]
  |  |  |  |  ------------------
  |  |  |  |   59|  4.27k|  }
  |  |  ------------------
  ------------------
 1007|  4.26k|    ECHECK(ParseSingleValue(&field->name, field->value, true));
  ------------------
  |  |   56|  4.26k|  {                            \
  |  |   57|  4.26k|    auto ce = (call);          \
  |  |   58|  4.26k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1.16k, False: 3.10k]
  |  |  ------------------
  |  |   59|  4.26k|  }
  ------------------
 1008|  3.10k|    if (IsStruct(type) || (struct_def.fixed && field->value.constant != "0"))
  ------------------
  |  Branch (1008:9): [True: 0, False: 3.10k]
  |  Branch (1008:28): [True: 201, False: 2.90k]
  |  Branch (1008:48): [True: 10, False: 191]
  ------------------
 1009|     10|      return Error(
 1010|     10|          "default values are not supported for struct fields, table fields, "
 1011|     10|          "or in structs.");
 1012|  3.09k|    if (IsString(type) || IsVector(type)) {
  ------------------
  |  Branch (1012:9): [True: 75, False: 3.01k]
  |  Branch (1012:27): [True: 49, False: 2.96k]
  ------------------
 1013|    124|      advanced_features_ |= reflection::DefaultVectorsAndStrings;
 1014|    124|      if (field->value.constant != "0" && !SupportsDefaultVectorsAndStrings()) {
  ------------------
  |  Branch (1014:11): [True: 106, False: 18]
  |  Branch (1014:43): [True: 0, False: 106]
  ------------------
 1015|      0|        return Error(
 1016|      0|            "Default values for strings and vectors are not supported in one "
 1017|      0|            "of the specified programming languages");
 1018|      0|      }
 1019|    124|    }
 1020|       |
 1021|  3.09k|    if (IsVector(type) && field->value.constant != "0" &&
  ------------------
  |  Branch (1021:9): [True: 49, False: 3.04k]
  |  Branch (1021:27): [True: 49, False: 0]
  ------------------
 1022|     49|        field->value.constant != "[]") {
  ------------------
  |  Branch (1022:9): [True: 0, False: 49]
  ------------------
 1023|      0|      return Error("The only supported default for vectors is `[]`.");
 1024|      0|    }
 1025|  3.09k|  }
 1026|       |
 1027|       |  // Append .0 if the value has not it (skip hex and scientific floats).
 1028|       |  // This suffix needed for generated C++ code.
 1029|  55.5k|  if (IsFloat(type.base_type)) {
  ------------------
  |  Branch (1029:7): [True: 963, False: 54.5k]
  ------------------
 1030|    963|    auto& text = field->value.constant;
 1031|    963|    FLATBUFFERS_ASSERT(false == text.empty());
 1032|    963|    auto s = text.c_str();
 1033|  1.15k|    while (*s == ' ') s++;
  ------------------
  |  Branch (1033:12): [True: 194, False: 963]
  ------------------
 1034|    963|    if (*s == '-' || *s == '+') s++;
  ------------------
  |  Branch (1034:9): [True: 33, False: 930]
  |  Branch (1034:22): [True: 13, False: 917]
  ------------------
 1035|       |    // 1) A float constants (nan, inf, pi, etc) is a kind of identifier.
 1036|       |    // 2) A float number needn't ".0" at the end if it has exponent.
 1037|    963|    if ((false == IsIdentifierStart(*s)) &&
  ------------------
  |  Branch (1037:9): [True: 673, False: 290]
  ------------------
 1038|    673|        (std::string::npos == field->value.constant.find_first_of(".eEpP"))) {
  ------------------
  |  Branch (1038:9): [True: 576, False: 97]
  ------------------
 1039|    576|      field->value.constant += ".0";
 1040|    576|    }
 1041|    963|  }
 1042|       |
 1043|  55.5k|  field->doc_comment = dc;
 1044|  55.5k|  ECHECK(ParseMetaData(&field->attributes));
  ------------------
  |  |   56|  55.5k|  {                            \
  |  |   57|  55.5k|    auto ce = (call);          \
  |  |   58|  55.5k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 26, False: 55.5k]
  |  |  ------------------
  |  |   59|  55.5k|  }
  ------------------
 1045|  55.5k|  field->deprecated = field->attributes.Lookup("deprecated") != nullptr;
 1046|  55.5k|  auto hash_name = field->attributes.Lookup("hash");
 1047|  55.5k|  if (hash_name) {
  ------------------
  |  Branch (1047:7): [True: 404, False: 55.1k]
  ------------------
 1048|    404|    switch ((IsVector(type)) ? type.element : type.base_type) {
  ------------------
  |  Branch (1048:13): [True: 211, False: 193]
  ------------------
 1049|     60|      case BASE_TYPE_SHORT:
  ------------------
  |  Branch (1049:7): [True: 60, False: 344]
  ------------------
 1050|     62|      case BASE_TYPE_USHORT: {
  ------------------
  |  Branch (1050:7): [True: 2, False: 402]
  ------------------
 1051|     62|        if (FindHashFunction16(hash_name->constant.c_str()) == nullptr)
  ------------------
  |  Branch (1051:13): [True: 45, False: 17]
  ------------------
 1052|     45|          return Error("Unknown hashing algorithm for 16 bit types: " +
 1053|     45|                       hash_name->constant);
 1054|     17|        break;
 1055|     62|      }
 1056|    107|      case BASE_TYPE_INT:
  ------------------
  |  Branch (1056:7): [True: 107, False: 297]
  ------------------
 1057|    160|      case BASE_TYPE_UINT: {
  ------------------
  |  Branch (1057:7): [True: 53, False: 351]
  ------------------
 1058|    160|        if (FindHashFunction32(hash_name->constant.c_str()) == nullptr)
  ------------------
  |  Branch (1058:13): [True: 63, False: 97]
  ------------------
 1059|     63|          return Error("Unknown hashing algorithm for 32 bit types: " +
 1060|     63|                       hash_name->constant);
 1061|     97|        break;
 1062|    160|      }
 1063|    137|      case BASE_TYPE_LONG:
  ------------------
  |  Branch (1063:7): [True: 137, False: 267]
  ------------------
 1064|    176|      case BASE_TYPE_ULONG: {
  ------------------
  |  Branch (1064:7): [True: 39, False: 365]
  ------------------
 1065|    176|        if (FindHashFunction64(hash_name->constant.c_str()) == nullptr)
  ------------------
  |  Branch (1065:13): [True: 53, False: 123]
  ------------------
 1066|     53|          return Error("Unknown hashing algorithm for 64 bit types: " +
 1067|     53|                       hash_name->constant);
 1068|    123|        break;
 1069|    176|      }
 1070|    123|      default:
  ------------------
  |  Branch (1070:7): [True: 6, False: 398]
  ------------------
 1071|      6|        return Error(
 1072|      6|            "only short, ushort, int, uint, long and ulong data types support "
 1073|      6|            "hashing.");
 1074|    404|    }
 1075|    404|  }
 1076|       |
 1077|  55.3k|  if (field->attributes.Lookup("vector64") != nullptr) {
  ------------------
  |  Branch (1077:7): [True: 107, False: 55.2k]
  ------------------
 1078|    107|    if (!IsVector(type)) {
  ------------------
  |  Branch (1078:9): [True: 3, False: 104]
  ------------------
 1079|      3|      return Error("`vector64` attribute can only be applied on vectors.");
 1080|      3|    }
 1081|       |
 1082|       |    // Upgrade the type to be a BASE_TYPE_VECTOR64, since the attributes are
 1083|       |    // parsed after the type.
 1084|    104|    const BaseType element_base_type = type.element;
 1085|    104|    type = Type(BASE_TYPE_VECTOR64, type.struct_def, type.enum_def);
 1086|    104|    type.element = element_base_type;
 1087|       |
 1088|       |    // Since the field was already added to the parent object, update the type
 1089|       |    // in place.
 1090|    104|    field->value.type = type;
 1091|       |
 1092|       |    // 64-bit vectors imply the offset64 attribute.
 1093|    104|    field->offset64 = true;
 1094|    104|  }
 1095|       |
 1096|       |  // Record that this field uses 64-bit offsets.
 1097|  55.3k|  if (field->attributes.Lookup("offset64") != nullptr) {
  ------------------
  |  Branch (1097:7): [True: 268, False: 55.0k]
  ------------------
 1098|       |    // TODO(derekbailey): would be nice to have this be a recommendation or hint
 1099|       |    // instead of a warning.
 1100|    268|    if (type.base_type == BASE_TYPE_VECTOR64) {
  ------------------
  |  Branch (1100:9): [True: 1, False: 267]
  ------------------
 1101|      1|      Warning("attribute `vector64` implies `offset64` and isn't required.");
 1102|      1|    }
 1103|       |
 1104|    268|    field->offset64 = true;
 1105|    268|  }
 1106|       |
 1107|       |  // Check for common conditions with Offset64 fields.
 1108|  55.3k|  if (field->offset64) {
  ------------------
  |  Branch (1108:7): [True: 371, False: 54.9k]
  ------------------
 1109|       |    // TODO(derekbailey): this is where we can disable string support for
 1110|       |    // offset64, as that is not a hard requirement to have.
 1111|    371|    if (!IsString(type) && !IsVector(type)) {
  ------------------
  |  Branch (1111:9): [True: 348, False: 23]
  |  Branch (1111:28): [True: 6, False: 342]
  ------------------
 1112|      6|      return Error(
 1113|      6|          "only string and vectors can have `offset64` attribute applied");
 1114|      6|    }
 1115|       |
 1116|       |    // If this is a Vector, only scalar and scalar-like (structs) items are
 1117|       |    // allowed.
 1118|       |    // TODO(derekbailey): allow vector of strings, just require that the strings
 1119|       |    // are Offset64<string>.
 1120|    365|    if (IsVector(type) &&
  ------------------
  |  Branch (1120:9): [True: 342, False: 23]
  |  Branch (1120:9): [True: 10, False: 355]
  ------------------
 1121|    342|        !((IsScalar(type.element) && !IsEnum(type.VectorType())) ||
  ------------------
  |  Branch (1121:12): [True: 328, False: 14]
  |  Branch (1121:38): [True: 327, False: 1]
  ------------------
 1122|     15|          IsStruct(type.VectorType()))) {
  ------------------
  |  Branch (1122:11): [True: 5, False: 10]
  ------------------
 1123|     10|      return Error("only vectors of scalars are allowed to be 64-bit.");
 1124|     10|    }
 1125|       |
 1126|       |    // Lastly, check if it is supported by the specified generated languages. Do
 1127|       |    // this last so the above checks can inform the user of schema errors to fix
 1128|       |    // first.
 1129|    355|    if (!Supports64BitOffsets()) {
  ------------------
  |  Branch (1129:9): [True: 0, False: 355]
  ------------------
 1130|      0|      return Error(
 1131|      0|          "fields using 64-bit offsets are not yet supported in at least one "
 1132|      0|          "of the specified programming languages.");
 1133|      0|    }
 1134|    355|  }
 1135|       |
 1136|  55.3k|  field->key = field->attributes.Lookup("key") != nullptr;
 1137|       |
 1138|  55.3k|  if (!struct_def.fixed) {
  ------------------
  |  Branch (1138:7): [True: 52.5k, False: 2.81k]
  ------------------
 1139|       |    // For historical convenience reasons, string keys are assumed required.
 1140|       |    // Scalars are kDefault unless otherwise specified.
 1141|       |    // Nonscalars are kOptional unless required;
 1142|  52.5k|    const bool required = field->attributes.Lookup("required") != nullptr ||
  ------------------
  |  Branch (1142:27): [True: 39, False: 52.4k]
  ------------------
 1143|  52.4k|                          (IsString(type) && field->key);
  ------------------
  |  Branch (1143:28): [True: 386, False: 52.1k]
  |  Branch (1143:46): [True: 121, False: 265]
  ------------------
 1144|  52.5k|    const bool default_str_or_vec =
 1145|  52.5k|        ((IsString(type) || IsVector(type)) && field->value.constant != "0");
  ------------------
  |  Branch (1145:11): [True: 388, False: 52.1k]
  |  Branch (1145:29): [True: 11.3k, False: 40.7k]
  |  Branch (1145:48): [True: 101, False: 11.6k]
  ------------------
 1146|  52.5k|    const bool optional = IsScalar(type.base_type)
  ------------------
  |  Branch (1146:27): [True: 4.97k, False: 47.5k]
  ------------------
 1147|  52.5k|                              ? (field->value.constant == "null")
 1148|  52.5k|                              : !(required || default_str_or_vec);
  ------------------
  |  Branch (1148:35): [True: 159, False: 47.3k]
  |  Branch (1148:47): [True: 100, False: 47.2k]
  ------------------
 1149|  52.5k|    if (required && optional) {
  ------------------
  |  Branch (1149:9): [True: 160, False: 52.3k]
  |  Branch (1149:21): [True: 0, False: 160]
  ------------------
 1150|      0|      return Error("Fields cannot be both optional and required.");
 1151|      0|    }
 1152|  52.5k|    field->presence = FieldDef::MakeFieldPresence(optional, required);
 1153|       |
 1154|  52.5k|    if (required && IsScalar(type.base_type)) {
  ------------------
  |  Branch (1154:9): [True: 160, False: 52.3k]
  |  Branch (1154:21): [True: 1, False: 159]
  ------------------
 1155|      1|      return Error("only non-scalar fields in tables may be 'required'");
 1156|      1|    }
 1157|  52.5k|  } else {
 1158|       |    // all struct fields are required
 1159|  2.81k|    field->presence = FieldDef::kDefault;
 1160|       |
 1161|       |    // setting required or optional on a struct field is meaningless
 1162|  2.81k|    if (field->attributes.Lookup("required") != nullptr ||
  ------------------
  |  Branch (1162:9): [True: 1, False: 2.81k]
  |  Branch (1162:9): [True: 1, False: 2.81k]
  ------------------
 1163|  2.81k|        field->attributes.Lookup("optional") != nullptr) {
  ------------------
  |  Branch (1163:9): [True: 0, False: 2.81k]
  ------------------
 1164|      1|      return Error("struct fields are always required");
 1165|      1|    }
 1166|  2.81k|  }
 1167|       |
 1168|  55.3k|  if (field->key) {
  ------------------
  |  Branch (1168:7): [True: 1.14k, False: 54.1k]
  ------------------
 1169|  1.14k|    if (struct_def.has_key) return Error("only one field may be set as 'key'");
  ------------------
  |  Branch (1169:9): [True: 2, False: 1.14k]
  ------------------
 1170|  1.14k|    struct_def.has_key = true;
 1171|  1.14k|    auto is_valid =
 1172|  1.14k|        IsScalar(type.base_type) || IsString(type) || IsStruct(type);
  ------------------
  |  Branch (1172:9): [True: 1.01k, False: 130]
  |  Branch (1172:37): [True: 121, False: 9]
  |  Branch (1172:55): [True: 1, False: 8]
  ------------------
 1173|  1.14k|    if (IsArray(type)) {
  ------------------
  |  Branch (1173:9): [True: 2, False: 1.14k]
  ------------------
 1174|      2|      is_valid |=
 1175|      2|          IsScalar(type.VectorType().base_type) || IsStruct(type.VectorType());
  ------------------
  |  Branch (1175:11): [True: 1, False: 1]
  |  Branch (1175:52): [True: 1, False: 0]
  ------------------
 1176|      2|    }
 1177|  1.14k|    if (!is_valid) {
  ------------------
  |  Branch (1177:9): [True: 6, False: 1.13k]
  ------------------
 1178|      6|      return Error(
 1179|      6|          "'key' field must be string, scalar type or fixed size array of "
 1180|      6|          "scalars");
 1181|      6|    }
 1182|  1.14k|  }
 1183|       |
 1184|  55.3k|  if (field->IsScalarOptional()) {
  ------------------
  |  Branch (1184:7): [True: 913, False: 54.4k]
  ------------------
 1185|    913|    advanced_features_ |= reflection::OptionalScalars;
 1186|    913|    if (type.enum_def && type.enum_def->Lookup("null")) {
  ------------------
  |  Branch (1186:9): [True: 202, False: 711]
  |  Branch (1186:9): [True: 0, False: 913]
  |  Branch (1186:26): [True: 0, False: 202]
  ------------------
 1187|      0|      FLATBUFFERS_ASSERT(IsInteger(type.base_type));
 1188|      0|      return Error(
 1189|      0|          "the default 'null' is reserved for declaring optional scalar "
 1190|      0|          "fields, it conflicts with declaration of enum '" +
 1191|      0|          type.enum_def->name + "'.");
 1192|      0|    }
 1193|    913|    if (field->attributes.Lookup("key")) {
  ------------------
  |  Branch (1193:9): [True: 1, False: 912]
  ------------------
 1194|      1|      return Error(
 1195|      1|          "only a non-optional scalar field can be used as a 'key' field");
 1196|      1|    }
 1197|    912|    if (!SupportsOptionalScalars()) {
  ------------------
  |  Branch (1197:9): [True: 0, False: 912]
  ------------------
 1198|      0|      return Error(
 1199|      0|          "Optional scalars are not yet supported in at least one of "
 1200|      0|          "the specified programming languages.");
 1201|      0|    }
 1202|    912|  }
 1203|       |
 1204|  55.3k|  auto check_enum = [this](const FieldDef* field, const Type& type,
 1205|  55.3k|                           const std::string& name,
 1206|  55.3k|                           const std::string& constant) -> CheckedError {
 1207|       |    // Optional and bitflags enums may have default constants that are not
 1208|       |    // their specified variants.
 1209|  55.3k|    if (!field->IsOptional() &&
 1210|  55.3k|        type.enum_def->attributes.Lookup("bit_flags") == nullptr) {
 1211|  55.3k|      if (type.enum_def->FindByValue(constant) == nullptr) {
 1212|  55.3k|        return Error("default value of `" + constant + "` for " + "field `" +
 1213|  55.3k|                     name + "` is not part of enum `" + type.enum_def->name +
 1214|  55.3k|                     "`.");
 1215|  55.3k|      }
 1216|  55.3k|    }
 1217|       |
 1218|  55.3k|    return NoError();
 1219|  55.3k|  };
 1220|       |
 1221|  55.3k|  if (type.enum_def) {
  ------------------
  |  Branch (1221:7): [True: 23.9k, False: 31.3k]
  ------------------
 1222|       |    // Verify the enum's type and default value.
 1223|  23.9k|    const std::string& constant = field->value.constant;
 1224|  23.9k|    if (type.base_type == BASE_TYPE_UNION) {
  ------------------
  |  Branch (1224:9): [True: 20.1k, False: 3.86k]
  ------------------
 1225|  20.1k|      if (constant != "0") {
  ------------------
  |  Branch (1225:11): [True: 0, False: 20.1k]
  ------------------
 1226|      0|        return Error("Union defaults must be NONE");
 1227|      0|      }
 1228|  20.1k|    } else if (IsVector(type)) {
  ------------------
  |  Branch (1228:16): [True: 2.36k, False: 1.50k]
  ------------------
 1229|  2.36k|      if (constant != "0" && constant != "[]") {
  ------------------
  |  Branch (1229:11): [True: 11, False: 2.34k]
  |  Branch (1229:30): [True: 0, False: 11]
  ------------------
 1230|      0|        return Error("Vector defaults may only be `[]`.");
 1231|      0|      }
 1232|  2.36k|    } else if (IsArray(type)) {
  ------------------
  |  Branch (1232:16): [True: 18, False: 1.48k]
  ------------------
 1233|     18|      if (constant != "0") {
  ------------------
  |  Branch (1233:11): [True: 0, False: 18]
  ------------------
 1234|      0|        return Error("Array defaults are not supported yet.");
 1235|      0|      }
 1236|     18|      CheckedError err = check_enum(field, type.VectorType(), name, constant);
 1237|     18|      if (err.Check()) {
  ------------------
  |  Branch (1237:11): [True: 0, False: 18]
  ------------------
 1238|       |        // reset the check state of the error
 1239|      0|        return CheckedError{err};
 1240|      0|      }
 1241|  1.48k|    } else {
 1242|  1.48k|      if (!IsInteger(type.base_type)) {
  ------------------
  |  Branch (1242:11): [True: 0, False: 1.48k]
  ------------------
 1243|      0|        return Error("Enums must have integer base types");
 1244|      0|      }
 1245|  1.48k|      CheckedError err = check_enum(field, type, name, constant);
 1246|  1.48k|      if (err.Check()) {
  ------------------
  |  Branch (1246:11): [True: 90, False: 1.39k]
  ------------------
 1247|       |        // reset the check state of the error
 1248|     90|        return CheckedError{err};
 1249|     90|      }
 1250|  1.48k|    }
 1251|  23.9k|  }
 1252|       |
 1253|  55.2k|  if (field->deprecated && struct_def.fixed)
  ------------------
  |  Branch (1253:7): [True: 72, False: 55.1k]
  |  Branch (1253:28): [True: 1, False: 71]
  ------------------
 1254|      1|    return Error("can't deprecate fields in a struct");
 1255|       |
 1256|  55.2k|  auto cpp_type = field->attributes.Lookup("cpp_type");
 1257|  55.2k|  if (cpp_type) {
  ------------------
  |  Branch (1257:7): [True: 2, False: 55.2k]
  ------------------
 1258|      2|    if (!hash_name)
  ------------------
  |  Branch (1258:9): [True: 1, False: 1]
  ------------------
 1259|      1|      return Error("cpp_type can only be used with a hashed field");
 1260|       |    /// forcing cpp_ptr_type to 'naked' if unset
 1261|      1|    auto cpp_ptr_type = field->attributes.Lookup("cpp_ptr_type");
 1262|      1|    if (!cpp_ptr_type) {
  ------------------
  |  Branch (1262:9): [True: 1, False: 0]
  ------------------
 1263|      1|      auto val = new Value();
 1264|      1|      val->type = cpp_type->type;
 1265|      1|      val->constant = "naked";
 1266|      1|      field->attributes.Add("cpp_ptr_type", val);
 1267|      1|    }
 1268|      1|  }
 1269|       |
 1270|  55.2k|  field->shared = field->attributes.Lookup("shared") != nullptr;
 1271|  55.2k|  if (field->shared && field->value.type.base_type != BASE_TYPE_STRING)
  ------------------
  |  Branch (1271:7): [True: 177, False: 55.0k]
  |  Branch (1271:24): [True: 3, False: 174]
  ------------------
 1272|      3|    return Error("shared can only be defined on strings");
 1273|       |
 1274|  55.2k|  auto field_native_custom_alloc =
 1275|  55.2k|      field->attributes.Lookup("native_custom_alloc");
 1276|  55.2k|  if (field_native_custom_alloc)
  ------------------
  |  Branch (1276:7): [True: 1, False: 55.2k]
  ------------------
 1277|      1|    return Error(
 1278|      1|        "native_custom_alloc can only be used with a table or struct "
 1279|      1|        "definition");
 1280|       |
 1281|  55.2k|  field->native_inline = field->attributes.Lookup("native_inline") != nullptr;
 1282|  55.2k|  if (field->native_inline && !IsStruct(field->value.type) &&
  ------------------
  |  Branch (1282:7): [True: 44, False: 55.1k]
  |  Branch (1282:31): [True: 34, False: 10]
  ------------------
 1283|     34|      !IsVectorOfStruct(field->value.type) &&
  ------------------
  |  Branch (1283:7): [True: 24, False: 10]
  ------------------
 1284|     24|      !IsVectorOfTable(field->value.type))
  ------------------
  |  Branch (1284:7): [True: 6, False: 18]
  ------------------
 1285|      6|    return Error(
 1286|      6|        "'native_inline' can only be defined on structs, vector of structs or "
 1287|      6|        "vector of tables");
 1288|       |
 1289|  55.2k|  auto nested = field->attributes.Lookup("nested_flatbuffer");
 1290|  55.2k|  if (nested) {
  ------------------
  |  Branch (1290:7): [True: 5, False: 55.2k]
  ------------------
 1291|      5|    if (nested->type.base_type != BASE_TYPE_STRING)
  ------------------
  |  Branch (1291:9): [True: 1, False: 4]
  ------------------
 1292|      1|      return Error(
 1293|      1|          "nested_flatbuffer attribute must be a string (the root type)");
 1294|      4|    if (!IsVector(type.base_type) || type.element != BASE_TYPE_UCHAR)
  ------------------
  |  Branch (1294:9): [True: 2, False: 2]
  |  Branch (1294:38): [True: 1, False: 1]
  ------------------
 1295|      3|      return Error(
 1296|      3|          "nested_flatbuffer attribute may only apply to a vector of ubyte");
 1297|       |    // This will cause an error if the root type of the nested flatbuffer
 1298|       |    // wasn't defined elsewhere.
 1299|      1|    field->nested_flatbuffer = LookupCreateStruct(nested->constant);
 1300|      1|  }
 1301|       |
 1302|  55.2k|  if (field->attributes.Lookup("flexbuffer")) {
  ------------------
  |  Branch (1302:7): [True: 4.11k, False: 51.1k]
  ------------------
 1303|  4.11k|    field->flexbuffer = true;
 1304|  4.11k|    uses_flexbuffers_ = true;
 1305|  4.11k|    if (type.base_type != BASE_TYPE_VECTOR || type.element != BASE_TYPE_UCHAR)
  ------------------
  |  Branch (1305:9): [True: 3, False: 4.10k]
  |  Branch (1305:47): [True: 2, False: 4.10k]
  ------------------
 1306|      5|      return Error("flexbuffer attribute may only apply to a vector of ubyte");
 1307|  4.11k|  }
 1308|       |
 1309|  55.2k|  if (typefield) {
  ------------------
  |  Branch (1309:7): [True: 22.4k, False: 32.7k]
  ------------------
 1310|  22.4k|    if (!IsScalar(typefield->value.type.base_type)) {
  ------------------
  |  Branch (1310:9): [True: 2.35k, False: 20.1k]
  ------------------
 1311|       |      // this is a union vector field
 1312|  2.35k|      typefield->presence = field->presence;
 1313|  2.35k|    }
 1314|       |    // If this field is a union, and it has a manually assigned id,
 1315|       |    // the automatically added type field should have an id as well (of N - 1).
 1316|  22.4k|    auto attr = field->attributes.Lookup("id");
 1317|  22.4k|    if (attr) {
  ------------------
  |  Branch (1317:9): [True: 3.80k, False: 18.6k]
  ------------------
 1318|  3.80k|      const auto& id_str = attr->constant;
 1319|  3.80k|      voffset_t id = 0;
 1320|  3.80k|      const auto done = !atot(id_str.c_str(), *this, &id).Check();
 1321|  3.80k|      if (done && id > 0) {
  ------------------
  |  Branch (1321:11): [True: 3.79k, False: 3]
  |  Branch (1321:19): [True: 3.79k, False: 4]
  ------------------
 1322|  3.79k|        auto val = new Value();
 1323|  3.79k|        val->type = attr->type;
 1324|  3.79k|        val->constant = NumToString(id - 1);
 1325|  3.79k|        typefield->attributes.Add("id", val);
 1326|  3.79k|      } else {
 1327|      7|        return Error(
 1328|      7|            "a union type effectively adds two fields with non-negative ids, "
 1329|      7|            "its id must be that of the second field (the first field is "
 1330|      7|            "the type field and not explicitly declared in the schema);\n"
 1331|      7|            "field: " +
 1332|      7|            field->name + ", id: " + id_str);
 1333|      7|      }
 1334|  3.80k|    }
 1335|       |    // if this field is a union that is deprecated,
 1336|       |    // the automatically added type field should be deprecated as well
 1337|  22.4k|    if (field->deprecated) {
  ------------------
  |  Branch (1337:9): [True: 19, False: 22.4k]
  ------------------
 1338|     19|      typefield->deprecated = true;
 1339|     19|    }
 1340|  22.4k|  }
 1341|       |
 1342|  55.2k|  EXPECT(';');
  ------------------
  |  |   64|  55.2k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  55.2k|  {                            \
  |  |  |  |   57|  55.2k|    auto ce = (call);          \
  |  |  |  |   58|  55.2k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 730, False: 54.4k]
  |  |  |  |  ------------------
  |  |  |  |   59|  55.2k|  }
  |  |  ------------------
  ------------------
 1343|  54.4k|  return NoError();
 1344|  55.2k|}
_ZN11flatbuffers6Parser11ParseStringERNS_5ValueEb:
 1346|  5.10k|CheckedError Parser::ParseString(Value& val, bool use_string_pooling) {
 1347|  5.10k|  auto s = attribute_;
 1348|  5.10k|  EXPECT(kTokenStringConstant);
  ------------------
  |  |   64|  5.10k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  5.10k|  {                            \
  |  |  |  |   57|  5.10k|    auto ce = (call);          \
  |  |  |  |   58|  5.10k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 11, False: 5.08k]
  |  |  |  |  ------------------
  |  |  |  |   59|  5.10k|  }
  |  |  ------------------
  ------------------
 1349|  5.08k|  if (use_string_pooling) {
  ------------------
  |  Branch (1349:7): [True: 1.98k, False: 3.10k]
  ------------------
 1350|  1.98k|    val.constant = NumToString(builder_.CreateSharedString(s).o);
 1351|  3.10k|  } else {
 1352|  3.10k|    val.constant = NumToString(builder_.CreateString(s).o);
 1353|  3.10k|  }
 1354|  5.08k|  return NoError();
 1355|  5.10k|}
_ZN11flatbuffers6Parser10ParseCommaEv:
 1357|   545k|CheckedError Parser::ParseComma() {
 1358|   545k|  if (!opts.protobuf_ascii_alike) EXPECT(',');
  ------------------
  |  |   64|   545k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|   545k|  {                            \
  |  |  |  |   57|   545k|    auto ce = (call);          \
  |  |  |  |   58|   545k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 4.67k, False: 540k]
  |  |  |  |  ------------------
  |  |  |  |   59|   545k|  }
  |  |  ------------------
  ------------------
  |  Branch (1358:7): [True: 545k, False: 0]
  ------------------
 1359|   540k|  return NoError();
 1360|   545k|}
_ZN11flatbuffers6Parser13ParseAnyValueERNS_5ValueEPNS_8FieldDefEmPKNS_9StructDefEmb:
 1365|   385k|                                   size_t count, bool inside_vector) {
 1366|   385k|  switch (val.type.base_type) {
 1367|    312|    case BASE_TYPE_UNION: {
  ------------------
  |  Branch (1367:5): [True: 312, False: 385k]
  ------------------
 1368|    312|      FLATBUFFERS_ASSERT(field);
 1369|    312|      std::string constant;
 1370|    312|      Vector<uint8_t>* vector_of_union_types = nullptr;
 1371|       |      // Find corresponding type field we may have already parsed.
 1372|    312|      for (auto elem = field_stack_.rbegin() + count;
 1373|    376|           elem != field_stack_.rbegin() + parent_fieldn + count; ++elem) {
  ------------------
  |  Branch (1373:12): [True: 338, False: 38]
  ------------------
 1374|    338|        auto& type = elem->second->value.type;
 1375|    338|        if (type.enum_def == val.type.enum_def) {
  ------------------
  |  Branch (1375:13): [True: 338, False: 0]
  ------------------
 1376|    338|          if (inside_vector) {
  ------------------
  |  Branch (1376:15): [True: 207, False: 131]
  ------------------
 1377|    207|            if (IsVector(type) && type.element == BASE_TYPE_UTYPE) {
  ------------------
  |  Branch (1377:17): [True: 207, False: 0]
  |  Branch (1377:35): [True: 143, False: 64]
  ------------------
 1378|       |              // Vector of union type field.
 1379|    143|              uoffset_t offset;
 1380|    143|              ECHECK(atot(elem->first.constant.c_str(), *this, &offset));
  ------------------
  |  |   56|    143|  {                            \
  |  |   57|    143|    auto ce = (call);          \
  |  |   58|    143|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 0, False: 143]
  |  |  ------------------
  |  |   59|    143|  }
  ------------------
 1381|    143|              vector_of_union_types = reinterpret_cast<Vector<uint8_t>*>(
 1382|    143|                  builder_.GetCurrentBufferPointer() + builder_.GetSize() -
 1383|    143|                  offset);
 1384|    143|              break;
 1385|    143|            }
 1386|    207|          } else {
 1387|    131|            if (type.base_type == BASE_TYPE_UTYPE) {
  ------------------
  |  Branch (1387:17): [True: 131, False: 0]
  ------------------
 1388|       |              // Union type field.
 1389|    131|              constant = elem->first.constant;
 1390|    131|              break;
 1391|    131|            }
 1392|    131|          }
 1393|    338|        }
 1394|    338|      }
 1395|    312|      if (constant.empty() && !inside_vector) {
  ------------------
  |  Branch (1395:11): [True: 190, False: 122]
  |  Branch (1395:31): [True: 45, False: 145]
  ------------------
 1396|       |        // We haven't seen the type field yet. Sadly a lot of JSON writers
 1397|       |        // output these in alphabetical order, meaning it comes after this
 1398|       |        // value. So we scan past the value to find it, then come back here.
 1399|       |        // We currently don't do this for vectors of unions because the
 1400|       |        // scanning/serialization logic would get very complicated.
 1401|     45|        auto type_name = field->name + UnionTypeFieldSuffix();
 1402|     45|        FLATBUFFERS_ASSERT(parent_struct_def);
 1403|     45|        auto type_field = parent_struct_def->fields.Lookup(type_name);
 1404|     45|        FLATBUFFERS_ASSERT(type_field);  // Guaranteed by ParseField().
 1405|       |        // Remember where we are in the source file, so we can come back here.
 1406|     45|        auto backup = *static_cast<ParserState*>(this);
 1407|     45|        ECHECK(SkipAnyJsonValue());  // The table.
  ------------------
  |  |   56|     45|  {                            \
  |  |   57|     45|    auto ce = (call);          \
  |  |   58|     45|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 6, False: 39]
  |  |  ------------------
  |  |   59|     45|  }
  ------------------
 1408|     39|        ECHECK(ParseComma());
  ------------------
  |  |   56|     39|  {                            \
  |  |   57|     39|    auto ce = (call);          \
  |  |   58|     39|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 2, False: 37]
  |  |  ------------------
  |  |   59|     39|  }
  ------------------
 1409|     37|        auto next_name = attribute_;
 1410|     37|        if (Is(kTokenStringConstant)) {
  ------------------
  |  Branch (1410:13): [True: 5, False: 32]
  ------------------
 1411|      5|          NEXT();
  ------------------
  |  |   63|      5|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|      5|  {                            \
  |  |  |  |   57|      5|    auto ce = (call);          \
  |  |  |  |   58|      5|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 4]
  |  |  |  |  ------------------
  |  |  |  |   59|      5|  }
  |  |  ------------------
  ------------------
 1412|     32|        } else {
 1413|     32|          EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|     32|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|     32|  {                            \
  |  |  |  |   57|     32|    auto ce = (call);          \
  |  |  |  |   58|     32|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 30]
  |  |  |  |  ------------------
  |  |  |  |   59|     32|  }
  |  |  ------------------
  ------------------
 1414|     30|        }
 1415|     34|        if (next_name == type_name) {
  ------------------
  |  Branch (1415:13): [True: 27, False: 7]
  ------------------
 1416|     27|          EXPECT(':');
  ------------------
  |  |   64|     27|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|     27|  {                            \
  |  |  |  |   57|     27|    auto ce = (call);          \
  |  |  |  |   58|     27|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 25]
  |  |  |  |  ------------------
  |  |  |  |   59|     27|  }
  |  |  ------------------
  ------------------
 1417|     25|          ParseDepthGuard depth_guard(this);
 1418|     25|          ECHECK(depth_guard.Check());
  ------------------
  |  |   56|     25|  {                            \
  |  |   57|     25|    auto ce = (call);          \
  |  |   58|     25|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 0, False: 25]
  |  |  ------------------
  |  |   59|     25|  }
  ------------------
 1419|     25|          Value type_val = type_field->value;
 1420|     25|          ECHECK(ParseAnyValue(type_val, type_field, 0, nullptr, 0));
  ------------------
  |  |   56|     25|  {                            \
  |  |   57|     25|    auto ce = (call);          \
  |  |   58|     25|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1, False: 24]
  |  |  ------------------
  |  |   59|     25|  }
  ------------------
 1421|     24|          constant = type_val.constant;
 1422|       |          // Got the information we needed, now rewind:
 1423|     24|          *static_cast<ParserState*>(this) = backup;
 1424|     24|        }
 1425|     34|      }
 1426|    298|      if (constant.empty() && !vector_of_union_types) {
  ------------------
  |  Branch (1426:11): [True: 152, False: 146]
  |  Branch (1426:31): [True: 9, False: 143]
  ------------------
 1427|      9|        return Error("missing type field for this union value: " + field->name);
 1428|      9|      }
 1429|    289|      uint8_t enum_idx;
 1430|    289|      if (vector_of_union_types) {
  ------------------
  |  Branch (1430:11): [True: 143, False: 146]
  ------------------
 1431|    143|        if (vector_of_union_types->size() <= count)
  ------------------
  |  Branch (1431:13): [True: 4, False: 139]
  ------------------
 1432|      4|          return Error(
 1433|      4|              "union types vector smaller than union values vector for: " +
 1434|      4|              field->name);
 1435|    139|        enum_idx = vector_of_union_types->Get(static_cast<uoffset_t>(count));
 1436|    146|      } else {
 1437|    146|        ECHECK(atot(constant.c_str(), *this, &enum_idx));
  ------------------
  |  |   56|    146|  {                            \
  |  |   57|    146|    auto ce = (call);          \
  |  |   58|    146|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 3, False: 143]
  |  |  ------------------
  |  |   59|    146|  }
  ------------------
 1438|    143|      }
 1439|    282|      auto enum_val = val.type.enum_def->ReverseLookup(enum_idx, true);
 1440|    282|      if (!enum_val) return Error("illegal type id for: " + field->name);
  ------------------
  |  Branch (1440:11): [True: 15, False: 267]
  ------------------
 1441|    267|      if (enum_val->union_type.base_type == BASE_TYPE_STRUCT) {
  ------------------
  |  Branch (1441:11): [True: 267, False: 0]
  ------------------
 1442|    267|        ECHECK(ParseTable(*enum_val->union_type.struct_def, &val.constant,
  ------------------
  |  |   56|    267|  {                            \
  |  |   57|    267|    auto ce = (call);          \
  |  |   58|    267|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 167, False: 100]
  |  |  ------------------
  |  |   59|    267|  }
  ------------------
 1443|    267|                          nullptr));
 1444|    100|        if (enum_val->union_type.struct_def->fixed) {
  ------------------
  |  Branch (1444:13): [True: 0, False: 100]
  ------------------
 1445|       |          // All BASE_TYPE_UNION values are offsets, so turn this into one.
 1446|      0|          SerializeStruct(*enum_val->union_type.struct_def, val);
 1447|      0|          builder_.ClearOffsets();
 1448|      0|          val.constant = NumToString(builder_.GetSize());
 1449|      0|        }
 1450|    100|      } else if (IsString(enum_val->union_type)) {
  ------------------
  |  Branch (1450:18): [True: 0, False: 0]
  ------------------
 1451|      0|        ECHECK(ParseString(val, field->shared));
  ------------------
  |  |   56|      0|  {                            \
  |  |   57|      0|    auto ce = (call);          \
  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|      0|  }
  ------------------
 1452|      0|      } else {
 1453|      0|        FLATBUFFERS_ASSERT(false);
 1454|      0|      }
 1455|    100|      break;
 1456|    267|    }
 1457|   168k|    case BASE_TYPE_STRUCT:
  ------------------
  |  Branch (1457:5): [True: 168k, False: 217k]
  ------------------
 1458|   168k|      ECHECK(ParseTable(*val.type.struct_def, &val.constant, nullptr));
  ------------------
  |  |   56|   168k|  {                            \
  |  |   57|   168k|    auto ce = (call);          \
  |  |   58|   168k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 3.46k, False: 165k]
  |  |  ------------------
  |  |   59|   168k|  }
  ------------------
 1459|   165k|      break;
 1460|  5.10k|    case BASE_TYPE_STRING: {
  ------------------
  |  Branch (1460:5): [True: 5.10k, False: 380k]
  ------------------
 1461|  5.10k|      ECHECK(ParseString(val, field->shared));
  ------------------
  |  |   56|  5.10k|  {                            \
  |  |   57|  5.10k|    auto ce = (call);          \
  |  |   58|  5.10k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 11, False: 5.08k]
  |  |  ------------------
  |  |   59|  5.10k|  }
  ------------------
 1462|  5.08k|      break;
 1463|  5.10k|    }
 1464|  7.03k|    case BASE_TYPE_VECTOR64:
  ------------------
  |  Branch (1464:5): [True: 7.03k, False: 378k]
  ------------------
 1465|  43.5k|    case BASE_TYPE_VECTOR: {
  ------------------
  |  Branch (1465:5): [True: 36.5k, False: 349k]
  ------------------
 1466|  43.5k|      uoffset_t off;
 1467|  43.5k|      ECHECK(ParseVector(val.type, &off, field, parent_fieldn));
  ------------------
  |  |   56|  43.5k|  {                            \
  |  |   57|  43.5k|    auto ce = (call);          \
  |  |   58|  43.5k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 4.74k, False: 38.8k]
  |  |  ------------------
  |  |   59|  43.5k|  }
  ------------------
 1468|  38.8k|      val.constant = NumToString(off);
 1469|  38.8k|      break;
 1470|  43.5k|    }
 1471|  6.29k|    case BASE_TYPE_ARRAY: {
  ------------------
  |  Branch (1471:5): [True: 6.29k, False: 379k]
  ------------------
 1472|  6.29k|      ECHECK(ParseArray(val));
  ------------------
  |  |   56|  6.29k|  {                            \
  |  |   57|  6.29k|    auto ce = (call);          \
  |  |   58|  6.29k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 243, False: 6.05k]
  |  |  ------------------
  |  |   59|  6.29k|  }
  ------------------
 1473|  6.05k|      break;
 1474|  6.29k|    }
 1475|  23.8k|    case BASE_TYPE_INT:
  ------------------
  |  Branch (1475:5): [True: 23.8k, False: 362k]
  ------------------
 1476|  30.8k|    case BASE_TYPE_UINT:
  ------------------
  |  Branch (1476:5): [True: 7.02k, False: 378k]
  ------------------
 1477|  50.0k|    case BASE_TYPE_LONG:
  ------------------
  |  Branch (1477:5): [True: 19.1k, False: 366k]
  ------------------
 1478|  63.0k|    case BASE_TYPE_ULONG: {
  ------------------
  |  Branch (1478:5): [True: 13.0k, False: 372k]
  ------------------
 1479|  63.0k|      if (field && field->attributes.Lookup("hash") &&
  ------------------
  |  Branch (1479:11): [True: 63.0k, False: 0]
  |  Branch (1479:11): [True: 3.21k, False: 59.8k]
  |  Branch (1479:20): [True: 3.41k, False: 59.6k]
  ------------------
 1480|  3.41k|          (token_ == kTokenIdentifier || token_ == kTokenStringConstant)) {
  ------------------
  |  Branch (1480:12): [True: 2.18k, False: 1.23k]
  |  Branch (1480:42): [True: 1.03k, False: 197]
  ------------------
 1481|  3.21k|        ECHECK(ParseHash(val, field));
  ------------------
  |  |   56|  3.21k|  {                            \
  |  |   57|  3.21k|    auto ce = (call);          \
  |  |   58|  3.21k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 11, False: 3.20k]
  |  |  ------------------
  |  |   59|  3.21k|  }
  ------------------
 1482|  59.8k|      } else {
 1483|  59.8k|        ECHECK(ParseSingleValue(field ? &field->name : nullptr, val, false));
  ------------------
  |  |   56|  59.8k|  {                            \
  |  |   57|   119k|    auto ce = (call);          \
  |  |  ------------------
  |  |  |  Branch (57:16): [True: 59.8k, False: 0]
  |  |  ------------------
  |  |   58|  59.8k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 100, False: 59.7k]
  |  |  ------------------
  |  |   59|  59.8k|  }
  ------------------
 1484|  59.7k|      }
 1485|  62.9k|      break;
 1486|  63.0k|    }
 1487|  98.8k|    default:
  ------------------
  |  Branch (1487:5): [True: 98.8k, False: 286k]
  ------------------
 1488|  98.8k|      ECHECK(ParseSingleValue(field ? &field->name : nullptr, val, false));
  ------------------
  |  |   56|  98.8k|  {                            \
  |  |   57|   197k|    auto ce = (call);          \
  |  |  ------------------
  |  |  |  Branch (57:16): [True: 98.8k, False: 0]
  |  |  ------------------
  |  |   58|  98.8k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 122, False: 98.7k]
  |  |  ------------------
  |  |   59|  98.8k|  }
  ------------------
 1489|  98.7k|      break;
 1490|   385k|  }
 1491|   376k|  return NoError();
 1492|   385k|}
_ZN11flatbuffers6Parser15SerializeStructERKNS_9StructDefERKNS_5ValueE:
 1494|  20.5k|void Parser::SerializeStruct(const StructDef& struct_def, const Value& val) {
 1495|  20.5k|  SerializeStruct(builder_, struct_def, val);
 1496|  20.5k|}
_ZN11flatbuffers6Parser15SerializeStructERNS_21FlatBufferBuilderImplILb0EEERKNS_9StructDefERKNS_5ValueE:
 1499|  20.5k|                             const StructDef& struct_def, const Value& val) {
 1500|  20.5k|  FLATBUFFERS_ASSERT(val.constant.length() == struct_def.bytesize);
 1501|  20.5k|  builder.Align(struct_def.minalign);
 1502|  20.5k|  builder.PushBytes(reinterpret_cast<const uint8_t*>(val.constant.c_str()),
 1503|  20.5k|                    struct_def.bytesize);
 1504|  20.5k|  builder.AddStructOffset(val.offset, builder.GetSize());
 1505|  20.5k|}
_ZN11flatbuffers6Parser10ParseTableERKNS_9StructDefEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEPj:
 1549|   177k|                                uoffset_t* ovalue) {
 1550|   177k|  ParseDepthGuard depth_guard(this);
 1551|   177k|  ECHECK(depth_guard.Check());
  ------------------
  |  |   56|   177k|  {                            \
  |  |   57|   177k|    auto ce = (call);          \
  |  |   58|   177k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 4, False: 177k]
  |  |  ------------------
  |  |   59|   177k|  }
  ------------------
 1552|       |
 1553|   177k|  size_t fieldn_outer = 0;
 1554|   177k|  auto err = ParseTableDelimiters(
 1555|   177k|      fieldn_outer, &struct_def,
 1556|   177k|      [&](const std::string& name, size_t& fieldn,
 1557|   177k|          const StructDef* struct_def_inner) -> CheckedError {
 1558|   177k|        if (name == "$schema") {
 1559|   177k|          ECHECK(Expect(kTokenStringConstant));
 1560|   177k|          return NoError();
 1561|   177k|        }
 1562|   177k|        auto field = struct_def_inner->fields.Lookup(name);
 1563|   177k|        if (!field) {
 1564|   177k|          if (!opts.skip_unexpected_fields_in_json) {
 1565|   177k|            return Error("unknown field: " + name);
 1566|   177k|          } else {
 1567|   177k|            ECHECK(SkipAnyJsonValue());
 1568|   177k|          }
 1569|   177k|        } else {
 1570|   177k|          if (IsIdent("null") && !IsScalar(field->value.type.base_type)) {
 1571|   177k|            ECHECK(Next());  // Ignore this field.
 1572|   177k|          } else {
 1573|   177k|            Value val = field->value;
 1574|   177k|            if (field->flexbuffer) {
 1575|   177k|              flexbuffers::Builder builder(1024,
 1576|   177k|                                           flexbuffers::BUILDER_FLAG_SHARE_ALL);
 1577|   177k|              ECHECK(ParseFlexBufferValue(&builder));
 1578|   177k|              builder.Finish();
 1579|       |              // Force alignment for nested flexbuffer
 1580|   177k|              builder_.ForceVectorAlignment(builder.GetSize(), sizeof(uint8_t),
 1581|   177k|                                            sizeof(largest_scalar_t));
 1582|   177k|              auto off = builder_.CreateVector(builder.GetBuffer());
 1583|   177k|              val.constant = NumToString(off.o);
 1584|   177k|            } else if (field->nested_flatbuffer) {
 1585|   177k|              ECHECK(
 1586|   177k|                  ParseNestedFlatbuffer(val, field, fieldn, struct_def_inner));
 1587|   177k|            } else {
 1588|   177k|              ECHECK(ParseAnyValue(val, field, fieldn, struct_def_inner, 0));
 1589|   177k|            }
 1590|       |            // Hardcoded insertion-sort with error-check.
 1591|       |            // If fields are specified in order, then this loop exits
 1592|       |            // immediately.
 1593|   177k|            auto elem = field_stack_.rbegin();
 1594|   177k|            for (; elem != field_stack_.rbegin() + fieldn; ++elem) {
 1595|   177k|              auto existing_field = elem->second;
 1596|   177k|              if (existing_field == field)
 1597|   177k|                return Error("field set more than once: " + field->name);
 1598|   177k|              if (existing_field->value.offset < field->value.offset) break;
 1599|   177k|            }
 1600|       |            // Note: elem points to before the insertion point, thus .base()
 1601|       |            // points to the correct spot.
 1602|   177k|            field_stack_.insert(elem.base(), std::make_pair(val, field));
 1603|   177k|            fieldn++;
 1604|   177k|          }
 1605|   177k|        }
 1606|   177k|        return NoError();
 1607|   177k|      });
 1608|   177k|  ECHECK(err);
  ------------------
  |  |   56|   177k|  {                            \
  |  |   57|   177k|    auto ce = (call);          \
  |  |   58|   177k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 11.7k, False: 165k]
  |  |  ------------------
  |  |   59|   177k|  }
  ------------------
 1609|       |
 1610|       |  // Check if all required fields are parsed.
 1611|   165k|  for (auto field_it = struct_def.fields.vec.begin();
 1612|   436k|       field_it != struct_def.fields.vec.end(); ++field_it) {
  ------------------
  |  Branch (1612:8): [True: 271k, False: 165k]
  ------------------
 1613|   271k|    auto required_field = *field_it;
 1614|   271k|    if (!required_field->IsRequired()) {
  ------------------
  |  Branch (1614:9): [True: 269k, False: 1.47k]
  ------------------
 1615|   269k|      continue;
 1616|   269k|    }
 1617|  1.47k|    bool found = false;
 1618|  1.47k|    for (auto pf_it = field_stack_.end() - fieldn_outer;
 1619|  2.67k|         pf_it != field_stack_.end(); ++pf_it) {
  ------------------
  |  Branch (1619:10): [True: 2.66k, False: 6]
  ------------------
 1620|  2.66k|      auto parsed_field = pf_it->second;
 1621|  2.66k|      if (parsed_field == required_field) {
  ------------------
  |  Branch (1621:11): [True: 1.46k, False: 1.20k]
  ------------------
 1622|  1.46k|        found = true;
 1623|  1.46k|        break;
 1624|  1.46k|      }
 1625|  2.66k|    }
 1626|  1.47k|    if (!found) {
  ------------------
  |  Branch (1626:9): [True: 6, False: 1.46k]
  ------------------
 1627|      6|      return Error("required field is missing: " + required_field->name +
 1628|      6|                   " in " + struct_def.name);
 1629|      6|    }
 1630|  1.47k|  }
 1631|       |
 1632|   165k|  if (struct_def.fixed && fieldn_outer != struct_def.fields.vec.size())
  ------------------
  |  Branch (1632:7): [True: 32.5k, False: 133k]
  |  Branch (1632:27): [True: 1, False: 32.5k]
  ------------------
 1633|      1|    return Error("struct: wrong number of initializers: " + struct_def.name);
 1634|       |
 1635|   165k|  auto start = struct_def.fixed ? builder_.StartStruct(struct_def.minalign)
  ------------------
  |  Branch (1635:16): [True: 32.5k, False: 133k]
  ------------------
 1636|   165k|                                : builder_.StartTable();
 1637|       |
 1638|   702k|  for (size_t size = struct_def.sortbysize ? sizeof(largest_scalar_t) : 1; size;
  ------------------
  |  Branch (1638:22): [True: 123k, False: 41.9k]
  |  Branch (1638:76): [True: 536k, False: 165k]
  ------------------
 1639|   536k|       size /= 2) {
 1640|       |    // Go through elements in reverse, since we're building the data backwards.
 1641|       |    // TODO(derekbailey): this doesn't work when there are Offset64 fields, as
 1642|       |    // those have to be built first. So this needs to be changed to iterate over
 1643|       |    // Offset64 then Offset32 fields.
 1644|   536k|    for (auto it = field_stack_.rbegin();
 1645|  1.00M|         it != field_stack_.rbegin() + fieldn_outer; ++it) {
  ------------------
  |  Branch (1645:10): [True: 466k, False: 536k]
  ------------------
 1646|   466k|      auto& field_value = it->first;
 1647|   466k|      auto field = it->second;
 1648|   466k|      if (!struct_def.sortbysize ||
  ------------------
  |  Branch (1648:11): [True: 65.0k, False: 401k]
  ------------------
 1649|   401k|          size == SizeOf(field_value.type.base_type)) {
  ------------------
  |  Branch (1649:11): [True: 100k, False: 300k]
  ------------------
 1650|   165k|        switch (field_value.type.base_type) {
  ------------------
  |  Branch (1650:17): [True: 165k, False: 0]
  ------------------
 1651|       |          // clang-format off
 1652|      0|          #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
 1653|      0|            case BASE_TYPE_ ## ENUM: \
 1654|      0|              builder_.Pad(field->padding); \
 1655|      0|              if (struct_def.fixed) { \
 1656|      0|                CTYPE val; \
 1657|      0|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
 1658|      0|                builder_.PushElement(val); \
 1659|      0|              } else { \
 1660|      0|                if (field->IsScalarOptional()) { \
 1661|      0|                  if (field_value.constant != "null") { \
 1662|      0|                    CTYPE val; \
 1663|      0|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
 1664|      0|                    builder_.AddElement(field_value.offset, val); \
 1665|      0|                  } \
 1666|      0|                } else { \
 1667|      0|                  CTYPE val, valdef; \
 1668|      0|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
 1669|      0|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
 1670|      0|                  builder_.AddElement(field_value.offset, val, valdef); \
 1671|      0|                } \
 1672|      0|              } \
 1673|      0|              break;
 1674|   116k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  ------------------
  |  |   50|      0|  TD(NONE,     "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 0) \
  |  |  ------------------
  |  |  |  | 1674|      0|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|      0|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 0, False: 165k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|      0|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|      0|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|      0|                CTYPE val; \
  |  |  |  |  |  | 1657|      0|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|      0|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|      0|              } else { \
  |  |  |  |  |  | 1660|      0|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|      0|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|      0|                    CTYPE val; \
  |  |  |  |  |  | 1663|      0|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|      0|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|      0|                  } \
  |  |  |  |  |  | 1666|      0|                } else { \
  |  |  |  |  |  | 1667|      0|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|      0|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|      0|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|      0|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|      0|                } \
  |  |  |  |  |  | 1672|      0|              } \
  |  |  |  |  |  | 1673|      0|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   51|     30|  TD(UTYPE,    "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 1) /* begin scalar/int */ \
  |  |  ------------------
  |  |  |  | 1674|     30|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|     30|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 30, False: 165k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|     30|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|     30|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 0, False: 30]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|      0|                CTYPE val; \
  |  |  |  |  |  | 1657|      0|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|      0|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|     30|              } else { \
  |  |  |  |  |  | 1660|     30|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 0, False: 30]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|      0|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|      0|                    CTYPE val; \
  |  |  |  |  |  | 1663|      0|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|      0|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|      0|                  } \
  |  |  |  |  |  | 1666|     30|                } else { \
  |  |  |  |  |  | 1667|     30|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|     30|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|     30|  {                            \
  |  |  |  |  |  |  |  |   57|     30|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|     30|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 30]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|     30|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|     30|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|     30|  {                            \
  |  |  |  |  |  |  |  |   57|     30|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|     30|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 30]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|     30|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|     30|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|     30|                } \
  |  |  |  |  |  | 1672|     30|              } \
  |  |  |  |  |  | 1673|     30|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|  11.5k|  TD(BOOL,     "bool",   uint8_t,  boolean,bool,    bool,   bool,    bool, Boolean, Bool, 2) \
  |  |  ------------------
  |  |  |  | 1674|  11.5k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  11.5k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 11.5k, False: 153k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  11.5k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  11.5k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 1.78k, False: 9.79k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|  1.78k|                CTYPE val; \
  |  |  |  |  |  | 1657|  1.78k|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.78k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.78k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.78k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 1.77k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.78k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|  1.77k|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  9.79k|              } else { \
  |  |  |  |  |  | 1660|  9.79k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 1.19k, False: 8.60k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  1.19k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 988, False: 202]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|    988|                    CTYPE val; \
  |  |  |  |  |  | 1663|    988|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    988|  {                            \
  |  |  |  |  |  |  |  |   57|    988|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    988|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 7, False: 981]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    988|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|    981|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|    981|                  } \
  |  |  |  |  |  | 1666|  8.60k|                } else { \
  |  |  |  |  |  | 1667|  8.60k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  8.60k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  8.60k|  {                            \
  |  |  |  |  |  |  |  |   57|  8.60k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  8.60k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 8.60k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  8.60k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  8.60k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  8.60k|  {                            \
  |  |  |  |  |  |  |  |   57|  8.60k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  8.60k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 8.60k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  8.60k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  8.60k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  8.60k|                } \
  |  |  |  |  |  | 1672|  9.79k|              } \
  |  |  |  |  |  | 1673|  11.5k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|  11.5k|  TD(CHAR,     "byte",   int8_t,   byte,   int8,    sbyte,  int8,    i8,   Byte, Int8, 3) \
  |  |  ------------------
  |  |  |  | 1674|  8.48k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  8.48k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 8.48k, False: 156k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  8.45k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  8.48k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 2.36k, False: 6.11k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|  2.36k|                CTYPE val; \
  |  |  |  |  |  | 1657|  2.36k|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  2.36k|  {                            \
  |  |  |  |  |  |  |  |   57|  2.36k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  2.36k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 2.36k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  2.36k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|  2.36k|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  6.11k|              } else { \
  |  |  |  |  |  | 1660|  6.11k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 1.57k, False: 4.54k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  1.57k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 1.48k, False: 83]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  1.48k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  1.48k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.48k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.48k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.48k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 13, False: 1.47k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.48k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  1.47k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  1.47k|                  } \
  |  |  |  |  |  | 1666|  4.54k|                } else { \
  |  |  |  |  |  | 1667|  4.54k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  4.54k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  4.54k|  {                            \
  |  |  |  |  |  |  |  |   57|  4.54k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  4.54k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 7, False: 4.53k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  4.54k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  4.53k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  4.53k|  {                            \
  |  |  |  |  |  |  |  |   57|  4.53k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  4.53k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 4.53k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  4.53k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  4.53k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  4.53k|                } \
  |  |  |  |  |  | 1672|  6.11k|              } \
  |  |  |  |  |  | 1673|  8.45k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|  8.72k|  TD(UCHAR,    "ubyte",  uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 4) \
  |  |  ------------------
  |  |  |  | 1674|  8.72k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  8.72k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 8.72k, False: 156k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  8.70k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  8.72k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 4.32k, False: 4.40k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|  4.32k|                CTYPE val; \
  |  |  |  |  |  | 1657|  4.32k|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  4.32k|  {                            \
  |  |  |  |  |  |  |  |   57|  4.32k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  4.32k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 1, False: 4.31k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  4.32k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|  4.31k|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  4.40k|              } else { \
  |  |  |  |  |  | 1660|  4.40k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 1.28k, False: 3.11k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  1.28k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 1.21k, False: 74]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  1.21k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  1.21k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.21k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.21k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.21k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 10, False: 1.20k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.21k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  1.20k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  1.20k|                  } \
  |  |  |  |  |  | 1666|  3.11k|                } else { \
  |  |  |  |  |  | 1667|  3.11k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  3.11k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  3.11k|  {                            \
  |  |  |  |  |  |  |  |   57|  3.11k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  3.11k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 3.11k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  3.11k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  3.11k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  3.11k|  {                            \
  |  |  |  |  |  |  |  |   57|  3.11k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  3.11k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 3.11k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  3.11k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  3.11k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  3.11k|                } \
  |  |  |  |  |  | 1672|  4.40k|              } \
  |  |  |  |  |  | 1673|  8.70k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|  8.70k|  TD(SHORT,    "short",  int16_t,  short,  int16,   short,  int16,   i16,  Short, Int16, 5) \
  |  |  ------------------
  |  |  |  | 1674|  5.75k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  5.75k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 5.75k, False: 159k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  5.73k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  5.75k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 1.11k, False: 4.63k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|  1.11k|                CTYPE val; \
  |  |  |  |  |  | 1657|  1.11k|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.11k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.11k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.11k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 5, False: 1.10k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.11k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|  1.10k|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  4.63k|              } else { \
  |  |  |  |  |  | 1660|  4.63k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 1.91k, False: 2.72k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  1.91k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 1.69k, False: 216]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  1.69k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  1.69k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.69k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.69k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.69k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 9, False: 1.68k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.69k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  1.68k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  1.68k|                  } \
  |  |  |  |  |  | 1666|  2.72k|                } else { \
  |  |  |  |  |  | 1667|  2.72k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  2.72k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  2.72k|  {                            \
  |  |  |  |  |  |  |  |   57|  2.72k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  2.72k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 5, False: 2.71k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  2.72k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  2.71k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  2.71k|  {                            \
  |  |  |  |  |  |  |  |   57|  2.71k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  2.71k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 2.71k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  2.71k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  2.71k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  2.71k|                } \
  |  |  |  |  |  | 1672|  4.63k|              } \
  |  |  |  |  |  | 1673|  5.73k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   56|  5.73k|  TD(USHORT,   "ushort", uint16_t, short,  uint16,  ushort, uint16,  u16,  UShort, UInt16, 6) \
  |  |  ------------------
  |  |  |  | 1674|  4.06k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  4.06k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 4.06k, False: 161k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  4.05k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  4.06k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 553, False: 3.51k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|    553|                CTYPE val; \
  |  |  |  |  |  | 1657|    553|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    553|  {                            \
  |  |  |  |  |  |  |  |   57|    553|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    553|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 7, False: 546]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    553|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|    546|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  3.51k|              } else { \
  |  |  |  |  |  | 1660|  3.51k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 1.30k, False: 2.20k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  1.30k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 1.10k, False: 203]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  1.10k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  1.10k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.10k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.10k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.10k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 1.09k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.10k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  1.09k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  1.09k|                  } \
  |  |  |  |  |  | 1666|  2.20k|                } else { \
  |  |  |  |  |  | 1667|  2.20k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  2.20k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  2.20k|  {                            \
  |  |  |  |  |  |  |  |   57|  2.20k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  2.20k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 2.20k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  2.20k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  2.20k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  2.20k|  {                            \
  |  |  |  |  |  |  |  |   57|  2.20k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  2.20k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 2.20k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  2.20k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  2.20k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  2.20k|                } \
  |  |  |  |  |  | 1672|  3.51k|              } \
  |  |  |  |  |  | 1673|  4.05k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   57|  22.0k|  TD(INT,      "int",    int32_t,  int,    int32,   int,    int32,   i32,  Int, Int32, 7) \
  |  |  ------------------
  |  |  |  | 1674|  22.0k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  22.0k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 22.0k, False: 143k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  22.0k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  22.0k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 16.8k, False: 5.23k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|  16.8k|                CTYPE val; \
  |  |  |  |  |  | 1657|  16.8k|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  16.8k|  {                            \
  |  |  |  |  |  |  |  |   57|  16.8k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  16.8k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 16.8k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  16.8k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|  16.8k|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  16.8k|              } else { \
  |  |  |  |  |  | 1660|  5.23k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 1.44k, False: 3.79k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  1.44k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 1.19k, False: 244]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  1.19k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  1.19k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.19k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.19k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.19k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 1.19k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.19k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  1.19k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  1.19k|                  } \
  |  |  |  |  |  | 1666|  3.79k|                } else { \
  |  |  |  |  |  | 1667|  3.79k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  3.79k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  3.79k|  {                            \
  |  |  |  |  |  |  |  |   57|  3.79k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  3.79k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 1, False: 3.79k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  3.79k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  3.79k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  3.79k|  {                            \
  |  |  |  |  |  |  |  |   57|  3.79k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  3.79k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 3.79k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  3.79k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  3.79k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  3.79k|                } \
  |  |  |  |  |  | 1672|  5.23k|              } \
  |  |  |  |  |  | 1673|  22.0k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  22.0k|  TD(UINT,     "uint",   uint32_t, int,    uint32,  uint,   uint32,  u32,  UInt, UInt32, 8) \
  |  |  ------------------
  |  |  |  | 1674|  5.30k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  5.30k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 5.30k, False: 160k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  5.29k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  5.30k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 469, False: 4.83k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|    469|                CTYPE val; \
  |  |  |  |  |  | 1657|    469|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    469|  {                            \
  |  |  |  |  |  |  |  |   57|    469|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    469|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 467]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    469|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|    467|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  4.83k|              } else { \
  |  |  |  |  |  | 1660|  4.83k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 2.93k, False: 1.90k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  2.93k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 2.69k, False: 236]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  2.69k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  2.69k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  2.69k|  {                            \
  |  |  |  |  |  |  |  |   57|  2.69k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  2.69k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 2.69k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  2.69k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  2.69k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  2.69k|                  } \
  |  |  |  |  |  | 1666|  2.93k|                } else { \
  |  |  |  |  |  | 1667|  1.90k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  1.90k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.90k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.90k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.90k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 1.90k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.90k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  1.90k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.90k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.90k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.90k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 1.90k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.90k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  1.90k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  1.90k|                } \
  |  |  |  |  |  | 1672|  4.83k|              } \
  |  |  |  |  |  | 1673|  5.29k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   59|  12.2k|  TD(LONG,     "long",   int64_t,  long,   int64,   long,   int64,   i64,  Long, Int64, 9) \
  |  |  ------------------
  |  |  |  | 1674|  12.2k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  12.2k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 12.2k, False: 153k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  12.2k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  12.2k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 1.13k, False: 11.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|  1.13k|                CTYPE val; \
  |  |  |  |  |  | 1657|  1.13k|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.13k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.13k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.13k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 1.12k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.13k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|  1.12k|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  11.1k|              } else { \
  |  |  |  |  |  | 1660|  11.1k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 3.94k, False: 7.18k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  3.94k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 3.74k, False: 197]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  3.74k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  3.74k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  3.74k|  {                            \
  |  |  |  |  |  |  |  |   57|  3.74k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  3.74k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 3.74k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  3.74k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  3.74k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  3.74k|                  } \
  |  |  |  |  |  | 1666|  7.18k|                } else { \
  |  |  |  |  |  | 1667|  7.18k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  7.18k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  7.18k|  {                            \
  |  |  |  |  |  |  |  |   57|  7.18k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  7.18k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 6, False: 7.18k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  7.18k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  7.18k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  7.18k|  {                            \
  |  |  |  |  |  |  |  |   57|  7.18k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  7.18k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 7.18k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  7.18k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  7.18k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  7.18k|                } \
  |  |  |  |  |  | 1672|  11.1k|              } \
  |  |  |  |  |  | 1673|  12.2k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  12.2k|  TD(ULONG,    "ulong",  uint64_t, long,   uint64,  ulong,  uint64,  u64,  ULong, UInt64, 10) /* end int */ \
  |  |  ------------------
  |  |  |  | 1674|  11.1k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  11.1k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 11.1k, False: 154k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  11.1k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  11.1k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 995, False: 10.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|    995|                CTYPE val; \
  |  |  |  |  |  | 1657|    995|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    995|  {                            \
  |  |  |  |  |  |  |  |   57|    995|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    995|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 991]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    995|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|    991|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  10.1k|              } else { \
  |  |  |  |  |  | 1660|  10.1k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 6.48k, False: 3.69k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  6.48k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 6.28k, False: 199]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  6.28k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  6.28k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  6.28k|  {                            \
  |  |  |  |  |  |  |  |   57|  6.28k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  6.28k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 6.28k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  6.28k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  6.28k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  6.28k|                  } \
  |  |  |  |  |  | 1666|  6.48k|                } else { \
  |  |  |  |  |  | 1667|  3.69k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  3.69k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  3.69k|  {                            \
  |  |  |  |  |  |  |  |   57|  3.69k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  3.69k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 5, False: 3.69k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  3.69k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  3.69k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  3.69k|  {                            \
  |  |  |  |  |  |  |  |   57|  3.69k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  3.69k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 3.69k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  3.69k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  3.69k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  3.69k|                } \
  |  |  |  |  |  | 1672|  10.1k|              } \
  |  |  |  |  |  | 1673|  11.1k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|  12.2k|  TD(FLOAT,    "float",  float,    float,  float32, float,  float32, f32,  Float, Float32, 11) /* begin float */ \
  |  |  ------------------
  |  |  |  | 1674|  12.2k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  12.2k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 12.2k, False: 153k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  12.2k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  12.2k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 654, False: 11.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|    654|                CTYPE val; \
  |  |  |  |  |  | 1657|    654|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    654|  {                            \
  |  |  |  |  |  |  |  |   57|    654|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    654|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 6, False: 648]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    654|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|    648|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  11.5k|              } else { \
  |  |  |  |  |  | 1660|  11.5k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 1.62k, False: 9.96k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  1.62k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 1.42k, False: 194]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  1.42k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  1.42k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.42k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.42k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.42k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 1.42k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.42k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  1.42k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  1.42k|                  } \
  |  |  |  |  |  | 1666|  9.96k|                } else { \
  |  |  |  |  |  | 1667|  9.96k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  9.96k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  9.96k|  {                            \
  |  |  |  |  |  |  |  |   57|  9.96k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  9.96k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 9.96k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  9.96k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  9.96k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  9.96k|  {                            \
  |  |  |  |  |  |  |  |   57|  9.96k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  9.96k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 9.96k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  9.96k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  9.96k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  9.96k|                } \
  |  |  |  |  |  | 1672|  11.5k|              } \
  |  |  |  |  |  | 1673|  12.2k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|  14.4k|  TD(DOUBLE,   "double", double,   double, float64, double, float64, f64,  Double, Double, 12) /* end float/scalar */
  |  |  ------------------
  |  |  |  | 1674|  14.4k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  14.4k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 14.4k, False: 150k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  14.4k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  14.4k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 853, False: 13.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|    853|                CTYPE val; \
  |  |  |  |  |  | 1657|    853|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    853|  {                            \
  |  |  |  |  |  |  |  |   57|    853|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    853|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 851]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    853|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|    851|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  13.6k|              } else { \
  |  |  |  |  |  | 1660|  13.6k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 3.78k, False: 9.85k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  3.78k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 3.71k, False: 66]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  3.71k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  3.71k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  3.71k|  {                            \
  |  |  |  |  |  |  |  |   57|  3.71k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  3.71k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 3.71k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  3.71k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  3.71k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  3.71k|                  } \
  |  |  |  |  |  | 1666|  9.85k|                } else { \
  |  |  |  |  |  | 1667|  9.85k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  9.85k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  9.85k|  {                            \
  |  |  |  |  |  |  |  |   57|  9.85k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  9.85k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 9.85k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  9.85k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  9.85k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  9.85k|  {                            \
  |  |  |  |  |  |  |  |   57|  9.85k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  9.85k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 9.85k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  9.85k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  9.85k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  9.85k|                } \
  |  |  |  |  |  | 1672|  13.6k|              } \
  |  |  |  |  |  | 1673|  14.4k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1675|  14.4k|          #undef FLATBUFFERS_TD
 1676|  14.4k|          #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
 1677|  14.4k|            case BASE_TYPE_ ## ENUM: \
 1678|  14.4k|              builder_.Pad(field->padding); \
 1679|  14.4k|              if (IsStruct(field->value.type)) { \
 1680|  14.4k|                SerializeStruct(*field->value.type.struct_def, field_value); \
 1681|  14.4k|              } else { \
 1682|       |                /* Special case for fields that use 64-bit addressing */ \
 1683|  14.4k|                if(field->offset64) { \
 1684|  14.4k|                  Offset64<void> offset; \
 1685|  14.4k|                  ECHECK(atot(field_value.constant.c_str(), *this, &offset)); \
 1686|  14.4k|                  builder_.AddOffset(field_value.offset, offset); \
 1687|  14.4k|                } else { \
 1688|  14.4k|                  CTYPE val; \
 1689|  14.4k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
 1690|  14.4k|                  builder_.AddOffset(field_value.offset, val); \
 1691|  14.4k|                } \
 1692|  14.4k|              } \
 1693|  14.4k|              break;
 1694|  43.3k|            FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD)
  ------------------
  |  |   64|  3.49k|  TD(STRING,   "string", Offset<void>,   int, int, StringOffset, int, unused, Int, Offset<String>, 13) \
  |  |  ------------------
  |  |  |  | 1694|  3.49k|            FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1677|  3.49k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1677:13): [True: 3.49k, False: 161k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1678|  3.49k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1679|  3.49k|              if (IsStruct(field->value.type)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1679:19): [True: 0, False: 3.49k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1680|      0|                SerializeStruct(*field->value.type.struct_def, field_value); \
  |  |  |  |  |  | 1681|  3.49k|              } else { \
  |  |  |  |  |  | 1682|  3.49k|                /* Special case for fields that use 64-bit addressing */ \
  |  |  |  |  |  | 1683|  3.49k|                if(field->offset64) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1683:20): [True: 389, False: 3.10k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1684|    389|                  Offset64<void> offset; \
  |  |  |  |  |  | 1685|    389|                  ECHECK(atot(field_value.constant.c_str(), *this, &offset)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    389|  {                            \
  |  |  |  |  |  |  |  |   57|    389|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    389|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 389]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    389|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1686|    389|                  builder_.AddOffset(field_value.offset, offset); \
  |  |  |  |  |  | 1687|  3.10k|                } else { \
  |  |  |  |  |  | 1688|  3.10k|                  CTYPE val; \
  |  |  |  |  |  | 1689|  3.10k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  3.10k|  {                            \
  |  |  |  |  |  |  |  |   57|  3.10k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  3.10k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 3.10k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  3.10k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1690|  3.10k|                  builder_.AddOffset(field_value.offset, val); \
  |  |  |  |  |  | 1691|  3.10k|                } \
  |  |  |  |  |  | 1692|  3.49k|              } \
  |  |  |  |  |  | 1693|  3.49k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|  32.6k|  TD(VECTOR,   "",       Offset<void>,   int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 14) \
  |  |  ------------------
  |  |  |  | 1694|  32.6k|            FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1677|  32.6k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1677:13): [True: 32.6k, False: 132k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1678|  32.6k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1679|  32.6k|              if (IsStruct(field->value.type)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1679:19): [True: 0, False: 32.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1680|      0|                SerializeStruct(*field->value.type.struct_def, field_value); \
  |  |  |  |  |  | 1681|  32.6k|              } else { \
  |  |  |  |  |  | 1682|  32.6k|                /* Special case for fields that use 64-bit addressing */ \
  |  |  |  |  |  | 1683|  32.6k|                if(field->offset64) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1683:20): [True: 3.83k, False: 28.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1684|  3.83k|                  Offset64<void> offset; \
  |  |  |  |  |  | 1685|  3.83k|                  ECHECK(atot(field_value.constant.c_str(), *this, &offset)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  3.83k|  {                            \
  |  |  |  |  |  |  |  |   57|  3.83k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  3.83k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 3.83k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  3.83k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1686|  3.83k|                  builder_.AddOffset(field_value.offset, offset); \
  |  |  |  |  |  | 1687|  28.8k|                } else { \
  |  |  |  |  |  | 1688|  28.8k|                  CTYPE val; \
  |  |  |  |  |  | 1689|  28.8k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  28.8k|  {                            \
  |  |  |  |  |  |  |  |   57|  28.8k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  28.8k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 28.8k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  28.8k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1690|  28.8k|                  builder_.AddOffset(field_value.offset, val); \
  |  |  |  |  |  | 1691|  28.8k|                } \
  |  |  |  |  |  | 1692|  32.6k|              } \
  |  |  |  |  |  | 1693|  32.6k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|  32.6k|  TD(VECTOR64, "",       Offset64<void>, int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 18) \
  |  |  ------------------
  |  |  |  | 1694|  6.99k|            FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1677|  6.99k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1677:13): [True: 6.99k, False: 158k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1678|  6.99k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1679|  6.99k|              if (IsStruct(field->value.type)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1679:19): [True: 0, False: 6.99k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1680|      0|                SerializeStruct(*field->value.type.struct_def, field_value); \
  |  |  |  |  |  | 1681|  6.99k|              } else { \
  |  |  |  |  |  | 1682|  6.99k|                /* Special case for fields that use 64-bit addressing */ \
  |  |  |  |  |  | 1683|  6.99k|                if(field->offset64) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1683:20): [True: 6.99k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1684|  6.99k|                  Offset64<void> offset; \
  |  |  |  |  |  | 1685|  6.99k|                  ECHECK(atot(field_value.constant.c_str(), *this, &offset)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  6.99k|  {                            \
  |  |  |  |  |  |  |  |   57|  6.99k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  6.99k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 6.99k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  6.99k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1686|  6.99k|                  builder_.AddOffset(field_value.offset, offset); \
  |  |  |  |  |  | 1687|  6.99k|                } else { \
  |  |  |  |  |  | 1688|      0|                  CTYPE val; \
  |  |  |  |  |  | 1689|      0|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1690|      0|                  builder_.AddOffset(field_value.offset, val); \
  |  |  |  |  |  | 1691|      0|                } \
  |  |  |  |  |  | 1692|  6.99k|              } \
  |  |  |  |  |  | 1693|  6.99k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   67|  6.99k|  TD(STRUCT,   "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 15) \
  |  |  ------------------
  |  |  |  | 1694|    108|            FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1677|    108|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1677:13): [True: 108, False: 165k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1678|    108|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1679|    108|              if (IsStruct(field->value.type)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1679:19): [True: 0, False: 108]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1680|      0|                SerializeStruct(*field->value.type.struct_def, field_value); \
  |  |  |  |  |  | 1681|    108|              } else { \
  |  |  |  |  |  | 1682|    108|                /* Special case for fields that use 64-bit addressing */ \
  |  |  |  |  |  | 1683|    108|                if(field->offset64) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1683:20): [True: 0, False: 108]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1684|      0|                  Offset64<void> offset; \
  |  |  |  |  |  | 1685|      0|                  ECHECK(atot(field_value.constant.c_str(), *this, &offset)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1686|      0|                  builder_.AddOffset(field_value.offset, offset); \
  |  |  |  |  |  | 1687|    108|                } else { \
  |  |  |  |  |  | 1688|    108|                  CTYPE val; \
  |  |  |  |  |  | 1689|    108|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    108|  {                            \
  |  |  |  |  |  |  |  |   57|    108|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    108|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 108]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    108|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1690|    108|                  builder_.AddOffset(field_value.offset, val); \
  |  |  |  |  |  | 1691|    108|                } \
  |  |  |  |  |  | 1692|    108|              } \
  |  |  |  |  |  | 1693|    108|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|    108|  TD(UNION,    "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 16)
  |  |  ------------------
  |  |  |  | 1694|     29|            FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1677|     29|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1677:13): [True: 29, False: 165k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1678|     29|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1679|     29|              if (IsStruct(field->value.type)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1679:19): [True: 0, False: 29]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1680|      0|                SerializeStruct(*field->value.type.struct_def, field_value); \
  |  |  |  |  |  | 1681|     29|              } else { \
  |  |  |  |  |  | 1682|     29|                /* Special case for fields that use 64-bit addressing */ \
  |  |  |  |  |  | 1683|     29|                if(field->offset64) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1683:20): [True: 0, False: 29]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1684|      0|                  Offset64<void> offset; \
  |  |  |  |  |  | 1685|      0|                  ECHECK(atot(field_value.constant.c_str(), *this, &offset)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1686|      0|                  builder_.AddOffset(field_value.offset, offset); \
  |  |  |  |  |  | 1687|     29|                } else { \
  |  |  |  |  |  | 1688|     29|                  CTYPE val; \
  |  |  |  |  |  | 1689|     29|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|     29|  {                            \
  |  |  |  |  |  |  |  |   57|     29|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|     29|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 29]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|     29|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1690|     29|                  builder_.AddOffset(field_value.offset, val); \
  |  |  |  |  |  | 1691|     29|                } \
  |  |  |  |  |  | 1692|     29|              } \
  |  |  |  |  |  | 1693|     29|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1695|     29|          #undef FLATBUFFERS_TD
 1696|  5.89k|            case BASE_TYPE_ARRAY:
  ------------------
  |  Branch (1696:13): [True: 5.89k, False: 159k]
  ------------------
 1697|  5.89k|              builder_.Pad(field->padding);
 1698|  5.89k|              builder_.PushBytes(
 1699|  5.89k|                reinterpret_cast<const uint8_t*>(field_value.constant.c_str()),
 1700|  5.89k|                InlineSize(field_value.type));
 1701|  5.89k|              break;
 1702|       |            // clang-format on
 1703|   165k|        }
 1704|   165k|      }
 1705|   466k|    }
 1706|   536k|  }
 1707|   330k|  for (size_t i = 0; i < fieldn_outer; i++) field_stack_.pop_back();
  ------------------
  |  Branch (1707:22): [True: 165k, False: 165k]
  ------------------
 1708|       |
 1709|   165k|  if (struct_def.fixed) {
  ------------------
  |  Branch (1709:7): [True: 32.4k, False: 133k]
  ------------------
 1710|  32.4k|    builder_.ClearOffsets();
 1711|  32.4k|    builder_.EndStruct();
 1712|  32.4k|    FLATBUFFERS_ASSERT(value);
 1713|       |    // Temporarily store this struct in the value string, since it is to
 1714|       |    // be serialized in-place elsewhere.
 1715|  32.4k|    value->assign(
 1716|  32.4k|        reinterpret_cast<const char*>(builder_.GetCurrentBufferPointer()),
 1717|  32.4k|        struct_def.bytesize);
 1718|  32.4k|    builder_.PopBytes(struct_def.bytesize);
 1719|  32.4k|    FLATBUFFERS_ASSERT(!ovalue);
 1720|   133k|  } else {
 1721|   133k|    auto val = builder_.EndTable(start);
 1722|   133k|    if (ovalue) *ovalue = val;
  ------------------
  |  Branch (1722:9): [True: 224, False: 132k]
  ------------------
 1723|   133k|    if (value) *value = NumToString(val);
  ------------------
  |  Branch (1723:9): [True: 132k, False: 224]
  ------------------
 1724|   133k|  }
 1725|   165k|  return NoError();
 1726|   165k|}
_ZN11flatbuffers6Parser19ParseAlignAttributeERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEmPm:
 1743|  5.91k|                                         size_t min_align, size_t* align) {
 1744|       |  // Use uint8_t to avoid problems with size_t==`unsigned long` on LP64.
 1745|  5.91k|  uint8_t align_value;
 1746|  5.91k|  if (StringToNumber(align_constant.c_str(), &align_value) &&
  ------------------
  |  Branch (1746:7): [True: 5.81k, False: 106]
  ------------------
 1747|  5.81k|      VerifyAlignmentRequirements(static_cast<size_t>(align_value),
  ------------------
  |  Branch (1747:7): [True: 5.80k, False: 9]
  ------------------
 1748|  5.81k|                                  min_align)) {
 1749|  5.80k|    *align = align_value;
 1750|  5.80k|    return NoError();
 1751|  5.80k|  }
 1752|    115|  return Error("unexpected force_align value '" + align_constant +
 1753|    115|               "', alignment must be a power of two integer ranging from the "
 1754|    115|               "type\'s natural alignment " +
 1755|    115|               NumToString(min_align) + " to " +
 1756|    115|               NumToString(FLATBUFFERS_MAX_ALIGNMENT));
  ------------------
  |  |  354|    115|  #define FLATBUFFERS_MAX_ALIGNMENT 32
  ------------------
 1757|  5.91k|}
_ZN11flatbuffers6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEm:
 1760|  43.5k|                                 FieldDef* field, size_t fieldn) {
 1761|  43.5k|  Type type = vector_type.VectorType();
 1762|  43.5k|  size_t count = 0;
 1763|  43.5k|  auto err = ParseVectorDelimiters(count, [&](size_t&) -> CheckedError {
 1764|  43.5k|    Value val;
 1765|  43.5k|    val.type = type;
 1766|  43.5k|    ECHECK(ParseAnyValue(val, field, fieldn, nullptr, count, true));
 1767|  43.5k|    field_stack_.push_back(std::make_pair(val, nullptr));
 1768|  43.5k|    return NoError();
 1769|  43.5k|  });
 1770|  43.5k|  ECHECK(err);
  ------------------
  |  |   56|  43.5k|  {                            \
  |  |   57|  43.5k|    auto ce = (call);          \
  |  |   58|  43.5k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 4.65k, False: 38.9k]
  |  |  ------------------
  |  |   59|  43.5k|  }
  ------------------
 1771|       |
 1772|  38.9k|  const size_t alignment = InlineAlignment(type);
 1773|  38.9k|  const size_t len = count * InlineSize(type) / InlineAlignment(type);
 1774|  38.9k|  const size_t elemsize = InlineAlignment(type);
 1775|  38.9k|  const auto force_align = field->attributes.Lookup("force_align");
 1776|  38.9k|  if (force_align) {
  ------------------
  |  Branch (1776:7): [True: 5.59k, False: 33.3k]
  ------------------
 1777|  5.59k|    size_t align;
 1778|  5.59k|    ECHECK(ParseAlignAttribute(force_align->constant, 1, &align));
  ------------------
  |  |   56|  5.59k|  {                            \
  |  |   57|  5.59k|    auto ce = (call);          \
  |  |   58|  5.59k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 3, False: 5.59k]
  |  |  ------------------
  |  |   59|  5.59k|  }
  ------------------
 1779|  5.59k|    if (align > 1) {
  ------------------
  |  Branch (1779:9): [True: 5.39k, False: 195]
  ------------------
 1780|  5.39k|      builder_.ForceVectorAlignment(len, elemsize, align);
 1781|  5.39k|    }
 1782|  5.59k|  }
 1783|       |
 1784|       |  // TODO Fix using element alignment as size (`elemsize`)!
 1785|  38.9k|  if (vector_type.base_type == BASE_TYPE_VECTOR64) {
  ------------------
  |  Branch (1785:7): [True: 7.02k, False: 31.8k]
  ------------------
 1786|       |    // TODO(derekbailey): this requires a 64-bit builder.
 1787|       |    // builder_.StartVector<Offset64, uoffset64_t>(len, elemsize, alignment);
 1788|  7.02k|    builder_.StartVector(len, elemsize, alignment);
 1789|  31.8k|  } else {
 1790|  31.8k|    builder_.StartVector(len, elemsize, alignment);
 1791|  31.8k|  }
 1792|   169k|  for (size_t i = 0; i < count; i++) {
  ------------------
  |  Branch (1792:22): [True: 130k, False: 38.8k]
  ------------------
 1793|       |    // start at the back, since we're building the data backwards.
 1794|   130k|    auto& val = field_stack_.back().first;
 1795|   130k|    switch (val.type.base_type) {
  ------------------
  |  Branch (1795:13): [True: 130k, False: 0]
  ------------------
 1796|       |      // clang-format off
 1797|      0|      #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE,...) \
 1798|      0|        case BASE_TYPE_ ## ENUM: \
 1799|      0|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
 1800|      0|          else { \
 1801|      0|             CTYPE elem; \
 1802|      0|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
 1803|      0|             builder_.PushElement(elem); \
 1804|      0|          } \
 1805|      0|          break;
 1806|   130k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  ------------------
  |  |  112|    626|        FLATBUFFERS_GEN_TYPES_SCALAR(TD) \
  |  |  ------------------
  |  |  |  |   50|      0|  TD(NONE,     "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 0) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|      0|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|      0|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 0, False: 130k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|      0|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|      0|          else { \
  |  |  |  |  |  |  |  | 1801|      0|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|      0|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|      0|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|      0|          } \
  |  |  |  |  |  |  |  | 1805|      0|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   51|  5.59k|  TD(UTYPE,    "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 1) /* begin scalar/int */ \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|  5.59k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|  5.59k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 5.59k, False: 125k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|  5.59k|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 5.59k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|  5.59k|          else { \
  |  |  |  |  |  |  |  | 1801|  5.59k|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|  5.59k|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  5.59k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  5.59k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  5.59k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 5, False: 5.59k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  5.59k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|  5.59k|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|  5.59k|          } \
  |  |  |  |  |  |  |  | 1805|  5.59k|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   52|  5.59k|  TD(BOOL,     "bool",   uint8_t,  boolean,bool,    bool,   bool,    bool, Boolean, Bool, 2) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|  2.58k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|  2.58k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 2.58k, False: 128k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|  2.58k|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 2.58k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|  2.58k|          else { \
  |  |  |  |  |  |  |  | 1801|  2.58k|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|  2.58k|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  2.58k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  2.58k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  2.58k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 11, False: 2.57k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  2.58k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|  2.57k|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|  2.57k|          } \
  |  |  |  |  |  |  |  | 1805|  2.57k|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|  5.35k|  TD(CHAR,     "byte",   int8_t,   byte,   int8,    sbyte,  int8,    i8,   Byte, Int8, 3) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|  5.35k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|  5.35k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 5.35k, False: 125k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|  5.35k|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 5.35k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|  5.35k|          else { \
  |  |  |  |  |  |  |  | 1801|  5.35k|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|  5.35k|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  5.35k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  5.35k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  5.35k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 6, False: 5.34k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  5.35k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|  5.34k|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|  5.34k|          } \
  |  |  |  |  |  |  |  | 1805|  5.34k|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   54|  5.34k|  TD(UCHAR,    "ubyte",  uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 4) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|  4.82k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|  4.82k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 4.82k, False: 126k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|  4.82k|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 4.82k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|  4.82k|          else { \
  |  |  |  |  |  |  |  | 1801|  4.82k|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|  4.82k|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  4.82k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  4.82k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  4.82k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 4.81k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  4.82k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|  4.81k|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|  4.81k|          } \
  |  |  |  |  |  |  |  | 1805|  4.81k|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   55|  4.81k|  TD(SHORT,    "short",  int16_t,  short,  int16,   short,  int16,   i16,  Short, Int16, 5) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|    579|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|    579|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 579, False: 130k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|    579|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 579]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|    579|          else { \
  |  |  |  |  |  |  |  | 1801|    579|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|    579|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    579|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    579|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    579|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 8, False: 571]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    579|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|    571|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|    571|          } \
  |  |  |  |  |  |  |  | 1805|    571|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   56|    812|  TD(USHORT,   "ushort", uint16_t, short,  uint16,  ushort, uint16,  u16,  UShort, UInt16, 6) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|    812|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|    812|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 812, False: 130k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|    812|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 812]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|    812|          else { \
  |  |  |  |  |  |  |  | 1801|    812|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|    812|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    812|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    812|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    812|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 6, False: 806]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    812|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|    806|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|    806|          } \
  |  |  |  |  |  |  |  | 1805|    806|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|    806|  TD(INT,      "int",    int32_t,  int,    int32,   int,    int32,   i32,  Int, Int32, 7) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|    721|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|    721|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 721, False: 130k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|    721|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 721]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|    721|          else { \
  |  |  |  |  |  |  |  | 1801|    721|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|    721|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    721|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    721|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    721|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 718]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    721|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|    718|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|    718|          } \
  |  |  |  |  |  |  |  | 1805|    718|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   58|  1.04k|  TD(UINT,     "uint",   uint32_t, int,    uint32,  uint,   uint32,  u32,  UInt, UInt32, 8) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|  1.04k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|  1.04k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 1.04k, False: 129k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|  1.04k|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 1.04k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|  1.04k|          else { \
  |  |  |  |  |  |  |  | 1801|  1.04k|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|  1.04k|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  1.04k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  1.04k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  1.04k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 21, False: 1.02k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  1.04k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|  1.02k|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|  1.02k|          } \
  |  |  |  |  |  |  |  | 1805|  1.02k|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   59|  5.38k|  TD(LONG,     "long",   int64_t,  long,   int64,   long,   int64,   i64,  Long, Int64, 9) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|  5.38k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|  5.38k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 5.38k, False: 125k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|  5.38k|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 5.38k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|  5.38k|          else { \
  |  |  |  |  |  |  |  | 1801|  5.38k|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|  5.38k|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  5.38k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  5.38k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  5.38k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 5.38k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  5.38k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|  5.38k|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|  5.38k|          } \
  |  |  |  |  |  |  |  | 1805|  5.38k|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.38k|  TD(ULONG,    "ulong",  uint64_t, long,   uint64,  ulong,  uint64,  u64,  ULong, UInt64, 10) /* end int */ \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|  1.14k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|  1.14k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 1.14k, False: 129k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|  1.14k|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 1.14k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|  1.14k|          else { \
  |  |  |  |  |  |  |  | 1801|  1.14k|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|  1.14k|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  1.14k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  1.14k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  1.14k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 7, False: 1.13k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  1.14k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|  1.13k|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|  1.13k|          } \
  |  |  |  |  |  |  |  | 1805|  1.13k|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.37k|  TD(FLOAT,    "float",  float,    float,  float32, float,  float32, f32,  Float, Float32, 11) /* begin float */ \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|  1.37k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|  1.37k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 1.37k, False: 129k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|  1.37k|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 1.37k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|  1.37k|          else { \
  |  |  |  |  |  |  |  | 1801|  1.37k|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|  1.37k|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  1.37k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  1.37k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  1.37k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 7, False: 1.36k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  1.37k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|  1.36k|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|  1.36k|          } \
  |  |  |  |  |  |  |  | 1805|  1.36k|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   62|  1.36k|  TD(DOUBLE,   "double", double,   double, float64, double, float64, f64,  Double, Double, 12) /* end float/scalar */
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|    636|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|    636|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 636, False: 130k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|    636|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 636]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|    636|          else { \
  |  |  |  |  |  |  |  | 1801|    636|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|    636|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    636|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    636|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    636|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 10, False: 626]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    636|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|    626|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|    626|          } \
  |  |  |  |  |  |  |  | 1805|    626|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  113|    626|        FLATBUFFERS_GEN_TYPES_POINTER(TD) \
  |  |  ------------------
  |  |  |  |   64|    326|  TD(STRING,   "string", Offset<void>,   int, int, StringOffset, int, unused, Int, Offset<String>, 13) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|    326|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|    326|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 326, False: 130k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|    326|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 326]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|    326|          else { \
  |  |  |  |  |  |  |  | 1801|    326|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|    326|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    326|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    326|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    326|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 326]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    326|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|    326|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|    326|          } \
  |  |  |  |  |  |  |  | 1805|    326|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   65|    326|  TD(VECTOR,   "",       Offset<void>,   int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 14) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|      0|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|      0|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 0, False: 130k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|      0|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|      0|          else { \
  |  |  |  |  |  |  |  | 1801|      0|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|      0|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|      0|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|      0|          } \
  |  |  |  |  |  |  |  | 1805|      0|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   66|      0|  TD(VECTOR64, "",       Offset64<void>, int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 18) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|      0|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|      0|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 0, False: 130k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|      0|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|      0|          else { \
  |  |  |  |  |  |  |  | 1801|      0|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|      0|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|      0|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|      0|          } \
  |  |  |  |  |  |  |  | 1805|      0|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   67|   100k|  TD(STRUCT,   "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 15) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|   100k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|   100k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 100k, False: 30.4k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|   100k|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 20.5k, False: 80.0k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|   100k|          else { \
  |  |  |  |  |  |  |  | 1801|  80.0k|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|  80.0k|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  80.0k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  80.0k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  80.0k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 80.0k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  80.0k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|  80.0k|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|  80.0k|          } \
  |  |  |  |  |  |  |  | 1805|   100k|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   68|   100k|  TD(UNION,    "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 16)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|     67|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|     67|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 67, False: 130k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|     67|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 67]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|     67|          else { \
  |  |  |  |  |  |  |  | 1801|     67|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|     67|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|     67|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|     67|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|     67|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 67]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|     67|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|     67|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|     67|          } \
  |  |  |  |  |  |  |  | 1805|     67|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  114|     67|        FLATBUFFERS_GEN_TYPE_ARRAY(TD)
  |  |  ------------------
  |  |  |  |   70|      0|  TD(ARRAY,    "",       int,            int, int, int,          int, unused, Int, Offset<UOffset>, 17)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|      0|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|      0|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 0, False: 130k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|      0|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|      0|          else { \
  |  |  |  |  |  |  |  | 1801|      0|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|      0|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|      0|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|      0|          } \
  |  |  |  |  |  |  |  | 1805|      0|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1807|   130k|      #undef FLATBUFFERS_TD
 1808|       |      // clang-format on
 1809|   130k|    }
 1810|   130k|    field_stack_.pop_back();
 1811|   130k|  }
 1812|       |
 1813|  38.8k|  builder_.ClearOffsets();
 1814|  38.8k|  if (vector_type.base_type == BASE_TYPE_VECTOR64) {
  ------------------
  |  Branch (1814:7): [True: 7.02k, False: 31.8k]
  ------------------
 1815|  7.02k|    *ovalue = builder_.EndVector<uoffset64_t>(count);
 1816|  31.8k|  } else {
 1817|  31.8k|    *ovalue = builder_.EndVector(count);
 1818|  31.8k|  }
 1819|       |
 1820|  38.8k|  if (type.base_type == BASE_TYPE_STRUCT && type.struct_def->has_key) {
  ------------------
  |  Branch (1820:7): [True: 26.3k, False: 12.4k]
  |  Branch (1820:45): [True: 2.38k, False: 23.9k]
  ------------------
 1821|       |    // We should sort this vector. Find the key first.
 1822|  2.38k|    const FieldDef* key = nullptr;
 1823|  2.38k|    for (auto it = type.struct_def->fields.vec.begin();
 1824|  4.30k|         it != type.struct_def->fields.vec.end(); ++it) {
  ------------------
  |  Branch (1824:10): [True: 4.30k, False: 0]
  ------------------
 1825|  4.30k|      if ((*it)->key) {
  ------------------
  |  Branch (1825:11): [True: 2.38k, False: 1.91k]
  ------------------
 1826|  2.38k|        key = (*it);
 1827|  2.38k|        break;
 1828|  2.38k|      }
 1829|  4.30k|    }
 1830|  2.38k|    FLATBUFFERS_ASSERT(key);
 1831|       |    // Now sort it.
 1832|       |    // We can't use std::sort because for structs the size is not known at
 1833|       |    // compile time, and for tables our iterators dereference offsets, so can't
 1834|       |    // be used to swap elements.
 1835|       |    // And we can't use C qsort either, since that would force use to use
 1836|       |    // globals, making parsing thread-unsafe.
 1837|       |    // So for now, we use SimpleQsort above.
 1838|       |    // TODO: replace with something better, preferably not recursive.
 1839|       |
 1840|  2.38k|    if (type.struct_def->fixed) {
  ------------------
  |  Branch (1840:9): [True: 43, False: 2.34k]
  ------------------
 1841|     43|      const voffset_t offset = key->value.offset;
 1842|     43|      const size_t struct_size = type.struct_def->bytesize;
 1843|     43|      auto v =
 1844|     43|          reinterpret_cast<VectorOfAny*>(builder_.GetCurrentBufferPointer());
 1845|     43|      SimpleQsort<uint8_t>(
 1846|     43|          v->Data(), v->Data() + v->size() * type.struct_def->bytesize,
 1847|     43|          type.struct_def->bytesize,
 1848|     43|          [offset, key](const uint8_t* a, const uint8_t* b) -> bool {
 1849|     43|            return CompareSerializedScalars(a + offset, b + offset, *key);
 1850|     43|          },
 1851|     43|          [struct_size](uint8_t* a, uint8_t* b) {
 1852|       |            // FIXME: faster?
 1853|     43|            for (size_t i = 0; i < struct_size; i++) {
 1854|     43|              std::swap(a[i], b[i]);
 1855|     43|            }
 1856|     43|          });
 1857|  2.34k|    } else {
 1858|  2.34k|      auto v = reinterpret_cast<Vector<Offset<Table>>*>(
 1859|  2.34k|          builder_.GetCurrentBufferPointer());
 1860|       |      // Here also can't use std::sort. We do have an iterator type for it,
 1861|       |      // but it is non-standard as it will dereference the offsets, and thus
 1862|       |      // can't be used to swap elements.
 1863|  2.34k|      if (key->value.type.base_type == BASE_TYPE_STRING) {
  ------------------
  |  Branch (1863:11): [True: 1.22k, False: 1.11k]
  ------------------
 1864|  1.22k|        SimpleQsort<Offset<Table>>(
 1865|  1.22k|            v->data(), v->data() + v->size(), 1,
 1866|  1.22k|            [key](const Offset<Table>* _a, const Offset<Table>* _b) -> bool {
 1867|  1.22k|              return CompareTablesByStringKey(_a, _b, *key);
 1868|  1.22k|            },
 1869|  1.22k|            SwapSerializedTables);
 1870|  1.22k|      } else {
 1871|  1.11k|        SimpleQsort<Offset<Table>>(
 1872|  1.11k|            v->data(), v->data() + v->size(), 1,
 1873|  1.11k|            [key](const Offset<Table>* _a, const Offset<Table>* _b) -> bool {
 1874|  1.11k|              return CompareTablesByScalarKey(_a, _b, *key);
 1875|  1.11k|            },
 1876|  1.11k|            SwapSerializedTables);
 1877|  1.11k|      }
 1878|  2.34k|    }
 1879|  2.38k|  }
 1880|  38.8k|  return NoError();
 1881|  38.8k|}
_ZN11flatbuffers6Parser10ParseArrayERNS_5ValueE:
 1883|  6.29k|CheckedError Parser::ParseArray(Value& array) {
 1884|  6.29k|  std::vector<Value> stack;
 1885|  6.29k|  FlatBufferBuilder builder;
 1886|  6.29k|  const auto& type = array.type.VectorType();
 1887|  6.29k|  auto length = array.type.fixed_length;
 1888|  6.29k|  size_t count = 0;
 1889|  6.29k|  auto err = ParseVectorDelimiters(count, [&](size_t&) -> CheckedError {
 1890|  6.29k|    stack.emplace_back(Value());
 1891|  6.29k|    auto& val = stack.back();
 1892|  6.29k|    val.type = type;
 1893|  6.29k|    if (IsStruct(type)) {
 1894|  6.29k|      ECHECK(ParseTable(*val.type.struct_def, &val.constant, nullptr));
 1895|  6.29k|    } else {
 1896|  6.29k|      ECHECK(ParseSingleValue(nullptr, val, false));
 1897|  6.29k|    }
 1898|  6.29k|    return NoError();
 1899|  6.29k|  });
 1900|  6.29k|  ECHECK(err);
  ------------------
  |  |   56|  6.29k|  {                            \
  |  |   57|  6.29k|    auto ce = (call);          \
  |  |   58|  6.29k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 181, False: 6.11k]
  |  |  ------------------
  |  |   59|  6.29k|  }
  ------------------
 1901|  6.11k|  if (length != count) return Error("Fixed-length array size is incorrect.");
  ------------------
  |  Branch (1901:7): [True: 24, False: 6.09k]
  ------------------
 1902|       |
 1903|  15.0k|  for (auto it = stack.rbegin(); it != stack.rend(); ++it) {
  ------------------
  |  Branch (1903:34): [True: 8.99k, False: 6.05k]
  ------------------
 1904|  8.99k|    auto& val = *it;
 1905|       |    // clang-format off
 1906|  8.99k|    switch (val.type.base_type) {
 1907|      0|      #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
 1908|      0|        case BASE_TYPE_ ## ENUM: \
 1909|      0|          if (IsStruct(val.type)) { \
 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
 1911|      0|          } else { \
 1912|      0|            CTYPE elem; \
 1913|      0|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
 1914|      0|            builder.PushElement(elem); \
 1915|      0|          } \
 1916|      0|        break;
 1917|  8.99k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  ------------------
  |  |  112|    623|        FLATBUFFERS_GEN_TYPES_SCALAR(TD) \
  |  |  ------------------
  |  |  |  |   50|      0|  TD(NONE,     "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 0) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|      0|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|      0|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 0, False: 8.99k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|      0|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|      0|          } else { \
  |  |  |  |  |  |  |  | 1912|      0|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|      0|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|      0|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|      0|          } \
  |  |  |  |  |  |  |  | 1916|      0|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   51|      0|  TD(UTYPE,    "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 1) /* begin scalar/int */ \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|      0|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|      0|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 0, False: 8.99k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|      0|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|      0|          } else { \
  |  |  |  |  |  |  |  | 1912|      0|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|      0|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|      0|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|      0|          } \
  |  |  |  |  |  |  |  | 1916|      0|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   52|  1.03k|  TD(BOOL,     "bool",   uint8_t,  boolean,bool,    bool,   bool,    bool, Boolean, Bool, 2) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|  1.03k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|  1.03k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 1.03k, False: 7.95k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|  1.03k|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 1.03k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|  1.03k|          } else { \
  |  |  |  |  |  |  |  | 1912|  1.03k|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|  1.03k|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  1.03k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  1.03k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  1.03k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 1.03k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  1.03k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|  1.03k|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|  1.03k|          } \
  |  |  |  |  |  |  |  | 1916|  1.03k|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|  1.04k|  TD(CHAR,     "byte",   int8_t,   byte,   int8,    sbyte,  int8,    i8,   Byte, Int8, 3) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|  1.04k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|  1.04k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 1.04k, False: 7.94k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|  1.04k|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 1.04k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|  1.04k|          } else { \
  |  |  |  |  |  |  |  | 1912|  1.04k|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|  1.04k|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  1.04k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  1.04k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  1.04k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 5, False: 1.04k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  1.04k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|  1.04k|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|  1.04k|          } \
  |  |  |  |  |  |  |  | 1916|  1.04k|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   54|  1.04k|  TD(UCHAR,    "ubyte",  uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 4) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|    883|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|    883|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 883, False: 8.10k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|    883|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 883]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|    883|          } else { \
  |  |  |  |  |  |  |  | 1912|    883|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|    883|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    883|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    883|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    883|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 5, False: 878]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    883|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|    878|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|    878|          } \
  |  |  |  |  |  |  |  | 1916|    878|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   55|    878|  TD(SHORT,    "short",  int16_t,  short,  int16,   short,  int16,   i16,  Short, Int16, 5) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|    732|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|    732|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 732, False: 8.25k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|    732|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 732]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|    732|          } else { \
  |  |  |  |  |  |  |  | 1912|    732|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|    732|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    732|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    732|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    732|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 729]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    732|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|    729|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|    729|          } \
  |  |  |  |  |  |  |  | 1916|    729|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   56|    729|  TD(USHORT,   "ushort", uint16_t, short,  uint16,  ushort, uint16,  u16,  UShort, UInt16, 6) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|    541|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|    541|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 541, False: 8.45k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|    541|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 541]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|    541|          } else { \
  |  |  |  |  |  |  |  | 1912|    541|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|    541|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    541|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    541|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    541|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 5, False: 536]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    541|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|    536|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|    536|          } \
  |  |  |  |  |  |  |  | 1916|    536|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|    883|  TD(INT,      "int",    int32_t,  int,    int32,   int,    int32,   i32,  Int, Int32, 7) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|    883|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|    883|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 883, False: 8.10k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|    883|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 883]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|    883|          } else { \
  |  |  |  |  |  |  |  | 1912|    883|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|    883|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    883|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    883|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    883|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 881]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    883|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|    881|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|    881|          } \
  |  |  |  |  |  |  |  | 1916|    881|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   58|    881|  TD(UINT,     "uint",   uint32_t, int,    uint32,  uint,   uint32,  u32,  UInt, UInt32, 8) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|    679|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|    679|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 679, False: 8.31k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|    679|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 679]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|    679|          } else { \
  |  |  |  |  |  |  |  | 1912|    679|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|    679|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    679|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    679|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    679|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 677]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    679|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|    677|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|    677|          } \
  |  |  |  |  |  |  |  | 1916|    677|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   59|    862|  TD(LONG,     "long",   int64_t,  long,   int64,   long,   int64,   i64,  Long, Int64, 9) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|    862|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|    862|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 862, False: 8.12k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|    862|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 862]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|    862|          } else { \
  |  |  |  |  |  |  |  | 1912|    862|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|    862|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    862|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    862|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    862|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 859]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    862|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|    859|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|    859|          } \
  |  |  |  |  |  |  |  | 1916|    859|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.16k|  TD(ULONG,    "ulong",  uint64_t, long,   uint64,  ulong,  uint64,  u64,  ULong, UInt64, 10) /* end int */ \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|  1.16k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|  1.16k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 1.16k, False: 7.82k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|  1.16k|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 1.16k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|  1.16k|          } else { \
  |  |  |  |  |  |  |  | 1912|  1.16k|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|  1.16k|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  1.16k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  1.16k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  1.16k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 1.16k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  1.16k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|  1.16k|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|  1.16k|          } \
  |  |  |  |  |  |  |  | 1916|  1.16k|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.16k|  TD(FLOAT,    "float",  float,    float,  float32, float,  float32, f32,  Float, Float32, 11) /* begin float */ \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|    532|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|    532|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 532, False: 8.45k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|    532|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 532]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|    532|          } else { \
  |  |  |  |  |  |  |  | 1912|    532|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|    532|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    532|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    532|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    532|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 530]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    532|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|    530|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|    530|          } \
  |  |  |  |  |  |  |  | 1916|    530|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   62|    627|  TD(DOUBLE,   "double", double,   double, float64, double, float64, f64,  Double, Double, 12) /* end float/scalar */
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|    627|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|    627|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 627, False: 8.36k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|    627|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 627]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|    627|          } else { \
  |  |  |  |  |  |  |  | 1912|    627|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|    627|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    627|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    627|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    627|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 623]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    627|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|    623|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|    623|          } \
  |  |  |  |  |  |  |  | 1916|    623|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  113|    623|        FLATBUFFERS_GEN_TYPES_POINTER(TD) \
  |  |  ------------------
  |  |  |  |   64|      0|  TD(STRING,   "string", Offset<void>,   int, int, StringOffset, int, unused, Int, Offset<String>, 13) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|      0|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|      0|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 0, False: 8.99k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|      0|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|      0|          } else { \
  |  |  |  |  |  |  |  | 1912|      0|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|      0|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|      0|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|      0|          } \
  |  |  |  |  |  |  |  | 1916|      0|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   65|      0|  TD(VECTOR,   "",       Offset<void>,   int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 14) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|      0|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|      0|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 0, False: 8.99k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|      0|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|      0|          } else { \
  |  |  |  |  |  |  |  | 1912|      0|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|      0|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|      0|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|      0|          } \
  |  |  |  |  |  |  |  | 1916|      0|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   66|      0|  TD(VECTOR64, "",       Offset64<void>, int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 18) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|      0|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|      0|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 0, False: 8.99k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|      0|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|      0|          } else { \
  |  |  |  |  |  |  |  | 1912|      0|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|      0|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|      0|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|      0|          } \
  |  |  |  |  |  |  |  | 1916|      0|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   67|      0|  TD(STRUCT,   "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 15) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|      0|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|      0|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 0, False: 8.99k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|      0|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|      0|          } else { \
  |  |  |  |  |  |  |  | 1912|      0|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|      0|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|      0|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|      0|          } \
  |  |  |  |  |  |  |  | 1916|      0|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   68|      0|  TD(UNION,    "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 16)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|      0|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|      0|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 0, False: 8.99k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|      0|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|      0|          } else { \
  |  |  |  |  |  |  |  | 1912|      0|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|      0|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|      0|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|      0|          } \
  |  |  |  |  |  |  |  | 1916|      0|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  114|      0|        FLATBUFFERS_GEN_TYPE_ARRAY(TD)
  |  |  ------------------
  |  |  |  |   70|      0|  TD(ARRAY,    "",       int,            int, int, int,          int, unused, Int, Offset<UOffset>, 17)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|      0|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|      0|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 0, False: 8.99k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|      0|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|      0|          } else { \
  |  |  |  |  |  |  |  | 1912|      0|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|      0|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|      0|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|      0|          } \
  |  |  |  |  |  |  |  | 1916|      0|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1918|      0|      #undef FLATBUFFERS_TD
 1919|      0|      default: FLATBUFFERS_ASSERT(0);
  ------------------
  |  Branch (1919:7): [True: 0, False: 8.99k]
  ------------------
 1920|  8.99k|    }
 1921|       |    // clang-format on
 1922|  8.99k|  }
 1923|       |
 1924|  6.05k|  array.constant.assign(
 1925|  6.05k|      reinterpret_cast<const char*>(builder.GetCurrentBufferPointer()),
 1926|  6.05k|      InlineSize(array.type));
 1927|  6.05k|  return NoError();
 1928|  6.09k|}
_ZN11flatbuffers6Parser13ParseMetaDataEPNS_11SymbolTableINS_5ValueEEE:
 1977|   720k|CheckedError Parser::ParseMetaData(SymbolTable<Value>* attributes) {
 1978|   720k|  if (Is('(')) {
  ------------------
  |  Branch (1978:7): [True: 13.8k, False: 707k]
  ------------------
 1979|  13.8k|    NEXT();
  ------------------
  |  |   63|  13.8k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  13.8k|  {                            \
  |  |  |  |   57|  13.8k|    auto ce = (call);          \
  |  |  |  |   58|  13.8k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 13.8k]
  |  |  |  |  ------------------
  |  |  |  |   59|  13.8k|  }
  |  |  ------------------
  ------------------
 1980|  17.7k|    for (;;) {
 1981|  17.7k|      auto name = attribute_;
 1982|  17.7k|      if (false == (Is(kTokenIdentifier) || Is(kTokenStringConstant)))
  ------------------
  |  Branch (1982:11): [True: 57, False: 17.7k]
  |  Branch (1982:21): [True: 16.6k, False: 1.11k]
  |  Branch (1982:45): [True: 1.06k, False: 57]
  ------------------
 1983|     57|        return Error("attribute name must be either identifier or string: " +
 1984|     57|                     name);
 1985|  17.7k|      if (known_attributes_.find(name) == known_attributes_.end())
  ------------------
  |  Branch (1985:11): [True: 104, False: 17.6k]
  ------------------
 1986|    104|        return Error("user define attributes must be declared before use: " +
 1987|    104|                     name);
 1988|  17.6k|      NEXT();
  ------------------
  |  |   63|  17.6k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  17.6k|  {                            \
  |  |  |  |   57|  17.6k|    auto ce = (call);          \
  |  |  |  |   58|  17.6k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 5, False: 17.6k]
  |  |  |  |  ------------------
  |  |  |  |   59|  17.6k|  }
  |  |  ------------------
  ------------------
 1989|  17.6k|      auto e = new Value();
 1990|  17.6k|      if (attributes->Add(name, e)) Warning("attribute already found: " + name);
  ------------------
  |  Branch (1990:11): [True: 3.66k, False: 13.9k]
  ------------------
 1991|  17.6k|      if (Is(':')) {
  ------------------
  |  Branch (1991:11): [True: 6.81k, False: 10.8k]
  ------------------
 1992|  6.81k|        NEXT();
  ------------------
  |  |   63|  6.81k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  6.81k|  {                            \
  |  |  |  |   57|  6.81k|    auto ce = (call);          \
  |  |  |  |   58|  6.81k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 6.80k]
  |  |  |  |  ------------------
  |  |  |  |   59|  6.81k|  }
  |  |  ------------------
  ------------------
 1993|  6.80k|        ECHECK(ParseSingleValue(&name, *e, true));
  ------------------
  |  |   56|  6.80k|  {                            \
  |  |   57|  6.80k|    auto ce = (call);          \
  |  |   58|  6.80k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 83, False: 6.72k]
  |  |  ------------------
  |  |   59|  6.80k|  }
  ------------------
 1994|  6.72k|      }
 1995|  17.5k|      if (Is(')')) {
  ------------------
  |  Branch (1995:11): [True: 13.4k, False: 4.13k]
  ------------------
 1996|  13.4k|        NEXT();
  ------------------
  |  |   63|  13.4k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  13.4k|  {                            \
  |  |  |  |   57|  13.4k|    auto ce = (call);          \
  |  |  |  |   58|  13.4k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 13.3k]
  |  |  |  |  ------------------
  |  |  |  |   59|  13.4k|  }
  |  |  ------------------
  ------------------
 1997|  13.3k|        break;
 1998|  13.4k|      }
 1999|  4.13k|      EXPECT(',');
  ------------------
  |  |   64|  4.13k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  4.13k|  {                            \
  |  |  |  |   57|  4.13k|    auto ce = (call);          \
  |  |  |  |   58|  4.13k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 213, False: 3.92k]
  |  |  |  |  ------------------
  |  |  |  |   59|  4.13k|  }
  |  |  ------------------
  ------------------
 2000|  3.92k|    }
 2001|  13.8k|  }
 2002|   720k|  return NoError();
 2003|   720k|}
_ZN11flatbuffers6Parser19ParseEnumFromStringERKNS_4TypeEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
 2006|  1.24k|                                         std::string* result) {
 2007|  1.24k|  const auto base_type =
 2008|  1.24k|      type.enum_def ? type.enum_def->underlying_type.base_type : type.base_type;
  ------------------
  |  Branch (2008:7): [True: 1.13k, False: 116]
  ------------------
 2009|  1.24k|  if (!IsInteger(base_type)) return Error("not a valid value for this field");
  ------------------
  |  Branch (2009:7): [True: 0, False: 1.24k]
  ------------------
 2010|  1.24k|  uint64_t u64 = 0;
 2011|  5.28k|  for (size_t pos = 0; pos != std::string::npos;) {
  ------------------
  |  Branch (2011:24): [True: 4.27k, False: 1.00k]
  ------------------
 2012|  4.27k|    const auto delim = attribute_.find_first_of(' ', pos);
 2013|  4.27k|    const auto last = (std::string::npos == delim);
 2014|  4.27k|    auto word = attribute_.substr(pos, !last ? delim - pos : std::string::npos);
  ------------------
  |  Branch (2014:40): [True: 3.07k, False: 1.20k]
  ------------------
 2015|  4.27k|    pos = !last ? delim + 1 : std::string::npos;
  ------------------
  |  Branch (2015:11): [True: 3.07k, False: 1.20k]
  ------------------
 2016|  4.27k|    const EnumVal* ev = nullptr;
 2017|  4.27k|    if (type.enum_def) {
  ------------------
  |  Branch (2017:9): [True: 3.94k, False: 336]
  ------------------
 2018|  3.94k|      ev = type.enum_def->Lookup(word);
 2019|  3.94k|    } else {
 2020|    336|      auto dot = word.find_first_of('.');
 2021|    336|      if (std::string::npos == dot)
  ------------------
  |  Branch (2021:11): [True: 31, False: 305]
  ------------------
 2022|     31|        return Error("enum values need to be qualified by an enum type");
 2023|    305|      auto enum_def_str = word.substr(0, dot);
 2024|    305|      const auto enum_def = LookupEnum(enum_def_str);
 2025|    305|      if (!enum_def) return Error("unknown enum: " + enum_def_str);
  ------------------
  |  Branch (2025:11): [True: 32, False: 273]
  ------------------
 2026|    273|      auto enum_val_str = word.substr(dot + 1);
 2027|    273|      ev = enum_def->Lookup(enum_val_str);
 2028|    273|    }
 2029|  4.21k|    if (!ev) return Error("unknown enum value: " + word);
  ------------------
  |  Branch (2029:9): [True: 182, False: 4.03k]
  ------------------
 2030|  4.03k|    u64 |= ev->GetAsUInt64();
 2031|  4.03k|  }
 2032|  1.00k|  *result = IsUnsigned(base_type) ? NumToString(u64)
  ------------------
  |  Branch (2032:13): [True: 748, False: 256]
  ------------------
 2033|  1.00k|                                  : NumToString(static_cast<int64_t>(u64));
 2034|  1.00k|  return NoError();
 2035|  1.24k|}
_ZN11flatbuffers6Parser9ParseHashERNS_5ValueEPNS_8FieldDefE:
 2037|  3.21k|CheckedError Parser::ParseHash(Value& e, FieldDef* field) {
 2038|  3.21k|  FLATBUFFERS_ASSERT(field);
 2039|  3.21k|  Value* hash_name = field->attributes.Lookup("hash");
 2040|  3.21k|  switch (e.type.base_type) {
 2041|      0|    case BASE_TYPE_SHORT: {
  ------------------
  |  Branch (2041:5): [True: 0, False: 3.21k]
  ------------------
 2042|      0|      auto hash = FindHashFunction16(hash_name->constant.c_str());
 2043|      0|      int16_t hashed_value = static_cast<int16_t>(hash(attribute_.c_str()));
 2044|      0|      e.constant = NumToString(hashed_value);
 2045|      0|      break;
 2046|      0|    }
 2047|      0|    case BASE_TYPE_USHORT: {
  ------------------
  |  Branch (2047:5): [True: 0, False: 3.21k]
  ------------------
 2048|      0|      auto hash = FindHashFunction16(hash_name->constant.c_str());
 2049|      0|      uint16_t hashed_value = hash(attribute_.c_str());
 2050|      0|      e.constant = NumToString(hashed_value);
 2051|      0|      break;
 2052|      0|    }
 2053|    595|    case BASE_TYPE_INT: {
  ------------------
  |  Branch (2053:5): [True: 595, False: 2.62k]
  ------------------
 2054|    595|      auto hash = FindHashFunction32(hash_name->constant.c_str());
 2055|    595|      int32_t hashed_value = static_cast<int32_t>(hash(attribute_.c_str()));
 2056|    595|      e.constant = NumToString(hashed_value);
 2057|    595|      break;
 2058|      0|    }
 2059|    585|    case BASE_TYPE_UINT: {
  ------------------
  |  Branch (2059:5): [True: 585, False: 2.63k]
  ------------------
 2060|    585|      auto hash = FindHashFunction32(hash_name->constant.c_str());
 2061|    585|      uint32_t hashed_value = hash(attribute_.c_str());
 2062|    585|      e.constant = NumToString(hashed_value);
 2063|    585|      break;
 2064|      0|    }
 2065|  1.37k|    case BASE_TYPE_LONG: {
  ------------------
  |  Branch (2065:5): [True: 1.37k, False: 1.84k]
  ------------------
 2066|  1.37k|      auto hash = FindHashFunction64(hash_name->constant.c_str());
 2067|  1.37k|      int64_t hashed_value = static_cast<int64_t>(hash(attribute_.c_str()));
 2068|  1.37k|      e.constant = NumToString(hashed_value);
 2069|  1.37k|      break;
 2070|      0|    }
 2071|    662|    case BASE_TYPE_ULONG: {
  ------------------
  |  Branch (2071:5): [True: 662, False: 2.55k]
  ------------------
 2072|    662|      auto hash = FindHashFunction64(hash_name->constant.c_str());
 2073|    662|      uint64_t hashed_value = hash(attribute_.c_str());
 2074|    662|      e.constant = NumToString(hashed_value);
 2075|    662|      break;
 2076|      0|    }
 2077|      0|    default:
  ------------------
  |  Branch (2077:5): [True: 0, False: 3.21k]
  ------------------
 2078|      0|      FLATBUFFERS_ASSERT(0);
 2079|  3.21k|  }
 2080|  3.21k|  NEXT();
  ------------------
  |  |   63|  3.21k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  3.21k|  {                            \
  |  |  |  |   57|  3.21k|    auto ce = (call);          \
  |  |  |  |   58|  3.21k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 11, False: 3.20k]
  |  |  |  |  ------------------
  |  |  |  |   59|  3.21k|  }
  |  |  ------------------
  ------------------
 2081|  3.20k|  return NoError();
 2082|  3.21k|}
_ZN11flatbuffers6Parser10TokenErrorEv:
 2084|    242|CheckedError Parser::TokenError() {
 2085|    242|  return Error("cannot parse value starting with: " + TokenToStringId(token_));
 2086|    242|}
_ZN11flatbuffers6Parser13ParseFunctionEPKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERNS_5ValueE:
 2088|  4.49k|CheckedError Parser::ParseFunction(const std::string* name, Value& e) {
 2089|  4.49k|  ParseDepthGuard depth_guard(this);
 2090|  4.49k|  ECHECK(depth_guard.Check());
  ------------------
  |  |   56|  4.49k|  {                            \
  |  |   57|  4.49k|    auto ce = (call);          \
  |  |   58|  4.49k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1, False: 4.49k]
  |  |  ------------------
  |  |   59|  4.49k|  }
  ------------------
 2091|       |
 2092|       |  // Copy name, attribute will be changed on NEXT().
 2093|  4.49k|  const auto functionname = attribute_;
 2094|  4.49k|  if (!IsFloat(e.type.base_type)) {
  ------------------
  |  Branch (2094:7): [True: 15, False: 4.47k]
  ------------------
 2095|     15|    return Error(functionname + ": type of argument mismatch, expecting: " +
 2096|     15|                 TypeName(BASE_TYPE_DOUBLE) +
 2097|     15|                 ", found: " + TypeName(e.type.base_type) +
 2098|     15|                 ", name: " + (name ? *name : "") + ", value: " + e.constant);
  ------------------
  |  Branch (2098:32): [True: 14, False: 1]
  ------------------
 2099|     15|  }
 2100|  4.47k|  NEXT();
  ------------------
  |  |   63|  4.47k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  4.47k|  {                            \
  |  |  |  |   57|  4.47k|    auto ce = (call);          \
  |  |  |  |   58|  4.47k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 0, False: 4.47k]
  |  |  |  |  ------------------
  |  |  |  |   59|  4.47k|  }
  |  |  ------------------
  ------------------
 2101|  4.47k|  EXPECT('(');
  ------------------
  |  |   64|  4.47k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  4.47k|  {                            \
  |  |  |  |   57|  4.47k|    auto ce = (call);          \
  |  |  |  |   58|  4.47k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 4.47k]
  |  |  |  |  ------------------
  |  |  |  |   59|  4.47k|  }
  |  |  ------------------
  ------------------
 2102|  4.47k|  ECHECK(ParseSingleValue(name, e, false));
  ------------------
  |  |   56|  4.47k|  {                            \
  |  |   57|  4.47k|    auto ce = (call);          \
  |  |   58|  4.47k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 218, False: 4.25k]
  |  |  ------------------
  |  |   59|  4.47k|  }
  ------------------
 2103|  4.25k|  EXPECT(')');
  ------------------
  |  |   64|  4.25k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  4.25k|  {                            \
  |  |  |  |   57|  4.25k|    auto ce = (call);          \
  |  |  |  |   58|  4.25k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 26, False: 4.23k]
  |  |  |  |  ------------------
  |  |  |  |   59|  4.25k|  }
  |  |  ------------------
  ------------------
 2104|       |  // calculate with double precision
 2105|  4.23k|  double x, y = 0.0;
 2106|  4.23k|  ECHECK(atot(e.constant.c_str(), *this, &x));
  ------------------
  |  |   56|  4.23k|  {                            \
  |  |   57|  4.23k|    auto ce = (call);          \
  |  |   58|  4.23k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 2, False: 4.23k]
  |  |  ------------------
  |  |   59|  4.23k|  }
  ------------------
 2107|       |  // clang-format off
 2108|  4.23k|  auto func_match = false;
 2109|  4.23k|  #define FLATBUFFERS_FN_DOUBLE(name, op) \
 2110|  4.23k|    if (!func_match && functionname == name) { y = op; func_match = true; }
 2111|  4.23k|  FLATBUFFERS_FN_DOUBLE("deg", x / kPi * 180);
  ------------------
  |  | 2110|  4.23k|    if (!func_match && functionname == name) { y = op; func_match = true; }
  |  |  ------------------
  |  |  |  Branch (2110:9): [True: 4.23k, False: 0]
  |  |  |  Branch (2110:24): [True: 923, False: 3.30k]
  |  |  ------------------
  ------------------
 2112|  4.23k|  FLATBUFFERS_FN_DOUBLE("rad", x * kPi / 180);
  ------------------
  |  | 2110|  4.23k|    if (!func_match && functionname == name) { y = op; func_match = true; }
  |  |  ------------------
  |  |  |  Branch (2110:9): [True: 3.30k, False: 923]
  |  |  |  Branch (2110:24): [True: 195, False: 3.11k]
  |  |  ------------------
  ------------------
 2113|  4.23k|  FLATBUFFERS_FN_DOUBLE("sin", sin(x));
  ------------------
  |  | 2110|  4.23k|    if (!func_match && functionname == name) { y = op; func_match = true; }
  |  |  ------------------
  |  |  |  Branch (2110:9): [True: 3.11k, False: 1.11k]
  |  |  |  Branch (2110:24): [True: 249, False: 2.86k]
  |  |  ------------------
  ------------------
 2114|  4.23k|  FLATBUFFERS_FN_DOUBLE("cos", cos(x));
  ------------------
  |  | 2110|  4.23k|    if (!func_match && functionname == name) { y = op; func_match = true; }
  |  |  ------------------
  |  |  |  Branch (2110:9): [True: 2.86k, False: 1.36k]
  |  |  |  Branch (2110:24): [True: 444, False: 2.42k]
  |  |  ------------------
  ------------------
 2115|  4.23k|  FLATBUFFERS_FN_DOUBLE("tan", tan(x));
  ------------------
  |  | 2110|  4.23k|    if (!func_match && functionname == name) { y = op; func_match = true; }
  |  |  ------------------
  |  |  |  Branch (2110:9): [True: 2.42k, False: 1.81k]
  |  |  |  Branch (2110:24): [True: 559, False: 1.86k]
  |  |  ------------------
  ------------------
 2116|  4.23k|  FLATBUFFERS_FN_DOUBLE("asin", asin(x));
  ------------------
  |  | 2110|  4.23k|    if (!func_match && functionname == name) { y = op; func_match = true; }
  |  |  ------------------
  |  |  |  Branch (2110:9): [True: 1.86k, False: 2.37k]
  |  |  |  Branch (2110:24): [True: 1.03k, False: 831]
  |  |  ------------------
  ------------------
 2117|  4.23k|  FLATBUFFERS_FN_DOUBLE("acos", acos(x));
  ------------------
  |  | 2110|  4.23k|    if (!func_match && functionname == name) { y = op; func_match = true; }
  |  |  ------------------
  |  |  |  Branch (2110:9): [True: 831, False: 3.40k]
  |  |  |  Branch (2110:24): [True: 389, False: 442]
  |  |  ------------------
  ------------------
 2118|  4.23k|  FLATBUFFERS_FN_DOUBLE("atan", atan(x));
  ------------------
  |  | 2110|  4.23k|    if (!func_match && functionname == name) { y = op; func_match = true; }
  |  |  ------------------
  |  |  |  Branch (2110:9): [True: 442, False: 3.78k]
  |  |  |  Branch (2110:24): [True: 401, False: 41]
  |  |  ------------------
  ------------------
 2119|       |  // TODO(wvo): add more useful conversion functions here.
 2120|  4.23k|  #undef FLATBUFFERS_FN_DOUBLE
 2121|       |  // clang-format on
 2122|  4.23k|  if (true != func_match) {
  ------------------
  |  Branch (2122:7): [True: 41, False: 4.19k]
  ------------------
 2123|     41|    return Error(std::string("Unknown conversion function: ") + functionname +
 2124|     41|                 ", field name: " + (name ? *name : "") +
  ------------------
  |  Branch (2124:38): [True: 40, False: 1]
  ------------------
 2125|     41|                 ", value: " + e.constant);
 2126|     41|  }
 2127|  4.19k|  e.constant = NumToString(y);
 2128|  4.19k|  return NoError();
 2129|  4.23k|}
_ZN11flatbuffers6Parser13TryTypedValueEPKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEibRNS_5ValueENS_8BaseTypeEPb:
 2133|   183k|                                   bool* destmatch) {
 2134|   183k|  FLATBUFFERS_ASSERT(*destmatch == false && dtoken == token_);
 2135|   183k|  *destmatch = true;
 2136|   183k|  e.constant = attribute_;
 2137|       |  // Check token match
 2138|   183k|  if (!check) {
  ------------------
  |  Branch (2138:7): [True: 6.79k, False: 176k]
  ------------------
 2139|  6.79k|    if (e.type.base_type == BASE_TYPE_NONE) {
  ------------------
  |  Branch (2139:9): [True: 6.78k, False: 7]
  ------------------
 2140|  6.78k|      e.type.base_type = req;
 2141|  6.78k|    } else {
 2142|      7|      return Error(std::string("type mismatch: expecting: ") +
 2143|      7|                   TypeName(e.type.base_type) + ", found: " + TypeName(req) +
 2144|      7|                   ", name: " + (name ? *name : "") + ", value: " + e.constant);
  ------------------
  |  Branch (2144:34): [True: 7, False: 0]
  ------------------
 2145|      7|    }
 2146|  6.79k|  }
 2147|       |  // The exponent suffix of hexadecimal float-point number is mandatory.
 2148|       |  // A hex-integer constant is forbidden as an initializer of float number.
 2149|   183k|  if ((kTokenFloatConstant != dtoken) && IsFloat(e.type.base_type)) {
  ------------------
  |  Branch (2149:7): [True: 181k, False: 2.12k]
  |  Branch (2149:42): [True: 44.2k, False: 137k]
  ------------------
 2150|  44.2k|    const auto& s = e.constant;
 2151|  44.2k|    const auto k = s.find_first_of("0123456789.");
 2152|  44.2k|    if ((std::string::npos != k) && (s.length() > (k + 1)) &&
  ------------------
  |  Branch (2152:9): [True: 41.1k, False: 3.17k]
  |  Branch (2152:37): [True: 6.07k, False: 35.0k]
  ------------------
 2153|  6.07k|        (s[k] == '0' && is_alpha_char(s[k + 1], 'X')) &&
  ------------------
  |  Branch (2153:10): [True: 3.66k, False: 2.40k]
  |  Branch (2153:25): [True: 430, False: 3.23k]
  ------------------
 2154|    430|        (std::string::npos == s.find_first_of("pP", k + 2))) {
  ------------------
  |  Branch (2154:9): [True: 10, False: 420]
  ------------------
 2155|     10|      return Error(
 2156|     10|          "invalid number, the exponent suffix of hexadecimal "
 2157|     10|          "floating-point literals is mandatory: \"" +
 2158|     10|          s + "\"");
 2159|     10|    }
 2160|  44.2k|  }
 2161|   183k|  NEXT();
  ------------------
  |  |   63|   183k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|   183k|  {                            \
  |  |  |  |   57|   183k|    auto ce = (call);          \
  |  |  |  |   58|   183k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 58, False: 183k]
  |  |  |  |  ------------------
  |  |  |  |   59|   183k|  }
  |  |  ------------------
  ------------------
 2162|   183k|  return NoError();
 2163|   183k|}
_ZN11flatbuffers6Parser16ParseSingleValueEPKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERNS_5ValueEb:
 2166|   192k|                                      bool check_now) {
 2167|   192k|  if (token_ == '+' || token_ == '-') {
  ------------------
  |  Branch (2167:7): [True: 549, False: 192k]
  |  Branch (2167:24): [True: 1.12k, False: 190k]
  ------------------
 2168|  1.67k|    const char sign = static_cast<char>(token_);
 2169|       |    // Get an indentifier: NAN, INF, or function name like cos/sin/deg.
 2170|  1.67k|    NEXT();
  ------------------
  |  |   63|  1.67k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  1.67k|  {                            \
  |  |  |  |   57|  1.67k|    auto ce = (call);          \
  |  |  |  |   58|  1.67k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 0, False: 1.67k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.67k|  }
  |  |  ------------------
  ------------------
 2171|  1.67k|    if (token_ != kTokenIdentifier) return Error("constant name expected");
  ------------------
  |  Branch (2171:9): [True: 0, False: 1.67k]
  ------------------
 2172|  1.67k|    attribute_.insert(size_t(0), size_t(1), sign);
 2173|  1.67k|  }
 2174|       |
 2175|   192k|  const auto in_type = e.type.base_type;
 2176|   192k|  const auto is_tok_ident = (token_ == kTokenIdentifier);
 2177|   192k|  const auto is_tok_string = (token_ == kTokenStringConstant);
 2178|       |
 2179|       |  // First see if this could be a conversion function.
 2180|   192k|  if (is_tok_ident && *cursor_ == '(') {
  ------------------
  |  Branch (2180:7): [True: 14.6k, False: 177k]
  |  Branch (2180:23): [True: 4.49k, False: 10.1k]
  ------------------
 2181|  4.49k|    return ParseFunction(name, e);
 2182|  4.49k|  }
 2183|       |
 2184|       |  // clang-format off
 2185|   188k|  auto match = false;
 2186|       |
 2187|   188k|  #define IF_ECHECK_(force, dtoken, check, req)    \
 2188|   188k|    if (!match && ((dtoken) == token_) && ((check) || flatbuffers::IsConstTrue(force))) \
 2189|   188k|      ECHECK(TryTypedValue(name, dtoken, check, e, req, &match))
 2190|   188k|  #define TRY_ECHECK(dtoken, check, req) IF_ECHECK_(false, dtoken, check, req)
 2191|   188k|  #define FORCE_ECHECK(dtoken, check, req) IF_ECHECK_(true, dtoken, check, req)
 2192|       |  // clang-format on
 2193|       |
 2194|   188k|  if (is_tok_ident || is_tok_string) {
  ------------------
  |  Branch (2194:7): [True: 10.1k, False: 177k]
  |  Branch (2194:23): [True: 9.59k, False: 168k]
  ------------------
 2195|  19.7k|    const auto kTokenStringOrIdent = token_;
 2196|       |    // The string type is a most probable type, check it first.
 2197|  19.7k|    TRY_ECHECK(kTokenStringConstant, in_type == BASE_TYPE_STRING,
  ------------------
  |  | 2190|  19.7k|  #define TRY_ECHECK(dtoken, check, req) IF_ECHECK_(false, dtoken, check, req)
  |  |  ------------------
  |  |  |  | 2188|  19.7k|    if (!match && ((dtoken) == token_) && ((check) || flatbuffers::IsConstTrue(force))) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2188:9): [True: 19.7k, False: 0]
  |  |  |  |  |  Branch (2188:19): [True: 9.59k, False: 10.1k]
  |  |  |  |  |  Branch (2188:44): [True: 76, False: 9.51k]
  |  |  |  |  |  Branch (2188:55): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2189|  19.7k|      ECHECK(TryTypedValue(name, dtoken, check, e, req, &match))
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     76|  {                            \
  |  |  |  |  |  |   57|     76|    auto ce = (call);          \
  |  |  |  |  |  |   58|     76|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (58:9): [True: 1, False: 75]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   59|     76|  }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2198|  19.7k|               BASE_TYPE_STRING);
 2199|       |
 2200|       |    // avoid escaped and non-ascii in the string
 2201|  19.7k|    if (!match && is_tok_string && IsScalar(in_type) &&
  ------------------
  |  Branch (2201:9): [True: 19.7k, False: 75]
  |  Branch (2201:19): [True: 9.51k, False: 10.1k]
  |  Branch (2201:36): [True: 8.53k, False: 980]
  ------------------
 2202|  8.53k|        !attr_is_trivial_ascii_string_) {
  ------------------
  |  Branch (2202:9): [True: 4, False: 8.53k]
  ------------------
 2203|      4|      return Error(
 2204|      4|          std::string("type mismatch or invalid value, an initializer of "
 2205|      4|                      "non-string field must be trivial ASCII string: type: ") +
 2206|      4|          TypeName(in_type) + ", name: " + (name ? *name : "") +
  ------------------
  |  Branch (2206:45): [True: 3, False: 1]
  ------------------
 2207|      4|          ", value: " + attribute_);
 2208|      4|    }
 2209|       |
 2210|       |    // A boolean as true/false. Boolean as Integer check below.
 2211|  19.7k|    if (!match && IsBool(in_type)) {
  ------------------
  |  Branch (2211:9): [True: 19.7k, False: 75]
  |  Branch (2211:19): [True: 8.00k, False: 11.7k]
  ------------------
 2212|  8.00k|      auto is_true = attribute_ == "true";
 2213|  8.00k|      if (is_true || attribute_ == "false") {
  ------------------
  |  Branch (2213:11): [True: 347, False: 7.65k]
  |  Branch (2213:22): [True: 305, False: 7.35k]
  ------------------
 2214|    652|        attribute_ = is_true ? "1" : "0";
  ------------------
  |  Branch (2214:22): [True: 347, False: 305]
  ------------------
 2215|       |        // accepts both kTokenStringConstant and kTokenIdentifier
 2216|    652|        TRY_ECHECK(kTokenStringOrIdent, IsBool(in_type), BASE_TYPE_BOOL);
  ------------------
  |  | 2190|    652|  #define TRY_ECHECK(dtoken, check, req) IF_ECHECK_(false, dtoken, check, req)
  |  |  ------------------
  |  |  |  | 2188|    652|    if (!match && ((dtoken) == token_) && ((check) || flatbuffers::IsConstTrue(force))) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2188:9): [True: 652, False: 0]
  |  |  |  |  |  Branch (2188:19): [True: 652, False: 0]
  |  |  |  |  |  Branch (2188:44): [True: 652, False: 0]
  |  |  |  |  |  Branch (2188:55): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2189|    652|      ECHECK(TryTypedValue(name, dtoken, check, e, req, &match))
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    652|  {                            \
  |  |  |  |  |  |   57|    652|    auto ce = (call);          \
  |  |  |  |  |  |   58|    652|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (58:9): [True: 1, False: 651]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    652|  }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2217|    651|      }
 2218|  8.00k|    }
 2219|       |    // Check for optional scalars.
 2220|  19.7k|    if (!match && IsScalar(in_type) && attribute_ == "null") {
  ------------------
  |  Branch (2220:9): [True: 19.0k, False: 726]
  |  Branch (2220:19): [True: 18.0k, False: 992]
  |  Branch (2220:40): [True: 2.83k, False: 15.2k]
  ------------------
 2221|  2.83k|      e.constant = "null";
 2222|  2.83k|      NEXT();
  ------------------
  |  |   63|  2.83k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  2.83k|  {                            \
  |  |  |  |   57|  2.83k|    auto ce = (call);          \
  |  |  |  |   58|  2.83k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 2.82k]
  |  |  |  |  ------------------
  |  |  |  |   59|  2.83k|  }
  |  |  ------------------
  ------------------
 2223|  2.82k|      match = true;
 2224|  2.82k|    }
 2225|       |    // Check if this could be a string/identifier enum value.
 2226|       |    // Enum can have only true integer base type.
 2227|  19.7k|    if (!match && IsInteger(in_type) && !IsBool(in_type) &&
  ------------------
  |  Branch (2227:9): [True: 16.2k, False: 3.55k]
  |  Branch (2227:19): [True: 11.3k, False: 4.84k]
  |  Branch (2227:41): [True: 4.27k, False: 7.10k]
  ------------------
 2228|  4.27k|        IsIdentifierStart(*attribute_.c_str())) {
  ------------------
  |  Branch (2228:9): [True: 1.24k, False: 3.02k]
  ------------------
 2229|  1.24k|      ECHECK(ParseEnumFromString(e.type, &e.constant));
  ------------------
  |  |   56|  1.24k|  {                            \
  |  |   57|  1.24k|    auto ce = (call);          \
  |  |   58|  1.24k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 245, False: 1.00k]
  |  |  ------------------
  |  |   59|  1.24k|  }
  ------------------
 2230|  1.00k|      NEXT();
  ------------------
  |  |   63|  1.00k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  1.00k|  {                            \
  |  |  |  |   57|  1.00k|    auto ce = (call);          \
  |  |  |  |   58|  1.00k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 1.00k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.00k|  }
  |  |  ------------------
  ------------------
 2231|  1.00k|      match = true;
 2232|  1.00k|    }
 2233|       |    // Parse a float/integer number from the string.
 2234|       |    // A "scalar-in-string" value needs extra checks.
 2235|  19.5k|    if (!match && is_tok_string && IsScalar(in_type)) {
  ------------------
  |  Branch (2235:9): [True: 14.9k, False: 4.55k]
  |  Branch (2235:19): [True: 9.33k, False: 5.63k]
  |  Branch (2235:36): [True: 8.35k, False: 980]
  ------------------
 2236|       |      // Strip trailing whitespaces from attribute_.
 2237|  8.35k|      auto last_non_ws = attribute_.find_last_not_of(' ');
 2238|  8.35k|      if (std::string::npos != last_non_ws) attribute_.resize(last_non_ws + 1);
  ------------------
  |  Branch (2238:11): [True: 7.66k, False: 694]
  ------------------
 2239|  8.35k|      if (IsFloat(e.type.base_type)) {
  ------------------
  |  Branch (2239:11): [True: 679, False: 7.68k]
  ------------------
 2240|       |        // The functions strtod() and strtof() accept both 'nan' and
 2241|       |        // 'nan(number)' literals. While 'nan(number)' is rejected by the parser
 2242|       |        // as an unsupported function if is_tok_ident is true.
 2243|    679|        if (attribute_.find_last_of(')') != std::string::npos) {
  ------------------
  |  Branch (2243:13): [True: 13, False: 666]
  ------------------
 2244|     13|          return Error("invalid number: " + attribute_);
 2245|     13|        }
 2246|    679|      }
 2247|  8.35k|    }
 2248|       |    // Float numbers or nan, inf, pi, etc.
 2249|  19.5k|    TRY_ECHECK(kTokenStringOrIdent, IsFloat(in_type), BASE_TYPE_FLOAT);
  ------------------
  |  | 2190|  19.5k|  #define TRY_ECHECK(dtoken, check, req) IF_ECHECK_(false, dtoken, check, req)
  |  |  ------------------
  |  |  |  | 2188|  19.5k|    if (!match && ((dtoken) == token_) && ((check) || flatbuffers::IsConstTrue(force))) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2188:9): [True: 14.9k, False: 4.55k]
  |  |  |  |  |  Branch (2188:19): [True: 14.9k, False: 0]
  |  |  |  |  |  Branch (2188:44): [True: 3.84k, False: 11.1k]
  |  |  |  |  |  Branch (2188:55): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2189|  19.5k|      ECHECK(TryTypedValue(name, dtoken, check, e, req, &match))
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  3.84k|  {                            \
  |  |  |  |  |  |   57|  3.84k|    auto ce = (call);          \
  |  |  |  |  |  |   58|  3.84k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (58:9): [True: 19, False: 3.82k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  3.84k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2250|       |    // An integer constant in string.
 2251|  19.5k|    TRY_ECHECK(kTokenStringOrIdent, IsInteger(in_type), BASE_TYPE_INT);
  ------------------
  |  | 2190|  19.5k|  #define TRY_ECHECK(dtoken, check, req) IF_ECHECK_(false, dtoken, check, req)
  |  |  ------------------
  |  |  |  | 2188|  19.5k|    if (!match && ((dtoken) == token_) && ((check) || flatbuffers::IsConstTrue(force))) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2188:9): [True: 11.1k, False: 8.38k]
  |  |  |  |  |  Branch (2188:19): [True: 11.1k, False: 0]
  |  |  |  |  |  Branch (2188:44): [True: 10.1k, False: 992]
  |  |  |  |  |  Branch (2188:55): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2189|  19.5k|      ECHECK(TryTypedValue(name, dtoken, check, e, req, &match))
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  10.1k|  {                            \
  |  |  |  |  |  |   57|  10.1k|    auto ce = (call);          \
  |  |  |  |  |  |   58|  10.1k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (58:9): [True: 5, False: 10.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  10.1k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2252|       |    // Unknown tokens will be interpreted as string type.
 2253|       |    // An attribute value may be a scalar or string constant.
 2254|  19.4k|    FORCE_ECHECK(kTokenStringConstant, in_type == BASE_TYPE_STRING,
  ------------------
  |  | 2191|  19.4k|  #define FORCE_ECHECK(dtoken, check, req) IF_ECHECK_(true, dtoken, check, req)
  |  |  ------------------
  |  |  |  | 2188|  19.4k|    if (!match && ((dtoken) == token_) && ((check) || flatbuffers::IsConstTrue(force))) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2188:9): [True: 992, False: 18.5k]
  |  |  |  |  |  Branch (2188:19): [True: 980, False: 12]
  |  |  |  |  |  Branch (2188:44): [True: 0, False: 980]
  |  |  |  |  |  Branch (2188:55): [True: 980, Folded]
  |  |  |  |  ------------------
  |  |  |  | 2189|  19.4k|      ECHECK(TryTypedValue(name, dtoken, check, e, req, &match))
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    980|  {                            \
  |  |  |  |  |  |   57|    980|    auto ce = (call);          \
  |  |  |  |  |  |   58|    980|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 976]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    980|  }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2255|  19.4k|                 BASE_TYPE_STRING);
 2256|   168k|  } else {
 2257|       |    // Try a float number.
 2258|   168k|    TRY_ECHECK(kTokenFloatConstant, IsFloat(in_type), BASE_TYPE_FLOAT);
  ------------------
  |  | 2190|   168k|  #define TRY_ECHECK(dtoken, check, req) IF_ECHECK_(false, dtoken, check, req)
  |  |  ------------------
  |  |  |  | 2188|   168k|    if (!match && ((dtoken) == token_) && ((check) || flatbuffers::IsConstTrue(force))) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2188:9): [True: 168k, False: 0]
  |  |  |  |  |  Branch (2188:19): [True: 2.13k, False: 166k]
  |  |  |  |  |  Branch (2188:44): [True: 2.12k, False: 7]
  |  |  |  |  |  Branch (2188:55): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2189|   168k|      ECHECK(TryTypedValue(name, dtoken, check, e, req, &match))
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  2.12k|  {                            \
  |  |  |  |  |  |   57|  2.12k|    auto ce = (call);          \
  |  |  |  |  |  |   58|  2.12k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 2.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  2.12k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2259|       |    // Integer token can init any scalar (integer of float).
 2260|   168k|    FORCE_ECHECK(kTokenIntegerConstant, IsScalar(in_type), BASE_TYPE_INT);
  ------------------
  |  | 2191|   168k|  #define FORCE_ECHECK(dtoken, check, req) IF_ECHECK_(true, dtoken, check, req)
  |  |  ------------------
  |  |  |  | 2188|   168k|    if (!match && ((dtoken) == token_) && ((check) || flatbuffers::IsConstTrue(force))) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2188:9): [True: 166k, False: 2.12k]
  |  |  |  |  |  Branch (2188:19): [True: 165k, False: 279]
  |  |  |  |  |  Branch (2188:44): [True: 160k, False: 5.81k]
  |  |  |  |  |  Branch (2188:55): [True: 5.81k, Folded]
  |  |  |  |  ------------------
  |  |  |  | 2189|   168k|      ECHECK(TryTypedValue(name, dtoken, check, e, req, &match))
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|   165k|  {                            \
  |  |  |  |  |  |   57|   165k|    auto ce = (call);          \
  |  |  |  |  |  |   58|   165k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (58:9): [True: 41, False: 165k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   165k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2261|   168k|  }
 2262|       |  // Match empty vectors for default-empty-vectors.
 2263|   187k|  if (!match && IsVector(e.type) && token_ == '[') {
  ------------------
  |  Branch (2263:7): [True: 291, False: 187k]
  |  Branch (2263:17): [True: 60, False: 231]
  |  Branch (2263:37): [True: 55, False: 5]
  ------------------
 2264|     55|    NEXT();
  ------------------
  |  |   63|     55|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|     55|  {                            \
  |  |  |  |   57|     55|    auto ce = (call);          \
  |  |  |  |   58|     55|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 54]
  |  |  |  |  ------------------
  |  |  |  |   59|     55|  }
  |  |  ------------------
  ------------------
 2265|     54|    if (token_ != ']') {
  ------------------
  |  Branch (2265:9): [True: 4, False: 50]
  ------------------
 2266|      4|      return Error("Expected `]` in vector default");
 2267|      4|    }
 2268|     50|    NEXT();
  ------------------
  |  |   63|     50|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|     50|  {                            \
  |  |  |  |   57|     50|    auto ce = (call);          \
  |  |  |  |   58|     50|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 49]
  |  |  |  |  ------------------
  |  |  |  |   59|     50|  }
  |  |  ------------------
  ------------------
 2269|     49|    match = true;
 2270|     49|    e.constant = "[]";
 2271|     49|  }
 2272|       |
 2273|   187k|#undef FORCE_ECHECK
 2274|   187k|#undef TRY_ECHECK
 2275|   187k|#undef IF_ECHECK_
 2276|       |
 2277|   187k|  if (!match) {
  ------------------
  |  Branch (2277:7): [True: 236, False: 187k]
  ------------------
 2278|    236|    std::string msg;
 2279|    236|    msg += "Cannot assign token starting with '" + TokenToStringId(token_) +
 2280|    236|           "' to value of <" + std::string(TypeName(in_type)) + "> type.";
 2281|    236|    return Error(msg);
 2282|    236|  }
 2283|   187k|  const auto match_type = e.type.base_type;  // may differ from in_type
 2284|       |  // The check_now flag must be true when parse a fbs-schema.
 2285|       |  // This flag forces to check default scalar values or metadata of field.
 2286|       |  // For JSON parser the flag should be false.
 2287|       |  // If it is set for JSON each value will be checked twice (see ParseTable).
 2288|       |  // Special case 'null' since atot can't handle that.
 2289|   187k|  if (check_now && IsScalar(match_type) && e.constant != "null") {
  ------------------
  |  Branch (2289:7): [True: 10.6k, False: 176k]
  |  Branch (2289:20): [True: 9.52k, False: 1.10k]
  |  Branch (2289:44): [True: 8.60k, False: 913]
  ------------------
 2290|       |    // clang-format off
 2291|  8.60k|    switch (match_type) {
 2292|      0|    #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
 2293|      0|      case BASE_TYPE_ ## ENUM: {\
 2294|      0|          CTYPE val; \
 2295|      0|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
 2296|      0|          SingleValueRepack(e, val); \
 2297|      0|        break; }
 2298|  8.60k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  ------------------
  |  |   50|      0|  TD(NONE,     "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 0) \
  |  |  ------------------
  |  |  |  | 2298|      0|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|      0|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 0, False: 8.60k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|      0|          CTYPE val; \
  |  |  |  |  |  | 2295|      0|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|      0|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|      0|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   51|      0|  TD(UTYPE,    "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 1) /* begin scalar/int */ \
  |  |  ------------------
  |  |  |  | 2298|      0|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|      0|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 0, False: 8.60k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|      0|          CTYPE val; \
  |  |  |  |  |  | 2295|      0|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|  {                            \
  |  |  |  |  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|      0|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|      0|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|      0|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|    255|  TD(BOOL,     "bool",   uint8_t,  boolean,bool,    bool,   bool,    bool, Boolean, Bool, 2) \
  |  |  ------------------
  |  |  |  | 2298|    255|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    255|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 255, False: 8.35k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    116|          CTYPE val; \
  |  |  |  |  |  | 2295|    255|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    255|  {                            \
  |  |  |  |  |  |  |  |   57|    255|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    255|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 139, False: 116]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    255|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    116|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    116|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|    272|  TD(CHAR,     "byte",   int8_t,   byte,   int8,    sbyte,  int8,    i8,   Byte, Int8, 3) \
  |  |  ------------------
  |  |  |  | 2298|    272|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    272|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 272, False: 8.33k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    159|          CTYPE val; \
  |  |  |  |  |  | 2295|    272|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    272|  {                            \
  |  |  |  |  |  |  |  |   57|    272|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    272|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 113, False: 159]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    272|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    159|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    159|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|    159|  TD(UCHAR,    "ubyte",  uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 4) \
  |  |  ------------------
  |  |  |  | 2298|    107|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    107|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 107, False: 8.50k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|     81|          CTYPE val; \
  |  |  |  |  |  | 2295|    107|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    107|  {                            \
  |  |  |  |  |  |  |  |   57|    107|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    107|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 26, False: 81]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    107|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|     81|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|     81|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|    275|  TD(SHORT,    "short",  int16_t,  short,  int16,   short,  int16,   i16,  Short, Int16, 5) \
  |  |  ------------------
  |  |  |  | 2298|    275|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    275|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 275, False: 8.33k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    173|          CTYPE val; \
  |  |  |  |  |  | 2295|    275|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    275|  {                            \
  |  |  |  |  |  |  |  |   57|    275|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    275|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 102, False: 173]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    275|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    173|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    173|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   56|    173|  TD(USHORT,   "ushort", uint16_t, short,  uint16,  ushort, uint16,  u16,  UShort, UInt16, 6) \
  |  |  ------------------
  |  |  |  | 2298|    166|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    166|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 166, False: 8.44k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|     91|          CTYPE val; \
  |  |  |  |  |  | 2295|    166|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    166|  {                            \
  |  |  |  |  |  |  |  |   57|    166|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    166|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 75, False: 91]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    166|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|     91|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|     91|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   57|  6.13k|  TD(INT,      "int",    int32_t,  int,    int32,   int,    int32,   i32,  Int, Int32, 7) \
  |  |  ------------------
  |  |  |  | 2298|  6.13k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|  6.13k|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 6.13k, False: 2.47k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|  6.03k|          CTYPE val; \
  |  |  |  |  |  | 2295|  6.13k|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  6.13k|  {                            \
  |  |  |  |  |  |  |  |   57|  6.13k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  6.13k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 102, False: 6.03k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  6.13k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|  6.03k|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|  6.03k|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  6.03k|  TD(UINT,     "uint",   uint32_t, int,    uint32,  uint,   uint32,  u32,  UInt, UInt32, 8) \
  |  |  ------------------
  |  |  |  | 2298|    349|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    349|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 349, False: 8.25k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    240|          CTYPE val; \
  |  |  |  |  |  | 2295|    349|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    349|  {                            \
  |  |  |  |  |  |  |  |   57|    349|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    349|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 109, False: 240]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    349|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    240|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    240|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   59|    245|  TD(LONG,     "long",   int64_t,  long,   int64,   long,   int64,   i64,  Long, Int64, 9) \
  |  |  ------------------
  |  |  |  | 2298|    245|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    245|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 245, False: 8.36k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    214|          CTYPE val; \
  |  |  |  |  |  | 2295|    245|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    245|  {                            \
  |  |  |  |  |  |  |  |   57|    245|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    245|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 31, False: 214]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    245|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    214|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    214|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|    369|  TD(ULONG,    "ulong",  uint64_t, long,   uint64,  ulong,  uint64,  u64,  ULong, UInt64, 10) /* end int */ \
  |  |  ------------------
  |  |  |  | 2298|    369|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    369|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 369, False: 8.23k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    322|          CTYPE val; \
  |  |  |  |  |  | 2295|    369|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    369|  {                            \
  |  |  |  |  |  |  |  |   57|    369|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    369|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 47, False: 322]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    369|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    322|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    322|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|    322|  TD(FLOAT,    "float",  float,    float,  float32, float,  float32, f32,  Float, Float32, 11) /* begin float */ \
  |  |  ------------------
  |  |  |  | 2298|    231|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    231|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 231, False: 8.37k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    172|          CTYPE val; \
  |  |  |  |  |  | 2295|    231|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    231|  {                            \
  |  |  |  |  |  |  |  |   57|    231|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    231|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 59, False: 172]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    231|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    172|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    172|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|    202|  TD(DOUBLE,   "double", double,   double, float64, double, float64, f64,  Double, Double, 12) /* end float/scalar */
  |  |  ------------------
  |  |  |  | 2298|    202|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    202|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 202, False: 8.40k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    180|          CTYPE val; \
  |  |  |  |  |  | 2295|    202|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    202|  {                            \
  |  |  |  |  |  |  |  |   57|    202|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    202|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 22, False: 180]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    202|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    180|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    180|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2299|      0|    #undef FLATBUFFERS_TD
 2300|      0|    default: break;
  ------------------
  |  Branch (2300:5): [True: 0, False: 8.60k]
  ------------------
 2301|  8.60k|    }
 2302|       |    // clang-format on
 2303|  8.60k|  }
 2304|   186k|  return NoError();
 2305|   187k|}
_ZN11flatbuffers6Parser18LookupCreateStructERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEbb:
 2308|   487k|                                      bool create_if_new, bool definition) {
 2309|   487k|  std::string qualified_name = current_namespace_->GetFullyQualifiedName(name);
 2310|       |  // See if it exists pre-declared by an unqualified use.
 2311|   487k|  auto struct_def = LookupStruct(name);
 2312|   487k|  if (struct_def && struct_def->predecl) {
  ------------------
  |  Branch (2312:7): [True: 209k, False: 277k]
  |  Branch (2312:21): [True: 191k, False: 18.1k]
  ------------------
 2313|   191k|    if (definition) {
  ------------------
  |  Branch (2313:9): [True: 9.76k, False: 181k]
  ------------------
 2314|       |      // Make sure it has the current namespace, and is registered under its
 2315|       |      // qualified name.
 2316|  9.76k|      struct_def->defined_namespace = current_namespace_;
 2317|  9.76k|      structs_.Move(name, qualified_name);
 2318|  9.76k|    }
 2319|   191k|    return struct_def;
 2320|   191k|  }
 2321|       |  // See if it exists pre-declared by an qualified use.
 2322|   295k|  struct_def = LookupStruct(qualified_name);
 2323|   295k|  if (struct_def && struct_def->predecl) {
  ------------------
  |  Branch (2323:7): [True: 7.00k, False: 288k]
  |  Branch (2323:21): [True: 72, False: 6.93k]
  ------------------
 2324|     72|    if (definition) {
  ------------------
  |  Branch (2324:9): [True: 6, False: 66]
  ------------------
 2325|       |      // Make sure it has the current namespace.
 2326|      6|      struct_def->defined_namespace = current_namespace_;
 2327|      6|    }
 2328|     72|    return struct_def;
 2329|     72|  }
 2330|   295k|  if (!definition && !struct_def) {
  ------------------
  |  Branch (2330:7): [True: 229k, False: 65.9k]
  |  Branch (2330:22): [True: 222k, False: 6.92k]
  ------------------
 2331|   222k|    struct_def = LookupStructThruParentNamespaces(name);
 2332|   222k|  }
 2333|   295k|  if (!struct_def && create_if_new) {
  ------------------
  |  Branch (2333:7): [True: 285k, False: 9.81k]
  |  Branch (2333:22): [True: 228k, False: 57.1k]
  ------------------
 2334|   228k|    struct_def = new StructDef();
 2335|   228k|    if (definition) {
  ------------------
  |  Branch (2335:9): [True: 65.9k, False: 162k]
  ------------------
 2336|  65.9k|      structs_.Add(qualified_name, struct_def);
 2337|  65.9k|      struct_def->name = name;
 2338|  65.9k|      struct_def->defined_namespace = current_namespace_;
 2339|   162k|    } else {
 2340|       |      // Not a definition.
 2341|       |      // Rather than failing, we create a "pre declared" StructDef, due to
 2342|       |      // circular references, and check for errors at the end of parsing.
 2343|       |      // It is defined in the current namespace, as the best guess what the
 2344|       |      // final namespace will be.
 2345|   162k|      structs_.Add(name, struct_def);
 2346|   162k|      struct_def->name = name;
 2347|   162k|      struct_def->defined_namespace = current_namespace_;
 2348|   162k|      struct_def->original_location.reset(
 2349|   162k|          new std::string(file_being_parsed_ + ":" + NumToString(line_)));
 2350|   162k|    }
 2351|   228k|  }
 2352|   295k|  return struct_def;
 2353|   295k|}
_ZNK11flatbuffers7EnumDef13ReverseLookupElb:
 2377|  1.56k|                                bool skip_union_default) const {
 2378|  1.56k|  auto skip_first = static_cast<int>(is_union && skip_union_default);
  ------------------
  |  Branch (2378:38): [True: 282, False: 1.28k]
  |  Branch (2378:50): [True: 282, False: 0]
  ------------------
 2379|  1.89k|  for (auto it = Vals().begin() + skip_first; it != Vals().end(); ++it) {
  ------------------
  |  Branch (2379:47): [True: 1.79k, False: 105]
  ------------------
 2380|  1.79k|    if ((*it)->GetAsInt64() == enum_idx) {
  ------------------
  |  Branch (2380:9): [True: 1.45k, False: 334]
  ------------------
 2381|  1.45k|      return *it;
 2382|  1.45k|    }
 2383|  1.79k|  }
 2384|    105|  return nullptr;
 2385|  1.56k|}
_ZNK11flatbuffers7EnumDef11FindByValueERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 2387|  1.28k|EnumVal* EnumDef::FindByValue(const std::string& constant) const {
 2388|  1.28k|  int64_t i64;
 2389|  1.28k|  auto done = false;
 2390|  1.28k|  if (IsUInt64()) {
  ------------------
  |  Branch (2390:7): [True: 347, False: 933]
  ------------------
 2391|    347|    uint64_t u64;  // avoid reinterpret_cast of pointers
 2392|    347|    done = StringToNumber(constant.c_str(), &u64);
 2393|    347|    i64 = static_cast<int64_t>(u64);
 2394|    933|  } else {
 2395|    933|    done = StringToNumber(constant.c_str(), &i64);
 2396|    933|  }
 2397|  1.28k|  FLATBUFFERS_ASSERT(done);
 2398|  1.28k|  if (!done) return nullptr;
  ------------------
  |  Branch (2398:7): [True: 0, False: 1.28k]
  ------------------
 2399|  1.28k|  return ReverseLookup(i64, false);
 2400|  1.28k|}
_ZN11flatbuffers7EnumDef11SortByValueEv:
 2402|   103k|void EnumDef::SortByValue() {
 2403|   103k|  auto& v = vals.vec;
 2404|   103k|  if (IsUInt64())
  ------------------
  |  Branch (2404:7): [True: 11.3k, False: 92.5k]
  ------------------
 2405|  11.3k|    std::sort(v.begin(), v.end(), [](const EnumVal* e1, const EnumVal* e2) {
 2406|  11.3k|      if (e1->GetAsUInt64() == e2->GetAsUInt64()) {
 2407|  11.3k|        return e1->name < e2->name;
 2408|  11.3k|      }
 2409|  11.3k|      return e1->GetAsUInt64() < e2->GetAsUInt64();
 2410|  11.3k|    });
 2411|  92.5k|  else
 2412|  92.5k|    std::sort(v.begin(), v.end(), [](const EnumVal* e1, const EnumVal* e2) {
 2413|  92.5k|      if (e1->GetAsInt64() == e2->GetAsInt64()) {
 2414|  92.5k|        return e1->name < e2->name;
 2415|  92.5k|      }
 2416|  92.5k|      return e1->GetAsInt64() < e2->GetAsInt64();
 2417|  92.5k|    });
 2418|   103k|}
_ZN11flatbuffers6Parser9ParseEnumEbPPNS_7EnumDefEPKc:
 2553|   106k|                               const char* filename) {
 2554|   106k|  std::vector<std::string> enum_comment = doc_comment_;
 2555|   106k|  NEXT();
  ------------------
  |  |   63|   106k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|   106k|  {                            \
  |  |  |  |   57|   106k|    auto ce = (call);          \
  |  |  |  |   58|   106k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 9, False: 106k]
  |  |  |  |  ------------------
  |  |  |  |   59|   106k|  }
  |  |  ------------------
  ------------------
 2556|   106k|  std::string enum_name = attribute_;
 2557|   106k|  EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|   106k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|   106k|  {                            \
  |  |  |  |   57|   106k|    auto ce = (call);          \
  |  |  |  |   58|   106k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 65, False: 106k]
  |  |  |  |  ------------------
  |  |  |  |   59|   106k|  }
  |  |  ------------------
  ------------------
 2558|   106k|  EnumDef* enum_def;
 2559|   106k|  ECHECK(StartEnum(enum_name, is_union, &enum_def));
  ------------------
  |  |   56|   106k|  {                            \
  |  |   57|   106k|    auto ce = (call);          \
  |  |   58|   106k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 74, False: 106k]
  |  |  ------------------
  |  |   59|   106k|  }
  ------------------
 2560|   106k|  if (filename != nullptr && !opts.project_root.empty()) {
  ------------------
  |  Branch (2560:7): [True: 0, False: 106k]
  |  Branch (2560:30): [True: 0, False: 0]
  ------------------
 2561|      0|    enum_def->declaration_file = &GetPooledString(FilePath(
 2562|      0|        opts.project_root, filename, opts.binary_schema_absolute_paths));
 2563|      0|  }
 2564|   106k|  enum_def->doc_comment = enum_comment;
 2565|   106k|  if (!opts.proto_mode) {
  ------------------
  |  Branch (2565:7): [True: 106k, False: 0]
  ------------------
 2566|       |    // Give specialized error message, since this type spec used to
 2567|       |    // be optional in the first FlatBuffers release.
 2568|   106k|    bool explicit_underlying_type = false;
 2569|   106k|    if (!Is(':')) {
  ------------------
  |  Branch (2569:9): [True: 84.4k, False: 22.3k]
  ------------------
 2570|       |      // Enum is forced to have an explicit underlying type in declaration.
 2571|  84.4k|      if (!is_union) {
  ------------------
  |  Branch (2571:11): [True: 148, False: 84.2k]
  ------------------
 2572|    148|        return Error(
 2573|    148|            "must specify the underlying integer type for this"
 2574|    148|            " enum (e.g. \': short\', which was the default).");
 2575|    148|      }
 2576|  84.4k|    } else {
 2577|       |      // Union underlying type is only supported for cpp
 2578|  22.3k|      if (is_union && !SupportsUnionUnderlyingType()) {
  ------------------
  |  Branch (2578:11): [True: 9.39k, False: 12.9k]
  |  Branch (2578:23): [True: 0, False: 9.39k]
  ------------------
 2579|      0|        return Error(
 2580|      0|            "Underlying type for union is not yet supported in at least one of "
 2581|      0|            "the specified programming languages.");
 2582|      0|      }
 2583|  22.3k|      NEXT();
  ------------------
  |  |   63|  22.3k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  22.3k|  {                            \
  |  |  |  |   57|  22.3k|    auto ce = (call);          \
  |  |  |  |   58|  22.3k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 3, False: 22.3k]
  |  |  |  |  ------------------
  |  |  |  |   59|  22.3k|  }
  |  |  ------------------
  ------------------
 2584|  22.3k|      explicit_underlying_type = true;
 2585|  22.3k|    }
 2586|       |
 2587|   106k|    if (explicit_underlying_type) {
  ------------------
  |  Branch (2587:9): [True: 22.3k, False: 84.2k]
  ------------------
 2588|       |      // Specify the integer type underlying this enum.
 2589|  22.3k|      ECHECK(ParseType(enum_def->underlying_type));
  ------------------
  |  |   56|  22.3k|  {                            \
  |  |   57|  22.3k|    auto ce = (call);          \
  |  |   58|  22.3k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 190, False: 22.1k]
  |  |  ------------------
  |  |   59|  22.3k|  }
  ------------------
 2590|  22.1k|      if (!IsInteger(enum_def->underlying_type.base_type) ||
  ------------------
  |  Branch (2590:11): [True: 176, False: 21.9k]
  ------------------
 2591|  21.9k|          IsBool(enum_def->underlying_type.base_type)) {
  ------------------
  |  Branch (2591:11): [True: 1, False: 21.9k]
  ------------------
 2592|    177|        return Error("underlying " + std::string(is_union ? "union" : "enum") +
  ------------------
  |  Branch (2592:50): [True: 38, False: 139]
  ------------------
 2593|    177|                     "type must be integral");
 2594|    177|      }
 2595|       |
 2596|       |      // Make this type refer back to the enum it was derived from.
 2597|  21.9k|      enum_def->underlying_type.enum_def = enum_def;
 2598|  21.9k|    }
 2599|   106k|  }
 2600|   106k|  ECHECK(ParseMetaData(&enum_def->attributes));
  ------------------
  |  |   56|   106k|  {                            \
  |  |   57|   106k|    auto ce = (call);          \
  |  |   58|   106k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 165, False: 106k]
  |  |  ------------------
  |  |   59|   106k|  }
  ------------------
 2601|   106k|  const auto underlying_type = enum_def->underlying_type.base_type;
 2602|   106k|  if (enum_def->attributes.Lookup("bit_flags") &&
  ------------------
  |  Branch (2602:7): [True: 644, False: 105k]
  |  Branch (2602:7): [True: 286, False: 105k]
  ------------------
 2603|    644|      !IsUnsigned(underlying_type)) {
  ------------------
  |  Branch (2603:7): [True: 286, False: 358]
  ------------------
 2604|       |    // todo: Convert to the Error in the future?
 2605|    286|    Warning("underlying type of bit_flags enum must be unsigned");
 2606|    286|  }
 2607|   106k|  if (enum_def->attributes.Lookup("force_align")) {
  ------------------
  |  Branch (2607:7): [True: 1, False: 106k]
  ------------------
 2608|      1|    return Error("`force_align` is not a valid attribute for Enums. ");
 2609|      1|  }
 2610|   106k|  EnumValBuilder evb(*this, *enum_def);
 2611|   106k|  EXPECT('{');
  ------------------
  |  |   64|   106k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|   106k|  {                            \
  |  |  |  |   57|   106k|    auto ce = (call);          \
  |  |  |  |   58|   106k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 211, False: 105k]
  |  |  |  |  ------------------
  |  |  |  |   59|   106k|  }
  |  |  ------------------
  ------------------
 2612|       |  // A lot of code generatos expect that an enum is not-empty.
 2613|   105k|  if ((is_union || Is('}')) && !opts.proto_mode) {
  ------------------
  |  Branch (2613:8): [True: 93.2k, False: 12.5k]
  |  Branch (2613:20): [True: 359, False: 12.2k]
  |  Branch (2613:32): [True: 93.6k, False: 0]
  ------------------
 2614|  93.6k|    evb.CreateEnumerator("NONE");
 2615|  93.6k|    ECHECK(evb.AcceptEnumerator());
  ------------------
  |  |   56|  93.6k|  {                            \
  |  |   57|  93.6k|    auto ce = (call);          \
  |  |   58|  93.6k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 0, False: 93.6k]
  |  |  ------------------
  |  |   59|  93.6k|  }
  ------------------
 2616|  93.6k|  }
 2617|   105k|  std::set<std::pair<BaseType, StructDef*>> union_types;
 2618|   554k|  while (!Is('}')) {
  ------------------
  |  Branch (2618:10): [True: 473k, False: 81.3k]
  ------------------
 2619|   473k|    if (opts.proto_mode && attribute_ == "option") {
  ------------------
  |  Branch (2619:9): [True: 0, False: 473k]
  |  Branch (2619:28): [True: 0, False: 0]
  ------------------
 2620|      0|      ECHECK(ParseProtoOption());
  ------------------
  |  |   56|      0|  {                            \
  |  |   57|      0|    auto ce = (call);          \
  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|      0|  }
  ------------------
 2621|   473k|    } else {
 2622|   473k|      auto& ev = *evb.CreateEnumerator(attribute_);
 2623|   473k|      auto full_name = ev.name;
 2624|   473k|      ev.doc_comment = doc_comment_;
 2625|   473k|      EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|   473k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|   473k|  {                            \
  |  |  |  |   57|   473k|    auto ce = (call);          \
  |  |  |  |   58|   473k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 102, False: 473k]
  |  |  |  |  ------------------
  |  |  |  |   59|   473k|  }
  |  |  ------------------
  ------------------
 2626|   473k|      if (is_union) {
  ------------------
  |  Branch (2626:11): [True: 318k, False: 154k]
  ------------------
 2627|   318k|        ECHECK(ParseNamespacing(&full_name, &ev.name));
  ------------------
  |  |   56|   318k|  {                            \
  |  |   57|   318k|    auto ce = (call);          \
  |  |   58|   318k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 10, False: 318k]
  |  |  ------------------
  |  |   59|   318k|  }
  ------------------
 2628|   318k|        if (opts.union_value_namespacing) {
  ------------------
  |  Branch (2628:13): [True: 318k, False: 0]
  ------------------
 2629|       |          // Since we can't namespace the actual enum identifiers, turn
 2630|       |          // namespace parts into part of the identifier.
 2631|   318k|          ev.name = full_name;
 2632|   318k|          std::replace(ev.name.begin(), ev.name.end(), '.', '_');
 2633|   318k|        }
 2634|   318k|        if (Is(':')) {
  ------------------
  |  Branch (2634:13): [True: 2.55k, False: 315k]
  ------------------
 2635|  2.55k|          NEXT();
  ------------------
  |  |   63|  2.55k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  2.55k|  {                            \
  |  |  |  |   57|  2.55k|    auto ce = (call);          \
  |  |  |  |   58|  2.55k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 2.55k]
  |  |  |  |  ------------------
  |  |  |  |   59|  2.55k|  }
  |  |  ------------------
  ------------------
 2636|  2.55k|          ECHECK(ParseType(ev.union_type));
  ------------------
  |  |   56|  2.55k|  {                            \
  |  |   57|  2.55k|    auto ce = (call);          \
  |  |   58|  2.55k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 6, False: 2.55k]
  |  |  ------------------
  |  |   59|  2.55k|  }
  ------------------
 2637|  2.55k|          if (ev.union_type.base_type != BASE_TYPE_STRUCT &&
  ------------------
  |  Branch (2637:15): [True: 56, False: 2.49k]
  ------------------
 2638|     56|              ev.union_type.base_type != BASE_TYPE_STRING)
  ------------------
  |  Branch (2638:15): [True: 27, False: 29]
  ------------------
 2639|     27|            return Error("union value type may only be table/struct/string");
 2640|   315k|        } else {
 2641|   315k|          ev.union_type = Type(BASE_TYPE_STRUCT, LookupCreateStruct(full_name));
 2642|   315k|        }
 2643|   318k|        if (!enum_def->uses_multiple_type_instances) {
  ------------------
  |  Branch (2643:13): [True: 316k, False: 1.29k]
  ------------------
 2644|   316k|          auto ins = union_types.insert(std::make_pair(
 2645|   316k|              ev.union_type.base_type, ev.union_type.struct_def));
 2646|   316k|          enum_def->uses_multiple_type_instances = (false == ins.second);
 2647|   316k|        }
 2648|   318k|      }
 2649|       |
 2650|   473k|      if (Is('=')) {
  ------------------
  |  Branch (2650:11): [True: 129k, False: 343k]
  ------------------
 2651|   129k|        NEXT();
  ------------------
  |  |   63|   129k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|   129k|  {                            \
  |  |  |  |   57|   129k|    auto ce = (call);          \
  |  |  |  |   58|   129k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 8, False: 129k]
  |  |  |  |  ------------------
  |  |  |  |   59|   129k|  }
  |  |  ------------------
  ------------------
 2652|   129k|        ECHECK(evb.AssignEnumeratorValue(attribute_));
  ------------------
  |  |   56|   129k|  {                            \
  |  |   57|   129k|    auto ce = (call);          \
  |  |   58|   129k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 114, False: 129k]
  |  |  ------------------
  |  |   59|   129k|  }
  ------------------
 2653|   129k|        EXPECT(kTokenIntegerConstant);
  ------------------
  |  |   64|   129k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|   129k|  {                            \
  |  |  |  |   57|   129k|    auto ce = (call);          \
  |  |  |  |   58|   129k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 12, False: 129k]
  |  |  |  |  ------------------
  |  |  |  |   59|   129k|  }
  |  |  ------------------
  ------------------
 2654|   129k|      }
 2655|       |
 2656|   472k|      if (opts.proto_mode && Is('[')) {
  ------------------
  |  Branch (2656:11): [True: 0, False: 472k]
  |  Branch (2656:30): [True: 0, False: 0]
  ------------------
 2657|      0|        NEXT();
  ------------------
  |  |   63|      0|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|      0|  {                            \
  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|  }
  |  |  ------------------
  ------------------
 2658|       |        // ignore attributes on enums.
 2659|      0|        while (token_ != ']') NEXT();
  ------------------
  |  |   63|      0|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|      0|  {                            \
  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|  }
  |  |  ------------------
  ------------------
  |  Branch (2659:16): [True: 0, False: 0]
  ------------------
 2660|      0|        NEXT();
  ------------------
  |  |   63|      0|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|      0|  {                            \
  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|  }
  |  |  ------------------
  ------------------
 2661|   472k|      } else {
 2662|       |        // parse attributes in fbs schema
 2663|   472k|        ECHECK(ParseMetaData(&ev.attributes));
  ------------------
  |  |   56|   472k|  {                            \
  |  |   57|   472k|    auto ce = (call);          \
  |  |   58|   472k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 2, False: 472k]
  |  |  ------------------
  |  |   59|   472k|  }
  ------------------
 2664|   472k|      }
 2665|       |
 2666|   472k|      ECHECK(evb.AcceptEnumerator());
  ------------------
  |  |   56|   472k|  {                            \
  |  |   57|   472k|    auto ce = (call);          \
  |  |   58|   472k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 958, False: 471k]
  |  |  ------------------
  |  |   59|   472k|  }
  ------------------
 2667|   471k|    }
 2668|   471k|    if (!Is(opts.proto_mode ? ';' : ',')) break;
  ------------------
  |  Branch (2668:9): [True: 23.1k, False: 448k]
  |  Branch (2668:13): [True: 0, False: 471k]
  ------------------
 2669|   448k|    NEXT();
  ------------------
  |  |   63|   448k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|   448k|  {                            \
  |  |  |  |   57|   448k|    auto ce = (call);          \
  |  |  |  |   58|   448k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 13, False: 448k]
  |  |  |  |  ------------------
  |  |  |  |   59|   448k|  }
  |  |  ------------------
  ------------------
 2670|   448k|  }
 2671|   104k|  EXPECT('}');
  ------------------
  |  |   64|   104k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|   104k|  {                            \
  |  |  |  |   57|   104k|    auto ce = (call);          \
  |  |  |  |   58|   104k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 612, False: 103k]
  |  |  |  |  ------------------
  |  |  |  |   59|   104k|  }
  |  |  ------------------
  ------------------
 2672|       |
 2673|       |  // At this point, the enum can be empty if input is invalid proto-file.
 2674|   103k|  if (!enum_def->size())
  ------------------
  |  Branch (2674:7): [True: 0, False: 103k]
  ------------------
 2675|      0|    return Error("incomplete enum declaration, values not found");
 2676|       |
 2677|   103k|  if (enum_def->attributes.Lookup("bit_flags")) {
  ------------------
  |  Branch (2677:7): [True: 621, False: 103k]
  ------------------
 2678|    621|    const auto base_width = static_cast<uint64_t>(8 * SizeOf(underlying_type));
 2679|  3.31k|    for (auto it = enum_def->Vals().begin(); it != enum_def->Vals().end();
  ------------------
  |  Branch (2679:46): [True: 2.76k, False: 555]
  ------------------
 2680|  2.76k|         ++it) {
 2681|  2.76k|      auto ev = *it;
 2682|  2.76k|      const auto u = ev->GetAsUInt64();
 2683|       |      // Stop manipulations with the sign.
 2684|  2.76k|      if (!IsUnsigned(underlying_type) && u == (base_width - 1))
  ------------------
  |  Branch (2684:11): [True: 1.35k, False: 1.40k]
  |  Branch (2684:43): [True: 2, False: 1.35k]
  ------------------
 2685|      2|        return Error("underlying type of bit_flags enum must be unsigned");
 2686|  2.75k|      if (u >= base_width)
  ------------------
  |  Branch (2686:11): [True: 64, False: 2.69k]
  ------------------
 2687|     64|        return Error("bit flag out of range of underlying integral type");
 2688|  2.69k|      enum_def->ChangeEnumValue(ev, 1ULL << u);
 2689|  2.69k|    }
 2690|    621|  }
 2691|       |
 2692|   103k|  enum_def->SortByValue();  // Must be sorted to use MinValue/MaxValue.
 2693|       |
 2694|       |  // Ensure enum value uniqueness.
 2695|   103k|  auto prev_it = enum_def->Vals().begin();
 2696|   497k|  for (auto it = prev_it + 1; it != enum_def->Vals().end(); ++it) {
  ------------------
  |  Branch (2696:31): [True: 396k, False: 101k]
  ------------------
 2697|   396k|    auto prev_ev = *prev_it;
 2698|   396k|    auto ev = *it;
 2699|   396k|    if (prev_ev->GetAsUInt64() == ev->GetAsUInt64())
  ------------------
  |  Branch (2699:9): [True: 2.36k, False: 393k]
  ------------------
 2700|  2.36k|      return Error("all enum values must be unique: " + prev_ev->name +
 2701|  2.36k|                   " and " + ev->name + " are both " +
 2702|  2.36k|                   NumToString(ev->GetAsInt64()));
 2703|   396k|  }
 2704|       |
 2705|   101k|  if (dest) *dest = enum_def;
  ------------------
  |  Branch (2705:7): [True: 0, False: 101k]
  ------------------
 2706|   101k|  const auto qualified_name =
 2707|   101k|      current_namespace_->GetFullyQualifiedName(enum_def->name);
 2708|   101k|  if (types_.Add(qualified_name, new Type(BASE_TYPE_UNION, nullptr, enum_def)))
  ------------------
  |  Branch (2708:7): [True: 1, False: 101k]
  ------------------
 2709|      1|    return Error("datatype already exists: " + qualified_name);
 2710|   101k|  return NoError();
 2711|   101k|}
_ZN11flatbuffers6Parser11StartStructERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEPPNS_9StructDefE:
 2713|  75.6k|CheckedError Parser::StartStruct(const std::string& name, StructDef** dest) {
 2714|  75.6k|  auto& struct_def = *LookupCreateStruct(name, true, true);
 2715|  75.6k|  if (!struct_def.predecl)
  ------------------
  |  Branch (2715:7): [True: 4, False: 75.6k]
  ------------------
 2716|      4|    return Error("datatype already exists: " +
 2717|      4|                 current_namespace_->GetFullyQualifiedName(name));
 2718|  75.6k|  struct_def.predecl = false;
 2719|  75.6k|  struct_def.name = name;
 2720|  75.6k|  struct_def.file = file_being_parsed_;
 2721|       |  // Move this struct to the back of the vector just in case it was predeclared,
 2722|       |  // to preserve declaration order.
 2723|  75.6k|  *std::remove(structs_.vec.begin(), structs_.vec.end(), &struct_def) =
 2724|  75.6k|      &struct_def;
 2725|  75.6k|  *dest = &struct_def;
 2726|  75.6k|  return NoError();
 2727|  75.6k|}
_ZN11flatbuffers6Parser10CheckClashERNSt3__16vectorIPNS_8FieldDefENS1_9allocatorIS4_EEEEPNS_9StructDefEPKcNS_8BaseTypeE:
 2731|   432k|                                BaseType basetype) {
 2732|   432k|  auto len = strlen(suffix);
 2733|   817k|  for (auto it = fields.begin(); it != fields.end(); ++it) {
  ------------------
  |  Branch (2733:34): [True: 384k, False: 432k]
  ------------------
 2734|   384k|    auto& fname = (*it)->name;
 2735|   384k|    if (fname.length() > len &&
  ------------------
  |  Branch (2735:9): [True: 75.9k, False: 309k]
  ------------------
 2736|  75.9k|        fname.compare(fname.length() - len, len, suffix) == 0 &&
  ------------------
  |  Branch (2736:9): [True: 18.5k, False: 57.4k]
  ------------------
 2737|  18.5k|        (*it)->value.type.base_type != BASE_TYPE_UTYPE) {
  ------------------
  |  Branch (2737:9): [True: 2.73k, False: 15.7k]
  ------------------
 2738|  2.73k|      auto field =
 2739|  2.73k|          struct_def->fields.Lookup(fname.substr(0, fname.length() - len));
 2740|  2.73k|      if (field && field->value.type.base_type == basetype)
  ------------------
  |  Branch (2740:11): [True: 2.24k, False: 493]
  |  Branch (2740:20): [True: 11, False: 2.23k]
  ------------------
 2741|     11|        return Error("Field " + fname +
 2742|     11|                     " would clash with generated functions for field " +
 2743|     11|                     field->name);
 2744|  2.73k|    }
 2745|   384k|  }
 2746|   432k|  return NoError();
 2747|   432k|}
_ZNK11flatbuffers6Parser23SupportsOptionalScalarsEv:
 2804|    912|bool Parser::SupportsOptionalScalars() const {
 2805|       |  // Check in general if a language isn't specified.
 2806|    912|  return opts.lang_to_generate == 0 || SupportsOptionalScalars(opts);
  ------------------
  |  Branch (2806:10): [True: 912, False: 0]
  |  Branch (2806:40): [True: 0, False: 0]
  ------------------
 2807|    912|}
_ZNK11flatbuffers6Parser32SupportsDefaultVectorsAndStringsEv:
 2809|    106|bool Parser::SupportsDefaultVectorsAndStrings() const {
 2810|    106|  static FLATBUFFERS_CONSTEXPR unsigned long supported_langs =
 2811|    106|      IDLOptions::kRust | IDLOptions::kSwift | IDLOptions::kNim |
 2812|    106|      IDLOptions::kCpp | IDLOptions::kBinary | IDLOptions::kJson |
 2813|    106|      IDLOptions::kTs;
 2814|    106|  return !(opts.lang_to_generate & ~supported_langs);
 2815|    106|}
_ZNK11flatbuffers6Parser29SupportsAdvancedUnionFeaturesEv:
 2817|  2.35k|bool Parser::SupportsAdvancedUnionFeatures() const {
 2818|  2.35k|  return (opts.lang_to_generate &
 2819|  2.35k|          ~(IDLOptions::kCpp | IDLOptions::kTs | IDLOptions::kPhp |
 2820|  2.35k|            IDLOptions::kJava | IDLOptions::kCSharp | IDLOptions::kKotlin |
 2821|  2.35k|            IDLOptions::kBinary | IDLOptions::kSwift | IDLOptions::kNim |
 2822|  2.35k|            IDLOptions::kJson | IDLOptions::kKotlinKmp)) == 0;
 2823|  2.35k|}
_ZNK11flatbuffers6Parser29SupportsAdvancedArrayFeaturesEv:
 2825|    998|bool Parser::SupportsAdvancedArrayFeatures() const {
 2826|    998|  return (opts.lang_to_generate &
 2827|    998|          ~(IDLOptions::kCpp | IDLOptions::kPython | IDLOptions::kJava |
 2828|    998|            IDLOptions::kCSharp | IDLOptions::kJsonSchema | IDLOptions::kJson |
 2829|    998|            IDLOptions::kBinary | IDLOptions::kRust | IDLOptions::kTs |
 2830|    998|            IDLOptions::kSwift)) == 0;
 2831|    998|}
_ZNK11flatbuffers6Parser20Supports64BitOffsetsEv:
 2833|    355|bool Parser::Supports64BitOffsets() const {
 2834|    355|  return (opts.lang_to_generate &
 2835|    355|          ~(IDLOptions::kCpp | IDLOptions::kJson | IDLOptions::kBinary)) == 0;
 2836|    355|}
_ZNK11flatbuffers6Parser27SupportsUnionUnderlyingTypeEv:
 2838|  9.39k|bool Parser::SupportsUnionUnderlyingType() const {
 2839|  9.39k|  return (opts.lang_to_generate &
 2840|  9.39k|          ~(IDLOptions::kCpp | IDLOptions::kTs | IDLOptions::kBinary)) == 0;
 2841|  9.39k|}
_ZN11flatbuffers6Parser15UniqueNamespaceEPNS_9NamespaceE:
 2843|  20.7k|Namespace* Parser::UniqueNamespace(Namespace* ns) {
 2844|   275k|  for (auto it = namespaces_.begin(); it != namespaces_.end(); ++it) {
  ------------------
  |  Branch (2844:39): [True: 256k, False: 19.6k]
  ------------------
 2845|   256k|    if (ns->components == (*it)->components) {
  ------------------
  |  Branch (2845:9): [True: 1.05k, False: 255k]
  ------------------
 2846|  1.05k|      delete ns;
 2847|  1.05k|      return *it;
 2848|  1.05k|    }
 2849|   256k|  }
 2850|  19.6k|  namespaces_.push_back(ns);
 2851|  19.6k|  return ns;
 2852|  20.7k|}
_ZN11flatbuffers6Parser9ParseDeclEPKc:
 2869|  77.0k|CheckedError Parser::ParseDecl(const char* filename) {
 2870|  77.0k|  std::vector<std::string> dc = doc_comment_;
 2871|  77.0k|  bool fixed = IsIdent("struct");
 2872|  77.0k|  if (!fixed && !IsIdent("table")) return Error("declaration expected");
  ------------------
  |  Branch (2872:7): [True: 75.7k, False: 1.24k]
  |  Branch (2872:17): [True: 1.32k, False: 74.4k]
  ------------------
 2873|  75.6k|  NEXT();
  ------------------
  |  |   63|  75.6k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  75.6k|  {                            \
  |  |  |  |   57|  75.6k|    auto ce = (call);          \
  |  |  |  |   58|  75.6k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 5, False: 75.6k]
  |  |  |  |  ------------------
  |  |  |  |   59|  75.6k|  }
  |  |  ------------------
  ------------------
 2874|  75.6k|  std::string name = attribute_;
 2875|  75.6k|  EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|  75.6k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  75.6k|  {                            \
  |  |  |  |   57|  75.6k|    auto ce = (call);          \
  |  |  |  |   58|  75.6k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 17, False: 75.6k]
  |  |  |  |  ------------------
  |  |  |  |   59|  75.6k|  }
  |  |  ------------------
  ------------------
 2876|  75.6k|  StructDef* struct_def;
 2877|  75.6k|  ECHECK(StartStruct(name, &struct_def));
  ------------------
  |  |   56|  75.6k|  {                            \
  |  |   57|  75.6k|    auto ce = (call);          \
  |  |   58|  75.6k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 4, False: 75.6k]
  |  |  ------------------
  |  |   59|  75.6k|  }
  ------------------
 2878|  75.6k|  struct_def->doc_comment = dc;
 2879|  75.6k|  struct_def->fixed = fixed;
 2880|  75.6k|  if (filename && !opts.project_root.empty()) {
  ------------------
  |  Branch (2880:7): [True: 0, False: 75.6k]
  |  Branch (2880:19): [True: 0, False: 0]
  ------------------
 2881|      0|    struct_def->declaration_file = &GetPooledString(FilePath(
 2882|      0|        opts.project_root, filename, opts.binary_schema_absolute_paths));
 2883|      0|  }
 2884|  75.6k|  ECHECK(ParseMetaData(&struct_def->attributes));
  ------------------
  |  |   56|  75.6k|  {                            \
  |  |   57|  75.6k|    auto ce = (call);          \
  |  |   58|  75.6k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 260, False: 75.4k]
  |  |  ------------------
  |  |   59|  75.6k|  }
  ------------------
 2885|  75.4k|  struct_def->sortbysize =
 2886|  75.4k|      struct_def->attributes.Lookup("original_order") == nullptr && !fixed;
  ------------------
  |  Branch (2886:7): [True: 75.3k, False: 98]
  |  Branch (2886:69): [True: 74.0k, False: 1.23k]
  ------------------
 2887|  75.4k|  EXPECT('{');
  ------------------
  |  |   64|  75.4k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  75.4k|  {                            \
  |  |  |  |   57|  75.4k|    auto ce = (call);          \
  |  |  |  |   58|  75.4k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 131, False: 75.2k]
  |  |  |  |  ------------------
  |  |  |  |   59|  75.4k|  }
  |  |  ------------------
  ------------------
 2888|   129k|  while (token_ != '}') ECHECK(ParseField(*struct_def));
  ------------------
  |  |   56|   132k|  {                            \
  |  |   57|   132k|    auto ce = (call);          \
  |  |   58|   132k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 2.69k, False: 54.4k]
  |  |  ------------------
  |  |   59|   132k|  }
  ------------------
  |  Branch (2888:10): [True: 57.1k, False: 72.5k]
  ------------------
 2889|  72.5k|  if (fixed) {
  ------------------
  |  Branch (2889:7): [True: 1.04k, False: 71.5k]
  ------------------
 2890|  1.04k|    const auto force_align = struct_def->attributes.Lookup("force_align");
 2891|  1.04k|    if (force_align) {
  ------------------
  |  Branch (2891:9): [True: 326, False: 716]
  ------------------
 2892|    326|      size_t align;
 2893|    326|      ECHECK(ParseAlignAttribute(force_align->constant, struct_def->minalign,
  ------------------
  |  |   56|    326|  {                            \
  |  |   57|    326|    auto ce = (call);          \
  |  |   58|    326|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 112, False: 214]
  |  |  ------------------
  |  |   59|    326|  }
  ------------------
 2894|    326|                                 &align));
 2895|    214|      struct_def->minalign = align;
 2896|    214|    }
 2897|    930|    if (!struct_def->bytesize) return Error("size 0 structs not allowed");
  ------------------
  |  Branch (2897:9): [True: 7, False: 923]
  ------------------
 2898|    930|  }
 2899|  72.4k|  struct_def->PadLastField(struct_def->minalign);
 2900|       |  // Check if this is a table that has manual id assignments
 2901|  72.4k|  auto& fields = struct_def->fields.vec;
 2902|  72.4k|  if (!fixed && fields.size()) {
  ------------------
  |  Branch (2902:7): [True: 71.5k, False: 923]
  |  Branch (2902:17): [True: 26.0k, False: 45.4k]
  ------------------
 2903|  26.0k|    size_t num_id_fields = 0;
 2904|  96.9k|    for (auto it = fields.begin(); it != fields.end(); ++it) {
  ------------------
  |  Branch (2904:36): [True: 70.9k, False: 26.0k]
  ------------------
 2905|  70.9k|      if ((*it)->attributes.Lookup("id")) num_id_fields++;
  ------------------
  |  Branch (2905:11): [True: 8.69k, False: 62.2k]
  ------------------
 2906|  70.9k|    }
 2907|       |    // If any fields have ids..
 2908|  26.0k|    if (num_id_fields || opts.require_explicit_ids) {
  ------------------
  |  Branch (2908:9): [True: 370, False: 25.6k]
  |  Branch (2908:26): [True: 0, False: 25.6k]
  ------------------
 2909|       |      // Then all fields must have them.
 2910|    370|      if (num_id_fields != fields.size()) {
  ------------------
  |  Branch (2910:11): [True: 1, False: 369]
  ------------------
 2911|      1|        if (opts.require_explicit_ids) {
  ------------------
  |  Branch (2911:13): [True: 0, False: 1]
  ------------------
 2912|      0|          return Error(
 2913|      0|              "all fields must have an 'id' attribute when "
 2914|      0|              "--require-explicit-ids is used");
 2915|      1|        } else {
 2916|      1|          return Error(
 2917|      1|              "either all fields or no fields must have an 'id' attribute");
 2918|      1|        }
 2919|      1|      }
 2920|       |      // Simply sort by id, then the fields are the same as if no ids had
 2921|       |      // been specified.
 2922|    369|      std::sort(fields.begin(), fields.end(), compareFieldDefs);
 2923|       |      // Verify we have a contiguous set, and reassign vtable offsets.
 2924|    369|      FLATBUFFERS_ASSERT(fields.size() <=
 2925|    369|                         flatbuffers::numeric_limits<voffset_t>::max());
 2926|    863|      for (voffset_t i = 0; i < static_cast<voffset_t>(fields.size()); i++) {
  ------------------
  |  Branch (2926:29): [True: 805, False: 58]
  ------------------
 2927|    805|        auto& field = *fields[i];
 2928|    805|        const auto& id_str = field.attributes.Lookup("id")->constant;
 2929|       |
 2930|       |        // Metadata values have a dynamic type, they can be `float`, 'int', or
 2931|       |        // 'string`.
 2932|       |        // The FieldIndexToOffset(i) expects the voffset_t so `id` is limited by
 2933|       |        // this type.
 2934|    805|        voffset_t id = 0;
 2935|    805|        const auto done = !atot(id_str.c_str(), *this, &id).Check();
 2936|    805|        if (!done)
  ------------------
  |  Branch (2936:13): [True: 37, False: 768]
  ------------------
 2937|     37|          return Error("field id\'s must be non-negative number, field: " +
 2938|     37|                       field.name + ", id: " + id_str);
 2939|    768|        if (i != id)
  ------------------
  |  Branch (2939:13): [True: 274, False: 494]
  ------------------
 2940|    274|          return Error("field id\'s must be consecutive from 0, id " +
 2941|    274|                       NumToString(i) + " missing or set twice, field: " +
 2942|    274|                       field.name + ", id: " + id_str);
 2943|    494|        field.value.offset = FieldIndexToOffset(i);
 2944|    494|      }
 2945|    369|    }
 2946|  26.0k|  }
 2947|       |
 2948|  72.1k|  ECHECK(
  ------------------
  |  |   56|  72.1k|  {                            \
  |  |   57|  72.1k|    auto ce = (call);          \
  |  |   58|  72.1k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 0, False: 72.1k]
  |  |  ------------------
  |  |   59|  72.1k|  }
  ------------------
 2949|  72.1k|      CheckClash(fields, struct_def, UnionTypeFieldSuffix(), BASE_TYPE_UNION));
 2950|  72.1k|  ECHECK(CheckClash(fields, struct_def, "Type", BASE_TYPE_UNION));
  ------------------
  |  |   56|  72.1k|  {                            \
  |  |   57|  72.1k|    auto ce = (call);          \
  |  |   58|  72.1k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 8, False: 72.1k]
  |  |  ------------------
  |  |   59|  72.1k|  }
  ------------------
 2951|  72.1k|  ECHECK(CheckClash(fields, struct_def, "_length", BASE_TYPE_VECTOR));
  ------------------
  |  |   56|  72.1k|  {                            \
  |  |   57|  72.1k|    auto ce = (call);          \
  |  |   58|  72.1k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1, False: 72.1k]
  |  |  ------------------
  |  |   59|  72.1k|  }
  ------------------
 2952|  72.1k|  ECHECK(CheckClash(fields, struct_def, "Length", BASE_TYPE_VECTOR));
  ------------------
  |  |   56|  72.1k|  {                            \
  |  |   57|  72.1k|    auto ce = (call);          \
  |  |   58|  72.1k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1, False: 72.1k]
  |  |  ------------------
  |  |   59|  72.1k|  }
  ------------------
 2953|  72.1k|  ECHECK(CheckClash(fields, struct_def, "_byte_vector", BASE_TYPE_STRING));
  ------------------
  |  |   56|  72.1k|  {                            \
  |  |   57|  72.1k|    auto ce = (call);          \
  |  |   58|  72.1k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 0, False: 72.1k]
  |  |  ------------------
  |  |   59|  72.1k|  }
  ------------------
 2954|  72.1k|  ECHECK(CheckClash(fields, struct_def, "ByteVector", BASE_TYPE_STRING));
  ------------------
  |  |   56|  72.1k|  {                            \
  |  |   57|  72.1k|    auto ce = (call);          \
  |  |   58|  72.1k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1, False: 72.1k]
  |  |  ------------------
  |  |   59|  72.1k|  }
  ------------------
 2955|  72.1k|  EXPECT('}');
  ------------------
  |  |   64|  72.1k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  72.1k|  {                            \
  |  |  |  |   57|  72.1k|    auto ce = (call);          \
  |  |  |  |   58|  72.1k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 5, False: 72.1k]
  |  |  |  |  ------------------
  |  |  |  |   59|  72.1k|  }
  |  |  ------------------
  ------------------
 2956|  72.1k|  const auto qualified_name =
 2957|  72.1k|      current_namespace_->GetFullyQualifiedName(struct_def->name);
 2958|  72.1k|  if (types_.Add(qualified_name,
  ------------------
  |  Branch (2958:7): [True: 3, False: 72.1k]
  ------------------
 2959|  72.1k|                 new Type(BASE_TYPE_STRUCT, struct_def, nullptr)))
 2960|      3|    return Error("datatype already exists: " + qualified_name);
 2961|  72.1k|  return NoError();
 2962|  72.1k|}
_ZN11flatbuffers6Parser12ParseServiceEPKc:
 2964|  2.76k|CheckedError Parser::ParseService(const char* filename) {
 2965|  2.76k|  std::vector<std::string> service_comment = doc_comment_;
 2966|  2.76k|  NEXT();
  ------------------
  |  |   63|  2.76k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  2.76k|  {                            \
  |  |  |  |   57|  2.76k|    auto ce = (call);          \
  |  |  |  |   58|  2.76k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 3, False: 2.75k]
  |  |  |  |  ------------------
  |  |  |  |   59|  2.76k|  }
  |  |  ------------------
  ------------------
 2967|  2.75k|  auto service_name = attribute_;
 2968|  2.75k|  EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|  2.75k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  2.75k|  {                            \
  |  |  |  |   57|  2.75k|    auto ce = (call);          \
  |  |  |  |   58|  2.75k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 2.75k]
  |  |  |  |  ------------------
  |  |  |  |   59|  2.75k|  }
  |  |  ------------------
  ------------------
 2969|  2.75k|  auto& service_def = *new ServiceDef();
 2970|  2.75k|  service_def.name = service_name;
 2971|  2.75k|  service_def.file = file_being_parsed_;
 2972|  2.75k|  service_def.doc_comment = service_comment;
 2973|  2.75k|  service_def.defined_namespace = current_namespace_;
 2974|  2.75k|  if (filename != nullptr && !opts.project_root.empty()) {
  ------------------
  |  Branch (2974:7): [True: 0, False: 2.75k]
  |  Branch (2974:30): [True: 0, False: 0]
  ------------------
 2975|      0|    service_def.declaration_file = &GetPooledString(FilePath(
 2976|      0|        opts.project_root, filename, opts.binary_schema_absolute_paths));
 2977|      0|  }
 2978|  2.75k|  if (services_.Add(current_namespace_->GetFullyQualifiedName(service_name),
  ------------------
  |  Branch (2978:7): [True: 6, False: 2.74k]
  ------------------
 2979|  2.75k|                    &service_def))
 2980|      6|    return Error("service already exists: " + service_name);
 2981|  2.74k|  ECHECK(ParseMetaData(&service_def.attributes));
  ------------------
  |  |   56|  2.74k|  {                            \
  |  |   57|  2.74k|    auto ce = (call);          \
  |  |   58|  2.74k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 9, False: 2.74k]
  |  |  ------------------
  |  |   59|  2.74k|  }
  ------------------
 2982|  2.74k|  EXPECT('{');
  ------------------
  |  |   64|  2.74k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  2.74k|  {                            \
  |  |  |  |   57|  2.74k|    auto ce = (call);          \
  |  |  |  |   58|  2.74k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 108, False: 2.63k]
  |  |  |  |  ------------------
  |  |  |  |   59|  2.74k|  }
  |  |  ------------------
  ------------------
 2983|  7.97k|  do {
 2984|  7.97k|    std::vector<std::string> doc_comment = doc_comment_;
 2985|  7.97k|    auto rpc_name = attribute_;
 2986|  7.97k|    EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|  7.97k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  7.97k|  {                            \
  |  |  |  |   57|  7.97k|    auto ce = (call);          \
  |  |  |  |   58|  7.97k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 34, False: 7.94k]
  |  |  |  |  ------------------
  |  |  |  |   59|  7.97k|  }
  |  |  ------------------
  ------------------
 2987|  7.94k|    EXPECT('(');
  ------------------
  |  |   64|  7.94k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  7.94k|  {                            \
  |  |  |  |   57|  7.94k|    auto ce = (call);          \
  |  |  |  |   58|  7.94k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 54, False: 7.88k]
  |  |  |  |  ------------------
  |  |  |  |   59|  7.94k|  }
  |  |  ------------------
  ------------------
 2988|  7.88k|    Type reqtype, resptype;
 2989|  7.88k|    ECHECK(ParseTypeIdent(reqtype));
  ------------------
  |  |   56|  7.88k|  {                            \
  |  |   57|  7.88k|    auto ce = (call);          \
  |  |   58|  7.88k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 5, False: 7.88k]
  |  |  ------------------
  |  |   59|  7.88k|  }
  ------------------
 2990|  7.88k|    EXPECT(')');
  ------------------
  |  |   64|  7.88k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  7.88k|  {                            \
  |  |  |  |   57|  7.88k|    auto ce = (call);          \
  |  |  |  |   58|  7.88k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 8, False: 7.87k]
  |  |  |  |  ------------------
  |  |  |  |   59|  7.88k|  }
  |  |  ------------------
  ------------------
 2991|  7.87k|    EXPECT(':');
  ------------------
  |  |   64|  7.87k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  7.87k|  {                            \
  |  |  |  |   57|  7.87k|    auto ce = (call);          \
  |  |  |  |   58|  7.87k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 5, False: 7.86k]
  |  |  |  |  ------------------
  |  |  |  |   59|  7.87k|  }
  |  |  ------------------
  ------------------
 2992|  7.86k|    ECHECK(ParseTypeIdent(resptype));
  ------------------
  |  |   56|  7.86k|  {                            \
  |  |   57|  7.86k|    auto ce = (call);          \
  |  |   58|  7.86k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 5, False: 7.86k]
  |  |  ------------------
  |  |   59|  7.86k|  }
  ------------------
 2993|  7.86k|    if (reqtype.base_type != BASE_TYPE_STRUCT || reqtype.struct_def->fixed ||
  ------------------
  |  Branch (2993:9): [True: 1, False: 7.86k]
  |  Branch (2993:50): [True: 1, False: 7.86k]
  ------------------
 2994|  7.86k|        resptype.base_type != BASE_TYPE_STRUCT || resptype.struct_def->fixed)
  ------------------
  |  Branch (2994:9): [True: 2, False: 7.85k]
  |  Branch (2994:51): [True: 1, False: 7.85k]
  ------------------
 2995|      5|      return Error("rpc request and response types must be tables");
 2996|  7.85k|    auto& rpc = *new RPCCall();
 2997|  7.85k|    rpc.name = rpc_name;
 2998|  7.85k|    rpc.request = reqtype.struct_def;
 2999|  7.85k|    rpc.response = resptype.struct_def;
 3000|  7.85k|    rpc.doc_comment = doc_comment;
 3001|  7.85k|    if (service_def.calls.Add(rpc_name, &rpc))
  ------------------
  |  Branch (3001:9): [True: 14, False: 7.84k]
  ------------------
 3002|     14|      return Error("rpc already exists: " + rpc_name);
 3003|  7.84k|    ECHECK(ParseMetaData(&rpc.attributes));
  ------------------
  |  |   56|  7.84k|  {                            \
  |  |   57|  7.84k|    auto ce = (call);          \
  |  |   58|  7.84k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 4, False: 7.84k]
  |  |  ------------------
  |  |   59|  7.84k|  }
  ------------------
 3004|  7.84k|    EXPECT(';');
  ------------------
  |  |   64|  7.84k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  7.84k|  {                            \
  |  |  |  |   57|  7.84k|    auto ce = (call);          \
  |  |  |  |   58|  7.84k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 149, False: 7.69k]
  |  |  |  |  ------------------
  |  |  |  |   59|  7.84k|  }
  |  |  ------------------
  ------------------
 3005|  7.69k|  } while (token_ != '}');
  ------------------
  |  Branch (3005:12): [True: 5.34k, False: 2.34k]
  ------------------
 3006|  2.34k|  NEXT();
  ------------------
  |  |   63|  2.34k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  2.34k|  {                            \
  |  |  |  |   57|  2.34k|    auto ce = (call);          \
  |  |  |  |   58|  2.34k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 2.34k]
  |  |  |  |  ------------------
  |  |  |  |   59|  2.34k|  }
  |  |  ------------------
  ------------------
 3007|  2.34k|  return NoError();
 3008|  2.34k|}
_ZN11flatbuffers6Parser11SetRootTypeEPKc:
 3010|  9.31k|bool Parser::SetRootType(const char* name) {
 3011|  9.31k|  root_struct_def_ = LookupStruct(name);
 3012|  9.31k|  if (!root_struct_def_)
  ------------------
  |  Branch (3012:7): [True: 558, False: 8.75k]
  ------------------
 3013|    558|    root_struct_def_ =
 3014|    558|        LookupStruct(current_namespace_->GetFullyQualifiedName(name));
 3015|  9.31k|  return root_struct_def_ != nullptr;
 3016|  9.31k|}
_ZN11flatbuffers6Parser14ParseNamespaceEv:
 3035|  20.8k|CheckedError Parser::ParseNamespace() {
 3036|  20.8k|  NEXT();
  ------------------
  |  |   63|  20.8k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  20.8k|  {                            \
  |  |  |  |   57|  20.8k|    auto ce = (call);          \
  |  |  |  |   58|  20.8k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 4, False: 20.8k]
  |  |  |  |  ------------------
  |  |  |  |   59|  20.8k|  }
  |  |  ------------------
  ------------------
 3037|  20.8k|  auto ns = new Namespace();
 3038|  20.8k|  namespaces_.push_back(ns);  // Store it here to not leak upon error.
 3039|  20.8k|  if (token_ != ';') {
  ------------------
  |  Branch (3039:7): [True: 20.4k, False: 402]
  ------------------
 3040|  42.4k|    for (;;) {
 3041|  42.4k|      ns->components.push_back(attribute_);
 3042|  42.4k|      EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|  42.4k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  42.4k|  {                            \
  |  |  |  |   57|  42.4k|    auto ce = (call);          \
  |  |  |  |   58|  42.4k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 62, False: 42.3k]
  |  |  |  |  ------------------
  |  |  |  |   59|  42.4k|  }
  |  |  ------------------
  ------------------
 3043|  42.3k|      if (Is('.')) NEXT() else break;
  ------------------
  |  |   63|  22.0k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  22.0k|  {                            \
  |  |  |  |   57|  22.0k|    auto ce = (call);          \
  |  |  |  |   58|  22.0k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 22.0k]
  |  |  |  |  ------------------
  |  |  |  |   59|  22.0k|  }
  |  |  ------------------
  ------------------
  |  Branch (3043:11): [True: 22.0k, False: 20.3k]
  ------------------
 3044|  42.3k|    }
 3045|  20.4k|  }
 3046|  20.7k|  namespaces_.pop_back();
 3047|  20.7k|  current_namespace_ = UniqueNamespace(ns);
 3048|  20.7k|  EXPECT(';');
  ------------------
  |  |   64|  20.7k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  20.7k|  {                            \
  |  |  |  |   57|  20.7k|    auto ce = (call);          \
  |  |  |  |   58|  20.7k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 120, False: 20.6k]
  |  |  |  |  ------------------
  |  |  |  |   59|  20.7k|  }
  |  |  ------------------
  ------------------
 3049|  20.6k|  return NoError();
 3050|  20.7k|}
_ZN11flatbuffers6Parser9StartEnumERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEbPPNS_7EnumDefE:
 3121|   106k|                               EnumDef** dest) {
 3122|   106k|  auto& enum_def = *new EnumDef();
 3123|   106k|  enum_def.name = name;
 3124|   106k|  enum_def.file = file_being_parsed_;
 3125|   106k|  enum_def.doc_comment = doc_comment_;
 3126|   106k|  enum_def.is_union = is_union;
 3127|   106k|  enum_def.defined_namespace = current_namespace_;
 3128|   106k|  const auto qualified_name = current_namespace_->GetFullyQualifiedName(name);
 3129|   106k|  if (enums_.Add(qualified_name, &enum_def))
  ------------------
  |  Branch (3129:7): [True: 74, False: 106k]
  ------------------
 3130|     74|    return Error("enum already exists: " + qualified_name);
 3131|   106k|  enum_def.underlying_type.base_type =
 3132|   106k|      is_union ? BASE_TYPE_UTYPE : BASE_TYPE_INT;
  ------------------
  |  Branch (3132:7): [True: 93.6k, False: 13.0k]
  ------------------
 3133|   106k|  enum_def.underlying_type.enum_def = &enum_def;
 3134|   106k|  if (dest) *dest = &enum_def;
  ------------------
  |  Branch (3134:7): [True: 106k, False: 0]
  ------------------
 3135|   106k|  return NoError();
 3136|   106k|}
_ZN11flatbuffers6Parser16SkipAnyJsonValueEv:
 3453|  14.8k|CheckedError Parser::SkipAnyJsonValue() {
 3454|  14.8k|  ParseDepthGuard depth_guard(this);
 3455|  14.8k|  ECHECK(depth_guard.Check());
  ------------------
  |  |   56|  14.8k|  {                            \
  |  |   57|  14.8k|    auto ce = (call);          \
  |  |   58|  14.8k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 3, False: 14.8k]
  |  |  ------------------
  |  |   59|  14.8k|  }
  ------------------
 3456|       |
 3457|  14.8k|  switch (token_) {
 3458|    824|    case '{': {
  ------------------
  |  Branch (3458:5): [True: 824, False: 14.0k]
  ------------------
 3459|    824|      size_t fieldn_outer = 0;
 3460|    824|      return ParseTableDelimiters(fieldn_outer, nullptr,
 3461|    824|                                  [&](const std::string&, size_t& fieldn,
 3462|    824|                                      const StructDef*) -> CheckedError {
 3463|    824|                                    ECHECK(SkipAnyJsonValue());
 3464|    824|                                    fieldn++;
 3465|    824|                                    return NoError();
 3466|    824|                                  });
 3467|      0|    }
 3468|  1.33k|    case '[': {
  ------------------
  |  Branch (3468:5): [True: 1.33k, False: 13.5k]
  ------------------
 3469|  1.33k|      size_t count = 0;
 3470|  1.33k|      return ParseVectorDelimiters(
 3471|  1.33k|          count, [&](size_t&) -> CheckedError { return SkipAnyJsonValue(); });
 3472|      0|    }
 3473|    467|    case kTokenStringConstant:
  ------------------
  |  Branch (3473:5): [True: 467, False: 14.3k]
  ------------------
 3474|  11.1k|    case kTokenIntegerConstant:
  ------------------
  |  Branch (3474:5): [True: 10.6k, False: 4.18k]
  ------------------
 3475|  11.8k|    case kTokenFloatConstant:
  ------------------
  |  Branch (3475:5): [True: 730, False: 14.1k]
  ------------------
 3476|  11.8k|      NEXT();
  ------------------
  |  |   63|  11.8k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  11.8k|  {                            \
  |  |  |  |   57|  11.8k|    auto ce = (call);          \
  |  |  |  |   58|  11.8k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 5, False: 11.8k]
  |  |  |  |  ------------------
  |  |  |  |   59|  11.8k|  }
  |  |  ------------------
  ------------------
 3477|  11.8k|      break;
 3478|    836|    default:
  ------------------
  |  Branch (3478:5): [True: 836, False: 13.9k]
  ------------------
 3479|    836|      if (IsIdent("true") || IsIdent("false") || IsIdent("null") ||
  ------------------
  |  Branch (3479:11): [True: 210, False: 626]
  |  Branch (3479:30): [True: 194, False: 432]
  |  Branch (3479:50): [True: 163, False: 269]
  ------------------
 3480|    762|          IsIdent("inf")) {
  ------------------
  |  Branch (3480:11): [True: 195, False: 74]
  ------------------
 3481|    762|        NEXT();
  ------------------
  |  |   63|    762|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    762|  {                            \
  |  |  |  |   57|    762|    auto ce = (call);          \
  |  |  |  |   58|    762|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 761]
  |  |  |  |  ------------------
  |  |  |  |   59|    762|  }
  |  |  ------------------
  ------------------
 3482|    761|      } else
 3483|     74|        return TokenError();
 3484|  14.8k|  }
 3485|  12.6k|  return NoError();
 3486|  14.8k|}
_ZN11flatbuffers6Parser30ParseFlexBufferNumericConstantEPN11flexbuffers7BuilderE:
 3489|  1.65k|    flexbuffers::Builder* builder) {
 3490|  1.65k|  double d;
 3491|  1.65k|  if (!StringToNumber(attribute_.c_str(), &d))
  ------------------
  |  Branch (3491:7): [True: 13, False: 1.64k]
  ------------------
 3492|     13|    return Error("unexpected floating-point constant: " + attribute_);
 3493|  1.64k|  builder->Double(d);
 3494|  1.64k|  return NoError();
 3495|  1.65k|}
_ZN11flatbuffers6Parser20ParseFlexBufferValueEPN11flexbuffers7BuilderE:
 3497|   319k|CheckedError Parser::ParseFlexBufferValue(flexbuffers::Builder* builder) {
 3498|   319k|  ParseDepthGuard depth_guard(this);
 3499|   319k|  ECHECK(depth_guard.Check());
  ------------------
  |  |   56|   319k|  {                            \
  |  |   57|   319k|    auto ce = (call);          \
  |  |   58|   319k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 4, False: 319k]
  |  |  ------------------
  |  |   59|   319k|  }
  ------------------
 3500|       |
 3501|   319k|  switch (token_) {
 3502|  39.6k|    case '{': {
  ------------------
  |  Branch (3502:5): [True: 39.6k, False: 280k]
  ------------------
 3503|  39.6k|      auto start = builder->StartMap();
 3504|  39.6k|      size_t fieldn_outer = 0;
 3505|  39.6k|      auto err =
 3506|  39.6k|          ParseTableDelimiters(fieldn_outer, nullptr,
 3507|  39.6k|                               [&](const std::string& name, size_t& fieldn,
 3508|  39.6k|                                   const StructDef*) -> CheckedError {
 3509|  39.6k|                                 builder->Key(name);
 3510|  39.6k|                                 ECHECK(ParseFlexBufferValue(builder));
 3511|  39.6k|                                 fieldn++;
 3512|  39.6k|                                 return NoError();
 3513|  39.6k|                               });
 3514|  39.6k|      ECHECK(err);
  ------------------
  |  |   56|  39.6k|  {                            \
  |  |   57|  39.6k|    auto ce = (call);          \
  |  |   58|  39.6k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 816, False: 38.8k]
  |  |  ------------------
  |  |   59|  39.6k|  }
  ------------------
 3515|  38.8k|      builder->EndMap(start);
 3516|  38.8k|      if (builder->HasDuplicateKeys())
  ------------------
  |  Branch (3516:11): [True: 1.74k, False: 37.0k]
  ------------------
 3517|  1.74k|        return Error("FlexBuffers map has duplicate keys");
 3518|  37.0k|      break;
 3519|  38.8k|    }
 3520|  37.0k|    case '[': {
  ------------------
  |  Branch (3520:5): [True: 6.34k, False: 313k]
  ------------------
 3521|  6.34k|      auto start = builder->StartVector();
 3522|  6.34k|      size_t count = 0;
 3523|  6.34k|      ECHECK(ParseVectorDelimiters(count, [&](size_t&) -> CheckedError {
  ------------------
  |  |   56|  6.34k|  {                            \
  |  |   57|  6.34k|    auto ce = (call);          \
  |  |   58|  6.34k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 832, False: 5.50k]
  |  |  ------------------
  |  |   59|  6.34k|  }
  ------------------
 3524|  6.34k|        return ParseFlexBufferValue(builder);
 3525|  6.34k|      }));
 3526|  5.50k|      builder->EndVector(start, false, false);
 3527|  5.50k|      break;
 3528|  6.34k|    }
 3529|  4.59k|    case kTokenStringConstant:
  ------------------
  |  Branch (3529:5): [True: 4.59k, False: 315k]
  ------------------
 3530|  4.59k|      builder->String(attribute_);
 3531|  4.59k|      EXPECT(kTokenStringConstant);
  ------------------
  |  |   64|  4.59k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  4.59k|  {                            \
  |  |  |  |   57|  4.59k|    auto ce = (call);          \
  |  |  |  |   58|  4.59k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 28, False: 4.56k]
  |  |  |  |  ------------------
  |  |  |  |   59|  4.59k|  }
  |  |  ------------------
  ------------------
 3532|  4.56k|      break;
 3533|   234k|    case kTokenIntegerConstant:
  ------------------
  |  Branch (3533:5): [True: 234k, False: 85.0k]
  ------------------
 3534|   234k|      builder->Int(StringToInt(attribute_.c_str()));
 3535|   234k|      EXPECT(kTokenIntegerConstant);
  ------------------
  |  |   64|   234k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|   234k|  {                            \
  |  |  |  |   57|   234k|    auto ce = (call);          \
  |  |  |  |   58|   234k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 19, False: 234k]
  |  |  |  |  ------------------
  |  |  |  |   59|   234k|  }
  |  |  ------------------
  ------------------
 3536|   234k|      break;
 3537|  31.3k|    case kTokenFloatConstant: {
  ------------------
  |  Branch (3537:5): [True: 31.3k, False: 288k]
  ------------------
 3538|  31.3k|      double d;
 3539|  31.3k|      StringToNumber(attribute_.c_str(), &d);
 3540|  31.3k|      builder->Double(d);
 3541|  31.3k|      EXPECT(kTokenFloatConstant);
  ------------------
  |  |   64|  31.3k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  31.3k|  {                            \
  |  |  |  |   57|  31.3k|    auto ce = (call);          \
  |  |  |  |   58|  31.3k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 31.3k]
  |  |  |  |  ------------------
  |  |  |  |   59|  31.3k|  }
  |  |  ------------------
  ------------------
 3542|  31.3k|      break;
 3543|  31.3k|    }
 3544|     38|    case '-':
  ------------------
  |  Branch (3544:5): [True: 38, False: 319k]
  ------------------
 3545|    399|    case '+': {
  ------------------
  |  Branch (3545:5): [True: 361, False: 319k]
  ------------------
 3546|       |      // `[-+]?(nan|inf|infinity)`, see ParseSingleValue().
 3547|    399|      const auto sign = static_cast<char>(token_);
 3548|    399|      NEXT();
  ------------------
  |  |   63|    399|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    399|  {                            \
  |  |  |  |   57|    399|    auto ce = (call);          \
  |  |  |  |   58|    399|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 0, False: 399]
  |  |  |  |  ------------------
  |  |  |  |   59|    399|  }
  |  |  ------------------
  ------------------
 3549|    399|      if (token_ != kTokenIdentifier)
  ------------------
  |  Branch (3549:11): [True: 0, False: 399]
  ------------------
 3550|      0|        return Error("floating-point constant expected");
 3551|    399|      attribute_.insert(size_t(0), size_t(1), sign);
 3552|    399|      ECHECK(ParseFlexBufferNumericConstant(builder));
  ------------------
  |  |   56|    399|  {                            \
  |  |   57|    399|    auto ce = (call);          \
  |  |   58|    399|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 13, False: 386]
  |  |  ------------------
  |  |   59|    399|  }
  ------------------
 3553|    386|      NEXT();
  ------------------
  |  |   63|    386|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    386|  {                            \
  |  |  |  |   57|    386|    auto ce = (call);          \
  |  |  |  |   58|    386|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 385]
  |  |  |  |  ------------------
  |  |  |  |   59|    386|  }
  |  |  ------------------
  ------------------
 3554|    385|      break;
 3555|    386|    }
 3556|  2.74k|    default:
  ------------------
  |  Branch (3556:5): [True: 2.74k, False: 316k]
  ------------------
 3557|  2.74k|      if (IsIdent("true")) {
  ------------------
  |  Branch (3557:11): [True: 525, False: 2.22k]
  ------------------
 3558|    525|        builder->Bool(true);
 3559|    525|        NEXT();
  ------------------
  |  |   63|    525|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    525|  {                            \
  |  |  |  |   57|    525|    auto ce = (call);          \
  |  |  |  |   58|    525|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 524]
  |  |  |  |  ------------------
  |  |  |  |   59|    525|  }
  |  |  ------------------
  ------------------
 3560|  2.22k|      } else if (IsIdent("false")) {
  ------------------
  |  Branch (3560:18): [True: 401, False: 1.81k]
  ------------------
 3561|    401|        builder->Bool(false);
 3562|    401|        NEXT();
  ------------------
  |  |   63|    401|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    401|  {                            \
  |  |  |  |   57|    401|    auto ce = (call);          \
  |  |  |  |   58|    401|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 400]
  |  |  |  |  ------------------
  |  |  |  |   59|    401|  }
  |  |  ------------------
  ------------------
 3563|  1.81k|      } else if (IsIdent("null")) {
  ------------------
  |  Branch (3563:18): [True: 391, False: 1.42k]
  ------------------
 3564|    391|        builder->Null();
 3565|    391|        NEXT();
  ------------------
  |  |   63|    391|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    391|  {                            \
  |  |  |  |   57|    391|    auto ce = (call);          \
  |  |  |  |   58|    391|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 389]
  |  |  |  |  ------------------
  |  |  |  |   59|    391|  }
  |  |  ------------------
  ------------------
 3566|  1.42k|      } else if (IsIdent("inf") || IsIdent("infinity") || IsIdent("nan")) {
  ------------------
  |  Branch (3566:18): [True: 754, False: 674]
  |  Branch (3566:36): [True: 198, False: 476]
  |  Branch (3566:59): [True: 308, False: 168]
  ------------------
 3567|  1.26k|        ECHECK(ParseFlexBufferNumericConstant(builder));
  ------------------
  |  |   56|  1.26k|  {                            \
  |  |   57|  1.26k|    auto ce = (call);          \
  |  |   58|  1.26k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 0, False: 1.26k]
  |  |  ------------------
  |  |   59|  1.26k|  }
  ------------------
 3568|  1.26k|        NEXT();
  ------------------
  |  |   63|  1.26k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  1.26k|  {                            \
  |  |  |  |   57|  1.26k|    auto ce = (call);          \
  |  |  |  |   58|  1.26k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 3, False: 1.25k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.26k|  }
  |  |  ------------------
  ------------------
 3569|  1.25k|      } else
 3570|    168|        return TokenError();
 3571|   319k|  }
 3572|   316k|  return NoError();
 3573|   319k|}
_ZN11flatbuffers6Parser5ParseEPKcPS2_S2_:
 3587|  27.6k|                   const char* source_filename) {
 3588|  27.6k|  const auto initial_depth = parse_depth_counter_;
 3589|  27.6k|  (void)initial_depth;
 3590|  27.6k|  bool r;
 3591|       |
 3592|  27.6k|  if (opts.use_flexbuffers) {
  ------------------
  |  Branch (3592:7): [True: 0, False: 27.6k]
  ------------------
 3593|      0|    r = ParseFlexBuffer(source, source_filename, &flex_builder_);
 3594|  27.6k|  } else {
 3595|  27.6k|    r = !ParseRoot(source, include_paths, source_filename).Check();
 3596|  27.6k|  }
 3597|  27.6k|  FLATBUFFERS_ASSERT(initial_depth == parse_depth_counter_);
 3598|  27.6k|  return r;
 3599|  27.6k|}
_ZN11flatbuffers6Parser14StartParseFileEPKcS2_:
 3616|  27.6k|                                    const char* source_filename) {
 3617|  27.6k|  file_being_parsed_ = source_filename ? source_filename : "";
  ------------------
  |  Branch (3617:24): [True: 14, False: 27.6k]
  ------------------
 3618|  27.6k|  source_ = source;
 3619|  27.6k|  ResetState(source_);
 3620|  27.6k|  error_.clear();
 3621|  27.6k|  ECHECK(SkipByteOrderMark());
  ------------------
  |  |   56|  27.6k|  {                            \
  |  |   57|  27.6k|    auto ce = (call);          \
  |  |   58|  27.6k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 17, False: 27.6k]
  |  |  ------------------
  |  |   59|  27.6k|  }
  ------------------
 3622|  27.6k|  NEXT();
  ------------------
  |  |   63|  27.6k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  27.6k|  {                            \
  |  |  |  |   57|  27.6k|    auto ce = (call);          \
  |  |  |  |   58|  27.6k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 511, False: 27.1k]
  |  |  |  |  ------------------
  |  |  |  |   59|  27.6k|  }
  |  |  ------------------
  ------------------
 3623|  27.1k|  if (Is(kTokenEof)) return Error("input file is empty");
  ------------------
  |  Branch (3623:7): [True: 125, False: 27.0k]
  ------------------
 3624|  27.0k|  return NoError();
 3625|  27.1k|}
_ZN11flatbuffers6Parser9ParseRootEPKcPS2_S2_:
 3628|  27.6k|                               const char* source_filename) {
 3629|  27.6k|  ECHECK(DoParse(source, include_paths, source_filename, nullptr));
  ------------------
  |  |   56|  27.6k|  {                            \
  |  |   57|  27.6k|    auto ce = (call);          \
  |  |   58|  27.6k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 11.7k, False: 15.9k]
  |  |  ------------------
  |  |   59|  27.6k|  }
  ------------------
 3630|       |
 3631|       |  // Check that all types were defined.
 3632|  81.5k|  for (auto it = structs_.vec.begin(); it != structs_.vec.end();) {
  ------------------
  |  Branch (3632:40): [True: 68.2k, False: 13.3k]
  ------------------
 3633|  68.2k|    auto& struct_def = **it;
 3634|  68.2k|    if (struct_def.predecl) {
  ------------------
  |  Branch (3634:9): [True: 2.60k, False: 65.6k]
  ------------------
 3635|  2.60k|      if (opts.proto_mode) {
  ------------------
  |  Branch (3635:11): [True: 0, False: 2.60k]
  ------------------
 3636|       |        // Protos allow enums to be used before declaration, so check if that
 3637|       |        // is the case here.
 3638|      0|        EnumDef* enum_def = nullptr;
 3639|      0|        for (size_t components =
 3640|      0|                 struct_def.defined_namespace->components.size() + 1;
 3641|      0|             components && !enum_def; components--) {
  ------------------
  |  Branch (3641:14): [True: 0, False: 0]
  |  Branch (3641:28): [True: 0, False: 0]
  ------------------
 3642|      0|          auto qualified_name =
 3643|      0|              struct_def.defined_namespace->GetFullyQualifiedName(
 3644|      0|                  struct_def.name, components - 1);
 3645|      0|          enum_def = LookupEnum(qualified_name);
 3646|      0|        }
 3647|      0|        if (enum_def) {
  ------------------
  |  Branch (3647:13): [True: 0, False: 0]
  ------------------
 3648|       |          // This is pretty slow, but a simple solution for now.
 3649|      0|          auto initial_count = struct_def.refcount;
 3650|      0|          for (auto struct_it = structs_.vec.begin();
 3651|      0|               struct_it != structs_.vec.end(); ++struct_it) {
  ------------------
  |  Branch (3651:16): [True: 0, False: 0]
  ------------------
 3652|      0|            auto& sd = **struct_it;
 3653|      0|            for (auto field_it = sd.fields.vec.begin();
 3654|      0|                 field_it != sd.fields.vec.end(); ++field_it) {
  ------------------
  |  Branch (3654:18): [True: 0, False: 0]
  ------------------
 3655|      0|              auto& field = **field_it;
 3656|      0|              if (field.value.type.struct_def == &struct_def) {
  ------------------
  |  Branch (3656:19): [True: 0, False: 0]
  ------------------
 3657|      0|                field.value.type.struct_def = nullptr;
 3658|      0|                field.value.type.enum_def = enum_def;
 3659|      0|                auto& bt = IsVector(field.value.type)
  ------------------
  |  Branch (3659:28): [True: 0, False: 0]
  ------------------
 3660|      0|                               ? field.value.type.element
 3661|      0|                               : field.value.type.base_type;
 3662|      0|                FLATBUFFERS_ASSERT(bt == BASE_TYPE_STRUCT);
 3663|      0|                bt = enum_def->underlying_type.base_type;
 3664|      0|                struct_def.refcount--;
 3665|      0|                enum_def->refcount++;
 3666|      0|              }
 3667|      0|            }
 3668|      0|          }
 3669|      0|          if (struct_def.refcount)
  ------------------
  |  Branch (3669:15): [True: 0, False: 0]
  ------------------
 3670|      0|            return Error("internal: " + NumToString(struct_def.refcount) + "/" +
 3671|      0|                         NumToString(initial_count) +
 3672|      0|                         " use(s) of pre-declaration enum not accounted for: " +
 3673|      0|                         enum_def->name);
 3674|      0|          structs_.dict.erase(structs_.dict.find(struct_def.name));
 3675|      0|          it = structs_.vec.erase(it);
 3676|      0|          delete &struct_def;
 3677|      0|          continue;  // Skip error.
 3678|      0|        }
 3679|      0|      }
 3680|  2.60k|      auto err = "type referenced but not defined (check namespace): " +
 3681|  2.60k|                 struct_def.name;
 3682|  2.60k|      if (struct_def.original_location)
  ------------------
  |  Branch (3682:11): [True: 2.60k, False: 0]
  ------------------
 3683|  2.60k|        err += ", originally at: " + *struct_def.original_location;
 3684|  2.60k|      return Error(err);
 3685|  2.60k|    }
 3686|  65.6k|    ++it;
 3687|  65.6k|  }
 3688|       |
 3689|       |  // This check has to happen here and not earlier, because only now do we
 3690|       |  // know for sure what the type of these are.
 3691|  92.5k|  for (auto it = enums_.vec.begin(); it != enums_.vec.end(); ++it) {
  ------------------
  |  Branch (3691:38): [True: 79.2k, False: 13.3k]
  ------------------
 3692|  79.2k|    auto& enum_def = **it;
 3693|  79.2k|    if (enum_def.is_union) {
  ------------------
  |  Branch (3693:9): [True: 76.6k, False: 2.57k]
  ------------------
 3694|  76.6k|      for (auto val_it = enum_def.Vals().begin();
 3695|   153k|           val_it != enum_def.Vals().end(); ++val_it) {
  ------------------
  |  Branch (3695:12): [True: 76.9k, False: 76.6k]
  ------------------
 3696|  76.9k|        auto& val = **val_it;
 3697|       |
 3698|  76.9k|        if (!(opts.lang_to_generate != 0 && SupportsAdvancedUnionFeatures()) &&
  ------------------
  |  Branch (3698:15): [True: 0, False: 76.9k]
  |  Branch (3698:45): [True: 0, False: 0]
  ------------------
 3699|  76.9k|            (IsStruct(val.union_type) || IsString(val.union_type)))
  ------------------
  |  Branch (3699:14): [True: 1, False: 76.9k]
  |  Branch (3699:42): [True: 1, False: 76.9k]
  ------------------
 3700|       |
 3701|      2|          return Error(
 3702|      2|              "only tables can be union elements in the generated language: " +
 3703|      2|              val.name);
 3704|  76.9k|      }
 3705|  76.6k|    }
 3706|  79.2k|  }
 3707|       |
 3708|  13.3k|  auto err = CheckPrivateLeak();
 3709|  13.3k|  if (err.Check()) return err;
  ------------------
  |  Branch (3709:7): [True: 0, False: 13.3k]
  ------------------
 3710|       |
 3711|       |  // Parse JSON object only if the scheme has been parsed.
 3712|  13.3k|  if (token_ == '{') {
  ------------------
  |  Branch (3712:7): [True: 8.41k, False: 4.89k]
  ------------------
 3713|  8.41k|    ECHECK(DoParseJson());
  ------------------
  |  |   56|  8.41k|  {                            \
  |  |   57|  8.41k|    auto ce = (call);          \
  |  |   58|  8.41k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 8.20k, False: 204]
  |  |  ------------------
  |  |   59|  8.41k|  }
  ------------------
 3714|    204|  }
 3715|  5.09k|  return NoError();
 3716|  13.3k|}
_ZN11flatbuffers6Parser16CheckPrivateLeakEv:
 3718|  13.3k|CheckedError Parser::CheckPrivateLeak() {
 3719|  13.3k|  if (!opts.no_leak_private_annotations) return NoError();
  ------------------
  |  Branch (3719:7): [True: 13.3k, False: 0]
  ------------------
 3720|       |  // Iterate over all structs/tables to validate we arent leaking
 3721|       |  // any private (structs/tables/enums)
 3722|      0|  for (auto it = structs_.vec.begin(); it != structs_.vec.end(); it++) {
  ------------------
  |  Branch (3722:40): [True: 0, False: 0]
  ------------------
 3723|      0|    auto& struct_def = **it;
 3724|      0|    for (auto fld_it = struct_def.fields.vec.begin();
 3725|      0|         fld_it != struct_def.fields.vec.end(); ++fld_it) {
  ------------------
  |  Branch (3725:10): [True: 0, False: 0]
  ------------------
 3726|      0|      auto& field = **fld_it;
 3727|       |
 3728|      0|      if (field.value.type.enum_def) {
  ------------------
  |  Branch (3728:11): [True: 0, False: 0]
  ------------------
 3729|      0|        auto err =
 3730|      0|            CheckPrivatelyLeakedFields(struct_def, *field.value.type.enum_def);
 3731|      0|        if (err.Check()) {
  ------------------
  |  Branch (3731:13): [True: 0, False: 0]
  ------------------
 3732|      0|          return err;
 3733|      0|        }
 3734|      0|      } else if (field.value.type.struct_def) {
  ------------------
  |  Branch (3734:18): [True: 0, False: 0]
  ------------------
 3735|      0|        auto err = CheckPrivatelyLeakedFields(struct_def,
 3736|      0|                                              *field.value.type.struct_def);
 3737|      0|        if (err.Check()) {
  ------------------
  |  Branch (3737:13): [True: 0, False: 0]
  ------------------
 3738|      0|          return err;
 3739|      0|        }
 3740|      0|      }
 3741|      0|    }
 3742|      0|  }
 3743|       |  // Iterate over all enums to validate we arent leaking
 3744|       |  // any private (structs/tables)
 3745|      0|  for (auto it = enums_.vec.begin(); it != enums_.vec.end(); ++it) {
  ------------------
  |  Branch (3745:38): [True: 0, False: 0]
  ------------------
 3746|      0|    auto& enum_def = **it;
 3747|      0|    if (enum_def.is_union) {
  ------------------
  |  Branch (3747:9): [True: 0, False: 0]
  ------------------
 3748|      0|      for (auto val_it = enum_def.Vals().begin();
 3749|      0|           val_it != enum_def.Vals().end(); ++val_it) {
  ------------------
  |  Branch (3749:12): [True: 0, False: 0]
  ------------------
 3750|      0|        auto& val = **val_it;
 3751|      0|        if (val.union_type.struct_def) {
  ------------------
  |  Branch (3751:13): [True: 0, False: 0]
  ------------------
 3752|      0|          auto err =
 3753|      0|              CheckPrivatelyLeakedFields(enum_def, *val.union_type.struct_def);
 3754|      0|          if (err.Check()) {
  ------------------
  |  Branch (3754:15): [True: 0, False: 0]
  ------------------
 3755|      0|            return err;
 3756|      0|          }
 3757|      0|        }
 3758|      0|      }
 3759|      0|    }
 3760|      0|  }
 3761|      0|  return NoError();
 3762|      0|}
_ZN11flatbuffers6Parser7DoParseEPKcPS2_S2_S2_:
 3779|  27.6k|                             const char* include_filename) {
 3780|  27.6k|  uint64_t source_hash = 0;
 3781|  27.6k|  if (source_filename) {
  ------------------
  |  Branch (3781:7): [True: 14, False: 27.6k]
  ------------------
 3782|       |    // If the file is in-memory, don't include its contents in the hash as we
 3783|       |    // won't be able to load them later.
 3784|     14|    if (FileExists(source_filename))
  ------------------
  |  Branch (3784:9): [True: 14, False: 0]
  ------------------
 3785|     14|      source_hash = HashFile(source_filename, source);
 3786|      0|    else
 3787|      0|      source_hash = HashFile(source_filename, nullptr);
 3788|       |
 3789|     14|    if (included_files_.find(source_hash) == included_files_.end()) {
  ------------------
  |  Branch (3789:9): [True: 14, False: 0]
  ------------------
 3790|     14|      included_files_[source_hash] = include_filename ? include_filename : "";
  ------------------
  |  Branch (3790:38): [True: 14, False: 0]
  ------------------
 3791|     14|      files_included_per_file_[source_filename] = std::set<IncludedFile>();
 3792|     14|    } else {
 3793|      0|      return NoError();
 3794|      0|    }
 3795|     14|  }
 3796|  27.6k|  if (!include_paths) {
  ------------------
  |  Branch (3796:7): [True: 27.6k, False: 14]
  ------------------
 3797|  27.6k|    static const char* current_directory[] = {"", nullptr};
 3798|  27.6k|    include_paths = current_directory;
 3799|  27.6k|  }
 3800|  27.6k|  field_stack_.clear();
 3801|  27.6k|  builder_.Clear();
 3802|       |  // Start with a blank namespace just in case this file doesn't have one.
 3803|  27.6k|  current_namespace_ = empty_namespace_;
 3804|       |
 3805|  27.6k|  ECHECK(StartParseFile(source, source_filename));
  ------------------
  |  |   56|  27.6k|  {                            \
  |  |   57|  27.6k|    auto ce = (call);          \
  |  |   58|  27.6k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 653, False: 27.0k]
  |  |  ------------------
  |  |   59|  27.6k|  }
  ------------------
 3806|       |
 3807|       |  // Includes must come before type declarations:
 3808|  27.6k|  for (;;) {
 3809|       |    // Parse pre-include proto statements if any:
 3810|  27.6k|    if (opts.proto_mode && (attribute_ == "option" || attribute_ == "syntax" ||
  ------------------
  |  Branch (3810:9): [True: 0, False: 27.6k]
  |  Branch (3810:29): [True: 0, False: 0]
  |  Branch (3810:55): [True: 0, False: 0]
  ------------------
 3811|      0|                            attribute_ == "package")) {
  ------------------
  |  Branch (3811:29): [True: 0, False: 0]
  ------------------
 3812|      0|      ECHECK(ParseProtoDecl());
  ------------------
  |  |   56|      0|  {                            \
  |  |   57|      0|    auto ce = (call);          \
  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|      0|  }
  ------------------
 3813|  27.6k|    } else if (IsIdent("native_include")) {
  ------------------
  |  Branch (3813:16): [True: 690, False: 27.0k]
  ------------------
 3814|    690|      NEXT();
  ------------------
  |  |   63|    690|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    690|  {                            \
  |  |  |  |   57|    690|    auto ce = (call);          \
  |  |  |  |   58|    690|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 688]
  |  |  |  |  ------------------
  |  |  |  |   59|    690|  }
  |  |  ------------------
  ------------------
 3815|    688|      native_included_files_.emplace_back(attribute_);
 3816|    688|      EXPECT(kTokenStringConstant);
  ------------------
  |  |   64|    688|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|    688|  {                            \
  |  |  |  |   57|    688|    auto ce = (call);          \
  |  |  |  |   58|    688|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 16, False: 672]
  |  |  |  |  ------------------
  |  |  |  |   59|    688|  }
  |  |  ------------------
  ------------------
 3817|    672|      EXPECT(';');
  ------------------
  |  |   64|    672|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|    672|  {                            \
  |  |  |  |   57|    672|    auto ce = (call);          \
  |  |  |  |   58|    672|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 5, False: 667]
  |  |  |  |  ------------------
  |  |  |  |   59|    672|  }
  |  |  ------------------
  ------------------
 3818|  27.0k|    } else if (IsIdent("include") || (opts.proto_mode && IsIdent("import"))) {
  ------------------
  |  Branch (3818:16): [True: 163, False: 26.8k]
  |  Branch (3818:39): [True: 0, False: 26.8k]
  |  Branch (3818:58): [True: 0, False: 0]
  ------------------
 3819|    163|      NEXT();
  ------------------
  |  |   63|    163|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    163|  {                            \
  |  |  |  |   57|    163|    auto ce = (call);          \
  |  |  |  |   58|    163|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 162]
  |  |  |  |  ------------------
  |  |  |  |   59|    163|  }
  |  |  ------------------
  ------------------
 3820|    162|      if (opts.proto_mode && attribute_ == "public") NEXT();
  ------------------
  |  |   63|      0|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|      0|  {                            \
  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|  }
  |  |  ------------------
  ------------------
  |  Branch (3820:11): [True: 0, False: 162]
  |  Branch (3820:30): [True: 0, False: 0]
  ------------------
 3821|    162|      auto name = flatbuffers::PosixPath(attribute_.c_str());
 3822|    162|      EXPECT(kTokenStringConstant);
  ------------------
  |  |   64|    162|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|    162|  {                            \
  |  |  |  |   57|    162|    auto ce = (call);          \
  |  |  |  |   58|    162|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 30, False: 132]
  |  |  |  |  ------------------
  |  |  |  |   59|    162|  }
  |  |  ------------------
  ------------------
 3823|       |      // Look for the file relative to the directory of the current file.
 3824|    132|      std::string filepath;
 3825|    132|      if (source_filename) {
  ------------------
  |  Branch (3825:11): [True: 0, False: 132]
  ------------------
 3826|      0|        auto source_file_directory =
 3827|      0|            flatbuffers::StripFileName(source_filename);
 3828|      0|        filepath = flatbuffers::ConCatPathFileName(source_file_directory, name);
 3829|      0|      }
 3830|    132|      if (filepath.empty() || !FileExists(filepath.c_str())) {
  ------------------
  |  Branch (3830:11): [True: 132, False: 0]
  |  Branch (3830:31): [True: 0, False: 0]
  ------------------
 3831|       |        // Look for the file in include_paths.
 3832|    241|        for (auto paths = include_paths; paths && *paths; paths++) {
  ------------------
  |  Branch (3832:42): [True: 241, False: 0]
  |  Branch (3832:51): [True: 132, False: 109]
  ------------------
 3833|    132|          filepath = flatbuffers::ConCatPathFileName(*paths, name);
 3834|    132|          if (FileExists(filepath.c_str())) break;
  ------------------
  |  Branch (3834:15): [True: 23, False: 109]
  ------------------
 3835|    132|        }
 3836|    132|      }
 3837|    132|      if (filepath.empty())
  ------------------
  |  Branch (3837:11): [True: 3, False: 129]
  ------------------
 3838|      3|        return Error("unable to locate include file: " + name);
 3839|    129|      if (source_filename) {
  ------------------
  |  Branch (3839:11): [True: 0, False: 129]
  ------------------
 3840|      0|        IncludedFile included_file;
 3841|      0|        included_file.filename = filepath;
 3842|      0|        included_file.schema_name = name;
 3843|      0|        files_included_per_file_[source_filename].insert(included_file);
 3844|      0|      }
 3845|       |
 3846|    129|      std::string contents;
 3847|    129|      bool file_loaded = LoadFile(filepath.c_str(), true, &contents);
 3848|    129|      if (included_files_.find(HashFile(filepath.c_str(), contents.c_str())) ==
  ------------------
  |  Branch (3848:11): [True: 129, False: 0]
  ------------------
 3849|    129|          included_files_.end()) {
 3850|       |        // We found an include file that we have not parsed yet.
 3851|       |        // Parse it.
 3852|    129|        if (!file_loaded) return Error("unable to load include file: " + name);
  ------------------
  |  Branch (3852:13): [True: 115, False: 14]
  ------------------
 3853|     14|        ECHECK(DoParse(contents.c_str(), include_paths, filepath.c_str(),
  ------------------
  |  |   56|     14|  {                            \
  |  |   57|     14|    auto ce = (call);          \
  |  |   58|     14|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 14, False: 0]
  |  |  ------------------
  |  |   59|     14|  }
  ------------------
 3854|     14|                       name.c_str()));
 3855|       |        // We generally do not want to output code for any included files:
 3856|      0|        if (!opts.generate_all) MarkGenerated();
  ------------------
  |  Branch (3856:13): [True: 0, False: 0]
  ------------------
 3857|       |        // Reset these just in case the included file had them, and the
 3858|       |        // parent doesn't.
 3859|      0|        root_struct_def_ = nullptr;
 3860|      0|        file_identifier_.clear();
 3861|      0|        file_extension_.clear();
 3862|       |        // This is the easiest way to continue this file after an include:
 3863|       |        // instead of saving and restoring all the state, we simply start the
 3864|       |        // file anew. This will cause it to encounter the same include
 3865|       |        // statement again, but this time it will skip it, because it was
 3866|       |        // entered into included_files_.
 3867|       |        // This is recursive, but only go as deep as the number of include
 3868|       |        // statements.
 3869|      0|        included_files_.erase(source_hash);
 3870|      0|        return DoParse(source, include_paths, source_filename,
 3871|      0|                       include_filename);
 3872|     14|      }
 3873|      0|      EXPECT(';');
  ------------------
  |  |   64|      0|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|      0|  {                            \
  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|  }
  |  |  ------------------
  ------------------
 3874|  26.8k|    } else {
 3875|  26.8k|      break;
 3876|  26.8k|    }
 3877|  27.6k|  }
 3878|       |  // Now parse all other kinds of declarations:
 3879|   239k|  while (token_ != kTokenEof) {
  ------------------
  |  Branch (3879:10): [True: 231k, False: 7.49k]
  ------------------
 3880|   231k|    if (opts.proto_mode) {
  ------------------
  |  Branch (3880:9): [True: 0, False: 231k]
  ------------------
 3881|      0|      ECHECK(ParseProtoDecl());
  ------------------
  |  |   56|      0|  {                            \
  |  |   57|      0|    auto ce = (call);          \
  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|      0|  }
  ------------------
 3882|   231k|    } else if (IsIdent("namespace")) {
  ------------------
  |  Branch (3882:16): [True: 20.8k, False: 210k]
  ------------------
 3883|  20.8k|      ECHECK(ParseNamespace());
  ------------------
  |  |   56|  20.8k|  {                            \
  |  |   57|  20.8k|    auto ce = (call);          \
  |  |   58|  20.8k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 187, False: 20.6k]
  |  |  ------------------
  |  |   59|  20.8k|  }
  ------------------
 3884|   210k|    } else if (token_ == '{') {
  ------------------
  |  Branch (3884:16): [True: 8.42k, False: 202k]
  ------------------
 3885|  8.42k|      return NoError();
 3886|   202k|    } else if (IsIdent("enum")) {
  ------------------
  |  Branch (3886:16): [True: 13.1k, False: 189k]
  ------------------
 3887|  13.1k|      ECHECK(ParseEnum(false, nullptr, source_filename));
  ------------------
  |  |   56|  13.1k|  {                            \
  |  |   57|  13.1k|    auto ce = (call);          \
  |  |   58|  13.1k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 2.53k, False: 10.6k]
  |  |  ------------------
  |  |   59|  13.1k|  }
  ------------------
 3888|   189k|    } else if (IsIdent("union")) {
  ------------------
  |  Branch (3888:16): [True: 93.7k, False: 95.4k]
  ------------------
 3889|  93.7k|      ECHECK(ParseEnum(true, nullptr, source_filename));
  ------------------
  |  |   56|  93.7k|  {                            \
  |  |   57|  93.7k|    auto ce = (call);          \
  |  |   58|  93.7k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 2.80k, False: 90.9k]
  |  |  ------------------
  |  |   59|  93.7k|  }
  ------------------
 3890|  95.4k|    } else if (IsIdent("root_type")) {
  ------------------
  |  Branch (3890:16): [True: 9.33k, False: 86.1k]
  ------------------
 3891|  9.33k|      NEXT();
  ------------------
  |  |   63|  9.33k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  9.33k|  {                            \
  |  |  |  |   57|  9.33k|    auto ce = (call);          \
  |  |  |  |   58|  9.33k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 9.33k]
  |  |  |  |  ------------------
  |  |  |  |   59|  9.33k|  }
  |  |  ------------------
  ------------------
 3892|  9.33k|      auto root_type = attribute_;
 3893|  9.33k|      EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|  9.33k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  9.33k|  {                            \
  |  |  |  |   57|  9.33k|    auto ce = (call);          \
  |  |  |  |   58|  9.33k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 5, False: 9.32k]
  |  |  |  |  ------------------
  |  |  |  |   59|  9.33k|  }
  |  |  ------------------
  ------------------
 3894|  9.32k|      ECHECK(ParseNamespacing(&root_type, nullptr));
  ------------------
  |  |   56|  9.32k|  {                            \
  |  |   57|  9.32k|    auto ce = (call);          \
  |  |   58|  9.32k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 8, False: 9.31k]
  |  |  ------------------
  |  |   59|  9.32k|  }
  ------------------
 3895|  9.31k|      if (opts.root_type.empty()) {
  ------------------
  |  Branch (3895:11): [True: 9.31k, False: 0]
  ------------------
 3896|  9.31k|        if (!SetRootType(root_type.c_str()))
  ------------------
  |  Branch (3896:13): [True: 33, False: 9.28k]
  ------------------
 3897|     33|          return Error("unknown root type: " + root_type);
 3898|  9.28k|        if (root_struct_def_->fixed) return Error("root type must be a table");
  ------------------
  |  Branch (3898:13): [True: 1, False: 9.28k]
  ------------------
 3899|  9.28k|      }
 3900|  9.28k|      EXPECT(';');
  ------------------
  |  |   64|  9.28k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  9.28k|  {                            \
  |  |  |  |   57|  9.28k|    auto ce = (call);          \
  |  |  |  |   58|  9.28k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 12, False: 9.27k]
  |  |  |  |  ------------------
  |  |  |  |   59|  9.28k|  }
  |  |  ------------------
  ------------------
 3901|  86.1k|    } else if (IsIdent("file_identifier")) {
  ------------------
  |  Branch (3901:16): [True: 87, False: 86.0k]
  ------------------
 3902|     87|      NEXT();
  ------------------
  |  |   63|     87|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|     87|  {                            \
  |  |  |  |   57|     87|    auto ce = (call);          \
  |  |  |  |   58|     87|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 86]
  |  |  |  |  ------------------
  |  |  |  |   59|     87|  }
  |  |  ------------------
  ------------------
 3903|     86|      file_identifier_ = attribute_;
 3904|     86|      EXPECT(kTokenStringConstant);
  ------------------
  |  |   64|     86|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|     86|  {                            \
  |  |  |  |   57|     86|    auto ce = (call);          \
  |  |  |  |   58|     86|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 84]
  |  |  |  |  ------------------
  |  |  |  |   59|     86|  }
  |  |  ------------------
  ------------------
 3905|     84|      if (file_identifier_.length() != flatbuffers::kFileIdentifierLength)
  ------------------
  |  Branch (3905:11): [True: 14, False: 70]
  ------------------
 3906|     14|        return Error("file_identifier must be exactly " +
 3907|     14|                     NumToString(flatbuffers::kFileIdentifierLength) +
 3908|     14|                     " characters");
 3909|     70|      EXPECT(';');
  ------------------
  |  |   64|     70|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|     70|  {                            \
  |  |  |  |   57|     70|    auto ce = (call);          \
  |  |  |  |   58|     70|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 69]
  |  |  |  |  ------------------
  |  |  |  |   59|     70|  }
  |  |  ------------------
  ------------------
 3910|  86.0k|    } else if (IsIdent("file_extension")) {
  ------------------
  |  Branch (3910:16): [True: 204, False: 85.8k]
  ------------------
 3911|    204|      NEXT();
  ------------------
  |  |   63|    204|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    204|  {                            \
  |  |  |  |   57|    204|    auto ce = (call);          \
  |  |  |  |   58|    204|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 203]
  |  |  |  |  ------------------
  |  |  |  |   59|    204|  }
  |  |  ------------------
  ------------------
 3912|    203|      file_extension_ = attribute_;
 3913|    203|      EXPECT(kTokenStringConstant);
  ------------------
  |  |   64|    203|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|    203|  {                            \
  |  |  |  |   57|    203|    auto ce = (call);          \
  |  |  |  |   58|    203|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 201]
  |  |  |  |  ------------------
  |  |  |  |   59|    203|  }
  |  |  ------------------
  ------------------
 3914|    201|      EXPECT(';');
  ------------------
  |  |   64|    201|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|    201|  {                            \
  |  |  |  |   57|    201|    auto ce = (call);          \
  |  |  |  |   58|    201|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 200]
  |  |  |  |  ------------------
  |  |  |  |   59|    201|  }
  |  |  ------------------
  ------------------
 3915|  85.8k|    } else if (IsIdent("include")) {
  ------------------
  |  Branch (3915:16): [True: 1, False: 85.8k]
  ------------------
 3916|      1|      return Error("includes must come before declarations");
 3917|  85.8k|    } else if (IsIdent("attribute")) {
  ------------------
  |  Branch (3917:16): [True: 6.07k, False: 79.7k]
  ------------------
 3918|  6.07k|      NEXT();
  ------------------
  |  |   63|  6.07k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  6.07k|  {                            \
  |  |  |  |   57|  6.07k|    auto ce = (call);          \
  |  |  |  |   58|  6.07k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 6.07k]
  |  |  |  |  ------------------
  |  |  |  |   59|  6.07k|  }
  |  |  ------------------
  ------------------
 3919|  6.07k|      auto name = attribute_;
 3920|  6.07k|      if (Is(kTokenIdentifier)) {
  ------------------
  |  Branch (3920:11): [True: 4.76k, False: 1.30k]
  ------------------
 3921|  4.76k|        NEXT();
  ------------------
  |  |   63|  4.76k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  4.76k|  {                            \
  |  |  |  |   57|  4.76k|    auto ce = (call);          \
  |  |  |  |   58|  4.76k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 4.76k]
  |  |  |  |  ------------------
  |  |  |  |   59|  4.76k|  }
  |  |  ------------------
  ------------------
 3922|  4.76k|      } else {
 3923|  1.30k|        EXPECT(kTokenStringConstant);
  ------------------
  |  |   64|  1.30k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  1.30k|  {                            \
  |  |  |  |   57|  1.30k|    auto ce = (call);          \
  |  |  |  |   58|  1.30k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 5, False: 1.30k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.30k|  }
  |  |  ------------------
  ------------------
 3924|  1.30k|      }
 3925|  6.06k|      EXPECT(';');
  ------------------
  |  |   64|  6.06k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  6.06k|  {                            \
  |  |  |  |   57|  6.06k|    auto ce = (call);          \
  |  |  |  |   58|  6.06k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 16, False: 6.05k]
  |  |  |  |  ------------------
  |  |  |  |   59|  6.06k|  }
  |  |  ------------------
  ------------------
 3926|  6.05k|      known_attributes_[name] = false;
 3927|  79.7k|    } else if (IsIdent("rpc_service")) {
  ------------------
  |  Branch (3927:16): [True: 2.76k, False: 77.0k]
  ------------------
 3928|  2.76k|      ECHECK(ParseService(source_filename));
  ------------------
  |  |   56|  2.76k|  {                            \
  |  |   57|  2.76k|    auto ce = (call);          \
  |  |   58|  2.76k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 413, False: 2.34k]
  |  |  ------------------
  |  |   59|  2.76k|  }
  ------------------
 3929|  77.0k|    } else {
 3930|  77.0k|      ECHECK(ParseDecl(source_filename));
  ------------------
  |  |   56|  77.0k|  {                            \
  |  |   57|  77.0k|    auto ce = (call);          \
  |  |   58|  77.0k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 4.88k, False: 72.1k]
  |  |  ------------------
  |  |   59|  77.0k|  }
  ------------------
 3931|  72.1k|    }
 3932|   231k|  }
 3933|  7.49k|  EXPECT(kTokenEof);
  ------------------
  |  |   64|  7.49k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  7.49k|  {                            \
  |  |  |  |   57|  7.49k|    auto ce = (call);          \
  |  |  |  |   58|  7.49k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 0, False: 7.49k]
  |  |  |  |  ------------------
  |  |  |  |   59|  7.49k|  }
  |  |  ------------------
  ------------------
 3934|  7.49k|  if (opts.warnings_as_errors && has_warning_) {
  ------------------
  |  Branch (3934:7): [True: 0, False: 7.49k]
  |  Branch (3934:34): [True: 0, False: 0]
  ------------------
 3935|      0|    return Error("treating warnings as errors, failed due to above warnings");
 3936|      0|  }
 3937|  7.49k|  return NoError();
 3938|  7.49k|}
_ZN11flatbuffers6Parser11DoParseJsonEv:
 3940|  8.41k|CheckedError Parser::DoParseJson() {
 3941|  8.41k|  if (token_ != '{') {
  ------------------
  |  Branch (3941:7): [True: 0, False: 8.41k]
  ------------------
 3942|      0|    EXPECT('{');
  ------------------
  |  |   64|      0|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|      0|  {                            \
  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|  }
  |  |  ------------------
  ------------------
 3943|  8.41k|  } else {
 3944|  8.41k|    if (!root_struct_def_) return Error("no root type set to parse json with");
  ------------------
  |  Branch (3944:9): [True: 3, False: 8.41k]
  ------------------
 3945|  8.41k|    if (builder_.GetSize()) {
  ------------------
  |  Branch (3945:9): [True: 0, False: 8.41k]
  ------------------
 3946|      0|      return Error("cannot have more than one json object in a file");
 3947|      0|    }
 3948|  8.41k|    uoffset_t toff;
 3949|  8.41k|    ECHECK(ParseTable(*root_struct_def_, nullptr, &toff));
  ------------------
  |  |   56|  8.41k|  {                            \
  |  |   57|  8.41k|    auto ce = (call);          \
  |  |   58|  8.41k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 8.18k, False: 224]
  |  |  ------------------
  |  |   59|  8.41k|  }
  ------------------
 3950|    224|    if (opts.size_prefixed) {
  ------------------
  |  Branch (3950:9): [True: 0, False: 224]
  ------------------
 3951|      0|      builder_.FinishSizePrefixed(
 3952|      0|          Offset<Table>(toff),
 3953|      0|          file_identifier_.length() ? file_identifier_.c_str() : nullptr);
  ------------------
  |  Branch (3953:11): [True: 0, False: 0]
  ------------------
 3954|    224|    } else {
 3955|    224|      builder_.Finish(Offset<Table>(toff), file_identifier_.length()
  ------------------
  |  Branch (3955:44): [True: 2, False: 222]
  ------------------
 3956|    224|                                               ? file_identifier_.c_str()
 3957|    224|                                               : nullptr);
 3958|    224|    }
 3959|    224|  }
 3960|    224|  if (opts.require_json_eof) {
  ------------------
  |  Branch (3960:7): [True: 224, False: 0]
  ------------------
 3961|       |    // Check that JSON file doesn't contain more objects or IDL directives.
 3962|       |    // Comments after JSON are allowed.
 3963|    224|    EXPECT(kTokenEof);
  ------------------
  |  |   64|    224|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|    224|  {                            \
  |  |  |  |   57|    224|    auto ce = (call);          \
  |  |  |  |   58|    224|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 20, False: 204]
  |  |  |  |  ------------------
  |  |  |  |   59|    224|  }
  |  |  ------------------
  ------------------
 3964|    204|  }
 3965|    204|  return NoError();
 3966|    224|}
_ZN11flatbuffers6Parser9SerializeEv:
 4036|  5.09k|void Parser::Serialize() {
 4037|  5.09k|  builder_.Clear();
 4038|  5.09k|  AssignIndices(structs_.vec);
 4039|  5.09k|  AssignIndices(enums_.vec);
 4040|  5.09k|  std::vector<Offset<reflection::Object>> object_offsets;
 4041|  5.09k|  std::set<std::string> files;
 4042|  60.3k|  for (auto it = structs_.vec.begin(); it != structs_.vec.end(); ++it) {
  ------------------
  |  Branch (4042:40): [True: 55.2k, False: 5.09k]
  ------------------
 4043|  55.2k|    auto offset = (*it)->Serialize(&builder_, *this);
 4044|  55.2k|    object_offsets.push_back(offset);
 4045|  55.2k|    (*it)->serialized_location = offset.o;
 4046|  55.2k|    const std::string* file = (*it)->declaration_file;
 4047|  55.2k|    if (file) files.insert(*file);
  ------------------
  |  Branch (4047:9): [True: 0, False: 55.2k]
  ------------------
 4048|  55.2k|  }
 4049|  5.09k|  std::vector<Offset<reflection::Enum>> enum_offsets;
 4050|  84.1k|  for (auto it = enums_.vec.begin(); it != enums_.vec.end(); ++it) {
  ------------------
  |  Branch (4050:38): [True: 79.0k, False: 5.09k]
  ------------------
 4051|  79.0k|    auto offset = (*it)->Serialize(&builder_, *this);
 4052|  79.0k|    enum_offsets.push_back(offset);
 4053|  79.0k|    const std::string* file = (*it)->declaration_file;
 4054|  79.0k|    if (file) files.insert(*file);
  ------------------
  |  Branch (4054:9): [True: 0, False: 79.0k]
  ------------------
 4055|  79.0k|  }
 4056|  5.09k|  std::vector<Offset<reflection::Service>> service_offsets;
 4057|  5.84k|  for (auto it = services_.vec.begin(); it != services_.vec.end(); ++it) {
  ------------------
  |  Branch (4057:41): [True: 743, False: 5.09k]
  ------------------
 4058|    743|    auto offset = (*it)->Serialize(&builder_, *this);
 4059|    743|    service_offsets.push_back(offset);
 4060|    743|    const std::string* file = (*it)->declaration_file;
 4061|    743|    if (file) files.insert(*file);
  ------------------
  |  Branch (4061:9): [True: 0, False: 743]
  ------------------
 4062|    743|  }
 4063|       |
 4064|       |  // Create Schemafiles vector of tables.
 4065|  5.09k|  flatbuffers::Offset<
 4066|  5.09k|      flatbuffers::Vector<flatbuffers::Offset<reflection::SchemaFile>>>
 4067|  5.09k|      schema_files__;
 4068|  5.09k|  if (!opts.project_root.empty()) {
  ------------------
  |  Branch (4068:7): [True: 0, False: 5.09k]
  ------------------
 4069|      0|    std::vector<Offset<reflection::SchemaFile>> schema_files;
 4070|      0|    std::vector<Offset<flatbuffers::String>> included_files;
 4071|      0|    for (auto f = files_included_per_file_.begin();
 4072|      0|         f != files_included_per_file_.end(); f++) {
  ------------------
  |  Branch (4072:10): [True: 0, False: 0]
  ------------------
 4073|      0|      const auto filename__ = builder_.CreateSharedString(FilePath(
 4074|      0|          opts.project_root, f->first, opts.binary_schema_absolute_paths));
 4075|      0|      for (auto i = f->second.begin(); i != f->second.end(); i++) {
  ------------------
  |  Branch (4075:40): [True: 0, False: 0]
  ------------------
 4076|      0|        included_files.push_back(builder_.CreateSharedString(
 4077|      0|            FilePath(opts.project_root, i->filename,
 4078|      0|                     opts.binary_schema_absolute_paths)));
 4079|      0|      }
 4080|      0|      const auto included_files__ = builder_.CreateVector(included_files);
 4081|      0|      included_files.clear();
 4082|       |
 4083|      0|      schema_files.push_back(
 4084|      0|          reflection::CreateSchemaFile(builder_, filename__, included_files__));
 4085|      0|    }
 4086|      0|    schema_files__ = builder_.CreateVectorOfSortedTables(&schema_files);
 4087|      0|  }
 4088|       |
 4089|  5.09k|  const auto objs__ = builder_.CreateVectorOfSortedTables(&object_offsets);
 4090|  5.09k|  const auto enum__ = builder_.CreateVectorOfSortedTables(&enum_offsets);
 4091|  5.09k|  const auto fiid__ = builder_.CreateString(file_identifier_);
 4092|  5.09k|  const auto fext__ = builder_.CreateString(file_extension_);
 4093|  5.09k|  const auto serv__ = builder_.CreateVectorOfSortedTables(&service_offsets);
 4094|  5.09k|  const auto schema_offset = reflection::CreateSchema(
 4095|  5.09k|      builder_, objs__, enum__, fiid__, fext__,
 4096|  5.09k|      (root_struct_def_ ? root_struct_def_->serialized_location : 0), serv__,
  ------------------
  |  Branch (4096:8): [True: 216, False: 4.88k]
  ------------------
 4097|  5.09k|      static_cast<reflection::AdvancedFeatures>(advanced_features_),
 4098|  5.09k|      schema_files__);
 4099|  5.09k|  if (opts.size_prefixed) {
  ------------------
  |  Branch (4099:7): [True: 0, False: 5.09k]
  ------------------
 4100|      0|    builder_.FinishSizePrefixed(schema_offset, reflection::SchemaIdentifier());
 4101|  5.09k|  } else {
 4102|  5.09k|    builder_.Finish(schema_offset, reflection::SchemaIdentifier());
 4103|  5.09k|  }
 4104|  5.09k|}
_ZNK11flatbuffers9StructDef9SerializeEPNS_21FlatBufferBuilderImplILb0EEERKNS_6ParserE:
 4107|  55.2k|                                                const Parser& parser) const {
 4108|  55.2k|  std::vector<Offset<reflection::Field>> field_offsets;
 4109|  94.0k|  for (auto it = fields.vec.begin(); it != fields.vec.end(); ++it) {
  ------------------
  |  Branch (4109:38): [True: 38.7k, False: 55.2k]
  ------------------
 4110|  38.7k|    field_offsets.push_back((*it)->Serialize(
 4111|  38.7k|        builder, static_cast<uint16_t>(it - fields.vec.begin()), parser));
 4112|  38.7k|  }
 4113|  55.2k|  const auto qualified_name = defined_namespace->GetFullyQualifiedName(name);
 4114|  55.2k|  const auto name__ = builder->CreateString(qualified_name);
 4115|  55.2k|  const auto flds__ = builder->CreateVectorOfSortedTables(&field_offsets);
 4116|  55.2k|  const auto attr__ = SerializeAttributes(builder, parser);
 4117|  55.2k|  const auto docs__ = parser.opts.binary_schema_comments && !doc_comment.empty()
  ------------------
  |  Branch (4117:23): [True: 0, False: 55.2k]
  |  Branch (4117:61): [True: 0, False: 0]
  ------------------
 4118|  55.2k|                          ? builder->CreateVectorOfStrings(doc_comment)
 4119|  55.2k|                          : 0;
 4120|  55.2k|  std::string decl_file_in_project = declaration_file ? *declaration_file : "";
  ------------------
  |  Branch (4120:38): [True: 0, False: 55.2k]
  ------------------
 4121|  55.2k|  const auto file__ = builder->CreateSharedString(decl_file_in_project);
 4122|  55.2k|  return reflection::CreateObject(
 4123|  55.2k|      *builder, name__, flds__, fixed, static_cast<int>(minalign),
 4124|  55.2k|      static_cast<int>(bytesize), attr__, docs__, file__);
 4125|  55.2k|}
_ZNK11flatbuffers8FieldDef9SerializeEPNS_21FlatBufferBuilderImplILb0EEEtRKNS_6ParserE:
 4179|  38.7k|                                              const Parser& parser) const {
 4180|  38.7k|  auto name__ = builder->CreateString(name);
 4181|  38.7k|  auto type__ = value.type.Serialize(builder);
 4182|  38.7k|  auto attr__ = SerializeAttributes(builder, parser);
 4183|  38.7k|  auto docs__ = parser.opts.binary_schema_comments && !doc_comment.empty()
  ------------------
  |  Branch (4183:17): [True: 0, False: 38.7k]
  |  Branch (4183:55): [True: 0, False: 0]
  ------------------
 4184|  38.7k|                    ? builder->CreateVectorOfStrings(doc_comment)
 4185|  38.7k|                    : 0;
 4186|  38.7k|  double d;
 4187|  38.7k|  StringToNumber(value.constant.c_str(), &d);
 4188|  38.7k|  return reflection::CreateField(
 4189|  38.7k|      *builder, name__, type__, id, value.offset,
 4190|       |      // Is uint64>max(int64) tested?
 4191|  38.7k|      IsInteger(value.type.base_type) ? StringToInt(value.constant.c_str()) : 0,
  ------------------
  |  Branch (4191:7): [True: 12.4k, False: 26.3k]
  ------------------
 4192|       |      // result may be platform-dependent if underlying is float (not double)
 4193|  38.7k|      IsFloat(value.type.base_type) ? d : 0.0, deprecated, IsRequired(), key,
  ------------------
  |  Branch (4193:7): [True: 230, False: 38.5k]
  ------------------
 4194|  38.7k|      attr__, docs__, IsOptional(), static_cast<uint16_t>(padding), offset64);
 4195|       |  // TODO: value.constant is almost always "0", we could save quite a bit of
 4196|       |  // space by sharing it. Same for common values of value.type.
 4197|  38.7k|}
_ZNK11flatbuffers7RPCCall9SerializeEPNS_21FlatBufferBuilderImplILb0EEERKNS_6ParserE:
 4234|  1.48k|                                               const Parser& parser) const {
 4235|  1.48k|  auto name__ = builder->CreateString(name);
 4236|  1.48k|  auto attr__ = SerializeAttributes(builder, parser);
 4237|  1.48k|  auto docs__ = parser.opts.binary_schema_comments && !doc_comment.empty()
  ------------------
  |  Branch (4237:17): [True: 0, False: 1.48k]
  |  Branch (4237:55): [True: 0, False: 0]
  ------------------
 4238|  1.48k|                    ? builder->CreateVectorOfStrings(doc_comment)
 4239|  1.48k|                    : 0;
 4240|  1.48k|  return reflection::CreateRPCCall(
 4241|  1.48k|      *builder, name__, request->serialized_location,
 4242|  1.48k|      response->serialized_location, attr__, docs__);
 4243|  1.48k|}
_ZNK11flatbuffers10ServiceDef9SerializeEPNS_21FlatBufferBuilderImplILb0EEERKNS_6ParserE:
 4258|    743|                                                  const Parser& parser) const {
 4259|    743|  std::vector<Offset<reflection::RPCCall>> servicecall_offsets;
 4260|  2.22k|  for (auto it = calls.vec.begin(); it != calls.vec.end(); ++it) {
  ------------------
  |  Branch (4260:37): [True: 1.48k, False: 743]
  ------------------
 4261|  1.48k|    servicecall_offsets.push_back((*it)->Serialize(builder, parser));
 4262|  1.48k|  }
 4263|    743|  const auto qualified_name = defined_namespace->GetFullyQualifiedName(name);
 4264|    743|  const auto name__ = builder->CreateString(qualified_name);
 4265|    743|  const auto call__ = builder->CreateVector(servicecall_offsets);
 4266|    743|  const auto attr__ = SerializeAttributes(builder, parser);
 4267|    743|  const auto docs__ = parser.opts.binary_schema_comments && !doc_comment.empty()
  ------------------
  |  Branch (4267:23): [True: 0, False: 743]
  |  Branch (4267:61): [True: 0, False: 0]
  ------------------
 4268|    743|                          ? builder->CreateVectorOfStrings(doc_comment)
 4269|    743|                          : 0;
 4270|    743|  std::string decl_file_in_project = declaration_file ? *declaration_file : "";
  ------------------
  |  Branch (4270:38): [True: 0, False: 743]
  ------------------
 4271|    743|  const auto file__ = builder->CreateSharedString(decl_file_in_project);
 4272|    743|  return reflection::CreateService(*builder, name__, call__, attr__, docs__,
 4273|    743|                                   file__);
 4274|    743|}
_ZNK11flatbuffers7EnumDef9SerializeEPNS_21FlatBufferBuilderImplILb0EEERKNS_6ParserE:
 4295|  79.0k|                                            const Parser& parser) const {
 4296|  79.0k|  std::vector<Offset<reflection::EnumVal>> enumval_offsets;
 4297|   194k|  for (auto it = vals.vec.begin(); it != vals.vec.end(); ++it) {
  ------------------
  |  Branch (4297:36): [True: 115k, False: 79.0k]
  ------------------
 4298|   115k|    enumval_offsets.push_back((*it)->Serialize(builder, parser));
 4299|   115k|  }
 4300|  79.0k|  const auto qualified_name = defined_namespace->GetFullyQualifiedName(name);
 4301|  79.0k|  const auto name__ = builder->CreateString(qualified_name);
 4302|  79.0k|  const auto vals__ = builder->CreateVector(enumval_offsets);
 4303|  79.0k|  const auto type__ = underlying_type.Serialize(builder);
 4304|  79.0k|  const auto attr__ = SerializeAttributes(builder, parser);
 4305|  79.0k|  const auto docs__ = parser.opts.binary_schema_comments && !doc_comment.empty()
  ------------------
  |  Branch (4305:23): [True: 0, False: 79.0k]
  |  Branch (4305:61): [True: 0, False: 0]
  ------------------
 4306|  79.0k|                          ? builder->CreateVectorOfStrings(doc_comment)
 4307|  79.0k|                          : 0;
 4308|  79.0k|  std::string decl_file_in_project = declaration_file ? *declaration_file : "";
  ------------------
  |  Branch (4308:38): [True: 0, False: 79.0k]
  ------------------
 4309|  79.0k|  const auto file__ = builder->CreateSharedString(decl_file_in_project);
 4310|  79.0k|  return reflection::CreateEnum(*builder, name__, vals__, is_union, type__,
 4311|  79.0k|                                attr__, docs__, file__);
 4312|  79.0k|}
_ZNK11flatbuffers7EnumVal19SerializeAttributesEPNS_21FlatBufferBuilderImplILb0EEERKNS_6ParserE:
 4336|   115k|                             const Parser& parser) const {
 4337|   115k|  return SerializeAttributesCommon(attributes, builder, parser);
 4338|   115k|}
_ZNK11flatbuffers7EnumVal9SerializeEPNS_21FlatBufferBuilderImplILb0EEERKNS_6ParserE:
 4346|   115k|                                               const Parser& parser) const {
 4347|   115k|  const auto name__ = builder->CreateString(name);
 4348|   115k|  const auto type__ = union_type.Serialize(builder);
 4349|   115k|  const auto attr__ = SerializeAttributes(builder, parser);
 4350|   115k|  const auto docs__ = parser.opts.binary_schema_comments && !doc_comment.empty()
  ------------------
  |  Branch (4350:23): [True: 0, False: 115k]
  |  Branch (4350:61): [True: 0, False: 0]
  ------------------
 4351|   115k|                          ? builder->CreateVectorOfStrings(doc_comment)
 4352|   115k|                          : 0;
 4353|   115k|  return reflection::CreateEnumVal(*builder, name__, value, type__, docs__,
 4354|   115k|                                   attr__);
 4355|   115k|}
_ZNK11flatbuffers4Type9SerializeEPNS_21FlatBufferBuilderImplILb0EEE:
 4366|   232k|Offset<reflection::Type> Type::Serialize(FlatBufferBuilder* builder) const {
 4367|   232k|  size_t element_size = SizeOf(element);
 4368|   232k|  if (base_type == BASE_TYPE_VECTOR && element == BASE_TYPE_STRUCT &&
  ------------------
  |  Branch (4368:7): [True: 2.67k, False: 230k]
  |  Branch (4368:40): [True: 192, False: 2.48k]
  ------------------
 4369|    192|      struct_def->bytesize != 0) {
  ------------------
  |  Branch (4369:7): [True: 80, False: 112]
  ------------------
 4370|       |    // struct_def->bytesize==0 means struct is table
 4371|     80|    element_size = struct_def->bytesize;
 4372|     80|  }
 4373|   232k|  return reflection::CreateType(
 4374|   232k|      *builder, static_cast<reflection::BaseType>(base_type),
 4375|   232k|      static_cast<reflection::BaseType>(element),
 4376|   232k|      struct_def ? struct_def->index : (enum_def ? enum_def->index : -1),
  ------------------
  |  Branch (4376:7): [True: 11.7k, False: 221k]
  |  Branch (4376:41): [True: 104k, False: 116k]
  ------------------
 4377|   232k|      fixed_length, static_cast<uint32_t>(SizeOf(base_type)),
 4378|   232k|      static_cast<uint32_t>(element_size));
 4379|   232k|}
_ZNK11flatbuffers10Definition19SerializeAttributesEPNS_21FlatBufferBuilderImplILb0EEERKNS_6ParserE:
 4411|   175k|                                const Parser& parser) const {
 4412|   175k|  return SerializeAttributesCommon(attributes, builder, parser);
 4413|   175k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_113TokenToStringEi:
  185|  16.4k|static std::string TokenToString(int t) {
  186|  16.4k|  static const char * const tokens[] = {
  187|  16.4k|    #define FLATBUFFERS_TOKEN(NAME, VALUE, STRING) STRING,
  188|  16.4k|      FLATBUFFERS_GEN_TOKENS(FLATBUFFERS_TOKEN)
  ------------------
  |  |  171|  16.4k|  TD(Eof, 256, "end of file") \
  |  |  ------------------
  |  |  |  |  188|  16.4k|      FLATBUFFERS_GEN_TOKENS(FLATBUFFERS_TOKEN)
  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  16.4k|    #define FLATBUFFERS_TOKEN(NAME, VALUE, STRING) STRING,
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  172|  16.4k|  TD(StringConstant, 257, "string constant") \
  |  |  ------------------
  |  |  |  |  188|  16.4k|      FLATBUFFERS_GEN_TOKENS(FLATBUFFERS_TOKEN)
  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  16.4k|    #define FLATBUFFERS_TOKEN(NAME, VALUE, STRING) STRING,
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  173|  16.4k|  TD(IntegerConstant, 258, "integer constant") \
  |  |  ------------------
  |  |  |  |  188|  16.4k|      FLATBUFFERS_GEN_TOKENS(FLATBUFFERS_TOKEN)
  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  16.4k|    #define FLATBUFFERS_TOKEN(NAME, VALUE, STRING) STRING,
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  174|  16.4k|  TD(FloatConstant, 259, "float constant") \
  |  |  ------------------
  |  |  |  |  188|  16.4k|      FLATBUFFERS_GEN_TOKENS(FLATBUFFERS_TOKEN)
  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  16.4k|    #define FLATBUFFERS_TOKEN(NAME, VALUE, STRING) STRING,
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  175|  16.4k|  TD(Identifier, 260, "identifier")
  |  |  ------------------
  |  |  |  |  188|  16.4k|      FLATBUFFERS_GEN_TOKENS(FLATBUFFERS_TOKEN)
  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  16.4k|    #define FLATBUFFERS_TOKEN(NAME, VALUE, STRING) STRING,
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|  16.4k|    #undef FLATBUFFERS_TOKEN
  190|  16.4k|    #define FLATBUFFERS_TD(ENUM, IDLTYPE, ...) \
  191|  16.4k|      IDLTYPE,
  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  ------------------
  |  |  112|  16.4k|        FLATBUFFERS_GEN_TYPES_SCALAR(TD) \
  |  |  ------------------
  |  |  |  |   50|  16.4k|  TD(NONE,     "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 0) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   51|  16.4k|  TD(UTYPE,    "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 1) /* begin scalar/int */ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   52|  16.4k|  TD(BOOL,     "bool",   uint8_t,  boolean,bool,    bool,   bool,    bool, Boolean, Bool, 2) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|  16.4k|  TD(CHAR,     "byte",   int8_t,   byte,   int8,    sbyte,  int8,    i8,   Byte, Int8, 3) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   54|  16.4k|  TD(UCHAR,    "ubyte",  uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 4) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   55|  16.4k|  TD(SHORT,    "short",  int16_t,  short,  int16,   short,  int16,   i16,  Short, Int16, 5) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   56|  16.4k|  TD(USHORT,   "ushort", uint16_t, short,  uint16,  ushort, uint16,  u16,  UShort, UInt16, 6) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|  16.4k|  TD(INT,      "int",    int32_t,  int,    int32,   int,    int32,   i32,  Int, Int32, 7) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   58|  16.4k|  TD(UINT,     "uint",   uint32_t, int,    uint32,  uint,   uint32,  u32,  UInt, UInt32, 8) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   59|  16.4k|  TD(LONG,     "long",   int64_t,  long,   int64,   long,   int64,   i64,  Long, Int64, 9) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  16.4k|  TD(ULONG,    "ulong",  uint64_t, long,   uint64,  ulong,  uint64,  u64,  ULong, UInt64, 10) /* end int */ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  16.4k|  TD(FLOAT,    "float",  float,    float,  float32, float,  float32, f32,  Float, Float32, 11) /* begin float */ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   62|  16.4k|  TD(DOUBLE,   "double", double,   double, float64, double, float64, f64,  Double, Double, 12) /* end float/scalar */
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  113|  16.4k|        FLATBUFFERS_GEN_TYPES_POINTER(TD) \
  |  |  ------------------
  |  |  |  |   64|  16.4k|  TD(STRING,   "string", Offset<void>,   int, int, StringOffset, int, unused, Int, Offset<String>, 13) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   65|  16.4k|  TD(VECTOR,   "",       Offset<void>,   int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 14) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   66|  16.4k|  TD(VECTOR64, "",       Offset64<void>, int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 18) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   67|  16.4k|  TD(STRUCT,   "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 15) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   68|  16.4k|  TD(UNION,    "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 16)
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  114|  16.4k|        FLATBUFFERS_GEN_TYPE_ARRAY(TD)
  |  |  ------------------
  |  |  |  |   70|  16.4k|  TD(ARRAY,    "",       int,            int, int, int,          int, unused, Int, Offset<UOffset>, 17)
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  16.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.4k|      IDLTYPE,
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  193|  16.4k|    #undef FLATBUFFERS_TD
  194|  16.4k|  };
  195|  16.4k|  if (t < 256) {  // A single ascii char token.
  ------------------
  |  Branch (195:7): [True: 8.38k, False: 8.04k]
  ------------------
  196|  8.38k|    std::string s;
  197|  8.38k|    s.append(1, static_cast<char>(t));
  198|  8.38k|    return s;
  199|  8.38k|  } else {       // Other tokens.
  200|  8.04k|    return tokens[t - 256];
  201|  8.04k|  }
  202|  16.4k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_17NoErrorEv:
   94|  14.2M|static CheckedError NoError() { return CheckedError(false); }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_112ValidateUTF8ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
   66|    686|static bool ValidateUTF8(const std::string& str) {
   67|    686|  const char* s = &str[0];
   68|    686|  const char* const sEnd = s + str.length();
   69|  10.2k|  while (s < sEnd) {
  ------------------
  |  Branch (69:10): [True: 9.66k, False: 605]
  ------------------
   70|  9.66k|    if (FromUTF8(&s) < 0) {
  ------------------
  |  Branch (70:9): [True: 81, False: 9.58k]
  ------------------
   71|     81|      return false;
   72|     81|    }
   73|  9.66k|  }
   74|    605|  return true;
   75|    686|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117IsIdentifierStartEc:
  205|  10.2M|static bool IsIdentifierStart(char c) { return is_alpha(c) || (c == '_'); }
  ------------------
  |  Branch (205:48): [True: 7.29M, False: 2.95M]
  |  Branch (205:63): [True: 81.1k, False: 2.87M]
  ------------------
_ZN11flatbuffers6Parser15ParseDepthGuardC2EPS0_:
  426|   529k|      : parser_(*parser_not_null), caller_depth_(parser_.parse_depth_counter_) {
  427|   529k|    FLATBUFFERS_ASSERT(caller_depth_ <= (FLATBUFFERS_MAX_PARSING_DEPTH) &&
  428|   529k|                       "Check() must be called to prevent stack overflow");
  429|   529k|    parser_.parse_depth_counter_ += 1;
  430|   529k|  }
_ZN11flatbuffers6Parser15ParseDepthGuard5CheckEv:
  434|   529k|  CheckedError Check() {
  435|   529k|    return caller_depth_ >= (FLATBUFFERS_MAX_PARSING_DEPTH)
  ------------------
  |  Branch (435:12): [True: 13, False: 529k]
  ------------------
  436|   529k|               ? parser_.RecurseError()
  437|   529k|               : CheckedError(false);
  438|   529k|  }
_ZN11flatbuffers6Parser15ParseDepthGuardD2Ev:
  432|   529k|  ~ParseDepthGuard() { parser_.parse_depth_counter_ -= 1; }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_116IsLowerSnakeCaseERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
   77|  57.1k|static bool IsLowerSnakeCase(const std::string& str) {
   78|   171k|  for (size_t i = 0; i < str.length(); i++) {
  ------------------
  |  Branch (78:22): [True: 132k, False: 38.8k]
  ------------------
   79|   132k|    char c = str[i];
   80|   132k|    if (!check_ascii_range(c, 'a', 'z') && !is_digit(c) && c != '_') {
  ------------------
  |  Branch (80:9): [True: 28.9k, False: 103k]
  |  Branch (80:44): [True: 20.9k, False: 8.06k]
  |  Branch (80:60): [True: 18.3k, False: 2.62k]
  ------------------
   81|  18.3k|      return false;
   82|  18.3k|    }
   83|   132k|  }
   84|  38.8k|  return true;
   85|  57.1k|}
idl_parser.cpp:_ZZN11flatbuffers6Parser10ParseFieldERNS_9StructDefEENK3$_0clEPKNS_8FieldDefERKNS_4TypeERKNSt3__112basic_stringIcNSA_11char_traitsIcEENSA_9allocatorIcEEEESI_:
 1206|  1.50k|                           const std::string& constant) -> CheckedError {
 1207|       |    // Optional and bitflags enums may have default constants that are not
 1208|       |    // their specified variants.
 1209|  1.50k|    if (!field->IsOptional() &&
  ------------------
  |  Branch (1209:9): [True: 1.29k, False: 202]
  |  Branch (1209:9): [True: 1.28k, False: 220]
  ------------------
 1210|  1.29k|        type.enum_def->attributes.Lookup("bit_flags") == nullptr) {
  ------------------
  |  Branch (1210:9): [True: 1.28k, False: 18]
  ------------------
 1211|  1.28k|      if (type.enum_def->FindByValue(constant) == nullptr) {
  ------------------
  |  Branch (1211:11): [True: 90, False: 1.19k]
  ------------------
 1212|     90|        return Error("default value of `" + constant + "` for " + "field `" +
 1213|     90|                     name + "` is not part of enum `" + type.enum_def->name +
 1214|     90|                     "`.");
 1215|     90|      }
 1216|  1.28k|    }
 1217|       |
 1218|  1.41k|    return NoError();
 1219|  1.50k|  };
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotINS_8Offset64IvEEEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  136|  11.2k|                                  Offset64<void>* val) {
  137|  11.2k|  (void)parser;
  138|  11.2k|  *val = Offset64<void>(atoi(s));
  139|  11.2k|  return NoError();
  140|  11.2k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotINS_6OffsetIvEEEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  128|   112k|                                Offset<void>* val) {
  129|   112k|  (void)parser;
  130|   112k|  *val = Offset<void>(atoi(s));
  131|   112k|  return NoError();
  132|   112k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120SwapSerializedTablesEPNS_6OffsetINS_5TableEEES4_:
  263|  69.9k|static void SwapSerializedTables(Offset<Table>* a, Offset<Table>* b) {
  264|       |  // These are serialized offsets, so are relative where they are
  265|       |  // stored in memory, so compute the distance between these pointers:
  266|  69.9k|  ptrdiff_t diff = (b - a) * sizeof(Offset<Table>);
  267|  69.9k|  FLATBUFFERS_ASSERT(diff >= 0);  // Guaranteed by SimpleQsort.
  268|  69.9k|  auto udiff = static_cast<uoffset_t>(diff);
  269|  69.9k|  a->o = EndianScalar(ReadScalar<uoffset_t>(a) - udiff);
  270|  69.9k|  b->o = EndianScalar(ReadScalar<uoffset_t>(b) + udiff);
  271|  69.9k|  std::swap(*a, *b);
  272|  69.9k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackERNS_5ValueEf:
  306|    172|static void SingleValueRepack(Value& e, float val) {
  307|    172|  if (val != val) e.constant = "nan";
  ------------------
  |  Branch (307:7): [True: 26, False: 146]
  ------------------
  308|    172|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackERNS_5ValueEd:
  309|    180|static void SingleValueRepack(Value& e, double val) {
  310|    180|  if (val != val) e.constant = "nan";
  ------------------
  |  Branch (310:7): [True: 34, False: 146]
  ------------------
  311|    180|}
_ZN11flatbuffers14EnumValBuilderC2ERNS_6ParserERNS_7EnumDefE:
 2539|   106k|      : parser(_parser),
 2540|   106k|        enum_def(_enum_def),
 2541|   106k|        temp(nullptr),
 2542|   106k|        user_value(false) {}
_ZN11flatbuffers14EnumValBuilder16CreateEnumeratorERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 2460|   566k|  EnumVal* CreateEnumerator(const std::string& ev_name) {
 2461|   566k|    FLATBUFFERS_ASSERT(!temp);
 2462|   566k|    auto first = enum_def.vals.vec.empty();
 2463|   566k|    user_value = first;
 2464|   566k|    temp = new EnumVal(ev_name, first ? 0 : enum_def.vals.vec.back()->value);
  ------------------
  |  Branch (2464:33): [True: 105k, False: 460k]
  ------------------
 2465|   566k|    return temp;
 2466|   566k|  }
_ZN11flatbuffers14EnumValBuilder16AcceptEnumeratorEv:
 2486|   566k|  FLATBUFFERS_CHECKED_ERROR AcceptEnumerator() {
 2487|   566k|    return AcceptEnumerator(temp->name);
 2488|   566k|  }
_ZN11flatbuffers14EnumValBuilder21AssignEnumeratorValueERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 2490|   129k|  FLATBUFFERS_CHECKED_ERROR AssignEnumeratorValue(const std::string& value) {
 2491|   129k|    user_value = true;
 2492|   129k|    auto fit = false;
 2493|   129k|    if (enum_def.IsUInt64()) {
  ------------------
  |  Branch (2493:9): [True: 67.4k, False: 62.1k]
  ------------------
 2494|  67.4k|      uint64_t u64;
 2495|  67.4k|      fit = StringToNumber(value.c_str(), &u64);
 2496|  67.4k|      temp->value = static_cast<int64_t>(u64);  // well-defined since C++20.
 2497|  67.4k|    } else {
 2498|  62.1k|      int64_t i64;
 2499|  62.1k|      fit = StringToNumber(value.c_str(), &i64);
 2500|  62.1k|      temp->value = i64;
 2501|  62.1k|    }
 2502|   129k|    if (!fit) return parser.Error("enum value does not fit, \"" + value + "\"");
  ------------------
  |  Branch (2502:9): [True: 114, False: 129k]
  ------------------
 2503|   129k|    return NoError();
 2504|   129k|  }
_ZN11flatbuffers14EnumValBuilderD2Ev:
 2544|   106k|  ~EnumValBuilder() { delete temp; }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_116compareFieldDefsEPKNS_8FieldDefES3_:
  324|  80.9k|static bool compareFieldDefs(const FieldDef* a, const FieldDef* b) {
  325|  80.9k|  auto a_id = atoi(a->attributes.Lookup("id")->constant.c_str());
  326|  80.9k|  auto b_id = atoi(b->attributes.Lookup("id")->constant.c_str());
  327|  80.9k|  return a_id < b_id;
  328|  80.9k|}
_ZN11flatbuffers14EnumValBuilder16AcceptEnumeratorERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 2475|   566k|  FLATBUFFERS_CHECKED_ERROR AcceptEnumerator(const std::string& name) {
 2476|   566k|    FLATBUFFERS_ASSERT(temp);
 2477|   566k|    ECHECK(ValidateValue(&temp->value, false == user_value));
  ------------------
  |  |   56|   566k|  {                            \
  |  |   57|   566k|    auto ce = (call);          \
  |  |   58|   566k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 906, False: 565k]
  |  |  ------------------
  |  |   59|   566k|  }
  ------------------
 2478|   565k|    FLATBUFFERS_ASSERT((temp->union_type.enum_def == nullptr) ||
 2479|   565k|                       (temp->union_type.enum_def == &enum_def));
 2480|   565k|    auto not_unique = enum_def.vals.Add(name, temp);
 2481|   565k|    temp = nullptr;
 2482|   565k|    if (not_unique) return parser.Error("enum value already exists: " + name);
  ------------------
  |  Branch (2482:9): [True: 52, False: 565k]
  ------------------
 2483|   565k|    return NoError();
 2484|   565k|  }
_ZN11flatbuffers14EnumValBuilder13ValidateValueEPlb:
 2522|   566k|  FLATBUFFERS_CHECKED_ERROR ValidateValue(int64_t* ev, bool next) {
 2523|       |    // clang-format off
 2524|   566k|    switch (enum_def.underlying_type.base_type) {
 2525|      0|    #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...)                   \
 2526|      0|      case BASE_TYPE_##ENUM: {                                          \
 2527|      0|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
 2528|      0|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
 2529|      0|      }
 2530|   566k|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  ------------------
  |  |   50|      0|  TD(NONE,     "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 0) \
  |  |  ------------------
  |  |  |  | 2530|      0|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|      0|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 0, False: 566k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|      0|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|      0|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|      0|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   51|   127k|  TD(UTYPE,    "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 1) /* begin scalar/int */ \
  |  |  ------------------
  |  |  |  | 2530|   127k|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|   127k|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 127k, False: 439k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|   127k|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 127k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|   127k|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 36.1k, False: 91.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|   127k|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|   127k|  TD(BOOL,     "bool",   uint8_t,  boolean,bool,    bool,   bool,    bool, Boolean, Bool, 2) \
  |  |  ------------------
  |  |  |  | 2530|      0|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|      0|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 0, False: 566k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|      0|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|      0|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|      0|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|    740|  TD(CHAR,     "byte",   int8_t,   byte,   int8,    sbyte,  int8,    i8,   Byte, Int8, 3) \
  |  |  ------------------
  |  |  |  | 2530|    740|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|    740|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 740, False: 565k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|    740|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 740]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|    740|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 373, False: 367]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|    740|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|  1.49k|  TD(UCHAR,    "ubyte",  uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 4) \
  |  |  ------------------
  |  |  |  | 2530|  1.49k|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|  1.49k|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 1.49k, False: 565k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|  1.49k|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 1.49k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|  1.49k|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 731, False: 768]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|  1.49k|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|  3.95k|  TD(SHORT,    "short",  int16_t,  short,  int16,   short,  int16,   i16,  Short, Int16, 5) \
  |  |  ------------------
  |  |  |  | 2530|  3.95k|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|  3.95k|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 3.95k, False: 562k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|  3.95k|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 3.95k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|  3.95k|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 3.11k, False: 841]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|  3.95k|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   56|  36.9k|  TD(USHORT,   "ushort", uint16_t, short,  uint16,  ushort, uint16,  u16,  UShort, UInt16, 6) \
  |  |  ------------------
  |  |  |  | 2530|  36.9k|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|  36.9k|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 36.9k, False: 529k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|  36.9k|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 36.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|  36.9k|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 24.4k, False: 12.4k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|  36.9k|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   57|  36.9k|  TD(INT,      "int",    int32_t,  int,    int32,   int,    int32,   i32,  Int, Int32, 7) \
  |  |  ------------------
  |  |  |  | 2530|  16.1k|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|  16.1k|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 16.1k, False: 550k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|  16.1k|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 16.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|  16.1k|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 9.50k, False: 6.65k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|  16.1k|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|   111k|  TD(UINT,     "uint",   uint32_t, int,    uint32,  uint,   uint32,  u32,  UInt, UInt32, 8) \
  |  |  ------------------
  |  |  |  | 2530|   111k|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|   111k|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 111k, False: 454k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|   111k|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 111k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|   111k|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 76.9k, False: 34.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|   111k|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   59|   111k|  TD(LONG,     "long",   int64_t,  long,   int64,   long,   int64,   i64,  Long, Int64, 9) \
  |  |  ------------------
  |  |  |  | 2530|  22.6k|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|  22.6k|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 22.6k, False: 543k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|  22.6k|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 22.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|  22.6k|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 16.7k, False: 5.86k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|  22.6k|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|   245k|  TD(ULONG,    "ulong",  uint64_t, long,   uint64,  ulong,  uint64,  u64,  ULong, UInt64, 10) /* end int */ \
  |  |  ------------------
  |  |  |  | 2530|   245k|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|   245k|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 245k, False: 320k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|   245k|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 245k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|   245k|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 170k, False: 75.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|   245k|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|   245k|  TD(FLOAT,    "float",  float,    float,  float32, float,  float32, f32,  Float, Float32, 11) /* begin float */ \
  |  |  ------------------
  |  |  |  | 2530|      0|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|      0|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 0, False: 566k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|      0|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|      0|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|      0|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|      0|  TD(DOUBLE,   "double", double,   double, float64, double, float64, f64,  Double, Double, 12) /* end float/scalar */
  |  |  ------------------
  |  |  |  | 2530|      0|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|      0|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 0, False: 566k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|      0|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|      0|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|      0|      }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|      0|    #undef FLATBUFFERS_TD
 2532|      0|    default: break;
  ------------------
  |  Branch (2532:5): [True: 0, False: 566k]
  ------------------
 2533|   566k|    }
 2534|       |    // clang-format on
 2535|      0|    return parser.Error("fatal: invalid enum underlying type");
 2536|   566k|  }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120TypeToIntervalStringIhEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEv:
   97|    469|static std::string TypeToIntervalString() {
   98|    469|  return "[" + NumToString((flatbuffers::numeric_limits<T>::lowest)()) + "; " +
   99|    469|         NumToString((flatbuffers::numeric_limits<T>::max)()) + "]";
  100|    469|}
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE1EhEENS_12CheckedErrorEPli:
 2507|   127k|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|   127k|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|   127k|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|   127k|    const auto v = static_cast<T>(*ev);
 2511|   127k|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|   127k|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|   127k|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 66, False: 127k]
  |  Branch (2513:19): [True: 87, False: 127k]
  ------------------
 2514|    153|      return parser.Error("enum value does not fit, \"" + NumToString(v) +
 2515|    153|                          (m ? " + 1\"" : "\"") + " out of " +
  ------------------
  |  Branch (2515:28): [True: 0, False: 153]
  ------------------
 2516|    153|                          TypeToIntervalString<CTYPE>());
 2517|    153|    }
 2518|   127k|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|   127k|    return NoError();
 2520|   127k|  }
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE3EaEENS_12CheckedErrorEPli:
 2507|    740|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|    740|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|    740|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|    740|    const auto v = static_cast<T>(*ev);
 2511|    740|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|    740|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|    740|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 63, False: 677]
  |  Branch (2513:19): [True: 87, False: 590]
  ------------------
 2514|    150|      return parser.Error("enum value does not fit, \"" + NumToString(v) +
 2515|    150|                          (m ? " + 1\"" : "\"") + " out of " +
  ------------------
  |  Branch (2515:28): [True: 1, False: 149]
  ------------------
 2516|    150|                          TypeToIntervalString<CTYPE>());
 2517|    150|    }
 2518|    590|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|    590|    return NoError();
 2520|    740|  }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120TypeToIntervalStringIaEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEv:
   97|    268|static std::string TypeToIntervalString() {
   98|    268|  return "[" + NumToString((flatbuffers::numeric_limits<T>::lowest)()) + "; " +
   99|    268|         NumToString((flatbuffers::numeric_limits<T>::max)()) + "]";
  100|    268|}
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE4EhEENS_12CheckedErrorEPli:
 2507|  1.49k|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|  1.49k|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|  1.49k|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|  1.49k|    const auto v = static_cast<T>(*ev);
 2511|  1.49k|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|  1.49k|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|  1.49k|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 61, False: 1.43k]
  |  Branch (2513:19): [True: 100, False: 1.33k]
  ------------------
 2514|    161|      return parser.Error("enum value does not fit, \"" + NumToString(v) +
 2515|    161|                          (m ? " + 1\"" : "\"") + " out of " +
  ------------------
  |  Branch (2515:28): [True: 0, False: 161]
  ------------------
 2516|    161|                          TypeToIntervalString<CTYPE>());
 2517|    161|    }
 2518|  1.33k|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|  1.33k|    return NoError();
 2520|  1.49k|  }
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE5EsEENS_12CheckedErrorEPli:
 2507|  3.95k|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|  3.95k|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|  3.95k|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|  3.95k|    const auto v = static_cast<T>(*ev);
 2511|  3.95k|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|  3.95k|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|  3.95k|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 44, False: 3.91k]
  |  Branch (2513:19): [True: 59, False: 3.85k]
  ------------------
 2514|    103|      return parser.Error("enum value does not fit, \"" + NumToString(v) +
 2515|    103|                          (m ? " + 1\"" : "\"") + " out of " +
  ------------------
  |  Branch (2515:28): [True: 0, False: 103]
  ------------------
 2516|    103|                          TypeToIntervalString<CTYPE>());
 2517|    103|    }
 2518|  3.85k|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|  3.85k|    return NoError();
 2520|  3.95k|  }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120TypeToIntervalStringIsEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEv:
   97|    203|static std::string TypeToIntervalString() {
   98|    203|  return "[" + NumToString((flatbuffers::numeric_limits<T>::lowest)()) + "; " +
   99|    203|         NumToString((flatbuffers::numeric_limits<T>::max)()) + "]";
  100|    203|}
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE6EtEENS_12CheckedErrorEPli:
 2507|  36.9k|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|  36.9k|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|  36.9k|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|  36.9k|    const auto v = static_cast<T>(*ev);
 2511|  36.9k|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|  36.9k|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|  36.9k|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 56, False: 36.8k]
  |  Branch (2513:19): [True: 85, False: 36.7k]
  ------------------
 2514|    141|      return parser.Error("enum value does not fit, \"" + NumToString(v) +
 2515|    141|                          (m ? " + 1\"" : "\"") + " out of " +
  ------------------
  |  Branch (2515:28): [True: 1, False: 140]
  ------------------
 2516|    141|                          TypeToIntervalString<CTYPE>());
 2517|    141|    }
 2518|  36.7k|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|  36.7k|    return NoError();
 2520|  36.9k|  }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120TypeToIntervalStringItEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEv:
   97|    241|static std::string TypeToIntervalString() {
   98|    241|  return "[" + NumToString((flatbuffers::numeric_limits<T>::lowest)()) + "; " +
   99|    241|         NumToString((flatbuffers::numeric_limits<T>::max)()) + "]";
  100|    241|}
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE7EiEENS_12CheckedErrorEPli:
 2507|  16.1k|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|  16.1k|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|  16.1k|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|  16.1k|    const auto v = static_cast<T>(*ev);
 2511|  16.1k|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|  16.1k|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|  16.1k|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 54, False: 16.1k]
  |  Branch (2513:19): [True: 45, False: 16.0k]
  ------------------
 2514|     99|      return parser.Error("enum value does not fit, \"" + NumToString(v) +
 2515|     99|                          (m ? " + 1\"" : "\"") + " out of " +
  ------------------
  |  Branch (2515:28): [True: 0, False: 99]
  ------------------
 2516|     99|                          TypeToIntervalString<CTYPE>());
 2517|     99|    }
 2518|  16.0k|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|  16.0k|    return NoError();
 2520|  16.1k|  }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120TypeToIntervalStringIiEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEv:
   97|    171|static std::string TypeToIntervalString() {
   98|    171|  return "[" + NumToString((flatbuffers::numeric_limits<T>::lowest)()) + "; " +
   99|    171|         NumToString((flatbuffers::numeric_limits<T>::max)()) + "]";
  100|    171|}
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE8EjEENS_12CheckedErrorEPli:
 2507|   111k|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|   111k|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|   111k|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|   111k|    const auto v = static_cast<T>(*ev);
 2511|   111k|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|   111k|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|   111k|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 34, False: 111k]
  |  Branch (2513:19): [True: 63, False: 111k]
  ------------------
 2514|     97|      return parser.Error("enum value does not fit, \"" + NumToString(v) +
 2515|     97|                          (m ? " + 1\"" : "\"") + " out of " +
  ------------------
  |  Branch (2515:28): [True: 0, False: 97]
  ------------------
 2516|     97|                          TypeToIntervalString<CTYPE>());
 2517|     97|    }
 2518|   111k|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|   111k|    return NoError();
 2520|   111k|  }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120TypeToIntervalStringIjEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEv:
   97|    201|static std::string TypeToIntervalString() {
   98|    201|  return "[" + NumToString((flatbuffers::numeric_limits<T>::lowest)()) + "; " +
   99|    201|         NumToString((flatbuffers::numeric_limits<T>::max)()) + "]";
  100|    201|}
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE9ElEENS_12CheckedErrorEPli:
 2507|  22.6k|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|  22.6k|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|  22.6k|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|  22.6k|    const auto v = static_cast<T>(*ev);
 2511|  22.6k|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|  22.6k|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|  22.6k|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 0, False: 22.6k]
  |  Branch (2513:19): [True: 1, False: 22.6k]
  ------------------
 2514|      1|      return parser.Error("enum value does not fit, \"" + NumToString(v) +
 2515|      1|                          (m ? " + 1\"" : "\"") + " out of " +
  ------------------
  |  Branch (2515:28): [True: 1, False: 0]
  ------------------
 2516|      1|                          TypeToIntervalString<CTYPE>());
 2517|      1|    }
 2518|  22.6k|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|  22.6k|    return NoError();
 2520|  22.6k|  }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120TypeToIntervalStringIlEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEv:
   97|     18|static std::string TypeToIntervalString() {
   98|     18|  return "[" + NumToString((flatbuffers::numeric_limits<T>::lowest)()) + "; " +
   99|     18|         NumToString((flatbuffers::numeric_limits<T>::max)()) + "]";
  100|     18|}
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE10EmEENS_12CheckedErrorEPli:
 2507|   245k|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|   245k|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|   245k|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|   245k|    const auto v = static_cast<T>(*ev);
 2511|   245k|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|   245k|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|   245k|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 0, False: 245k]
  |  Branch (2513:19): [True: 1, False: 245k]
  ------------------
 2514|      1|      return parser.Error("enum value does not fit, \"" + NumToString(v) +
 2515|      1|                          (m ? " + 1\"" : "\"") + " out of " +
  ------------------
  |  Branch (2515:28): [True: 1, False: 0]
  ------------------
 2516|      1|                          TypeToIntervalString<CTYPE>());
 2517|      1|    }
 2518|   245k|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|   245k|    return NoError();
 2520|   245k|  }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120TypeToIntervalStringImEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEv:
   97|     48|static std::string TypeToIntervalString() {
   98|     48|  return "[" + NumToString((flatbuffers::numeric_limits<T>::lowest)()) + "; " +
   99|     48|         NumToString((flatbuffers::numeric_limits<T>::max)()) + "]";
  100|     48|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_18HashFileEPKcS2_:
  359|    143|static uint64_t HashFile(const char* source_filename, const char* source) {
  360|    143|  uint64_t hash = 0;
  361|       |
  362|    143|  if (source_filename)
  ------------------
  |  Branch (362:7): [True: 143, False: 0]
  ------------------
  363|    143|    hash = HashFnv1a<uint64_t>(StripPath(source_filename).c_str());
  364|       |
  365|    143|  if (source && *source) hash ^= HashFnv1a<uint64_t>(source);
  ------------------
  |  Branch (365:7): [True: 143, False: 0]
  |  Branch (365:17): [True: 28, False: 115]
  ------------------
  366|       |
  367|    143|  return hash;
  368|    143|}
idl_parser.cpp:_ZN11flatbuffersL25SerializeAttributesCommonERKNS_11SymbolTableINS_5ValueEEEPNS_21FlatBufferBuilderImplILb0EEERKNS_6ParserE:
 3999|   290k|                          FlatBufferBuilder* builder, const Parser& parser) {
 4000|   290k|  std::vector<flatbuffers::Offset<reflection::KeyValue>> attrs;
 4001|   291k|  for (auto kv = attributes.dict.begin(); kv != attributes.dict.end(); ++kv) {
  ------------------
  |  Branch (4001:43): [True: 1.18k, False: 290k]
  ------------------
 4002|  1.18k|    auto it = parser.known_attributes_.find(kv->first);
 4003|  1.18k|    FLATBUFFERS_ASSERT(it != parser.known_attributes_.end());
 4004|  1.18k|    if (parser.opts.binary_schema_builtins || !it->second) {
  ------------------
  |  Branch (4004:9): [True: 0, False: 1.18k]
  |  Branch (4004:47): [True: 704, False: 485]
  ------------------
 4005|    704|      auto key = builder->CreateString(kv->first);
 4006|    704|      auto val = builder->CreateString(kv->second->constant);
 4007|    704|      attrs.push_back(reflection::CreateKeyValue(*builder, key, val));
 4008|    704|    }
 4009|  1.18k|  }
 4010|   290k|  if (attrs.size()) {
  ------------------
  |  Branch (4010:7): [True: 704, False: 289k]
  ------------------
 4011|    704|    return builder->CreateVectorOfSortedTables(&attrs);
 4012|   289k|  } else {
 4013|   289k|    return 0;
 4014|   289k|  }
 4015|   290k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117LookupTableByNameINS_7EnumDefEEEPT_RKNS_11SymbolTableIS3_EERKNSt3__112basic_stringIcNS9_11char_traitsIcEENS9_9allocatorIcEEEERKNS_9NamespaceEm:
  146|  77.7k|                            size_t skip_top) {
  147|  77.7k|  const auto& components = current_namespace.components;
  148|  77.7k|  if (table.dict.empty()) return nullptr;
  ------------------
  |  Branch (148:7): [True: 24.6k, False: 53.1k]
  ------------------
  149|  53.1k|  if (components.size() < skip_top) return nullptr;
  ------------------
  |  Branch (149:7): [True: 0, False: 53.1k]
  ------------------
  150|  53.1k|  const auto N = components.size() - skip_top;
  151|  53.1k|  std::string full_name;
  152|   112k|  for (size_t i = 0; i < N; i++) {
  ------------------
  |  Branch (152:22): [True: 59.4k, False: 53.1k]
  ------------------
  153|  59.4k|    full_name += components[i];
  154|  59.4k|    full_name += '.';
  155|  59.4k|  }
  156|   112k|  for (size_t i = N; i > 0; i--) {
  ------------------
  |  Branch (156:22): [True: 59.4k, False: 52.9k]
  ------------------
  157|  59.4k|    full_name += name;
  158|  59.4k|    auto obj = table.Lookup(full_name);
  159|  59.4k|    if (obj) return obj;
  ------------------
  |  Branch (159:9): [True: 209, False: 59.2k]
  ------------------
  160|  59.2k|    auto len = full_name.size() - components[i - 1].size() - 1 - name.size();
  161|  59.2k|    full_name.resize(len);
  162|  59.2k|  }
  163|  52.9k|  FLATBUFFERS_ASSERT(full_name.empty());
  164|  52.9k|  return table.Lookup(name);  // lookup in global namespace
  165|  52.9k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117LookupTableByNameINS_9StructDefEEEPT_RKNS_11SymbolTableIS3_EERKNSt3__112basic_stringIcNS9_11char_traitsIcEENS9_9allocatorIcEEEERKNS_9NamespaceEm:
  146|   222k|                            size_t skip_top) {
  147|   222k|  const auto& components = current_namespace.components;
  148|   222k|  if (table.dict.empty()) return nullptr;
  ------------------
  |  Branch (148:7): [True: 6.34k, False: 216k]
  ------------------
  149|   216k|  if (components.size() < skip_top) return nullptr;
  ------------------
  |  Branch (149:7): [True: 152k, False: 63.9k]
  ------------------
  150|  63.9k|  const auto N = components.size() - skip_top;
  151|  63.9k|  std::string full_name;
  152|   674k|  for (size_t i = 0; i < N; i++) {
  ------------------
  |  Branch (152:22): [True: 610k, False: 63.9k]
  ------------------
  153|   610k|    full_name += components[i];
  154|   610k|    full_name += '.';
  155|   610k|  }
  156|   673k|  for (size_t i = N; i > 0; i--) {
  ------------------
  |  Branch (156:22): [True: 610k, False: 63.7k]
  ------------------
  157|   610k|    full_name += name;
  158|   610k|    auto obj = table.Lookup(full_name);
  159|   610k|    if (obj) return obj;
  ------------------
  |  Branch (159:9): [True: 222, False: 610k]
  ------------------
  160|   610k|    auto len = full_name.size() - components[i - 1].size() - 1 - name.size();
  161|   610k|    full_name.resize(len);
  162|   610k|  }
  163|  63.7k|  FLATBUFFERS_ASSERT(full_name.empty());
  164|  63.7k|  return table.Lookup(name);  // lookup in global namespace
  165|  63.7k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotItEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  12.1k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  12.1k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  12.1k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 12.0k, False: 139]
  ------------------
  120|    139|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 39, False: 100]
  ------------------
  121|     39|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|    100|  else
  123|    100|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|    100|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|    139|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarItEEbPKcPT_NSt3__117integral_constantIbLb0EEE:
  104|  12.1k|static bool atot_scalar(const char* s, T* val, bool_constant<false>) {
  105|  12.1k|  return StringToNumber(s, val);
  106|  12.1k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotIjEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  9.18k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  9.18k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  9.18k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 9.04k, False: 141]
  ------------------
  120|    141|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 37, False: 104]
  ------------------
  121|     37|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|    104|  else
  123|    104|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|    104|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|    141|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarIjEEbPKcPT_NSt3__117integral_constantIbLb0EEE:
  104|  9.18k|static bool atot_scalar(const char* s, T* val, bool_constant<false>) {
  105|  9.18k|  return StringToNumber(s, val);
  106|  9.18k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotIhEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  47.2k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  47.2k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  47.2k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 47.0k, False: 220]
  ------------------
  120|    220|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 65, False: 155]
  ------------------
  121|     65|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|    155|  else
  123|    155|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|    155|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|    220|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarIhEEbPKcPT_NSt3__117integral_constantIbLb0EEE:
  104|  47.2k|static bool atot_scalar(const char* s, T* val, bool_constant<false>) {
  105|  47.2k|  return StringToNumber(s, val);
  106|  47.2k|}
idl_parser.cpp:_ZN11flatbuffers6Parser20ParseTableDelimitersIZNS0_10ParseTableERKNS_9StructDefEPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEPjE3$_0EENS_12CheckedErrorERmPS3_T_:
 1509|   177k|                                          const StructDef* struct_def, F body) {
 1510|       |  // We allow tables both as JSON object{ .. } with field names
 1511|       |  // or vector[..] with all fields in order
 1512|   177k|  char terminator = '}';
 1513|   177k|  bool is_nested_vector = struct_def && Is('[');
  ------------------
  |  Branch (1513:27): [True: 177k, False: 0]
  |  Branch (1513:41): [True: 115k, False: 62.2k]
  ------------------
 1514|   177k|  if (is_nested_vector) {
  ------------------
  |  Branch (1514:7): [True: 115k, False: 62.2k]
  ------------------
 1515|   115k|    NEXT();
  ------------------
  |  |   63|   115k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|   115k|  {                            \
  |  |  |  |   57|   115k|    auto ce = (call);          \
  |  |  |  |   58|   115k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 14, False: 115k]
  |  |  |  |  ------------------
  |  |  |  |   59|   115k|  }
  |  |  ------------------
  ------------------
 1516|   115k|    terminator = ']';
 1517|   115k|  } else {
 1518|  62.2k|    EXPECT('{');
  ------------------
  |  |   64|  62.2k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  62.2k|  {                            \
  |  |  |  |   57|  62.2k|    auto ce = (call);          \
  |  |  |  |   58|  62.2k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 272, False: 61.9k]
  |  |  |  |  ------------------
  |  |  |  |   59|  62.2k|  }
  |  |  ------------------
  ------------------
 1519|  61.9k|  }
 1520|   233k|  for (;;) {
 1521|   233k|    if ((!opts.strict_json || !fieldn) && Is(terminator)) break;
  ------------------
  |  Branch (1521:10): [True: 232k, False: 1.87k]
  |  Branch (1521:31): [True: 1.67k, False: 201]
  |  Branch (1521:43): [True: 53.7k, False: 179k]
  ------------------
 1522|   180k|    std::string name;
 1523|   180k|    if (is_nested_vector) {
  ------------------
  |  Branch (1523:9): [True: 168k, False: 11.2k]
  ------------------
 1524|   168k|      if (fieldn >= struct_def->fields.vec.size()) {
  ------------------
  |  Branch (1524:11): [True: 30, False: 168k]
  ------------------
 1525|     30|        return Error("too many unnamed fields in nested array");
 1526|     30|      }
 1527|   168k|      name = struct_def->fields.vec[fieldn]->name;
 1528|   168k|    } else {
 1529|  11.2k|      name = attribute_;
 1530|  11.2k|      if (Is(kTokenStringConstant)) {
  ------------------
  |  Branch (1530:11): [True: 1.99k, False: 9.24k]
  ------------------
 1531|  1.99k|        NEXT();
  ------------------
  |  |   63|  1.99k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  1.99k|  {                            \
  |  |  |  |   57|  1.99k|    auto ce = (call);          \
  |  |  |  |   58|  1.99k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 1.99k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.99k|  }
  |  |  ------------------
  ------------------
 1532|  9.24k|      } else {
 1533|  9.24k|        EXPECT(opts.strict_json ? kTokenStringConstant : kTokenIdentifier);
  ------------------
  |  |   64|  9.24k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  9.24k|  {                            \
  |  |  |  |   57|  18.4k|    auto ce = (call);          \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:16): [True: 14, False: 9.22k]
  |  |  |  |  ------------------
  |  |  |  |   58|  9.24k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 134, False: 9.10k]
  |  |  |  |  ------------------
  |  |  |  |   59|  9.24k|  }
  |  |  ------------------
  ------------------
 1534|  9.10k|      }
 1535|  11.0k|      if (!opts.protobuf_ascii_alike || !(Is('{') || Is('['))) EXPECT(':');
  ------------------
  |  |   64|  11.0k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  11.0k|  {                            \
  |  |  |  |   57|  11.0k|    auto ce = (call);          \
  |  |  |  |   58|  11.0k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 25, False: 11.0k]
  |  |  |  |  ------------------
  |  |  |  |   59|  11.0k|  }
  |  |  ------------------
  ------------------
  |  Branch (1535:11): [True: 11.0k, False: 0]
  |  Branch (1535:43): [True: 0, False: 0]
  |  Branch (1535:54): [True: 0, False: 0]
  ------------------
 1536|  11.0k|    }
 1537|   179k|    ECHECK(body(name, fieldn, struct_def));
  ------------------
  |  |   56|   179k|  {                            \
  |  |   57|   179k|    auto ce = (call);          \
  |  |   58|   179k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 8.30k, False: 171k]
  |  |  ------------------
  |  |   59|   179k|  }
  ------------------
 1538|   171k|    if (Is(terminator)) break;
  ------------------
  |  Branch (1538:9): [True: 111k, False: 59.7k]
  ------------------
 1539|  59.7k|    ECHECK(ParseComma());
  ------------------
  |  |   56|  59.7k|  {                            \
  |  |   57|  59.7k|    auto ce = (call);          \
  |  |   58|  59.7k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 2.95k, False: 56.8k]
  |  |  ------------------
  |  |   59|  59.7k|  }
  ------------------
 1540|  56.8k|  }
 1541|   165k|  NEXT();
  ------------------
  |  |   63|   165k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|   165k|  {                            \
  |  |  |  |   57|   165k|    auto ce = (call);          \
  |  |  |  |   58|   165k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 10, False: 165k]
  |  |  |  |  ------------------
  |  |  |  |   59|   165k|  }
  |  |  ------------------
  ------------------
 1542|   165k|  if (is_nested_vector && fieldn != struct_def->fields.vec.size()) {
  ------------------
  |  Branch (1542:7): [True: 112k, False: 53.5k]
  |  Branch (1542:27): [True: 39, False: 112k]
  ------------------
 1543|     39|    return Error("wrong number of unnamed fields in table vector");
 1544|     39|  }
 1545|   165k|  return NoError();
 1546|   165k|}
idl_parser.cpp:_ZZN11flatbuffers6Parser10ParseTableERKNS_9StructDefEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEPjENK3$_0clERKSA_RmPS2_:
 1557|   179k|          const StructDef* struct_def_inner) -> CheckedError {
 1558|   179k|        if (name == "$schema") {
  ------------------
  |  Branch (1558:13): [True: 112, False: 179k]
  ------------------
 1559|    112|          ECHECK(Expect(kTokenStringConstant));
  ------------------
  |  |   56|    112|  {                            \
  |  |   57|    112|    auto ce = (call);          \
  |  |   58|    112|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 3, False: 109]
  |  |  ------------------
  |  |   59|    112|  }
  ------------------
 1560|    109|          return NoError();
 1561|    112|        }
 1562|   179k|        auto field = struct_def_inner->fields.Lookup(name);
 1563|   179k|        if (!field) {
  ------------------
  |  Branch (1563:13): [True: 2.09k, False: 177k]
  ------------------
 1564|  2.09k|          if (!opts.skip_unexpected_fields_in_json) {
  ------------------
  |  Branch (1564:15): [True: 12, False: 2.07k]
  ------------------
 1565|     12|            return Error("unknown field: " + name);
 1566|  2.07k|          } else {
 1567|  2.07k|            ECHECK(SkipAnyJsonValue());
  ------------------
  |  |   56|  2.07k|  {                            \
  |  |   57|  2.07k|    auto ce = (call);          \
  |  |   58|  2.07k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 212, False: 1.86k]
  |  |  ------------------
  |  |   59|  2.07k|  }
  ------------------
 1568|  1.86k|          }
 1569|   177k|        } else {
 1570|   177k|          if (IsIdent("null") && !IsScalar(field->value.type.base_type)) {
  ------------------
  |  Branch (1570:15): [True: 1.96k, False: 175k]
  |  Branch (1570:34): [True: 44, False: 1.91k]
  ------------------
 1571|     44|            ECHECK(Next());  // Ignore this field.
  ------------------
  |  |   56|     44|  {                            \
  |  |   57|     44|    auto ce = (call);          \
  |  |   58|     44|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1, False: 43]
  |  |  ------------------
  |  |   59|     44|  }
  ------------------
 1572|   177k|          } else {
 1573|   177k|            Value val = field->value;
 1574|   177k|            if (field->flexbuffer) {
  ------------------
  |  Branch (1574:17): [True: 6.97k, False: 170k]
  ------------------
 1575|  6.97k|              flexbuffers::Builder builder(1024,
 1576|  6.97k|                                           flexbuffers::BUILDER_FLAG_SHARE_ALL);
 1577|  6.97k|              ECHECK(ParseFlexBufferValue(&builder));
  ------------------
  |  |   56|  6.97k|  {                            \
  |  |   57|  6.97k|    auto ce = (call);          \
  |  |   58|  6.97k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 2.58k, False: 4.38k]
  |  |  ------------------
  |  |   59|  6.97k|  }
  ------------------
 1578|  4.38k|              builder.Finish();
 1579|       |              // Force alignment for nested flexbuffer
 1580|  4.38k|              builder_.ForceVectorAlignment(builder.GetSize(), sizeof(uint8_t),
 1581|  4.38k|                                            sizeof(largest_scalar_t));
 1582|  4.38k|              auto off = builder_.CreateVector(builder.GetBuffer());
 1583|  4.38k|              val.constant = NumToString(off.o);
 1584|   170k|            } else if (field->nested_flatbuffer) {
  ------------------
  |  Branch (1584:24): [True: 0, False: 170k]
  ------------------
 1585|      0|              ECHECK(
  ------------------
  |  |   56|      0|  {                            \
  |  |   57|      0|    auto ce = (call);          \
  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|      0|  }
  ------------------
 1586|      0|                  ParseNestedFlatbuffer(val, field, fieldn, struct_def_inner));
 1587|   170k|            } else {
 1588|   170k|              ECHECK(ParseAnyValue(val, field, fieldn, struct_def_inner, 0));
  ------------------
  |  |   56|   170k|  {                            \
  |  |   57|   170k|    auto ce = (call);          \
  |  |   58|   170k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 5.45k, False: 165k]
  |  |  ------------------
  |  |   59|   170k|  }
  ------------------
 1589|   165k|            }
 1590|       |            // Hardcoded insertion-sort with error-check.
 1591|       |            // If fields are specified in order, then this loop exits
 1592|       |            // immediately.
 1593|   169k|            auto elem = field_stack_.rbegin();
 1594|   170k|            for (; elem != field_stack_.rbegin() + fieldn; ++elem) {
  ------------------
  |  Branch (1594:20): [True: 53.9k, False: 116k]
  ------------------
 1595|  53.9k|              auto existing_field = elem->second;
 1596|  53.9k|              if (existing_field == field)
  ------------------
  |  Branch (1596:19): [True: 38, False: 53.9k]
  ------------------
 1597|     38|                return Error("field set more than once: " + field->name);
 1598|  53.9k|              if (existing_field->value.offset < field->value.offset) break;
  ------------------
  |  Branch (1598:19): [True: 53.5k, False: 377]
  ------------------
 1599|  53.9k|            }
 1600|       |            // Note: elem points to before the insertion point, thus .base()
 1601|       |            // points to the correct spot.
 1602|   169k|            field_stack_.insert(elem.base(), std::make_pair(val, field));
 1603|   169k|            fieldn++;
 1604|   169k|          }
 1605|   177k|        }
 1606|   171k|        return NoError();
 1607|   179k|      });
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotIaEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  19.6k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  19.6k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  19.6k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 19.4k, False: 148]
  ------------------
  120|    148|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 30, False: 118]
  ------------------
  121|     30|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|    118|  else
  123|    118|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|    118|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|    148|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarIaEEbPKcPT_NSt3__117integral_constantIbLb0EEE:
  104|  19.6k|static bool atot_scalar(const char* s, T* val, bool_constant<false>) {
  105|  19.6k|  return StringToNumber(s, val);
  106|  19.6k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotIsEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  9.83k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  9.83k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  9.83k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 9.70k, False: 132]
  ------------------
  120|    132|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 32, False: 100]
  ------------------
  121|     32|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|    100|  else
  123|    100|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|    100|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|    132|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarIsEEbPKcPT_NSt3__117integral_constantIbLb0EEE:
  104|  9.83k|static bool atot_scalar(const char* s, T* val, bool_constant<false>) {
  105|  9.83k|  return StringToNumber(s, val);
  106|  9.83k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotIiEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  33.3k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  33.3k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  33.3k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 33.2k, False: 115]
  ------------------
  120|    115|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 43, False: 72]
  ------------------
  121|     43|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|     72|  else
  123|     72|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|     72|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|    115|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarIiEEbPKcPT_NSt3__117integral_constantIbLb0EEE:
  104|  33.3k|static bool atot_scalar(const char* s, T* val, bool_constant<false>) {
  105|  33.3k|  return StringToNumber(s, val);
  106|  33.3k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotIlEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  25.7k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  25.7k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  25.7k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 25.6k, False: 48]
  ------------------
  120|     48|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 31, False: 17]
  ------------------
  121|     31|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|     17|  else
  123|     17|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|     17|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|     48|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarIlEEbPKcPT_NSt3__117integral_constantIbLb0EEE:
  104|  25.7k|static bool atot_scalar(const char* s, T* val, bool_constant<false>) {
  105|  25.7k|  return StringToNumber(s, val);
  106|  25.7k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotImEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  17.3k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  17.3k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  17.3k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 17.2k, False: 71]
  ------------------
  120|     71|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 24, False: 47]
  ------------------
  121|     24|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|     47|  else
  123|     47|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|     47|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|     71|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarImEEbPKcPT_NSt3__117integral_constantIbLb0EEE:
  104|  17.3k|static bool atot_scalar(const char* s, T* val, bool_constant<false>) {
  105|  17.3k|  return StringToNumber(s, val);
  106|  17.3k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotIfEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  24.1k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  24.1k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  24.1k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 24.0k, False: 80]
  ------------------
  120|     80|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 80, False: 0]
  ------------------
  121|     80|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|      0|  else
  123|      0|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|      0|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|     80|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarIfEEbPKcPT_NSt3__117integral_constantIbLb1EEE:
  109|  24.1k|static bool atot_scalar(const char* s, T* val, bool_constant<true>) {
  110|       |  // Normalize NaN parsed from fbs or json to unsigned NaN.
  111|  24.1k|  if (false == StringToNumber(s, val)) return false;
  ------------------
  |  Branch (111:7): [True: 80, False: 24.0k]
  ------------------
  112|  24.0k|  *val = (*val != *val) ? std::fabs(*val) : *val;
  ------------------
  |  Branch (112:10): [True: 202, False: 23.8k]
  ------------------
  113|  24.0k|  return true;
  114|  24.1k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotIdEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  29.9k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  29.9k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  29.9k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 29.9k, False: 46]
  ------------------
  120|     46|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 46, False: 0]
  ------------------
  121|     46|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|      0|  else
  123|      0|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|      0|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|     46|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarIdEEbPKcPT_NSt3__117integral_constantIbLb1EEE:
  109|  29.9k|static bool atot_scalar(const char* s, T* val, bool_constant<true>) {
  110|       |  // Normalize NaN parsed from fbs or json to unsigned NaN.
  111|  29.9k|  if (false == StringToNumber(s, val)) return false;
  ------------------
  |  Branch (111:7): [True: 46, False: 29.9k]
  ------------------
  112|  29.9k|  *val = (*val != *val) ? std::fabs(*val) : *val;
  ------------------
  |  Branch (112:10): [True: 230, False: 29.7k]
  ------------------
  113|  29.9k|  return true;
  114|  29.9k|}
idl_parser.cpp:_ZN11flatbuffers6Parser21ParseVectorDelimitersIZNS0_11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmE3$_0EENS_12CheckedErrorERmT_:
 1729|  43.5k|CheckedError Parser::ParseVectorDelimiters(size_t& count, F body) {
 1730|  43.5k|  EXPECT('[');
  ------------------
  |  |   64|  43.5k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  43.5k|  {                            \
  |  |  |  |   57|  43.5k|    auto ce = (call);          \
  |  |  |  |   58|  43.5k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 61, False: 43.5k]
  |  |  |  |  ------------------
  |  |  |  |   59|  43.5k|  }
  |  |  ------------------
  ------------------
 1731|   232k|  for (;;) {
 1732|   232k|    if ((!opts.strict_json || !count) && Is(']')) break;
  ------------------
  |  Branch (1732:10): [True: 228k, False: 4.43k]
  |  Branch (1732:31): [True: 181, False: 4.25k]
  |  Branch (1732:42): [True: 17.6k, False: 210k]
  ------------------
 1733|   215k|    ECHECK(body(count));
  ------------------
  |  |   56|   215k|  {                            \
  |  |   57|   215k|    auto ce = (call);          \
  |  |   58|   215k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 3.45k, False: 211k]
  |  |  ------------------
  |  |   59|   215k|  }
  ------------------
 1734|   211k|    count++;
 1735|   211k|    if (Is(']')) break;
  ------------------
  |  Branch (1735:9): [True: 21.2k, False: 190k]
  ------------------
 1736|   190k|    ECHECK(ParseComma());
  ------------------
  |  |   56|   190k|  {                            \
  |  |   57|   190k|    auto ce = (call);          \
  |  |   58|   190k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1.13k, False: 189k]
  |  |  ------------------
  |  |   59|   190k|  }
  ------------------
 1737|   189k|  }
 1738|  38.9k|  NEXT();
  ------------------
  |  |   63|  38.9k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  38.9k|  {                            \
  |  |  |  |   57|  38.9k|    auto ce = (call);          \
  |  |  |  |   58|  38.9k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 4, False: 38.9k]
  |  |  |  |  ------------------
  |  |  |  |   59|  38.9k|  }
  |  |  ------------------
  ------------------
 1739|  38.9k|  return NoError();
 1740|  38.9k|}
idl_parser.cpp:_ZZN11flatbuffers6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmENK3$_0clERm:
 1763|   215k|  auto err = ParseVectorDelimiters(count, [&](size_t&) -> CheckedError {
 1764|   215k|    Value val;
 1765|   215k|    val.type = type;
 1766|   215k|    ECHECK(ParseAnyValue(val, field, fieldn, nullptr, count, true));
  ------------------
  |  |   56|   215k|  {                            \
  |  |   57|   215k|    auto ce = (call);          \
  |  |   58|   215k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 3.45k, False: 211k]
  |  |  ------------------
  |  |   59|   215k|  }
  ------------------
 1767|   211k|    field_stack_.push_back(std::make_pair(val, nullptr));
 1768|   211k|    return NoError();
 1769|   215k|  });
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111SimpleQsortIhZNS_6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmE3$_1ZNS2_11ParseVectorES5_S6_S8_mE3$_2EEvPT_SC_mT0_T1_:
  277|  1.21k|                        S swapper) {
  278|  1.21k|  if (end - begin <= static_cast<ptrdiff_t>(width)) return;
  ------------------
  |  Branch (278:7): [True: 627, False: 584]
  ------------------
  279|    584|  auto l = begin + width;
  280|    584|  auto r = end;
  281|  20.0k|  while (l < r) {
  ------------------
  |  Branch (281:10): [True: 19.4k, False: 584]
  ------------------
  282|  19.4k|    if (comparator(begin, l)) {
  ------------------
  |  Branch (282:9): [True: 574, False: 18.8k]
  ------------------
  283|    574|      r -= width;
  284|    574|      swapper(l, r);
  285|  18.8k|    } else {
  286|  18.8k|      l += width;
  287|  18.8k|    }
  288|  19.4k|  }
  289|    584|  l -= width;
  290|    584|  swapper(begin, l);
  291|    584|  SimpleQsort(begin, l, width, comparator, swapper);
  292|    584|  SimpleQsort(r, end, width, comparator, swapper);
  293|    584|}
idl_parser.cpp:_ZZN11flatbuffers6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmENK3$_1clEPKhS9_:
 1848|  19.4k|          [offset, key](const uint8_t* a, const uint8_t* b) -> bool {
 1849|  19.4k|            return CompareSerializedScalars(a + offset, b + offset, *key);
 1850|  19.4k|          },
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_124CompareSerializedScalarsEPKhS2_RKNS_8FieldDefE:
  208|  79.4M|                                     const FieldDef& key) {
  209|  79.4M|  switch (key.value.type.base_type) {
  210|      0|#define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...)       \
  211|      0|  case BASE_TYPE_##ENUM: {                              \
  212|      0|    CTYPE def = static_cast<CTYPE>(0);                  \
  213|      0|    if (!a || !b) {                                     \
  214|      0|      StringToNumber(key.value.constant.c_str(), &def); \
  215|      0|    }                                                   \
  216|      0|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  217|      0|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  218|      0|    return av < bv;                                     \
  219|      0|  }
  220|      0|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  ------------------
  |  |   50|      0|  TD(NONE,     "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 0) \
  |  |  ------------------
  |  |  |  |  220|      0|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|      0|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 0, False: 79.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|      0|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|      0|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (213:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      0|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|      0|    }                                                   \
  |  |  |  |  |  |  216|      0|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|      0|    return av < bv;                                     \
  |  |  |  |  |  |  219|      0|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   51|      0|  TD(UTYPE,    "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 1) /* begin scalar/int */ \
  |  |  ------------------
  |  |  |  |  220|      0|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|      0|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 0, False: 79.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|      0|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|      0|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (213:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      0|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|      0|    }                                                   \
  |  |  |  |  |  |  216|      0|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|      0|    return av < bv;                                     \
  |  |  |  |  |  |  219|      0|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|  13.9k|  TD(BOOL,     "bool",   uint8_t,  boolean,bool,    bool,   bool,    bool, Boolean, Bool, 2) \
  |  |  ------------------
  |  |  |  |  220|  13.9k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  13.9k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 13.9k, False: 79.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  13.9k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  13.9k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 1.02k, False: 12.9k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 436, False: 12.4k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  1.46k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  1.46k|    }                                                   \
  |  |  |  |  |  |  216|  13.9k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 12.9k, False: 1.02k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  13.9k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 12.7k, False: 1.18k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  13.9k|    return av < bv;                                     \
  |  |  |  |  |  |  219|  13.9k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|  13.9k|  TD(CHAR,     "byte",   int8_t,   byte,   int8,    sbyte,  int8,    i8,   Byte, Int8, 3) \
  |  |  ------------------
  |  |  |  |  220|  8.37k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  8.37k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 8.37k, False: 79.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  8.37k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  8.37k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 871, False: 7.49k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 242, False: 7.25k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  1.11k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  1.11k|    }                                                   \
  |  |  |  |  |  |  216|  8.37k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 7.49k, False: 871]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  8.37k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 7.38k, False: 986]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  8.37k|    return av < bv;                                     \
  |  |  |  |  |  |  219|  8.37k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|  8.37k|  TD(UCHAR,    "ubyte",  uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 4) \
  |  |  ------------------
  |  |  |  |  220|  4.40k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  4.40k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 4.40k, False: 79.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  4.40k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  4.40k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 2.77k, False: 1.63k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 293, False: 1.34k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  3.06k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  3.06k|    }                                                   \
  |  |  |  |  |  |  216|  4.40k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 1.63k, False: 2.77k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  4.40k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 1.41k, False: 2.99k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  4.40k|    return av < bv;                                     \
  |  |  |  |  |  |  219|  4.40k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|  8.01k|  TD(SHORT,    "short",  int16_t,  short,  int16,   short,  int16,   i16,  Short, Int16, 5) \
  |  |  ------------------
  |  |  |  |  220|  8.01k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  8.01k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 8.01k, False: 79.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  8.01k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  8.01k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 7.16k, False: 848]
  |  |  |  |  |  |  |  Branch (213:15): [True: 340, False: 508]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  7.50k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  7.50k|    }                                                   \
  |  |  |  |  |  |  216|  8.01k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 848, False: 7.16k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  8.01k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 520, False: 7.49k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  8.01k|    return av < bv;                                     \
  |  |  |  |  |  |  219|  8.01k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   56|  13.3k|  TD(USHORT,   "ushort", uint16_t, short,  uint16,  ushort, uint16,  u16,  UShort, UInt16, 6) \
  |  |  ------------------
  |  |  |  |  220|  13.3k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  13.3k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 13.3k, False: 79.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  13.3k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  13.3k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 1.09k, False: 12.2k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 355, False: 11.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  1.44k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  1.44k|    }                                                   \
  |  |  |  |  |  |  216|  13.3k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 12.2k, False: 1.09k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  13.3k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 12.2k, False: 1.16k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  13.3k|    return av < bv;                                     \
  |  |  |  |  |  |  219|  13.3k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   57|  13.3k|  TD(INT,      "int",    int32_t,  int,    int32,   int,    int32,   i32,  Int, Int32, 7) \
  |  |  ------------------
  |  |  |  |  220|  6.69k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  6.69k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 6.69k, False: 79.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  6.69k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  6.69k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 4.29k, False: 2.39k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 254, False: 2.14k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  4.54k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  4.54k|    }                                                   \
  |  |  |  |  |  |  216|  6.69k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 2.39k, False: 4.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  6.69k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 2.34k, False: 4.34k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  6.69k|    return av < bv;                                     \
  |  |  |  |  |  |  219|  6.69k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  11.2k|  TD(UINT,     "uint",   uint32_t, int,    uint32,  uint,   uint32,  u32,  UInt, UInt32, 8) \
  |  |  ------------------
  |  |  |  |  220|  11.2k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  11.2k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 11.2k, False: 79.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  11.2k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  11.2k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 8.85k, False: 2.44k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 685, False: 1.76k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  9.53k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  9.53k|    }                                                   \
  |  |  |  |  |  |  216|  11.2k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 2.44k, False: 8.85k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  11.2k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 1.85k, False: 9.44k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  11.2k|    return av < bv;                                     \
  |  |  |  |  |  |  219|  11.2k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   59|  76.5M|  TD(LONG,     "long",   int64_t,  long,   int64,   long,   int64,   i64,  Long, Int64, 9) \
  |  |  ------------------
  |  |  |  |  220|  76.5M|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  76.5M|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 76.5M, False: 2.94M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  76.5M|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  76.5M|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 76.5M, False: 28.3k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 685, False: 27.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  76.5M|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  76.5M|    }                                                   \
  |  |  |  |  |  |  216|  76.5M|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 28.3k, False: 76.5M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  76.5M|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 28.1k, False: 76.5M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  76.5M|    return av < bv;                                     \
  |  |  |  |  |  |  219|  76.5M|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  76.5M|  TD(ULONG,    "ulong",  uint64_t, long,   uint64,  ulong,  uint64,  u64,  ULong, UInt64, 10) /* end int */ \
  |  |  ------------------
  |  |  |  |  220|  9.12k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  9.12k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 9.12k, False: 79.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  9.12k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  9.12k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 1.08k, False: 8.04k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 466, False: 7.57k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  1.55k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  1.55k|    }                                                   \
  |  |  |  |  |  |  216|  9.12k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 8.04k, False: 1.08k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  9.12k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 7.72k, False: 1.39k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  9.12k|    return av < bv;                                     \
  |  |  |  |  |  |  219|  9.12k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|  40.7k|  TD(FLOAT,    "float",  float,    float,  float32, float,  float32, f32,  Float, Float32, 11) /* begin float */ \
  |  |  ------------------
  |  |  |  |  220|  40.7k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  40.7k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 40.7k, False: 79.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  40.7k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  40.7k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 973, False: 39.7k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 225, False: 39.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  1.19k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  1.19k|    }                                                   \
  |  |  |  |  |  |  216|  40.7k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 39.7k, False: 973]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  40.7k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 39.9k, False: 811]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  40.7k|    return av < bv;                                     \
  |  |  |  |  |  |  219|  40.7k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|  2.83M|  TD(DOUBLE,   "double", double,   double, float64, double, float64, f64,  Double, Double, 12) /* end float/scalar */
  |  |  ------------------
  |  |  |  |  220|  2.83M|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  2.83M|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 2.83M, False: 76.6M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  2.83M|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  2.83M|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 993, False: 2.83M]
  |  |  |  |  |  |  |  Branch (213:15): [True: 258, False: 2.83M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  1.25k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  1.25k|    }                                                   \
  |  |  |  |  |  |  216|  2.83M|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 2.83M, False: 993]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  2.83M|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 2.83M, False: 1.18k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  2.83M|    return av < bv;                                     \
  |  |  |  |  |  |  219|  2.83M|  }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  221|      0|#undef FLATBUFFERS_TD
  222|      0|    default: {
  ------------------
  |  Branch (222:5): [True: 0, False: 79.4M]
  ------------------
  223|      0|      FLATBUFFERS_ASSERT(false && "scalar type expected");
  224|      0|      return false;
  225|      0|    }
  226|  79.4M|  }
  227|  79.4M|}
idl_parser.cpp:_ZZN11flatbuffers6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmENK3$_2clEPhS8_:
 1851|  1.15k|          [struct_size](uint8_t* a, uint8_t* b) {
 1852|       |            // FIXME: faster?
 1853|  9.49k|            for (size_t i = 0; i < struct_size; i++) {
  ------------------
  |  Branch (1853:32): [True: 8.33k, False: 1.15k]
  ------------------
 1854|  8.33k|              std::swap(a[i], b[i]);
 1855|  8.33k|            }
 1856|  1.15k|          });
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111SimpleQsortINS_6OffsetINS_5TableEEEZNS_6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmE3$_3PFvPS4_SD_EEEvPT_SH_mT0_T1_:
  277|  3.05k|                        S swapper) {
  278|  3.05k|  if (end - begin <= static_cast<ptrdiff_t>(width)) return;
  ------------------
  |  Branch (278:7): [True: 2.14k, False: 914]
  ------------------
  279|    914|  auto l = begin + width;
  280|    914|  auto r = end;
  281|  11.7k|  while (l < r) {
  ------------------
  |  Branch (281:10): [True: 10.8k, False: 914]
  ------------------
  282|  10.8k|    if (comparator(begin, l)) {
  ------------------
  |  Branch (282:9): [True: 2.78k, False: 8.02k]
  ------------------
  283|  2.78k|      r -= width;
  284|  2.78k|      swapper(l, r);
  285|  8.02k|    } else {
  286|  8.02k|      l += width;
  287|  8.02k|    }
  288|  10.8k|  }
  289|    914|  l -= width;
  290|    914|  swapper(begin, l);
  291|    914|  SimpleQsort(begin, l, width, comparator, swapper);
  292|    914|  SimpleQsort(r, end, width, comparator, swapper);
  293|    914|}
idl_parser.cpp:_ZZN11flatbuffers6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmENK3$_3clEPKNS_6OffsetINS_5TableEEESC_:
 1866|  10.8k|            [key](const Offset<Table>* _a, const Offset<Table>* _b) -> bool {
 1867|  10.8k|              return CompareTablesByStringKey(_a, _b, *key);
 1868|  10.8k|            },
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_124CompareTablesByStringKeyEPKNS_6OffsetINS_5TableEEES5_RKNS_8FieldDefE:
  244|  10.8k|                                     const FieldDef& key) {
  245|  10.8k|  const voffset_t offset = key.value.offset;
  246|       |  // Indirect offset pointer to table pointer.
  247|  10.8k|  auto a = reinterpret_cast<const uint8_t*>(_a) + ReadScalar<uoffset_t>(_a);
  248|  10.8k|  auto b = reinterpret_cast<const uint8_t*>(_b) + ReadScalar<uoffset_t>(_b);
  249|       |  // Fetch field address from table.
  250|  10.8k|  a = reinterpret_cast<const Table*>(a)->GetAddressOf(offset);
  251|  10.8k|  b = reinterpret_cast<const Table*>(b)->GetAddressOf(offset);
  252|  10.8k|  if (a && b) {
  ------------------
  |  Branch (252:7): [True: 10.8k, False: 0]
  |  Branch (252:12): [True: 10.8k, False: 0]
  ------------------
  253|       |    // Indirect offset pointer to string pointer.
  254|  10.8k|    a += ReadScalar<uoffset_t>(a);
  255|  10.8k|    b += ReadScalar<uoffset_t>(b);
  256|  10.8k|    return *reinterpret_cast<const String*>(a) <
  257|  10.8k|           *reinterpret_cast<const String*>(b);
  258|  10.8k|  } else {
  259|      0|    return a ? true : false;
  ------------------
  |  Branch (259:12): [True: 0, False: 0]
  ------------------
  260|      0|  }
  261|  10.8k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111SimpleQsortINS_6OffsetINS_5TableEEEZNS_6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmE3$_4PFvPS4_SD_EEEvPT_SH_mT0_T1_:
  277|   120k|                        S swapper) {
  278|   120k|  if (end - begin <= static_cast<ptrdiff_t>(width)) return;
  ------------------
  |  Branch (278:7): [True: 60.8k, False: 59.7k]
  ------------------
  279|  59.7k|  auto l = begin + width;
  280|  59.7k|  auto r = end;
  281|  79.5M|  while (l < r) {
  ------------------
  |  Branch (281:10): [True: 79.4M, False: 59.7k]
  ------------------
  282|  79.4M|    if (comparator(begin, l)) {
  ------------------
  |  Branch (282:9): [True: 6.53k, False: 79.4M]
  ------------------
  283|  6.53k|      r -= width;
  284|  6.53k|      swapper(l, r);
  285|  79.4M|    } else {
  286|  79.4M|      l += width;
  287|  79.4M|    }
  288|  79.4M|  }
  289|  59.7k|  l -= width;
  290|  59.7k|  swapper(begin, l);
  291|  59.7k|  SimpleQsort(begin, l, width, comparator, swapper);
  292|  59.7k|  SimpleQsort(r, end, width, comparator, swapper);
  293|  59.7k|}
idl_parser.cpp:_ZZN11flatbuffers6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmENK3$_4clEPKNS_6OffsetINS_5TableEEESC_:
 1873|  79.4M|            [key](const Offset<Table>* _a, const Offset<Table>* _b) -> bool {
 1874|  79.4M|              return CompareTablesByScalarKey(_a, _b, *key);
 1875|  79.4M|            },
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_124CompareTablesByScalarKeyEPKNS_6OffsetINS_5TableEEES5_RKNS_8FieldDefE:
  231|  79.4M|                                     const FieldDef& key) {
  232|  79.4M|  const voffset_t offset = key.value.offset;
  233|       |  // Indirect offset pointer to table pointer.
  234|  79.4M|  auto a = reinterpret_cast<const uint8_t*>(_a) + ReadScalar<uoffset_t>(_a);
  235|  79.4M|  auto b = reinterpret_cast<const uint8_t*>(_b) + ReadScalar<uoffset_t>(_b);
  236|       |  // Fetch field address from table.
  237|  79.4M|  a = reinterpret_cast<const Table*>(a)->GetAddressOf(offset);
  238|  79.4M|  b = reinterpret_cast<const Table*>(b)->GetAddressOf(offset);
  239|  79.4M|  return CompareSerializedScalars(a, b, key);
  240|  79.4M|}
idl_parser.cpp:_ZN11flatbuffers6Parser21ParseVectorDelimitersIZNS0_10ParseArrayERNS_5ValueEE3$_0EENS_12CheckedErrorERmT_:
 1729|  6.29k|CheckedError Parser::ParseVectorDelimiters(size_t& count, F body) {
 1730|  6.29k|  EXPECT('[');
  ------------------
  |  |   64|  6.29k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  6.29k|  {                            \
  |  |  |  |   57|  6.29k|    auto ce = (call);          \
  |  |  |  |   58|  6.29k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 15, False: 6.28k]
  |  |  |  |  ------------------
  |  |  |  |   59|  6.29k|  }
  |  |  ------------------
  ------------------
 1731|  18.7k|  for (;;) {
 1732|  18.7k|    if ((!opts.strict_json || !count) && Is(']')) break;
  ------------------
  |  Branch (1732:10): [True: 18.2k, False: 512]
  |  Branch (1732:31): [True: 94, False: 418]
  |  Branch (1732:42): [True: 209, False: 18.1k]
  ------------------
 1733|  18.5k|    ECHECK(body(count));
  ------------------
  |  |   56|  18.5k|  {                            \
  |  |   57|  18.5k|    auto ce = (call);          \
  |  |   58|  18.5k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 141, False: 18.3k]
  |  |  ------------------
  |  |   59|  18.5k|  }
  ------------------
 1734|  18.3k|    count++;
 1735|  18.3k|    if (Is(']')) break;
  ------------------
  |  Branch (1735:9): [True: 5.90k, False: 12.4k]
  ------------------
 1736|  12.4k|    ECHECK(ParseComma());
  ------------------
  |  |   56|  12.4k|  {                            \
  |  |   57|  12.4k|    auto ce = (call);          \
  |  |   58|  12.4k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 22, False: 12.4k]
  |  |  ------------------
  |  |   59|  12.4k|  }
  ------------------
 1737|  12.4k|  }
 1738|  6.11k|  NEXT();
  ------------------
  |  |   63|  6.11k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  6.11k|  {                            \
  |  |  |  |   57|  6.11k|    auto ce = (call);          \
  |  |  |  |   58|  6.11k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 3, False: 6.11k]
  |  |  |  |  ------------------
  |  |  |  |   59|  6.11k|  }
  |  |  ------------------
  ------------------
 1739|  6.11k|  return NoError();
 1740|  6.11k|}
idl_parser.cpp:_ZZN11flatbuffers6Parser10ParseArrayERNS_5ValueEENK3$_0clERm:
 1889|  18.5k|  auto err = ParseVectorDelimiters(count, [&](size_t&) -> CheckedError {
 1890|  18.5k|    stack.emplace_back(Value());
 1891|  18.5k|    auto& val = stack.back();
 1892|  18.5k|    val.type = type;
 1893|  18.5k|    if (IsStruct(type)) {
  ------------------
  |  Branch (1893:9): [True: 114, False: 18.4k]
  ------------------
 1894|    114|      ECHECK(ParseTable(*val.type.struct_def, &val.constant, nullptr));
  ------------------
  |  |   56|    114|  {                            \
  |  |   57|    114|    auto ce = (call);          \
  |  |   58|    114|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 114, False: 0]
  |  |  ------------------
  |  |   59|    114|  }
  ------------------
 1895|  18.4k|    } else {
 1896|  18.4k|      ECHECK(ParseSingleValue(nullptr, val, false));
  ------------------
  |  |   56|  18.4k|  {                            \
  |  |   57|  18.4k|    auto ce = (call);          \
  |  |   58|  18.4k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 27, False: 18.3k]
  |  |  ------------------
  |  |   59|  18.4k|  }
  ------------------
 1897|  18.3k|    }
 1898|  18.3k|    return NoError();
 1899|  18.5k|  });
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackIhEEvRNS_5ValueET_:
  296|    197|static inline void SingleValueRepack(Value& e, T val) {
  297|       |  // Remove leading zeros.
  298|    197|  if (IsInteger(e.type.base_type)) {
  ------------------
  |  Branch (298:7): [True: 197, False: 0]
  ------------------
  299|    197|    e.constant = NumToString(val);
  300|    197|  }
  301|    197|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackIaEEvRNS_5ValueET_:
  296|    159|static inline void SingleValueRepack(Value& e, T val) {
  297|       |  // Remove leading zeros.
  298|    159|  if (IsInteger(e.type.base_type)) {
  ------------------
  |  Branch (298:7): [True: 159, False: 0]
  ------------------
  299|    159|    e.constant = NumToString(val);
  300|    159|  }
  301|    159|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackIsEEvRNS_5ValueET_:
  296|    173|static inline void SingleValueRepack(Value& e, T val) {
  297|       |  // Remove leading zeros.
  298|    173|  if (IsInteger(e.type.base_type)) {
  ------------------
  |  Branch (298:7): [True: 173, False: 0]
  ------------------
  299|    173|    e.constant = NumToString(val);
  300|    173|  }
  301|    173|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackItEEvRNS_5ValueET_:
  296|     91|static inline void SingleValueRepack(Value& e, T val) {
  297|       |  // Remove leading zeros.
  298|     91|  if (IsInteger(e.type.base_type)) {
  ------------------
  |  Branch (298:7): [True: 91, False: 0]
  ------------------
  299|     91|    e.constant = NumToString(val);
  300|     91|  }
  301|     91|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackIiEEvRNS_5ValueET_:
  296|  6.03k|static inline void SingleValueRepack(Value& e, T val) {
  297|       |  // Remove leading zeros.
  298|  6.03k|  if (IsInteger(e.type.base_type)) {
  ------------------
  |  Branch (298:7): [True: 6.03k, False: 0]
  ------------------
  299|  6.03k|    e.constant = NumToString(val);
  300|  6.03k|  }
  301|  6.03k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackIjEEvRNS_5ValueET_:
  296|    240|static inline void SingleValueRepack(Value& e, T val) {
  297|       |  // Remove leading zeros.
  298|    240|  if (IsInteger(e.type.base_type)) {
  ------------------
  |  Branch (298:7): [True: 240, False: 0]
  ------------------
  299|    240|    e.constant = NumToString(val);
  300|    240|  }
  301|    240|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackIlEEvRNS_5ValueET_:
  296|    214|static inline void SingleValueRepack(Value& e, T val) {
  297|       |  // Remove leading zeros.
  298|    214|  if (IsInteger(e.type.base_type)) {
  ------------------
  |  Branch (298:7): [True: 214, False: 0]
  ------------------
  299|    214|    e.constant = NumToString(val);
  300|    214|  }
  301|    214|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackImEEvRNS_5ValueET_:
  296|    322|static inline void SingleValueRepack(Value& e, T val) {
  297|       |  // Remove leading zeros.
  298|    322|  if (IsInteger(e.type.base_type)) {
  ------------------
  |  Branch (298:7): [True: 322, False: 0]
  ------------------
  299|    322|    e.constant = NumToString(val);
  300|    322|  }
  301|    322|}
idl_parser.cpp:_ZZN11flatbuffers7EnumDef11SortByValueEvENK3$_0clEPKNS_7EnumValES4_:
 2405|  1.86M|    std::sort(v.begin(), v.end(), [](const EnumVal* e1, const EnumVal* e2) {
 2406|  1.86M|      if (e1->GetAsUInt64() == e2->GetAsUInt64()) {
  ------------------
  |  Branch (2406:11): [True: 301k, False: 1.56M]
  ------------------
 2407|   301k|        return e1->name < e2->name;
 2408|   301k|      }
 2409|  1.56M|      return e1->GetAsUInt64() < e2->GetAsUInt64();
 2410|  1.86M|    });
idl_parser.cpp:_ZZN11flatbuffers7EnumDef11SortByValueEvENK3$_1clEPKNS_7EnumValES4_:
 2412|  1.74M|    std::sort(v.begin(), v.end(), [](const EnumVal* e1, const EnumVal* e2) {
 2413|  1.74M|      if (e1->GetAsInt64() == e2->GetAsInt64()) {
  ------------------
  |  Branch (2413:11): [True: 285k, False: 1.46M]
  ------------------
 2414|   285k|        return e1->name < e2->name;
 2415|   285k|      }
 2416|  1.46M|      return e1->GetAsInt64() < e2->GetAsInt64();
 2417|  1.74M|    });
_ZN11flatbuffers7EnumDef15ChangeEnumValueIyEEvPNS_7EnumValET_:
 2444|  2.69k|void EnumDef::ChangeEnumValue(EnumVal* ev, T new_value) {
 2445|  2.69k|  ev->value = static_cast<int64_t>(new_value);
 2446|  2.69k|}
idl_parser.cpp:_ZN11flatbuffers6Parser20ParseTableDelimitersIZNS0_16SkipAnyJsonValueEvE3$_0EENS_12CheckedErrorERmPKNS_9StructDefET_:
 1509|    824|                                          const StructDef* struct_def, F body) {
 1510|       |  // We allow tables both as JSON object{ .. } with field names
 1511|       |  // or vector[..] with all fields in order
 1512|    824|  char terminator = '}';
 1513|    824|  bool is_nested_vector = struct_def && Is('[');
  ------------------
  |  Branch (1513:27): [True: 0, False: 824]
  |  Branch (1513:41): [True: 0, False: 0]
  ------------------
 1514|    824|  if (is_nested_vector) {
  ------------------
  |  Branch (1514:7): [True: 0, False: 824]
  ------------------
 1515|      0|    NEXT();
  ------------------
  |  |   63|      0|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|      0|  {                            \
  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|  }
  |  |  ------------------
  ------------------
 1516|      0|    terminator = ']';
 1517|    824|  } else {
 1518|    824|    EXPECT('{');
  ------------------
  |  |   64|    824|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|    824|  {                            \
  |  |  |  |   57|    824|    auto ce = (call);          \
  |  |  |  |   58|    824|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 823]
  |  |  |  |  ------------------
  |  |  |  |   59|    824|  }
  |  |  ------------------
  ------------------
 1519|    823|  }
 1520|  1.77k|  for (;;) {
 1521|  1.77k|    if ((!opts.strict_json || !fieldn) && Is(terminator)) break;
  ------------------
  |  Branch (1521:10): [True: 1.21k, False: 557]
  |  Branch (1521:31): [True: 279, False: 278]
  |  Branch (1521:43): [True: 408, False: 1.08k]
  ------------------
 1522|  1.36k|    std::string name;
 1523|  1.36k|    if (is_nested_vector) {
  ------------------
  |  Branch (1523:9): [True: 0, False: 1.36k]
  ------------------
 1524|      0|      if (fieldn >= struct_def->fields.vec.size()) {
  ------------------
  |  Branch (1524:11): [True: 0, False: 0]
  ------------------
 1525|      0|        return Error("too many unnamed fields in nested array");
 1526|      0|      }
 1527|      0|      name = struct_def->fields.vec[fieldn]->name;
 1528|  1.36k|    } else {
 1529|  1.36k|      name = attribute_;
 1530|  1.36k|      if (Is(kTokenStringConstant)) {
  ------------------
  |  Branch (1530:11): [True: 446, False: 918]
  ------------------
 1531|    446|        NEXT();
  ------------------
  |  |   63|    446|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    446|  {                            \
  |  |  |  |   57|    446|    auto ce = (call);          \
  |  |  |  |   58|    446|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 445]
  |  |  |  |  ------------------
  |  |  |  |   59|    446|  }
  |  |  ------------------
  ------------------
 1532|    918|      } else {
 1533|    918|        EXPECT(opts.strict_json ? kTokenStringConstant : kTokenIdentifier);
  ------------------
  |  |   64|    918|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|    918|  {                            \
  |  |  |  |   57|  1.83k|    auto ce = (call);          \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:16): [True: 17, False: 901]
  |  |  |  |  ------------------
  |  |  |  |   58|    918|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 33, False: 885]
  |  |  |  |  ------------------
  |  |  |  |   59|    918|  }
  |  |  ------------------
  ------------------
 1534|    885|      }
 1535|  1.33k|      if (!opts.protobuf_ascii_alike || !(Is('{') || Is('['))) EXPECT(':');
  ------------------
  |  |   64|  1.33k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  1.33k|  {                            \
  |  |  |  |   57|  1.33k|    auto ce = (call);          \
  |  |  |  |   58|  1.33k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 16, False: 1.31k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.33k|  }
  |  |  ------------------
  ------------------
  |  Branch (1535:11): [True: 1.33k, False: 0]
  |  Branch (1535:43): [True: 0, False: 0]
  |  Branch (1535:54): [True: 0, False: 0]
  ------------------
 1536|  1.31k|    }
 1537|  1.31k|    ECHECK(body(name, fieldn, struct_def));
  ------------------
  |  |   56|  1.31k|  {                            \
  |  |   57|  1.31k|    auto ce = (call);          \
  |  |   58|  1.31k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 112, False: 1.20k]
  |  |  ------------------
  |  |   59|  1.31k|  }
  ------------------
 1538|  1.20k|    if (Is(terminator)) break;
  ------------------
  |  Branch (1538:9): [True: 247, False: 955]
  ------------------
 1539|    955|    ECHECK(ParseComma());
  ------------------
  |  |   56|    955|  {                            \
  |  |   57|    955|    auto ce = (call);          \
  |  |   58|    955|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 6, False: 949]
  |  |  ------------------
  |  |   59|    955|  }
  ------------------
 1540|    949|  }
 1541|    655|  NEXT();
  ------------------
  |  |   63|    655|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    655|  {                            \
  |  |  |  |   57|    655|    auto ce = (call);          \
  |  |  |  |   58|    655|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 654]
  |  |  |  |  ------------------
  |  |  |  |   59|    655|  }
  |  |  ------------------
  ------------------
 1542|    654|  if (is_nested_vector && fieldn != struct_def->fields.vec.size()) {
  ------------------
  |  Branch (1542:7): [True: 0, False: 654]
  |  Branch (1542:27): [True: 0, False: 0]
  ------------------
 1543|      0|    return Error("wrong number of unnamed fields in table vector");
 1544|      0|  }
 1545|    654|  return NoError();
 1546|    654|}
idl_parser.cpp:_ZZN11flatbuffers6Parser16SkipAnyJsonValueEvENK3$_0clERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERmPKNS_9StructDefE:
 3462|  1.31k|                                      const StructDef*) -> CheckedError {
 3463|  1.31k|                                    ECHECK(SkipAnyJsonValue());
  ------------------
  |  |   56|  1.31k|  {                            \
  |  |   57|  1.31k|    auto ce = (call);          \
  |  |   58|  1.31k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 112, False: 1.20k]
  |  |  ------------------
  |  |   59|  1.31k|  }
  ------------------
 3464|  1.20k|                                    fieldn++;
 3465|  1.20k|                                    return NoError();
 3466|  1.31k|                                  });
idl_parser.cpp:_ZN11flatbuffers6Parser21ParseVectorDelimitersIZNS0_16SkipAnyJsonValueEvE3$_1EENS_12CheckedErrorERmT_:
 1729|  1.33k|CheckedError Parser::ParseVectorDelimiters(size_t& count, F body) {
 1730|  1.33k|  EXPECT('[');
  ------------------
  |  |   64|  1.33k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  1.33k|  {                            \
  |  |  |  |   57|  1.33k|    auto ce = (call);          \
  |  |  |  |   58|  1.33k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 1.32k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.33k|  }
  |  |  ------------------
  ------------------
 1731|  11.7k|  for (;;) {
 1732|  11.7k|    if ((!opts.strict_json || !count) && Is(']')) break;
  ------------------
  |  Branch (1732:10): [True: 2.68k, False: 9.01k]
  |  Branch (1732:31): [True: 369, False: 8.64k]
  |  Branch (1732:42): [True: 306, False: 2.75k]
  ------------------
 1733|  11.4k|    ECHECK(body(count));
  ------------------
  |  |   56|  11.4k|  {                            \
  |  |   57|  11.4k|    auto ce = (call);          \
  |  |   58|  11.4k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 211, False: 11.1k]
  |  |  ------------------
  |  |   59|  11.4k|  }
  ------------------
 1734|  11.1k|    count++;
 1735|  11.1k|    if (Is(']')) break;
  ------------------
  |  Branch (1735:9): [True: 739, False: 10.4k]
  ------------------
 1736|  10.4k|    ECHECK(ParseComma());
  ------------------
  |  |   56|  10.4k|  {                            \
  |  |   57|  10.4k|    auto ce = (call);          \
  |  |   58|  10.4k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 72, False: 10.3k]
  |  |  ------------------
  |  |   59|  10.4k|  }
  ------------------
 1737|  10.3k|  }
 1738|  1.04k|  NEXT();
  ------------------
  |  |   63|  1.04k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  1.04k|  {                            \
  |  |  |  |   57|  1.04k|    auto ce = (call);          \
  |  |  |  |   58|  1.04k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 3, False: 1.04k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.04k|  }
  |  |  ------------------
  ------------------
 1739|  1.04k|  return NoError();
 1740|  1.04k|}
idl_parser.cpp:_ZZN11flatbuffers6Parser16SkipAnyJsonValueEvENK3$_1clERm:
 3471|  11.4k|          count, [&](size_t&) -> CheckedError { return SkipAnyJsonValue(); });
idl_parser.cpp:_ZN11flatbuffers6Parser20ParseTableDelimitersIZNS0_20ParseFlexBufferValueEPN11flexbuffers7BuilderEE3$_0EENS_12CheckedErrorERmPKNS_9StructDefET_:
 1509|  39.6k|                                          const StructDef* struct_def, F body) {
 1510|       |  // We allow tables both as JSON object{ .. } with field names
 1511|       |  // or vector[..] with all fields in order
 1512|  39.6k|  char terminator = '}';
 1513|  39.6k|  bool is_nested_vector = struct_def && Is('[');
  ------------------
  |  Branch (1513:27): [True: 0, False: 39.6k]
  |  Branch (1513:41): [True: 0, False: 0]
  ------------------
 1514|  39.6k|  if (is_nested_vector) {
  ------------------
  |  Branch (1514:7): [True: 0, False: 39.6k]
  ------------------
 1515|      0|    NEXT();
  ------------------
  |  |   63|      0|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|      0|  {                            \
  |  |  |  |   57|      0|    auto ce = (call);          \
  |  |  |  |   58|      0|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|  }
  |  |  ------------------
  ------------------
 1516|      0|    terminator = ']';
 1517|  39.6k|  } else {
 1518|  39.6k|    EXPECT('{');
  ------------------
  |  |   64|  39.6k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  39.6k|  {                            \
  |  |  |  |   57|  39.6k|    auto ce = (call);          \
  |  |  |  |   58|  39.6k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 39.6k]
  |  |  |  |  ------------------
  |  |  |  |   59|  39.6k|  }
  |  |  ------------------
  ------------------
 1519|  39.6k|  }
 1520|   237k|  for (;;) {
 1521|   237k|    if ((!opts.strict_json || !fieldn) && Is(terminator)) break;
  ------------------
  |  Branch (1521:10): [True: 221k, False: 16.4k]
  |  Branch (1521:31): [True: 1.38k, False: 15.0k]
  |  Branch (1521:43): [True: 1.79k, False: 220k]
  ------------------
 1522|   235k|    std::string name;
 1523|   235k|    if (is_nested_vector) {
  ------------------
  |  Branch (1523:9): [True: 0, False: 235k]
  ------------------
 1524|      0|      if (fieldn >= struct_def->fields.vec.size()) {
  ------------------
  |  Branch (1524:11): [True: 0, False: 0]
  ------------------
 1525|      0|        return Error("too many unnamed fields in nested array");
 1526|      0|      }
 1527|      0|      name = struct_def->fields.vec[fieldn]->name;
 1528|   235k|    } else {
 1529|   235k|      name = attribute_;
 1530|   235k|      if (Is(kTokenStringConstant)) {
  ------------------
  |  Branch (1530:11): [True: 33.7k, False: 202k]
  ------------------
 1531|  33.7k|        NEXT();
  ------------------
  |  |   63|  33.7k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  33.7k|  {                            \
  |  |  |  |   57|  33.7k|    auto ce = (call);          \
  |  |  |  |   58|  33.7k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 33.7k]
  |  |  |  |  ------------------
  |  |  |  |   59|  33.7k|  }
  |  |  ------------------
  ------------------
 1532|   202k|      } else {
 1533|   202k|        EXPECT(opts.strict_json ? kTokenStringConstant : kTokenIdentifier);
  ------------------
  |  |   64|   202k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|   202k|  {                            \
  |  |  |  |   57|   404k|    auto ce = (call);          \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:16): [True: 16, False: 202k]
  |  |  |  |  ------------------
  |  |  |  |   58|   202k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 48, False: 202k]
  |  |  |  |  ------------------
  |  |  |  |   59|   202k|  }
  |  |  ------------------
  ------------------
 1534|   202k|      }
 1535|   235k|      if (!opts.protobuf_ascii_alike || !(Is('{') || Is('['))) EXPECT(':');
  ------------------
  |  |   64|   235k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|   235k|  {                            \
  |  |  |  |   57|   235k|    auto ce = (call);          \
  |  |  |  |   58|   235k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 42, False: 235k]
  |  |  |  |  ------------------
  |  |  |  |   59|   235k|  }
  |  |  ------------------
  ------------------
  |  Branch (1535:11): [True: 235k, False: 0]
  |  Branch (1535:43): [True: 0, False: 0]
  |  Branch (1535:54): [True: 0, False: 0]
  ------------------
 1536|   235k|    }
 1537|   235k|    ECHECK(body(name, fieldn, struct_def));
  ------------------
  |  |   56|   235k|  {                            \
  |  |   57|   235k|    auto ce = (call);          \
  |  |   58|   235k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 561, False: 235k]
  |  |  ------------------
  |  |   59|   235k|  }
  ------------------
 1538|   235k|    if (Is(terminator)) break;
  ------------------
  |  Branch (1538:9): [True: 37.0k, False: 198k]
  ------------------
 1539|   198k|    ECHECK(ParseComma());
  ------------------
  |  |   56|   198k|  {                            \
  |  |   57|   198k|    auto ce = (call);          \
  |  |   58|   198k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 158, False: 198k]
  |  |  ------------------
  |  |   59|   198k|  }
  ------------------
 1540|   198k|  }
 1541|  38.8k|  NEXT();
  ------------------
  |  |   63|  38.8k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  38.8k|  {                            \
  |  |  |  |   57|  38.8k|    auto ce = (call);          \
  |  |  |  |   58|  38.8k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 3, False: 38.8k]
  |  |  |  |  ------------------
  |  |  |  |   59|  38.8k|  }
  |  |  ------------------
  ------------------
 1542|  38.8k|  if (is_nested_vector && fieldn != struct_def->fields.vec.size()) {
  ------------------
  |  Branch (1542:7): [True: 0, False: 38.8k]
  |  Branch (1542:27): [True: 0, False: 0]
  ------------------
 1543|      0|    return Error("wrong number of unnamed fields in table vector");
 1544|      0|  }
 1545|  38.8k|  return NoError();
 1546|  38.8k|}
idl_parser.cpp:_ZZN11flatbuffers6Parser20ParseFlexBufferValueEPN11flexbuffers7BuilderEENK3$_0clERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEERmPKNS_9StructDefE:
 3508|   235k|                                   const StructDef*) -> CheckedError {
 3509|   235k|                                 builder->Key(name);
 3510|   235k|                                 ECHECK(ParseFlexBufferValue(builder));
  ------------------
  |  |   56|   235k|  {                            \
  |  |   57|   235k|    auto ce = (call);          \
  |  |   58|   235k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 561, False: 235k]
  |  |  ------------------
  |  |   59|   235k|  }
  ------------------
 3511|   235k|                                 fieldn++;
 3512|   235k|                                 return NoError();
 3513|   235k|                               });
idl_parser.cpp:_ZN11flatbuffers6Parser21ParseVectorDelimitersIZNS0_20ParseFlexBufferValueEPN11flexbuffers7BuilderEE3$_1EENS_12CheckedErrorERmT_:
 1729|  6.34k|CheckedError Parser::ParseVectorDelimiters(size_t& count, F body) {
 1730|  6.34k|  EXPECT('[');
  ------------------
  |  |   64|  6.34k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  6.34k|  {                            \
  |  |  |  |   57|  6.34k|    auto ce = (call);          \
  |  |  |  |   58|  6.34k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 6.33k]
  |  |  |  |  ------------------
  |  |  |  |   59|  6.34k|  }
  |  |  ------------------
  ------------------
 1731|  79.0k|  for (;;) {
 1732|  79.0k|    if ((!opts.strict_json || !count) && Is(']')) break;
  ------------------
  |  Branch (1732:10): [True: 78.1k, False: 886]
  |  Branch (1732:31): [True: 266, False: 620]
  |  Branch (1732:42): [True: 2.09k, False: 76.3k]
  ------------------
 1733|  76.9k|    ECHECK(body(count));
  ------------------
  |  |   56|  76.9k|  {                            \
  |  |   57|  76.9k|    auto ce = (call);          \
  |  |   58|  76.9k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 493, False: 76.4k]
  |  |  ------------------
  |  |   59|  76.9k|  }
  ------------------
 1734|  76.4k|    count++;
 1735|  76.4k|    if (Is(']')) break;
  ------------------
  |  Branch (1735:9): [True: 3.42k, False: 73.0k]
  ------------------
 1736|  73.0k|    ECHECK(ParseComma());
  ------------------
  |  |   56|  73.0k|  {                            \
  |  |   57|  73.0k|    auto ce = (call);          \
  |  |   58|  73.0k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 334, False: 72.6k]
  |  |  ------------------
  |  |   59|  73.0k|  }
  ------------------
 1737|  72.6k|  }
 1738|  5.51k|  NEXT();
  ------------------
  |  |   63|  5.51k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  5.51k|  {                            \
  |  |  |  |   57|  5.51k|    auto ce = (call);          \
  |  |  |  |   58|  5.51k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 3, False: 5.50k]
  |  |  |  |  ------------------
  |  |  |  |   59|  5.51k|  }
  |  |  ------------------
  ------------------
 1739|  5.50k|  return NoError();
 1740|  5.51k|}
idl_parser.cpp:_ZZN11flatbuffers6Parser20ParseFlexBufferValueEPN11flexbuffers7BuilderEENK3$_1clERm:
   57|  76.9k|    auto ce = (call);          \
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_113AssignIndicesINS_9StructDefEEEvRKNSt3__16vectorIPT_NS3_9allocatorIS6_EEEE:
  377|  5.09k|static void AssignIndices(const std::vector<T*>& defvec) {
  378|       |  // Pre-sort these vectors, such that we can set the correct indices for them.
  379|  5.09k|  auto vec = defvec;
  380|  5.09k|  std::sort(vec.begin(), vec.end(), compareName<T>);
  381|  60.3k|  for (int i = 0; i < static_cast<int>(vec.size()); i++) vec[i]->index = i;
  ------------------
  |  Branch (381:19): [True: 55.2k, False: 5.09k]
  ------------------
  382|  5.09k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111compareNameINS_9StructDefEEEbPKT_S5_:
  371|   430k|static bool compareName(const T* a, const T* b) {
  372|   430k|  return a->defined_namespace->GetFullyQualifiedName(a->name) <
  373|   430k|         b->defined_namespace->GetFullyQualifiedName(b->name);
  374|   430k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_113AssignIndicesINS_7EnumDefEEEvRKNSt3__16vectorIPT_NS3_9allocatorIS6_EEEE:
  377|  5.09k|static void AssignIndices(const std::vector<T*>& defvec) {
  378|       |  // Pre-sort these vectors, such that we can set the correct indices for them.
  379|  5.09k|  auto vec = defvec;
  380|  5.09k|  std::sort(vec.begin(), vec.end(), compareName<T>);
  381|  84.1k|  for (int i = 0; i < static_cast<int>(vec.size()); i++) vec[i]->index = i;
  ------------------
  |  Branch (381:19): [True: 79.0k, False: 5.09k]
  ------------------
  382|  5.09k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111compareNameINS_7EnumDefEEEbPKT_S5_:
  371|   683k|static bool compareName(const T* a, const T* b) {
  372|   683k|  return a->defined_namespace->GetFullyQualifiedName(a->name) <
  373|   683k|         b->defined_namespace->GetFullyQualifiedName(b->name);
  374|   683k|}

_ZN11flatbuffers8LoadFileEPKcbPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  217|    129|bool LoadFile(const char* name, bool binary, std::string* buf) {
  218|    129|  FLATBUFFERS_ASSERT(g_load_file_function);
  219|    129|  return g_load_file_function(name, binary, buf);
  220|    129|}
_ZN11flatbuffers10FileExistsEPKc:
  222|    146|bool FileExists(const char* name) {
  223|    146|  FLATBUFFERS_ASSERT(g_file_exists_function);
  224|    146|  return g_file_exists_function(name);
  225|    146|}
_ZN11flatbuffers9DirExistsEPKc:
  227|    129|bool DirExists(const char* name) {
  228|       |  // clang-format off
  229|       |
  230|       |  #ifdef _WIN32
  231|       |    #define flatbuffers_stat _stat
  232|       |    #define FLATBUFFERS_S_IFDIR _S_IFDIR
  233|       |  #else
  234|    129|    #define flatbuffers_stat stat
  235|    129|    #define FLATBUFFERS_S_IFDIR S_IFDIR
  236|    129|  #endif
  237|       |  // clang-format on
  238|    129|  struct flatbuffers_stat file_info;
  239|    129|  if (flatbuffers_stat(name, &file_info) != 0) return false;
  ------------------
  |  |  234|    129|    #define flatbuffers_stat stat
  ------------------
  |  Branch (239:7): [True: 106, False: 23]
  ------------------
  240|     23|  return (file_info.st_mode & FLATBUFFERS_S_IFDIR) != 0;
  ------------------
  |  |  235|     23|    #define FLATBUFFERS_S_IFDIR S_IFDIR
  ------------------
  241|    129|}
_ZN11flatbuffers9StripPathERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE:
  281|    143|std::string StripPath(const std::string& filepath) {
  282|    143|  size_t i = filepath.find_last_of(PathSeparatorSet);
  283|    143|  return i != std::string::npos ? filepath.substr(i + 1) : filepath;
  ------------------
  |  Branch (283:10): [True: 109, False: 34]
  ------------------
  284|    143|}
_ZN11flatbuffers18ConCatPathFileNameERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEES8_:
  301|    132|                               const std::string& filename) {
  302|    132|  std::string filepath = path;
  303|    132|  if (filepath.length()) {
  ------------------
  |  Branch (303:7): [True: 0, False: 132]
  ------------------
  304|      0|    char& filepath_last_character = filepath.back();
  305|      0|    if (filepath_last_character == kPathSeparatorWindows) {
  ------------------
  |  Branch (305:9): [True: 0, False: 0]
  ------------------
  306|      0|      filepath_last_character = kPathSeparator;
  307|      0|    } else if (filepath_last_character != kPathSeparator) {
  ------------------
  |  Branch (307:16): [True: 0, False: 0]
  ------------------
  308|      0|      filepath += kPathSeparator;
  309|      0|    }
  310|      0|  }
  311|    132|  filepath += filename;
  312|       |  // Ignore './' at the start of filepath.
  313|    132|  if (filepath[0] == '.' && filepath[1] == kPathSeparator) {
  ------------------
  |  Branch (313:7): [True: 22, False: 110]
  |  Branch (313:29): [True: 2, False: 20]
  ------------------
  314|      2|    filepath.erase(0, 2);
  315|      2|  }
  316|    132|  return filepath;
  317|    132|}
_ZN11flatbuffers9PosixPathEPKc:
  319|    162|std::string PosixPath(const char* path) {
  320|    162|  std::string p = path;
  321|    162|  std::replace(p.begin(), p.end(), '\\', '/');
  322|    162|  return p;
  323|    162|}
_ZN11flatbuffers12AbsolutePathERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE:
  347|     14|std::string AbsolutePath(const std::string& filepath) {
  348|       |  // clang-format off
  349|       |
  350|       |  #ifdef FLATBUFFERS_NO_ABSOLUTE_PATH_RESOLUTION
  351|       |    return filepath;
  352|       |  #else
  353|       |    #if defined(_WIN32) || defined(__MINGW32__) || defined(__MINGW64__) || defined(__CYGWIN__)
  354|       |      char abs_path[MAX_PATH];
  355|       |      return GetFullPathNameA(filepath.c_str(), MAX_PATH, abs_path, nullptr)
  356|       |    #else
  357|     14|      char *abs_path_temp = realpath(filepath.c_str(), nullptr);
  358|     14|      bool success = abs_path_temp != nullptr;
  359|     14|      std::string abs_path;
  360|     14|      if(success) {
  ------------------
  |  Branch (360:10): [True: 14, False: 0]
  ------------------
  361|     14|        abs_path = abs_path_temp;
  362|     14|        free(abs_path_temp);
  363|     14|      }
  364|     14|      return success
  ------------------
  |  Branch (364:14): [True: 14, False: 0]
  ------------------
  365|     14|    #endif
  366|     14|      ? abs_path
  367|     14|      : filepath;
  368|     14|  #endif // FLATBUFFERS_NO_ABSOLUTE_PATH_RESOLUTION
  369|       |  // clang-format on
  370|     14|}
_ZN11flatbuffers13ClassicLocaleC2Ev:
  416|      2|    : locale_(newlocale(LC_ALL, "C", nullptr)) {}
_ZN11flatbuffers23ReadEnvironmentVariableEPKcPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  437|      2|bool ReadEnvironmentVariable(const char* var_name, std::string* _value) {
  438|       |#ifdef _MSC_VER
  439|       |  __pragma(warning(disable : 4996));  // _CRT_SECURE_NO_WARNINGS
  440|       |#endif
  441|      2|  auto env_str = std::getenv(var_name);
  442|      2|  if (!env_str) return false;
  ------------------
  |  Branch (442:7): [True: 2, False: 0]
  ------------------
  443|      0|  if (_value) *_value = std::string(env_str);
  ------------------
  |  Branch (443:7): [True: 0, False: 0]
  ------------------
  444|      0|  return true;
  445|      2|}
util.cpp:_ZN11flatbuffers12_GLOBAL__N_111LoadFileRawEPKcbPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
   66|    129|static bool LoadFileRaw(const char* name, bool binary, std::string* buf) {
   67|    129|  if (DirExists(name)) return false;
  ------------------
  |  Branch (67:7): [True: 9, False: 120]
  ------------------
   68|    120|  std::ifstream ifs(name, binary ? std::ifstream::binary : std::ifstream::in);
  ------------------
  |  Branch (68:27): [True: 120, False: 0]
  ------------------
   69|    120|  if (!ifs.is_open()) return false;
  ------------------
  |  Branch (69:7): [True: 106, False: 14]
  ------------------
   70|     14|  if (binary) {
  ------------------
  |  Branch (70:7): [True: 14, False: 0]
  ------------------
   71|       |    // The fastest way to read a file into a string.
   72|     14|    ifs.seekg(0, std::ios::end);
   73|     14|    auto size = ifs.tellg();
   74|     14|    (*buf).resize(static_cast<size_t>(size));
   75|     14|    ifs.seekg(0, std::ios::beg);
   76|     14|    ifs.read(&(*buf)[0], (*buf).size());
   77|     14|  } else {
   78|       |    // This is slower, but works correctly on all platforms for text files.
   79|      0|    std::ostringstream oss;
   80|      0|    oss << ifs.rdbuf();
   81|      0|    *buf = oss.str();
   82|      0|  }
   83|     14|  return !ifs.bad();
   84|    120|}
util.cpp:_ZN11flatbuffers12_GLOBAL__N_113FileExistsRawEPKc:
   61|    146|static bool FileExistsRaw(const char* name) {
   62|    146|  std::ifstream ifs(name);
   63|    146|  return ifs.good();
   64|    146|}

LLVMFuzzerTestOneInput:
   23|  27.6k|extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
   24|       |  // Reserve one byte for Parser flags and one byte for repetition counter.
   25|  27.6k|  if (size < 3) return 0;
  ------------------
  |  Branch (25:7): [True: 2, False: 27.6k]
  ------------------
   26|  27.6k|  const uint8_t flags = data[0];
   27|  27.6k|  (void)data[1];  //  reserved
   28|  27.6k|  data += 2;
   29|  27.6k|  size -= 2;  // bypass
   30|       |
   31|  27.6k|  const std::string original(reinterpret_cast<const char*>(data), size);
   32|  27.6k|  auto input = std::string(original.c_str());  // until '\0'
   33|  27.6k|  if (input.size() < kMinInputLength || input.size() > kMaxInputLength)
  ------------------
  |  Branch (33:7): [True: 1, False: 27.6k]
  |  Branch (33:41): [True: 16, False: 27.6k]
  ------------------
   34|     17|    return 0;
   35|       |
   36|  27.6k|  flatbuffers::IDLOptions opts;
   37|  27.6k|  opts.strict_json = (flags & flags_strict_json);
   38|  27.6k|  opts.skip_unexpected_fields_in_json =
   39|  27.6k|      (flags & flags_skip_unexpected_fields_in_json);
   40|  27.6k|  opts.allow_non_utf8 = (flags & flags_allow_non_utf8);
   41|       |
   42|  27.6k|  flatbuffers::Parser parser(opts);
   43|       |
   44|       |  // Guarantee 0-termination in the input.
   45|  27.6k|  auto parse_input = input.c_str();
   46|       |
   47|       |  // Check Parser.
   48|  27.6k|  auto result = parser.Parse(parse_input);
   49|  27.6k|  if (result) {
  ------------------
  |  Branch (49:7): [True: 5.09k, False: 22.5k]
  ------------------
   50|  5.09k|    parser.Serialize();
   51|  5.09k|    const uint8_t* buf = parser.builder_.GetBufferPointer();
   52|  5.09k|    flatbuffers::Verifier verifier(buf, parser.builder_.GetSize());
   53|  5.09k|    TEST_EQ(true, reflection::VerifySchemaBuffer(verifier));
  ------------------
  |  |   19|  5.09k|#define TEST_EQ(exp, val) TestEq(exp, val, "'" #exp "' != '" #val "'", __FILE__, __LINE__, "")
  ------------------
   54|       |
   55|  5.09k|    auto root = flatbuffers::GetRoot<flatbuffers::Table>(buf);
   56|  5.09k|    if (verifier.VerifyTableStart(buf) && root->VerifyTableStart(verifier)) {
  ------------------
  |  Branch (56:9): [True: 0, False: 5.09k]
  |  Branch (56:43): [True: 0, False: 0]
  ------------------
   57|      0|      if (parser.root_struct_def_) {
  ------------------
  |  Branch (57:11): [True: 0, False: 0]
  ------------------
   58|      0|        std::string json_output;
   59|      0|        flatbuffers::GenText(parser, buf, &json_output);
   60|      0|      }
   61|      0|    }
   62|  5.09k|  }
   63|  27.6k|  return 0;
   64|  27.6k|}

_ZN15OneTimeTestInitC2Ev:
   27|      2|  OneTimeTestInit() : has_locale_(false) {
   28|       |    // Fuzzer test should be independent of the test engine implementation.
   29|       |    // This hook will terminate test if TEST_EQ/TEST_ASSERT asserted.
   30|      2|    InitTestEngine(OneTimeTestInit::TestFailListener);
   31|       |
   32|       |    // Read a locale for the test.
   33|      2|    if (flatbuffers::ReadEnvironmentVariable("FLATBUFFERS_TEST_LOCALE",
  ------------------
  |  Branch (33:9): [True: 0, False: 2]
  ------------------
   34|      2|                                             &test_locale_)) {
   35|      0|      TEST_OUTPUT_LINE("The environment variable FLATBUFFERS_TEST_LOCALE=%s",
  ------------------
  |  |   16|      0|      do { printf(__VA_ARGS__); printf("\n"); } while(!flatbuffers::IsConstTrue(true))
  |  |  ------------------
  |  |  |  Branch (16:55): [Folded, False: 0]
  |  |  ------------------
  ------------------
   36|      0|                       test_locale_.c_str());
   37|      0|      test_locale_ = flatbuffers::RemoveStringQuotes(test_locale_);
   38|      0|      has_locale_ = true;
   39|      0|    }
   40|      2|  }

_Z14InitTestEnginePFbPKcS0_S0_S0_iS0_E:
   39|      2|void InitTestEngine(TestFailEventListener listener) {
   40|      2|  testing_fails = 0;
   41|       |  // Disable stdout buffering to prevent information lost on assertion or core
   42|       |  // dump.
   43|      2|  setvbuf(stdout, nullptr, _IONBF, 0);
   44|      2|  setvbuf(stderr, nullptr, _IONBF, 0);
   45|       |
   46|       |  // clang-format off
   47|       |
   48|       |  #if defined(FLATBUFFERS_MEMORY_LEAK_TRACKING_MSVC)
   49|       |    // For more thorough checking:
   50|       |    // _CRTDBG_DELAY_FREE_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF
   51|       |    auto flags = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
   52|       |    _CrtSetDbgFlag(flags | _CRTDBG_ALLOC_MEM_DF);
   53|       |  #endif
   54|       |  // clang-format on
   55|       |
   56|      2|  fail_listener_ = listener;
   57|      2|}

_Z6TestEqIbbEvT_T0_PKcS3_iS3_:
   94|  5.09k|            const char* func) {
   95|  5.09k|  if (static_cast<U>(expval) != val) {
  ------------------
  |  Branch (95:7): [True: 0, False: 5.09k]
  ------------------
   96|      0|    TestFail(flatbuffers::NumToString(scalar_as_underlying(expval)).c_str(),
   97|      0|             flatbuffers::NumToString(scalar_as_underlying(val)).c_str(), exp,
   98|      0|             file, line, func);
   99|      0|  }
  100|  5.09k|}

