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

_ZN11flatbuffers11IsConstTrueIbEEbT_:
  295|  6.58k|  template<typename T> FLATBUFFERS_CONSTEXPR inline bool IsConstTrue(T t) {
  296|  6.58k|    return !!t;
  297|  6.58k|  }
_ZN11flatbuffers12EndianScalarIjEET_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|}
_ZN11flatbuffers10ReadScalarIjEET_PKv:
  427|   163M|T ReadScalar(const void *p) {
  428|   163M|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|   163M|}
_ZN11flatbuffers10ReadScalarIiEET_PKv:
  427|   167M|T ReadScalar(const void *p) {
  428|   167M|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|   167M|}
_ZN11flatbuffers12EndianScalarIiEET_S1_:
  416|   168M|template<typename T> T EndianScalar(T t) {
  417|   168M|  #if FLATBUFFERS_LITTLEENDIAN
  418|   168M|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|   168M|}
_ZN11flatbuffers10ReadScalarItEET_PKv:
  427|   183M|T ReadScalar(const void *p) {
  428|   183M|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|   183M|}
_ZN11flatbuffers12EndianScalarItEET_S1_:
  416|   186M|template<typename T> T EndianScalar(T t) {
  417|   186M|  #if FLATBUFFERS_LITTLEENDIAN
  418|   186M|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|   186M|}
_ZN11flatbuffers27VerifyAlignmentRequirementsEmm:
  360|  15.9k|inline bool VerifyAlignmentRequirements(size_t align, size_t min_align = 1) {
  361|  15.9k|  return (min_align <= align) && (align <= (FLATBUFFERS_MAX_ALIGNMENT)) &&
  ------------------
  |  |  354|  15.9k|  #define FLATBUFFERS_MAX_ALIGNMENT 32
  ------------------
  |  Branch (361:10): [True: 15.9k, False: 1]
  |  Branch (361:34): [True: 15.9k, False: 4]
  ------------------
  362|  15.9k|         (align & (align - 1)) == 0;  // must be power of 2
  ------------------
  |  Branch (362:10): [True: 15.9k, False: 3]
  ------------------
  363|  15.9k|}
_ZN11flatbuffers12PaddingBytesEmm:
  458|  6.37M|inline size_t PaddingBytes(size_t buf_size, size_t scalar_size) {
  459|  6.37M|  return ((~buf_size) + 1) & (scalar_size - 1);
  460|  6.37M|}
_ZN11flatbuffers10ReadScalarImEET_PKv:
  427|   268k|T ReadScalar(const void *p) {
  428|   268k|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|   268k|}
_ZN11flatbuffers12EndianScalarImEET_S1_:
  416|   771k|template<typename T> T EndianScalar(T t) {
  417|   771k|  #if FLATBUFFERS_LITTLEENDIAN
  418|   771k|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|   771k|}
_ZN11flatbuffers10ReadScalarIhEET_PKv:
  427|  27.5k|T ReadScalar(const void *p) {
  428|  27.5k|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|  27.5k|}
_ZN11flatbuffers12EndianScalarIhEET_S1_:
  416|   178k|template<typename T> T EndianScalar(T t) {
  417|   178k|  #if FLATBUFFERS_LITTLEENDIAN
  418|   178k|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|   178k|}
_ZN11flatbuffers10ReadScalarIaEET_PKv:
  427|  4.87k|T ReadScalar(const void *p) {
  428|  4.87k|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|  4.87k|}
_ZN11flatbuffers12EndianScalarIaEET_S1_:
  416|   141k|template<typename T> T EndianScalar(T t) {
  417|   141k|  #if FLATBUFFERS_LITTLEENDIAN
  418|   141k|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|   141k|}
_ZN11flatbuffers10ReadScalarIsEET_PKv:
  427|  1.25M|T ReadScalar(const void *p) {
  428|  1.25M|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|  1.25M|}
_ZN11flatbuffers12EndianScalarIsEET_S1_:
  416|  1.26M|template<typename T> T EndianScalar(T t) {
  417|  1.26M|  #if FLATBUFFERS_LITTLEENDIAN
  418|  1.26M|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|  1.26M|}
_ZN11flatbuffers10ReadScalarIlEET_PKv:
  427|  54.1k|T ReadScalar(const void *p) {
  428|  54.1k|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|  54.1k|}
_ZN11flatbuffers12EndianScalarIlEET_S1_:
  416|   344k|template<typename T> T EndianScalar(T t) {
  417|   344k|  #if FLATBUFFERS_LITTLEENDIAN
  418|   344k|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|   344k|}
_ZN11flatbuffers10ReadScalarIfEET_PKv:
  427|  12.0k|T ReadScalar(const void *p) {
  428|  12.0k|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|  12.0k|}
_ZN11flatbuffers12EndianScalarIfEET_S1_:
  416|  24.1k|template<typename T> T EndianScalar(T t) {
  417|  24.1k|  #if FLATBUFFERS_LITTLEENDIAN
  418|  24.1k|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|  24.1k|}
_ZN11flatbuffers10ReadScalarIdEET_PKv:
  427|  8.26k|T ReadScalar(const void *p) {
  428|  8.26k|  return EndianScalar(*reinterpret_cast<const T *>(p));
  429|  8.26k|}
_ZN11flatbuffers12EndianScalarIdEET_S1_:
  416|  51.6k|template<typename T> T EndianScalar(T t) {
  417|  51.6k|  #if FLATBUFFERS_LITTLEENDIAN
  418|  51.6k|    return t;
  419|       |  #else
  420|       |    return EndianSwap(t);
  421|       |  #endif
  422|  51.6k|}
_ZN11flatbuffers11IsTheSameAsIaEEbT_S1_:
  469|   472k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }
_ZN11flatbuffers11IsTheSameAsIiEEbT_S1_:
  469|   349k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }
_ZN11flatbuffers11IsTheSameAsItEEbT_S1_:
  469|   353k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }
_ZN11flatbuffers11IsTheSameAsIjEEbT_S1_:
  469|  1.33M|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|   661k|void WriteScalar(void *p, T t) {
  442|   661k|  *reinterpret_cast<T *>(p) = EndianScalar(t);
  443|   661k|}
_ZN11flatbuffers11IsTheSameAsIlEEbT_S1_:
  469|   161k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }
_ZN11flatbuffers11IsTheSameAsIhEEbT_S1_:
  469|   343k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }
_ZN11flatbuffers11IsTheSameAsIdEEbT_S1_:
  469|  44.6k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }
_ZN11flatbuffers11IsTheSameAsImEEbT_S1_:
  469|  20.4k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }
_ZN11flatbuffers11IsTheSameAsIsEEbT_S1_:
  469|  4.61k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }
_ZN11flatbuffers11IsTheSameAsIfEEbT_S1_:
  469|  8.94k|template<typename T> inline bool IsTheSameAs(T e, T def) { return e == def; }

_ZN11flatbuffers7AlignOfImEEmv:
   77|  34.1k|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|  34.1k|    #ifndef alignof
   83|  34.1k|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|  34.1k|  #endif
   88|       |  // clang-format on
   89|  34.1k|}
_ZN11flatbuffers11EndianCheckEv:
   68|  39.3k|inline void EndianCheck() {
   69|  39.3k|  int endiantest = 1;
   70|       |  // If this fails, see FLATBUFFERS_LITTLEENDIAN above.
   71|  39.3k|  FLATBUFFERS_ASSERT(*reinterpret_cast<char*>(&endiantest) ==
   72|  39.3k|                     FLATBUFFERS_LITTLEENDIAN);
   73|  39.3k|  (void)endiantest;
   74|  39.3k|}
_ZN11flatbuffers7GetRootINS_5TableEEEPKT_PKv:
  214|  5.20k|const T* GetRoot(const void* buf) {
  215|  5.20k|  return GetMutableRoot<T>(const_cast<void*>(buf));
  216|  5.20k|}
_ZN11flatbuffers14GetMutableRootINS_5TableEEEPT_Pv:
  201|  5.20k|T* GetMutableRoot(void* buf) {
  202|  5.20k|  if (!buf) return nullptr;
  ------------------
  |  Branch (202:7): [True: 0, False: 5.20k]
  ------------------
  203|  5.20k|  EndianCheck();
  204|  5.20k|  return reinterpret_cast<T*>(reinterpret_cast<uint8_t*>(buf) +
  205|  5.20k|                              EndianScalar(*reinterpret_cast<uoffset_t*>(buf)));
  206|  5.20k|}
_ZN11flatbuffers19BufferHasIdentifierEPKvPKcb:
  193|  5.20k|                                bool size_prefixed = false) {
  194|  5.20k|  return strncmp(GetBufferIdentifier(buf, size_prefixed), identifier,
  195|  5.20k|                 flatbuffers::kFileIdentifierLength) == 0;
  196|  5.20k|}
_ZN11flatbuffers19GetBufferIdentifierEPKvb:
  186|  5.20k|                                       bool size_prefixed = false) {
  187|  5.20k|  return reinterpret_cast<const char*>(buf) +
  188|  5.20k|         ((size_prefixed) ? 2 * sizeof(uoffset_t) : sizeof(uoffset_t));
  ------------------
  |  Branch (188:11): [True: 0, False: 5.20k]
  ------------------
  189|  5.20k|}
_ZN11flatbuffers14IndirectHelperINS_6OffsetIN10reflection6ObjectEEEvE4ReadEPKhj:
  130|  55.3k|  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.3k|    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.3k|    return reinterpret_cast<return_type>(
  138|  55.3k|        offset_location + ReadScalar<offset_type>(offset_location));
  139|  55.3k|  }
_ZN11flatbuffers14IndirectHelperINS_6OffsetIN10reflection5FieldEEEvE4ReadEPKhj:
  130|  40.1k|  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.1k|    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.1k|    return reinterpret_cast<return_type>(
  138|  40.1k|        offset_location + ReadScalar<offset_type>(offset_location));
  139|  40.1k|  }
_ZN11flatbuffers14IndirectHelperINS_6OffsetIN10reflection8KeyValueEEEvE4ReadEPKhj:
  130|    776|  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|    776|    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|    776|    return reinterpret_cast<return_type>(
  138|    776|        offset_location + ReadScalar<offset_type>(offset_location));
  139|    776|  }
_ZN11flatbuffers14IndirectHelperINS_6OffsetIN10reflection4EnumEEEvE4ReadEPKhj:
  130|  80.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|  80.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|  80.2k|    return reinterpret_cast<return_type>(
  138|  80.2k|        offset_location + ReadScalar<offset_type>(offset_location));
  139|  80.2k|  }
_ZN11flatbuffers14IndirectHelperINS_6OffsetIN10reflection7EnumValEEEvE4ReadEPKhj:
  130|   114k|  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|   114k|    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|   114k|    return reinterpret_cast<return_type>(
  138|   114k|        offset_location + ReadScalar<offset_type>(offset_location));
  139|   114k|  }
_ZN11flatbuffers14IndirectHelperINS_6OffsetIN10reflection7ServiceEEEvE4ReadEPKhj:
  130|    793|  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|    793|    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|    793|    return reinterpret_cast<return_type>(
  138|    793|        offset_location + ReadScalar<offset_type>(offset_location));
  139|    793|  }
_ZN11flatbuffers14IndirectHelperINS_6OffsetIN10reflection7RPCCallEEEvE4ReadEPKhj:
  130|  1.64k|  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.64k|    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.64k|    return reinterpret_cast<return_type>(
  138|  1.64k|        offset_location + ReadScalar<offset_type>(offset_location));
  139|  1.64k|  }
_ZN11flatbuffers7AlignOfIjEEmv:
   77|   642k|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|   642k|    #ifndef alignof
   83|   642k|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|   642k|  #endif
   88|       |  // clang-format on
   89|   642k|}
_ZNK11flatbuffers6OffsetINS_6StringEE6IsNullEv:
   38|   440k|  bool IsNull() const { return !o; }
_ZNK11flatbuffers6OffsetIN10reflection4TypeEE6IsNullEv:
   38|   233k|  bool IsNull() const { return !o; }
_ZNK11flatbuffers6OffsetINS_6VectorINS0_INS_6StringEEEjEEE6IsNullEv:
   38|   291k|  bool IsNull() const { return !o; }
_ZNK11flatbuffers6OffsetINS_6VectorINS0_IN10reflection8KeyValueEEEjEEE6IsNullEv:
   38|   291k|  bool IsNull() const { return !o; }
_ZN11flatbuffers7AlignOfINS_6OffsetIN10reflection8KeyValueEEEEEmv:
   77|    776|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|    776|    #ifndef alignof
   83|    776|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|    776|  #endif
   88|       |  // clang-format on
   89|    776|}
_ZNK11flatbuffers6OffsetINS_6VectorINS0_IN10reflection7EnumValEEEjEEE6IsNullEv:
   38|  80.2k|  bool IsNull() const { return !o; }
_ZN11flatbuffers7AlignOfINS_6OffsetIN10reflection7EnumValEEEEEmv:
   77|  80.2k|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|  80.2k|    #ifndef alignof
   83|  80.2k|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|  80.2k|  #endif
   88|       |  // clang-format on
   89|  80.2k|}
_ZNK11flatbuffers6OffsetINS_6VectorINS0_IN10reflection5FieldEEEjEEE6IsNullEv:
   38|  55.3k|  bool IsNull() const { return !o; }
_ZN11flatbuffers7AlignOfINS_6OffsetIN10reflection5FieldEEEEEmv:
   77|  55.3k|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|  55.3k|    #ifndef alignof
   83|  55.3k|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|  55.3k|  #endif
   88|       |  // clang-format on
   89|  55.3k|}
_ZNK11flatbuffers6OffsetIN10reflection6ObjectEE6IsNullEv:
   38|  8.49k|  bool IsNull() const { return !o; }
_ZNK11flatbuffers6OffsetINS_6VectorINS0_IN10reflection7RPCCallEEEjEEE6IsNullEv:
   38|    793|  bool IsNull() const { return !o; }
_ZN11flatbuffers7AlignOfINS_6OffsetIN10reflection7RPCCallEEEEEmv:
   77|    793|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|    793|    #ifndef alignof
   83|    793|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|    793|  #endif
   88|       |  // clang-format on
   89|    793|}
_ZNK11flatbuffers6OffsetINS_6VectorINS0_IN10reflection6ObjectEEEjEEE6IsNullEv:
   38|  5.20k|  bool IsNull() const { return !o; }
_ZNK11flatbuffers6OffsetINS_6VectorINS0_IN10reflection4EnumEEEjEEE6IsNullEv:
   38|  5.20k|  bool IsNull() const { return !o; }
_ZNK11flatbuffers6OffsetINS_6VectorINS0_IN10reflection7ServiceEEEjEEE6IsNullEv:
   38|  5.20k|  bool IsNull() const { return !o; }
_ZNK11flatbuffers6OffsetINS_6VectorINS0_IN10reflection10SchemaFileEEEjEEE6IsNullEv:
   38|  5.20k|  bool IsNull() const { return !o; }
_ZN11flatbuffers7AlignOfINS_6OffsetIN10reflection6ObjectEEEEEmv:
   77|  5.20k|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|  5.20k|    #ifndef alignof
   83|  5.20k|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|  5.20k|  #endif
   88|       |  // clang-format on
   89|  5.20k|}
_ZN11flatbuffers7AlignOfINS_6OffsetIN10reflection4EnumEEEEEmv:
   77|  5.20k|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|  5.20k|    #ifndef alignof
   83|  5.20k|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|  5.20k|  #endif
   88|       |  // clang-format on
   89|  5.20k|}
_ZN11flatbuffers7AlignOfINS_6OffsetIN10reflection7ServiceEEEEEmv:
   77|  5.20k|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|  5.20k|    #ifndef alignof
   83|  5.20k|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|  5.20k|  #endif
   88|       |  // clang-format on
   89|  5.20k|}
_ZN11flatbuffers8Offset64IvEC2Em:
   54|  10.9k|  Offset64(const offset_type offset) : o(offset) {}
_ZN11flatbuffers6OffsetIvEC2Ej:
   36|   116k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection6SchemaEEC2Ej:
   36|  5.20k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection5FieldEEC2Ej:
   36|  38.9k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection7RPCCallEEC2Ej:
   36|  1.64k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection7ServiceEEC2Ej:
   36|    793|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection4EnumEEC2Ej:
   36|  80.2k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection8KeyValueEEC2Ej:
   36|    776|  Offset(const offset_type _o) : o(_o) {}
idl_parser.cpp:_ZN11flatbuffersL14StringLessThanEPKcjS1_j:
   94|  2.42M|                                  const char* b_data, uoffset_t b_size) {
   95|  2.42M|  const auto cmp = memcmp(a_data, b_data, (std::min)(a_size, b_size));
   96|  2.42M|  return cmp == 0 ? a_size < b_size : cmp < 0;
  ------------------
  |  Branch (96:10): [True: 340k, False: 2.08M]
  ------------------
   97|  2.42M|}
_ZN11flatbuffers6OffsetINS_6VectorINS0_IN10reflection8KeyValueEEEjEEEC2Ej:
   36|   291k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection7EnumValEEC2Ej:
   36|   114k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection4TypeEEC2Ej:
   36|   233k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_6VectorINS0_INS_6StringEEEjEEEC2Ej:
   36|   291k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetIN10reflection6ObjectEEC2Ej:
   36|  63.8k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_6VectorINS0_IN10reflection5FieldEEEjEEEC2Ej:
   36|  55.3k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_6VectorINS0_IN10reflection6ObjectEEEjEEEC2Ej:
   36|  5.20k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_6VectorINS0_IN10reflection4EnumEEEjEEEC2Ej:
   36|  5.20k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_6VectorINS0_IN10reflection7ServiceEEEjEEEC2Ej:
   36|  5.20k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_6StringEEC2Ej:
   36|   445k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers14IndirectHelperIhvE4ReadEPKhm:
  113|    156|  static return_type Read(const uint8_t* p, const size_t i) {
  114|    156|    return EndianScalar((reinterpret_cast<const T*>(p))[i]);
  115|    156|  }
_ZN11flatbuffers8Offset64IvEC2Ev:
   53|  10.9k|  Offset64() : o(0) {}
_ZNK11flatbuffers8Offset64IvE6IsNullEv:
   56|  10.9k|  bool IsNull() const { return !o; }
_ZN11flatbuffers6OffsetIvEC2Ev:
   35|   116k|  Offset() : o(0) {}
_ZNK11flatbuffers6OffsetIvE6IsNullEv:
   38|  33.4k|  bool IsNull() const { return !o; }
_ZN11flatbuffers7AlignOfIhEEmv:
   77|  4.20k|FLATBUFFERS_CONSTEXPR size_t AlignOf() {
   78|       |  // clang-format off
   79|       |  #ifdef _MSC_VER
   80|       |    return __alignof(T);
   81|       |  #else
   82|  4.20k|    #ifndef alignof
   83|  4.20k|      return __alignof__(T);
   84|       |    #else
   85|       |      return alignof(T);
   86|       |    #endif
   87|  4.20k|  #endif
   88|       |  // clang-format on
   89|  4.20k|}
_ZN11flatbuffers6OffsetINS_6VectorIhjEEEC2Ej:
   36|  4.20k|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_5TableEEC2Ej:
   36|    258|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_6VectorINS0_IN10reflection10SchemaFileEEEjEEEC2Ev:
   35|  5.20k|  Offset() : o(0) {}
_ZN11flatbuffers6OffsetINS_6VectorINS0_IN10reflection7RPCCallEEEjEEEC2Ej:
   36|    793|  Offset(const offset_type _o) : o(_o) {}
_ZN11flatbuffers6OffsetINS_6VectorINS0_IN10reflection7EnumValEEEjEEEC2Ej:
   36|  80.2k|  Offset(const offset_type _o) : o(_o) {}

_ZN11flatbuffers10DeallocateEPNS_9AllocatorEPhm:
   46|  15.7k|inline void Deallocate(Allocator* allocator, uint8_t* p, size_t size) {
   47|  15.7k|  if (allocator)
  ------------------
  |  Branch (47:7): [True: 0, False: 15.7k]
  ------------------
   48|      0|    allocator->deallocate(p, size);
   49|  15.7k|  else
   50|  15.7k|    DefaultAllocator().deallocate(p, size);
   51|  15.7k|}
_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.7k|inline uint8_t* Allocate(Allocator* allocator, size_t size) {
   42|  15.7k|  return allocator ? allocator->allocate(size)
  ------------------
  |  Branch (42:10): [True: 0, False: 15.7k]
  ------------------
   43|  15.7k|                   : DefaultAllocator().allocate(size);
   44|  15.7k|}
_ZN11flatbuffers18ReallocateDownwardEPNS_9AllocatorEPhmmmm:
   55|  12.5k|                                   size_t in_use_back, size_t in_use_front) {
   56|  12.5k|  return allocator ? allocator->reallocate_downward(old_p, old_size, new_size,
  ------------------
  |  Branch (56:10): [True: 0, False: 12.5k]
  ------------------
   57|      0|                                                    in_use_back, in_use_front)
   58|  12.5k|                   : DefaultAllocator().reallocate_downward(
   59|  12.5k|                         old_p, old_size, new_size, in_use_back, in_use_front);
   60|  12.5k|}

_ZN11flatbuffers21FlatBufferBuilderImplILb0EEC2EmPNS_9AllocatorEbm:
  100|  34.1k|      : buf_(initial_size, allocator, own_allocator, buffer_minalign,
  101|  34.1k|             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: 34.1k]
  ------------------
  102|  34.1k|                                          : FLATBUFFERS_MAX_BUFFER_SIZE)),
  ------------------
  |  |  342|  68.3k|#define FLATBUFFERS_MAX_BUFFER_SIZE (std::numeric_limits<::flatbuffers::soffset_t>::max)()
  ------------------
  103|  34.1k|        num_field_loc(0),
  104|  34.1k|        max_voffset_(0),
  105|  34.1k|        length_of_64_bit_region_(0),
  106|  34.1k|        nested(false),
  107|  34.1k|        finished(false),
  108|  34.1k|        minalign_(1),
  109|  34.1k|        force_defaults_(false),
  110|  34.1k|        dedup_vtables_(true),
  111|  34.1k|        string_pool(nullptr) {
  112|  34.1k|    EndianCheck();
  113|  34.1k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EED2Ev:
  158|  34.1k|  ~FlatBufferBuilderImpl() {
  159|  34.1k|    if (string_pool) delete string_pool;
  ------------------
  |  Branch (159:9): [True: 5.22k, False: 28.9k]
  ------------------
  160|  34.1k|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE16GetBufferPointerEv:
  209|  5.20k|  uint8_t* GetBufferPointer() const {
  210|  5.20k|    Finished();
  211|  5.20k|    return buf_.data();
  212|  5.20k|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE8FinishedEv:
  262|  5.20k|  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.20k|    FLATBUFFERS_ASSERT(finished);
  269|  5.20k|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE7GetSizeEv:
  181|  8.77M|  SizeT GetSize() const { return buf_.size(); }
_ZN11flatbuffers18FieldIndexToOffsetEt:
   44|   740k|inline voffset_t FieldIndexToOffset(voffset_t field_id) {
   45|       |  // Should correspond to what EndTable() below builds up.
   46|   740k|  const voffset_t fixed_fields =
   47|   740k|      2 * sizeof(voffset_t);  // Vtable size and Object Size.
   48|   740k|  size_t offset = fixed_fields + field_id * sizeof(voffset_t);
   49|   740k|  FLATBUFFERS_ASSERT(offset < std::numeric_limits<voffset_t>::max());
   50|   740k|  return static_cast<voffset_t>(offset);
   51|   740k|}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIaEEvtT_S3_:
  338|   472k|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|   472k|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 346k, False: 125k]
  |  Branch (340:32): [True: 346k, False: 0]
  ------------------
  341|   125k|    TrackField(field, PushElement(e));
  342|   125k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10TrackFieldEtj:
  327|  1.90M|  void TrackField(voffset_t field, uoffset_t off) {
  328|  1.90M|    FieldLoc fl = {off, field};
  329|  1.90M|    buf_.scratch_push_small(fl);
  330|  1.90M|    num_field_loc++;
  331|  1.90M|    if (field > max_voffset_) {
  ------------------
  |  Branch (331:9): [True: 708k, False: 1.19M]
  ------------------
  332|   708k|      max_voffset_ = field;
  333|   708k|    }
  334|  1.90M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIajEET0_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|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTIaEEvv:
  305|   136k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|   136k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|   136k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE5AlignEm:
  290|  4.95M|  void Align(size_t elem_size) {
  291|  4.95M|    TrackMinAlign(elem_size);
  292|  4.95M|    buf_.fill(PaddingBytes(buf_.size(), elem_size));
  293|  4.95M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13TrackMinAlignEm:
  286|  5.67M|  void TrackMinAlign(size_t elem_size) {
  287|  5.67M|    if (elem_size > minalign_) minalign_ = elem_size;
  ------------------
  |  Branch (287:9): [True: 16.9k, False: 5.66M]
  ------------------
  288|  5.67M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE15CalculateOffsetIjEENSt3__19enable_ifIXsr3std7is_sameIT_jEE5valueES5_E4typeEv:
 1440|  4.08M|  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.08M|    return GetSizeRelative32BitRegion();
 1444|  4.08M|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE26GetSizeRelative32BitRegionILb0EEENSt3__19enable_ifIXntT_EjE4typeEv:
  202|  8.00M|      const {
  203|  8.00M|    return static_cast<uoffset_t>(GetSize());
  204|  8.00M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIiEEvtT_S3_:
  338|   349k|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|   349k|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 172k, False: 177k]
  |  Branch (340:32): [True: 172k, False: 0]
  ------------------
  341|   177k|    TrackField(field, PushElement(e));
  342|   177k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIijEET0_T_:
  312|   857k|  ReturnT PushElement(T element) {
  313|   857k|    AssertScalarT<T>();
  314|   857k|    Align(sizeof(T));
  315|   857k|    buf_.push_small(EndianScalar(element));
  316|   857k|    return CalculateOffset<ReturnT>();
  317|   857k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTIiEEvv:
  305|   857k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|   857k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|   857k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementItEEvtT_S3_:
  338|   353k|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|   353k|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 287k, False: 65.6k]
  |  Branch (340:32): [True: 287k, False: 0]
  ------------------
  341|  65.6k|    TrackField(field, PushElement(e));
  342|  65.6k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementItjEET0_T_:
  312|  68.3k|  ReturnT PushElement(T element) {
  313|  68.3k|    AssertScalarT<T>();
  314|  68.3k|    Align(sizeof(T));
  315|  68.3k|    buf_.push_small(EndianScalar(element));
  316|  68.3k|    return CalculateOffset<ReturnT>();
  317|  68.3k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTItEEvv:
  305|  68.3k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|  68.3k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|  68.3k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIjEEvtT_S3_:
  338|  1.33M|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|  1.33M|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 28.5k, False: 1.30M]
  |  Branch (340:32): [True: 28.5k, False: 0]
  ------------------
  341|  1.30M|    TrackField(field, PushElement(e));
  342|  1.30M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIjjEET0_T_:
  312|  2.32M|  ReturnT PushElement(T element) {
  313|  2.32M|    AssertScalarT<T>();
  314|  2.32M|    Align(sizeof(T));
  315|  2.32M|    buf_.push_small(EndianScalar(element));
  316|  2.32M|    return CalculateOffset<ReturnT>();
  317|  2.32M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTIjEEvv:
  305|  2.96M|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|  2.96M|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|  2.96M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10StartTableEv:
  420|   661k|  uoffset_t StartTable() {
  421|   661k|    NotNested();
  422|   661k|    nested = true;
  423|   661k|    return GetSizeRelative32BitRegion();
  424|   661k|  }
_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|   661k|  uoffset_t EndTable(uoffset_t start) {
  430|       |    // If you get this assert, a corresponding StartTable wasn't called.
  431|   661k|    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|   661k|    const uoffset_t vtable_offset_loc =
  436|   661k|        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|   661k|    max_voffset_ =
  443|   661k|        (std::max)(static_cast<voffset_t>(max_voffset_ + sizeof(voffset_t)),
  444|   661k|                   FieldIndexToOffset(0));
  445|   661k|    buf_.fill_big(max_voffset_);
  446|   661k|    const uoffset_t table_object_size = vtable_offset_loc - start;
  447|       |    // Vtable use 16bit offsets.
  448|   661k|    FLATBUFFERS_ASSERT(table_object_size < 0x10000);
  449|   661k|    WriteScalar<voffset_t>(buf_.data() + sizeof(voffset_t),
  450|   661k|                           static_cast<voffset_t>(table_object_size));
  451|   661k|    WriteScalar<voffset_t>(buf_.data(), max_voffset_);
  452|       |    // Write the offsets into the table
  453|   661k|    for (auto it = buf_.scratch_end() - num_field_loc * sizeof(FieldLoc);
  454|  2.54M|         it < buf_.scratch_end(); it += sizeof(FieldLoc)) {
  ------------------
  |  Branch (454:10): [True: 1.88M, False: 661k]
  ------------------
  455|  1.88M|      auto field_location = reinterpret_cast<FieldLoc*>(it);
  456|  1.88M|      const voffset_t pos =
  457|  1.88M|          static_cast<voffset_t>(vtable_offset_loc - field_location->off);
  458|       |      // If this asserts, it means you've set a field twice.
  459|  1.88M|      FLATBUFFERS_ASSERT(
  460|  1.88M|          !ReadScalar<voffset_t>(buf_.data() + field_location->id));
  461|  1.88M|      WriteScalar<voffset_t>(buf_.data() + field_location->id, pos);
  462|  1.88M|    }
  463|   661k|    ClearOffsets();
  464|   661k|    auto vt1 = reinterpret_cast<voffset_t*>(buf_.data());
  465|   661k|    auto vt1_size = ReadScalar<voffset_t>(vt1);
  466|   661k|    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|   661k|    if (dedup_vtables_) {
  ------------------
  |  Branch (469:9): [True: 661k, False: 0]
  ------------------
  470|  1.88M|      for (auto it = buf_.scratch_data(); it < buf_.scratch_end();
  ------------------
  |  Branch (470:43): [True: 1.85M, False: 36.3k]
  ------------------
  471|  1.85M|           it += sizeof(uoffset_t)) {
  472|  1.85M|        auto vt_offset_ptr = reinterpret_cast<uoffset_t*>(it);
  473|  1.85M|        auto vt2 = reinterpret_cast<voffset_t*>(
  474|  1.85M|            buf_.data_at(*vt_offset_ptr + length_of_64_bit_region_));
  475|  1.85M|        auto vt2_size = ReadScalar<voffset_t>(vt2);
  476|  1.85M|        if (vt1_size != vt2_size || 0 != memcmp(vt2, vt1, vt1_size)) continue;
  ------------------
  |  Branch (476:13): [True: 1.01M, False: 840k]
  |  Branch (476:37): [True: 215k, False: 624k]
  ------------------
  477|   624k|        vt_use = *vt_offset_ptr;
  478|   624k|        buf_.pop(GetSizeRelative32BitRegion() - vtable_offset_loc);
  479|   624k|        break;
  480|  1.85M|      }
  481|   661k|    }
  482|       |    // If this is a new vtable, remember it.
  483|   661k|    if (vt_use == GetSizeRelative32BitRegion()) {
  ------------------
  |  Branch (483:9): [True: 36.3k, False: 624k]
  ------------------
  484|  36.3k|      buf_.scratch_push_small(vt_use);
  485|  36.3k|    }
  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|   661k|    WriteScalar(buf_.data_at(vtable_offset_loc + length_of_64_bit_region_),
  492|   661k|                static_cast<soffset_t>(vt_use) -
  493|   661k|                    static_cast<soffset_t>(vtable_offset_loc));
  494|   661k|    nested = false;
  495|   661k|    return vtable_offset_loc;
  496|   661k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12ClearOffsetsEv:
  521|   768k|  void ClearOffsets() {
  522|   768k|    buf_.scratch_pop(num_field_loc * sizeof(FieldLoc));
  523|   768k|    num_field_loc = 0;
  524|   768k|    max_voffset_ = 0;
  525|   768k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6StringEEEvtNS_6OffsetIT_EE:
  350|   440k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|   440k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 440k]
  ------------------
  352|   440k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|   440k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE7ReferToEj:
  376|  1.24M|  uoffset_t ReferTo(uoffset_t off) {
  377|       |    // Align to ensure GetSizeRelative32BitRegion() below is correct.
  378|  1.24M|    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.24M|    return ReferTo(off, GetSizeRelative32BitRegion());
  383|  1.24M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE7ReferToIjEET_S3_S3_:
  399|  1.24M|  T ReferTo(const T off, const T size) {
  400|  1.24M|    FLATBUFFERS_ASSERT(off && off <= size);
  401|  1.24M|    return size - off + static_cast<T>(sizeof(T));
  402|  1.24M|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8RequiredIN10reflection8KeyValueEEEvNS_6OffsetIT_EEt:
  506|    776|  void Required(Offset<T> table, voffset_t field) {
  507|    776|    auto table_ptr = reinterpret_cast<const Table*>(buf_.data_at(table.o));
  508|    776|    bool ok = table_ptr->GetOptionalFieldOffset(field) != 0;
  509|       |    // If this fails, the caller will show what field needs to be set.
  510|    776|    FLATBUFFERS_ASSERT(ok);
  511|    776|    (void)ok;
  512|    776|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateStringINS_6OffsetEEET_INS_6StringEEPKcm:
  549|   445k|  OffsetT<String> CreateString(const char* str, size_t len) {
  550|   445k|    CreateStringImpl(str, len);
  551|   445k|    return OffsetT<String>(
  552|   445k|        CalculateOffset<typename OffsetT<String>::offset_type>());
  553|   445k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE16CreateStringImplEPKcm:
 1412|   445k|  void CreateStringImpl(const char* str, size_t len) {
 1413|   445k|    NotNested();
 1414|   445k|    PreAlign<uoffset_t>(len + 1);  // Always 0-terminated.
 1415|   445k|    buf_.fill(1);
 1416|   445k|    PushBytes(reinterpret_cast<const uint8_t*>(str), len);
 1417|   445k|    PushElement(static_cast<uoffset_t>(len));
 1418|   445k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8PreAlignIjEEvm:
  538|   642k|  void PreAlign(size_t len) {
  539|   642k|    AssertScalarT<AlignT>();
  540|   642k|    PreAlign(len, AlignOf<AlignT>());
  541|   642k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8PreAlignEmm:
  529|   854k|  void PreAlign(size_t len, size_t alignment) {
  530|   854k|    if (len == 0) return;
  ------------------
  |  Branch (530:9): [True: 134k, False: 720k]
  ------------------
  531|   720k|    TrackMinAlign(alignment);
  532|   720k|    buf_.fill(PaddingBytes(GetSize() + len, alignment));
  533|   720k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9PushBytesEPKhm:
  300|   482k|  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: 119k, False: 41.9k]
  |  Branch (340:32): [True: 119k, False: 0]
  ------------------
  341|  41.9k|    TrackField(field, PushElement(e));
  342|  41.9k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIljEET0_T_:
  312|  53.1k|  ReturnT PushElement(T element) {
  313|  53.1k|    AssertScalarT<T>();
  314|  53.1k|    Align(sizeof(T));
  315|  53.1k|    buf_.push_small(EndianScalar(element));
  316|  53.1k|    return CalculateOffset<ReturnT>();
  317|  53.1k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTIlEEvv:
  305|  53.1k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|  53.1k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|  53.1k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetIN10reflection4TypeEEEvtNS_6OffsetIT_EE:
  350|   233k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|   233k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 233k]
  ------------------
  352|   233k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|   233k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetINS_6StringEEEjEEEEvtNS4_IT_EE:
  350|   291k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|   291k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 291k, False: 0]
  ------------------
  352|      0|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|      0|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetIN10reflection8KeyValueEEEjEEEEvtNS4_IT_EE:
  350|   291k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|   291k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 291k, False: 776]
  ------------------
  352|    776|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|    776|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8RequiredIN10reflection7EnumValEEEvNS_6OffsetIT_EEt:
  506|   114k|  void Required(Offset<T> table, voffset_t field) {
  507|   114k|    auto table_ptr = reinterpret_cast<const Table*>(buf_.data_at(table.o));
  508|   114k|    bool ok = table_ptr->GetOptionalFieldOffset(field) != 0;
  509|       |    // If this fails, the caller will show what field needs to be set.
  510|   114k|    FLATBUFFERS_ASSERT(ok);
  511|   114k|    (void)ok;
  512|   114k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorINS_6OffsetEjEEvmmm:
  692|   197k|  void StartVector(size_t len, size_t elemsize, size_t alignment) {
  693|   197k|    NotNested();
  694|   197k|    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|   197k|    PreAlign<LenT>(len * elemsize);
  698|   197k|    PreAlign(len * elemsize, alignment);  // Just in case elemsize > uoffset_t.
  699|   197k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9EndVectorIjjEET0_m:
  684|   191k|  ReturnT EndVector(size_t len) {
  685|   191k|    FLATBUFFERS_ASSERT(nested);  // Hit if no corresponding StartVector.
  686|   191k|    nested = false;
  687|   191k|    return PushElement<LenT, ReturnT>(static_cast<LenT>(len));
  688|   191k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection8KeyValueENSt3__19allocatorINS_6OffsetIS4_EEEEEENS7_INS_6VectorINS7_IT_EEjEEEEPNS5_6vectorISC_T0_EE:
 1185|    776|      std::vector<Offset<T>, Alloc>* v) {
 1186|    776|    return CreateVectorOfSortedTables(data(*v), v->size());
 1187|    776|  }
_ZN11flatbuffers4dataINS_6OffsetIN10reflection8KeyValueEEENSt3__19allocatorIS4_EEEEPT_RNS5_6vectorIS8_T0_EE:
   61|    776|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|    776|  static uint8_t t;
   65|    776|  return v.empty() ? reinterpret_cast<T*>(&t) : &v.front();
  ------------------
  |  Branch (65:10): [True: 0, False: 776]
  ------------------
   66|    776|}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection8KeyValueEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPS8_m:
 1171|    776|                                                       size_t len) {
 1172|    776|    std::stable_sort(v, v + len, TableKeyComparator<T>(buf_));
 1173|    776|    return CreateVector(v, len);
 1174|    776|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIN10reflection8KeyValueEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPKS8_m:
  802|    776|  Offset<Vector<Offset<T>>> CreateVector(const Offset<T>* v, size_t len) {
  803|    776|    StartVector<Offset<T>>(len);
  804|  1.55k|    for (auto i = len; i > 0;) {
  ------------------
  |  Branch (804:24): [True: 776, False: 776]
  ------------------
  805|    776|      PushElement(v[--i]);
  806|    776|    }
  807|    776|    return Offset<Vector<Offset<T>>>(EndVector(len));
  808|    776|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorINS_6OffsetIN10reflection8KeyValueEEES3_jEEvm:
  703|    776|  void StartVector(size_t len) {
  704|    776|    return StartVector<OffsetT, LenT>(len, sizeof(T), AlignOf<T>());
  705|    776|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIN10reflection8KeyValueENS_6OffsetEEEjT0_IT_E:
  320|    776|  uoffset_t PushElement(OffsetT<T> off) {
  321|       |    // Special case for offsets: see ReferTo below.
  322|    776|    return PushElement(ReferTo(off.o));
  323|    776|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetIN10reflection7EnumValEEEjEEEEvtNS4_IT_EE:
  350|  80.2k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|  80.2k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 80.2k]
  ------------------
  352|  80.2k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|  80.2k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIhEEvtT_S3_:
  338|   343k|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|   343k|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 228k, False: 115k]
  |  Branch (340:32): [True: 228k, False: 0]
  ------------------
  341|   115k|    TrackField(field, PushElement(e));
  342|   115k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIhjEET0_T_:
  312|   142k|  ReturnT PushElement(T element) {
  313|   142k|    AssertScalarT<T>();
  314|   142k|    Align(sizeof(T));
  315|   142k|    buf_.push_small(EndianScalar(element));
  316|   142k|    return CalculateOffset<ReturnT>();
  317|   142k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTIhEEvv:
  305|   147k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|   147k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|   147k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8RequiredIN10reflection4EnumEEEvNS_6OffsetIT_EEt:
  506|   240k|  void Required(Offset<T> table, voffset_t field) {
  507|   240k|    auto table_ptr = reinterpret_cast<const Table*>(buf_.data_at(table.o));
  508|   240k|    bool ok = table_ptr->GetOptionalFieldOffset(field) != 0;
  509|       |    // If this fails, the caller will show what field needs to be set.
  510|   240k|    FLATBUFFERS_ASSERT(ok);
  511|   240k|    (void)ok;
  512|   240k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIN10reflection7EnumValEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPKS8_m:
  802|  80.2k|  Offset<Vector<Offset<T>>> CreateVector(const Offset<T>* v, size_t len) {
  803|  80.2k|    StartVector<Offset<T>>(len);
  804|   194k|    for (auto i = len; i > 0;) {
  ------------------
  |  Branch (804:24): [True: 114k, False: 80.2k]
  ------------------
  805|   114k|      PushElement(v[--i]);
  806|   114k|    }
  807|  80.2k|    return Offset<Vector<Offset<T>>>(EndVector(len));
  808|  80.2k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorINS_6OffsetIN10reflection7EnumValEEES3_jEEvm:
  703|  80.2k|  void StartVector(size_t len) {
  704|  80.2k|    return StartVector<OffsetT, LenT>(len, sizeof(T), AlignOf<T>());
  705|  80.2k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIN10reflection7EnumValENS_6OffsetEEEjT0_IT_E:
  320|   114k|  uoffset_t PushElement(OffsetT<T> off) {
  321|       |    // Special case for offsets: see ReferTo below.
  322|   114k|    return PushElement(ReferTo(off.o));
  323|   114k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIdEEvtT_S3_:
  338|  44.6k|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|  44.6k|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 40.2k, False: 4.45k]
  |  Branch (340:32): [True: 40.2k, False: 0]
  ------------------
  341|  4.45k|    TrackField(field, PushElement(e));
  342|  4.45k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIdjEET0_T_:
  312|  10.6k|  ReturnT PushElement(T element) {
  313|  10.6k|    AssertScalarT<T>();
  314|  10.6k|    Align(sizeof(T));
  315|  10.6k|    buf_.push_small(EndianScalar(element));
  316|  10.6k|    return CalculateOffset<ReturnT>();
  317|  10.6k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTIdEEvv:
  305|  10.6k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|  10.6k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|  10.6k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8RequiredIN10reflection5FieldEEEvNS_6OffsetIT_EEt:
  506|  77.9k|  void Required(Offset<T> table, voffset_t field) {
  507|  77.9k|    auto table_ptr = reinterpret_cast<const Table*>(buf_.data_at(table.o));
  508|  77.9k|    bool ok = table_ptr->GetOptionalFieldOffset(field) != 0;
  509|       |    // If this fails, the caller will show what field needs to be set.
  510|  77.9k|    FLATBUFFERS_ASSERT(ok);
  511|  77.9k|    (void)ok;
  512|  77.9k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetIN10reflection5FieldEEEjEEEEvtNS4_IT_EE:
  350|  55.3k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|  55.3k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 55.3k]
  ------------------
  352|  55.3k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|  55.3k|  }
_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.3k|      std::vector<Offset<T>, Alloc>* v) {
 1186|  55.3k|    return CreateVectorOfSortedTables(data(*v), v->size());
 1187|  55.3k|  }
_ZN11flatbuffers4dataINS_6OffsetIN10reflection5FieldEEENSt3__19allocatorIS4_EEEEPT_RNS5_6vectorIS8_T0_EE:
   61|  55.3k|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.3k|  static uint8_t t;
   65|  55.3k|  return v.empty() ? reinterpret_cast<T*>(&t) : &v.front();
  ------------------
  |  Branch (65:10): [True: 41.2k, False: 14.1k]
  ------------------
   66|  55.3k|}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection5FieldEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPS8_m:
 1171|  55.3k|                                                       size_t len) {
 1172|  55.3k|    std::stable_sort(v, v + len, TableKeyComparator<T>(buf_));
 1173|  55.3k|    return CreateVector(v, len);
 1174|  55.3k|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection5FieldEEclERKNS_6OffsetIS4_EES9_:
 1148|   159k|    bool operator()(const Offset<T>& a, const Offset<T>& b) const {
 1149|   159k|      auto table_a = reinterpret_cast<T*>(buf_.data_at(a.o));
 1150|   159k|      auto table_b = reinterpret_cast<T*>(buf_.data_at(b.o));
 1151|   159k|      return table_a->KeyCompareLessThan(table_b);
 1152|   159k|    }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIN10reflection5FieldEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPKS8_m:
  802|  55.3k|  Offset<Vector<Offset<T>>> CreateVector(const Offset<T>* v, size_t len) {
  803|  55.3k|    StartVector<Offset<T>>(len);
  804|  94.3k|    for (auto i = len; i > 0;) {
  ------------------
  |  Branch (804:24): [True: 38.9k, False: 55.3k]
  ------------------
  805|  38.9k|      PushElement(v[--i]);
  806|  38.9k|    }
  807|  55.3k|    return Offset<Vector<Offset<T>>>(EndVector(len));
  808|  55.3k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorINS_6OffsetIN10reflection5FieldEEES3_jEEvm:
  703|  55.3k|  void StartVector(size_t len) {
  704|  55.3k|    return StartVector<OffsetT, LenT>(len, sizeof(T), AlignOf<T>());
  705|  55.3k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIN10reflection5FieldENS_6OffsetEEEjT0_IT_E:
  320|  38.9k|  uoffset_t PushElement(OffsetT<T> off) {
  321|       |    // Special case for offsets: see ReferTo below.
  322|  38.9k|    return PushElement(ReferTo(off.o));
  323|  38.9k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetIN10reflection6ObjectEEEvtNS_6OffsetIT_EE:
  350|  8.49k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|  8.49k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 4.96k, False: 3.52k]
  ------------------
  352|  3.52k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|  3.52k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8RequiredIN10reflection7RPCCallEEEvNS_6OffsetIT_EEt:
  506|  4.92k|  void Required(Offset<T> table, voffset_t field) {
  507|  4.92k|    auto table_ptr = reinterpret_cast<const Table*>(buf_.data_at(table.o));
  508|  4.92k|    bool ok = table_ptr->GetOptionalFieldOffset(field) != 0;
  509|       |    // If this fails, the caller will show what field needs to be set.
  510|  4.92k|    FLATBUFFERS_ASSERT(ok);
  511|  4.92k|    (void)ok;
  512|  4.92k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetIN10reflection7RPCCallEEEjEEEEvtNS4_IT_EE:
  350|    793|  void AddOffset(voffset_t field, Offset<T> off) {
  351|    793|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 793]
  ------------------
  352|    793|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|    793|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8RequiredIN10reflection7ServiceEEEvNS_6OffsetIT_EEt:
  506|    793|  void Required(Offset<T> table, voffset_t field) {
  507|    793|    auto table_ptr = reinterpret_cast<const Table*>(buf_.data_at(table.o));
  508|    793|    bool ok = table_ptr->GetOptionalFieldOffset(field) != 0;
  509|       |    // If this fails, the caller will show what field needs to be set.
  510|    793|    FLATBUFFERS_ASSERT(ok);
  511|    793|    (void)ok;
  512|    793|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIN10reflection7RPCCallEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPKS8_m:
  802|    793|  Offset<Vector<Offset<T>>> CreateVector(const Offset<T>* v, size_t len) {
  803|    793|    StartVector<Offset<T>>(len);
  804|  2.43k|    for (auto i = len; i > 0;) {
  ------------------
  |  Branch (804:24): [True: 1.64k, False: 793]
  ------------------
  805|  1.64k|      PushElement(v[--i]);
  806|  1.64k|    }
  807|    793|    return Offset<Vector<Offset<T>>>(EndVector(len));
  808|    793|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorINS_6OffsetIN10reflection7RPCCallEEES3_jEEvm:
  703|    793|  void StartVector(size_t len) {
  704|    793|    return StartVector<OffsetT, LenT>(len, sizeof(T), AlignOf<T>());
  705|    793|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIN10reflection7RPCCallENS_6OffsetEEEjT0_IT_E:
  320|  1.64k|  uoffset_t PushElement(OffsetT<T> off) {
  321|       |    // Special case for offsets: see ReferTo below.
  322|  1.64k|    return PushElement(ReferTo(off.o));
  323|  1.64k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetIN10reflection6ObjectEEEjEEEEvtNS4_IT_EE:
  350|  5.20k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|  5.20k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 5.20k]
  ------------------
  352|  5.20k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|  5.20k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetIN10reflection4EnumEEEjEEEEvtNS4_IT_EE:
  350|  5.20k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|  5.20k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 5.20k]
  ------------------
  352|  5.20k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|  5.20k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetIN10reflection7ServiceEEEjEEEEvtNS4_IT_EE:
  350|  5.20k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|  5.20k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 5.20k]
  ------------------
  352|  5.20k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|  5.20k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementImEEvtT_S3_:
  338|  20.4k|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|  20.4k|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 5.79k, False: 14.6k]
  |  Branch (340:32): [True: 5.79k, False: 0]
  ------------------
  341|  14.6k|    TrackField(field, PushElement(e));
  342|  14.6k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementImjEET0_T_:
  312|  27.3k|  ReturnT PushElement(T element) {
  313|  27.3k|    AssertScalarT<T>();
  314|  27.3k|    Align(sizeof(T));
  315|  27.3k|    buf_.push_small(EndianScalar(element));
  316|  27.3k|    return CalculateOffset<ReturnT>();
  317|  27.3k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTImEEvv:
  305|  27.3k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|  27.3k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|  27.3k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetINS_6VectorINS_6OffsetIN10reflection10SchemaFileEEEjEEEEvtNS4_IT_EE:
  350|  5.20k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|  5.20k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 5.20k, False: 0]
  ------------------
  352|      0|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|      0|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8RequiredIN10reflection6SchemaEEEvNS_6OffsetIT_EEt:
  506|  10.4k|  void Required(Offset<T> table, voffset_t field) {
  507|  10.4k|    auto table_ptr = reinterpret_cast<const Table*>(buf_.data_at(table.o));
  508|  10.4k|    bool ok = table_ptr->GetOptionalFieldOffset(field) != 0;
  509|       |    // If this fails, the caller will show what field needs to be set.
  510|  10.4k|    FLATBUFFERS_ASSERT(ok);
  511|  10.4k|    (void)ok;
  512|  10.4k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection6ObjectENSt3__19allocatorINS_6OffsetIS4_EEEEEENS7_INS_6VectorINS7_IT_EEjEEEEPNS5_6vectorISC_T0_EE:
 1185|  5.20k|      std::vector<Offset<T>, Alloc>* v) {
 1186|  5.20k|    return CreateVectorOfSortedTables(data(*v), v->size());
 1187|  5.20k|  }
_ZN11flatbuffers4dataINS_6OffsetIN10reflection6ObjectEEENSt3__19allocatorIS4_EEEEPT_RNS5_6vectorIS8_T0_EE:
   61|  5.20k|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.20k|  static uint8_t t;
   65|  5.20k|  return v.empty() ? reinterpret_cast<T*>(&t) : &v.front();
  ------------------
  |  Branch (65:10): [True: 2.44k, False: 2.76k]
  ------------------
   66|  5.20k|}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection6ObjectEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPS8_m:
 1171|  5.20k|                                                       size_t len) {
 1172|  5.20k|    std::stable_sort(v, v + len, TableKeyComparator<T>(buf_));
 1173|  5.20k|    return CreateVector(v, len);
 1174|  5.20k|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection6ObjectEEclERKNS_6OffsetIS4_EES9_:
 1148|   669k|    bool operator()(const Offset<T>& a, const Offset<T>& b) const {
 1149|   669k|      auto table_a = reinterpret_cast<T*>(buf_.data_at(a.o));
 1150|   669k|      auto table_b = reinterpret_cast<T*>(buf_.data_at(b.o));
 1151|   669k|      return table_a->KeyCompareLessThan(table_b);
 1152|   669k|    }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIN10reflection6ObjectEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPKS8_m:
  802|  5.20k|  Offset<Vector<Offset<T>>> CreateVector(const Offset<T>* v, size_t len) {
  803|  5.20k|    StartVector<Offset<T>>(len);
  804|  60.6k|    for (auto i = len; i > 0;) {
  ------------------
  |  Branch (804:24): [True: 55.3k, False: 5.20k]
  ------------------
  805|  55.3k|      PushElement(v[--i]);
  806|  55.3k|    }
  807|  5.20k|    return Offset<Vector<Offset<T>>>(EndVector(len));
  808|  5.20k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorINS_6OffsetIN10reflection6ObjectEEES3_jEEvm:
  703|  5.20k|  void StartVector(size_t len) {
  704|  5.20k|    return StartVector<OffsetT, LenT>(len, sizeof(T), AlignOf<T>());
  705|  5.20k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIN10reflection6ObjectENS_6OffsetEEEjT0_IT_E:
  320|  55.3k|  uoffset_t PushElement(OffsetT<T> off) {
  321|       |    // Special case for offsets: see ReferTo below.
  322|  55.3k|    return PushElement(ReferTo(off.o));
  323|  55.3k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection4EnumENSt3__19allocatorINS_6OffsetIS4_EEEEEENS7_INS_6VectorINS7_IT_EEjEEEEPNS5_6vectorISC_T0_EE:
 1185|  5.20k|      std::vector<Offset<T>, Alloc>* v) {
 1186|  5.20k|    return CreateVectorOfSortedTables(data(*v), v->size());
 1187|  5.20k|  }
_ZN11flatbuffers4dataINS_6OffsetIN10reflection4EnumEEENSt3__19allocatorIS4_EEEEPT_RNS5_6vectorIS8_T0_EE:
   61|  5.20k|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.20k|  static uint8_t t;
   65|  5.20k|  return v.empty() ? reinterpret_cast<T*>(&t) : &v.front();
  ------------------
  |  Branch (65:10): [True: 1.44k, False: 3.76k]
  ------------------
   66|  5.20k|}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection4EnumEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPS8_m:
 1171|  5.20k|                                                       size_t len) {
 1172|  5.20k|    std::stable_sort(v, v + len, TableKeyComparator<T>(buf_));
 1173|  5.20k|    return CreateVector(v, len);
 1174|  5.20k|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection4EnumEEclERKNS_6OffsetIS4_EES9_:
 1148|  1.31M|    bool operator()(const Offset<T>& a, const Offset<T>& b) const {
 1149|  1.31M|      auto table_a = reinterpret_cast<T*>(buf_.data_at(a.o));
 1150|  1.31M|      auto table_b = reinterpret_cast<T*>(buf_.data_at(b.o));
 1151|  1.31M|      return table_a->KeyCompareLessThan(table_b);
 1152|  1.31M|    }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIN10reflection4EnumEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPKS8_m:
  802|  5.20k|  Offset<Vector<Offset<T>>> CreateVector(const Offset<T>* v, size_t len) {
  803|  5.20k|    StartVector<Offset<T>>(len);
  804|  85.4k|    for (auto i = len; i > 0;) {
  ------------------
  |  Branch (804:24): [True: 80.2k, False: 5.20k]
  ------------------
  805|  80.2k|      PushElement(v[--i]);
  806|  80.2k|    }
  807|  5.20k|    return Offset<Vector<Offset<T>>>(EndVector(len));
  808|  5.20k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorINS_6OffsetIN10reflection4EnumEEES3_jEEvm:
  703|  5.20k|  void StartVector(size_t len) {
  704|  5.20k|    return StartVector<OffsetT, LenT>(len, sizeof(T), AlignOf<T>());
  705|  5.20k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIN10reflection4EnumENS_6OffsetEEEjT0_IT_E:
  320|  80.2k|  uoffset_t PushElement(OffsetT<T> off) {
  321|       |    // Special case for offsets: see ReferTo below.
  322|  80.2k|    return PushElement(ReferTo(off.o));
  323|  80.2k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection7ServiceENSt3__19allocatorINS_6OffsetIS4_EEEEEENS7_INS_6VectorINS7_IT_EEjEEEEPNS5_6vectorISC_T0_EE:
 1185|  5.20k|      std::vector<Offset<T>, Alloc>* v) {
 1186|  5.20k|    return CreateVectorOfSortedTables(data(*v), v->size());
 1187|  5.20k|  }
_ZN11flatbuffers4dataINS_6OffsetIN10reflection7ServiceEEENSt3__19allocatorIS4_EEEEPT_RNS5_6vectorIS8_T0_EE:
   61|  5.20k|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.20k|  static uint8_t t;
   65|  5.20k|  return v.empty() ? reinterpret_cast<T*>(&t) : &v.front();
  ------------------
  |  Branch (65:10): [True: 4.88k, False: 320]
  ------------------
   66|  5.20k|}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE26CreateVectorOfSortedTablesIN10reflection7ServiceEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPS8_m:
 1171|  5.20k|                                                       size_t len) {
 1172|  5.20k|    std::stable_sort(v, v + len, TableKeyComparator<T>(buf_));
 1173|  5.20k|    return CreateVector(v, len);
 1174|  5.20k|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection7ServiceEEclERKNS_6OffsetIS4_EES9_:
 1148|  1.62k|    bool operator()(const Offset<T>& a, const Offset<T>& b) const {
 1149|  1.62k|      auto table_a = reinterpret_cast<T*>(buf_.data_at(a.o));
 1150|  1.62k|      auto table_b = reinterpret_cast<T*>(buf_.data_at(b.o));
 1151|  1.62k|      return table_a->KeyCompareLessThan(table_b);
 1152|  1.62k|    }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIN10reflection7ServiceEEENS_6OffsetINS_6VectorINS5_IT_EEjEEEEPKS8_m:
  802|  5.20k|  Offset<Vector<Offset<T>>> CreateVector(const Offset<T>* v, size_t len) {
  803|  5.20k|    StartVector<Offset<T>>(len);
  804|  6.00k|    for (auto i = len; i > 0;) {
  ------------------
  |  Branch (804:24): [True: 793, False: 5.20k]
  ------------------
  805|    793|      PushElement(v[--i]);
  806|    793|    }
  807|  5.20k|    return Offset<Vector<Offset<T>>>(EndVector(len));
  808|  5.20k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorINS_6OffsetIN10reflection7ServiceEEES3_jEEvm:
  703|  5.20k|  void StartVector(size_t len) {
  704|  5.20k|    return StartVector<OffsetT, LenT>(len, sizeof(T), AlignOf<T>());
  705|  5.20k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIN10reflection7ServiceENS_6OffsetEEEjT0_IT_E:
  320|    793|  uoffset_t PushElement(OffsetT<T> off) {
  321|       |    // Special case for offsets: see ReferTo below.
  322|    793|    return PushElement(ReferTo(off.o));
  323|    793|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE6FinishIN10reflection6SchemaEEEvNS_6OffsetIT_EEPKc:
 1263|  5.20k|  void Finish(Offset<T> root, const char* file_identifier = nullptr) {
 1264|  5.20k|    Finish(root.o, file_identifier, false);
 1265|  5.20k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE6FinishEjPKcb:
 1293|  5.46k|  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.46k|    FLATBUFFERS_ASSERT(!finished);
 1296|       |
 1297|  5.46k|    NotNested();
 1298|  5.46k|    buf_.clear_scratch();
 1299|       |
 1300|  5.46k|    const size_t prefix_size = size_prefix ? sizeof(SizeT) : 0;
  ------------------
  |  Branch (1300:32): [True: 0, False: 5.46k]
  ------------------
 1301|       |    // Make sure we track the alignment of the size prefix.
 1302|  5.46k|    TrackMinAlign(prefix_size);
 1303|       |
 1304|  5.46k|    const size_t root_offset_size = sizeof(uoffset_t);
 1305|  5.46k|    const size_t file_id_size = file_identifier ? kFileIdentifierLength : 0;
  ------------------
  |  Branch (1305:33): [True: 5.20k, False: 256]
  ------------------
 1306|       |
 1307|       |    // This will cause the whole buffer to be aligned.
 1308|  5.46k|    PreAlign(prefix_size + root_offset_size + file_id_size, minalign_);
 1309|       |
 1310|  5.46k|    if (file_identifier) {
  ------------------
  |  Branch (1310:9): [True: 5.20k, False: 256]
  ------------------
 1311|  5.20k|      FLATBUFFERS_ASSERT(strlen(file_identifier) == kFileIdentifierLength);
 1312|  5.20k|      PushBytes(reinterpret_cast<const uint8_t*>(file_identifier),
 1313|  5.20k|                kFileIdentifierLength);
 1314|  5.20k|    }
 1315|  5.46k|    PushElement(ReferTo(root));  // Location of root.
 1316|  5.46k|    if (size_prefix) {
  ------------------
  |  Branch (1316:9): [True: 0, False: 5.46k]
  ------------------
 1317|      0|      PushElement(GetSize());
 1318|      0|    }
 1319|  5.46k|    finished = true;
 1320|  5.46k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection8KeyValueEEC2ERNS_15vector_downwardIjEE:
 1146|    776|    explicit TableKeyComparator(vector_downward<SizeT>& buf) : buf_(buf) {}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection5FieldEEC2ERNS_15vector_downwardIjEE:
 1146|  55.3k|    explicit TableKeyComparator(vector_downward<SizeT>& buf) : buf_(buf) {}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection6ObjectEEC2ERNS_15vector_downwardIjEE:
 1146|  5.20k|    explicit TableKeyComparator(vector_downward<SizeT>& buf) : buf_(buf) {}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection4EnumEEC2ERNS_15vector_downwardIjEE:
 1146|  5.20k|    explicit TableKeyComparator(vector_downward<SizeT>& buf) : buf_(buf) {}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE18TableKeyComparatorIN10reflection7ServiceEEC2ERNS_15vector_downwardIjEE:
 1146|  5.20k|    explicit TableKeyComparator(vector_downward<SizeT>& buf) : buf_(buf) {}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE18CreateSharedStringENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
  647|   138k|  Offset<String> CreateSharedString(const flatbuffers::string_view str) {
  648|   138k|    return CreateSharedString(str.data(), str.size());
  649|   138k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE18CreateSharedStringEPKcm:
  618|   138k|  Offset<String> CreateSharedString(const char* str, size_t len) {
  619|   138k|    FLATBUFFERS_ASSERT(FLATBUFFERS_GENERAL_HEAP_ALLOC_OK);
  620|   138k|    if (!string_pool) {
  ------------------
  |  Branch (620:9): [True: 5.22k, False: 132k]
  ------------------
  621|  5.22k|      string_pool = new StringOffsetMap(StringOffsetCompare(buf_));
  622|  5.22k|    }
  623|       |
  624|   138k|    const size_t size_before_string = buf_.size();
  625|       |    // Must first serialize the string, since the set is all offsets into
  626|       |    // buffer.
  627|   138k|    const Offset<String> off = CreateString<Offset>(str, len);
  628|   138k|    auto it = string_pool->find(off);
  629|       |    // If it exists we reuse existing serialized data!
  630|   138k|    if (it != string_pool->end()) {
  ------------------
  |  Branch (630:9): [True: 131k, False: 6.36k]
  ------------------
  631|       |      // We can remove the string we serialized.
  632|   131k|      buf_.pop(buf_.size() - size_before_string);
  633|   131k|      return *it;
  634|   131k|    }
  635|       |    // Record this string for future use.
  636|  6.36k|    string_pool->insert(off);
  637|  6.36k|    return off;
  638|   138k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE19StringOffsetCompareC2ERKNS_15vector_downwardIjEE:
 1370|  5.22k|        : 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|   306k|  OffsetT<String> CreateString(const std::string& str) {
  576|   306k|    return CreateString<OffsetT>(str.c_str(), str.length());
  577|   306k|  }
_ZNK11flatbuffers21FlatBufferBuilderImplILb0EE23GetCurrentBufferPointerEv:
  224|  42.0k|  uint8_t* GetCurrentBufferPointer() const { return buf_.data(); }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE15AddStructOffsetEtj:
  369|  22.4k|  void AddStructOffset(voffset_t field, uoffset_t off) {
  370|  22.4k|    TrackField(field, off);
  371|  22.4k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE20ForceVectorAlignmentEmmm:
  713|  10.7k|                            const size_t alignment) {
  714|  10.7k|    if (len == 0) return;
  ------------------
  |  Branch (714:9): [True: 1.90k, False: 8.88k]
  ------------------
  715|  8.88k|    FLATBUFFERS_ASSERT(VerifyAlignmentRequirements(alignment));
  716|  8.88k|    PreAlign(len * elemsize, alignment);
  717|  8.88k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIhNSt3__19allocatorIhEEEENS_6OffsetINS_6VectorIT_jEEEERKNS3_6vectorIS8_T0_EE:
  817|  4.20k|  Offset<Vector<T>> CreateVector(const std::vector<T, Alloc>& v) {
  818|  4.20k|    return CreateVector(data(v), v.size());
  819|  4.20k|  }
_ZN11flatbuffers4dataIhNSt3__19allocatorIhEEEEPKT_RKNS1_6vectorIS4_T0_EE:
   54|  4.20k|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.20k|  static uint8_t t;
   58|  4.20k|  return v.empty() ? reinterpret_cast<const T*>(&t) : &v.front();
  ------------------
  |  Branch (58:10): [True: 0, False: 4.20k]
  ------------------
   59|  4.20k|}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartStructEm:
  514|  33.8k|  uoffset_t StartStruct(size_t alignment) {
  515|  33.8k|    Align(alignment);
  516|  33.8k|    return GetSizeRelative32BitRegion();
  517|  33.8k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE3PadEm:
  284|   164k|  void Pad(size_t num_bytes) { buf_.fill(num_bytes); }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIhEEvtT_:
  345|  2.62k|  void AddElement(voffset_t field, T e) {
  346|  2.62k|    TrackField(field, PushElement(e));
  347|  2.62k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIaEEvtT_:
  345|  1.52k|  void AddElement(voffset_t field, T e) {
  346|  1.52k|    TrackField(field, PushElement(e));
  347|  1.52k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIsjEET0_T_:
  312|  7.45k|  ReturnT PushElement(T element) {
  313|  7.45k|    AssertScalarT<T>();
  314|  7.45k|    Align(sizeof(T));
  315|  7.45k|    buf_.push_small(EndianScalar(element));
  316|  7.45k|    return CalculateOffset<ReturnT>();
  317|  7.45k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTIsEEvv:
  305|  7.45k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|  7.45k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|  7.45k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIsEEvtT_:
  345|  1.36k|  void AddElement(voffset_t field, T e) {
  346|  1.36k|    TrackField(field, PushElement(e));
  347|  1.36k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIsEEvtT_S3_:
  338|  4.61k|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|  4.61k|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 812, False: 3.80k]
  |  Branch (340:32): [True: 812, False: 0]
  ------------------
  341|  3.80k|    TrackField(field, PushElement(e));
  342|  3.80k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementItEEvtT_:
  345|  1.00k|  void AddElement(voffset_t field, T e) {
  346|  1.00k|    TrackField(field, PushElement(e));
  347|  1.00k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIiEEvtT_:
  345|    913|  void AddElement(voffset_t field, T e) {
  346|    913|    TrackField(field, PushElement(e));
  347|    913|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIjEEvtT_:
  345|  1.28k|  void AddElement(voffset_t field, T e) {
  346|  1.28k|    TrackField(field, PushElement(e));
  347|  1.28k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIlEEvtT_:
  345|  3.72k|  void AddElement(voffset_t field, T e) {
  346|  3.72k|    TrackField(field, PushElement(e));
  347|  3.72k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementImEEvtT_:
  345|  4.01k|  void AddElement(voffset_t field, T e) {
  346|  4.01k|    TrackField(field, PushElement(e));
  347|  4.01k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIfjEET0_T_:
  312|  9.35k|  ReturnT PushElement(T element) {
  313|  9.35k|    AssertScalarT<T>();
  314|  9.35k|    Align(sizeof(T));
  315|  9.35k|    buf_.push_small(EndianScalar(element));
  316|  9.35k|    return CalculateOffset<ReturnT>();
  317|  9.35k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE13AssertScalarTIfEEvv:
  305|  9.35k|  void AssertScalarT() {
  306|       |    // The code assumes power of 2 sizes and endian-swap-ability.
  307|  9.35k|    static_assert(flatbuffers::is_scalar<T>::value, "T must be a scalar type");
  308|  9.35k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIfEEvtT_:
  345|  1.34k|  void AddElement(voffset_t field, T e) {
  346|  1.34k|    TrackField(field, PushElement(e));
  347|  1.34k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIfEEvtT_S3_:
  338|  8.94k|  void AddElement(voffset_t field, T e, T def) {
  339|       |    // We don't serialize values equal to the default.
  340|  8.94k|    if (IsTheSameAs(e, def) && !force_defaults_) return;
  ------------------
  |  Branch (340:9): [True: 2.67k, False: 6.27k]
  |  Branch (340:32): [True: 2.67k, False: 0]
  ------------------
  341|  6.27k|    TrackField(field, PushElement(e));
  342|  6.27k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE10AddElementIdEEvtT_:
  345|  4.21k|  void AddElement(voffset_t field, T e) {
  346|  4.21k|    TrackField(field, PushElement(e));
  347|  4.21k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetIvEEvtNS_8Offset64IT_EE:
  356|  10.9k|  void AddOffset(voffset_t field, Offset64<T> off) {
  357|  10.9k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (357:9): [True: 0, False: 10.9k]
  ------------------
  358|  10.9k|    AddElement(field, ReferTo(off.o), static_cast<uoffset64_t>(0));
  359|  10.9k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE7ReferToEm:
  385|  10.9k|  uoffset64_t ReferTo(uoffset64_t off) {
  386|       |    // Align to ensure GetSize() below is correct.
  387|  10.9k|    Align(sizeof(uoffset64_t));
  388|       |    // 64-bit offsets are relative to tail of the whole buffer
  389|  10.9k|    return ReferTo(off, GetSize());
  390|  10.9k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE7ReferToImjEET_S3_T0_:
  393|  10.9k|  T ReferTo(const T off, const T2 size) {
  394|  10.9k|    FLATBUFFERS_ASSERT(off && off <= size);
  395|  10.9k|    return size - off + static_cast<T>(sizeof(T));
  396|  10.9k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9AddOffsetIvEEvtNS_6OffsetIT_EE:
  350|  33.4k|  void AddOffset(voffset_t field, Offset<T> off) {
  351|  33.4k|    if (off.IsNull()) return;  // Don't store.
  ------------------
  |  Branch (351:9): [True: 0, False: 33.4k]
  ------------------
  352|  33.4k|    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
  353|  33.4k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9EndStructEv:
  519|  33.8k|  uoffset_t EndStruct() { return GetSizeRelative32BitRegion(); }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE8PopBytesEm:
  302|  33.8k|  void PopBytes(size_t amount) { buf_.pop(amount); }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11PushElementIvNS_6OffsetEEEjT0_IT_E:
  320|  83.4k|  uoffset_t PushElement(OffsetT<T> off) {
  321|       |    // Special case for offsets: see ReferTo below.
  322|  83.4k|    return PushElement(ReferTo(off.o));
  323|  83.4k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE9EndVectorImjEET0_m:
  684|  6.41k|  ReturnT EndVector(size_t len) {
  685|  6.41k|    FLATBUFFERS_ASSERT(nested);  // Hit if no corresponding StartVector.
  686|  6.41k|    nested = false;
  687|  6.41k|    return PushElement<LenT, ReturnT>(static_cast<LenT>(len));
  688|  6.41k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIhTtTpTyENS_6OffsetETtTpTyENS_6VectorEEET0_IJT1_IJT_EEEEPKS7_m:
  753|  4.20k|  OffsetT<VectorT<T>> CreateVector(const T* v, size_t len) {
  754|       |    // The type of the length field in the vector.
  755|  4.20k|    typedef typename VectorT<T>::size_type LenT;
  756|  4.20k|    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.20k|    AssertScalarT<T>();
  760|  4.20k|    StartVector<T, OffsetT, LenT>(len);
  761|  4.20k|    if (len > 0) {
  ------------------
  |  Branch (761:9): [True: 4.20k, False: 0]
  ------------------
  762|       |      // clang-format off
  763|  4.20k|      #if FLATBUFFERS_LITTLEENDIAN
  764|  4.20k|        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.20k|    }
  776|  4.20k|    return OffsetT<VectorT<T>>(EndVector<LenT, offset_type>(len));
  777|  4.20k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE11StartVectorIhNS_6OffsetEjEEvm:
  703|  4.20k|  void StartVector(size_t len) {
  704|  4.20k|    return StartVector<OffsetT, LenT>(len, sizeof(T), AlignOf<T>());
  705|  4.20k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE5ClearEv:
  169|  33.4k|  void Clear() {
  170|  33.4k|    ClearOffsets();
  171|  33.4k|    buf_.clear();
  172|  33.4k|    nested = false;
  173|  33.4k|    finished = false;
  174|  33.4k|    minalign_ = 1;
  175|  33.4k|    length_of_64_bit_region_ = 0;
  176|  33.4k|    if (string_pool) string_pool->clear();
  ------------------
  |  Branch (176:9): [True: 1, False: 33.4k]
  ------------------
  177|  33.4k|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE6FinishINS_5TableEEEvNS_6OffsetIT_EEPKc:
 1263|    258|  void Finish(Offset<T> root, const char* file_identifier = nullptr) {
 1264|    258|    Finish(root.o, file_identifier, false);
 1265|    258|  }
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorINS_6OffsetIN10reflection7RPCCallEEENSt3__19allocatorIS6_EEEENS3_INS_6VectorIT_jEEEERKNS7_6vectorISB_T0_EE:
  817|    793|  Offset<Vector<T>> CreateVector(const std::vector<T, Alloc>& v) {
  818|    793|    return CreateVector(data(v), v.size());
  819|    793|  }
_ZN11flatbuffers4dataINS_6OffsetIN10reflection7RPCCallEEENSt3__19allocatorIS4_EEEEPKT_RKNS5_6vectorIS8_T0_EE:
   54|    793|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|    793|  static uint8_t t;
   58|    793|  return v.empty() ? reinterpret_cast<const T*>(&t) : &v.front();
  ------------------
  |  Branch (58:10): [True: 0, False: 793]
  ------------------
   59|    793|}
_ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorINS_6OffsetIN10reflection7EnumValEEENSt3__19allocatorIS6_EEEENS3_INS_6VectorIT_jEEEERKNS7_6vectorISB_T0_EE:
  817|  80.2k|  Offset<Vector<T>> CreateVector(const std::vector<T, Alloc>& v) {
  818|  80.2k|    return CreateVector(data(v), v.size());
  819|  80.2k|  }
_ZN11flatbuffers4dataINS_6OffsetIN10reflection7EnumValEEENSt3__19allocatorIS4_EEEEPKT_RKNS5_6vectorIS8_T0_EE:
   54|  80.2k|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|  80.2k|  static uint8_t t;
   58|  80.2k|  return v.empty() ? reinterpret_cast<const T*>(&t) : &v.front();
  ------------------
  |  Branch (58:10): [True: 0, False: 80.2k]
  ------------------
   59|  80.2k|}

_ZN11flexbuffers7BuilderC2EmNS_11BuilderFlagE:
 1044|  35.0k|      : buf_(initial_size),
 1045|  35.0k|        finished_(false),
 1046|  35.0k|        has_duplicate_keys_(false),
 1047|  35.0k|        flags_(flags),
 1048|  35.0k|        force_min_bit_width_(BIT_WIDTH_8),
 1049|  35.0k|        key_pool(KeyOffsetCompare(buf_)),
 1050|  35.0k|        string_pool(StringOffsetCompare(buf_)) {
 1051|  35.0k|    buf_.clear();
 1052|  35.0k|  }
_ZN11flexbuffers7Builder16KeyOffsetCompareC2ERKNSt3__16vectorIhNS2_9allocatorIhEEEE:
 1812|  35.0k|    explicit KeyOffsetCompare(const std::vector<uint8_t>& buf) : buf_(&buf) {}
_ZN11flexbuffers7Builder19StringOffsetCompareC2ERKNSt3__16vectorIhNS2_9allocatorIhEEEE:
 1824|  35.0k|        : buf_(&buf) {}
_ZN11flexbuffers9ReferenceC2Ev:
  407|  28.1k|      : data_(nullptr), parent_width_(0), byte_width_(0), type_(FBT_NULL) {}
_ZNK11flexbuffers7Builder9GetBufferEv:
 1061|  4.20k|  const std::vector<uint8_t>& GetBuffer() const {
 1062|  4.20k|    Finished();
 1063|  4.20k|    return buf_;
 1064|  4.20k|  }
_ZNK11flexbuffers7Builder7GetSizeEv:
 1067|  4.20k|  size_t GetSize() const { return buf_.size(); }
_ZN11flexbuffers7Builder4NullEv:
 1084|    390|  void Null() { stack_.push_back(Value()); }
_ZN11flexbuffers7Builder3IntEl:
 1090|   241k|  void Int(int64_t i) { stack_.push_back(Value(i, FBT_INT, WidthI(i))); }
_ZN11flexbuffers7Builder6DoubleEd:
 1108|  38.0k|  void Double(double f) { stack_.push_back(Value(f)); }
_ZN11flexbuffers7Builder4BoolEb:
 1114|  1.03k|  void Bool(bool b) { stack_.push_back(Value(b)); }
_ZN11flexbuffers7Builder3KeyEPKcm:
 1150|   251k|  size_t Key(const char* str, size_t len) {
 1151|   251k|    auto sloc = buf_.size();
 1152|   251k|    WriteBytes(str, len + 1);
 1153|   251k|    if (flags_ & BUILDER_FLAG_SHARE_KEYS) {
  ------------------
  |  Branch (1153:9): [True: 251k, False: 0]
  ------------------
 1154|   251k|      auto it = key_pool.find(sloc);
 1155|   251k|      if (it != key_pool.end()) {
  ------------------
  |  Branch (1155:11): [True: 204k, False: 47.1k]
  ------------------
 1156|       |        // Already in the buffer. Remove key we just serialized, and use
 1157|       |        // existing offset instead.
 1158|   204k|        buf_.resize(sloc);
 1159|   204k|        sloc = *it;
 1160|   204k|      } else {
 1161|  47.1k|        key_pool.insert(sloc);
 1162|  47.1k|      }
 1163|   251k|    }
 1164|   251k|    stack_.push_back(Value(static_cast<uint64_t>(sloc), FBT_KEY, BIT_WIDTH_8));
 1165|   251k|    return sloc;
 1166|   251k|  }
_ZN11flexbuffers7Builder3KeyERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 1169|   251k|  size_t Key(const std::string& str) { return Key(str.c_str(), str.size()); }
_ZN11flexbuffers7Builder6StringEPKcm:
 1171|  4.36k|  size_t String(const char* str, size_t len) {
 1172|  4.36k|    auto reset_to = buf_.size();
 1173|  4.36k|    auto sloc = CreateBlob(str, len, 1, FBT_STRING);
 1174|  4.36k|    if (flags_ & BUILDER_FLAG_SHARE_STRINGS) {
  ------------------
  |  Branch (1174:9): [True: 4.36k, False: 0]
  ------------------
 1175|  4.36k|      StringOffset so(sloc, len);
 1176|  4.36k|      auto it = string_pool.find(so);
 1177|  4.36k|      if (it != string_pool.end()) {
  ------------------
  |  Branch (1177:11): [True: 1.24k, False: 3.11k]
  ------------------
 1178|       |        // Already in the buffer. Remove string we just serialized, and use
 1179|       |        // existing offset instead.
 1180|  1.24k|        buf_.resize(reset_to);
 1181|  1.24k|        sloc = it->first;
 1182|  1.24k|        stack_.back().u_ = sloc;
 1183|  3.11k|      } else {
 1184|  3.11k|        string_pool.insert(so);
 1185|  3.11k|      }
 1186|  4.36k|    }
 1187|  4.36k|    return sloc;
 1188|  4.36k|  }
_ZN11flexbuffers7Builder6StringERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 1190|  4.36k|  size_t String(const std::string& str) {
 1191|  4.36k|    return String(str.c_str(), str.size());
 1192|  4.36k|  }
_ZN11flexbuffers7Builder11StartVectorEv:
 1239|  5.57k|  size_t StartVector() { return stack_.size(); }
_ZN11flexbuffers7Builder8StartMapEv:
 1244|  45.1k|  size_t StartMap() { return stack_.size(); }
_ZN11flexbuffers7Builder9EndVectorEmbb:
 1252|  4.71k|  size_t EndVector(size_t start, bool typed, bool fixed) {
 1253|  4.71k|    auto vec = CreateVector(start, stack_.size() - start, 1, typed, fixed);
 1254|       |    // Remove temp elements and return vector.
 1255|  4.71k|    stack_.resize(start);
 1256|  4.71k|    stack_.push_back(vec);
 1257|  4.71k|    return static_cast<size_t>(vec.u_);
 1258|  4.71k|  }
_ZN11flexbuffers7Builder6EndMapEm:
 1260|  44.2k|  size_t EndMap(size_t start) {
 1261|       |    // We should have interleaved keys and values on the stack.
 1262|  44.2k|    auto len = MapElementCount(start);
 1263|       |    // Make sure keys are all strings:
 1264|   290k|    for (auto key = start; key < stack_.size(); key += 2) {
  ------------------
  |  Branch (1264:28): [True: 246k, False: 44.2k]
  ------------------
 1265|   246k|      FLATBUFFERS_ASSERT(stack_[key].type_ == FBT_KEY);
 1266|   246k|    }
 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|  44.2k|    struct TwoValue {
 1270|  44.2k|      Value key;
 1271|  44.2k|      Value val;
 1272|  44.2k|    };
 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|  44.2k|    auto dict = reinterpret_cast<TwoValue*>(stack_.data() + start);
 1283|  44.2k|    std::sort(dict, dict + len,
 1284|  44.2k|              [&](const TwoValue& a, const TwoValue& b) -> bool {
 1285|  44.2k|                auto as = reinterpret_cast<const char*>(buf_.data() + a.key.u_);
 1286|  44.2k|                auto bs = reinterpret_cast<const char*>(buf_.data() + b.key.u_);
 1287|  44.2k|                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|  44.2k|                if (!comp && &a != &b) has_duplicate_keys_ = true;
 1298|  44.2k|                return comp < 0;
 1299|  44.2k|              });
 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|  44.2k|    auto keys = CreateVector(start, len, 2, true, false);
 1304|  44.2k|    auto vec = CreateVector(start + 1, len, 2, false, false, &keys);
 1305|       |    // Remove temp elements and return map.
 1306|  44.2k|    stack_.resize(start);
 1307|  44.2k|    stack_.push_back(vec);
 1308|  44.2k|    return static_cast<size_t>(vec.u_);
 1309|  44.2k|  }
_ZNK11flexbuffers7Builder16HasDuplicateKeysEv:
 1313|  44.2k|  bool HasDuplicateKeys() const { return has_duplicate_keys_; }
_ZN11flexbuffers7Builder15MapElementCountEm:
 1434|  44.2k|  size_t MapElementCount(size_t start) {
 1435|       |    // Make sure it is an even number:
 1436|  44.2k|    auto len = stack_.size() - start;
 1437|  44.2k|    FLATBUFFERS_ASSERT(!(len & 1));
 1438|  44.2k|    len /= 2;
 1439|  44.2k|    return len;
 1440|  44.2k|  }
_ZN11flexbuffers7Builder6FinishEv:
 1509|  4.20k|  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.20k|    FLATBUFFERS_ASSERT(stack_.size() == 1);
 1515|       |
 1516|       |    // Write root value.
 1517|  4.20k|    auto byte_width = Align(stack_[0].ElemWidth(buf_.size(), 0));
 1518|  4.20k|    WriteAny(stack_[0], byte_width);
 1519|       |    // Write root type.
 1520|  4.20k|    Write(stack_[0].StoredPackedType(), 1);
 1521|       |    // Write root size. Normally determined by parent, but root has no parent :)
 1522|  4.20k|    Write(byte_width, 1);
 1523|       |
 1524|  4.20k|    finished_ = true;
 1525|  4.20k|  }
_ZNK11flexbuffers7Builder8FinishedEv:
 1528|  4.20k|  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.20k|    FLATBUFFERS_ASSERT(finished_);
 1533|  4.20k|  }
_ZN11flexbuffers7Builder5AlignENS_8BitWidthE:
 1536|   101k|  uint8_t Align(BitWidth alignment) {
 1537|   101k|    auto byte_width = 1U << alignment;
 1538|   101k|    buf_.insert(buf_.end(), flatbuffers::PaddingBytes(buf_.size(), byte_width),
 1539|   101k|                0);
 1540|   101k|    return static_cast<uint8_t>(byte_width);
 1541|   101k|  }
_ZN11flexbuffers7Builder10WriteBytesEPKvm:
 1543|  1.01M|  void WriteBytes(const void* val, size_t size) {
 1544|  1.01M|    buf_.insert(buf_.end(), reinterpret_cast<const uint8_t*>(val),
 1545|  1.01M|                reinterpret_cast<const uint8_t*>(val) + size);
 1546|  1.01M|  }
_ZN11flexbuffers7Builder11WriteDoubleEdh:
 1555|  35.4k|  void WriteDouble(double f, uint8_t byte_width) {
 1556|  35.4k|    switch (byte_width) {
 1557|  32.7k|      case 8:
  ------------------
  |  Branch (1557:7): [True: 32.7k, False: 2.77k]
  ------------------
 1558|  32.7k|        Write(f, byte_width);
 1559|  32.7k|        break;
 1560|  2.77k|      case 4:
  ------------------
  |  Branch (1560:7): [True: 2.77k, False: 32.7k]
  ------------------
 1561|  2.77k|        Write(static_cast<float>(f), byte_width);
 1562|  2.77k|        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: 35.4k]
  ------------------
 1566|      0|        FLATBUFFERS_ASSERT(0);
 1567|  35.4k|    }
 1568|  35.4k|  }
_ZN11flexbuffers7Builder11WriteOffsetEmh:
 1570|   333k|  void WriteOffset(uint64_t o, uint8_t byte_width) {
 1571|   333k|    auto reloff = buf_.size() - o;
 1572|   333k|    FLATBUFFERS_ASSERT(byte_width == 8 || reloff < 1ULL << (byte_width * 8));
 1573|   333k|    Write(reloff, byte_width);
 1574|   333k|  }
_ZN11flexbuffers7Builder5ValueC2Ev:
 1623|    390|    Value() : i_(0), type_(FBT_NULL), min_bit_width_(BIT_WIDTH_8) {}
_ZN11flexbuffers7Builder5ValueC2Eb:
 1626|  1.03k|        : u_(static_cast<uint64_t>(b)),
 1627|  1.03k|          type_(FBT_BOOL),
 1628|  1.03k|          min_bit_width_(BIT_WIDTH_8) {}
_ZN11flexbuffers7Builder5ValueC2ElNS_4TypeENS_8BitWidthE:
 1631|   241k|        : i_(i), type_(t), min_bit_width_(bw) {}
_ZN11flexbuffers7Builder5ValueC2EmNS_4TypeENS_8BitWidthE:
 1633|   349k|        : u_(u), type_(t), min_bit_width_(bw) {}
_ZN11flexbuffers7Builder5ValueC2Ed:
 1639|  38.0k|    Value(double f) : f_(f), type_(FBT_FLOAT), min_bit_width_(WidthF(f)) {}
_ZNK11flexbuffers7Builder5Value16StoredPackedTypeENS_8BitWidthE:
 1641|   315k|    uint8_t StoredPackedType(BitWidth parent_bit_width_ = BIT_WIDTH_8) const {
 1642|   315k|      return PackedType(StoredWidth(parent_bit_width_), type_);
 1643|   315k|    }
_ZNK11flexbuffers7Builder5Value9ElemWidthEmm:
 1645|   606k|    BitWidth ElemWidth(size_t buf_size, size_t elem_index) const {
 1646|   606k|      if (IsInline(type_)) {
  ------------------
  |  Branch (1646:11): [True: 273k, False: 333k]
  ------------------
 1647|   273k|        return min_bit_width_;
 1648|   333k|      } 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|   333k|        for (size_t byte_width = 1;
 1655|   527k|             byte_width <= sizeof(flatbuffers::largest_scalar_t);
  ------------------
  |  Branch (1655:14): [True: 527k, False: 0]
  ------------------
 1656|   527k|             byte_width *= 2) {
 1657|       |          // Where are we going to write this offset?
 1658|   527k|          auto offset_loc = buf_size +
 1659|   527k|                            flatbuffers::PaddingBytes(buf_size, byte_width) +
 1660|   527k|                            elem_index * byte_width;
 1661|       |          // Compute relative offset.
 1662|   527k|          auto offset = offset_loc - u_;
 1663|       |          // Does it fit?
 1664|   527k|          auto bit_width = WidthU(offset);
 1665|   527k|          if (static_cast<size_t>(static_cast<size_t>(1U) << bit_width) ==
  ------------------
  |  Branch (1665:15): [True: 333k, False: 194k]
  ------------------
 1666|   527k|              byte_width)
 1667|   333k|            return bit_width;
 1668|   527k|        }
 1669|      0|        FLATBUFFERS_ASSERT(false);  // Must match one of the sizes above.
 1670|      0|        return BIT_WIDTH_64;
 1671|      0|      }
 1672|   606k|    }
_ZNK11flexbuffers7Builder5Value11StoredWidthENS_8BitWidthE:
 1674|   315k|    BitWidth StoredWidth(BitWidth parent_bit_width_ = BIT_WIDTH_8) const {
 1675|   315k|      if (IsInline(type_)) {
  ------------------
  |  Branch (1675:11): [True: 273k, False: 42.5k]
  ------------------
 1676|   273k|        return (std::max)(min_bit_width_, parent_bit_width_);
 1677|   273k|      } else {
 1678|  42.5k|        return min_bit_width_;
 1679|  42.5k|      }
 1680|   315k|    }
_ZN11flexbuffers7Builder8WriteAnyERKNS0_5ValueEh:
 1684|   562k|  void WriteAny(const Value& val, uint8_t byte_width) {
 1685|   562k|    switch (val.type_) {
 1686|    228|      case FBT_NULL:
  ------------------
  |  Branch (1686:7): [True: 228, False: 561k]
  ------------------
 1687|   236k|      case FBT_INT:
  ------------------
  |  Branch (1687:7): [True: 236k, False: 325k]
  ------------------
 1688|   236k|        Write(val.i_, byte_width);
 1689|   236k|        break;
 1690|    652|      case FBT_BOOL:
  ------------------
  |  Branch (1690:7): [True: 652, False: 561k]
  ------------------
 1691|    652|      case FBT_UINT:
  ------------------
  |  Branch (1691:7): [True: 0, False: 562k]
  ------------------
 1692|    652|        Write(val.u_, byte_width);
 1693|    652|        break;
 1694|  35.4k|      case FBT_FLOAT:
  ------------------
  |  Branch (1694:7): [True: 35.4k, False: 526k]
  ------------------
 1695|  35.4k|        WriteDouble(val.f_, byte_width);
 1696|  35.4k|        break;
 1697|   288k|      default:
  ------------------
  |  Branch (1697:7): [True: 288k, False: 273k]
  ------------------
 1698|   288k|        WriteOffset(val.u_, byte_width);
 1699|   288k|        break;
 1700|   562k|    }
 1701|   562k|  }
_ZN11flexbuffers7Builder10CreateBlobEPKvmmNS_4TypeE:
 1703|  4.36k|  size_t CreateBlob(const void* data, size_t len, size_t trailing, Type type) {
 1704|  4.36k|    auto bit_width = WidthU(len);
 1705|  4.36k|    return CreateAlignedBlob(data, len, trailing, type, bit_width);
 1706|  4.36k|  }
_ZN11flexbuffers7Builder17CreateAlignedBlobEPKvmmNS_4TypeENS_8BitWidthE:
 1709|  4.36k|                           Type type, BitWidth alignment) {
 1710|  4.36k|    auto byte_width = Align(alignment);
 1711|  4.36k|    Write<uint64_t>(len, byte_width);
 1712|  4.36k|    auto sloc = buf_.size();
 1713|  4.36k|    WriteBytes(data, len + trailing);
 1714|  4.36k|    stack_.push_back(Value(static_cast<uint64_t>(sloc), type, alignment));
 1715|  4.36k|    return sloc;
 1716|  4.36k|  }
_ZN11flexbuffers7Builder12CreateVectorEmmmbbPKNS0_5ValueE:
 1740|  93.2k|                     bool fixed, const Value* keys = nullptr) {
 1741|  93.2k|    FLATBUFFERS_ASSERT(
 1742|  93.2k|        !fixed ||
 1743|  93.2k|        typed);  // typed=false, fixed=true combination is not supported.
 1744|       |    // Figure out smallest bit width we can store this vector with.
 1745|  93.2k|    auto bit_width = (std::max)(force_min_bit_width_, WidthU(vec_len));
 1746|  93.2k|    auto prefix_elems = 1;
 1747|  93.2k|    if (keys) {
  ------------------
  |  Branch (1747:9): [True: 44.2k, False: 48.9k]
  ------------------
 1748|       |      // If this vector is part of a map, we will pre-fix an offset to the keys
 1749|       |      // to this vector.
 1750|  44.2k|      bit_width = (std::max)(bit_width, keys->ElemWidth(buf_.size(), 0));
 1751|  44.2k|      prefix_elems += 2;
 1752|  44.2k|    }
 1753|  93.2k|    Type vector_type = FBT_KEY;
 1754|       |    // Check bit widths and types for all elements.
 1755|   651k|    for (size_t i = start; i < stack_.size(); i += step) {
  ------------------
  |  Branch (1755:28): [True: 557k, False: 93.2k]
  ------------------
 1756|   557k|      auto elem_width =
 1757|   557k|          stack_[i].ElemWidth(buf_.size(), i - start + prefix_elems);
 1758|   557k|      bit_width = (std::max)(bit_width, elem_width);
 1759|   557k|      if (typed) {
  ------------------
  |  Branch (1759:11): [True: 246k, False: 311k]
  ------------------
 1760|   246k|        if (i == start) {
  ------------------
  |  Branch (1760:13): [True: 42.9k, False: 203k]
  ------------------
 1761|  42.9k|          vector_type = stack_[i].type_;
 1762|   203k|        } else {
 1763|       |          // If you get this assert, you are writing a typed vector with
 1764|       |          // elements that are not all the same type.
 1765|   203k|          FLATBUFFERS_ASSERT(vector_type == stack_[i].type_);
 1766|   203k|        }
 1767|   246k|      }
 1768|   557k|    }
 1769|       |    // If you get this assert, your typed types are not one of:
 1770|       |    // Int / UInt / Float / Key.
 1771|  93.2k|    FLATBUFFERS_ASSERT(!typed || IsTypedVectorElementType(vector_type));
 1772|  93.2k|    auto byte_width = Align(bit_width);
 1773|       |    // Write vector. First the keys width/offset if available, and size.
 1774|  93.2k|    if (keys) {
  ------------------
  |  Branch (1774:9): [True: 44.2k, False: 48.9k]
  ------------------
 1775|  44.2k|      WriteOffset(keys->u_, byte_width);
 1776|  44.2k|      Write<uint64_t>(1ULL << keys->min_bit_width_, byte_width);
 1777|  44.2k|    }
 1778|  93.2k|    if (!fixed) Write<uint64_t>(vec_len, byte_width);
  ------------------
  |  Branch (1778:9): [True: 93.2k, False: 0]
  ------------------
 1779|       |    // Then the actual data.
 1780|  93.2k|    auto vloc = buf_.size();
 1781|   651k|    for (size_t i = start; i < stack_.size(); i += step) {
  ------------------
  |  Branch (1781:28): [True: 557k, False: 93.2k]
  ------------------
 1782|   557k|      WriteAny(stack_[i], byte_width);
 1783|   557k|    }
 1784|       |    // Then the types.
 1785|  93.2k|    if (!typed) {
  ------------------
  |  Branch (1785:9): [True: 48.9k, False: 44.2k]
  ------------------
 1786|   360k|      for (size_t i = start; i < stack_.size(); i += step) {
  ------------------
  |  Branch (1786:30): [True: 311k, False: 48.9k]
  ------------------
 1787|   311k|        buf_.push_back(stack_[i].StoredPackedType(bit_width));
 1788|   311k|      }
 1789|  48.9k|    }
 1790|  93.2k|    return Value(static_cast<uint64_t>(vloc),
 1791|  93.2k|                 keys ? FBT_MAP
  ------------------
  |  Branch (1791:18): [True: 44.2k, False: 48.9k]
  ------------------
 1792|  93.2k|                      : (typed ? ToTypedVector(vector_type, fixed ? vec_len : 0)
  ------------------
  |  Branch (1792:26): [True: 44.2k, False: 4.71k]
  |  Branch (1792:61): [True: 0, False: 44.2k]
  ------------------
 1793|  48.9k|                               : FBT_VECTOR),
 1794|  93.2k|                 bit_width);
 1795|  93.2k|  }
_ZNK11flexbuffers7Builder16KeyOffsetCompareclEmm:
 1813|  1.61M|    bool operator()(size_t a, size_t b) const {
 1814|  1.61M|      auto stra = reinterpret_cast<const char*>(buf_->data() + a);
 1815|  1.61M|      auto strb = reinterpret_cast<const char*>(buf_->data() + b);
 1816|  1.61M|      return strcmp(stra, strb) < 0;
 1817|  1.61M|    }
_ZNK11flexbuffers7Builder19StringOffsetCompareclERKNSt3__14pairImmEES6_:
 1825|  22.2k|    bool operator()(const StringOffset& a, const StringOffset& b) const {
 1826|  22.2k|      auto stra = buf_->data() + a.first;
 1827|  22.2k|      auto strb = buf_->data() + b.first;
 1828|  22.2k|      auto cr = memcmp(stra, strb, (std::min)(a.second, b.second) + 1);
 1829|  22.2k|      return cr < 0 || (cr == 0 && a.second < b.second);
  ------------------
  |  Branch (1829:14): [True: 12.4k, False: 9.74k]
  |  Branch (1829:25): [True: 2.59k, False: 7.15k]
  |  Branch (1829:36): [True: 73, False: 2.52k]
  ------------------
 1830|  22.2k|    }
_ZN11flexbuffers8IsInlineENS_4TypeE:
   89|   921k|inline bool IsInline(Type t) { return t <= FBT_FLOAT || t == FBT_BOOL; }
  ------------------
  |  Branch (89:39): [True: 544k, False: 377k]
  |  Branch (89:57): [True: 1.30k, False: 375k]
  ------------------
_ZN11flexbuffers24IsTypedVectorElementTypeENS_4TypeE:
   91|  88.5k|inline bool IsTypedVectorElementType(Type t) {
   92|  88.5k|  return (t >= FBT_INT && t <= FBT_STRING) || t == FBT_BOOL;
  ------------------
  |  Branch (92:11): [True: 88.5k, False: 0]
  |  Branch (92:27): [True: 88.5k, False: 0]
  |  Branch (92:47): [True: 0, False: 0]
  ------------------
   93|  88.5k|}
_ZN11flexbuffers13ToTypedVectorENS_4TypeEm:
  104|  44.2k|inline Type ToTypedVector(Type t, size_t fixed_len = 0) {
  105|  44.2k|  FLATBUFFERS_ASSERT(IsTypedVectorElementType(t));
  106|  44.2k|  switch (fixed_len) {
  107|  44.2k|    case 0:
  ------------------
  |  Branch (107:5): [True: 44.2k, False: 0]
  ------------------
  108|  44.2k|      return static_cast<Type>(t - FBT_INT + FBT_VECTOR_INT);
  109|      0|    case 2:
  ------------------
  |  Branch (109:5): [True: 0, False: 44.2k]
  ------------------
  110|      0|      return static_cast<Type>(t - FBT_INT + FBT_VECTOR_INT2);
  111|      0|    case 3:
  ------------------
  |  Branch (111:5): [True: 0, False: 44.2k]
  ------------------
  112|      0|      return static_cast<Type>(t - FBT_INT + FBT_VECTOR_INT3);
  113|      0|    case 4:
  ------------------
  |  Branch (113:5): [True: 0, False: 44.2k]
  ------------------
  114|      0|      return static_cast<Type>(t - FBT_INT + FBT_VECTOR_INT4);
  115|      0|    default:
  ------------------
  |  Branch (115:5): [True: 0, False: 44.2k]
  ------------------
  116|      0|      FLATBUFFERS_ASSERT(0);
  117|      0|      return FBT_NULL;
  118|  44.2k|  }
  119|  44.2k|}
_ZN11flexbuffers6WidthUEm:
  195|   866k|inline BitWidth WidthU(uint64_t u) {
  196|   866k|#define FLATBUFFERS_GET_FIELD_BIT_WIDTH(value, width)                   \
  197|   866k|  {                                                                     \
  198|   866k|    if (!((u) & ~((1ULL << (width)) - 1ULL))) return BIT_WIDTH_##width; \
  199|   866k|  }
  200|   866k|  FLATBUFFERS_GET_FIELD_BIT_WIDTH(u, 8);
  ------------------
  |  |  197|   866k|  {                                                                     \
  |  |  198|   866k|    if (!((u) & ~((1ULL << (width)) - 1ULL))) return BIT_WIDTH_##width; \
  |  |  ------------------
  |  |  |  Branch (198:9): [True: 474k, False: 391k]
  |  |  ------------------
  |  |  199|   866k|  }
  ------------------
  201|   391k|  FLATBUFFERS_GET_FIELD_BIT_WIDTH(u, 16);
  ------------------
  |  |  197|   391k|  {                                                                     \
  |  |  198|   391k|    if (!((u) & ~((1ULL << (width)) - 1ULL))) return BIT_WIDTH_##width; \
  |  |  ------------------
  |  |  |  Branch (198:9): [True: 385k, False: 6.05k]
  |  |  ------------------
  |  |  199|   391k|  }
  ------------------
  202|  6.05k|  FLATBUFFERS_GET_FIELD_BIT_WIDTH(u, 32);
  ------------------
  |  |  197|  6.05k|  {                                                                     \
  |  |  198|  6.05k|    if (!((u) & ~((1ULL << (width)) - 1ULL))) return BIT_WIDTH_##width; \
  |  |  ------------------
  |  |  |  Branch (198:9): [True: 5.44k, False: 615]
  |  |  ------------------
  |  |  199|  6.05k|  }
  ------------------
  203|    615|#undef FLATBUFFERS_GET_FIELD_BIT_WIDTH
  204|    615|  return BIT_WIDTH_64;
  205|  6.05k|}
_ZN11flexbuffers6WidthIEl:
  207|   241k|inline BitWidth WidthI(int64_t i) {
  208|   241k|  auto u = static_cast<uint64_t>(i) << 1;
  209|   241k|  return WidthU(i >= 0 ? u : ~u);
  ------------------
  |  Branch (209:17): [True: 239k, False: 1.11k]
  ------------------
  210|   241k|}
_ZN11flexbuffers6WidthFEd:
  212|  38.0k|inline BitWidth WidthF(double f) {
  213|  38.0k|  return static_cast<double>(static_cast<float>(f)) == f ? BIT_WIDTH_32
  ------------------
  |  Branch (213:10): [True: 5.06k, False: 32.9k]
  ------------------
  214|  38.0k|                                                         : BIT_WIDTH_64;
  215|  38.0k|}
_ZN11flexbuffers10PackedTypeENS_8BitWidthENS_4TypeE:
  933|   315k|inline uint8_t PackedType(BitWidth bit_width, Type type) {
  934|   315k|  return static_cast<uint8_t>(bit_width | (type << 2));
  935|   315k|}
_ZN11flexbuffers7Builder5WriteIhEEvT_m:
 1549|  8.40k|  void Write(T val, size_t byte_width) {
 1550|  8.40k|    FLATBUFFERS_ASSERT(sizeof(T) >= byte_width);
 1551|  8.40k|    val = flatbuffers::EndianScalar(val);
 1552|  8.40k|    WriteBytes(&val, byte_width);
 1553|  8.40k|  }
_ZN11flexbuffers7Builder5WriteIdEEvT_m:
 1549|  32.7k|  void Write(T val, size_t byte_width) {
 1550|  32.7k|    FLATBUFFERS_ASSERT(sizeof(T) >= byte_width);
 1551|  32.7k|    val = flatbuffers::EndianScalar(val);
 1552|  32.7k|    WriteBytes(&val, byte_width);
 1553|  32.7k|  }
_ZN11flexbuffers7Builder5WriteIfEEvT_m:
 1549|  2.77k|  void Write(T val, size_t byte_width) {
 1550|  2.77k|    FLATBUFFERS_ASSERT(sizeof(T) >= byte_width);
 1551|  2.77k|    val = flatbuffers::EndianScalar(val);
 1552|  2.77k|    WriteBytes(&val, byte_width);
 1553|  2.77k|  }
_ZN11flexbuffers7Builder5WriteImEEvT_m:
 1549|   475k|  void Write(T val, size_t byte_width) {
 1550|   475k|    FLATBUFFERS_ASSERT(sizeof(T) >= byte_width);
 1551|   475k|    val = flatbuffers::EndianScalar(val);
 1552|   475k|    WriteBytes(&val, byte_width);
 1553|   475k|  }
_ZN11flexbuffers7Builder5WriteIlEEvT_m:
 1549|   236k|  void Write(T val, size_t byte_width) {
 1550|   236k|    FLATBUFFERS_ASSERT(sizeof(T) >= byte_width);
 1551|   236k|    val = flatbuffers::EndianScalar(val);
 1552|   236k|    WriteBytes(&val, byte_width);
 1553|   236k|  }
_ZZN11flexbuffers7Builder6EndMapEmENKUlRKZNS0_6EndMapEmE8TwoValueS3_E_clES3_S3_:
 1284|  2.49M|              [&](const TwoValue& a, const TwoValue& b) -> bool {
 1285|  2.49M|                auto as = reinterpret_cast<const char*>(buf_.data() + a.key.u_);
 1286|  2.49M|                auto bs = reinterpret_cast<const char*>(buf_.data() + b.key.u_);
 1287|  2.49M|                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.49M|                if (!comp && &a != &b) has_duplicate_keys_ = true;
  ------------------
  |  Branch (1297:21): [True: 1.21M, False: 1.28M]
  |  Branch (1297:30): [True: 1.21M, False: 0]
  ------------------
 1298|  2.49M|                return comp < 0;
 1299|  2.49M|              });

_ZN11flatbuffers18FindHashFunction16EPKc:
  101|     62|    const char* name) {
  102|     62|  std::size_t size = sizeof(kHashFunctions16) / sizeof(kHashFunctions16[0]);
  103|    152|  for (std::size_t i = 0; i < size; ++i) {
  ------------------
  |  Branch (103:27): [True: 110, False: 42]
  ------------------
  104|    110|    if (std::strcmp(name, kHashFunctions16[i].name) == 0) {
  ------------------
  |  Branch (104:9): [True: 20, False: 90]
  ------------------
  105|     20|      return kHashFunctions16[i].function;
  106|     20|    }
  107|    110|  }
  108|     42|  return nullptr;
  109|     62|}
_ZN11flatbuffers18FindHashFunction32EPKc:
  112|  1.56k|    const char* name) {
  113|  1.56k|  std::size_t size = sizeof(kHashFunctions32) / sizeof(kHashFunctions32[0]);
  114|  2.26k|  for (std::size_t i = 0; i < size; ++i) {
  ------------------
  |  Branch (114:27): [True: 2.19k, False: 66]
  ------------------
  115|  2.19k|    if (std::strcmp(name, kHashFunctions32[i].name) == 0) {
  ------------------
  |  Branch (115:9): [True: 1.50k, False: 695]
  ------------------
  116|  1.50k|      return kHashFunctions32[i].function;
  117|  1.50k|    }
  118|  2.19k|  }
  119|     66|  return nullptr;
  120|  1.56k|}
_ZN11flatbuffers18FindHashFunction64EPKc:
  123|  1.91k|    const char* name) {
  124|  1.91k|  std::size_t size = sizeof(kHashFunctions64) / sizeof(kHashFunctions64[0]);
  125|  2.81k|  for (std::size_t i = 0; i < size; ++i) {
  ------------------
  |  Branch (125:27): [True: 2.76k, False: 55]
  ------------------
  126|  2.76k|    if (std::strcmp(name, kHashFunctions64[i].name) == 0) {
  ------------------
  |  Branch (126:9): [True: 1.85k, False: 905]
  ------------------
  127|  1.85k|      return kHashFunctions64[i].function;
  128|  1.85k|    }
  129|  2.76k|  }
  130|     55|  return nullptr;
  131|  1.91k|}
_ZN11flatbuffers8HashFnv1IjEET_PKc:
   46|    882|T HashFnv1(const char* input) {
   47|    882|  T hash = FnvTraits<T>::kOffsetBasis;
   48|  1.78k|  for (const char* c = input; *c; ++c) {
  ------------------
  |  Branch (48:31): [True: 901, False: 882]
  ------------------
   49|    901|    hash *= FnvTraits<T>::kFnvPrime;
   50|    901|    hash ^= static_cast<unsigned char>(*c);
   51|    901|  }
   52|    882|  return hash;
   53|    882|}
_ZN11flatbuffers9HashFnv1aIjEET_PKc:
   56|    515|T HashFnv1a(const char* input) {
   57|    515|  T hash = FnvTraits<T>::kOffsetBasis;
   58|  1.37k|  for (const char* c = input; *c; ++c) {
  ------------------
  |  Branch (58:31): [True: 855, False: 515]
  ------------------
   59|    855|    hash ^= static_cast<unsigned char>(*c);
   60|    855|    hash *= FnvTraits<T>::kFnvPrime;
   61|    855|  }
   62|    515|  return hash;
   63|    515|}
_ZN11flatbuffers8HashFnv1ImEET_PKc:
   46|    977|T HashFnv1(const char* input) {
   47|    977|  T hash = FnvTraits<T>::kOffsetBasis;
   48|  2.14k|  for (const char* c = input; *c; ++c) {
  ------------------
  |  Branch (48:31): [True: 1.16k, False: 977]
  ------------------
   49|  1.16k|    hash *= FnvTraits<T>::kFnvPrime;
   50|  1.16k|    hash ^= static_cast<unsigned char>(*c);
   51|  1.16k|  }
   52|    977|  return hash;
   53|    977|}
_ZN11flatbuffers9HashFnv1aImEET_PKc:
   56|    941|T HashFnv1a(const char* input) {
   57|    941|  T hash = FnvTraits<T>::kOffsetBasis;
   58|   150k|  for (const char* c = input; *c; ++c) {
  ------------------
  |  Branch (58:31): [True: 150k, False: 941]
  ------------------
   59|   150k|    hash ^= static_cast<unsigned char>(*c);
   60|   150k|    hash *= FnvTraits<T>::kFnvPrime;
   61|   150k|  }
   62|    941|  return hash;
   63|    941|}

_ZN11flatbuffers10IDLOptionsC2Ev:
  811|  28.1k|      : gen_jvmstatic(false),
  812|  28.1k|        use_flexbuffers(false),
  813|  28.1k|        strict_json(false),
  814|  28.1k|        output_default_scalars_in_json(false),
  815|  28.1k|        indent_step(2),
  816|  28.1k|        cpp_minify_enums(false),
  817|  28.1k|        output_enum_identifiers(true),
  818|  28.1k|        prefixed_enums(true),
  819|  28.1k|        scoped_enums(false),
  820|  28.1k|        emit_min_max_enum_values(true),
  821|  28.1k|        swift_implementation_only(false),
  822|  28.1k|        include_dependence_headers(true),
  823|  28.1k|        mutable_buffer(false),
  824|  28.1k|        one_file(false),
  825|  28.1k|        proto_mode(false),
  826|  28.1k|        proto_oneof_union(false),
  827|  28.1k|        generate_all(false),
  828|  28.1k|        skip_unexpected_fields_in_json(false),
  829|  28.1k|        generate_name_strings(false),
  830|  28.1k|        generate_object_based_api(false),
  831|  28.1k|        gen_compare(false),
  832|  28.1k|        gen_absl_hash(false),
  833|  28.1k|        cpp_object_api_pointer_type("std::unique_ptr"),
  834|  28.1k|        cpp_object_api_string_flexible_constructor(false),
  835|  28.1k|        cpp_object_api_field_case_style(CaseStyle_Unchanged),
  836|  28.1k|        cpp_direct_copy(true),
  837|  28.1k|        gen_nullable(false),
  838|  28.1k|        java_checkerframework(false),
  839|  28.1k|        gen_generated(false),
  840|  28.1k|        gen_json_coders(false),
  841|  28.1k|        object_suffix("T"),
  842|  28.1k|        union_value_namespacing(true),
  843|  28.1k|        allow_non_utf8(false),
  844|  28.1k|        natural_utf8(false),
  845|  28.1k|        keep_prefix(false),
  846|  28.1k|        binary_schema_comments(false),
  847|  28.1k|        binary_schema_builtins(false),
  848|  28.1k|        binary_schema_gen_embed(false),
  849|  28.1k|        binary_schema_absolute_paths(false),
  850|  28.1k|        protobuf_ascii_alike(false),
  851|  28.1k|        size_prefixed(false),
  852|  28.1k|        force_defaults(false),
  853|  28.1k|        java_primitive_has_method(false),
  854|  28.1k|        cs_gen_json_serializer(false),
  855|  28.1k|        cpp_static_reflection(false),
  856|  28.1k|        filename_suffix("_generated"),
  857|  28.1k|        filename_extension(),
  858|  28.1k|        no_warnings(false),
  859|  28.1k|        warnings_as_errors(false),
  860|  28.1k|        project_root(""),
  861|  28.1k|        cs_global_alias(false),
  862|  28.1k|        json_nested_flatbuffers(true),
  863|  28.1k|        json_nested_flexbuffers(true),
  864|  28.1k|        json_nested_legacy_flatbuffers(false),
  865|  28.1k|        ts_no_import_ext(false),
  866|  28.1k|        no_leak_private_annotations(false),
  867|  28.1k|        require_json_eof(true),
  868|  28.1k|        keep_proto_id(false),
  869|  28.1k|        python_no_type_prefix_suffix(false),
  870|  28.1k|        python_typing(false),
  871|  28.1k|        python_gen_numpy(true),
  872|  28.1k|        ts_omit_entrypoint(false),
  873|  28.1k|        ts_undefined_for_optionals(false),
  874|  28.1k|        proto_id_gap_action(ProtoIdGapAction::WARNING),
  875|  28.1k|        mini_reflect(IDLOptions::kNone),
  876|  28.1k|        require_explicit_ids(false),
  877|  28.1k|        rust_serialize(false),
  878|  28.1k|        rust_module_root_file(false),
  879|  28.1k|        lang_to_generate(0),
  880|  28.1k|        set_empty_strings_to_null(true),
  881|  28.1k|        set_empty_vectors_to_null(true),
  882|  28.1k|        grpc_filename_suffix(".fb"),
  883|  28.1k|        grpc_use_system_headers(true),
  884|  28.1k|        grpc_callback_api(false),
  885|  28.1k|        grpc_python_typed_handlers(false) {}
_ZN11flatbuffers6ParserC2ERKNS_10IDLOptionsE:
  979|  28.1k|      : current_namespace_(nullptr),
  980|  28.1k|        empty_namespace_(nullptr),
  981|  28.1k|        flex_builder_(256, flexbuffers::BUILDER_FLAG_SHARE_ALL),
  982|  28.1k|        root_struct_def_(nullptr),
  983|  28.1k|        opts(options),
  984|  28.1k|        uses_flexbuffers_(false),
  985|  28.1k|        has_warning_(false),
  986|  28.1k|        advanced_features_(0),
  987|  28.1k|        source_(nullptr),
  988|  28.1k|        anonymous_counter_(0),
  989|  28.1k|        parse_depth_counter_(0) {
  990|  28.1k|    if (opts.force_defaults) {
  ------------------
  |  Branch (990:9): [True: 0, False: 28.1k]
  ------------------
  991|      0|      builder_.ForceDefaults(true);
  992|      0|    }
  993|       |    // Start out with the empty namespace being current.
  994|  28.1k|    empty_namespace_ = new Namespace();
  995|  28.1k|    namespaces_.push_back(empty_namespace_);
  996|  28.1k|    current_namespace_ = empty_namespace_;
  997|  28.1k|    known_attributes_["deprecated"] = true;
  998|  28.1k|    known_attributes_["required"] = true;
  999|  28.1k|    known_attributes_["key"] = true;
 1000|  28.1k|    known_attributes_["shared"] = true;
 1001|  28.1k|    known_attributes_["hash"] = true;
 1002|  28.1k|    known_attributes_["id"] = true;
 1003|  28.1k|    known_attributes_["force_align"] = true;
 1004|  28.1k|    known_attributes_["bit_flags"] = true;
 1005|  28.1k|    known_attributes_["original_order"] = true;
 1006|  28.1k|    known_attributes_["nested_flatbuffer"] = true;
 1007|  28.1k|    known_attributes_["csharp_partial"] = true;
 1008|  28.1k|    known_attributes_["streaming"] = true;
 1009|  28.1k|    known_attributes_["idempotent"] = true;
 1010|  28.1k|    known_attributes_["cpp_type"] = true;
 1011|  28.1k|    known_attributes_["cpp_ptr_type"] = true;
 1012|  28.1k|    known_attributes_["cpp_ptr_type_get"] = true;
 1013|  28.1k|    known_attributes_["cpp_str_type"] = true;
 1014|  28.1k|    known_attributes_["cpp_str_flex_ctor"] = true;
 1015|  28.1k|    known_attributes_["native_inline"] = true;
 1016|  28.1k|    known_attributes_["native_custom_alloc"] = true;
 1017|  28.1k|    known_attributes_["native_type"] = true;
 1018|  28.1k|    known_attributes_["native_type_pack_name"] = true;
 1019|  28.1k|    known_attributes_["native_default"] = true;
 1020|  28.1k|    known_attributes_["flexbuffer"] = true;
 1021|  28.1k|    known_attributes_["private"] = true;
 1022|       |
 1023|       |    // An attribute added to a field to indicate that is uses 64-bit addressing.
 1024|  28.1k|    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|  28.1k|    known_attributes_["vector64"] = true;
 1029|  28.1k|  }
_ZN11flatbuffers11ParserStateC2Ev:
  891|  28.1k|      : prev_cursor_(nullptr),
  892|  28.1k|        cursor_(nullptr),
  893|  28.1k|        line_start_(nullptr),
  894|  28.1k|        line_(0),
  895|  28.1k|        token_(-1),
  896|  28.1k|        attr_is_trivial_ascii_string_(true) {}
_ZN11flatbuffers9NamespaceC2Ev:
  278|  48.3k|  Namespace() : from_table(0) {}
_ZN11flatbuffers11SymbolTableINS_10ServiceDefEED2Ev:
  241|  28.1k|  ~SymbolTable() {
  242|  30.6k|    for (auto it = vec.begin(); it != vec.end(); ++it) {
  ------------------
  |  Branch (242:33): [True: 2.48k, False: 28.1k]
  ------------------
  243|  2.48k|      delete *it;
  244|  2.48k|    }
  245|  28.1k|  }
_ZN11flatbuffers11SymbolTableINS_7RPCCallEED2Ev:
  241|  2.48k|  ~SymbolTable() {
  242|  9.14k|    for (auto it = vec.begin(); it != vec.end(); ++it) {
  ------------------
  |  Branch (242:33): [True: 6.66k, False: 2.48k]
  ------------------
  243|  6.66k|      delete *it;
  244|  6.66k|    }
  245|  2.48k|  }
_ZN11flatbuffers11SymbolTableINS_5ValueEED2Ev:
  241|   973k|  ~SymbolTable() {
  242|   994k|    for (auto it = vec.begin(); it != vec.end(); ++it) {
  ------------------
  |  Branch (242:33): [True: 21.1k, False: 973k]
  ------------------
  243|  21.1k|      delete *it;
  244|  21.1k|    }
  245|   973k|  }
_ZN11flatbuffers11SymbolTableINS_7EnumDefEED2Ev:
  241|  28.1k|  ~SymbolTable() {
  242|   134k|    for (auto it = vec.begin(); it != vec.end(); ++it) {
  ------------------
  |  Branch (242:33): [True: 106k, False: 28.1k]
  ------------------
  243|   106k|      delete *it;
  244|   106k|    }
  245|  28.1k|  }
_ZN11flatbuffers11SymbolTableINS_7EnumValEED2Ev:
  241|   106k|  ~SymbolTable() {
  242|   654k|    for (auto it = vec.begin(); it != vec.end(); ++it) {
  ------------------
  |  Branch (242:33): [True: 548k, False: 106k]
  ------------------
  243|   548k|      delete *it;
  244|   548k|    }
  245|   106k|  }
_ZN11flatbuffers11SymbolTableINS_9StructDefEED2Ev:
  241|  28.1k|  ~SymbolTable() {
  242|   256k|    for (auto it = vec.begin(); it != vec.end(); ++it) {
  ------------------
  |  Branch (242:33): [True: 228k, False: 28.1k]
  ------------------
  243|   228k|      delete *it;
  244|   228k|    }
  245|  28.1k|  }
_ZN11flatbuffers11SymbolTableINS_8FieldDefEED2Ev:
  241|   228k|  ~SymbolTable() {
  242|   307k|    for (auto it = vec.begin(); it != vec.end(); ++it) {
  ------------------
  |  Branch (242:33): [True: 79.0k, False: 228k]
  ------------------
  243|  79.0k|      delete *it;
  244|  79.0k|    }
  245|   228k|  }
_ZN11flatbuffers11SymbolTableINS_4TypeEED2Ev:
  241|  28.1k|  ~SymbolTable() {
  242|   200k|    for (auto it = vec.begin(); it != vec.end(); ++it) {
  ------------------
  |  Branch (242:33): [True: 172k, False: 28.1k]
  ------------------
  243|   172k|      delete *it;
  244|   172k|    }
  245|  28.1k|  }
_ZN11flatbuffers6ParserD2Ev:
 1038|  28.1k|  ~Parser() {
 1039|  75.9k|    for (auto it = namespaces_.begin(); it != namespaces_.end(); ++it) {
  ------------------
  |  Branch (1039:41): [True: 47.7k, False: 28.1k]
  ------------------
 1040|  47.7k|      delete *it;
 1041|  47.7k|    }
 1042|  28.1k|  }
_ZN11flatbuffers4TypeC2ENS_8BaseTypeEPNS_9StructDefEPNS_7EnumDefEt:
  198|  1.63M|      : base_type(_base_type),
  199|  1.63M|        element(BASE_TYPE_NONE),
  200|  1.63M|        struct_def(_sd),
  201|  1.63M|        enum_def(_ed),
  202|  1.63M|        fixed_length(_fixed_length) {}
_ZNK11flatbuffers4Type10VectorTypeEv:
  209|  66.7k|  Type VectorType() const {
  210|  66.7k|    return Type(element, struct_def, enum_def, fixed_length);
  211|  66.7k|  }
_ZN11flatbuffers5ValueC2Ev:
  229|   332k|      : constant("0"),
  230|   332k|        offset(static_cast<voffset_t>(~(static_cast<voffset_t>(0U)))) {}
_ZN11flatbuffers10DefinitionC2Ev:
  303|   423k|      : generated(false),
  304|   423k|        defined_namespace(nullptr),
  305|   423k|        serialized_location(0),
  306|   423k|        index(-1),
  307|   423k|        refcount(1),
  308|   423k|        declaration_file(nullptr) {}
_ZN11flatbuffers8FieldDefC2Ev:
  333|  79.0k|      : deprecated(false),
  334|  79.0k|        key(false),
  335|  79.0k|        shared(false),
  336|  79.0k|        native_inline(false),
  337|  79.0k|        flexbuffer(false),
  338|  79.0k|        offset64(false),
  339|  79.0k|        presence(kDefault),
  340|  79.0k|        nested_flatbuffer(nullptr),
  341|  79.0k|        padding(0),
  342|  79.0k|        sibling_union_field(nullptr) {}
_ZNK11flatbuffers8FieldDef16IsScalarOptionalEv:
  349|   136k|  bool IsScalarOptional() const { return IsScalar() && IsOptional(); }
  ------------------
  |  Branch (349:42): [True: 87.8k, False: 49.0k]
  |  Branch (349:56): [True: 24.8k, False: 63.0k]
  ------------------
_ZNK11flatbuffers8FieldDef8IsScalarEv:
  350|   136k|  bool IsScalar() const {
  351|   136k|    return ::flatbuffers::IsScalar(value.type.base_type);
  352|   136k|  }
_ZNK11flatbuffers8FieldDef10IsOptionalEv:
  353|   128k|  bool IsOptional() const { return presence == kOptional; }
_ZNK11flatbuffers8FieldDef10IsRequiredEv:
  354|   312k|  bool IsRequired() const { return presence == kRequired; }
_ZN11flatbuffers8FieldDef17MakeFieldPresenceEbb:
  377|  52.3k|  Presence static MakeFieldPresence(bool optional, bool required) {
  378|  52.3k|    FLATBUFFERS_ASSERT(!(required && optional));
  379|       |    // clang-format off
  380|  52.3k|    return required ? FieldDef::kRequired
  ------------------
  |  Branch (380:12): [True: 157, False: 52.2k]
  ------------------
  381|  52.3k|         : optional ? FieldDef::kOptional
  ------------------
  |  Branch (381:12): [True: 48.3k, False: 3.87k]
  ------------------
  382|  52.2k|                    : FieldDef::kDefault;
  383|       |    // clang-format on
  384|  52.3k|  }
_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|  74.7k|  void PadLastField(size_t min_align) {
  414|  74.7k|    auto padding = PaddingBytes(bytesize, min_align);
  415|  74.7k|    bytesize += padding;
  416|  74.7k|    if (fields.vec.size()) fields.vec.back()->padding = padding;
  ------------------
  |  Branch (416:9): [True: 28.5k, False: 46.2k]
  ------------------
  417|  74.7k|  }
_ZNK11flatbuffers7EnumVal11GetAsUInt64Ev:
  455|  7.30M|  uint64_t GetAsUInt64() const { return static_cast<uint64_t>(value); }
_ZNK11flatbuffers7EnumVal10GetAsInt64Ev:
  456|  6.45M|  int64_t GetAsInt64() const { return value; }
_ZN11flatbuffers7EnumValC2ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEl:
  470|   549k|  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|   825k|  const std::vector<EnumVal*>& Vals() const { return vals.vec; }
_ZNK11flatbuffers7EnumDef6LookupERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  510|  4.12k|  const EnumVal* Lookup(const std::string& enum_name) const {
  511|  4.12k|    return vals.Lookup(enum_name);
  512|  4.12k|  }
_ZNK11flatbuffers7EnumDef8IsUInt64Ev:
  521|   225k|  bool IsUInt64() const {
  522|   225k|    return (BASE_TYPE_ULONG == underlying_type.base_type);
  523|   225k|  }
_ZN11flatbuffers11ParserState10ResetStateEPKc:
  899|  28.2k|  void ResetState(const char* source) {
  900|  28.2k|    prev_cursor_ = source;
  901|  28.2k|    cursor_ = source;
  902|  28.2k|    line_ = 0;
  903|  28.2k|    MarkNewLine();
  904|  28.2k|  }
_ZN11flatbuffers11ParserState11MarkNewLineEv:
  906|   133k|  void MarkNewLine() {
  907|   133k|    line_start_ = cursor_;
  908|   133k|    line_ += 1;
  909|   133k|  }
_ZNK11flatbuffers11ParserState14CursorPositionEv:
  911|  45.1k|  int64_t CursorPosition() const {
  912|  45.1k|    FLATBUFFERS_ASSERT(cursor_ && line_start_ && cursor_ >= line_start_);
  913|  45.1k|    return static_cast<int64_t>(cursor_ - line_start_);
  914|  45.1k|  }
_ZN11flatbuffers12CheckedErrorC2Eb:
  940|  14.8M|      : is_error_(error), has_been_checked_(false) {}
_ZN11flatbuffers12CheckedErroraSERKS0_:
  942|   272k|  CheckedError& operator=(const CheckedError& other) {
  943|   272k|    is_error_ = other.is_error_;
  944|   272k|    has_been_checked_ = false;
  945|   272k|    other.has_been_checked_ = true;
  946|   272k|    return *this;
  947|   272k|  }
_ZN11flatbuffers12CheckedErrorC2ERKS0_:
  949|   272k|  CheckedError(const CheckedError& other) {
  950|   272k|    *this = other;  // Use assignment operator.
  951|   272k|  }
_ZN11flatbuffers12CheckedErrorD2Ev:
  953|  15.0M|  ~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|   599k|inline bool IsScalar (BaseType t) { return t >= BASE_TYPE_UTYPE &&
  ------------------
  |  Branch (134:44): [True: 584k, False: 14.3k]
  ------------------
  135|   584k|                                           t <= BASE_TYPE_DOUBLE; }
  ------------------
  |  Branch (135:44): [True: 483k, False: 101k]
  ------------------
_ZN11flatbuffers9IsIntegerENS_8BaseTypeE:
  136|   660k|inline bool IsInteger(BaseType t) { return t >= BASE_TYPE_UTYPE &&
  ------------------
  |  Branch (136:44): [True: 658k, False: 2.40k]
  ------------------
  137|   658k|                                           t <= BASE_TYPE_ULONG; }
  ------------------
  |  Branch (137:44): [True: 627k, False: 30.8k]
  ------------------
_ZN11flatbuffers7IsFloatENS_8BaseTypeE:
  138|   313k|inline bool IsFloat  (BaseType t) { return t == BASE_TYPE_FLOAT ||
  ------------------
  |  Branch (138:44): [True: 39.4k, False: 274k]
  ------------------
  139|   274k|                                           t == BASE_TYPE_DOUBLE; }
  ------------------
  |  Branch (139:44): [True: 18.5k, False: 255k]
  ------------------
_ZN11flatbuffers6IsBoolENS_8BaseTypeE:
  142|  56.4k|inline bool IsBool   (BaseType t) { return t == BASE_TYPE_BOOL; }
_ZN11flatbuffers8IsVectorENS_8BaseTypeE:
  145|   111k|inline bool IsVector (BaseType t) { return t == BASE_TYPE_VECTOR ||
  ------------------
  |  Branch (145:44): [True: 24.1k, False: 87.0k]
  ------------------
  146|  87.0k|                                           t == BASE_TYPE_VECTOR64; }
  ------------------
  |  Branch (146:44): [True: 322, False: 86.7k]
  ------------------
_ZN11flatbuffers10IsUnsignedENS_8BaseTypeE:
  148|  4.52k|inline bool IsUnsigned(BaseType t) {
  149|  4.52k|  return (t == BASE_TYPE_UTYPE)  || (t == BASE_TYPE_UCHAR) ||
  ------------------
  |  Branch (149:10): [True: 653, False: 3.87k]
  |  Branch (149:37): [True: 183, False: 3.69k]
  ------------------
  150|  3.69k|         (t == BASE_TYPE_USHORT) || (t == BASE_TYPE_UINT)  ||
  ------------------
  |  Branch (150:10): [True: 155, False: 3.53k]
  |  Branch (150:37): [True: 359, False: 3.17k]
  ------------------
  151|  3.17k|         (t == BASE_TYPE_ULONG);
  ------------------
  |  Branch (151:10): [True: 1.20k, False: 1.97k]
  ------------------
  152|  4.52k|}
_ZN11flatbuffers6SizeOfENS_8BaseTypeE:
  154|  1.01M|inline size_t SizeOf(const BaseType t) {
  155|  1.01M|  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|  35.4k|        FLATBUFFERS_GEN_TYPES_SCALAR(TD) \
  |  |  ------------------
  |  |  |  |   50|   346k|  TD(NONE,     "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 0) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|   346k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|   346k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 346k, False: 672k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   51|   346k|  TD(UTYPE,    "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 1) /* begin scalar/int */ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  90.9k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  90.9k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 90.9k, False: 928k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   52|  90.9k|  TD(BOOL,     "bool",   uint8_t,  boolean,bool,    bool,   bool,    bool, Boolean, Bool, 2) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  11.8k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  11.8k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 11.8k, False: 1.00M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|  37.7k|  TD(CHAR,     "byte",   int8_t,   byte,   int8,    sbyte,  int8,    i8,   Byte, Int8, 3) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  37.7k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  37.7k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 37.7k, False: 981k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   54|  37.7k|  TD(UCHAR,    "ubyte",  uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 4) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  23.0k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  23.0k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 23.0k, False: 995k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   55|  25.7k|  TD(SHORT,    "short",  int16_t,  short,  int16,   short,  int16,   i16,  Short, Int16, 5) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  25.7k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  25.7k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 25.7k, False: 993k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   56|  25.7k|  TD(USHORT,   "ushort", uint16_t, short,  uint16,  ushort, uint16,  u16,  UShort, UInt16, 6) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  14.7k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  14.7k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 14.7k, False: 1.00M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|  27.6k|  TD(INT,      "int",    int32_t,  int,    int32,   int,    int32,   i32,  Int, Int32, 7) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  27.6k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  27.6k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 27.6k, False: 991k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   58|  27.6k|  TD(UINT,     "uint",   uint32_t, int,    uint32,  uint,   uint32,  u32,  UInt, UInt32, 8) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  15.9k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  15.9k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 15.9k, False: 1.00M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   59|  63.0k|  TD(LONG,     "long",   int64_t,  long,   int64,   long,   int64,   i64,  Long, Int64, 9) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  63.0k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  63.0k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 63.0k, False: 955k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  63.0k|  TD(ULONG,    "ulong",  uint64_t, long,   uint64,  ulong,  uint64,  u64,  ULong, UInt64, 10) /* end int */ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  36.6k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  36.6k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 36.6k, False: 982k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  36.6k|  TD(FLOAT,    "float",  float,    float,  float32, float,  float32, f32,  Float, Float32, 11) /* begin float */ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  14.2k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  14.2k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 14.2k, False: 1.00M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   62|  35.4k|  TD(DOUBLE,   "double", double,   double, float64, double, float64, f64,  Double, Double, 12) /* end float/scalar */
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  35.4k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  35.4k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 35.4k, False: 983k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  113|  35.4k|        FLATBUFFERS_GEN_TYPES_POINTER(TD) \
  |  |  ------------------
  |  |  |  |   64|  14.1k|  TD(STRING,   "string", Offset<void>,   int, int, StringOffset, int, unused, Int, Offset<String>, 13) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  14.1k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  14.1k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 14.1k, False: 1.00M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   65|  96.5k|  TD(VECTOR,   "",       Offset<void>,   int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 14) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  96.5k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  96.5k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 96.5k, False: 922k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   66|  96.5k|  TD(VECTOR64, "",       Offset64<void>, int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 18) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  25.5k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  25.5k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 25.5k, False: 993k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   67|   125k|  TD(STRUCT,   "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 15) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|   125k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|   125k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 125k, False: 893k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   68|   125k|  TD(UNION,    "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 16)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  13.1k|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  13.1k|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 13.1k, False: 1.00M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  114|  13.1k|        FLATBUFFERS_GEN_TYPE_ARRAY(TD)
  |  |  ------------------
  |  |  |  |   70|    283|  TD(ARRAY,    "",       int,            int, int, int,          int, unused, Int, Offset<UOffset>, 17)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|    283|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|    283|    case BASE_TYPE_##ENUM: return sizeof(CTYPE);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (157:5): [True: 283, False: 1.01M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  159|      0|  #undef FLATBUFFERS_TD
  160|      0|    default: FLATBUFFERS_ASSERT(0);
  ------------------
  |  Branch (160:5): [True: 0, False: 1.01M]
  ------------------
  161|  1.01M|  }
  162|      0|  return 0;
  163|  1.01M|}
_ZN11flatbuffers8TypeNameENS_8BaseTypeE:
  165|    289|inline const char* TypeName(const BaseType t) {
  166|    289|  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|     33|        FLATBUFFERS_GEN_TYPES_SCALAR(TD) \
  |  |  ------------------
  |  |  |  |   50|     18|  TD(NONE,     "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 0) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|     18|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|     18|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 18, False: 271]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   51|     18|  TD(UTYPE,    "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 1) /* begin scalar/int */ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      2|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      2|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 2, False: 287]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   52|     30|  TD(BOOL,     "bool",   uint8_t,  boolean,bool,    bool,   bool,    bool, Boolean, Bool, 2) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|     30|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|     30|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 30, False: 259]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|     30|  TD(CHAR,     "byte",   int8_t,   byte,   int8,    sbyte,  int8,    i8,   Byte, Int8, 3) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|     24|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|     24|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 24, False: 265]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   54|     24|  TD(UCHAR,    "ubyte",  uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 4) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      5|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      5|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 5, False: 284]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   55|      7|  TD(SHORT,    "short",  int16_t,  short,  int16,   short,  int16,   i16,  Short, Int16, 5) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      7|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      7|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 7, False: 282]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   56|      7|  TD(USHORT,   "ushort", uint16_t, short,  uint16,  ushort, uint16,  u16,  UShort, UInt16, 6) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      6|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      6|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 6, False: 283]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|     64|  TD(INT,      "int",    int32_t,  int,    int32,   int,    int32,   i32,  Int, Int32, 7) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|     64|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|     64|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 64, False: 225]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   58|     64|  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: 277]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   59|     20|  TD(LONG,     "long",   int64_t,  long,   int64,   long,   int64,   i64,  Long, Int64, 9) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|     20|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|     20|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 20, False: 269]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     20|  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: 282]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     35|  TD(FLOAT,    "float",  float,    float,  float32, float,  float32, f32,  Float, Float32, 11) /* begin float */ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|     35|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|     35|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 35, False: 254]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   62|     35|  TD(DOUBLE,   "double", double,   double, float64, double, float64, f64,  Double, Double, 12) /* end float/scalar */
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|     33|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|     33|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 33, False: 256]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  113|     33|        FLATBUFFERS_GEN_TYPES_POINTER(TD) \
  |  |  ------------------
  |  |  |  |   64|      3|  TD(STRING,   "string", Offset<void>,   int, int, StringOffset, int, unused, Int, Offset<String>, 13) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      3|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      3|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 3, False: 286]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   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: 283]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   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: 289]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   67|     15|  TD(STRUCT,   "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 15) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|     15|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|     15|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 15, False: 274]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   68|     15|  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: 289]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  114|      2|        FLATBUFFERS_GEN_TYPE_ARRAY(TD)
  |  |  ------------------
  |  |  |  |   70|      2|  TD(ARRAY,    "",       int,            int, int, int,          int, unused, Int, Offset<UOffset>, 17)
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      2|      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      2|    case BASE_TYPE_##ENUM: return IDLTYPE;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (168:5): [True: 2, False: 287]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|      0|  #undef FLATBUFFERS_TD
  171|      0|    default: FLATBUFFERS_ASSERT(0);
  ------------------
  |  Branch (171:5): [True: 0, False: 289]
  ------------------
  172|    289|  }
  173|      0|  return nullptr;
  174|    289|}
_ZN11flatbuffers8IsStringERKNS_4TypeE:
  529|   186k|inline bool IsString(const Type& type) {
  530|   186k|  return type.base_type == BASE_TYPE_STRING;
  531|   186k|}
_ZN11flatbuffers8IsStructERKNS_4TypeE:
  533|   483k|inline bool IsStruct(const Type& type) {
  534|   483k|  return type.base_type == BASE_TYPE_STRUCT && type.struct_def->fixed;
  ------------------
  |  Branch (534:10): [True: 221k, False: 261k]
  |  Branch (534:48): [True: 24.8k, False: 196k]
  ------------------
  535|   483k|}
_ZN11flatbuffers18IsIncompleteStructERKNS_4TypeE:
  537|  3.90k|inline bool IsIncompleteStruct(const Type& type) {
  538|  3.90k|  return type.base_type == BASE_TYPE_STRUCT && type.struct_def->predecl;
  ------------------
  |  Branch (538:10): [True: 550, False: 3.35k]
  |  Branch (538:48): [True: 5, False: 545]
  ------------------
  539|  3.90k|}
_ZN11flatbuffers7IsTableERKNS_4TypeE:
  541|     20|inline bool IsTable(const Type& type) {
  542|     20|  return type.base_type == BASE_TYPE_STRUCT && !type.struct_def->fixed;
  ------------------
  |  Branch (542:10): [True: 18, False: 2]
  |  Branch (542:48): [True: 18, False: 0]
  ------------------
  543|     20|}
_ZN11flatbuffers8IsVectorERKNS_4TypeE:
  553|   111k|inline bool IsVector(const Type& type) { return IsVector(type.base_type); }
_ZN11flatbuffers16IsVectorOfStructERKNS_4TypeE:
  555|     32|inline bool IsVectorOfStruct(const Type& type) {
  556|     32|  return IsVector(type) && IsStruct(type.VectorType());
  ------------------
  |  Branch (556:10): [True: 30, False: 2]
  |  Branch (556:28): [True: 10, False: 20]
  ------------------
  557|     32|}
_ZN11flatbuffers15IsVectorOfTableERKNS_4TypeE:
  559|     22|inline bool IsVectorOfTable(const Type& type) {
  560|     22|  return IsVector(type) && IsTable(type.VectorType());
  ------------------
  |  Branch (560:10): [True: 20, False: 2]
  |  Branch (560:28): [True: 18, False: 2]
  ------------------
  561|     22|}
_ZN11flatbuffers7IsArrayERKNS_4TypeE:
  563|   318k|inline bool IsArray(const Type& type) {
  564|   318k|  return type.base_type == BASE_TYPE_ARRAY;
  565|   318k|}
_ZN11flatbuffers8IsSeriesERKNS_4TypeE:
  567|  11.9k|inline bool IsSeries(const Type& type) {
  568|  11.9k|  return IsVector(type) || IsArray(type);
  ------------------
  |  Branch (568:10): [True: 1, False: 11.9k]
  |  Branch (568:28): [True: 1, False: 11.9k]
  ------------------
  569|  11.9k|}
_ZN11flatbuffers6IsEnumERKNS_4TypeE:
  571|    288|inline bool IsEnum(const Type& type) {
  572|    288|  return type.enum_def != nullptr && IsInteger(type.base_type);
  ------------------
  |  Branch (572:10): [True: 1, False: 287]
  |  Branch (572:38): [True: 1, False: 0]
  ------------------
  573|    288|}
_ZN11flatbuffers10InlineSizeERKNS_4TypeE:
  575|  66.8k|inline size_t InlineSize(const Type& type) {
  576|  66.8k|  return IsStruct(type)
  ------------------
  |  Branch (576:10): [True: 695, False: 66.2k]
  ------------------
  577|  66.8k|             ? type.struct_def->bytesize
  578|  66.8k|             : (IsArray(type)
  ------------------
  |  Branch (578:17): [True: 12.2k, False: 53.9k]
  ------------------
  579|  66.2k|                    ? InlineSize(type.VectorType()) * type.fixed_length
  580|  66.2k|                    : SizeOf(type.base_type));
  581|  66.8k|}
_ZN11flatbuffers15InlineAlignmentERKNS_4TypeE:
  583|   124k|inline size_t InlineAlignment(const Type& type) {
  584|   124k|  if (IsStruct(type)) {
  ------------------
  |  Branch (584:7): [True: 908, False: 123k]
  ------------------
  585|    908|    return type.struct_def->minalign;
  586|   123k|  } else if (IsArray(type)) {
  ------------------
  |  Branch (586:14): [True: 967, False: 122k]
  ------------------
  587|    967|    return IsStruct(type.VectorType()) ? type.struct_def->minalign
  ------------------
  |  Branch (587:12): [True: 87, False: 880]
  ------------------
  588|    967|                                       : SizeOf(type.element);
  589|   122k|  } else {
  590|   122k|    return SizeOf(type.base_type);
  591|   122k|  }
  592|   124k|}
_ZNK11flatbuffers11SymbolTableINS_7EnumValEE6LookupERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  266|  4.12k|  T* Lookup(const std::string& name) const {
  267|  4.12k|    auto it = dict.find(name);
  268|  4.12k|    return it == dict.end() ? nullptr : it->second;
  ------------------
  |  Branch (268:12): [True: 454, False: 3.67k]
  ------------------
  269|  4.12k|  }
_ZNK11flatbuffers11SymbolTableINS_5ValueEE6LookupERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  266|  1.40M|  T* Lookup(const std::string& name) const {
  267|  1.40M|    auto it = dict.find(name);
  268|  1.40M|    return it == dict.end() ? nullptr : it->second;
  ------------------
  |  Branch (268:12): [True: 1.22M, False: 180k]
  ------------------
  269|  1.40M|  }
_ZNK11flatbuffers11SymbolTableINS_9StructDefEE6LookupERKNSt3__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.21M, False: 217k]
  ------------------
  269|  1.42M|  }
_ZN11flatbuffers11SymbolTableINS_8FieldDefEE3AddERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPS1_:
  247|  79.0k|  bool Add(const std::string& name, T* e) {
  248|  79.0k|    vec.emplace_back(e);
  249|  79.0k|    auto it = dict.find(name);
  250|  79.0k|    if (it != dict.end()) return true;
  ------------------
  |  Branch (250:9): [True: 59, False: 78.9k]
  ------------------
  251|  78.9k|    dict[name] = e;
  252|  78.9k|    return false;
  253|  79.0k|  }
_ZN11flatbuffers11SymbolTableINS_5ValueEE3AddERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPS1_:
  247|  21.1k|  bool Add(const std::string& name, T* e) {
  248|  21.1k|    vec.emplace_back(e);
  249|  21.1k|    auto it = dict.find(name);
  250|  21.1k|    if (it != dict.end()) return true;
  ------------------
  |  Branch (250:9): [True: 3.67k, False: 17.4k]
  ------------------
  251|  17.4k|    dict[name] = e;
  252|  17.4k|    return false;
  253|  21.1k|  }
_ZNK11flatbuffers11SymbolTableINS_8FieldDefEE6LookupERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  266|   181k|  T* Lookup(const std::string& name) const {
  267|   181k|    auto it = dict.find(name);
  268|   181k|    return it == dict.end() ? nullptr : it->second;
  ------------------
  |  Branch (268:12): [True: 2.53k, False: 178k]
  ------------------
  269|   181k|  }
_ZN11flatbuffers11SymbolTableINS_9StructDefEE4MoveERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEESB_:
  255|  9.98k|  void Move(const std::string& oldname, const std::string& newname) {
  256|  9.98k|    auto it = dict.find(oldname);
  257|  9.98k|    if (it != dict.end()) {
  ------------------
  |  Branch (257:9): [True: 9.98k, False: 0]
  ------------------
  258|  9.98k|      auto obj = it->second;
  259|  9.98k|      dict.erase(it);
  260|  9.98k|      dict[newname] = obj;
  261|  9.98k|    } else {
  262|      0|      FLATBUFFERS_ASSERT(false);
  263|      0|    }
  264|  9.98k|  }
_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|   548k|  bool Add(const std::string& name, T* e) {
  248|   548k|    vec.emplace_back(e);
  249|   548k|    auto it = dict.find(name);
  250|   548k|    if (it != dict.end()) return true;
  ------------------
  |  Branch (250:9): [True: 57, False: 548k]
  ------------------
  251|   548k|    dict[name] = e;
  252|   548k|    return false;
  253|   548k|  }
_ZN11flatbuffers11SymbolTableINS_4TypeEE3AddERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPS1_:
  247|   172k|  bool Add(const std::string& name, T* e) {
  248|   172k|    vec.emplace_back(e);
  249|   172k|    auto it = dict.find(name);
  250|   172k|    if (it != dict.end()) return true;
  ------------------
  |  Branch (250:9): [True: 4, False: 172k]
  ------------------
  251|   172k|    dict[name] = e;
  252|   172k|    return false;
  253|   172k|  }
_ZN11flatbuffers11SymbolTableINS_10ServiceDefEE3AddERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPS1_:
  247|  2.48k|  bool Add(const std::string& name, T* e) {
  248|  2.48k|    vec.emplace_back(e);
  249|  2.48k|    auto it = dict.find(name);
  250|  2.48k|    if (it != dict.end()) return true;
  ------------------
  |  Branch (250:9): [True: 3, False: 2.47k]
  ------------------
  251|  2.47k|    dict[name] = e;
  252|  2.47k|    return false;
  253|  2.48k|  }
_ZN11flatbuffers11SymbolTableINS_7RPCCallEE3AddERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPS1_:
  247|  6.66k|  bool Add(const std::string& name, T* e) {
  248|  6.66k|    vec.emplace_back(e);
  249|  6.66k|    auto it = dict.find(name);
  250|  6.66k|    if (it != dict.end()) return true;
  ------------------
  |  Branch (250:9): [True: 20, False: 6.64k]
  ------------------
  251|  6.64k|    dict[name] = e;
  252|  6.64k|    return false;
  253|  6.66k|  }
_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: 69, False: 106k]
  ------------------
  251|   106k|    dict[name] = e;
  252|   106k|    return false;
  253|   106k|  }
_ZNK11flatbuffers11SymbolTableINS_7EnumDefEE6LookupERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  266|   109k|  T* Lookup(const std::string& name) const {
  267|   109k|    auto it = dict.find(name);
  268|   109k|    return it == dict.end() ? nullptr : it->second;
  ------------------
  |  Branch (268:12): [True: 71.9k, False: 38.0k]
  ------------------
  269|   109k|  }

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

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

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

_ZNK11flatbuffers5Table20VerifyOffsetRequiredIjLb0EEEbRKNS_16VerifierTemplateIXT0_EEEt:
  189|   570k|                            voffset_t field) const {
  190|   570k|    auto field_offset = GetOptionalFieldOffset(field);
  191|   570k|    return verifier.Check(field_offset != 0) &&
  ------------------
  |  Branch (191:12): [True: 570k, False: 0]
  ------------------
  192|   570k|           verifier.template VerifyOffset<OffsetT>(data_, field_offset);
  ------------------
  |  Branch (192:12): [True: 570k, False: 0]
  ------------------
  193|   570k|  }
_ZNK11flatbuffers5Table22GetOptionalFieldOffsetEt:
   36|   166M|  voffset_t GetOptionalFieldOffset(voffset_t field) const {
   37|       |    // The vtable offset is always at the start.
   38|   166M|    auto vtable = GetVTable();
   39|       |    // The first element is the size of the vtable (fields + type id + itself).
   40|   166M|    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|   166M|    return field < vtsize ? ReadScalar<voffset_t>(vtable + field) : 0;
  ------------------
  |  Branch (43:12): [True: 11.3M, False: 155M]
  ------------------
   44|   166M|  }
_ZNK11flatbuffers5Table9GetVTableEv:
   30|   166M|  const uint8_t* GetVTable() const {
   31|   166M|    return data_ - ReadScalar<soffset_t>(data_);
   32|   166M|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection6ObjectEEEjEEjEET_t:
   60|  10.4k|  P GetPointer(voffset_t field) const {
   61|  10.4k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|  10.4k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection6ObjectEEEjEEjEET_t:
   53|  10.4k|  P GetPointer(voffset_t field) {
   54|  10.4k|    auto field_offset = GetOptionalFieldOffset(field);
   55|  10.4k|    auto p = data_ + field_offset;
   56|  10.4k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 10.4k, False: 0]
  ------------------
   57|  10.4k|                        : nullptr;
   58|  10.4k|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6StringEjEET_t:
   60|  4.73M|  P GetPointer(voffset_t field) const {
   61|  4.73M|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|  4.73M|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6StringEjEET_t:
   53|  4.73M|  P GetPointer(voffset_t field) {
   54|  4.73M|    auto field_offset = GetOptionalFieldOffset(field);
   55|  4.73M|    auto p = data_ + field_offset;
   56|  4.73M|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 4.73M, False: 0]
  ------------------
   57|  4.73M|                        : nullptr;
   58|  4.73M|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection5FieldEEEjEEjEET_t:
   60|   117k|  P GetPointer(voffset_t field) const {
   61|   117k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|   117k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection5FieldEEEjEEjEET_t:
   53|   117k|  P GetPointer(voffset_t field) {
   54|   117k|    auto field_offset = GetOptionalFieldOffset(field);
   55|   117k|    auto p = data_ + field_offset;
   56|   117k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 117k, False: 0]
  ------------------
   57|   117k|                        : nullptr;
   58|   117k|  }
_ZNK11flatbuffers5Table11VerifyFieldIaLb0EEEbRKNS_16VerifierTemplateIXT0_EEEtm:
  160|   470k|                   size_t align) const {
  161|       |    // Calling GetOptionalFieldOffset should be safe now thanks to
  162|       |    // VerifyTable().
  163|   470k|    auto field_offset = GetOptionalFieldOffset(field);
  164|       |    // Check the actual field.
  165|   470k|    return !field_offset ||
  ------------------
  |  Branch (165:12): [True: 346k, False: 123k]
  ------------------
  166|   123k|           verifier.template VerifyField<T>(data_, field_offset, align);
  ------------------
  |  Branch (166:12): [True: 123k, False: 0]
  ------------------
  167|   470k|  }
_ZNK11flatbuffers5Table11VerifyFieldIjLb0EEEbRKNS_16VerifierTemplateIXT0_EEEtm:
  160|   470k|                   size_t align) const {
  161|       |    // Calling GetOptionalFieldOffset should be safe now thanks to
  162|       |    // VerifyTable().
  163|   470k|    auto field_offset = GetOptionalFieldOffset(field);
  164|       |    // Check the actual field.
  165|   470k|    return !field_offset ||
  ------------------
  |  Branch (165:12): [True: 28.8k, False: 441k]
  ------------------
  166|   441k|           verifier.template VerifyField<T>(data_, field_offset, align);
  ------------------
  |  Branch (166:12): [True: 441k, False: 0]
  ------------------
  167|   470k|  }
_ZNK11flatbuffers5Table10GetPointerIPKN10reflection4TypeEjEET_t:
   60|   235k|  P GetPointer(voffset_t field) const {
   61|   235k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|   235k|  }
_ZN11flatbuffers5Table10GetPointerIPKN10reflection4TypeEjEET_t:
   53|   235k|  P GetPointer(voffset_t field) {
   54|   235k|    auto field_offset = GetOptionalFieldOffset(field);
   55|   235k|    auto p = data_ + field_offset;
   56|   235k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 235k, False: 0]
  ------------------
   57|   235k|                        : nullptr;
   58|   235k|  }
_ZNK11flatbuffers5Table11VerifyFieldItLb0EEEbRKNS_16VerifierTemplateIXT0_EEEtm:
  160|   355k|                   size_t align) const {
  161|       |    // Calling GetOptionalFieldOffset should be safe now thanks to
  162|       |    // VerifyTable().
  163|   355k|    auto field_offset = GetOptionalFieldOffset(field);
  164|       |    // Check the actual field.
  165|   355k|    return !field_offset ||
  ------------------
  |  Branch (165:12): [True: 289k, False: 66.1k]
  ------------------
  166|  66.1k|           verifier.template VerifyField<T>(data_, field_offset, align);
  ------------------
  |  Branch (166:12): [True: 66.1k, False: 0]
  ------------------
  167|   355k|  }
_ZNK11flatbuffers5Table11VerifyFieldIlLb0EEEbRKNS_16VerifierTemplateIXT0_EEEtm:
  160|   154k|                   size_t align) const {
  161|       |    // Calling GetOptionalFieldOffset should be safe now thanks to
  162|       |    // VerifyTable().
  163|   154k|    auto field_offset = GetOptionalFieldOffset(field);
  164|       |    // Check the actual field.
  165|   154k|    return !field_offset ||
  ------------------
  |  Branch (165:12): [True: 119k, False: 35.1k]
  ------------------
  166|  35.1k|           verifier.template VerifyField<T>(data_, field_offset, align);
  ------------------
  |  Branch (166:12): [True: 35.1k, False: 0]
  ------------------
  167|   154k|  }
_ZNK11flatbuffers5Table11VerifyFieldIdLb0EEEbRKNS_16VerifierTemplateIXT0_EEEtm:
  160|  40.1k|                   size_t align) const {
  161|       |    // Calling GetOptionalFieldOffset should be safe now thanks to
  162|       |    // VerifyTable().
  163|  40.1k|    auto field_offset = GetOptionalFieldOffset(field);
  164|       |    // Check the actual field.
  165|  40.1k|    return !field_offset ||
  ------------------
  |  Branch (165:12): [True: 40.0k, False: 101]
  ------------------
  166|    101|           verifier.template VerifyField<T>(data_, field_offset, align);
  ------------------
  |  Branch (166:12): [True: 101, False: 0]
  ------------------
  167|  40.1k|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection8KeyValueEEEjEEjEET_t:
   60|   593k|  P GetPointer(voffset_t field) const {
   61|   593k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|   593k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection8KeyValueEEEjEEjEET_t:
   53|   593k|  P GetPointer(voffset_t field) {
   54|   593k|    auto field_offset = GetOptionalFieldOffset(field);
   55|   593k|    auto p = data_ + field_offset;
   56|   593k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 1.55k, False: 591k]
  ------------------
   57|   593k|                        : nullptr;
   58|   593k|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetINS_6StringEEEjEEjEET_t:
   60|   593k|  P GetPointer(voffset_t field) const {
   61|   593k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|   593k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetINS_6StringEEEjEEjEET_t:
   53|   593k|  P GetPointer(voffset_t field) {
   54|   593k|    auto field_offset = GetOptionalFieldOffset(field);
   55|   593k|    auto p = data_ + field_offset;
   56|   593k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 0, False: 593k]
  ------------------
   57|   593k|                        : nullptr;
   58|   593k|  }
_ZNK11flatbuffers5Table11VerifyFieldIhLb0EEEbRKNS_16VerifierTemplateIXT0_EEEtm:
  160|   340k|                   size_t align) const {
  161|       |    // Calling GetOptionalFieldOffset should be safe now thanks to
  162|       |    // VerifyTable().
  163|   340k|    auto field_offset = GetOptionalFieldOffset(field);
  164|       |    // Check the actual field.
  165|   340k|    return !field_offset ||
  ------------------
  |  Branch (165:12): [True: 235k, False: 104k]
  ------------------
  166|   104k|           verifier.template VerifyField<T>(data_, field_offset, align);
  ------------------
  |  Branch (166:12): [True: 104k, False: 0]
  ------------------
  167|   340k|  }
_ZNK11flatbuffers5Table11VerifyFieldIiLb0EEEbRKNS_16VerifierTemplateIXT0_EEEtm:
  160|   353k|                   size_t align) const {
  161|       |    // Calling GetOptionalFieldOffset should be safe now thanks to
  162|       |    // VerifyTable().
  163|   353k|    auto field_offset = GetOptionalFieldOffset(field);
  164|       |    // Check the actual field.
  165|   353k|    return !field_offset ||
  ------------------
  |  Branch (165:12): [True: 174k, False: 178k]
  ------------------
  166|   178k|           verifier.template VerifyField<T>(data_, field_offset, align);
  ------------------
  |  Branch (166:12): [True: 178k, False: 0]
  ------------------
  167|   353k|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection4EnumEEEjEEjEET_t:
   60|  10.4k|  P GetPointer(voffset_t field) const {
   61|  10.4k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|  10.4k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection4EnumEEEjEEjEET_t:
   53|  10.4k|  P GetPointer(voffset_t field) {
   54|  10.4k|    auto field_offset = GetOptionalFieldOffset(field);
   55|  10.4k|    auto p = data_ + field_offset;
   56|  10.4k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 10.4k, False: 0]
  ------------------
   57|  10.4k|                        : nullptr;
   58|  10.4k|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection7EnumValEEEjEEjEET_t:
   60|   160k|  P GetPointer(voffset_t field) const {
   61|   160k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|   160k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection7EnumValEEEjEEjEET_t:
   53|   160k|  P GetPointer(voffset_t field) {
   54|   160k|    auto field_offset = GetOptionalFieldOffset(field);
   55|   160k|    auto p = data_ + field_offset;
   56|   160k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 160k, False: 0]
  ------------------
   57|   160k|                        : nullptr;
   58|   160k|  }
_ZNK11flatbuffers5Table12VerifyOffsetIjLb0EEEbRKNS_16VerifierTemplateIXT0_EEEt:
  181|   875k|                    voffset_t field) const {
  182|   875k|    auto field_offset = GetOptionalFieldOffset(field);
  183|   875k|    return !field_offset ||
  ------------------
  |  Branch (183:12): [True: 602k, False: 272k]
  ------------------
  184|   272k|           verifier.template VerifyOffset<OffsetT>(data_, field_offset);
  ------------------
  |  Branch (184:12): [True: 272k, False: 0]
  ------------------
  185|   875k|  }
_ZNK11flatbuffers5Table10GetPointerIPKN10reflection6ObjectEjEET_t:
   60|  8.49k|  P GetPointer(voffset_t field) const {
   61|  8.49k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|  8.49k|  }
_ZN11flatbuffers5Table10GetPointerIPKN10reflection6ObjectEjEET_t:
   53|  8.49k|  P GetPointer(voffset_t field) {
   54|  8.49k|    auto field_offset = GetOptionalFieldOffset(field);
   55|  8.49k|    auto p = data_ + field_offset;
   56|  8.49k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 3.52k, False: 4.96k]
  ------------------
   57|  8.49k|                        : nullptr;
   58|  8.49k|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection7ServiceEEEjEEjEET_t:
   60|  10.4k|  P GetPointer(voffset_t field) const {
   61|  10.4k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|  10.4k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection7ServiceEEEjEEjEET_t:
   53|  10.4k|  P GetPointer(voffset_t field) {
   54|  10.4k|    auto field_offset = GetOptionalFieldOffset(field);
   55|  10.4k|    auto p = data_ + field_offset;
   56|  10.4k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 10.4k, False: 0]
  ------------------
   57|  10.4k|                        : nullptr;
   58|  10.4k|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection7RPCCallEEEjEEjEET_t:
   60|  1.58k|  P GetPointer(voffset_t field) const {
   61|  1.58k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|  1.58k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection7RPCCallEEEjEEjEET_t:
   53|  1.58k|  P GetPointer(voffset_t field) {
   54|  1.58k|    auto field_offset = GetOptionalFieldOffset(field);
   55|  1.58k|    auto p = data_ + field_offset;
   56|  1.58k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 1.58k, False: 0]
  ------------------
   57|  1.58k|                        : nullptr;
   58|  1.58k|  }
_ZNK11flatbuffers5Table11VerifyFieldImLb0EEEbRKNS_16VerifierTemplateIXT0_EEEtm:
  160|  5.20k|                   size_t align) const {
  161|       |    // Calling GetOptionalFieldOffset should be safe now thanks to
  162|       |    // VerifyTable().
  163|  5.20k|    auto field_offset = GetOptionalFieldOffset(field);
  164|       |    // Check the actual field.
  165|  5.20k|    return !field_offset ||
  ------------------
  |  Branch (165:12): [True: 5.00k, False: 198]
  ------------------
  166|    198|           verifier.template VerifyField<T>(data_, field_offset, align);
  ------------------
  |  Branch (166:12): [True: 198, False: 0]
  ------------------
  167|  5.20k|  }
_ZNK11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection10SchemaFileEEEjEEjEET_t:
   60|  10.4k|  P GetPointer(voffset_t field) const {
   61|  10.4k|    return const_cast<Table*>(this)->GetPointer<P, OffsetSize>(field);
   62|  10.4k|  }
_ZN11flatbuffers5Table10GetPointerIPKNS_6VectorINS_6OffsetIN10reflection10SchemaFileEEEjEEjEET_t:
   53|  10.4k|  P GetPointer(voffset_t field) {
   54|  10.4k|    auto field_offset = GetOptionalFieldOffset(field);
   55|  10.4k|    auto p = data_ + field_offset;
   56|  10.4k|    return field_offset ? reinterpret_cast<P>(p + ReadScalar<OffsetSize>(p))
  ------------------
  |  Branch (56:12): [True: 0, False: 10.4k]
  ------------------
   57|  10.4k|                        : nullptr;
   58|  10.4k|  }
_ZNK11flatbuffers5Table16VerifyTableStartILb0EEEbRNS_16VerifierTemplateIXT_EEE:
  153|   537k|  bool VerifyTableStart(VerifierTemplate<B>& verifier) const {
  154|   537k|    return verifier.VerifyTableStart(data_);
  155|   537k|  }
_ZN11flatbuffers5Table12GetAddressOfEt:
  138|   156M|  uint8_t* GetAddressOf(voffset_t field) {
  139|   156M|    auto field_offset = GetOptionalFieldOffset(field);
  140|   156M|    return field_offset ? data_ + field_offset : nullptr;
  ------------------
  |  Branch (140:12): [True: 1.65M, False: 154M]
  ------------------
  141|   156M|  }
_ZNK11flatbuffers5Table12GetAddressOfEt:
  142|   156M|  const uint8_t* GetAddressOf(voffset_t field) const {
  143|   156M|    return const_cast<Table*>(this)->GetAddressOf(field);
  144|   156M|  }

_ZN11flatbuffers13ClassicLocale3GetEv:
  228|  77.8M|    static locale_type Get() { return instance_.locale_; }
_ZN11flatbuffers17check_ascii_rangeEccc:
   44|   172M|inline bool check_ascii_range(char x, char a, char b) {
   45|   172M|  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|   172M|  return static_cast<unsigned int>(x - a) <= static_cast<unsigned int>(b - a);
   49|   172M|}
_ZN11flatbuffers8is_alphaEc:
   52|  88.1M|inline bool is_alpha(char c) {
   53|       |  // ASCII only: alpha to upper case => reset bit 0x20 (~0x20 = 0xDF).
   54|  88.1M|  return check_ascii_range(c & 0xDF, 'a' & 0xDF, 'z' & 0xDF);
   55|  88.1M|}
_ZN11flatbuffers13is_alpha_charEcc:
   61|  77.9M|inline bool is_alpha_char(char c, char alpha) {
   62|  77.9M|  FLATBUFFERS_ASSERT(is_alpha(alpha));
   63|       |  // ASCII only: alpha to upper case => reset bit 0x20 (~0x20 = 0xDF).
   64|  77.9M|  return ((c & 0xDF) == (alpha & 0xDF));
   65|  77.9M|}
_ZN11flatbuffers8is_digitEc:
   72|  82.9M|inline bool is_digit(char c) { return check_ascii_range(c, '0', '9'); }
_ZN11flatbuffers9is_xdigitEc:
   74|  69.7k|inline bool is_xdigit(char c) {
   75|       |  // Replace by look-up table.
   76|  69.7k|  return is_digit(c) || check_ascii_range(c & 0xDF, 'a' & 0xDF, 'f' & 0xDF);
  ------------------
  |  Branch (76:10): [True: 42.9k, False: 26.7k]
  |  Branch (76:25): [True: 21.3k, False: 5.38k]
  ------------------
   77|  69.7k|}
_ZN11flatbuffers11NumToStringIaEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  146|    706|inline std::string NumToString<signed char>(signed char t) {
  147|    706|  return NumToString(static_cast<int>(t));
  148|    706|}
_ZN11flatbuffers11NumToStringIhEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  150|  1.19k|inline std::string NumToString<unsigned char>(unsigned char t) {
  151|  1.19k|  return NumToString(static_cast<int>(t));
  152|  1.19k|}
_ZN11flatbuffers11NumToStringIcEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  154|    331|inline std::string NumToString<char>(char t) {
  155|    331|  return NumToString(static_cast<int>(t));
  156|    331|}
_ZN11flatbuffers11NumToStringIdEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  188|  3.27k|inline std::string NumToString<double>(double t) {
  189|  3.27k|  return FloatToString(t, 12);
  190|  3.27k|}
_ZN11flatbuffers13strtoval_implEPlPKcPPci:
  255|  77.6M|                                 int base) {
  256|  77.6M|    *val = __strtoll_impl(str, endptr, base);
  ------------------
  |  |  238|  77.6M|    #define __strtoll_impl(s, pe, b) strtoll_l(s, pe, b, ClassicLocale::Get())
  ------------------
  257|  77.6M|}
_ZN11flatbuffers13strtoval_implEPmPKcPPci:
  260|  84.3k|                                 int base) {
  261|  84.3k|  *val = __strtoull_impl(str, endptr, base);
  ------------------
  |  |  237|  84.3k|    #define __strtoull_impl(s, pe, b) strtoull_l(s, pe, b, ClassicLocale::Get())
  ------------------
  262|  84.3k|}
_ZN11flatbuffers13strtoval_implEPdPKcPPc:
  264|  99.7k|inline void strtoval_impl(double *val, const char *str, char **endptr) {
  265|  99.7k|  *val = __strtod_impl(str, endptr);
  ------------------
  |  |  239|  99.7k|    #define __strtod_impl(s, pe) strtod_l(s, pe, ClassicLocale::Get())
  ------------------
  266|  99.7k|}
_ZN11flatbuffers13strtoval_implEPfPKcPPc:
  270|  22.4k|inline void strtoval_impl(float *val, const char *str, char **endptr) {
  271|  22.4k|  *val = __strtof_impl(str, endptr);
  ------------------
  |  |  240|  22.4k|    #define __strtof_impl(s, pe) strtof_l(s, pe, ClassicLocale::Get())
  ------------------
  272|  22.4k|}
_ZN11flatbuffers14StringToNumberIlEEbPKcPT_:
  367|  77.2M|inline bool StringToNumber<int64_t>(const char* str, int64_t* val) {
  368|  77.2M|  return StringToIntegerImpl(val, str);
  369|  77.2M|}
_ZN11flatbuffers14StringToNumberImEEbPKcPT_:
  372|  81.8k|inline bool StringToNumber<uint64_t>(const char* str, uint64_t* val) {
  373|  81.8k|  if (!StringToIntegerImpl(val, str)) return false;
  ------------------
  |  Branch (373:7): [True: 69, False: 81.8k]
  ------------------
  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|  81.8k|  if (*val) {
  ------------------
  |  Branch (379:7): [True: 66.2k, False: 15.5k]
  ------------------
  380|  66.2k|    auto s = str;
  381|  67.3k|    while (*s && !is_digit(*s)) s++;
  ------------------
  |  Branch (381:12): [True: 67.3k, False: 0]
  |  Branch (381:18): [True: 1.09k, False: 66.2k]
  ------------------
  382|  66.2k|    s = (s > str) ? (s - 1) : s;  // step back to one symbol
  ------------------
  |  Branch (382:9): [True: 590, False: 65.6k]
  ------------------
  383|  66.2k|    if (*s == '-') {
  ------------------
  |  Branch (383:9): [True: 85, False: 66.1k]
  ------------------
  384|       |      // For unsigned types return the max to distinguish from
  385|       |      // "no conversion can be performed".
  386|     85|      *val = (flatbuffers::numeric_limits<uint64_t>::max)();
  387|     85|      return false;
  388|     85|    }
  389|  66.2k|  }
  390|  81.7k|  return true;
  391|  81.8k|}
_ZN11flatbuffers14StringToNumberIfEEbPKcPT_:
  394|  22.4k|inline bool StringToNumber(const char* s, float* val) {
  395|  22.4k|  return StringToFloatImpl(val, s);
  396|  22.4k|}
_ZN11flatbuffers14StringToNumberIdEEbPKcPT_:
  399|  99.7k|inline bool StringToNumber(const char* s, double* val) {
  400|  99.7k|  return StringToFloatImpl(val, s);
  401|  99.7k|}
_ZN11flatbuffers11StringToIntEPKci:
  403|   253k|inline int64_t StringToInt(const char* s, int base = 10) {
  404|   253k|  int64_t val;
  405|   253k|  return StringToIntegerImpl(&val, s, base) ? val : 0;
  ------------------
  |  Branch (405:10): [True: 253k, False: 623]
  ------------------
  406|   253k|}
_ZN11flatbuffers12StringToUIntEPKci:
  408|  2.49k|inline uint64_t StringToUInt(const char* s, int base = 10) {
  409|  2.49k|  uint64_t val;
  410|  2.49k|  return StringToIntegerImpl(&val, s, base) ? val : 0;
  ------------------
  |  Branch (410:10): [True: 2.49k, False: 0]
  ------------------
  411|  2.49k|}
_ZN11flatbuffers6ToUTF8EjPNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE:
  517|  1.60k|inline int ToUTF8(uint32_t ucc, std::string* out) {
  518|  1.60k|  FLATBUFFERS_ASSERT(!(ucc & 0x80000000));  // Top bit can't be set.
  519|       |  // 6 possible encodings: http://en.wikipedia.org/wiki/UTF-8
  520|  4.64k|  for (int i = 0; i < 6; i++) {
  ------------------
  |  Branch (520:19): [True: 4.64k, False: 0]
  ------------------
  521|       |    // Max bits this encoding can represent.
  522|  4.64k|    uint32_t max_bits = 6 + i * 5 + static_cast<int>(!i);
  523|  4.64k|    if (ucc < (1u << max_bits)) {  // does it fit?
  ------------------
  |  Branch (523:9): [True: 1.60k, False: 3.03k]
  ------------------
  524|       |      // Remaining bits not encoded in the first byte, store 6 bits each
  525|  1.60k|      uint32_t remain_bits = i * 6;
  526|       |      // Store first byte:
  527|  1.60k|      (*out) += static_cast<char>((0xFE << (max_bits - remain_bits)) |
  528|  1.60k|                                  (ucc >> remain_bits));
  529|       |      // Store remaining bytes:
  530|  4.64k|      for (int j = i - 1; j >= 0; j--) {
  ------------------
  |  Branch (530:27): [True: 3.03k, False: 1.60k]
  ------------------
  531|  3.03k|        (*out) += static_cast<char>(((ucc >> (j * 6)) & 0x3F) | 0x80);
  532|  3.03k|      }
  533|  1.60k|      return i + 1;  // Return the number of bytes added.
  534|  1.60k|    }
  535|  4.64k|  }
  536|      0|  FLATBUFFERS_ASSERT(0);  // Impossible to arrive here.
  537|      0|  return -1;
  538|      0|}
_ZN11flatbuffers8FromUTF8EPPKc:
  545|  20.3k|inline int FromUTF8(const char** in) {
  546|  20.3k|  int len = 0;
  547|       |  // Count leading 1 bits.
  548|  23.6k|  for (int mask = 0x80; mask >= 0x04; mask >>= 1) {
  ------------------
  |  Branch (548:25): [True: 23.6k, False: 10]
  ------------------
  549|  23.6k|    if (**in & mask) {
  ------------------
  |  Branch (549:9): [True: 3.27k, False: 20.3k]
  ------------------
  550|  3.27k|      len++;
  551|  20.3k|    } else {
  552|  20.3k|      break;
  553|  20.3k|    }
  554|  23.6k|  }
  555|  20.3k|  if ((static_cast<unsigned char>(**in) << len) & 0x80)
  ------------------
  |  Branch (555:7): [True: 8, False: 20.3k]
  ------------------
  556|      8|    return -1;  // Bit after leading 1's must be 0.
  557|  20.3k|  if (!len) return *(*in)++;
  ------------------
  |  Branch (557:7): [True: 19.3k, False: 1.05k]
  ------------------
  558|       |  // UTF-8 encoded values with a length are between 2 and 4 bytes.
  559|  1.05k|  if (len < 2 || len > 4) {
  ------------------
  |  Branch (559:7): [True: 12, False: 1.04k]
  |  Branch (559:18): [True: 4, False: 1.04k]
  ------------------
  560|     16|    return -1;
  561|     16|  }
  562|       |  // Grab initial bits of the code.
  563|  1.04k|  int ucc = *(*in)++ & ((1 << (7 - len)) - 1);
  564|  3.17k|  for (int i = 0; i < len - 1; i++) {
  ------------------
  |  Branch (564:19): [True: 2.14k, False: 1.02k]
  ------------------
  565|  2.14k|    if ((**in & 0xC0) != 0x80) return -1;  // Upper bits must 1 0.
  ------------------
  |  Branch (565:9): [True: 14, False: 2.12k]
  ------------------
  566|  2.12k|    ucc <<= 6;
  567|  2.12k|    ucc |= *(*in)++ & 0x3F;  // Grab 6 more bits of the code.
  568|  2.12k|  }
  569|       |  // UTF-8 cannot encode values between 0xD800 and 0xDFFF (reserved for
  570|       |  // UTF-16 surrogate pairs).
  571|  1.02k|  if (ucc >= 0xD800 && ucc <= 0xDFFF) {
  ------------------
  |  Branch (571:7): [True: 553, False: 476]
  |  Branch (571:24): [True: 11, False: 542]
  ------------------
  572|     11|    return -1;
  573|     11|  }
  574|       |  // UTF-8 must represent code points in their shortest possible encoding.
  575|  1.01k|  switch (len) {
  ------------------
  |  Branch (575:11): [True: 1.01k, False: 0]
  ------------------
  576|    266|    case 2:
  ------------------
  |  Branch (576:5): [True: 266, False: 752]
  ------------------
  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: 7, False: 259]
  |  Branch (578:27): [True: 0, False: 259]
  ------------------
  579|      7|        return -1;
  580|      7|      }
  581|    259|      break;
  582|    425|    case 3:
  ------------------
  |  Branch (582:5): [True: 425, False: 593]
  ------------------
  583|       |      // Three bytes of UTF-8 can represent code points from U+0800 to U+FFFF.
  584|    425|      if (ucc < 0x0800 || ucc > 0xFFFF) {
  ------------------
  |  Branch (584:11): [True: 11, False: 414]
  |  Branch (584:27): [True: 0, False: 414]
  ------------------
  585|     11|        return -1;
  586|     11|      }
  587|    414|      break;
  588|    414|    case 4:
  ------------------
  |  Branch (588:5): [True: 327, False: 691]
  ------------------
  589|       |      // Four bytes of UTF-8 can represent code points from U+10000 to U+10FFFF.
  590|    327|      if (ucc < 0x10000 || ucc > 0x10FFFF) {
  ------------------
  |  Branch (590:11): [True: 12, False: 315]
  |  Branch (590:28): [True: 11, False: 304]
  ------------------
  591|     23|        return -1;
  592|     23|      }
  593|    304|      break;
  594|  1.01k|  }
  595|    977|  return ucc;
  596|  1.01k|}
_ZN11flatbuffers11NumToStringIiEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  131|   221k|std::string NumToString(T t) {
  132|       |  // clang-format off
  133|       |
  134|   221k|  #ifndef FLATBUFFERS_PREFER_PRINTF
  135|   221k|    std::stringstream ss;
  136|   221k|    ss << t;
  137|   221k|    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|   221k|}
_ZN11flatbuffers13FloatToStringIdEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_i:
  160|  3.27k|std::string FloatToString(T t, int precision) {
  161|       |  // clang-format off
  162|       |
  163|  3.27k|  #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|  3.27k|    std::stringstream ss;
  167|       |    // Use std::fixed to suppress scientific notation.
  168|  3.27k|    ss << std::fixed;
  169|       |    // Default precision is 6, we want that to be higher for doubles.
  170|  3.27k|    ss << std::setprecision(precision);
  171|  3.27k|    ss << t;
  172|  3.27k|    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|  3.27k|  auto p = s.find_last_not_of('0');
  180|  3.27k|  if (p != std::string::npos) {
  ------------------
  |  Branch (180:7): [True: 3.27k, False: 0]
  ------------------
  181|       |    // Strip trailing zeroes. If it is a whole number, keep one zero.
  182|  3.27k|    s.resize(p + (s[p] == '.' ? 2 : 1));
  ------------------
  |  Branch (182:19): [True: 725, False: 2.55k]
  ------------------
  183|  3.27k|  }
  184|  3.27k|  return s;
  185|  3.27k|}
_ZN11flatbuffers19StringToIntegerImplIlEEbPT_PKcib:
  294|   155M|                                const bool check_errno = true) {
  295|       |  // T is int64_t or uint64_T
  296|   155M|  FLATBUFFERS_ASSERT(str);
  297|   155M|  if (base <= 0) {
  ------------------
  |  Branch (297:7): [True: 77.4M, False: 77.6M]
  ------------------
  298|  77.4M|    auto s = str;
  299|  77.4M|    while (*s && !is_digit(*s)) s++;
  ------------------
  |  Branch (299:12): [True: 77.4M, False: 193]
  |  Branch (299:18): [True: 11.3k, False: 77.4M]
  ------------------
  300|  77.4M|    if (s[0] == '0' && is_alpha_char(s[1], 'X'))
  ------------------
  |  Branch (300:9): [True: 77.2M, False: 174k]
  |  Branch (300:24): [True: 3.50k, False: 77.2M]
  ------------------
  301|  3.50k|      return StringToIntegerImpl(val, str, 16, check_errno);
  302|       |    // if a prefix not match, try base=10
  303|  77.4M|    return StringToIntegerImpl(val, str, 10, check_errno);
  304|  77.6M|  } else {
  305|  77.6M|    if (check_errno) errno = 0;  // clear thread-local errno
  ------------------
  |  Branch (305:9): [True: 77.4M, False: 181k]
  ------------------
  306|  77.6M|    auto endptr = str;
  307|  77.6M|    strtoval_impl(val, str, const_cast<char**>(&endptr), base);
  308|  77.6M|    if ((*endptr != '\0') || (endptr == str)) {
  ------------------
  |  Branch (308:9): [True: 603, False: 77.6M]
  |  Branch (308:30): [True: 32, False: 77.6M]
  ------------------
  309|    635|      *val = 0;      // erase partial result
  310|    635|      return false;  // invalid string
  311|    635|    }
  312|       |    // errno is out-of-range, return MAX/MIN
  313|  77.6M|    if (check_errno && errno) return false;
  ------------------
  |  Branch (313:9): [True: 77.4M, False: 181k]
  |  Branch (313:24): [True: 346, False: 77.4M]
  ------------------
  314|  77.6M|    return true;
  315|  77.6M|  }
  316|   155M|}
_ZN11flatbuffers19StringToIntegerImplImEEbPT_PKcib:
  294|   166k|                                const bool check_errno = true) {
  295|       |  // T is int64_t or uint64_T
  296|   166k|  FLATBUFFERS_ASSERT(str);
  297|   166k|  if (base <= 0) {
  ------------------
  |  Branch (297:7): [True: 81.8k, False: 84.3k]
  ------------------
  298|  81.8k|    auto s = str;
  299|  83.2k|    while (*s && !is_digit(*s)) s++;
  ------------------
  |  Branch (299:12): [True: 83.2k, False: 26]
  |  Branch (299:18): [True: 1.41k, False: 81.8k]
  ------------------
  300|  81.8k|    if (s[0] == '0' && is_alpha_char(s[1], 'X'))
  ------------------
  |  Branch (300:9): [True: 17.5k, False: 64.3k]
  |  Branch (300:24): [True: 1.21k, False: 16.2k]
  ------------------
  301|  1.21k|      return StringToIntegerImpl(val, str, 16, check_errno);
  302|       |    // if a prefix not match, try base=10
  303|  80.6k|    return StringToIntegerImpl(val, str, 10, check_errno);
  304|  84.3k|  } else {
  305|  84.3k|    if (check_errno) errno = 0;  // clear thread-local errno
  ------------------
  |  Branch (305:9): [True: 84.3k, False: 0]
  ------------------
  306|  84.3k|    auto endptr = str;
  307|  84.3k|    strtoval_impl(val, str, const_cast<char**>(&endptr), base);
  308|  84.3k|    if ((*endptr != '\0') || (endptr == str)) {
  ------------------
  |  Branch (308:9): [True: 36, False: 84.3k]
  |  Branch (308:30): [True: 7, False: 84.3k]
  ------------------
  309|     43|      *val = 0;      // erase partial result
  310|     43|      return false;  // invalid string
  311|     43|    }
  312|       |    // errno is out-of-range, return MAX/MIN
  313|  84.3k|    if (check_errno && errno) return false;
  ------------------
  |  Branch (313:9): [True: 84.3k, False: 0]
  |  Branch (313:24): [True: 26, False: 84.3k]
  ------------------
  314|  84.3k|    return true;
  315|  84.3k|  }
  316|   166k|}
_ZN11flatbuffers17StringToFloatImplIfEEbPT_PKc:
  319|  22.4k|inline bool StringToFloatImpl(T* val, const char* const str) {
  320|       |  // Type T must be either float or double.
  321|  22.4k|  FLATBUFFERS_ASSERT(str && val);
  322|  22.4k|  auto end = str;
  323|  22.4k|  strtoval_impl(val, str, const_cast<char**>(&end));
  324|  22.4k|  auto done = (end != str) && (*end == '\0');
  ------------------
  |  Branch (324:15): [True: 22.3k, False: 71]
  |  Branch (324:31): [True: 22.3k, False: 9]
  ------------------
  325|  22.4k|  if (!done) *val = 0;  // erase partial result
  ------------------
  |  Branch (325:7): [True: 80, False: 22.3k]
  ------------------
  326|  22.4k|  if (done && std::isnan(*val)) {
  ------------------
  |  Branch (326:7): [True: 22.3k, False: 80]
  |  Branch (326:15): [True: 255, False: 22.1k]
  ------------------
  327|    255|    *val = std::numeric_limits<T>::quiet_NaN();
  328|    255|  }
  329|  22.4k|  return done;
  330|  22.4k|}
_ZN11flatbuffers17StringToFloatImplIdEEbPT_PKc:
  319|  99.7k|inline bool StringToFloatImpl(T* val, const char* const str) {
  320|       |  // Type T must be either float or double.
  321|  99.7k|  FLATBUFFERS_ASSERT(str && val);
  322|  99.7k|  auto end = str;
  323|  99.7k|  strtoval_impl(val, str, const_cast<char**>(&end));
  324|  99.7k|  auto done = (end != str) && (*end == '\0');
  ------------------
  |  Branch (324:15): [True: 98.8k, False: 895]
  |  Branch (324:31): [True: 98.6k, False: 188]
  ------------------
  325|  99.7k|  if (!done) *val = 0;  // erase partial result
  ------------------
  |  Branch (325:7): [True: 1.08k, False: 98.6k]
  ------------------
  326|  99.7k|  if (done && std::isnan(*val)) {
  ------------------
  |  Branch (326:7): [True: 98.6k, False: 1.08k]
  |  Branch (326:15): [True: 1.09k, False: 97.5k]
  ------------------
  327|  1.09k|    *val = std::numeric_limits<T>::quiet_NaN();
  328|  1.09k|  }
  329|  99.7k|  return done;
  330|  99.7k|}
_ZN11flatbuffers11NumToStringIlEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  131|  50.1k|std::string NumToString(T t) {
  132|       |  // clang-format off
  133|       |
  134|  50.1k|  #ifndef FLATBUFFERS_PREFER_PRINTF
  135|  50.1k|    std::stringstream ss;
  136|  50.1k|    ss << t;
  137|  50.1k|    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.1k|}
_ZN11flatbuffers11NumToStringImEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  131|  1.86k|std::string NumToString(T t) {
  132|       |  // clang-format off
  133|       |
  134|  1.86k|  #ifndef FLATBUFFERS_PREFER_PRINTF
  135|  1.86k|    std::stringstream ss;
  136|  1.86k|    ss << t;
  137|  1.86k|    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.86k|}
_ZN11flatbuffers14StringToNumberIhEEbPKcPT_:
  339|  63.4k|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|  63.4k|  static_assert(sizeof(T) < sizeof(int64_t), "unexpected type T");
  343|  63.4k|  FLATBUFFERS_ASSERT(s && val);
  344|  63.4k|  int64_t i64;
  345|       |  // The errno check isn't needed, will return MAX/MIN on overflow.
  346|  63.4k|  if (StringToIntegerImpl(&i64, s, 0, false)) {
  ------------------
  |  Branch (346:7): [True: 63.3k, False: 82]
  ------------------
  347|  63.3k|    const int64_t max = (flatbuffers::numeric_limits<T>::max)();
  348|  63.3k|    const int64_t min = flatbuffers::numeric_limits<T>::lowest();
  349|  63.3k|    if (i64 > max) {
  ------------------
  |  Branch (349:9): [True: 74, False: 63.2k]
  ------------------
  350|     74|      *val = static_cast<T>(max);
  351|     74|      return false;
  352|     74|    }
  353|  63.2k|    if (i64 < min) {
  ------------------
  |  Branch (353:9): [True: 204, False: 63.0k]
  ------------------
  354|       |      // For unsigned types return max to distinguish from
  355|       |      // "no conversion can be performed" when 0 is returned.
  356|    204|      *val = static_cast<T>(flatbuffers::is_unsigned<T>::value ? max : min);
  ------------------
  |  Branch (356:29): [True: 204, Folded]
  ------------------
  357|    204|      return false;
  358|    204|    }
  359|  63.0k|    *val = static_cast<T>(i64);
  360|  63.0k|    return true;
  361|  63.2k|  }
  362|     82|  *val = 0;
  363|     82|  return false;
  364|  63.4k|}
_ZN11flatbuffers14StringToNumberItEEbPKcPT_:
  339|  14.2k|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.2k|  static_assert(sizeof(T) < sizeof(int64_t), "unexpected type T");
  343|  14.2k|  FLATBUFFERS_ASSERT(s && val);
  344|  14.2k|  int64_t i64;
  345|       |  // The errno check isn't needed, will return MAX/MIN on overflow.
  346|  14.2k|  if (StringToIntegerImpl(&i64, s, 0, false)) {
  ------------------
  |  Branch (346:7): [True: 14.1k, False: 40]
  ------------------
  347|  14.1k|    const int64_t max = (flatbuffers::numeric_limits<T>::max)();
  348|  14.1k|    const int64_t min = flatbuffers::numeric_limits<T>::lowest();
  349|  14.1k|    if (i64 > max) {
  ------------------
  |  Branch (349:9): [True: 47, False: 14.1k]
  ------------------
  350|     47|      *val = static_cast<T>(max);
  351|     47|      return false;
  352|     47|    }
  353|  14.1k|    if (i64 < min) {
  ------------------
  |  Branch (353:9): [True: 169, False: 13.9k]
  ------------------
  354|       |      // For unsigned types return max to distinguish from
  355|       |      // "no conversion can be performed" when 0 is returned.
  356|    169|      *val = static_cast<T>(flatbuffers::is_unsigned<T>::value ? max : min);
  ------------------
  |  Branch (356:29): [True: 169, Folded]
  ------------------
  357|    169|      return false;
  358|    169|    }
  359|  13.9k|    *val = static_cast<T>(i64);
  360|  13.9k|    return true;
  361|  14.1k|  }
  362|     40|  *val = 0;
  363|     40|  return false;
  364|  14.2k|}
_ZN11flatbuffers11NumToStringIjEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  131|   180k|std::string NumToString(T t) {
  132|       |  // clang-format off
  133|       |
  134|   180k|  #ifndef FLATBUFFERS_PREFER_PRINTF
  135|   180k|    std::stringstream ss;
  136|   180k|    ss << t;
  137|   180k|    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|   180k|}
_ZN11flatbuffers14StringToNumberIjEEbPKcPT_:
  339|  15.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|  15.9k|  static_assert(sizeof(T) < sizeof(int64_t), "unexpected type T");
  343|  15.9k|  FLATBUFFERS_ASSERT(s && val);
  344|  15.9k|  int64_t i64;
  345|       |  // The errno check isn't needed, will return MAX/MIN on overflow.
  346|  15.9k|  if (StringToIntegerImpl(&i64, s, 0, false)) {
  ------------------
  |  Branch (346:7): [True: 15.8k, False: 39]
  ------------------
  347|  15.8k|    const int64_t max = (flatbuffers::numeric_limits<T>::max)();
  348|  15.8k|    const int64_t min = flatbuffers::numeric_limits<T>::lowest();
  349|  15.8k|    if (i64 > max) {
  ------------------
  |  Branch (349:9): [True: 29, False: 15.8k]
  ------------------
  350|     29|      *val = static_cast<T>(max);
  351|     29|      return false;
  352|     29|    }
  353|  15.8k|    if (i64 < min) {
  ------------------
  |  Branch (353:9): [True: 79, False: 15.7k]
  ------------------
  354|       |      // For unsigned types return max to distinguish from
  355|       |      // "no conversion can be performed" when 0 is returned.
  356|     79|      *val = static_cast<T>(flatbuffers::is_unsigned<T>::value ? max : min);
  ------------------
  |  Branch (356:29): [True: 79, Folded]
  ------------------
  357|     79|      return false;
  358|     79|    }
  359|  15.7k|    *val = static_cast<T>(i64);
  360|  15.7k|    return true;
  361|  15.8k|  }
  362|     39|  *val = 0;
  363|     39|  return false;
  364|  15.9k|}
_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.7k, False: 26]
  ------------------
  347|  20.7k|    const int64_t max = (flatbuffers::numeric_limits<T>::max)();
  348|  20.7k|    const int64_t min = flatbuffers::numeric_limits<T>::lowest();
  349|  20.7k|    if (i64 > max) {
  ------------------
  |  Branch (349:9): [True: 41, False: 20.6k]
  ------------------
  350|     41|      *val = static_cast<T>(max);
  351|     41|      return false;
  352|     41|    }
  353|  20.6k|    if (i64 < min) {
  ------------------
  |  Branch (353:9): [True: 82, False: 20.6k]
  ------------------
  354|       |      // For unsigned types return max to distinguish from
  355|       |      // "no conversion can be performed" when 0 is returned.
  356|     82|      *val = static_cast<T>(flatbuffers::is_unsigned<T>::value ? max : min);
  ------------------
  |  Branch (356:29): [Folded, False: 82]
  ------------------
  357|     82|      return false;
  358|     82|    }
  359|  20.6k|    *val = static_cast<T>(i64);
  360|  20.6k|    return true;
  361|  20.6k|  }
  362|     26|  *val = 0;
  363|     26|  return false;
  364|  20.7k|}
_ZN11flatbuffers14StringToNumberIsEEbPKcPT_:
  339|  31.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|  31.7k|  static_assert(sizeof(T) < sizeof(int64_t), "unexpected type T");
  343|  31.7k|  FLATBUFFERS_ASSERT(s && val);
  344|  31.7k|  int64_t i64;
  345|       |  // The errno check isn't needed, will return MAX/MIN on overflow.
  346|  31.7k|  if (StringToIntegerImpl(&i64, s, 0, false)) {
  ------------------
  |  Branch (346:7): [True: 31.7k, False: 33]
  ------------------
  347|  31.7k|    const int64_t max = (flatbuffers::numeric_limits<T>::max)();
  348|  31.7k|    const int64_t min = flatbuffers::numeric_limits<T>::lowest();
  349|  31.7k|    if (i64 > max) {
  ------------------
  |  Branch (349:9): [True: 35, False: 31.7k]
  ------------------
  350|     35|      *val = static_cast<T>(max);
  351|     35|      return false;
  352|     35|    }
  353|  31.7k|    if (i64 < min) {
  ------------------
  |  Branch (353:9): [True: 71, False: 31.6k]
  ------------------
  354|       |      // For unsigned types return max to distinguish from
  355|       |      // "no conversion can be performed" when 0 is returned.
  356|     71|      *val = static_cast<T>(flatbuffers::is_unsigned<T>::value ? max : min);
  ------------------
  |  Branch (356:29): [Folded, False: 71]
  ------------------
  357|     71|      return false;
  358|     71|    }
  359|  31.6k|    *val = static_cast<T>(i64);
  360|  31.6k|    return true;
  361|  31.7k|  }
  362|     33|  *val = 0;
  363|     33|  return false;
  364|  31.7k|}
_ZN11flatbuffers14StringToNumberIiEEbPKcPT_:
  339|  35.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|  35.9k|  static_assert(sizeof(T) < sizeof(int64_t), "unexpected type T");
  343|  35.9k|  FLATBUFFERS_ASSERT(s && val);
  344|  35.9k|  int64_t i64;
  345|       |  // The errno check isn't needed, will return MAX/MIN on overflow.
  346|  35.9k|  if (StringToIntegerImpl(&i64, s, 0, false)) {
  ------------------
  |  Branch (346:7): [True: 35.8k, False: 47]
  ------------------
  347|  35.8k|    const int64_t max = (flatbuffers::numeric_limits<T>::max)();
  348|  35.8k|    const int64_t min = flatbuffers::numeric_limits<T>::lowest();
  349|  35.8k|    if (i64 > max) {
  ------------------
  |  Branch (349:9): [True: 16, False: 35.8k]
  ------------------
  350|     16|      *val = static_cast<T>(max);
  351|     16|      return false;
  352|     16|    }
  353|  35.8k|    if (i64 < min) {
  ------------------
  |  Branch (353:9): [True: 51, False: 35.8k]
  ------------------
  354|       |      // For unsigned types return max to distinguish from
  355|       |      // "no conversion can be performed" when 0 is returned.
  356|     51|      *val = static_cast<T>(flatbuffers::is_unsigned<T>::value ? max : min);
  ------------------
  |  Branch (356:29): [Folded, False: 51]
  ------------------
  357|     51|      return false;
  358|     51|    }
  359|  35.8k|    *val = static_cast<T>(i64);
  360|  35.8k|    return true;
  361|  35.8k|  }
  362|     47|  *val = 0;
  363|     47|  return false;
  364|  35.9k|}
_ZN11flatbuffers11NumToStringIsEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  131|    624|std::string NumToString(T t) {
  132|       |  // clang-format off
  133|       |
  134|    624|  #ifndef FLATBUFFERS_PREFER_PRINTF
  135|    624|    std::stringstream ss;
  136|    624|    ss << t;
  137|    624|    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|    624|}
_ZN11flatbuffers11NumToStringItEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEET_:
  131|    904|std::string NumToString(T t) {
  132|       |  // clang-format off
  133|       |
  134|    904|  #ifndef FLATBUFFERS_PREFER_PRINTF
  135|    904|    std::stringstream ss;
  136|    904|    ss << t;
  137|    904|    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|    904|}

_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection6ObjectEEEjE4sizeEv:
  178|   115k|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection6ObjectEEEjE3GetEj:
  194|  55.3k|  return_type Get(SizeT i) const {
  195|  55.3k|    FLATBUFFERS_ASSERT(i < size());
  196|  55.3k|    return IndirectHelper<T>::Read(Data(), i);
  197|  55.3k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection6ObjectEEEjE4DataEv:
  274|  55.3k|  const uint8_t* Data() const {
  275|  55.3k|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|  55.3k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection5FieldEEEjE4sizeEv:
  178|   139k|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection5FieldEEEjE3GetEj:
  194|  40.1k|  return_type Get(SizeT i) const {
  195|  40.1k|    FLATBUFFERS_ASSERT(i < size());
  196|  40.1k|    return IndirectHelper<T>::Read(Data(), i);
  197|  40.1k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection5FieldEEEjE4DataEv:
  274|  40.1k|  const uint8_t* Data() const {
  275|  40.1k|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|  40.1k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection8KeyValueEEEjE4sizeEv:
  178|  2.32k|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection8KeyValueEEEjE3GetEj:
  194|    776|  return_type Get(SizeT i) const {
  195|    776|    FLATBUFFERS_ASSERT(i < size());
  196|    776|    return IndirectHelper<T>::Read(Data(), i);
  197|    776|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection8KeyValueEEEjE4DataEv:
  274|    776|  const uint8_t* Data() const {
  275|    776|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|    776|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection4EnumEEEjE4sizeEv:
  178|   165k|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection4EnumEEEjE3GetEj:
  194|  80.2k|  return_type Get(SizeT i) const {
  195|  80.2k|    FLATBUFFERS_ASSERT(i < size());
  196|  80.2k|    return IndirectHelper<T>::Read(Data(), i);
  197|  80.2k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection4EnumEEEjE4DataEv:
  274|  80.2k|  const uint8_t* Data() const {
  275|  80.2k|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|  80.2k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7EnumValEEEjE4sizeEv:
  178|   309k|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7EnumValEEEjE3GetEj:
  194|   114k|  return_type Get(SizeT i) const {
  195|   114k|    FLATBUFFERS_ASSERT(i < size());
  196|   114k|    return IndirectHelper<T>::Read(Data(), i);
  197|   114k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7EnumValEEEjE4DataEv:
  274|   114k|  const uint8_t* Data() const {
  275|   114k|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|   114k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7ServiceEEEjE4sizeEv:
  178|  6.79k|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7ServiceEEEjE3GetEj:
  194|    793|  return_type Get(SizeT i) const {
  195|    793|    FLATBUFFERS_ASSERT(i < size());
  196|    793|    return IndirectHelper<T>::Read(Data(), i);
  197|    793|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7ServiceEEEjE4DataEv:
  274|    793|  const uint8_t* Data() const {
  275|    793|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|    793|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7RPCCallEEEjE4sizeEv:
  178|  4.07k|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7RPCCallEEEjE3GetEj:
  194|  1.64k|  return_type Get(SizeT i) const {
  195|  1.64k|    FLATBUFFERS_ASSERT(i < size());
  196|  1.64k|    return IndirectHelper<T>::Read(Data(), i);
  197|  1.64k|  }
_ZNK11flatbuffers6VectorINS_6OffsetIN10reflection7RPCCallEEEjE4DataEv:
  274|  1.64k|  const uint8_t* Data() const {
  275|  1.64k|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|  1.64k|  }
_ZNK11flatbuffers11VectorOfAny4sizeEv:
  417|     52|  uoffset_t size() const { return EndianScalar(length_); }
_ZN11flatbuffers11VectorOfAny4DataEv:
  422|    104|  uint8_t* Data() { return reinterpret_cast<uint8_t*>(&length_ + 1); }
_ZNK11flatbuffers6VectorIcjE4DataEv:
  274|  4.85M|  const uint8_t* Data() const {
  275|  4.85M|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|  4.85M|  }
_ZNK11flatbuffers6VectorIcjE4sizeEv:
  178|  4.85M|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorIcjE4dataEv:
  281|  4.85M|  const T* data() const { return reinterpret_cast<const T*>(Data()); }
_ZNK11flatbuffers6VectorIhjE4sizeEv:
  178|    316|  SizeT size() const { return EndianScalar(length_); }
_ZNK11flatbuffers6VectorIhjE3GetEj:
  194|    156|  return_type Get(SizeT i) const {
  195|    156|    FLATBUFFERS_ASSERT(i < size());
  196|    156|    return IndirectHelper<T>::Read(Data(), i);
  197|    156|  }
_ZNK11flatbuffers6VectorIhjE4DataEv:
  274|    156|  const uint8_t* Data() const {
  275|    156|    return reinterpret_cast<const uint8_t*>(&length_ + 1);
  276|    156|  }
_ZN11flatbuffers6VectorINS_6OffsetINS_5TableEEEjE4dataEv:
  282|  4.48k|  T* data() { return reinterpret_cast<T*>(Data()); }
_ZN11flatbuffers6VectorINS_6OffsetINS_5TableEEEjE4DataEv:
  278|  4.48k|  uint8_t* Data() { return reinterpret_cast<uint8_t*>(&length_ + 1); }
_ZNK11flatbuffers6VectorINS_6OffsetINS_5TableEEEjE4sizeEv:
  178|  2.24k|  SizeT size() const { return EndianScalar(length_); }

_ZN11flatbuffers15vector_downwardIjEC2EmPNS_9AllocatorEbmj:
   41|  34.1k|      : allocator_(allocator),
   42|  34.1k|        own_allocator_(own_allocator),
   43|  34.1k|        initial_size_(initial_size),
   44|  34.1k|        max_size_(max_size),
   45|  34.1k|        buffer_minalign_(buffer_minalign),
   46|  34.1k|        reserved_(0),
   47|  34.1k|        size_(0),
   48|  34.1k|        buf_(nullptr),
   49|  34.1k|        cur_(nullptr),
   50|  34.1k|        scratch_(nullptr) {}
_ZN11flatbuffers15vector_downwardIjED2Ev:
   81|  34.1k|  ~vector_downward() {
   82|  34.1k|    clear_buffer();
   83|  34.1k|    clear_allocator();
   84|  34.1k|  }
_ZN11flatbuffers15vector_downwardIjE12clear_bufferEv:
  112|  34.1k|  void clear_buffer() {
  113|  34.1k|    if (buf_) Deallocate(allocator_, buf_, reserved_);
  ------------------
  |  Branch (113:9): [True: 15.7k, False: 18.4k]
  ------------------
  114|  34.1k|    buf_ = nullptr;
  115|  34.1k|  }
_ZN11flatbuffers15vector_downwardIjE15clear_allocatorEv:
  104|  34.1k|  void clear_allocator() {
  105|  34.1k|    if (own_allocator_ && allocator_) {
  ------------------
  |  Branch (105:9): [True: 0, False: 34.1k]
  |  Branch (105:27): [True: 0, False: 0]
  ------------------
  106|      0|      delete allocator_;
  107|      0|    }
  108|  34.1k|    allocator_ = nullptr;
  109|  34.1k|    own_allocator_ = false;
  110|  34.1k|  }
_ZNK11flatbuffers15vector_downwardIjE4dataEv:
  183|  5.79M|  uint8_t* data() const {
  184|  5.79M|    FLATBUFFERS_ASSERT(cur_);
  185|  5.79M|    return cur_;
  186|  5.79M|  }
_ZNK11flatbuffers15vector_downwardIjE4sizeEv:
  171|  21.7M|  inline SizeT size() const { return size_; }
_ZN11flatbuffers15vector_downwardIjE18scratch_push_smallINS_21FlatBufferBuilderImplILb0EE8FieldLocEEEvRKT_:
  214|  1.90M|  void scratch_push_small(const T& t) {
  215|  1.90M|    ensure_space(sizeof(T));
  216|  1.90M|    *reinterpret_cast<T*>(scratch_) = t;
  217|  1.90M|    scratch_ += sizeof(T);
  218|  1.90M|  }
_ZN11flatbuffers15vector_downwardIjE12ensure_spaceEm:
  144|  7.75M|  size_t ensure_space(size_t len) {
  145|  7.75M|    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.75M|    if (len > unused_buffer_size()) {
  ------------------
  |  Branch (148:9): [True: 28.2k, False: 7.73M]
  ------------------
  149|  28.2k|      reallocate(len);
  150|  28.2k|    }
  151|  7.75M|    FLATBUFFERS_ASSERT(size() < max_size_);
  152|  7.75M|    return len;
  153|  7.75M|  }
_ZNK11flatbuffers15vector_downwardIjE18unused_buffer_sizeEv:
  174|  7.75M|  SizeT unused_buffer_size() const {
  175|  7.75M|    return static_cast<SizeT>(cur_ - scratch_);
  176|  7.75M|  }
_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.5k, False: 15.7k]
  ------------------
  284|  28.2k|    reserved_ = (reserved_ + buffer_minalign_ - 1) & ~(buffer_minalign_ - 1);
  285|  28.2k|    if (buf_) {
  ------------------
  |  Branch (285:9): [True: 12.5k, False: 15.7k]
  ------------------
  286|  12.5k|      buf_ = ReallocateDownward(allocator_, buf_, old_reserved, reserved_,
  287|  12.5k|                                old_size, old_scratch_size);
  288|  15.7k|    } else {
  289|  15.7k|      buf_ = Allocate(allocator_, reserved_);
  290|  15.7k|    }
  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.28M|  void fill(size_t zero_pad_bytes) {
  223|  6.28M|    make_space(zero_pad_bytes);
  224|  9.25M|    for (size_t i = 0; i < zero_pad_bytes; i++) cur_[i] = 0;
  ------------------
  |  Branch (224:24): [True: 2.96M, False: 6.28M]
  ------------------
  225|  6.28M|  }
_ZN11flatbuffers15vector_downwardIjE10make_spaceEm:
  155|  10.9M|  inline uint8_t* make_space(size_t len) {
  156|  10.9M|    if (len) {
  ------------------
  |  Branch (156:9): [True: 5.81M, False: 5.10M]
  ------------------
  157|  5.81M|      ensure_space(len);
  158|  5.81M|      cur_ -= len;
  159|  5.81M|      size_ += static_cast<SizeT>(len);
  160|  5.81M|    }
  161|  10.9M|    return cur_;
  162|  10.9M|  }
_ZN11flatbuffers15vector_downwardIjE10push_smallIaEEvRKT_:
  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_smallIiEEvRKT_:
  208|   857k|  void push_small(const T& little_endian_t) {
  209|   857k|    make_space(sizeof(T));
  210|   857k|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|   857k|  }
_ZN11flatbuffers15vector_downwardIjE10push_smallItEEvRKT_:
  208|  68.3k|  void push_small(const T& little_endian_t) {
  209|  68.3k|    make_space(sizeof(T));
  210|  68.3k|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|  68.3k|  }
_ZN11flatbuffers15vector_downwardIjE10push_smallIjEEvRKT_:
  208|  2.32M|  void push_small(const T& little_endian_t) {
  209|  2.32M|    make_space(sizeof(T));
  210|  2.32M|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|  2.32M|  }
_ZN11flatbuffers15vector_downwardIjE8fill_bigEm:
  229|   661k|  void fill_big(size_t zero_pad_bytes) {
  230|   661k|    memset(make_space(zero_pad_bytes), 0, zero_pad_bytes);
  231|   661k|  }
_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|   768k|  void scratch_pop(size_t bytes_to_remove) { scratch_ -= bytes_to_remove; }
_ZNK11flatbuffers15vector_downwardIjE12scratch_dataEv:
  188|   661k|  uint8_t* scratch_data() const {
  189|   661k|    FLATBUFFERS_ASSERT(buf_);
  190|   661k|    return buf_;
  191|   661k|  }
_ZNK11flatbuffers15vector_downwardIjE7data_atEm:
  198|  7.91M|  uint8_t* data_at(size_t offset) const { return buf_ + reserved_ - offset; }
_ZN11flatbuffers15vector_downwardIjE3popEm:
  233|   790k|  void pop(size_t bytes_to_remove) {
  234|   790k|    cur_ += bytes_to_remove;
  235|   790k|    size_ -= static_cast<SizeT>(bytes_to_remove);
  236|   790k|  }
_ZN11flatbuffers15vector_downwardIjE18scratch_push_smallIjEEvRKT_:
  214|  36.3k|  void scratch_push_small(const T& t) {
  215|  36.3k|    ensure_space(sizeof(T));
  216|  36.3k|    *reinterpret_cast<T*>(scratch_) = t;
  217|  36.3k|    scratch_ += sizeof(T);
  218|  36.3k|  }
_ZN11flatbuffers15vector_downwardIjE4pushEPKhm:
  200|   482k|  void push(const uint8_t* bytes, size_t num) {
  201|   482k|    if (num > 0) {
  ------------------
  |  Branch (201:9): [True: 333k, False: 148k]
  ------------------
  202|   333k|      memcpy(make_space(num), bytes, num);
  203|   333k|    }
  204|   482k|  }
_ZN11flatbuffers15vector_downwardIjE10push_smallIlEEvRKT_:
  208|  53.1k|  void push_small(const T& little_endian_t) {
  209|  53.1k|    make_space(sizeof(T));
  210|  53.1k|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|  53.1k|  }
_ZN11flatbuffers15vector_downwardIjE10push_smallIhEEvRKT_:
  208|   142k|  void push_small(const T& little_endian_t) {
  209|   142k|    make_space(sizeof(T));
  210|   142k|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|   142k|  }
_ZN11flatbuffers15vector_downwardIjE10push_smallIdEEvRKT_:
  208|  10.6k|  void push_small(const T& little_endian_t) {
  209|  10.6k|    make_space(sizeof(T));
  210|  10.6k|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|  10.6k|  }
_ZN11flatbuffers15vector_downwardIjE10push_smallImEEvRKT_:
  208|  27.3k|  void push_small(const T& little_endian_t) {
  209|  27.3k|    make_space(sizeof(T));
  210|  27.3k|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|  27.3k|  }
_ZN11flatbuffers15vector_downwardIjE13clear_scratchEv:
  102|  38.8k|  void clear_scratch() { scratch_ = buf_; }
_ZN11flatbuffers15vector_downwardIjE10push_smallIsEEvRKT_:
  208|  7.45k|  void push_small(const T& little_endian_t) {
  209|  7.45k|    make_space(sizeof(T));
  210|  7.45k|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|  7.45k|  }
_ZN11flatbuffers15vector_downwardIjE10push_smallIfEEvRKT_:
  208|  9.35k|  void push_small(const T& little_endian_t) {
  209|  9.35k|    make_space(sizeof(T));
  210|  9.35k|    *reinterpret_cast<T*>(cur_) = little_endian_t;
  211|  9.35k|  }
_ZN11flatbuffers15vector_downwardIjE5clearEv:
   91|  33.4k|  void clear() {
   92|  33.4k|    if (buf_) {
  ------------------
  |  Branch (92:9): [True: 229, False: 33.1k]
  ------------------
   93|    229|      cur_ = buf_ + reserved_;
   94|  33.1k|    } else {
   95|  33.1k|      reserved_ = 0;
   96|  33.1k|      cur_ = nullptr;
   97|  33.1k|    }
   98|  33.4k|    size_ = 0;
   99|  33.4k|    clear_scratch();
  100|  33.4k|  }

_ZN11flatbuffers16VerifierTemplateILb0EEC2EPKhmjjb:
   55|  5.20k|      : VerifierTemplate(buf, buf_len, [&] {
   56|  5.20k|          Options opts;
   57|  5.20k|          opts.max_depth = max_depth;
   58|  5.20k|          opts.max_tables = max_tables;
   59|  5.20k|          opts.check_alignment = check_alignment;
   60|  5.20k|          return opts;
   61|  5.20k|        }()) {}
_ZZN11flatbuffers16VerifierTemplateILb0EEC1EPKhmjjbENKUlvE_clEv:
   55|  5.20k|      : VerifierTemplate(buf, buf_len, [&] {
   56|  5.20k|          Options opts;
   57|  5.20k|          opts.max_depth = max_depth;
   58|  5.20k|          opts.max_tables = max_tables;
   59|  5.20k|          opts.check_alignment = check_alignment;
   60|  5.20k|          return opts;
   61|  5.20k|        }()) {}
_ZN11flatbuffers16VerifierTemplateILb0EEC2EPKhmRKNS1_7OptionsE:
   46|  5.20k|      : buf_(buf), size_(buf_len), opts_(opts) {
   47|  5.20k|    FLATBUFFERS_ASSERT(size_ < opts.max_size);
   48|  5.20k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE12VerifyBufferIN10reflection6SchemaEEEbPKc:
  251|  5.20k|  bool VerifyBuffer(const char* const identifier) {
  252|  5.20k|    return VerifyBufferFromStart<T>(identifier, 0);
  253|  5.20k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE21VerifyBufferFromStartIN10reflection6SchemaEEEbPKcm:
  203|  5.20k|  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.20k|    if (!Check(size_ >= FLATBUFFERS_MIN_BUFFER_SIZE)) return false;
  ------------------
  |  |  349|  5.20k|#define FLATBUFFERS_MIN_BUFFER_SIZE sizeof(::flatbuffers::uoffset_t) + \
  |  |  350|  5.20k|  sizeof(::flatbuffers::soffset_t) + sizeof(uint16_t) + sizeof(uint16_t)
  ------------------
  |  Branch (207:9): [True: 0, False: 5.20k]
  ------------------
  208|       |
  209|       |    // If an identifier is provided, check that we have a buffer
  210|  5.20k|    if (identifier && !Check((size_ >= 2 * sizeof(flatbuffers::uoffset_t) &&
  ------------------
  |  Branch (210:9): [True: 5.20k, False: 0]
  |  Branch (210:23): [True: 0, False: 5.20k]
  |  Branch (210:31): [True: 5.20k, False: 0]
  ------------------
  211|  5.20k|                              BufferHasIdentifier(buf_ + start, identifier)))) {
  ------------------
  |  Branch (211:31): [True: 5.20k, 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.20k|    const auto o = VerifyOffset<uoffset_t>(start);
  217|  5.20k|    if (!Check(o != 0)) return false;
  ------------------
  |  Branch (217:9): [True: 0, False: 5.20k]
  ------------------
  218|  5.20k|    if (!(reinterpret_cast<const T*>(buf_ + start + o)->Verify(*this))) {
  ------------------
  |  Branch (218:9): [True: 0, False: 5.20k]
  ------------------
  219|      0|      return false;
  220|      0|    }
  221|  5.20k|    if (TrackVerifierBufferSize) {
  ------------------
  |  Branch (221:9): [Folded, False: 5.20k]
  ------------------
  222|      0|      if (GetComputedSize() == 0) return false;
  ------------------
  |  Branch (222:11): [True: 0, False: 0]
  ------------------
  223|      0|    }
  224|  5.20k|    return true;
  225|  5.20k|  }
_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|   848k|  size_t VerifyOffset(const size_t start) const {
  266|   848k|    if (!Verify<OffsetT>(start)) return 0;
  ------------------
  |  Branch (266:9): [True: 0, False: 848k]
  ------------------
  267|   848k|    const auto o = ReadScalar<OffsetT>(buf_ + start);
  268|       |    // May not point to itself.
  269|   848k|    if (!Check(o != 0)) return 0;
  ------------------
  |  Branch (269:9): [True: 0, False: 848k]
  ------------------
  270|       |    // Can't wrap around larger than the max size.
  271|   848k|    if (!Check(static_cast<SOffsetT>(o) >= 0)) return 0;
  ------------------
  |  Branch (271:9): [True: 0, False: 848k]
  ------------------
  272|       |    // Must be inside the buffer to create a pointer from it (pointer outside
  273|       |    // buffer is UB).
  274|   848k|    if (!Verify(start + o, 1)) return 0;
  ------------------
  |  Branch (274:9): [True: 0, False: 848k]
  ------------------
  275|   848k|    return o;
  276|   848k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE6VerifyIjEEbm:
   95|  1.45M|  bool Verify(const size_t elem) const {
   96|  1.45M|    return VerifyAlignment(elem, sizeof(T)) && Verify(elem, sizeof(T));
  ------------------
  |  Branch (96:12): [True: 1.45M, False: 0]
  |  Branch (96:48): [True: 1.45M, False: 0]
  ------------------
   97|  1.45M|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE15VerifyAlignmentEmm:
   89|  4.02M|  bool VerifyAlignment(const size_t elem, const size_t align) const {
   90|  4.02M|    return Check((elem & (align - 1)) == 0 || !opts_.check_alignment);
  ------------------
  |  Branch (90:18): [True: 4.02M, False: 0]
  |  Branch (90:47): [True: 0, False: 0]
  ------------------
   91|  4.02M|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE6VerifyEmm:
   79|  5.92M|  bool Verify(const size_t elem, const size_t elem_len) const {
   80|  5.92M|    if (TrackVerifierBufferSize) {
  ------------------
  |  Branch (80:9): [Folded, False: 5.92M]
  ------------------
   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.92M|    return Check(elem_len < size_ && elem <= size_ - elem_len);
  ------------------
  |  Branch (86:18): [True: 5.92M, False: 0]
  |  Branch (86:38): [True: 5.92M, False: 5.20k]
  ------------------
   87|  5.92M|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyOffsetIjEEmPKht:
  279|   843k|  size_t VerifyOffset(const uint8_t* const base, const voffset_t start) const {
  280|   843k|    return VerifyOffset<OffsetT>(static_cast<size_t>(base - buf_) + start);
  281|   843k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection6ObjectEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|  5.20k|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|  5.20k|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 0, False: 5.20k]
  |  Branch (126:20): [True: 5.20k, False: 0]
  ------------------
  127|  5.20k|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|  5.20k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOrStringIjEEbPKhmPm:
  148|   604k|                            size_t* const end = nullptr) const {
  149|   604k|    const auto vec_offset = static_cast<size_t>(vec - buf_);
  150|       |    // Check we can read the size field.
  151|   604k|    if (!Verify<LenT>(vec_offset)) return false;
  ------------------
  |  Branch (151:9): [True: 0, False: 604k]
  ------------------
  152|       |    // Check the whole array. If this is a string, the byte past the array must
  153|       |    // be 0.
  154|   604k|    const LenT size = ReadScalar<LenT>(vec);
  155|   604k|    const auto max_elems = opts_.max_size / elem_size;
  156|   604k|    if (!Check(size < max_elems))
  ------------------
  |  Branch (156:9): [True: 0, False: 604k]
  ------------------
  157|      0|      return false;  // Protect against byte_size overflowing.
  158|   604k|    const auto byte_size = sizeof(LenT) + elem_size * size;
  159|   604k|    if (end) *end = vec_offset + byte_size;
  ------------------
  |  Branch (159:9): [True: 448k, False: 156k]
  ------------------
  160|   604k|    return Verify(vec_offset, byte_size);
  161|   604k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOfTablesIN10reflection6ObjectEEEbPKNS_6VectorINS_6OffsetIT_EEjEE:
  175|  5.20k|  bool VerifyVectorOfTables(const Vector<Offset<T>>* const vec) {
  176|  5.20k|    if (vec) {
  ------------------
  |  Branch (176:9): [True: 5.20k, False: 0]
  ------------------
  177|  60.6k|      for (uoffset_t i = 0; i < vec->size(); i++) {
  ------------------
  |  Branch (177:29): [True: 55.3k, False: 5.20k]
  ------------------
  178|  55.3k|        if (!vec->Get(i)->Verify(*this)) return false;
  ------------------
  |  Branch (178:13): [True: 0, False: 55.3k]
  ------------------
  179|  55.3k|      }
  180|  5.20k|    }
  181|  5.20k|    return true;
  182|  5.20k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection5FieldEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|  58.9k|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|  58.9k|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 0, False: 58.9k]
  |  Branch (126:20): [True: 58.9k, False: 0]
  ------------------
  127|  58.9k|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|  58.9k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOfTablesIN10reflection5FieldEEEbPKNS_6VectorINS_6OffsetIT_EEjEE:
  175|  58.9k|  bool VerifyVectorOfTables(const Vector<Offset<T>>* const vec) {
  176|  58.9k|    if (vec) {
  ------------------
  |  Branch (176:9): [True: 58.9k, False: 0]
  ------------------
  177|  99.1k|      for (uoffset_t i = 0; i < vec->size(); i++) {
  ------------------
  |  Branch (177:29): [True: 40.1k, False: 58.9k]
  ------------------
  178|  40.1k|        if (!vec->Get(i)->Verify(*this)) return false;
  ------------------
  |  Branch (178:13): [True: 0, False: 40.1k]
  ------------------
  179|  40.1k|      }
  180|  58.9k|    }
  181|  58.9k|    return true;
  182|  58.9k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE11VerifyTableIN10reflection4TypeEEEbPKT_:
  119|   235k|  bool VerifyTable(const T* const table) {
  120|   235k|    return !table || table->Verify(*this);
  ------------------
  |  Branch (120:12): [True: 0, False: 235k]
  |  Branch (120:22): [True: 235k, False: 0]
  ------------------
  121|   235k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE11VerifyFieldIaEEbPKhtm:
  112|   123k|                   const size_t align) const {
  113|   123k|    const auto f = static_cast<size_t>(base - buf_) + elem_off;
  114|   123k|    return VerifyAlignment(f, align) && Verify(f, sizeof(T));
  ------------------
  |  Branch (114:12): [True: 123k, False: 0]
  |  Branch (114:41): [True: 123k, False: 0]
  ------------------
  115|   123k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE11VerifyFieldIjEEbPKhtm:
  112|   441k|                   const size_t align) const {
  113|   441k|    const auto f = static_cast<size_t>(base - buf_) + elem_off;
  114|   441k|    return VerifyAlignment(f, align) && Verify(f, sizeof(T));
  ------------------
  |  Branch (114:12): [True: 441k, False: 0]
  |  Branch (114:41): [True: 441k, False: 0]
  ------------------
  115|   441k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE11VerifyFieldItEEbPKhtm:
  112|  66.1k|                   const size_t align) const {
  113|  66.1k|    const auto f = static_cast<size_t>(base - buf_) + elem_off;
  114|  66.1k|    return VerifyAlignment(f, align) && Verify(f, sizeof(T));
  ------------------
  |  Branch (114:12): [True: 66.1k, False: 0]
  |  Branch (114:41): [True: 66.1k, False: 0]
  ------------------
  115|  66.1k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE11VerifyFieldIlEEbPKhtm:
  112|  35.1k|                   const size_t align) const {
  113|  35.1k|    const auto f = static_cast<size_t>(base - buf_) + elem_off;
  114|  35.1k|    return VerifyAlignment(f, align) && Verify(f, sizeof(T));
  ------------------
  |  Branch (114:12): [True: 35.1k, False: 0]
  |  Branch (114:41): [True: 35.1k, False: 0]
  ------------------
  115|  35.1k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE11VerifyFieldIdEEbPKhtm:
  112|    101|                   const size_t align) const {
  113|    101|    const auto f = static_cast<size_t>(base - buf_) + elem_off;
  114|    101|    return VerifyAlignment(f, align) && Verify(f, sizeof(T));
  ------------------
  |  Branch (114:12): [True: 101, False: 0]
  |  Branch (114:41): [True: 101, False: 0]
  ------------------
  115|    101|  }
_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|   178k|                   const size_t align) const {
  113|   178k|    const auto f = static_cast<size_t>(base - buf_) + elem_off;
  114|   178k|    return VerifyAlignment(f, align) && Verify(f, sizeof(T));
  ------------------
  |  Branch (114:12): [True: 178k, False: 0]
  |  Branch (114:41): [True: 178k, False: 0]
  ------------------
  115|   178k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection8KeyValueEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|   296k|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|   296k|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 295k, False: 776]
  |  Branch (126:20): [True: 776, False: 0]
  ------------------
  127|    776|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|   296k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOfTablesIN10reflection8KeyValueEEEbPKNS_6VectorINS_6OffsetIT_EEjEE:
  175|   296k|  bool VerifyVectorOfTables(const Vector<Offset<T>>* const vec) {
  176|   296k|    if (vec) {
  ------------------
  |  Branch (176:9): [True: 776, False: 295k]
  ------------------
  177|  1.55k|      for (uoffset_t i = 0; i < vec->size(); i++) {
  ------------------
  |  Branch (177:29): [True: 776, False: 776]
  ------------------
  178|    776|        if (!vec->Get(i)->Verify(*this)) return false;
  ------------------
  |  Branch (178:13): [True: 0, False: 776]
  ------------------
  179|    776|      }
  180|    776|    }
  181|   296k|    return true;
  182|   296k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetINS_6StringEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|   296k|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|   296k|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 296k, False: 0]
  |  Branch (126:20): [True: 0, False: 0]
  ------------------
  127|      0|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|   296k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE21VerifyVectorOfStringsEPKNS_6VectorINS_6OffsetINS_6StringEEEjEE:
  164|   296k|  bool VerifyVectorOfStrings(const Vector<Offset<String>>* const vec) const {
  165|   296k|    if (vec) {
  ------------------
  |  Branch (165:9): [True: 0, False: 296k]
  ------------------
  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|   296k|    return true;
  171|   296k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection4EnumEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|  5.20k|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|  5.20k|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 0, False: 5.20k]
  |  Branch (126:20): [True: 5.20k, False: 0]
  ------------------
  127|  5.20k|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|  5.20k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOfTablesIN10reflection4EnumEEEbPKNS_6VectorINS_6OffsetIT_EEjEE:
  175|  5.20k|  bool VerifyVectorOfTables(const Vector<Offset<T>>* const vec) {
  176|  5.20k|    if (vec) {
  ------------------
  |  Branch (176:9): [True: 5.20k, False: 0]
  ------------------
  177|  85.4k|      for (uoffset_t i = 0; i < vec->size(); i++) {
  ------------------
  |  Branch (177:29): [True: 80.2k, False: 5.20k]
  ------------------
  178|  80.2k|        if (!vec->Get(i)->Verify(*this)) return false;
  ------------------
  |  Branch (178:13): [True: 0, False: 80.2k]
  ------------------
  179|  80.2k|      }
  180|  5.20k|    }
  181|  5.20k|    return true;
  182|  5.20k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection7EnumValEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|  80.2k|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|  80.2k|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 0, False: 80.2k]
  |  Branch (126:20): [True: 80.2k, False: 0]
  ------------------
  127|  80.2k|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|  80.2k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOfTablesIN10reflection7EnumValEEEbPKNS_6VectorINS_6OffsetIT_EEjEE:
  175|  80.2k|  bool VerifyVectorOfTables(const Vector<Offset<T>>* const vec) {
  176|  80.2k|    if (vec) {
  ------------------
  |  Branch (176:9): [True: 80.2k, False: 0]
  ------------------
  177|   194k|      for (uoffset_t i = 0; i < vec->size(); i++) {
  ------------------
  |  Branch (177:29): [True: 114k, False: 80.2k]
  ------------------
  178|   114k|        if (!vec->Get(i)->Verify(*this)) return false;
  ------------------
  |  Branch (178:13): [True: 0, False: 114k]
  ------------------
  179|   114k|      }
  180|  80.2k|    }
  181|  80.2k|    return true;
  182|  80.2k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyStringEPKNS_6StringE:
  137|   448k|  bool VerifyString(const String* const str) const {
  138|   448k|    size_t end;
  139|   448k|    return !str || (VerifyVectorOrString<uoffset_t>(
  ------------------
  |  Branch (139:12): [True: 0, False: 448k]
  |  Branch (139:21): [True: 448k, False: 0]
  ------------------
  140|   448k|                        reinterpret_cast<const uint8_t*>(str), 1, &end) &&
  141|   448k|                    Verify(end, 1) &&           // Must have terminator
  ------------------
  |  Branch (141:21): [True: 448k, False: 0]
  ------------------
  142|   448k|                    Check(buf_[end] == '\0'));  // Terminating byte must be 0.
  ------------------
  |  Branch (142:21): [True: 448k, False: 0]
  ------------------
  143|   448k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE11VerifyTableIN10reflection6ObjectEEEbPKT_:
  119|  8.49k|  bool VerifyTable(const T* const table) {
  120|  8.49k|    return !table || table->Verify(*this);
  ------------------
  |  Branch (120:12): [True: 4.96k, False: 3.52k]
  |  Branch (120:22): [True: 3.52k, False: 0]
  ------------------
  121|  8.49k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection7ServiceEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|  5.20k|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|  5.20k|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 0, False: 5.20k]
  |  Branch (126:20): [True: 5.20k, False: 0]
  ------------------
  127|  5.20k|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|  5.20k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOfTablesIN10reflection7ServiceEEEbPKNS_6VectorINS_6OffsetIT_EEjEE:
  175|  5.20k|  bool VerifyVectorOfTables(const Vector<Offset<T>>* const vec) {
  176|  5.20k|    if (vec) {
  ------------------
  |  Branch (176:9): [True: 5.20k, False: 0]
  ------------------
  177|  6.00k|      for (uoffset_t i = 0; i < vec->size(); i++) {
  ------------------
  |  Branch (177:29): [True: 793, False: 5.20k]
  ------------------
  178|    793|        if (!vec->Get(i)->Verify(*this)) return false;
  ------------------
  |  Branch (178:13): [True: 0, False: 793]
  ------------------
  179|    793|      }
  180|  5.20k|    }
  181|  5.20k|    return true;
  182|  5.20k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection7RPCCallEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|    793|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|    793|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 0, False: 793]
  |  Branch (126:20): [True: 793, False: 0]
  ------------------
  127|    793|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|    793|  }
_ZN11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOfTablesIN10reflection7RPCCallEEEbPKNS_6VectorINS_6OffsetIT_EEjEE:
  175|    793|  bool VerifyVectorOfTables(const Vector<Offset<T>>* const vec) {
  176|    793|    if (vec) {
  ------------------
  |  Branch (176:9): [True: 793, False: 0]
  ------------------
  177|  2.43k|      for (uoffset_t i = 0; i < vec->size(); i++) {
  ------------------
  |  Branch (177:29): [True: 1.64k, False: 793]
  ------------------
  178|  1.64k|        if (!vec->Get(i)->Verify(*this)) return false;
  ------------------
  |  Branch (178:13): [True: 0, False: 1.64k]
  ------------------
  179|  1.64k|      }
  180|    793|    }
  181|    793|    return true;
  182|    793|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE11VerifyFieldImEEbPKhtm:
  112|    198|                   const size_t align) const {
  113|    198|    const auto f = static_cast<size_t>(base - buf_) + elem_off;
  114|    198|    return VerifyAlignment(f, align) && Verify(f, sizeof(T));
  ------------------
  |  Branch (114:12): [True: 198, False: 0]
  |  Branch (114:41): [True: 198, False: 0]
  ------------------
  115|    198|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection10SchemaFileEEEjEEbPKNS_6VectorIT0_T1_EE:
  125|  5.20k|  bool VerifyVector(const Vector<T, LenT>* const vec) const {
  126|  5.20k|    return !vec || VerifyVectorOrString<LenT>(
  ------------------
  |  Branch (126:12): [True: 5.20k, False: 0]
  |  Branch (126:20): [True: 0, False: 0]
  ------------------
  127|      0|                       reinterpret_cast<const uint8_t*>(vec), sizeof(T));
  128|  5.20k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE20VerifyVectorOfTablesIN10reflection10SchemaFileEEEbPKNS_6VectorINS_6OffsetIT_EEjEE:
  175|  5.20k|  bool VerifyVectorOfTables(const Vector<Offset<T>>* const vec) {
  176|  5.20k|    if (vec) {
  ------------------
  |  Branch (176:9): [True: 0, False: 5.20k]
  ------------------
  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.20k|    return true;
  182|  5.20k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE8EndTableEv:
  293|   537k|  bool EndTable() {
  294|   537k|    depth_--;
  295|   537k|    return true;
  296|   537k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE16VerifyTableStartEPKh:
  185|   542k|  bool VerifyTableStart(const uint8_t* const table) {
  186|       |    // Check the vtable offset.
  187|   542k|    const auto tableo = static_cast<size_t>(table - buf_);
  188|   542k|    if (!Verify<soffset_t>(tableo)) return false;
  ------------------
  |  Branch (188:9): [True: 0, False: 542k]
  ------------------
  189|       |    // This offset may be signed, but doing the subtraction unsigned always
  190|       |    // gives the result we want.
  191|   542k|    const auto vtableo =
  192|   542k|        tableo - static_cast<size_t>(ReadScalar<soffset_t>(table));
  193|       |    // Check the vtable size field, then check vtable fits in its entirety.
  194|   542k|    if (!(VerifyComplexity() && Verify<voffset_t>(vtableo) &&
  ------------------
  |  Branch (194:11): [True: 542k, False: 0]
  |  Branch (194:33): [True: 537k, False: 5.20k]
  ------------------
  195|   537k|          VerifyAlignment(ReadScalar<voffset_t>(buf_ + vtableo),
  ------------------
  |  Branch (195:11): [True: 537k, False: 0]
  ------------------
  196|   537k|                          sizeof(voffset_t))))
  197|  5.20k|      return false;
  198|   537k|    const auto vsize = ReadScalar<voffset_t>(buf_ + vtableo);
  199|   537k|    return Check((vsize & 1) == 0) && Verify(vtableo, vsize);
  ------------------
  |  Branch (199:12): [True: 537k, False: 0]
  |  Branch (199:39): [True: 537k, False: 0]
  ------------------
  200|   542k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE6VerifyIiEEbm:
   95|   542k|  bool Verify(const size_t elem) const {
   96|   542k|    return VerifyAlignment(elem, sizeof(T)) && Verify(elem, sizeof(T));
  ------------------
  |  Branch (96:12): [True: 542k, False: 0]
  |  Branch (96:48): [True: 542k, False: 0]
  ------------------
   97|   542k|  }
_ZN11flatbuffers16VerifierTemplateILb0EE16VerifyComplexityEv:
  286|   542k|  bool VerifyComplexity() {
  287|   542k|    depth_++;
  288|   542k|    num_tables_++;
  289|   542k|    return Check(depth_ <= opts_.max_depth && num_tables_ <= opts_.max_tables);
  ------------------
  |  Branch (289:18): [True: 542k, False: 0]
  |  Branch (289:47): [True: 542k, False: 0]
  ------------------
  290|   542k|  }
_ZNK11flatbuffers16VerifierTemplateILb0EE6VerifyItEEbm:
   95|   542k|  bool Verify(const size_t elem) const {
   96|   542k|    return VerifyAlignment(elem, sizeof(T)) && Verify(elem, sizeof(T));
  ------------------
  |  Branch (96:12): [True: 542k, False: 0]
  |  Branch (96:48): [True: 537k, False: 5.20k]
  ------------------
   97|   542k|  }

_ZN11flatbuffers6Parser7MessageERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  386|  45.1k|void Parser::Message(const std::string& msg) {
  387|  45.1k|  if (!error_.empty()) error_ += "\n";  // log all warnings and errors
  ------------------
  |  Branch (387:7): [True: 21.0k, False: 24.1k]
  ------------------
  388|  45.1k|  error_ += file_being_parsed_.length() ? AbsolutePath(file_being_parsed_) : "";
  ------------------
  |  Branch (388:13): [True: 15, False: 45.0k]
  ------------------
  389|       |  // clang-format off
  390|       |
  391|       |  #ifdef _WIN32  // MSVC alike
  392|       |    error_ +=
  393|       |        "(" + NumToString(line_) + ", " + NumToString(CursorPosition()) + ")";
  394|       |  #else  // gcc alike
  395|  45.1k|    if (file_being_parsed_.length()) error_ += ":";
  ------------------
  |  Branch (395:9): [True: 15, False: 45.0k]
  ------------------
  396|  45.1k|    error_ += NumToString(line_) + ": " + NumToString(CursorPosition());
  397|  45.1k|  #endif
  398|       |  // clang-format on
  399|  45.1k|  error_ += ": " + msg;
  400|  45.1k|}
_ZN11flatbuffers6Parser7WarningERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  402|  22.0k|void Parser::Warning(const std::string& msg) {
  403|  22.0k|  if (!opts.no_warnings) {
  ------------------
  |  Branch (403:7): [True: 22.0k, False: 0]
  ------------------
  404|  22.0k|    Message("warning: " + msg);
  405|  22.0k|    has_warning_ = true;  // for opts.warnings_as_errors
  406|  22.0k|  }
  407|  22.0k|}
_ZN11flatbuffers6Parser5ErrorERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  409|  23.0k|CheckedError Parser::Error(const std::string& msg) {
  410|  23.0k|  Message("error: " + msg);
  411|  23.0k|  return CheckedError(true);
  412|  23.0k|}
_ZN11flatbuffers6Parser12RecurseErrorEv:
  414|     15|CheckedError Parser::RecurseError() {
  415|     15|  return Error("maximum parsing depth " + NumToString(parse_depth_counter_) +
  416|     15|               " reached");
  417|     15|}
_ZNK11flatbuffers9Namespace21GetFullyQualifiedNameERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEm:
  449|  3.12M|                                             size_t max_components) const {
  450|       |  // Early exit if we don't have a defined namespace.
  451|  3.12M|  if (components.empty() || !max_components) {
  ------------------
  |  Branch (451:7): [True: 416k, False: 2.70M]
  |  Branch (451:29): [True: 0, False: 2.70M]
  ------------------
  452|   416k|    return name;
  453|   416k|  }
  454|  2.70M|  std::string stream_str;
  455|  6.60M|  for (size_t i = 0; i < std::min(components.size(), max_components); i++) {
  ------------------
  |  Branch (455:22): [True: 3.90M, False: 2.70M]
  ------------------
  456|  3.90M|    stream_str += components[i];
  457|  3.90M|    stream_str += '.';
  458|  3.90M|  }
  459|  2.70M|  if (!stream_str.empty()) stream_str.pop_back();
  ------------------
  |  Branch (459:7): [True: 2.70M, False: 0]
  ------------------
  460|  2.70M|  if (name.length()) {
  ------------------
  |  Branch (460:7): [True: 2.70M, False: 35]
  ------------------
  461|  2.70M|    stream_str += '.';
  462|  2.70M|    stream_str += name;
  463|  2.70M|  }
  464|  2.70M|  return stream_str;
  465|  3.12M|}
_ZNK11flatbuffers6Parser15TokenToStringIdEi:
  467|  8.73k|std::string Parser::TokenToStringId(int t) const {
  468|  8.73k|  return t == kTokenIdentifier ? attribute_ : TokenToString(t);
  ------------------
  |  Branch (468:10): [True: 538, False: 8.20k]
  ------------------
  469|  8.73k|}
_ZN11flatbuffers6Parser11ParseHexNumEiPm:
  472|  2.53k|CheckedError Parser::ParseHexNum(int nibbles, uint64_t* val) {
  473|  2.53k|  FLATBUFFERS_ASSERT(nibbles > 0);
  474|  12.1k|  for (int i = 0; i < nibbles; i++)
  ------------------
  |  Branch (474:19): [True: 9.60k, False: 2.49k]
  ------------------
  475|  9.60k|    if (!is_xdigit(cursor_[i]))
  ------------------
  |  Branch (475:9): [True: 39, False: 9.57k]
  ------------------
  476|     39|      return Error("escape code must be followed by " + NumToString(nibbles) +
  477|     39|                   " hex digits");
  478|  2.49k|  std::string target(cursor_, cursor_ + nibbles);
  479|  2.49k|  *val = StringToUInt(target.c_str(), 16);
  480|  2.49k|  cursor_ += nibbles;
  481|  2.49k|  return NoError();
  482|  2.53k|}
_ZN11flatbuffers6Parser17SkipByteOrderMarkEv:
  484|  28.2k|CheckedError Parser::SkipByteOrderMark() {
  485|  28.2k|  if (static_cast<unsigned char>(*cursor_) != 0xef) return NoError();
  ------------------
  |  Branch (485:7): [True: 28.1k, False: 21]
  ------------------
  486|     21|  cursor_++;
  487|     21|  if (static_cast<unsigned char>(*cursor_) != 0xbb)
  ------------------
  |  Branch (487:7): [True: 9, False: 12]
  ------------------
  488|      9|    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.58M|CheckedError Parser::Next() {
  497|  4.58M|  doc_comment_.clear();
  498|  4.58M|  prev_cursor_ = cursor_;
  499|  4.58M|  bool seen_newline = cursor_ == source_;
  500|  4.58M|  attribute_.clear();
  501|  4.58M|  attr_is_trivial_ascii_string_ = true;
  502|  4.89M|  for (;;) {
  503|  4.89M|    char c = *cursor_++;
  504|  4.89M|    token_ = c;
  505|  4.89M|    switch (c) {
  506|  29.4k|      case '\0':
  ------------------
  |  Branch (506:7): [True: 29.4k, False: 4.86M]
  ------------------
  507|  29.4k|        cursor_--;
  508|  29.4k|        token_ = kTokenEof;
  509|  29.4k|        return NoError();
  510|  10.9k|      case ' ':
  ------------------
  |  Branch (510:7): [True: 10.9k, False: 4.88M]
  ------------------
  511|  23.9k|      case '\r':
  ------------------
  |  Branch (511:7): [True: 13.0k, False: 4.88M]
  ------------------
  512|   176k|      case '\t':
  ------------------
  |  Branch (512:7): [True: 152k, False: 4.74M]
  ------------------
  513|   176k|        break;
  514|   105k|      case '\n':
  ------------------
  |  Branch (514:7): [True: 105k, False: 4.79M]
  ------------------
  515|   105k|        MarkNewLine();
  516|   105k|        seen_newline = true;
  517|   105k|        break;
  518|   292k|      case '{':
  ------------------
  |  Branch (518:7): [True: 292k, False: 4.60M]
  ------------------
  519|   570k|      case '}':
  ------------------
  |  Branch (519:7): [True: 277k, False: 4.62M]
  ------------------
  520|   594k|      case '(':
  ------------------
  |  Branch (520:7): [True: 24.0k, False: 4.87M]
  ------------------
  521|   617k|      case ')':
  ------------------
  |  Branch (521:7): [True: 23.3k, False: 4.87M]
  ------------------
  522|   799k|      case '[':
  ------------------
  |  Branch (522:7): [True: 182k, False: 4.71M]
  ------------------
  523|   972k|      case ']':
  ------------------
  |  Branch (523:7): [True: 172k, False: 4.72M]
  ------------------
  524|   972k|      case '<':
  ------------------
  |  Branch (524:7): [True: 11, False: 4.89M]
  ------------------
  525|   972k|      case '>':
  ------------------
  |  Branch (525:7): [True: 10, False: 4.89M]
  ------------------
  526|  1.95M|      case ',':
  ------------------
  |  Branch (526:7): [True: 986k, False: 3.91M]
  ------------------
  527|  2.31M|      case ':':
  ------------------
  |  Branch (527:7): [True: 359k, False: 4.53M]
  ------------------
  528|  2.41M|      case ';':
  ------------------
  |  Branch (528:7): [True: 97.0k, False: 4.80M]
  ------------------
  529|  2.54M|      case '=':
  ------------------
  |  Branch (529:7): [True: 125k, False: 4.77M]
  ------------------
  530|  2.54M|        return NoError();
  531|  15.8k|      case '\"':
  ------------------
  |  Branch (531:7): [True: 15.8k, False: 4.88M]
  ------------------
  532|  61.5k|      case '\'': {
  ------------------
  |  Branch (532:7): [True: 45.6k, False: 4.85M]
  ------------------
  533|  61.5k|        int unicode_high_surrogate = -1;
  534|       |
  535|  1.70M|        while (*cursor_ != c) {
  ------------------
  |  Branch (535:16): [True: 1.64M, False: 61.2k]
  ------------------
  536|  1.64M|          if (*cursor_ < ' ' && static_cast<signed char>(*cursor_) >= 0)
  ------------------
  |  Branch (536:15): [True: 381k, False: 1.26M]
  |  Branch (536:33): [True: 274, False: 381k]
  ------------------
  537|    274|            return Error("illegal character in string constant");
  538|  1.64M|          if (*cursor_ == '\\') {
  ------------------
  |  Branch (538:15): [True: 5.58k, False: 1.64M]
  ------------------
  539|  5.58k|            attr_is_trivial_ascii_string_ = false;  // has escape sequence
  540|  5.58k|            cursor_++;
  541|  5.58k|            if (unicode_high_surrogate != -1 && *cursor_ != 'u') {
  ------------------
  |  Branch (541:17): [True: 618, False: 4.96k]
  |  Branch (541:49): [True: 11, False: 607]
  ------------------
  542|     11|              return Error(
  543|     11|                  "illegal Unicode sequence (unpaired high surrogate)");
  544|     11|            }
  545|  5.57k|            switch (*cursor_) {
  546|    374|              case 'n':
  ------------------
  |  Branch (546:15): [True: 374, False: 5.20k]
  ------------------
  547|    374|                attribute_ += '\n';
  548|    374|                cursor_++;
  549|    374|                break;
  550|    413|              case 't':
  ------------------
  |  Branch (550:15): [True: 413, False: 5.16k]
  ------------------
  551|    413|                attribute_ += '\t';
  552|    413|                cursor_++;
  553|    413|                break;
  554|    251|              case 'r':
  ------------------
  |  Branch (554:15): [True: 251, False: 5.32k]
  ------------------
  555|    251|                attribute_ += '\r';
  556|    251|                cursor_++;
  557|    251|                break;
  558|    337|              case 'b':
  ------------------
  |  Branch (558:15): [True: 337, False: 5.23k]
  ------------------
  559|    337|                attribute_ += '\b';
  560|    337|                cursor_++;
  561|    337|                break;
  562|    326|              case 'f':
  ------------------
  |  Branch (562:15): [True: 326, False: 5.24k]
  ------------------
  563|    326|                attribute_ += '\f';
  564|    326|                cursor_++;
  565|    326|                break;
  566|    200|              case '\"':
  ------------------
  |  Branch (566:15): [True: 200, False: 5.37k]
  ------------------
  567|    200|                attribute_ += '\"';
  568|    200|                cursor_++;
  569|    200|                break;
  570|    263|              case '\'':
  ------------------
  |  Branch (570:15): [True: 263, False: 5.31k]
  ------------------
  571|    263|                attribute_ += '\'';
  572|    263|                cursor_++;
  573|    263|                break;
  574|    653|              case '\\':
  ------------------
  |  Branch (574:15): [True: 653, False: 4.92k]
  ------------------
  575|    653|                attribute_ += '\\';
  576|    653|                cursor_++;
  577|    653|                break;
  578|    207|              case '/':
  ------------------
  |  Branch (578:15): [True: 207, False: 5.36k]
  ------------------
  579|    207|                attribute_ += '/';
  580|    207|                cursor_++;
  581|    207|                break;
  582|    231|              case 'x': {  // Not in the JSON standard
  ------------------
  |  Branch (582:15): [True: 231, False: 5.34k]
  ------------------
  583|    231|                cursor_++;
  584|    231|                uint64_t val;
  585|    231|                ECHECK(ParseHexNum(2, &val));
  ------------------
  |  |   56|    231|  {                            \
  |  |   57|    231|    auto ce = (call);          \
  |  |   58|    231|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 4, False: 227]
  |  |  ------------------
  |  |   59|    231|  }
  ------------------
  586|    227|                attribute_ += static_cast<char>(val);
  587|    227|                break;
  588|    231|              }
  589|  2.30k|              case 'u': {
  ------------------
  |  Branch (589:15): [True: 2.30k, False: 3.26k]
  ------------------
  590|  2.30k|                cursor_++;
  591|  2.30k|                uint64_t val;
  592|  2.30k|                ECHECK(ParseHexNum(4, &val));
  ------------------
  |  |   56|  2.30k|  {                            \
  |  |   57|  2.30k|    auto ce = (call);          \
  |  |   58|  2.30k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 35, False: 2.27k]
  |  |  ------------------
  |  |   59|  2.30k|  }
  ------------------
  593|  2.27k|                if (val >= 0xD800 && val <= 0xDBFF) {
  ------------------
  |  Branch (593:21): [True: 1.69k, False: 581]
  |  Branch (593:38): [True: 653, False: 1.03k]
  ------------------
  594|    653|                  if (unicode_high_surrogate != -1) {
  ------------------
  |  Branch (594:23): [True: 1, False: 652]
  ------------------
  595|      1|                    return Error(
  596|      1|                        "illegal Unicode sequence (multiple high surrogates)");
  597|    652|                  } else {
  598|    652|                    unicode_high_surrogate = static_cast<int>(val);
  599|    652|                  }
  600|  1.61k|                } else if (val >= 0xDC00 && val <= 0xDFFF) {
  ------------------
  |  Branch (600:28): [True: 1.03k, False: 581]
  |  Branch (600:45): [True: 606, False: 431]
  ------------------
  601|    606|                  if (unicode_high_surrogate == -1) {
  ------------------
  |  Branch (601:23): [True: 9, False: 597]
  ------------------
  602|      9|                    return Error(
  603|      9|                        "illegal Unicode sequence (unpaired low surrogate)");
  604|    597|                  } else {
  605|    597|                    int code_point = 0x10000 +
  606|    597|                                     ((unicode_high_surrogate & 0x03FF) << 10) +
  607|    597|                                     (val & 0x03FF);
  608|    597|                    ToUTF8(code_point, &attribute_);
  609|    597|                    unicode_high_surrogate = -1;
  610|    597|                  }
  611|  1.01k|                } else {
  612|  1.01k|                  if (unicode_high_surrogate != -1) {
  ------------------
  |  Branch (612:23): [True: 1, False: 1.01k]
  ------------------
  613|      1|                    return Error(
  614|      1|                        "illegal Unicode sequence (unpaired high surrogate)");
  615|      1|                  }
  616|  1.01k|                  ToUTF8(static_cast<int>(val), &attribute_);
  617|  1.01k|                }
  618|  2.26k|                break;
  619|  2.27k|              }
  620|  2.26k|              default:
  ------------------
  |  Branch (620:15): [True: 14, False: 5.56k]
  ------------------
  621|     14|                return Error("unknown escape code in string constant");
  622|  5.57k|            }
  623|  1.64M|          } else {  // printable chars + UTF-8 bytes
  624|  1.64M|            if (unicode_high_surrogate != -1) {
  ------------------
  |  Branch (624:17): [True: 14, False: 1.64M]
  ------------------
  625|     14|              return Error(
  626|     14|                  "illegal Unicode sequence (unpaired high surrogate)");
  627|     14|            }
  628|       |            // reset if non-printable
  629|  1.64M|            attr_is_trivial_ascii_string_ &=
  630|  1.64M|                check_ascii_range(*cursor_, ' ', '~');
  631|       |
  632|  1.64M|            attribute_ += *cursor_++;
  633|  1.64M|          }
  634|  1.64M|        }
  635|  61.2k|        if (unicode_high_surrogate != -1) {
  ------------------
  |  Branch (635:13): [True: 10, False: 61.1k]
  ------------------
  636|     10|          return Error("illegal Unicode sequence (unpaired high surrogate)");
  637|     10|        }
  638|  61.1k|        cursor_++;
  639|  61.1k|        if (!attr_is_trivial_ascii_string_ && !opts.allow_non_utf8 &&
  ------------------
  |  Branch (639:13): [True: 33.5k, False: 27.6k]
  |  Branch (639:47): [True: 921, False: 32.6k]
  ------------------
  640|    921|            !ValidateUTF8(attribute_)) {
  ------------------
  |  Branch (640:13): [True: 90, False: 831]
  ------------------
  641|     90|          return Error("illegal UTF-8 sequence");
  642|     90|        }
  643|  61.1k|        token_ = kTokenStringConstant;
  644|  61.1k|        return NoError();
  645|  61.1k|      }
  646|  28.2k|      case '/':
  ------------------
  |  Branch (646:7): [True: 28.2k, False: 4.86M]
  ------------------
  647|  28.2k|        if (*cursor_ == '/') {
  ------------------
  |  Branch (647:13): [True: 27.9k, False: 274]
  ------------------
  648|  27.9k|          const char* start = ++cursor_;
  649|   164k|          while (*cursor_ && *cursor_ != '\n' && *cursor_ != '\r') cursor_++;
  ------------------
  |  Branch (649:18): [True: 164k, False: 229]
  |  Branch (649:30): [True: 137k, False: 26.9k]
  |  Branch (649:50): [True: 136k, False: 827]
  ------------------
  650|  27.9k|          if (*start == '/') {  // documentation comment
  ------------------
  |  Branch (650:15): [True: 23.0k, False: 4.95k]
  ------------------
  651|  23.0k|            if (!seen_newline)
  ------------------
  |  Branch (651:17): [True: 3, False: 22.9k]
  ------------------
  652|      3|              return Error(
  653|      3|                  "a documentation comment should be on a line on its own");
  654|  22.9k|            doc_comment_.push_back(std::string(start + 1, cursor_));
  655|  22.9k|          }
  656|  27.9k|          break;
  657|  27.9k|        } else if (*cursor_ == '*') {
  ------------------
  |  Branch (657:20): [True: 240, False: 34]
  ------------------
  658|    240|          cursor_++;
  659|       |          // TODO: make nested.
  660|  1.04k|          while (*cursor_ != '*' || cursor_[1] != '/') {
  ------------------
  |  Branch (660:18): [True: 643, False: 404]
  |  Branch (660:37): [True: 210, False: 194]
  ------------------
  661|    853|            if (*cursor_ == '\n') MarkNewLine();
  ------------------
  |  Branch (661:17): [True: 195, False: 658]
  ------------------
  662|    853|            if (!*cursor_) return Error("end of file in comment");
  ------------------
  |  Branch (662:17): [True: 46, False: 807]
  ------------------
  663|    807|            cursor_++;
  664|    807|          }
  665|    194|          cursor_ += 2;
  666|    194|          break;
  667|    240|        }
  668|     34|        FLATBUFFERS_FALLTHROUGH();  // else fall thru
  ------------------
  |  |  306|     34|  #define FLATBUFFERS_FALLTHROUGH() [[fallthrough]]
  ------------------
  669|  1.95M|      default:
  ------------------
  |  Branch (669:7): [True: 1.95M, False: 2.94M]
  ------------------
  670|  1.95M|        if (IsIdentifierStart(c)) {
  ------------------
  |  Branch (670:13): [True: 1.34M, False: 607k]
  ------------------
  671|       |          // Collect all chars of an identifier:
  672|  1.34M|          const char* start = cursor_ - 1;
  673|  8.27M|          while (IsIdentifierStart(*cursor_) || is_digit(*cursor_)) cursor_++;
  ------------------
  |  Branch (673:18): [True: 5.97M, False: 2.30M]
  |  Branch (673:49): [True: 951k, False: 1.34M]
  ------------------
  674|  1.34M|          attribute_.append(start, cursor_);
  675|  1.34M|          token_ = kTokenIdentifier;
  676|  1.34M|          return NoError();
  677|  1.34M|        }
  678|       |
  679|   607k|        const auto has_sign = (c == '+') || (c == '-');
  ------------------
  |  Branch (679:31): [True: 3.66k, False: 603k]
  |  Branch (679:45): [True: 6.64k, False: 596k]
  ------------------
  680|   607k|        if (has_sign) {
  ------------------
  |  Branch (680:13): [True: 10.3k, False: 596k]
  ------------------
  681|       |          // Check for +/-inf which is considered a float constant.
  682|  10.3k|          if (strncmp(cursor_, "inf", 3) == 0 &&
  ------------------
  |  Branch (682:15): [True: 2.17k, False: 8.13k]
  ------------------
  683|  2.17k|              !(IsIdentifierStart(cursor_[3]) || is_digit(cursor_[3]))) {
  ------------------
  |  Branch (683:17): [True: 838, False: 1.33k]
  |  Branch (683:50): [True: 334, False: 999]
  ------------------
  684|    999|            attribute_.assign(cursor_ - 1, cursor_ + 3);
  685|    999|            token_ = kTokenFloatConstant;
  686|    999|            cursor_ += 3;
  687|    999|            return NoError();
  688|    999|          }
  689|       |
  690|  9.30k|          if (IsIdentifierStart(*cursor_)) {
  ------------------
  |  Branch (690:15): [True: 2.47k, False: 6.83k]
  ------------------
  691|       |            // '-'/'+' and following identifier - it could be a predefined
  692|       |            // constant. Return the sign in token_, see ParseSingleValue.
  693|  2.47k|            return NoError();
  694|  2.47k|          }
  695|  9.30k|        }
  696|       |
  697|   603k|        auto dot_lvl =
  698|   603k|            (c == '.') ? 0 : 1;  // dot_lvl==0 <=> exactly one '.' seen
  ------------------
  |  Branch (698:13): [True: 63.6k, False: 539k]
  ------------------
  699|   603k|        if (!dot_lvl && !is_digit(*cursor_)) return NoError();  // enum?
  ------------------
  |  Branch (699:13): [True: 63.6k, False: 539k]
  |  Branch (699:25): [True: 29.3k, False: 34.2k]
  ------------------
  700|       |        // Parser accepts hexadecimal-floating-literal (see C++ 5.13.4).
  701|   574k|        if (is_digit(c) || has_sign || !dot_lvl) {
  ------------------
  |  Branch (701:13): [True: 532k, False: 41.5k]
  |  Branch (701:28): [True: 6.83k, False: 34.7k]
  |  Branch (701:40): [True: 34.2k, False: 452]
  ------------------
  702|   573k|          const auto start = cursor_ - 1;
  703|   573k|          auto start_digits = !is_digit(c) ? cursor_ : cursor_ - 1;
  ------------------
  |  Branch (703:31): [True: 41.1k, False: 532k]
  ------------------
  704|   573k|          if (!is_digit(c) && is_digit(*cursor_)) {
  ------------------
  |  Branch (704:15): [True: 41.1k, False: 532k]
  |  Branch (704:31): [True: 39.9k, False: 1.12k]
  ------------------
  705|  39.9k|            start_digits = cursor_;  // see digit in cursor_ position
  706|  39.9k|            c = *cursor_++;
  707|  39.9k|          }
  708|       |          // hex-float can't begind with '.'
  709|   573k|          auto use_hex = dot_lvl && (c == '0') && is_alpha_char(*cursor_, 'X');
  ------------------
  |  Branch (709:26): [True: 539k, False: 34.2k]
  |  Branch (709:37): [True: 106k, False: 432k]
  |  Branch (709:51): [True: 5.14k, False: 101k]
  ------------------
  710|   573k|          if (use_hex) start_digits = ++cursor_;  // '0x' is the prefix, skip it
  ------------------
  |  Branch (710:15): [True: 5.14k, False: 568k]
  ------------------
  711|       |          // Read an integer number or mantisa of float-point number.
  712|   576k|          do {
  713|   576k|            if (use_hex) {
  ------------------
  |  Branch (713:17): [True: 5.34k, False: 570k]
  ------------------
  714|  60.1k|              while (is_xdigit(*cursor_)) cursor_++;
  ------------------
  |  Branch (714:22): [True: 54.7k, False: 5.34k]
  ------------------
  715|   570k|            } else {
  716|  1.13M|              while (is_digit(*cursor_)) cursor_++;
  ------------------
  |  Branch (716:22): [True: 566k, False: 570k]
  ------------------
  717|   570k|            }
  718|   576k|          } while ((*cursor_ == '.') && (++cursor_) && (--dot_lvl >= 0));
  ------------------
  |  Branch (718:20): [True: 2.46k, False: 573k]
  |  Branch (718:41): [True: 2.46k, False: 0]
  |  Branch (718:56): [True: 2.45k, False: 6]
  ------------------
  719|       |          // Exponent of float-point number.
  720|   573k|          if ((dot_lvl >= 0) && (cursor_ > start_digits)) {
  ------------------
  |  Branch (720:15): [True: 573k, False: 6]
  |  Branch (720:33): [True: 573k, False: 61]
  ------------------
  721|       |            // The exponent suffix of hexadecimal float number is mandatory.
  722|   573k|            if (use_hex && !dot_lvl) start_digits = cursor_;
  ------------------
  |  Branch (722:17): [True: 5.13k, False: 568k]
  |  Branch (722:28): [True: 199, False: 4.93k]
  ------------------
  723|   573k|            if ((use_hex && is_alpha_char(*cursor_, 'P')) ||
  ------------------
  |  Branch (723:18): [True: 5.13k, False: 568k]
  |  Branch (723:29): [True: 195, False: 4.94k]
  ------------------
  724|   573k|                is_alpha_char(*cursor_, 'E')) {
  ------------------
  |  Branch (724:17): [True: 1.37k, False: 572k]
  ------------------
  725|  1.56k|              dot_lvl = 0;  // Emulate dot to signal about float-point number.
  726|  1.56k|              cursor_++;
  727|  1.56k|              if (*cursor_ == '+' || *cursor_ == '-') cursor_++;
  ------------------
  |  Branch (727:19): [True: 431, False: 1.13k]
  |  Branch (727:38): [True: 373, False: 765]
  ------------------
  728|  1.56k|              start_digits = cursor_;  // the exponent-part has to have digits
  729|       |              // Exponent is decimal integer number
  730|  10.1k|              while (is_digit(*cursor_)) cursor_++;
  ------------------
  |  Branch (730:22): [True: 8.61k, False: 1.56k]
  ------------------
  731|  1.56k|              if (*cursor_ == '.') {
  ------------------
  |  Branch (731:19): [True: 1, False: 1.56k]
  ------------------
  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.56k|            }
  736|   573k|          }
  737|       |          // Finalize.
  738|   573k|          if ((dot_lvl >= 0) && (cursor_ > start_digits)) {
  ------------------
  |  Branch (738:15): [True: 573k, False: 7]
  |  Branch (738:33): [True: 573k, False: 117]
  ------------------
  739|   573k|            attribute_.append(start, cursor_);
  740|   573k|            token_ = dot_lvl ? kTokenIntegerConstant : kTokenFloatConstant;
  ------------------
  |  Branch (740:22): [True: 535k, False: 38.0k]
  ------------------
  741|   573k|            return NoError();
  742|   573k|          } else {
  743|    124|            return Error("invalid number: " + std::string(start, cursor_));
  744|    124|          }
  745|   573k|        }
  746|    452|        std::string ch;
  747|    452|        ch = c;
  748|    452|        if (false == check_ascii_range(c, ' ', '~'))
  ------------------
  |  Branch (748:13): [True: 331, False: 121]
  ------------------
  749|    331|          ch = "code: " + NumToString(c);
  750|    452|        return Error("illegal character: " + ch);
  751|  4.89M|    }
  752|  4.89M|  }
  753|  4.58M|}
_ZNK11flatbuffers6Parser2IsEi:
  756|  5.08M|bool Parser::Is(int t) const { return t == token_; }
_ZNK11flatbuffers6Parser7IsIdentEPKc:
  758|  3.08M|bool Parser::IsIdent(const char* id) const {
  759|  3.08M|  return token_ == kTokenIdentifier && attribute_ == id;
  ------------------
  |  Branch (759:10): [True: 2.89M, False: 189k]
  |  Branch (759:40): [True: 245k, False: 2.65M]
  ------------------
  760|  3.08M|}
_ZN11flatbuffers6Parser6ExpectEi:
  763|  3.02M|CheckedError Parser::Expect(int t) {
  764|  3.02M|  if (t != token_) {
  ------------------
  |  Branch (764:7): [True: 8.26k, False: 3.01M]
  ------------------
  765|  8.26k|    return Error("expecting: " + TokenToString(t) +
  766|  8.26k|                 " instead got: " + TokenToStringId(token_));
  767|  8.26k|  }
  768|  3.01M|  NEXT();
  ------------------
  |  |   63|  3.01M|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  3.01M|  {                            \
  |  |  |  |   57|  3.01M|    auto ce = (call);          \
  |  |  |  |   58|  3.01M|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 297, False: 3.01M]
  |  |  |  |  ------------------
  |  |  |  |   59|  3.01M|  }
  |  |  ------------------
  ------------------
  769|  3.01M|  return NoError();
  770|  3.01M|}
_ZN11flatbuffers6Parser16ParseNamespacingEPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES8_:
  772|   392k|CheckedError Parser::ParseNamespacing(std::string* id, std::string* last) {
  773|   401k|  while (Is('.')) {
  ------------------
  |  Branch (773:10): [True: 9.38k, False: 392k]
  ------------------
  774|  9.38k|    NEXT();
  ------------------
  |  |   63|  9.38k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  9.38k|  {                            \
  |  |  |  |   57|  9.38k|    auto ce = (call);          \
  |  |  |  |   58|  9.38k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 6, False: 9.37k]
  |  |  |  |  ------------------
  |  |  |  |   59|  9.38k|  }
  |  |  ------------------
  ------------------
  775|  9.37k|    *id += ".";
  776|  9.37k|    *id += attribute_;
  777|  9.37k|    if (last) *last = attribute_;
  ------------------
  |  Branch (777:9): [True: 8.05k, False: 1.32k]
  ------------------
  778|  9.37k|    EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|  9.37k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  9.37k|  {                            \
  |  |  |  |   57|  9.37k|    auto ce = (call);          \
  |  |  |  |   58|  9.37k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 29, False: 9.34k]
  |  |  |  |  ------------------
  |  |  |  |   59|  9.37k|  }
  |  |  ------------------
  ------------------
  779|  9.34k|  }
  780|   392k|  return NoError();
  781|   392k|}
_ZN11flatbuffers6Parser10LookupEnumERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  783|  74.4k|EnumDef* Parser::LookupEnum(const std::string& id) {
  784|       |  // Search thru parent namespaces.
  785|  74.4k|  return LookupTableByName(enums_, id, *current_namespace_, 0);
  786|  74.4k|}
_ZNK11flatbuffers6Parser12LookupStructERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  788|   780k|StructDef* Parser::LookupStruct(const std::string& id) const {
  789|   780k|  auto sd = structs_.Lookup(id);
  790|   780k|  if (sd) sd->refcount++;
  ------------------
  |  Branch (790:7): [True: 214k, False: 566k]
  ------------------
  791|   780k|  return sd;
  792|   780k|}
_ZNK11flatbuffers6Parser32LookupStructThruParentNamespacesERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  795|   223k|    const std::string& id) const {
  796|   223k|  auto sd = LookupTableByName(structs_, id, *current_namespace_, 1);
  797|   223k|  if (sd) sd->refcount++;
  ------------------
  |  Branch (797:7): [True: 3.14k, False: 220k]
  ------------------
  798|   223k|  return sd;
  799|   223k|}
_ZN11flatbuffers6Parser14ParseTypeIdentERNS_4TypeE:
  801|  74.2k|CheckedError Parser::ParseTypeIdent(Type& type) {
  802|  74.2k|  std::string id = attribute_;
  803|  74.2k|  EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|  74.2k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  74.2k|  {                            \
  |  |  |  |   57|  74.2k|    auto ce = (call);          \
  |  |  |  |   58|  74.2k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 24, False: 74.2k]
  |  |  |  |  ------------------
  |  |  |  |   59|  74.2k|  }
  |  |  ------------------
  ------------------
  804|  74.2k|  ECHECK(ParseNamespacing(&id, nullptr));
  ------------------
  |  |   56|  74.2k|  {                            \
  |  |   57|  74.2k|    auto ce = (call);          \
  |  |   58|  74.2k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 16, False: 74.1k]
  |  |  ------------------
  |  |   59|  74.2k|  }
  ------------------
  805|  74.1k|  auto enum_def = LookupEnum(id);
  806|  74.1k|  if (enum_def) {
  ------------------
  |  Branch (806:7): [True: 37.7k, False: 36.4k]
  ------------------
  807|  37.7k|    type = enum_def->underlying_type;
  808|  37.7k|    if (enum_def->is_union) type.base_type = BASE_TYPE_UNION;
  ------------------
  |  Branch (808:9): [True: 22.2k, False: 15.4k]
  ------------------
  809|  37.7k|  } else {
  810|  36.4k|    type.base_type = BASE_TYPE_STRUCT;
  811|  36.4k|    type.struct_def = LookupCreateStruct(id);
  812|  36.4k|  }
  813|  74.1k|  return NoError();
  814|  74.2k|}
_ZN11flatbuffers6Parser9ParseTypeERNS_4TypeE:
  817|  93.3k|CheckedError Parser::ParseType(Type& type) {
  818|  93.3k|  if (token_ == kTokenIdentifier) {
  ------------------
  |  Branch (818:7): [True: 81.0k, False: 12.2k]
  ------------------
  819|  81.0k|    if (IsIdent("bool")) {
  ------------------
  |  Branch (819:9): [True: 658, False: 80.4k]
  ------------------
  820|    658|      type.base_type = BASE_TYPE_BOOL;
  821|    658|      NEXT();
  ------------------
  |  |   63|    658|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    658|  {                            \
  |  |  |  |   57|    658|    auto ce = (call);          \
  |  |  |  |   58|    658|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 657]
  |  |  |  |  ------------------
  |  |  |  |   59|    658|  }
  |  |  ------------------
  ------------------
  822|  80.4k|    } else if (IsIdent("byte") || IsIdent("int8")) {
  ------------------
  |  Branch (822:16): [True: 544, False: 79.8k]
  |  Branch (822:35): [True: 392, False: 79.4k]
  ------------------
  823|    936|      type.base_type = BASE_TYPE_CHAR;
  824|    936|      NEXT();
  ------------------
  |  |   63|    936|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    936|  {                            \
  |  |  |  |   57|    936|    auto ce = (call);          \
  |  |  |  |   58|    936|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 935]
  |  |  |  |  ------------------
  |  |  |  |   59|    936|  }
  |  |  ------------------
  ------------------
  825|  79.4k|    } else if (IsIdent("ubyte") || IsIdent("uint8")) {
  ------------------
  |  Branch (825:16): [True: 4.55k, False: 74.9k]
  |  Branch (825:36): [True: 251, False: 74.6k]
  ------------------
  826|  4.80k|      type.base_type = BASE_TYPE_UCHAR;
  827|  4.80k|      NEXT();
  ------------------
  |  |   63|  4.80k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  4.80k|  {                            \
  |  |  |  |   57|  4.80k|    auto ce = (call);          \
  |  |  |  |   58|  4.80k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 4.80k]
  |  |  |  |  ------------------
  |  |  |  |   59|  4.80k|  }
  |  |  ------------------
  ------------------
  828|  74.6k|    } else if (IsIdent("short") || IsIdent("int16")) {
  ------------------
  |  Branch (828:16): [True: 404, False: 74.2k]
  |  Branch (828:36): [True: 453, False: 73.8k]
  ------------------
  829|    857|      type.base_type = BASE_TYPE_SHORT;
  830|    857|      NEXT();
  ------------------
  |  |   63|    857|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    857|  {                            \
  |  |  |  |   57|    857|    auto ce = (call);          \
  |  |  |  |   58|    857|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 856]
  |  |  |  |  ------------------
  |  |  |  |   59|    857|  }
  |  |  ------------------
  ------------------
  831|  73.8k|    } else if (IsIdent("ushort") || IsIdent("uint16")) {
  ------------------
  |  Branch (831:16): [True: 286, False: 73.5k]
  |  Branch (831:37): [True: 427, False: 73.0k]
  ------------------
  832|    713|      type.base_type = BASE_TYPE_USHORT;
  833|    713|      NEXT();
  ------------------
  |  |   63|    713|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    713|  {                            \
  |  |  |  |   57|    713|    auto ce = (call);          \
  |  |  |  |   58|    713|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 712]
  |  |  |  |  ------------------
  |  |  |  |   59|    713|  }
  |  |  ------------------
  ------------------
  834|  73.0k|    } else if (IsIdent("int") || IsIdent("int32")) {
  ------------------
  |  Branch (834:16): [True: 1.35k, False: 71.7k]
  |  Branch (834:34): [True: 303, False: 71.4k]
  ------------------
  835|  1.66k|      type.base_type = BASE_TYPE_INT;
  836|  1.66k|      NEXT();
  ------------------
  |  |   63|  1.66k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  1.66k|  {                            \
  |  |  |  |   57|  1.66k|    auto ce = (call);          \
  |  |  |  |   58|  1.66k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 1.65k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.66k|  }
  |  |  ------------------
  ------------------
  837|  71.4k|    } else if (IsIdent("uint") || IsIdent("uint32")) {
  ------------------
  |  Branch (837:16): [True: 714, False: 70.7k]
  |  Branch (837:35): [True: 599, False: 70.1k]
  ------------------
  838|  1.31k|      type.base_type = BASE_TYPE_UINT;
  839|  1.31k|      NEXT();
  ------------------
  |  |   63|  1.31k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  1.31k|  {                            \
  |  |  |  |   57|  1.31k|    auto ce = (call);          \
  |  |  |  |   58|  1.31k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 1.31k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.31k|  }
  |  |  ------------------
  ------------------
  840|  70.1k|    } else if (IsIdent("long") || IsIdent("int64")) {
  ------------------
  |  Branch (840:16): [True: 1.91k, False: 68.2k]
  |  Branch (840:35): [True: 425, False: 67.7k]
  ------------------
  841|  2.33k|      type.base_type = BASE_TYPE_LONG;
  842|  2.33k|      NEXT();
  ------------------
  |  |   63|  2.33k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  2.33k|  {                            \
  |  |  |  |   57|  2.33k|    auto ce = (call);          \
  |  |  |  |   58|  2.33k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 2.33k]
  |  |  |  |  ------------------
  |  |  |  |   59|  2.33k|  }
  |  |  ------------------
  ------------------
  843|  67.7k|    } else if (IsIdent("ulong") || IsIdent("uint64")) {
  ------------------
  |  Branch (843:16): [True: 3.59k, False: 64.1k]
  |  Branch (843:36): [True: 1.38k, False: 62.7k]
  ------------------
  844|  4.98k|      type.base_type = BASE_TYPE_ULONG;
  845|  4.98k|      NEXT();
  ------------------
  |  |   63|  4.98k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  4.98k|  {                            \
  |  |  |  |   57|  4.98k|    auto ce = (call);          \
  |  |  |  |   58|  4.98k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 4.98k]
  |  |  |  |  ------------------
  |  |  |  |   59|  4.98k|  }
  |  |  ------------------
  ------------------
  846|  62.7k|    } else if (IsIdent("float") || IsIdent("float32")) {
  ------------------
  |  Branch (846:16): [True: 722, False: 62.0k]
  |  Branch (846:36): [True: 177, False: 61.8k]
  ------------------
  847|    899|      type.base_type = BASE_TYPE_FLOAT;
  848|    899|      NEXT();
  ------------------
  |  |   63|    899|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    899|  {                            \
  |  |  |  |   57|    899|    auto ce = (call);          \
  |  |  |  |   58|    899|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 898]
  |  |  |  |  ------------------
  |  |  |  |   59|    899|  }
  |  |  ------------------
  ------------------
  849|  61.8k|    } else if (IsIdent("double") || IsIdent("float64")) {
  ------------------
  |  Branch (849:16): [True: 405, False: 61.4k]
  |  Branch (849:37): [True: 135, False: 61.3k]
  ------------------
  850|    540|      type.base_type = BASE_TYPE_DOUBLE;
  851|    540|      NEXT();
  ------------------
  |  |   63|    540|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    540|  {                            \
  |  |  |  |   57|    540|    auto ce = (call);          \
  |  |  |  |   58|    540|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 539]
  |  |  |  |  ------------------
  |  |  |  |   59|    540|  }
  |  |  ------------------
  ------------------
  852|  61.3k|    } else if (IsIdent("string")) {
  ------------------
  |  Branch (852:16): [True: 488, False: 60.8k]
  ------------------
  853|    488|      type.base_type = BASE_TYPE_STRING;
  854|    488|      NEXT();
  ------------------
  |  |   63|    488|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    488|  {                            \
  |  |  |  |   57|    488|    auto ce = (call);          \
  |  |  |  |   58|    488|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 487]
  |  |  |  |  ------------------
  |  |  |  |   59|    488|  }
  |  |  ------------------
  ------------------
  855|  60.8k|    } else {
  856|  60.8k|      ECHECK(ParseTypeIdent(type));
  ------------------
  |  |   56|  60.8k|  {                            \
  |  |   57|  60.8k|    auto ce = (call);          \
  |  |   58|  60.8k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 32, False: 60.8k]
  |  |  ------------------
  |  |   59|  60.8k|  }
  ------------------
  857|  60.8k|    }
  858|  81.0k|  } else if (token_ == '[') {
  ------------------
  |  Branch (858:14): [True: 12.2k, False: 43]
  ------------------
  859|  12.2k|    ParseDepthGuard depth_guard(this);
  860|  12.2k|    ECHECK(depth_guard.Check());
  ------------------
  |  |   56|  12.2k|  {                            \
  |  |   57|  12.2k|    auto ce = (call);          \
  |  |   58|  12.2k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1, False: 12.2k]
  |  |  ------------------
  |  |   59|  12.2k|  }
  ------------------
  861|  12.2k|    NEXT();
  ------------------
  |  |   63|  12.2k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  12.2k|  {                            \
  |  |  |  |   57|  12.2k|    auto ce = (call);          \
  |  |  |  |   58|  12.2k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 3, False: 12.2k]
  |  |  |  |  ------------------
  |  |  |  |   59|  12.2k|  }
  |  |  ------------------
  ------------------
  862|  12.2k|    Type subtype;
  863|  12.2k|    ECHECK(ParseType(subtype));
  ------------------
  |  |   56|  12.2k|  {                            \
  |  |   57|  12.2k|    auto ce = (call);          \
  |  |   58|  12.2k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 246, False: 11.9k]
  |  |  ------------------
  |  |   59|  12.2k|  }
  ------------------
  864|  11.9k|    if (IsSeries(subtype)) {
  ------------------
  |  Branch (864:9): [True: 2, False: 11.9k]
  ------------------
  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|  11.9k|    if (token_ == ':') {
  ------------------
  |  Branch (869:9): [True: 1.14k, False: 10.8k]
  ------------------
  870|  1.14k|      NEXT();
  ------------------
  |  |   63|  1.14k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  1.14k|  {                            \
  |  |  |  |   57|  1.14k|    auto ce = (call);          \
  |  |  |  |   58|  1.14k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 1.14k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.14k|  }
  |  |  ------------------
  ------------------
  871|  1.14k|      if (token_ != kTokenIntegerConstant) {
  ------------------
  |  Branch (871:11): [True: 11, False: 1.12k]
  ------------------
  872|     11|        return Error("length of fixed-length array must be an integer value");
  873|     11|      }
  874|  1.12k|      uint16_t fixed_length = 0;
  875|  1.12k|      bool check = StringToNumber(attribute_.c_str(), &fixed_length);
  876|  1.12k|      if (!check || fixed_length < 1) {
  ------------------
  |  Branch (876:11): [True: 104, False: 1.02k]
  |  Branch (876:21): [True: 7, False: 1.01k]
  ------------------
  877|    111|        return Error(
  878|    111|            "length of fixed-length array must be positive and fit to "
  879|    111|            "uint16_t type");
  880|    111|      }
  881|  1.01k|      type = Type(BASE_TYPE_ARRAY, subtype.struct_def, subtype.enum_def,
  882|  1.01k|                  fixed_length);
  883|  1.01k|      NEXT();
  ------------------
  |  |   63|  1.01k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  1.01k|  {                            \
  |  |  |  |   57|  1.01k|    auto ce = (call);          \
  |  |  |  |   58|  1.01k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 4, False: 1.01k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.01k|  }
  |  |  ------------------
  ------------------
  884|  10.8k|    } else {
  885|  10.8k|      type = Type(BASE_TYPE_VECTOR, subtype.struct_def, subtype.enum_def);
  886|  10.8k|    }
  887|  11.8k|    type.element = subtype.base_type;
  888|  11.8k|    EXPECT(']');
  ------------------
  |  |   64|  11.8k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  11.8k|  {                            \
  |  |  |  |   57|  11.8k|    auto ce = (call);          \
  |  |  |  |   58|  11.8k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 57, False: 11.8k]
  |  |  |  |  ------------------
  |  |  |  |   59|  11.8k|  }
  |  |  ------------------
  ------------------
  889|  11.8k|  } else {
  890|     43|    return Error("illegal type syntax");
  891|     43|  }
  892|  92.8k|  return NoError();
  893|  93.3k|}
_ZN11flatbuffers6Parser8AddFieldERNS_9StructDefERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKNS_4TypeEPPNS_8FieldDefE:
  896|  79.0k|                              const Type& type, FieldDef** dest) {
  897|  79.0k|  auto& field = *new FieldDef();
  898|  79.0k|  field.value.offset =
  899|  79.0k|      FieldIndexToOffset(static_cast<voffset_t>(struct_def.fields.vec.size()));
  900|  79.0k|  field.name = name;
  901|  79.0k|  field.file = struct_def.file;
  902|  79.0k|  field.value.type = type;
  903|  79.0k|  if (struct_def.fixed) {  // statically compute the field offset
  ------------------
  |  Branch (903:7): [True: 2.93k, False: 76.1k]
  ------------------
  904|  2.93k|    auto size = InlineSize(type);
  905|  2.93k|    auto alignment = InlineAlignment(type);
  906|       |    // structs_ need to have a predictable format, so we need to align to
  907|       |    // the largest scalar
  908|  2.93k|    struct_def.minalign = std::max(struct_def.minalign, alignment);
  909|  2.93k|    struct_def.PadLastField(alignment);
  910|  2.93k|    field.value.offset = static_cast<voffset_t>(struct_def.bytesize);
  911|  2.93k|    struct_def.bytesize += size;
  912|  2.93k|  }
  913|  79.0k|  if (struct_def.fields.Add(name, &field))
  ------------------
  |  Branch (913:7): [True: 59, False: 78.9k]
  ------------------
  914|     59|    return Error("field already exists: " + name);
  915|  78.9k|  *dest = &field;
  916|  78.9k|  return NoError();
  917|  79.0k|}
_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: 21, False: 57.1k]
  ------------------
  923|     21|    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.0k, False: 39.0k]
  ------------------
  926|  18.0k|    Warning("field names should be lowercase snake_case, got: " + name);
  927|  18.0k|  }
  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: 151, 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: 109, 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: 61, False: 56.7k]
  |  |  ------------------
  |  |   59|  56.8k|  }
  ------------------
  934|       |
  935|  56.7k|  if (struct_def.fixed) {
  ------------------
  |  Branch (935:7): [True: 2.93k, False: 53.8k]
  ------------------
  936|  2.93k|    if (IsIncompleteStruct(type) ||
  ------------------
  |  Branch (936:9): [True: 3, False: 2.93k]
  |  Branch (936:9): [True: 5, False: 2.93k]
  ------------------
  937|  2.93k|        (IsArray(type) && IsIncompleteStruct(type.VectorType()))) {
  ------------------
  |  Branch (937:10): [True: 970, False: 1.96k]
  |  Branch (937:27): [True: 2, False: 968]
  ------------------
  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.93k|    auto valid = IsScalar(type.base_type) || IsStruct(type);
  ------------------
  |  Branch (945:18): [True: 1.50k, False: 1.42k]
  |  Branch (945:46): [True: 458, False: 970]
  ------------------
  946|  2.93k|    if (!valid && IsArray(type)) {
  ------------------
  |  Branch (946:9): [True: 970, False: 1.96k]
  |  Branch (946:19): [True: 968, False: 2]
  ------------------
  947|    968|      const auto& elem_type = type.VectorType();
  948|    968|      valid |= IsScalar(elem_type.base_type) || IsStruct(elem_type);
  ------------------
  |  Branch (948:16): [True: 880, False: 88]
  |  Branch (948:49): [True: 87, False: 1]
  ------------------
  949|    968|    }
  950|  2.93k|    if (!valid)
  ------------------
  |  Branch (950:9): [True: 3, False: 2.93k]
  ------------------
  951|      3|      return Error("structs may contain only scalar or struct fields");
  952|  2.93k|  }
  953|       |
  954|  56.7k|  if (!struct_def.fixed && IsArray(type))
  ------------------
  |  Branch (954:7): [True: 53.8k, False: 2.93k]
  |  Branch (954:28): [True: 1, False: 53.8k]
  ------------------
  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: 967, False: 55.8k]
  ------------------
  958|    967|    advanced_features_ |= reflection::AdvancedArrayFeatures;
  959|    967|    if (!SupportsAdvancedArrayFeatures()) {
  ------------------
  |  Branch (959:9): [True: 0, False: 967]
  ------------------
  960|      0|      return Error(
  961|      0|          "Arrays are not yet supported in all "
  962|      0|          "the specified programming languages.");
  963|      0|    }
  964|    967|  }
  965|       |
  966|  56.7k|  FieldDef* typefield = nullptr;
  967|  56.7k|  if (type.base_type == BASE_TYPE_UNION) {
  ------------------
  |  Branch (967:7): [True: 20.6k, False: 36.1k]
  ------------------
  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.6k|    Type union_type(type.enum_def->underlying_type);
  974|  20.6k|    union_type.base_type = BASE_TYPE_UTYPE;
  975|  20.6k|    ECHECK(AddField(struct_def, name + UnionTypeFieldSuffix(), union_type,
  ------------------
  |  |   56|  20.6k|  {                            \
  |  |   57|  20.6k|    auto ce = (call);          \
  |  |   58|  20.6k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 3, False: 20.6k]
  |  |  ------------------
  |  |   59|  20.6k|  }
  ------------------
  976|  20.6k|                    &typefield));
  977|       |
  978|  36.1k|  } else if (IsVector(type) && type.element == BASE_TYPE_UNION) {
  ------------------
  |  Branch (978:14): [True: 10.8k, False: 25.3k]
  |  Branch (978:32): [True: 1.65k, False: 9.17k]
  ------------------
  979|  1.65k|    advanced_features_ |= reflection::AdvancedUnionFeatures;
  980|       |    // Only cpp, js and ts supports the union vector feature so far.
  981|  1.65k|    if (!SupportsAdvancedUnionFeatures()) {
  ------------------
  |  Branch (981:9): [True: 0, False: 1.65k]
  ------------------
  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|  1.65k|    Type union_vector(BASE_TYPE_VECTOR, nullptr, type.enum_def);
  989|  1.65k|    union_vector.element = BASE_TYPE_UTYPE;
  990|  1.65k|    ECHECK(AddField(struct_def, name + UnionTypeFieldSuffix(), union_vector,
  ------------------
  |  |   56|  1.65k|  {                            \
  |  |   57|  1.65k|    auto ce = (call);          \
  |  |   58|  1.65k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1, False: 1.65k]
  |  |  ------------------
  |  |   59|  1.65k|  }
  ------------------
  991|  1.65k|                    &typefield));
  992|  1.65k|  }
  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: 55, False: 56.7k]
  |  |  ------------------
  |  |   59|  56.7k|  }
  ------------------
  996|       |
  997|  56.7k|  if (typefield) {
  ------------------
  |  Branch (997:7): [True: 22.2k, False: 34.4k]
  ------------------
  998|       |    // We preserve the relation between the typefield
  999|       |    // and field, so we can easily map it in the code
 1000|       |    // generators.
 1001|  22.2k|    typefield->sibling_union_field = field;
 1002|  22.2k|    field->sibling_union_field = typefield;
 1003|  22.2k|  }
 1004|       |
 1005|  56.7k|  if (token_ == '=') {
  ------------------
  |  Branch (1005:7): [True: 4.40k, False: 52.3k]
  ------------------
 1006|  4.40k|    NEXT();
  ------------------
  |  |   63|  4.40k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  4.40k|  {                            \
  |  |  |  |   57|  4.40k|    auto ce = (call);          \
  |  |  |  |   58|  4.40k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 4, False: 4.39k]
  |  |  |  |  ------------------
  |  |  |  |   59|  4.40k|  }
  |  |  ------------------
  ------------------
 1007|  4.39k|    ECHECK(ParseSingleValue(&field->name, field->value, true));
  ------------------
  |  |   56|  4.39k|  {                            \
  |  |   57|  4.39k|    auto ce = (call);          \
  |  |   58|  4.39k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1.21k, False: 3.18k]
  |  |  ------------------
  |  |   59|  4.39k|  }
  ------------------
 1008|  3.18k|    if (IsStruct(type) || (struct_def.fixed && field->value.constant != "0"))
  ------------------
  |  Branch (1008:9): [True: 0, False: 3.18k]
  |  Branch (1008:28): [True: 275, False: 2.91k]
  |  Branch (1008:48): [True: 9, False: 266]
  ------------------
 1009|      9|      return Error(
 1010|      9|          "default values are not supported for struct fields, table fields, "
 1011|      9|          "or in structs.");
 1012|  3.17k|    if (IsString(type) || IsVector(type)) {
  ------------------
  |  Branch (1012:9): [True: 98, False: 3.07k]
  |  Branch (1012:27): [True: 17, False: 3.06k]
  ------------------
 1013|    115|      advanced_features_ |= reflection::DefaultVectorsAndStrings;
 1014|    115|      if (field->value.constant != "0" && !SupportsDefaultVectorsAndStrings()) {
  ------------------
  |  Branch (1014:11): [True: 97, False: 18]
  |  Branch (1014:43): [True: 0, False: 97]
  ------------------
 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|    115|    }
 1020|       |
 1021|  3.17k|    if (IsVector(type) && field->value.constant != "0" &&
  ------------------
  |  Branch (1021:9): [True: 17, False: 3.16k]
  |  Branch (1021:27): [True: 17, False: 0]
  ------------------
 1022|     17|        field->value.constant != "[]") {
  ------------------
  |  Branch (1022:9): [True: 0, False: 17]
  ------------------
 1023|      0|      return Error("The only supported default for vectors is `[]`.");
 1024|      0|    }
 1025|  3.17k|  }
 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.4k|  if (IsFloat(type.base_type)) {
  ------------------
  |  Branch (1029:7): [True: 930, False: 54.5k]
  ------------------
 1030|    930|    auto& text = field->value.constant;
 1031|    930|    FLATBUFFERS_ASSERT(false == text.empty());
 1032|    930|    auto s = text.c_str();
 1033|  1.12k|    while (*s == ' ') s++;
  ------------------
  |  Branch (1033:12): [True: 198, False: 930]
  ------------------
 1034|    930|    if (*s == '-' || *s == '+') s++;
  ------------------
  |  Branch (1034:9): [True: 34, False: 896]
  |  Branch (1034:22): [True: 13, False: 883]
  ------------------
 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|    930|    if ((false == IsIdentifierStart(*s)) &&
  ------------------
  |  Branch (1037:9): [True: 669, False: 261]
  ------------------
 1038|    669|        (std::string::npos == field->value.constant.find_first_of(".eEpP"))) {
  ------------------
  |  Branch (1038:9): [True: 561, False: 108]
  ------------------
 1039|    561|      field->value.constant += ".0";
 1040|    561|    }
 1041|    930|  }
 1042|       |
 1043|  55.4k|  field->doc_comment = dc;
 1044|  55.4k|  ECHECK(ParseMetaData(&field->attributes));
  ------------------
  |  |   56|  55.4k|  {                            \
  |  |   57|  55.4k|    auto ce = (call);          \
  |  |   58|  55.4k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 28, False: 55.4k]
  |  |  ------------------
  |  |   59|  55.4k|  }
  ------------------
 1045|  55.4k|  field->deprecated = field->attributes.Lookup("deprecated") != nullptr;
 1046|  55.4k|  auto hash_name = field->attributes.Lookup("hash");
 1047|  55.4k|  if (hash_name) {
  ------------------
  |  Branch (1047:7): [True: 413, False: 55.0k]
  ------------------
 1048|    413|    switch ((IsVector(type)) ? type.element : type.base_type) {
  ------------------
  |  Branch (1048:13): [True: 214, False: 199]
  ------------------
 1049|     61|      case BASE_TYPE_SHORT:
  ------------------
  |  Branch (1049:7): [True: 61, False: 352]
  ------------------
 1050|     62|      case BASE_TYPE_USHORT: {
  ------------------
  |  Branch (1050:7): [True: 1, False: 412]
  ------------------
 1051|     62|        if (FindHashFunction16(hash_name->constant.c_str()) == nullptr)
  ------------------
  |  Branch (1051:13): [True: 42, False: 20]
  ------------------
 1052|     42|          return Error("Unknown hashing algorithm for 16 bit types: " +
 1053|     42|                       hash_name->constant);
 1054|     20|        break;
 1055|     62|      }
 1056|    125|      case BASE_TYPE_INT:
  ------------------
  |  Branch (1056:7): [True: 125, False: 288]
  ------------------
 1057|    171|      case BASE_TYPE_UINT: {
  ------------------
  |  Branch (1057:7): [True: 46, False: 367]
  ------------------
 1058|    171|        if (FindHashFunction32(hash_name->constant.c_str()) == nullptr)
  ------------------
  |  Branch (1058:13): [True: 66, False: 105]
  ------------------
 1059|     66|          return Error("Unknown hashing algorithm for 32 bit types: " +
 1060|     66|                       hash_name->constant);
 1061|    105|        break;
 1062|    171|      }
 1063|    137|      case BASE_TYPE_LONG:
  ------------------
  |  Branch (1063:7): [True: 137, False: 276]
  ------------------
 1064|    174|      case BASE_TYPE_ULONG: {
  ------------------
  |  Branch (1064:7): [True: 37, False: 376]
  ------------------
 1065|    174|        if (FindHashFunction64(hash_name->constant.c_str()) == nullptr)
  ------------------
  |  Branch (1065:13): [True: 55, False: 119]
  ------------------
 1066|     55|          return Error("Unknown hashing algorithm for 64 bit types: " +
 1067|     55|                       hash_name->constant);
 1068|    119|        break;
 1069|    174|      }
 1070|    119|      default:
  ------------------
  |  Branch (1070:7): [True: 6, False: 407]
  ------------------
 1071|      6|        return Error(
 1072|      6|            "only short, ushort, int, uint, long and ulong data types support "
 1073|      6|            "hashing.");
 1074|    413|    }
 1075|    413|  }
 1076|       |
 1077|  55.3k|  if (field->attributes.Lookup("vector64") != nullptr) {
  ------------------
  |  Branch (1077:7): [True: 113, False: 55.1k]
  ------------------
 1078|    113|    if (!IsVector(type)) {
  ------------------
  |  Branch (1078:9): [True: 4, False: 109]
  ------------------
 1079|      4|      return Error("`vector64` attribute can only be applied on vectors.");
 1080|      4|    }
 1081|       |
 1082|       |    // Upgrade the type to be a BASE_TYPE_VECTOR64, since the attributes are
 1083|       |    // parsed after the type.
 1084|    109|    const BaseType element_base_type = type.element;
 1085|    109|    type = Type(BASE_TYPE_VECTOR64, type.struct_def, type.enum_def);
 1086|    109|    type.element = element_base_type;
 1087|       |
 1088|       |    // Since the field was already added to the parent object, update the type
 1089|       |    // in place.
 1090|    109|    field->value.type = type;
 1091|       |
 1092|       |    // 64-bit vectors imply the offset64 attribute.
 1093|    109|    field->offset64 = true;
 1094|    109|  }
 1095|       |
 1096|       |  // Record that this field uses 64-bit offsets.
 1097|  55.2k|  if (field->attributes.Lookup("offset64") != nullptr) {
  ------------------
  |  Branch (1097:7): [True: 231, False: 55.0k]
  ------------------
 1098|       |    // TODO(derekbailey): would be nice to have this be a recommendation or hint
 1099|       |    // instead of a warning.
 1100|    231|    if (type.base_type == BASE_TYPE_VECTOR64) {
  ------------------
  |  Branch (1100:9): [True: 1, False: 230]
  ------------------
 1101|      1|      Warning("attribute `vector64` implies `offset64` and isn't required.");
 1102|      1|    }
 1103|       |
 1104|    231|    field->offset64 = true;
 1105|    231|  }
 1106|       |
 1107|       |  // Check for common conditions with Offset64 fields.
 1108|  55.2k|  if (field->offset64) {
  ------------------
  |  Branch (1108:7): [True: 339, 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|    339|    if (!IsString(type) && !IsVector(type)) {
  ------------------
  |  Branch (1111:9): [True: 308, False: 31]
  |  Branch (1111:28): [True: 6, False: 302]
  ------------------
 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|    333|    if (IsVector(type) &&
  ------------------
  |  Branch (1120:9): [True: 302, False: 31]
  |  Branch (1120:9): [True: 10, False: 323]
  ------------------
 1121|    302|        !((IsScalar(type.element) && !IsEnum(type.VectorType())) ||
  ------------------
  |  Branch (1121:12): [True: 288, False: 14]
  |  Branch (1121:38): [True: 287, 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|    323|    if (!Supports64BitOffsets()) {
  ------------------
  |  Branch (1129:9): [True: 0, False: 323]
  ------------------
 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|    323|  }
 1135|       |
 1136|  55.2k|  field->key = field->attributes.Lookup("key") != nullptr;
 1137|       |
 1138|  55.2k|  if (!struct_def.fixed) {
  ------------------
  |  Branch (1138:7): [True: 52.3k, False: 2.88k]
  ------------------
 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.3k|    const bool required = field->attributes.Lookup("required") != nullptr ||
  ------------------
  |  Branch (1142:27): [True: 26, False: 52.3k]
  ------------------
 1143|  52.3k|                          (IsString(type) && field->key);
  ------------------
  |  Branch (1143:28): [True: 400, False: 51.9k]
  |  Branch (1143:46): [True: 131, False: 269]
  ------------------
 1144|  52.3k|    const bool default_str_or_vec =
 1145|  52.3k|        ((IsString(type) || IsVector(type)) && field->value.constant != "0");
  ------------------
  |  Branch (1145:11): [True: 401, False: 51.9k]
  |  Branch (1145:29): [True: 10.7k, False: 41.2k]
  |  Branch (1145:48): [True: 93, False: 11.0k]
  ------------------
 1146|  52.3k|    const bool optional = IsScalar(type.base_type)
  ------------------
  |  Branch (1146:27): [True: 4.74k, False: 47.6k]
  ------------------
 1147|  52.3k|                              ? (field->value.constant == "null")
 1148|  52.3k|                              : !(required || default_str_or_vec);
  ------------------
  |  Branch (1148:35): [True: 156, False: 47.4k]
  |  Branch (1148:47): [True: 93, False: 47.3k]
  ------------------
 1149|  52.3k|    if (required && optional) {
  ------------------
  |  Branch (1149:9): [True: 157, False: 52.2k]
  |  Branch (1149:21): [True: 0, False: 157]
  ------------------
 1150|      0|      return Error("Fields cannot be both optional and required.");
 1151|      0|    }
 1152|  52.3k|    field->presence = FieldDef::MakeFieldPresence(optional, required);
 1153|       |
 1154|  52.3k|    if (required && IsScalar(type.base_type)) {
  ------------------
  |  Branch (1154:9): [True: 157, False: 52.2k]
  |  Branch (1154:21): [True: 1, False: 156]
  ------------------
 1155|      1|      return Error("only non-scalar fields in tables may be 'required'");
 1156|      1|    }
 1157|  52.3k|  } else {
 1158|       |    // all struct fields are required
 1159|  2.88k|    field->presence = FieldDef::kDefault;
 1160|       |
 1161|       |    // setting required or optional on a struct field is meaningless
 1162|  2.88k|    if (field->attributes.Lookup("required") != nullptr ||
  ------------------
  |  Branch (1162:9): [True: 1, False: 2.88k]
  |  Branch (1162:9): [True: 1, False: 2.88k]
  ------------------
 1163|  2.88k|        field->attributes.Lookup("optional") != nullptr) {
  ------------------
  |  Branch (1163:9): [True: 0, False: 2.88k]
  ------------------
 1164|      1|      return Error("struct fields are always required");
 1165|      1|    }
 1166|  2.88k|  }
 1167|       |
 1168|  55.2k|  if (field->key) {
  ------------------
  |  Branch (1168:7): [True: 1.15k, False: 54.1k]
  ------------------
 1169|  1.15k|    if (struct_def.has_key) return Error("only one field may be set as 'key'");
  ------------------
  |  Branch (1169:9): [True: 2, False: 1.15k]
  ------------------
 1170|  1.15k|    struct_def.has_key = true;
 1171|  1.15k|    auto is_valid =
 1172|  1.15k|        IsScalar(type.base_type) || IsString(type) || IsStruct(type);
  ------------------
  |  Branch (1172:9): [True: 1.01k, False: 139]
  |  Branch (1172:37): [True: 131, False: 8]
  |  Branch (1172:55): [True: 1, False: 7]
  ------------------
 1173|  1.15k|    if (IsArray(type)) {
  ------------------
  |  Branch (1173:9): [True: 2, False: 1.15k]
  ------------------
 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.15k|    if (!is_valid) {
  ------------------
  |  Branch (1177:9): [True: 5, False: 1.15k]
  ------------------
 1178|      5|      return Error(
 1179|      5|          "'key' field must be string, scalar type or fixed size array of "
 1180|      5|          "scalars");
 1181|      5|    }
 1182|  1.15k|  }
 1183|       |
 1184|  55.2k|  if (field->IsScalarOptional()) {
  ------------------
  |  Branch (1184:7): [True: 963, False: 54.3k]
  ------------------
 1185|    963|    advanced_features_ |= reflection::OptionalScalars;
 1186|    963|    if (type.enum_def && type.enum_def->Lookup("null")) {
  ------------------
  |  Branch (1186:9): [True: 263, False: 700]
  |  Branch (1186:9): [True: 1, False: 962]
  |  Branch (1186:26): [True: 1, False: 262]
  ------------------
 1187|      1|      FLATBUFFERS_ASSERT(IsInteger(type.base_type));
 1188|      1|      return Error(
 1189|      1|          "the default 'null' is reserved for declaring optional scalar "
 1190|      1|          "fields, it conflicts with declaration of enum '" +
 1191|      1|          type.enum_def->name + "'.");
 1192|      1|    }
 1193|    962|    if (field->attributes.Lookup("key")) {
  ------------------
  |  Branch (1193:9): [True: 1, False: 961]
  ------------------
 1194|      1|      return Error(
 1195|      1|          "only a non-optional scalar field can be used as a 'key' field");
 1196|      1|    }
 1197|    961|    if (!SupportsOptionalScalars()) {
  ------------------
  |  Branch (1197:9): [True: 0, False: 961]
  ------------------
 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|    961|  }
 1203|       |
 1204|  55.2k|  auto check_enum = [this](const FieldDef* field, const Type& type,
 1205|  55.2k|                           const std::string& name,
 1206|  55.2k|                           const std::string& constant) -> CheckedError {
 1207|       |    // Optional and bitflags enums may have default constants that are not
 1208|       |    // their specified variants.
 1209|  55.2k|    if (!field->IsOptional() &&
 1210|  55.2k|        type.enum_def->attributes.Lookup("bit_flags") == nullptr) {
 1211|  55.2k|      if (type.enum_def->FindByValue(constant) == nullptr) {
 1212|  55.2k|        return Error("default value of `" + constant + "` for " + "field `" +
 1213|  55.2k|                     name + "` is not part of enum `" + type.enum_def->name +
 1214|  55.2k|                     "`.");
 1215|  55.2k|      }
 1216|  55.2k|    }
 1217|       |
 1218|  55.2k|    return NoError();
 1219|  55.2k|  };
 1220|       |
 1221|  55.2k|  if (type.enum_def) {
  ------------------
  |  Branch (1221:7): [True: 23.7k, False: 31.5k]
  ------------------
 1222|       |    // Verify the enum's type and default value.
 1223|  23.7k|    const std::string& constant = field->value.constant;
 1224|  23.7k|    if (type.base_type == BASE_TYPE_UNION) {
  ------------------
  |  Branch (1224:9): [True: 20.6k, False: 3.14k]
  ------------------
 1225|  20.6k|      if (constant != "0") {
  ------------------
  |  Branch (1225:11): [True: 0, False: 20.6k]
  ------------------
 1226|      0|        return Error("Union defaults must be NONE");
 1227|      0|      }
 1228|  20.6k|    } else if (IsVector(type)) {
  ------------------
  |  Branch (1228:16): [True: 1.66k, False: 1.47k]
  ------------------
 1229|  1.66k|      if (constant != "0" && constant != "[]") {
  ------------------
  |  Branch (1229:11): [True: 7, False: 1.65k]
  |  Branch (1229:30): [True: 0, False: 7]
  ------------------
 1230|      0|        return Error("Vector defaults may only be `[]`.");
 1231|      0|      }
 1232|  1.66k|    } else if (IsArray(type)) {
  ------------------
  |  Branch (1232:16): [True: 11, False: 1.46k]
  ------------------
 1233|     11|      if (constant != "0") {
  ------------------
  |  Branch (1233:11): [True: 0, False: 11]
  ------------------
 1234|      0|        return Error("Array defaults are not supported yet.");
 1235|      0|      }
 1236|     11|      CheckedError err = check_enum(field, type.VectorType(), name, constant);
 1237|     11|      if (err.Check()) {
  ------------------
  |  Branch (1237:11): [True: 1, False: 10]
  ------------------
 1238|       |        // reset the check state of the error
 1239|      1|        return CheckedError{err};
 1240|      1|      }
 1241|  1.46k|    } else {
 1242|  1.46k|      if (!IsInteger(type.base_type)) {
  ------------------
  |  Branch (1242:11): [True: 0, False: 1.46k]
  ------------------
 1243|      0|        return Error("Enums must have integer base types");
 1244|      0|      }
 1245|  1.46k|      CheckedError err = check_enum(field, type, name, constant);
 1246|  1.46k|      if (err.Check()) {
  ------------------
  |  Branch (1246:11): [True: 106, False: 1.36k]
  ------------------
 1247|       |        // reset the check state of the error
 1248|    106|        return CheckedError{err};
 1249|    106|      }
 1250|  1.46k|    }
 1251|  23.7k|  }
 1252|       |
 1253|  55.1k|  if (field->deprecated && struct_def.fixed)
  ------------------
  |  Branch (1253:7): [True: 30, False: 55.1k]
  |  Branch (1253:28): [True: 1, False: 29]
  ------------------
 1254|      1|    return Error("can't deprecate fields in a struct");
 1255|       |
 1256|  55.1k|  auto cpp_type = field->attributes.Lookup("cpp_type");
 1257|  55.1k|  if (cpp_type) {
  ------------------
  |  Branch (1257:7): [True: 2, False: 55.1k]
  ------------------
 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.1k|  field->shared = field->attributes.Lookup("shared") != nullptr;
 1271|  55.1k|  if (field->shared && field->value.type.base_type != BASE_TYPE_STRING)
  ------------------
  |  Branch (1271:7): [True: 151, False: 55.0k]
  |  Branch (1271:24): [True: 3, False: 148]
  ------------------
 1272|      3|    return Error("shared can only be defined on strings");
 1273|       |
 1274|  55.1k|  auto field_native_custom_alloc =
 1275|  55.1k|      field->attributes.Lookup("native_custom_alloc");
 1276|  55.1k|  if (field_native_custom_alloc)
  ------------------
  |  Branch (1276:7): [True: 1, False: 55.1k]
  ------------------
 1277|      1|    return Error(
 1278|      1|        "native_custom_alloc can only be used with a table or struct "
 1279|      1|        "definition");
 1280|       |
 1281|  55.1k|  field->native_inline = field->attributes.Lookup("native_inline") != nullptr;
 1282|  55.1k|  if (field->native_inline && !IsStruct(field->value.type) &&
  ------------------
  |  Branch (1282:7): [True: 42, False: 55.1k]
  |  Branch (1282:31): [True: 32, False: 10]
  ------------------
 1283|     32|      !IsVectorOfStruct(field->value.type) &&
  ------------------
  |  Branch (1283:7): [True: 22, False: 10]
  ------------------
 1284|     22|      !IsVectorOfTable(field->value.type))
  ------------------
  |  Branch (1284:7): [True: 4, False: 18]
  ------------------
 1285|      4|    return Error(
 1286|      4|        "'native_inline' can only be defined on structs, vector of structs or "
 1287|      4|        "vector of tables");
 1288|       |
 1289|  55.1k|  auto nested = field->attributes.Lookup("nested_flatbuffer");
 1290|  55.1k|  if (nested) {
  ------------------
  |  Branch (1290:7): [True: 4, False: 55.1k]
  ------------------
 1291|      4|    if (nested->type.base_type != BASE_TYPE_STRING)
  ------------------
  |  Branch (1291:9): [True: 1, False: 3]
  ------------------
 1292|      1|      return Error(
 1293|      1|          "nested_flatbuffer attribute must be a string (the root type)");
 1294|      3|    if (!IsVector(type.base_type) || type.element != BASE_TYPE_UCHAR)
  ------------------
  |  Branch (1294:9): [True: 1, False: 2]
  |  Branch (1294:38): [True: 1, False: 1]
  ------------------
 1295|      2|      return Error(
 1296|      2|          "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.1k|  if (field->attributes.Lookup("flexbuffer")) {
  ------------------
  |  Branch (1302:7): [True: 4.19k, False: 50.9k]
  ------------------
 1303|  4.19k|    field->flexbuffer = true;
 1304|  4.19k|    uses_flexbuffers_ = true;
 1305|  4.19k|    if (type.base_type != BASE_TYPE_VECTOR || type.element != BASE_TYPE_UCHAR)
  ------------------
  |  Branch (1305:9): [True: 5, False: 4.18k]
  |  Branch (1305:47): [True: 1, False: 4.18k]
  ------------------
 1306|      6|      return Error("flexbuffer attribute may only apply to a vector of ubyte");
 1307|  4.19k|  }
 1308|       |
 1309|  55.1k|  if (typefield) {
  ------------------
  |  Branch (1309:7): [True: 22.2k, False: 32.8k]
  ------------------
 1310|  22.2k|    if (!IsScalar(typefield->value.type.base_type)) {
  ------------------
  |  Branch (1310:9): [True: 1.65k, False: 20.6k]
  ------------------
 1311|       |      // this is a union vector field
 1312|  1.65k|      typefield->presence = field->presence;
 1313|  1.65k|    }
 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.2k|    auto attr = field->attributes.Lookup("id");
 1317|  22.2k|    if (attr) {
  ------------------
  |  Branch (1317:9): [True: 3.62k, False: 18.6k]
  ------------------
 1318|  3.62k|      const auto& id_str = attr->constant;
 1319|  3.62k|      voffset_t id = 0;
 1320|  3.62k|      const auto done = !atot(id_str.c_str(), *this, &id).Check();
 1321|  3.62k|      if (done && id > 0) {
  ------------------
  |  Branch (1321:11): [True: 3.62k, False: 3]
  |  Branch (1321:19): [True: 3.61k, False: 3]
  ------------------
 1322|  3.61k|        auto val = new Value();
 1323|  3.61k|        val->type = attr->type;
 1324|  3.61k|        val->constant = NumToString(id - 1);
 1325|  3.61k|        typefield->attributes.Add("id", val);
 1326|  3.61k|      } else {
 1327|      6|        return Error(
 1328|      6|            "a union type effectively adds two fields with non-negative ids, "
 1329|      6|            "its id must be that of the second field (the first field is "
 1330|      6|            "the type field and not explicitly declared in the schema);\n"
 1331|      6|            "field: " +
 1332|      6|            field->name + ", id: " + id_str);
 1333|      6|      }
 1334|  3.62k|    }
 1335|       |    // if this field is a union that is deprecated,
 1336|       |    // the automatically added type field should be deprecated as well
 1337|  22.2k|    if (field->deprecated) {
  ------------------
  |  Branch (1337:9): [True: 6, False: 22.2k]
  ------------------
 1338|      6|      typefield->deprecated = true;
 1339|      6|    }
 1340|  22.2k|  }
 1341|       |
 1342|  55.1k|  EXPECT(';');
  ------------------
  |  |   64|  55.1k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  55.1k|  {                            \
  |  |  |  |   57|  55.1k|    auto ce = (call);          \
  |  |  |  |   58|  55.1k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 746, False: 54.3k]
  |  |  |  |  ------------------
  |  |  |  |   59|  55.1k|  }
  |  |  ------------------
  ------------------
 1343|  54.3k|  return NoError();
 1344|  55.1k|}
_ZN11flatbuffers6Parser11ParseStringERNS_5ValueEb:
 1346|  4.86k|CheckedError Parser::ParseString(Value& val, bool use_string_pooling) {
 1347|  4.86k|  auto s = attribute_;
 1348|  4.86k|  EXPECT(kTokenStringConstant);
  ------------------
  |  |   64|  4.86k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  4.86k|  {                            \
  |  |  |  |   57|  4.86k|    auto ce = (call);          \
  |  |  |  |   58|  4.86k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 11, False: 4.85k]
  |  |  |  |  ------------------
  |  |  |  |   59|  4.86k|  }
  |  |  ------------------
  ------------------
 1349|  4.85k|  if (use_string_pooling) {
  ------------------
  |  Branch (1349:7): [True: 1.66k, False: 3.19k]
  ------------------
 1350|  1.66k|    val.constant = NumToString(builder_.CreateSharedString(s).o);
 1351|  3.19k|  } else {
 1352|  3.19k|    val.constant = NumToString(builder_.CreateString(s).o);
 1353|  3.19k|  }
 1354|  4.85k|  return NoError();
 1355|  4.86k|}
_ZN11flatbuffers6Parser10ParseCommaEv:
 1357|   554k|CheckedError Parser::ParseComma() {
 1358|   554k|  if (!opts.protobuf_ascii_alike) EXPECT(',');
  ------------------
  |  |   64|   554k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|   554k|  {                            \
  |  |  |  |   57|   554k|    auto ce = (call);          \
  |  |  |  |   58|   554k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 4.71k, False: 549k]
  |  |  |  |  ------------------
  |  |  |  |   59|   554k|  }
  |  |  ------------------
  ------------------
  |  Branch (1358:7): [True: 554k, False: 0]
  ------------------
 1359|   549k|  return NoError();
 1360|   554k|}
_ZN11flatbuffers6Parser13ParseAnyValueERNS_5ValueEPNS_8FieldDefEmPKNS_9StructDefEmb:
 1365|   383k|                                   size_t count, bool inside_vector) {
 1366|   383k|  switch (val.type.base_type) {
 1367|    331|    case BASE_TYPE_UNION: {
  ------------------
  |  Branch (1367:5): [True: 331, False: 383k]
  ------------------
 1368|    331|      FLATBUFFERS_ASSERT(field);
 1369|    331|      std::string constant;
 1370|    331|      Vector<uint8_t>* vector_of_union_types = nullptr;
 1371|       |      // Find corresponding type field we may have already parsed.
 1372|    331|      for (auto elem = field_stack_.rbegin() + count;
 1373|    407|           elem != field_stack_.rbegin() + parent_fieldn + count; ++elem) {
  ------------------
  |  Branch (1373:12): [True: 369, False: 38]
  ------------------
 1374|    369|        auto& type = elem->second->value.type;
 1375|    369|        if (type.enum_def == val.type.enum_def) {
  ------------------
  |  Branch (1375:13): [True: 369, False: 0]
  ------------------
 1376|    369|          if (inside_vector) {
  ------------------
  |  Branch (1376:15): [True: 236, False: 133]
  ------------------
 1377|    236|            if (IsVector(type) && type.element == BASE_TYPE_UTYPE) {
  ------------------
  |  Branch (1377:17): [True: 236, False: 0]
  |  Branch (1377:35): [True: 160, False: 76]
  ------------------
 1378|       |              // Vector of union type field.
 1379|    160|              uoffset_t offset;
 1380|    160|              ECHECK(atot(elem->first.constant.c_str(), *this, &offset));
  ------------------
  |  |   56|    160|  {                            \
  |  |   57|    160|    auto ce = (call);          \
  |  |   58|    160|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 0, False: 160]
  |  |  ------------------
  |  |   59|    160|  }
  ------------------
 1381|    160|              vector_of_union_types = reinterpret_cast<Vector<uint8_t>*>(
 1382|    160|                  builder_.GetCurrentBufferPointer() + builder_.GetSize() -
 1383|    160|                  offset);
 1384|    160|              break;
 1385|    160|            }
 1386|    236|          } else {
 1387|    133|            if (type.base_type == BASE_TYPE_UTYPE) {
  ------------------
  |  Branch (1387:17): [True: 133, False: 0]
  ------------------
 1388|       |              // Union type field.
 1389|    133|              constant = elem->first.constant;
 1390|    133|              break;
 1391|    133|            }
 1392|    133|          }
 1393|    369|        }
 1394|    369|      }
 1395|    331|      if (constant.empty() && !inside_vector) {
  ------------------
  |  Branch (1395:11): [True: 206, False: 125]
  |  Branch (1395:31): [True: 44, False: 162]
  ------------------
 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|     44|        auto type_name = field->name + UnionTypeFieldSuffix();
 1402|     44|        FLATBUFFERS_ASSERT(parent_struct_def);
 1403|     44|        auto type_field = parent_struct_def->fields.Lookup(type_name);
 1404|     44|        FLATBUFFERS_ASSERT(type_field);  // Guaranteed by ParseField().
 1405|       |        // Remember where we are in the source file, so we can come back here.
 1406|     44|        auto backup = *static_cast<ParserState*>(this);
 1407|     44|        ECHECK(SkipAnyJsonValue());  // The table.
  ------------------
  |  |   56|     44|  {                            \
  |  |   57|     44|    auto ce = (call);          \
  |  |   58|     44|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 5, False: 39]
  |  |  ------------------
  |  |   59|     44|  }
  ------------------
 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: 4, False: 33]
  ------------------
 1411|      4|          NEXT();
  ------------------
  |  |   63|      4|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|      4|  {                            \
  |  |  |  |   57|      4|    auto ce = (call);          \
  |  |  |  |   58|      4|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 3]
  |  |  |  |  ------------------
  |  |  |  |   59|      4|  }
  |  |  ------------------
  ------------------
 1412|     33|        } else {
 1413|     33|          EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|     33|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|     33|  {                            \
  |  |  |  |   57|     33|    auto ce = (call);          \
  |  |  |  |   58|     33|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 31]
  |  |  |  |  ------------------
  |  |  |  |   59|     33|  }
  |  |  ------------------
  ------------------
 1414|     31|        }
 1415|     34|        if (next_name == type_name) {
  ------------------
  |  Branch (1415:13): [True: 28, False: 6]
  ------------------
 1416|     28|          EXPECT(':');
  ------------------
  |  |   64|     28|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|     28|  {                            \
  |  |  |  |   57|     28|    auto ce = (call);          \
  |  |  |  |   58|     28|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 26]
  |  |  |  |  ------------------
  |  |  |  |   59|     28|  }
  |  |  ------------------
  ------------------
 1417|     26|          ParseDepthGuard depth_guard(this);
 1418|     26|          ECHECK(depth_guard.Check());
  ------------------
  |  |   56|     26|  {                            \
  |  |   57|     26|    auto ce = (call);          \
  |  |   58|     26|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 0, False: 26]
  |  |  ------------------
  |  |   59|     26|  }
  ------------------
 1419|     26|          Value type_val = type_field->value;
 1420|     26|          ECHECK(ParseAnyValue(type_val, type_field, 0, nullptr, 0));
  ------------------
  |  |   56|     26|  {                            \
  |  |   57|     26|    auto ce = (call);          \
  |  |   58|     26|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1, False: 25]
  |  |  ------------------
  |  |   59|     26|  }
  ------------------
 1421|     25|          constant = type_val.constant;
 1422|       |          // Got the information we needed, now rewind:
 1423|     25|          *static_cast<ParserState*>(this) = backup;
 1424|     25|        }
 1425|     34|      }
 1426|    318|      if (constant.empty() && !vector_of_union_types) {
  ------------------
  |  Branch (1426:11): [True: 168, False: 150]
  |  Branch (1426:31): [True: 8, False: 160]
  ------------------
 1427|      8|        return Error("missing type field for this union value: " + field->name);
 1428|      8|      }
 1429|    310|      uint8_t enum_idx;
 1430|    310|      if (vector_of_union_types) {
  ------------------
  |  Branch (1430:11): [True: 160, False: 150]
  ------------------
 1431|    160|        if (vector_of_union_types->size() <= count)
  ------------------
  |  Branch (1431:13): [True: 4, False: 156]
  ------------------
 1432|      4|          return Error(
 1433|      4|              "union types vector smaller than union values vector for: " +
 1434|      4|              field->name);
 1435|    156|        enum_idx = vector_of_union_types->Get(static_cast<uoffset_t>(count));
 1436|    156|      } else {
 1437|    150|        ECHECK(atot(constant.c_str(), *this, &enum_idx));
  ------------------
  |  |   56|    150|  {                            \
  |  |   57|    150|    auto ce = (call);          \
  |  |   58|    150|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 4, False: 146]
  |  |  ------------------
  |  |   59|    150|  }
  ------------------
 1438|    146|      }
 1439|    302|      auto enum_val = val.type.enum_def->ReverseLookup(enum_idx, true);
 1440|    302|      if (!enum_val) return Error("illegal type id for: " + field->name);
  ------------------
  |  Branch (1440:11): [True: 16, False: 286]
  ------------------
 1441|    286|      if (enum_val->union_type.base_type == BASE_TYPE_STRUCT) {
  ------------------
  |  Branch (1441:11): [True: 286, False: 0]
  ------------------
 1442|    286|        ECHECK(ParseTable(*enum_val->union_type.struct_def, &val.constant,
  ------------------
  |  |   56|    286|  {                            \
  |  |   57|    286|    auto ce = (call);          \
  |  |   58|    286|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 181, False: 105]
  |  |  ------------------
  |  |   59|    286|  }
  ------------------
 1443|    286|                          nullptr));
 1444|    105|        if (enum_val->union_type.struct_def->fixed) {
  ------------------
  |  Branch (1444:13): [True: 0, False: 105]
  ------------------
 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|    105|      } 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|    105|      break;
 1456|    286|    }
 1457|   166k|    case BASE_TYPE_STRUCT:
  ------------------
  |  Branch (1457:5): [True: 166k, False: 217k]
  ------------------
 1458|   166k|      ECHECK(ParseTable(*val.type.struct_def, &val.constant, nullptr));
  ------------------
  |  |   56|   166k|  {                            \
  |  |   57|   166k|    auto ce = (call);          \
  |  |   58|   166k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 3.69k, False: 162k]
  |  |  ------------------
  |  |   59|   166k|  }
  ------------------
 1459|   162k|      break;
 1460|  4.86k|    case BASE_TYPE_STRING: {
  ------------------
  |  Branch (1460:5): [True: 4.86k, False: 379k]
  ------------------
 1461|  4.86k|      ECHECK(ParseString(val, field->shared));
  ------------------
  |  |   56|  4.86k|  {                            \
  |  |   57|  4.86k|    auto ce = (call);          \
  |  |   58|  4.86k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 11, False: 4.85k]
  |  |  ------------------
  |  |   59|  4.86k|  }
  ------------------
 1462|  4.85k|      break;
 1463|  4.86k|    }
 1464|  6.43k|    case BASE_TYPE_VECTOR64:
  ------------------
  |  Branch (1464:5): [True: 6.43k, False: 377k]
  ------------------
 1465|  45.2k|    case BASE_TYPE_VECTOR: {
  ------------------
  |  Branch (1465:5): [True: 38.8k, False: 345k]
  ------------------
 1466|  45.2k|      uoffset_t off;
 1467|  45.2k|      ECHECK(ParseVector(val.type, &off, field, parent_fieldn));
  ------------------
  |  |   56|  45.2k|  {                            \
  |  |   57|  45.2k|    auto ce = (call);          \
  |  |   58|  45.2k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 4.93k, False: 40.3k]
  |  |  ------------------
  |  |   59|  45.2k|  }
  ------------------
 1468|  40.3k|      val.constant = NumToString(off);
 1469|  40.3k|      break;
 1470|  45.2k|    }
 1471|  5.96k|    case BASE_TYPE_ARRAY: {
  ------------------
  |  Branch (1471:5): [True: 5.96k, False: 377k]
  ------------------
 1472|  5.96k|      ECHECK(ParseArray(val));
  ------------------
  |  |   56|  5.96k|  {                            \
  |  |   57|  5.96k|    auto ce = (call);          \
  |  |   58|  5.96k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 246, False: 5.71k]
  |  |  ------------------
  |  |   59|  5.96k|  }
  ------------------
 1473|  5.71k|      break;
 1474|  5.96k|    }
 1475|  24.3k|    case BASE_TYPE_INT:
  ------------------
  |  Branch (1475:5): [True: 24.3k, False: 359k]
  ------------------
 1476|  31.0k|    case BASE_TYPE_UINT:
  ------------------
  |  Branch (1476:5): [True: 6.73k, False: 377k]
  ------------------
 1477|  50.5k|    case BASE_TYPE_LONG:
  ------------------
  |  Branch (1477:5): [True: 19.4k, False: 364k]
  ------------------
 1478|  61.4k|    case BASE_TYPE_ULONG: {
  ------------------
  |  Branch (1478:5): [True: 10.9k, False: 372k]
  ------------------
 1479|  61.4k|      if (field && field->attributes.Lookup("hash") &&
  ------------------
  |  Branch (1479:11): [True: 61.4k, False: 0]
  |  Branch (1479:11): [True: 3.13k, False: 58.3k]
  |  Branch (1479:20): [True: 3.21k, False: 58.2k]
  ------------------
 1480|  3.21k|          (token_ == kTokenIdentifier || token_ == kTokenStringConstant)) {
  ------------------
  |  Branch (1480:12): [True: 1.90k, False: 1.30k]
  |  Branch (1480:42): [True: 1.22k, False: 80]
  ------------------
 1481|  3.13k|        ECHECK(ParseHash(val, field));
  ------------------
  |  |   56|  3.13k|  {                            \
  |  |   57|  3.13k|    auto ce = (call);          \
  |  |   58|  3.13k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 10, False: 3.12k]
  |  |  ------------------
  |  |   59|  3.13k|  }
  ------------------
 1482|  58.3k|      } else {
 1483|  58.3k|        ECHECK(ParseSingleValue(field ? &field->name : nullptr, val, false));
  ------------------
  |  |   56|  58.3k|  {                            \
  |  |   57|   116k|    auto ce = (call);          \
  |  |  ------------------
  |  |  |  Branch (57:16): [True: 58.3k, False: 0]
  |  |  ------------------
  |  |   58|  58.3k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 100, False: 58.2k]
  |  |  ------------------
  |  |   59|  58.3k|  }
  ------------------
 1484|  58.2k|      }
 1485|  61.3k|      break;
 1486|  61.4k|    }
 1487|  99.2k|    default:
  ------------------
  |  Branch (1487:5): [True: 99.2k, False: 284k]
  ------------------
 1488|  99.2k|      ECHECK(ParseSingleValue(field ? &field->name : nullptr, val, false));
  ------------------
  |  |   56|  99.2k|  {                            \
  |  |   57|   198k|    auto ce = (call);          \
  |  |  ------------------
  |  |  |  Branch (57:16): [True: 99.2k, False: 0]
  |  |  ------------------
  |  |   58|  99.2k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 135, False: 99.1k]
  |  |  ------------------
  |  |   59|  99.2k|  }
  ------------------
 1489|  99.1k|      break;
 1490|   383k|  }
 1491|   374k|  return NoError();
 1492|   383k|}
_ZN11flatbuffers6Parser15SerializeStructERKNS_9StructDefERKNS_5ValueE:
 1494|  22.4k|void Parser::SerializeStruct(const StructDef& struct_def, const Value& val) {
 1495|  22.4k|  SerializeStruct(builder_, struct_def, val);
 1496|  22.4k|}
_ZN11flatbuffers6Parser15SerializeStructERNS_21FlatBufferBuilderImplILb0EEERKNS_9StructDefERKNS_5ValueE:
 1499|  22.4k|                             const StructDef& struct_def, const Value& val) {
 1500|  22.4k|  FLATBUFFERS_ASSERT(val.constant.length() == struct_def.bytesize);
 1501|  22.4k|  builder.Align(struct_def.minalign);
 1502|  22.4k|  builder.PushBytes(reinterpret_cast<const uint8_t*>(val.constant.c_str()),
 1503|  22.4k|                    struct_def.bytesize);
 1504|  22.4k|  builder.AddStructOffset(val.offset, builder.GetSize());
 1505|  22.4k|}
_ZN11flatbuffers6Parser10ParseTableERKNS_9StructDefEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEPj:
 1549|   175k|                                uoffset_t* ovalue) {
 1550|   175k|  ParseDepthGuard depth_guard(this);
 1551|   175k|  ECHECK(depth_guard.Check());
  ------------------
  |  |   56|   175k|  {                            \
  |  |   57|   175k|    auto ce = (call);          \
  |  |   58|   175k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 4, False: 175k]
  |  |  ------------------
  |  |   59|   175k|  }
  ------------------
 1552|       |
 1553|   175k|  size_t fieldn_outer = 0;
 1554|   175k|  auto err = ParseTableDelimiters(
 1555|   175k|      fieldn_outer, &struct_def,
 1556|   175k|      [&](const std::string& name, size_t& fieldn,
 1557|   175k|          const StructDef* struct_def_inner) -> CheckedError {
 1558|   175k|        if (name == "$schema") {
 1559|   175k|          ECHECK(Expect(kTokenStringConstant));
 1560|   175k|          return NoError();
 1561|   175k|        }
 1562|   175k|        auto field = struct_def_inner->fields.Lookup(name);
 1563|   175k|        if (!field) {
 1564|   175k|          if (!opts.skip_unexpected_fields_in_json) {
 1565|   175k|            return Error("unknown field: " + name);
 1566|   175k|          } else {
 1567|   175k|            ECHECK(SkipAnyJsonValue());
 1568|   175k|          }
 1569|   175k|        } else {
 1570|   175k|          if (IsIdent("null") && !IsScalar(field->value.type.base_type)) {
 1571|   175k|            ECHECK(Next());  // Ignore this field.
 1572|   175k|          } else {
 1573|   175k|            Value val = field->value;
 1574|   175k|            if (field->flexbuffer) {
 1575|   175k|              flexbuffers::Builder builder(1024,
 1576|   175k|                                           flexbuffers::BUILDER_FLAG_SHARE_ALL);
 1577|   175k|              ECHECK(ParseFlexBufferValue(&builder));
 1578|   175k|              builder.Finish();
 1579|       |              // Force alignment for nested flexbuffer
 1580|   175k|              builder_.ForceVectorAlignment(builder.GetSize(), sizeof(uint8_t),
 1581|   175k|                                            sizeof(largest_scalar_t));
 1582|   175k|              auto off = builder_.CreateVector(builder.GetBuffer());
 1583|   175k|              val.constant = NumToString(off.o);
 1584|   175k|            } else if (field->nested_flatbuffer) {
 1585|   175k|              ECHECK(
 1586|   175k|                  ParseNestedFlatbuffer(val, field, fieldn, struct_def_inner));
 1587|   175k|            } else {
 1588|   175k|              ECHECK(ParseAnyValue(val, field, fieldn, struct_def_inner, 0));
 1589|   175k|            }
 1590|       |            // Hardcoded insertion-sort with error-check.
 1591|       |            // If fields are specified in order, then this loop exits
 1592|       |            // immediately.
 1593|   175k|            auto elem = field_stack_.rbegin();
 1594|   175k|            for (; elem != field_stack_.rbegin() + fieldn; ++elem) {
 1595|   175k|              auto existing_field = elem->second;
 1596|   175k|              if (existing_field == field)
 1597|   175k|                return Error("field set more than once: " + field->name);
 1598|   175k|              if (existing_field->value.offset < field->value.offset) break;
 1599|   175k|            }
 1600|       |            // Note: elem points to before the insertion point, thus .base()
 1601|       |            // points to the correct spot.
 1602|   175k|            field_stack_.insert(elem.base(), std::make_pair(val, field));
 1603|   175k|            fieldn++;
 1604|   175k|          }
 1605|   175k|        }
 1606|   175k|        return NoError();
 1607|   175k|      });
 1608|   175k|  ECHECK(err);
  ------------------
  |  |   56|   175k|  {                            \
  |  |   57|   175k|    auto ce = (call);          \
  |  |   58|   175k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 12.1k, False: 163k]
  |  |  ------------------
  |  |   59|   175k|  }
  ------------------
 1609|       |
 1610|       |  // Check if all required fields are parsed.
 1611|   163k|  for (auto field_it = struct_def.fields.vec.begin();
 1612|   436k|       field_it != struct_def.fields.vec.end(); ++field_it) {
  ------------------
  |  Branch (1612:8): [True: 273k, False: 163k]
  ------------------
 1613|   273k|    auto required_field = *field_it;
 1614|   273k|    if (!required_field->IsRequired()) {
  ------------------
  |  Branch (1614:9): [True: 272k, False: 1.36k]
  ------------------
 1615|   272k|      continue;
 1616|   272k|    }
 1617|  1.36k|    bool found = false;
 1618|  1.36k|    for (auto pf_it = field_stack_.end() - fieldn_outer;
 1619|  2.53k|         pf_it != field_stack_.end(); ++pf_it) {
  ------------------
  |  Branch (1619:10): [True: 2.52k, False: 5]
  ------------------
 1620|  2.52k|      auto parsed_field = pf_it->second;
 1621|  2.52k|      if (parsed_field == required_field) {
  ------------------
  |  Branch (1621:11): [True: 1.35k, False: 1.16k]
  ------------------
 1622|  1.35k|        found = true;
 1623|  1.35k|        break;
 1624|  1.35k|      }
 1625|  2.52k|    }
 1626|  1.36k|    if (!found) {
  ------------------
  |  Branch (1626:9): [True: 5, False: 1.35k]
  ------------------
 1627|      5|      return Error("required field is missing: " + required_field->name +
 1628|      5|                   " in " + struct_def.name);
 1629|      5|    }
 1630|  1.36k|  }
 1631|       |
 1632|   163k|  if (struct_def.fixed && fieldn_outer != struct_def.fields.vec.size())
  ------------------
  |  Branch (1632:7): [True: 33.8k, False: 129k]
  |  Branch (1632:27): [True: 1, False: 33.8k]
  ------------------
 1633|      1|    return Error("struct: wrong number of initializers: " + struct_def.name);
 1634|       |
 1635|   163k|  auto start = struct_def.fixed ? builder_.StartStruct(struct_def.minalign)
  ------------------
  |  Branch (1635:16): [True: 33.8k, False: 129k]
  ------------------
 1636|   163k|                                : builder_.StartTable();
 1637|       |
 1638|   682k|  for (size_t size = struct_def.sortbysize ? sizeof(largest_scalar_t) : 1; size;
  ------------------
  |  Branch (1638:22): [True: 118k, False: 44.7k]
  |  Branch (1638:76): [True: 519k, False: 163k]
  ------------------
 1639|   519k|       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|   519k|    for (auto it = field_stack_.rbegin();
 1645|   963k|         it != field_stack_.rbegin() + fieldn_outer; ++it) {
  ------------------
  |  Branch (1645:10): [True: 444k, False: 519k]
  ------------------
 1646|   444k|      auto& field_value = it->first;
 1647|   444k|      auto field = it->second;
 1648|   444k|      if (!struct_def.sortbysize ||
  ------------------
  |  Branch (1648:11): [True: 71.1k, False: 373k]
  ------------------
 1649|   373k|          size == SizeOf(field_value.type.base_type)) {
  ------------------
  |  Branch (1649:11): [True: 93.3k, False: 279k]
  ------------------
 1650|   164k|        switch (field_value.type.base_type) {
  ------------------
  |  Branch (1650:17): [True: 164k, 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|   114k|            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: 164k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 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|     32|  TD(UTYPE,    "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 1) /* begin scalar/int */ \
  |  |  ------------------
  |  |  |  | 1674|     32|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|     32|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 32, False: 164k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|     30|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|     32|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 0, False: 32]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 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|     32|              } else { \
  |  |  |  |  |  | 1660|     32|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 0, False: 32]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 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|     32|                } else { \
  |  |  |  |  |  | 1667|     32|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|     32|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|     32|  {                            \
  |  |  |  |  |  |  |  |   57|     32|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|     32|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 30]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|     32|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 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|     32|              } \
  |  |  |  |  |  | 1673|     30|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|  12.7k|  TD(BOOL,     "bool",   uint8_t,  boolean,bool,    bool,   bool,    bool, Boolean, Bool, 2) \
  |  |  ------------------
  |  |  |  | 1674|  12.7k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  12.7k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 12.7k, False: 151k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  12.7k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  12.7k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 1.34k, False: 11.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|  1.34k|                CTYPE val; \
  |  |  |  |  |  | 1657|  1.34k|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.34k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.34k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.34k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 6, False: 1.33k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.34k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|  1.33k|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  11.3k|              } else { \
  |  |  |  |  |  | 1660|  11.3k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 1.35k, False: 10.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  1.35k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 1.15k, False: 202]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  1.15k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  1.15k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.15k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.15k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.15k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 5, False: 1.15k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.15k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  1.15k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  1.15k|                  } \
  |  |  |  |  |  | 1666|  10.0k|                } else { \
  |  |  |  |  |  | 1667|  10.0k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  10.0k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  10.0k|  {                            \
  |  |  |  |  |  |  |  |   57|  10.0k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  10.0k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 10.0k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  10.0k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  10.0k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  10.0k|  {                            \
  |  |  |  |  |  |  |  |   57|  10.0k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  10.0k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 10.0k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  10.0k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  10.0k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  10.0k|                } \
  |  |  |  |  |  | 1672|  11.3k|              } \
  |  |  |  |  |  | 1673|  12.7k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|  12.7k|  TD(CHAR,     "byte",   int8_t,   byte,   int8,    sbyte,  int8,    i8,   Byte, Int8, 3) \
  |  |  ------------------
  |  |  |  | 1674|  7.65k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  7.65k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 7.65k, False: 156k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  7.62k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  7.65k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 1.65k, False: 5.99k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|  1.65k|                CTYPE val; \
  |  |  |  |  |  | 1657|  1.65k|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.65k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.65k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.65k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 1.65k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.65k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|  1.65k|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  5.99k|              } else { \
  |  |  |  |  |  | 1660|  5.99k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 1.61k, False: 4.37k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  1.61k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 1.53k, False: 83]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  1.53k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  1.53k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.53k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.53k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.53k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 14, False: 1.52k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.53k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  1.52k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  1.52k|                  } \
  |  |  |  |  |  | 1666|  4.37k|                } else { \
  |  |  |  |  |  | 1667|  4.37k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  4.37k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  4.37k|  {                            \
  |  |  |  |  |  |  |  |   57|  4.37k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  4.37k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 6, False: 4.36k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  4.37k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  4.36k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  4.36k|  {                            \
  |  |  |  |  |  |  |  |   57|  4.36k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  4.36k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 4.36k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  4.36k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  4.36k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  4.36k|                } \
  |  |  |  |  |  | 1672|  5.99k|              } \
  |  |  |  |  |  | 1673|  7.62k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|  12.0k|  TD(UCHAR,    "ubyte",  uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 4) \
  |  |  ------------------
  |  |  |  | 1674|  12.0k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  12.0k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 12.0k, False: 152k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  12.0k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  12.0k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 7.55k, False: 4.48k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|  7.55k|                CTYPE val; \
  |  |  |  |  |  | 1657|  7.55k|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  7.55k|  {                            \
  |  |  |  |  |  |  |  |   57|  7.55k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  7.55k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 1, False: 7.55k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  7.55k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|  7.55k|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  7.55k|              } else { \
  |  |  |  |  |  | 1660|  4.48k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 1.56k, False: 2.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  1.56k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 1.48k, False: 80]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 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: 10, False: 1.47k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.48k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  1.47k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  1.47k|                  } \
  |  |  |  |  |  | 1666|  2.92k|                } else { \
  |  |  |  |  |  | 1667|  2.92k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  2.92k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  2.92k|  {                            \
  |  |  |  |  |  |  |  |   57|  2.92k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  2.92k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 2.91k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  2.92k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  2.91k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  2.91k|  {                            \
  |  |  |  |  |  |  |  |   57|  2.91k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  2.91k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 2.91k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  2.91k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  2.91k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  2.91k|                } \
  |  |  |  |  |  | 1672|  4.48k|              } \
  |  |  |  |  |  | 1673|  12.0k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|  12.0k|  TD(SHORT,    "short",  int16_t,  short,  int16,   short,  int16,   i16,  Short, Int16, 5) \
  |  |  ------------------
  |  |  |  | 1674|  7.20k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  7.20k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 7.20k, False: 157k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  7.18k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  7.20k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 1.01k, False: 6.19k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|  1.01k|                CTYPE val; \
  |  |  |  |  |  | 1657|  1.01k|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.01k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.01k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.01k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 7, False: 1.00k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.01k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|  1.00k|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  6.19k|              } else { \
  |  |  |  |  |  | 1660|  6.19k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 1.57k, False: 4.61k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  1.57k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 1.37k, False: 201]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  1.37k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  1.37k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   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|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  1.36k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  1.36k|                  } \
  |  |  |  |  |  | 1666|  4.61k|                } else { \
  |  |  |  |  |  | 1667|  4.61k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  4.61k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  4.61k|  {                            \
  |  |  |  |  |  |  |  |   57|  4.61k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  4.61k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 5, False: 4.61k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  4.61k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  4.61k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  4.61k|  {                            \
  |  |  |  |  |  |  |  |   57|  4.61k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  4.61k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 4.61k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  4.61k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  4.61k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  4.61k|                } \
  |  |  |  |  |  | 1672|  6.19k|              } \
  |  |  |  |  |  | 1673|  7.18k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   56|  7.18k|  TD(USHORT,   "ushort", uint16_t, short,  uint16,  ushort, uint16,  u16,  UShort, UInt16, 6) \
  |  |  ------------------
  |  |  |  | 1674|  3.82k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  3.82k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 3.82k, False: 160k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  3.81k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  3.82k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 487, False: 3.34k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|    487|                CTYPE val; \
  |  |  |  |  |  | 1657|    487|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    487|  {                            \
  |  |  |  |  |  |  |  |   57|    487|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    487|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 7, False: 480]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    487|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|    480|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  3.34k|              } else { \
  |  |  |  |  |  | 1660|  3.34k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 1.21k, False: 2.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  1.21k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 1.00k, False: 207]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  1.00k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  1.00k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.00k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.00k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.00k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 1.00k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.00k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  1.00k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  1.00k|                  } \
  |  |  |  |  |  | 1666|  2.12k|                } else { \
  |  |  |  |  |  | 1667|  2.12k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  2.12k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   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|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  2.12k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  2.12k|  {                            \
  |  |  |  |  |  |  |  |   57|  2.12k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  2.12k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 2.12k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  2.12k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  2.12k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  2.12k|                } \
  |  |  |  |  |  | 1672|  3.34k|              } \
  |  |  |  |  |  | 1673|  3.81k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   57|  22.5k|  TD(INT,      "int",    int32_t,  int,    int32,   int,    int32,   i32,  Int, Int32, 7) \
  |  |  ------------------
  |  |  |  | 1674|  22.5k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  22.5k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 22.5k, False: 141k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  22.5k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  22.5k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 16.4k, False: 6.09k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|  16.4k|                CTYPE val; \
  |  |  |  |  |  | 1657|  16.4k|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  16.4k|  {                            \
  |  |  |  |  |  |  |  |   57|  16.4k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  16.4k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 16.4k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  16.4k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|  16.4k|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  16.4k|              } else { \
  |  |  |  |  |  | 1660|  6.09k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 1.11k, False: 4.97k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  1.11k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 917, False: 201]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|    917|                    CTYPE val; \
  |  |  |  |  |  | 1663|    917|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    917|  {                            \
  |  |  |  |  |  |  |  |   57|    917|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    917|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 913]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    917|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|    913|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|    913|                  } \
  |  |  |  |  |  | 1666|  4.97k|                } else { \
  |  |  |  |  |  | 1667|  4.97k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  4.97k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  4.97k|  {                            \
  |  |  |  |  |  |  |  |   57|  4.97k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  4.97k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 1, False: 4.97k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  4.97k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  4.97k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  4.97k|  {                            \
  |  |  |  |  |  |  |  |   57|  4.97k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  4.97k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 4.97k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  4.97k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  4.97k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  4.97k|                } \
  |  |  |  |  |  | 1672|  6.09k|              } \
  |  |  |  |  |  | 1673|  22.5k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  22.5k|  TD(UINT,     "uint",   uint32_t, int,    uint32,  uint,   uint32,  u32,  UInt, UInt32, 8) \
  |  |  ------------------
  |  |  |  | 1674|  4.60k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  4.60k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 4.60k, False: 159k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  4.58k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  4.60k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 694, False: 3.90k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|    694|                CTYPE val; \
  |  |  |  |  |  | 1657|    694|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    694|  {                            \
  |  |  |  |  |  |  |  |   57|    694|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    694|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 691]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    694|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|    691|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  3.90k|              } else { \
  |  |  |  |  |  | 1660|  3.90k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 1.51k, False: 2.39k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  1.51k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 1.29k, False: 218]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  1.29k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  1.29k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.29k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.29k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.29k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 1.28k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.29k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  1.28k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  1.28k|                  } \
  |  |  |  |  |  | 1666|  2.39k|                } else { \
  |  |  |  |  |  | 1667|  2.39k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  2.39k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  2.39k|  {                            \
  |  |  |  |  |  |  |  |   57|  2.39k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  2.39k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 6, False: 2.39k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  2.39k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  2.39k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  2.39k|  {                            \
  |  |  |  |  |  |  |  |   57|  2.39k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  2.39k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 2.39k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  2.39k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  2.39k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  2.39k|                } \
  |  |  |  |  |  | 1672|  3.90k|              } \
  |  |  |  |  |  | 1673|  4.58k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   59|  12.6k|  TD(LONG,     "long",   int64_t,  long,   int64,   long,   int64,   i64,  Long, Int64, 9) \
  |  |  ------------------
  |  |  |  | 1674|  12.6k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  12.6k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 12.6k, False: 151k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  12.6k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  12.6k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 1.39k, False: 11.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|  1.39k|                CTYPE val; \
  |  |  |  |  |  | 1657|  1.39k|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.39k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.39k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.39k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 1.38k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.39k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|  1.38k|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  11.2k|              } else { \
  |  |  |  |  |  | 1660|  11.2k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 3.92k, False: 7.36k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  3.92k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 3.73k, False: 197]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  3.73k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  3.73k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  3.73k|  {                            \
  |  |  |  |  |  |  |  |   57|  3.73k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  3.73k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 3.72k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  3.73k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  3.72k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  3.72k|                  } \
  |  |  |  |  |  | 1666|  7.36k|                } else { \
  |  |  |  |  |  | 1667|  7.36k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  7.36k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  7.36k|  {                            \
  |  |  |  |  |  |  |  |   57|  7.36k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  7.36k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 6, False: 7.35k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  7.36k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  7.35k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  7.35k|  {                            \
  |  |  |  |  |  |  |  |   57|  7.35k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  7.35k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 7.35k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  7.35k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  7.35k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  7.35k|                } \
  |  |  |  |  |  | 1672|  11.2k|              } \
  |  |  |  |  |  | 1673|  12.6k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  12.6k|  TD(ULONG,    "ulong",  uint64_t, long,   uint64,  ulong,  uint64,  u64,  ULong, UInt64, 10) /* end int */ \
  |  |  ------------------
  |  |  |  | 1674|  9.47k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  9.47k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 9.47k, False: 155k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  9.46k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  9.47k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 943, False: 8.52k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|    943|                CTYPE val; \
  |  |  |  |  |  | 1657|    943|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    943|  {                            \
  |  |  |  |  |  |  |  |   57|    943|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    943|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 939]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    943|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|    939|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  8.52k|              } else { \
  |  |  |  |  |  | 1660|  8.52k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 4.21k, False: 4.31k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  4.21k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 4.01k, False: 201]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  4.01k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  4.01k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  4.01k|  {                            \
  |  |  |  |  |  |  |  |   57|  4.01k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  4.01k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 4.01k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  4.01k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  4.01k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  4.01k|                  } \
  |  |  |  |  |  | 1666|  4.31k|                } else { \
  |  |  |  |  |  | 1667|  4.31k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  4.31k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  4.31k|  {                            \
  |  |  |  |  |  |  |  |   57|  4.31k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  4.31k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 4.30k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  4.31k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  4.30k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  4.30k|  {                            \
  |  |  |  |  |  |  |  |   57|  4.30k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  4.30k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 4.30k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  4.30k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  4.30k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  4.30k|                } \
  |  |  |  |  |  | 1672|  8.52k|              } \
  |  |  |  |  |  | 1673|  9.46k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|  10.7k|  TD(FLOAT,    "float",  float,    float,  float32, float,  float32, f32,  Float, Float32, 11) /* begin float */ \
  |  |  ------------------
  |  |  |  | 1674|  10.7k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  10.7k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 10.7k, False: 153k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  10.7k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  10.7k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 439, False: 10.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|    439|                CTYPE val; \
  |  |  |  |  |  | 1657|    439|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    439|  {                            \
  |  |  |  |  |  |  |  |   57|    439|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    439|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 6, False: 433]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    439|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|    433|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  10.3k|              } else { \
  |  |  |  |  |  | 1660|  10.3k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 1.37k, False: 8.94k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  1.37k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 1.34k, False: 35]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  1.34k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  1.34k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  1.34k|  {                            \
  |  |  |  |  |  |  |  |   57|  1.34k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  1.34k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 1.34k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  1.34k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  1.34k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  1.34k|                  } \
  |  |  |  |  |  | 1666|  8.94k|                } else { \
  |  |  |  |  |  | 1667|  8.94k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  8.94k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  8.94k|  {                            \
  |  |  |  |  |  |  |  |   57|  8.94k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  8.94k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 8.94k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  8.94k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  8.94k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  8.94k|  {                            \
  |  |  |  |  |  |  |  |   57|  8.94k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  8.94k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 8.94k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  8.94k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  8.94k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  8.94k|                } \
  |  |  |  |  |  | 1672|  10.3k|              } \
  |  |  |  |  |  | 1673|  10.7k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|  10.9k|  TD(DOUBLE,   "double", double,   double, float64, double, float64, f64,  Double, Double, 12) /* end float/scalar */
  |  |  ------------------
  |  |  |  | 1674|  10.9k|            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1653|  10.9k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1653:13): [True: 10.9k, False: 153k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1654|  10.9k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1655|  10.9k|              if (struct_def.fixed) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1655:19): [True: 908, False: 10.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1656|    908|                CTYPE val; \
  |  |  |  |  |  | 1657|    908|                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    908|  {                            \
  |  |  |  |  |  |  |  |   57|    908|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    908|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 905]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    908|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1658|    905|                builder_.PushElement(val); \
  |  |  |  |  |  | 1659|  10.0k|              } else { \
  |  |  |  |  |  | 1660|  10.0k|                if (field->IsScalarOptional()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1660:21): [True: 4.41k, False: 5.67k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1661|  4.41k|                  if (field_value.constant != "null") { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1661:23): [True: 4.21k, False: 194]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1662|  4.21k|                    CTYPE val; \
  |  |  |  |  |  | 1663|  4.21k|                    ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  4.21k|  {                            \
  |  |  |  |  |  |  |  |   57|  4.21k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  4.21k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 4.21k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  4.21k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1664|  4.21k|                    builder_.AddElement(field_value.offset, val); \
  |  |  |  |  |  | 1665|  4.21k|                  } \
  |  |  |  |  |  | 1666|  5.67k|                } else { \
  |  |  |  |  |  | 1667|  5.67k|                  CTYPE val, valdef; \
  |  |  |  |  |  | 1668|  5.67k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  5.67k|  {                            \
  |  |  |  |  |  |  |  |   57|  5.67k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  5.67k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 5.67k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  5.67k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1669|  5.67k|                  ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  5.67k|  {                            \
  |  |  |  |  |  |  |  |   57|  5.67k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  5.67k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 5.67k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  5.67k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1670|  5.67k|                  builder_.AddElement(field_value.offset, val, valdef); \
  |  |  |  |  |  | 1671|  5.67k|                } \
  |  |  |  |  |  | 1672|  10.0k|              } \
  |  |  |  |  |  | 1673|  10.9k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1675|  10.9k|          #undef FLATBUFFERS_TD
 1676|  10.9k|          #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
 1677|  10.9k|            case BASE_TYPE_ ## ENUM: \
 1678|  10.9k|              builder_.Pad(field->padding); \
 1679|  10.9k|              if (IsStruct(field->value.type)) { \
 1680|  10.9k|                SerializeStruct(*field->value.type.struct_def, field_value); \
 1681|  10.9k|              } else { \
 1682|       |                /* Special case for fields that use 64-bit addressing */ \
 1683|  10.9k|                if(field->offset64) { \
 1684|  10.9k|                  Offset64<void> offset; \
 1685|  10.9k|                  ECHECK(atot(field_value.constant.c_str(), *this, &offset)); \
 1686|  10.9k|                  builder_.AddOffset(field_value.offset, offset); \
 1687|  10.9k|                } else { \
 1688|  10.9k|                  CTYPE val; \
 1689|  10.9k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
 1690|  10.9k|                  builder_.AddOffset(field_value.offset, val); \
 1691|  10.9k|                } \
 1692|  10.9k|              } \
 1693|  10.9k|              break;
 1694|  44.4k|            FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD)
  ------------------
  |  |   64|  3.32k|  TD(STRING,   "string", Offset<void>,   int, int, StringOffset, int, unused, Int, Offset<String>, 13) \
  |  |  ------------------
  |  |  |  | 1694|  3.32k|            FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1677|  3.32k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1677:13): [True: 3.32k, False: 161k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1678|  3.32k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1679|  3.32k|              if (IsStruct(field->value.type)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1679:19): [True: 0, False: 3.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1680|      0|                SerializeStruct(*field->value.type.struct_def, field_value); \
  |  |  |  |  |  | 1681|  3.32k|              } else { \
  |  |  |  |  |  | 1682|  3.32k|                /* Special case for fields that use 64-bit addressing */ \
  |  |  |  |  |  | 1683|  3.32k|                if(field->offset64) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1683:20): [True: 557, False: 2.76k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1684|    557|                  Offset64<void> offset; \
  |  |  |  |  |  | 1685|    557|                  ECHECK(atot(field_value.constant.c_str(), *this, &offset)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    557|  {                            \
  |  |  |  |  |  |  |  |   57|    557|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    557|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 557]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    557|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1686|    557|                  builder_.AddOffset(field_value.offset, offset); \
  |  |  |  |  |  | 1687|  2.76k|                } else { \
  |  |  |  |  |  | 1688|  2.76k|                  CTYPE val; \
  |  |  |  |  |  | 1689|  2.76k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  2.76k|  {                            \
  |  |  |  |  |  |  |  |   57|  2.76k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  2.76k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 2.76k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  2.76k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1690|  2.76k|                  builder_.AddOffset(field_value.offset, val); \
  |  |  |  |  |  | 1691|  2.76k|                } \
  |  |  |  |  |  | 1692|  3.32k|              } \
  |  |  |  |  |  | 1693|  3.32k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|  34.5k|  TD(VECTOR,   "",       Offset<void>,   int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 14) \
  |  |  ------------------
  |  |  |  | 1694|  34.5k|            FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1677|  34.5k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1677:13): [True: 34.5k, False: 129k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1678|  34.5k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1679|  34.5k|              if (IsStruct(field->value.type)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1679:19): [True: 0, False: 34.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1680|      0|                SerializeStruct(*field->value.type.struct_def, field_value); \
  |  |  |  |  |  | 1681|  34.5k|              } else { \
  |  |  |  |  |  | 1682|  34.5k|                /* Special case for fields that use 64-bit addressing */ \
  |  |  |  |  |  | 1683|  34.5k|                if(field->offset64) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1683:20): [True: 4.00k, False: 30.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1684|  4.00k|                  Offset64<void> offset; \
  |  |  |  |  |  | 1685|  4.00k|                  ECHECK(atot(field_value.constant.c_str(), *this, &offset)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  4.00k|  {                            \
  |  |  |  |  |  |  |  |   57|  4.00k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  4.00k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 4.00k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  4.00k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1686|  4.00k|                  builder_.AddOffset(field_value.offset, offset); \
  |  |  |  |  |  | 1687|  30.5k|                } else { \
  |  |  |  |  |  | 1688|  30.5k|                  CTYPE val; \
  |  |  |  |  |  | 1689|  30.5k|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  30.5k|  {                            \
  |  |  |  |  |  |  |  |   57|  30.5k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  30.5k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 30.5k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  30.5k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1690|  30.5k|                  builder_.AddOffset(field_value.offset, val); \
  |  |  |  |  |  | 1691|  30.5k|                } \
  |  |  |  |  |  | 1692|  34.5k|              } \
  |  |  |  |  |  | 1693|  34.5k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|  34.5k|  TD(VECTOR64, "",       Offset64<void>, int, int, VectorOffset, int, unused, Int, Offset<UOffset>, 18) \
  |  |  ------------------
  |  |  |  | 1694|  6.38k|            FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1677|  6.38k|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1677:13): [True: 6.38k, False: 158k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1678|  6.38k|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1679|  6.38k|              if (IsStruct(field->value.type)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1679:19): [True: 0, False: 6.38k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1680|      0|                SerializeStruct(*field->value.type.struct_def, field_value); \
  |  |  |  |  |  | 1681|  6.38k|              } else { \
  |  |  |  |  |  | 1682|  6.38k|                /* Special case for fields that use 64-bit addressing */ \
  |  |  |  |  |  | 1683|  6.38k|                if(field->offset64) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1683:20): [True: 6.38k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1684|  6.38k|                  Offset64<void> offset; \
  |  |  |  |  |  | 1685|  6.38k|                  ECHECK(atot(field_value.constant.c_str(), *this, &offset)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  6.38k|  {                            \
  |  |  |  |  |  |  |  |   57|  6.38k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  6.38k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 6.38k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  6.38k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1686|  6.38k|                  builder_.AddOffset(field_value.offset, offset); \
  |  |  |  |  |  | 1687|  6.38k|                } 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.38k|              } \
  |  |  |  |  |  | 1693|  6.38k|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   67|  6.38k|  TD(STRUCT,   "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 15) \
  |  |  ------------------
  |  |  |  | 1694|    103|            FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1677|    103|            case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1677:13): [True: 103, False: 164k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1678|    103|              builder_.Pad(field->padding); \
  |  |  |  |  |  | 1679|    103|              if (IsStruct(field->value.type)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1679:19): [True: 0, False: 103]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1680|      0|                SerializeStruct(*field->value.type.struct_def, field_value); \
  |  |  |  |  |  | 1681|    103|              } else { \
  |  |  |  |  |  | 1682|    103|                /* Special case for fields that use 64-bit addressing */ \
  |  |  |  |  |  | 1683|    103|                if(field->offset64) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1683:20): [True: 0, False: 103]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 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|    103|                } else { \
  |  |  |  |  |  | 1688|    103|                  CTYPE val; \
  |  |  |  |  |  | 1689|    103|                  ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    103|  {                            \
  |  |  |  |  |  |  |  |   57|    103|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    103|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 103]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    103|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1690|    103|                  builder_.AddOffset(field_value.offset, val); \
  |  |  |  |  |  | 1691|    103|                } \
  |  |  |  |  |  | 1692|    103|              } \
  |  |  |  |  |  | 1693|    103|              break;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|    103|  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: 164k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 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.56k|            case BASE_TYPE_ARRAY:
  ------------------
  |  Branch (1696:13): [True: 5.56k, False: 158k]
  ------------------
 1697|  5.56k|              builder_.Pad(field->padding);
 1698|  5.56k|              builder_.PushBytes(
 1699|  5.56k|                reinterpret_cast<const uint8_t*>(field_value.constant.c_str()),
 1700|  5.56k|                InlineSize(field_value.type));
 1701|  5.56k|              break;
 1702|       |            // clang-format on
 1703|   164k|        }
 1704|   164k|      }
 1705|   444k|    }
 1706|   519k|  }
 1707|   327k|  for (size_t i = 0; i < fieldn_outer; i++) field_stack_.pop_back();
  ------------------
  |  Branch (1707:22): [True: 164k, False: 163k]
  ------------------
 1708|       |
 1709|   163k|  if (struct_def.fixed) {
  ------------------
  |  Branch (1709:7): [True: 33.8k, False: 129k]
  ------------------
 1710|  33.8k|    builder_.ClearOffsets();
 1711|  33.8k|    builder_.EndStruct();
 1712|  33.8k|    FLATBUFFERS_ASSERT(value);
 1713|       |    // Temporarily store this struct in the value string, since it is to
 1714|       |    // be serialized in-place elsewhere.
 1715|  33.8k|    value->assign(
 1716|  33.8k|        reinterpret_cast<const char*>(builder_.GetCurrentBufferPointer()),
 1717|  33.8k|        struct_def.bytesize);
 1718|  33.8k|    builder_.PopBytes(struct_def.bytesize);
 1719|  33.8k|    FLATBUFFERS_ASSERT(!ovalue);
 1720|   129k|  } else {
 1721|   129k|    auto val = builder_.EndTable(start);
 1722|   129k|    if (ovalue) *ovalue = val;
  ------------------
  |  Branch (1722:9): [True: 258, False: 129k]
  ------------------
 1723|   129k|    if (value) *value = NumToString(val);
  ------------------
  |  Branch (1723:9): [True: 129k, False: 258]
  ------------------
 1724|   129k|  }
 1725|   163k|  return NoError();
 1726|   163k|}
_ZN11flatbuffers6Parser19ParseAlignAttributeERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEmPm:
 1743|  7.15k|                                         size_t min_align, size_t* align) {
 1744|       |  // Use uint8_t to avoid problems with size_t==`unsigned long` on LP64.
 1745|  7.15k|  uint8_t align_value;
 1746|  7.15k|  if (StringToNumber(align_constant.c_str(), &align_value) &&
  ------------------
  |  Branch (1746:7): [True: 7.02k, False: 130]
  ------------------
 1747|  7.02k|      VerifyAlignmentRequirements(static_cast<size_t>(align_value),
  ------------------
  |  Branch (1747:7): [True: 7.01k, False: 8]
  ------------------
 1748|  7.02k|                                  min_align)) {
 1749|  7.01k|    *align = align_value;
 1750|  7.01k|    return NoError();
 1751|  7.01k|  }
 1752|    138|  return Error("unexpected force_align value '" + align_constant +
 1753|    138|               "', alignment must be a power of two integer ranging from the "
 1754|    138|               "type\'s natural alignment " +
 1755|    138|               NumToString(min_align) + " to " +
 1756|    138|               NumToString(FLATBUFFERS_MAX_ALIGNMENT));
  ------------------
  |  |  354|    138|  #define FLATBUFFERS_MAX_ALIGNMENT 32
  ------------------
 1757|  7.15k|}
_ZN11flatbuffers6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEm:
 1760|  45.2k|                                 FieldDef* field, size_t fieldn) {
 1761|  45.2k|  Type type = vector_type.VectorType();
 1762|  45.2k|  size_t count = 0;
 1763|  45.2k|  auto err = ParseVectorDelimiters(count, [&](size_t&) -> CheckedError {
 1764|  45.2k|    Value val;
 1765|  45.2k|    val.type = type;
 1766|  45.2k|    ECHECK(ParseAnyValue(val, field, fieldn, nullptr, count, true));
 1767|  45.2k|    field_stack_.push_back(std::make_pair(val, nullptr));
 1768|  45.2k|    return NoError();
 1769|  45.2k|  });
 1770|  45.2k|  ECHECK(err);
  ------------------
  |  |   56|  45.2k|  {                            \
  |  |   57|  45.2k|    auto ce = (call);          \
  |  |   58|  45.2k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 4.84k, False: 40.4k]
  |  |  ------------------
  |  |   59|  45.2k|  }
  ------------------
 1771|       |
 1772|  40.4k|  const size_t alignment = InlineAlignment(type);
 1773|  40.4k|  const size_t len = count * InlineSize(type) / InlineAlignment(type);
 1774|  40.4k|  const size_t elemsize = InlineAlignment(type);
 1775|  40.4k|  const auto force_align = field->attributes.Lookup("force_align");
 1776|  40.4k|  if (force_align) {
  ------------------
  |  Branch (1776:7): [True: 6.78k, False: 33.6k]
  ------------------
 1777|  6.78k|    size_t align;
 1778|  6.78k|    ECHECK(ParseAlignAttribute(force_align->constant, 1, &align));
  ------------------
  |  |   56|  6.78k|  {                            \
  |  |   57|  6.78k|    auto ce = (call);          \
  |  |   58|  6.78k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 3, False: 6.78k]
  |  |  ------------------
  |  |   59|  6.78k|  }
  ------------------
 1779|  6.78k|    if (align > 1) {
  ------------------
  |  Branch (1779:9): [True: 6.58k, False: 194]
  ------------------
 1780|  6.58k|      builder_.ForceVectorAlignment(len, elemsize, align);
 1781|  6.58k|    }
 1782|  6.78k|  }
 1783|       |
 1784|       |  // TODO Fix using element alignment as size (`elemsize`)!
 1785|  40.4k|  if (vector_type.base_type == BASE_TYPE_VECTOR64) {
  ------------------
  |  Branch (1785:7): [True: 6.41k, False: 34.0k]
  ------------------
 1786|       |    // TODO(derekbailey): this requires a 64-bit builder.
 1787|       |    // builder_.StartVector<Offset64, uoffset64_t>(len, elemsize, alignment);
 1788|  6.41k|    builder_.StartVector(len, elemsize, alignment);
 1789|  34.0k|  } else {
 1790|  34.0k|    builder_.StartVector(len, elemsize, alignment);
 1791|  34.0k|  }
 1792|   177k|  for (size_t i = 0; i < count; i++) {
  ------------------
  |  Branch (1792:22): [True: 137k, False: 40.3k]
  ------------------
 1793|       |    // start at the back, since we're building the data backwards.
 1794|   137k|    auto& val = field_stack_.back().first;
 1795|   137k|    switch (val.type.base_type) {
  ------------------
  |  Branch (1795:13): [True: 137k, 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|   137k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  ------------------
  |  |  112|    632|        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: 137k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 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.69k|  TD(UTYPE,    "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 1) /* begin scalar/int */ \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|  5.69k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|  5.69k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 5.69k, False: 131k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|  5.69k|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 5.69k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|  5.69k|          else { \
  |  |  |  |  |  |  |  | 1801|  5.69k|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|  5.69k|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  5.69k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  5.69k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  5.69k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 5.69k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  5.69k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|  5.69k|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|  5.69k|          } \
  |  |  |  |  |  |  |  | 1805|  5.69k|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   52|  5.69k|  TD(BOOL,     "bool",   uint8_t,  boolean,bool,    bool,   bool,    bool, Boolean, Bool, 2) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|  2.80k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|  2.80k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 2.80k, False: 134k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|  2.80k|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 2.80k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|  2.80k|          else { \
  |  |  |  |  |  |  |  | 1801|  2.80k|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|  2.80k|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  2.80k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  2.80k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  2.80k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 11, False: 2.78k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  2.80k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|  2.78k|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|  2.78k|          } \
  |  |  |  |  |  |  |  | 1805|  2.78k|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|  6.32k|  TD(CHAR,     "byte",   int8_t,   byte,   int8,    sbyte,  int8,    i8,   Byte, Int8, 3) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|  6.32k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|  6.32k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 6.32k, False: 130k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|  6.32k|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 6.32k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|  6.32k|          else { \
  |  |  |  |  |  |  |  | 1801|  6.32k|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|  6.32k|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  6.32k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  6.32k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  6.32k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 6.31k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  6.32k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|  6.31k|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|  6.31k|          } \
  |  |  |  |  |  |  |  | 1805|  6.31k|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   54|  6.31k|  TD(UCHAR,    "ubyte",  uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 4) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|  5.26k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|  5.26k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 5.26k, False: 131k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|  5.26k|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 5.26k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|  5.26k|          else { \
  |  |  |  |  |  |  |  | 1801|  5.26k|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|  5.26k|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  5.26k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  5.26k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  5.26k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 5.26k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  5.26k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|  5.26k|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|  5.26k|          } \
  |  |  |  |  |  |  |  | 1805|  5.26k|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   55|  5.26k|  TD(SHORT,    "short",  int16_t,  short,  int16,   short,  int16,   i16,  Short, Int16, 5) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|    670|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|    670|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 670, False: 136k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|    670|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 670]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|    670|          else { \
  |  |  |  |  |  |  |  | 1801|    670|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|    670|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    670|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    670|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    670|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 6, False: 664]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    670|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|    664|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|    664|          } \
  |  |  |  |  |  |  |  | 1805|    664|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   56|    666|  TD(USHORT,   "ushort", uint16_t, short,  uint16,  ushort, uint16,  u16,  UShort, UInt16, 6) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|    666|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|    666|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 666, False: 136k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|    666|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 666]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|    666|          else { \
  |  |  |  |  |  |  |  | 1801|    666|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|    666|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    666|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    666|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    666|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 5, False: 661]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    666|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|    661|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|    661|          } \
  |  |  |  |  |  |  |  | 1805|    661|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|    726|  TD(INT,      "int",    int32_t,  int,    int32,   int,    int32,   i32,  Int, Int32, 7) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|    726|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|    726|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 726, False: 136k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|    726|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 726]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|    726|          else { \
  |  |  |  |  |  |  |  | 1801|    726|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|    726|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    726|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    726|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    726|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 722]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    726|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|    722|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|    722|          } \
  |  |  |  |  |  |  |  | 1805|    722|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   58|  1.14k|  TD(UINT,     "uint",   uint32_t, int,    uint32,  uint,   uint32,  u32,  UInt, UInt32, 8) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|  1.14k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|  1.14k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 1.14k, False: 135k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 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: 24, False: 1.12k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  1.14k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|  1.12k|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|  1.12k|          } \
  |  |  |  |  |  |  |  | 1805|  1.12k|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   59|  5.49k|  TD(LONG,     "long",   int64_t,  long,   int64,   long,   int64,   i64,  Long, Int64, 9) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|  5.49k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|  5.49k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 5.49k, False: 131k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|  5.49k|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 5.49k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|  5.49k|          else { \
  |  |  |  |  |  |  |  | 1801|  5.49k|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|  5.49k|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  5.49k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  5.49k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  5.49k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 1, False: 5.49k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  5.49k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|  5.49k|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|  5.49k|          } \
  |  |  |  |  |  |  |  | 1805|  5.49k|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.49k|  TD(ULONG,    "ulong",  uint64_t, long,   uint64,  ulong,  uint64,  u64,  ULong, UInt64, 10) /* end int */ \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|    745|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|    745|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 745, False: 136k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|    745|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 745]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|    745|          else { \
  |  |  |  |  |  |  |  | 1801|    745|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|    745|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    745|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    745|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    745|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 741]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    745|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|    741|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|    741|          } \
  |  |  |  |  |  |  |  | 1805|    741|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    927|  TD(FLOAT,    "float",  float,    float,  float32, float,  float32, f32,  Float, Float32, 11) /* begin float */ \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|    927|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|    927|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 927, False: 136k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|    927|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 927]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|    927|          else { \
  |  |  |  |  |  |  |  | 1801|    927|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|    927|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    927|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    927|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    927|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 923]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    927|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|    923|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|    923|          } \
  |  |  |  |  |  |  |  | 1805|    923|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   62|    923|  TD(DOUBLE,   "double", double,   double, float64, double, float64, f64,  Double, Double, 12) /* end float/scalar */
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|    641|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|    641|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 641, False: 136k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|    641|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 641]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|    641|          else { \
  |  |  |  |  |  |  |  | 1801|    641|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|    641|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    641|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    641|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    641|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 9, False: 632]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    641|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|    632|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|    632|          } \
  |  |  |  |  |  |  |  | 1805|    632|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  113|    632|        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: 136k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 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: 137k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 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: 137k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 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|   105k|  TD(STRUCT,   "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 15) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|   105k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|   105k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 105k, False: 31.4k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|   105k|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 22.4k, False: 83.0k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|   105k|          else { \
  |  |  |  |  |  |  |  | 1801|  83.0k|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|  83.0k|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  83.0k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  83.0k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  83.0k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 83.0k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  83.0k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|  83.0k|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|  83.0k|          } \
  |  |  |  |  |  |  |  | 1805|   105k|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   68|   105k|  TD(UNION,    "",       Offset<void>,   int, int, int,          int, unused, Int, Offset<UOffset>, 16)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1806|     72|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1798|     72|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1798:9): [True: 72, False: 136k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1799|     72|          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1799:15): [True: 0, False: 72]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1800|     72|          else { \
  |  |  |  |  |  |  |  | 1801|     72|             CTYPE elem; \
  |  |  |  |  |  |  |  | 1802|     72|             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|     72|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|     72|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|     72|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 0, False: 72]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|     72|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1803|     72|             builder_.PushElement(elem); \
  |  |  |  |  |  |  |  | 1804|     72|          } \
  |  |  |  |  |  |  |  | 1805|     72|          break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  114|     72|        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: 137k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 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|   137k|      #undef FLATBUFFERS_TD
 1808|       |      // clang-format on
 1809|   137k|    }
 1810|   136k|    field_stack_.pop_back();
 1811|   136k|  }
 1812|       |
 1813|  40.3k|  builder_.ClearOffsets();
 1814|  40.3k|  if (vector_type.base_type == BASE_TYPE_VECTOR64) {
  ------------------
  |  Branch (1814:7): [True: 6.41k, False: 33.9k]
  ------------------
 1815|  6.41k|    *ovalue = builder_.EndVector<uoffset64_t>(count);
 1816|  33.9k|  } else {
 1817|  33.9k|    *ovalue = builder_.EndVector(count);
 1818|  33.9k|  }
 1819|       |
 1820|  40.3k|  if (type.base_type == BASE_TYPE_STRUCT && type.struct_def->has_key) {
  ------------------
  |  Branch (1820:7): [True: 28.4k, False: 11.9k]
  |  Branch (1820:45): [True: 2.29k, False: 26.1k]
  ------------------
 1821|       |    // We should sort this vector. Find the key first.
 1822|  2.29k|    const FieldDef* key = nullptr;
 1823|  2.29k|    for (auto it = type.struct_def->fields.vec.begin();
 1824|  4.13k|         it != type.struct_def->fields.vec.end(); ++it) {
  ------------------
  |  Branch (1824:10): [True: 4.13k, False: 0]
  ------------------
 1825|  4.13k|      if ((*it)->key) {
  ------------------
  |  Branch (1825:11): [True: 2.29k, False: 1.84k]
  ------------------
 1826|  2.29k|        key = (*it);
 1827|  2.29k|        break;
 1828|  2.29k|      }
 1829|  4.13k|    }
 1830|  2.29k|    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.29k|    if (type.struct_def->fixed) {
  ------------------
  |  Branch (1840:9): [True: 52, False: 2.24k]
  ------------------
 1841|     52|      const voffset_t offset = key->value.offset;
 1842|     52|      const size_t struct_size = type.struct_def->bytesize;
 1843|     52|      auto v =
 1844|     52|          reinterpret_cast<VectorOfAny*>(builder_.GetCurrentBufferPointer());
 1845|     52|      SimpleQsort<uint8_t>(
 1846|     52|          v->Data(), v->Data() + v->size() * type.struct_def->bytesize,
 1847|     52|          type.struct_def->bytesize,
 1848|     52|          [offset, key](const uint8_t* a, const uint8_t* b) -> bool {
 1849|     52|            return CompareSerializedScalars(a + offset, b + offset, *key);
 1850|     52|          },
 1851|     52|          [struct_size](uint8_t* a, uint8_t* b) {
 1852|       |            // FIXME: faster?
 1853|     52|            for (size_t i = 0; i < struct_size; i++) {
 1854|     52|              std::swap(a[i], b[i]);
 1855|     52|            }
 1856|     52|          });
 1857|  2.24k|    } else {
 1858|  2.24k|      auto v = reinterpret_cast<Vector<Offset<Table>>*>(
 1859|  2.24k|          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.24k|      if (key->value.type.base_type == BASE_TYPE_STRING) {
  ------------------
  |  Branch (1863:11): [True: 1.20k, False: 1.03k]
  ------------------
 1864|  1.20k|        SimpleQsort<Offset<Table>>(
 1865|  1.20k|            v->data(), v->data() + v->size(), 1,
 1866|  1.20k|            [key](const Offset<Table>* _a, const Offset<Table>* _b) -> bool {
 1867|  1.20k|              return CompareTablesByStringKey(_a, _b, *key);
 1868|  1.20k|            },
 1869|  1.20k|            SwapSerializedTables);
 1870|  1.20k|      } else {
 1871|  1.03k|        SimpleQsort<Offset<Table>>(
 1872|  1.03k|            v->data(), v->data() + v->size(), 1,
 1873|  1.03k|            [key](const Offset<Table>* _a, const Offset<Table>* _b) -> bool {
 1874|  1.03k|              return CompareTablesByScalarKey(_a, _b, *key);
 1875|  1.03k|            },
 1876|  1.03k|            SwapSerializedTables);
 1877|  1.03k|      }
 1878|  2.24k|    }
 1879|  2.29k|  }
 1880|  40.3k|  return NoError();
 1881|  40.3k|}
_ZN11flatbuffers6Parser10ParseArrayERNS_5ValueE:
 1883|  5.96k|CheckedError Parser::ParseArray(Value& array) {
 1884|  5.96k|  std::vector<Value> stack;
 1885|  5.96k|  FlatBufferBuilder builder;
 1886|  5.96k|  const auto& type = array.type.VectorType();
 1887|  5.96k|  auto length = array.type.fixed_length;
 1888|  5.96k|  size_t count = 0;
 1889|  5.96k|  auto err = ParseVectorDelimiters(count, [&](size_t&) -> CheckedError {
 1890|  5.96k|    stack.emplace_back(Value());
 1891|  5.96k|    auto& val = stack.back();
 1892|  5.96k|    val.type = type;
 1893|  5.96k|    if (IsStruct(type)) {
 1894|  5.96k|      ECHECK(ParseTable(*val.type.struct_def, &val.constant, nullptr));
 1895|  5.96k|    } else {
 1896|  5.96k|      ECHECK(ParseSingleValue(nullptr, val, false));
 1897|  5.96k|    }
 1898|  5.96k|    return NoError();
 1899|  5.96k|  });
 1900|  5.96k|  ECHECK(err);
  ------------------
  |  |   56|  5.96k|  {                            \
  |  |   57|  5.96k|    auto ce = (call);          \
  |  |   58|  5.96k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 184, False: 5.77k]
  |  |  ------------------
  |  |   59|  5.96k|  }
  ------------------
 1901|  5.77k|  if (length != count) return Error("Fixed-length array size is incorrect.");
  ------------------
  |  Branch (1901:7): [True: 22, False: 5.75k]
  ------------------
 1902|       |
 1903|  13.5k|  for (auto it = stack.rbegin(); it != stack.rend(); ++it) {
  ------------------
  |  Branch (1903:34): [True: 7.82k, False: 5.71k]
  ------------------
 1904|  7.82k|    auto& val = *it;
 1905|       |    // clang-format off
 1906|  7.82k|    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|  7.82k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  ------------------
  |  |  112|    455|        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: 7.82k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 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: 7.82k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 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.15k|  TD(BOOL,     "bool",   uint8_t,  boolean,bool,    bool,   bool,    bool, Boolean, Bool, 2) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|  1.15k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|  1.15k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 1.15k, False: 6.66k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|  1.15k|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 1.15k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|  1.15k|          } else { \
  |  |  |  |  |  |  |  | 1912|  1.15k|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|  1.15k|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  1.15k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  1.15k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  1.15k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 1.15k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  1.15k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|  1.15k|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|  1.15k|          } \
  |  |  |  |  |  |  |  | 1916|  1.15k|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|  1.19k|  TD(CHAR,     "byte",   int8_t,   byte,   int8,    sbyte,  int8,    i8,   Byte, Int8, 3) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|  1.19k|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|  1.19k|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 1.19k, False: 6.62k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|  1.19k|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 1.19k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|  1.19k|          } else { \
  |  |  |  |  |  |  |  | 1912|  1.19k|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|  1.19k|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|  1.19k|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|  1.19k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|  1.19k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 1.18k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|  1.19k|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|  1.18k|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|  1.18k|          } \
  |  |  |  |  |  |  |  | 1916|  1.18k|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   54|  1.18k|  TD(UCHAR,    "ubyte",  uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 4) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|    922|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|    922|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 922, False: 6.89k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|    922|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 922]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|    922|          } else { \
  |  |  |  |  |  |  |  | 1912|    922|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|    922|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    922|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    922|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    922|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 919]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    922|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|    919|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|    919|          } \
  |  |  |  |  |  |  |  | 1916|    919|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   55|    919|  TD(SHORT,    "short",  int16_t,  short,  int16,   short,  int16,   i16,  Short, Int16, 5) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|    624|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|    624|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 624, False: 7.19k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|    624|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 624]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|    624|          } else { \
  |  |  |  |  |  |  |  | 1912|    624|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|    624|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    624|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    624|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    624|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 621]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    624|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|    621|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|    621|          } \
  |  |  |  |  |  |  |  | 1916|    621|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   56|    621|  TD(USHORT,   "ushort", uint16_t, short,  uint16,  ushort, uint16,  u16,  UShort, UInt16, 6) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|    565|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|    565|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 565, False: 7.25k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|    565|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 565]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|    565|          } else { \
  |  |  |  |  |  |  |  | 1912|    565|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|    565|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    565|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    565|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    565|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 5, False: 560]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    565|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|    560|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|    560|          } \
  |  |  |  |  |  |  |  | 1916|    560|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|    901|  TD(INT,      "int",    int32_t,  int,    int32,   int,    int32,   i32,  Int, Int32, 7) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|    901|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|    901|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 901, False: 6.91k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|    901|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 901]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|    901|          } else { \
  |  |  |  |  |  |  |  | 1912|    901|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|    901|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    901|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    901|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    901|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 2, False: 899]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    901|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|    899|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|    899|          } \
  |  |  |  |  |  |  |  | 1916|    899|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   58|    899|  TD(UINT,     "uint",   uint32_t, int,    uint32,  uint,   uint32,  u32,  UInt, UInt32, 8) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|    395|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|    395|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 395, False: 7.42k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|    395|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 395]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|    395|          } else { \
  |  |  |  |  |  |  |  | 1912|    395|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|    395|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    395|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    395|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    395|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 5, False: 390]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    395|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|    390|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|    390|          } \
  |  |  |  |  |  |  |  | 1916|    390|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   59|    610|  TD(LONG,     "long",   int64_t,  long,   int64,   long,   int64,   i64,  Long, Int64, 9) \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|    610|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|    610|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 610, False: 7.21k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|    610|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 610]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|    610|          } else { \
  |  |  |  |  |  |  |  | 1912|    610|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|    610|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    610|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    610|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    610|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 607]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    610|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|    607|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|    607|          } \
  |  |  |  |  |  |  |  | 1916|    607|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    607|  TD(ULONG,    "ulong",  uint64_t, long,   uint64,  ulong,  uint64,  u64,  ULong, UInt64, 10) /* end int */ \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|    601|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|    601|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 601, False: 7.21k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|    601|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 601]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|    601|          } else { \
  |  |  |  |  |  |  |  | 1912|    601|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|    601|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    601|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    601|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    601|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 597]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    601|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|    597|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|    597|          } \
  |  |  |  |  |  |  |  | 1916|    597|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    597|  TD(FLOAT,    "float",  float,    float,  float32, float,  float32, f32,  Float, Float32, 11) /* begin float */ \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|    393|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|    393|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 393, False: 7.42k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|    393|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 393]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|    393|          } else { \
  |  |  |  |  |  |  |  | 1912|    393|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|    393|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    393|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    393|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    393|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 3, False: 390]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    393|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|    390|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|    390|          } \
  |  |  |  |  |  |  |  | 1916|    390|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   62|    460|  TD(DOUBLE,   "double", double,   double, float64, double, float64, f64,  Double, Double, 12) /* end float/scalar */
  |  |  |  |  ------------------
  |  |  |  |  |  | 1917|    460|        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1908|    460|        case BASE_TYPE_ ## ENUM: \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1908:9): [True: 460, False: 7.36k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1909|    460|          if (IsStruct(val.type)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1909:15): [True: 0, False: 460]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1910|      0|            SerializeStruct(builder, *val.type.struct_def, val); \
  |  |  |  |  |  |  |  | 1911|    460|          } else { \
  |  |  |  |  |  |  |  | 1912|    460|            CTYPE elem; \
  |  |  |  |  |  |  |  | 1913|    460|            ECHECK(atot(val.constant.c_str(), *this, &elem)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   56|    460|  {                            \
  |  |  |  |  |  |  |  |  |  |   57|    460|    auto ce = (call);          \
  |  |  |  |  |  |  |  |  |  |   58|    460|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 5, False: 455]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|    460|  }
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1914|    455|            builder.PushElement(elem); \
  |  |  |  |  |  |  |  | 1915|    455|          } \
  |  |  |  |  |  |  |  | 1916|    455|        break;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  113|    455|        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: 7.82k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 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: 7.82k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 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: 7.82k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 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: 7.82k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 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: 7.82k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 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: 7.82k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 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: 7.82k]
  ------------------
 1920|  7.82k|    }
 1921|       |    // clang-format on
 1922|  7.82k|  }
 1923|       |
 1924|  5.71k|  array.constant.assign(
 1925|  5.71k|      reinterpret_cast<const char*>(builder.GetCurrentBufferPointer()),
 1926|  5.71k|      InlineSize(array.type));
 1927|  5.71k|  return NoError();
 1928|  5.75k|}
_ZN11flatbuffers6Parser13ParseMetaDataEPNS_11SymbolTableINS_5ValueEEE:
 1977|   701k|CheckedError Parser::ParseMetaData(SymbolTable<Value>* attributes) {
 1978|   701k|  if (Is('(')) {
  ------------------
  |  Branch (1978:7): [True: 13.7k, False: 687k]
  ------------------
 1979|  13.7k|    NEXT();
  ------------------
  |  |   63|  13.7k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  13.7k|  {                            \
  |  |  |  |   57|  13.7k|    auto ce = (call);          \
  |  |  |  |   58|  13.7k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 3, False: 13.7k]
  |  |  |  |  ------------------
  |  |  |  |   59|  13.7k|  }
  |  |  ------------------
  ------------------
 1980|  17.7k|    for (;;) {
 1981|  17.7k|      auto name = attribute_;
 1982|  17.7k|      if (false == (Is(kTokenIdentifier) || Is(kTokenStringConstant)))
  ------------------
  |  Branch (1982:11): [True: 59, False: 17.6k]
  |  Branch (1982:21): [True: 16.5k, False: 1.18k]
  |  Branch (1982:45): [True: 1.12k, False: 59]
  ------------------
 1983|     59|        return Error("attribute name must be either identifier or string: " +
 1984|     59|                     name);
 1985|  17.6k|      if (known_attributes_.find(name) == known_attributes_.end())
  ------------------
  |  Branch (1985:11): [True: 98, False: 17.5k]
  ------------------
 1986|     98|        return Error("user define attributes must be declared before use: " +
 1987|     98|                     name);
 1988|  17.5k|      NEXT();
  ------------------
  |  |   63|  17.5k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  17.5k|  {                            \
  |  |  |  |   57|  17.5k|    auto ce = (call);          \
  |  |  |  |   58|  17.5k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 8, False: 17.5k]
  |  |  |  |  ------------------
  |  |  |  |   59|  17.5k|  }
  |  |  ------------------
  ------------------
 1989|  17.5k|      auto e = new Value();
 1990|  17.5k|      if (attributes->Add(name, e)) Warning("attribute already found: " + name);
  ------------------
  |  Branch (1990:11): [True: 3.67k, False: 13.8k]
  ------------------
 1991|  17.5k|      if (Is(':')) {
  ------------------
  |  Branch (1991:11): [True: 6.60k, False: 10.9k]
  ------------------
 1992|  6.60k|        NEXT();
  ------------------
  |  |   63|  6.60k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  6.60k|  {                            \
  |  |  |  |   57|  6.60k|    auto ce = (call);          \
  |  |  |  |   58|  6.60k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 4, False: 6.59k]
  |  |  |  |  ------------------
  |  |  |  |   59|  6.60k|  }
  |  |  ------------------
  ------------------
 1993|  6.59k|        ECHECK(ParseSingleValue(&name, *e, true));
  ------------------
  |  |   56|  6.59k|  {                            \
  |  |   57|  6.59k|    auto ce = (call);          \
  |  |   58|  6.59k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 76, False: 6.52k]
  |  |  ------------------
  |  |   59|  6.59k|  }
  ------------------
 1994|  6.52k|      }
 1995|  17.4k|      if (Is(')')) {
  ------------------
  |  Branch (1995:11): [True: 13.3k, False: 4.14k]
  ------------------
 1996|  13.3k|        NEXT();
  ------------------
  |  |   63|  13.3k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  13.3k|  {                            \
  |  |  |  |   57|  13.3k|    auto ce = (call);          \
  |  |  |  |   58|  13.3k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 13.3k]
  |  |  |  |  ------------------
  |  |  |  |   59|  13.3k|  }
  |  |  ------------------
  ------------------
 1997|  13.3k|        break;
 1998|  13.3k|      }
 1999|  4.14k|      EXPECT(',');
  ------------------
  |  |   64|  4.14k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  4.14k|  {                            \
  |  |  |  |   57|  4.14k|    auto ce = (call);          \
  |  |  |  |   58|  4.14k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 209, False: 3.93k]
  |  |  |  |  ------------------
  |  |  |  |   59|  4.14k|  }
  |  |  ------------------
  ------------------
 2000|  3.93k|    }
 2001|  13.7k|  }
 2002|   700k|  return NoError();
 2003|   701k|}
_ZN11flatbuffers6Parser19ParseEnumFromStringERKNS_4TypeEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
 2006|  1.26k|                                         std::string* result) {
 2007|  1.26k|  const auto base_type =
 2008|  1.26k|      type.enum_def ? type.enum_def->underlying_type.base_type : type.base_type;
  ------------------
  |  Branch (2008:7): [True: 1.13k, False: 128]
  ------------------
 2009|  1.26k|  if (!IsInteger(base_type)) return Error("not a valid value for this field");
  ------------------
  |  Branch (2009:7): [True: 0, False: 1.26k]
  ------------------
 2010|  1.26k|  uint64_t u64 = 0;
 2011|  4.93k|  for (size_t pos = 0; pos != std::string::npos;) {
  ------------------
  |  Branch (2011:24): [True: 3.92k, False: 1.00k]
  ------------------
 2012|  3.92k|    const auto delim = attribute_.find_first_of(' ', pos);
 2013|  3.92k|    const auto last = (std::string::npos == delim);
 2014|  3.92k|    auto word = attribute_.substr(pos, !last ? delim - pos : std::string::npos);
  ------------------
  |  Branch (2014:40): [True: 2.69k, False: 1.23k]
  ------------------
 2015|  3.92k|    pos = !last ? delim + 1 : std::string::npos;
  ------------------
  |  Branch (2015:11): [True: 2.69k, False: 1.23k]
  ------------------
 2016|  3.92k|    const EnumVal* ev = nullptr;
 2017|  3.92k|    if (type.enum_def) {
  ------------------
  |  Branch (2017:9): [True: 3.58k, False: 340]
  ------------------
 2018|  3.58k|      ev = type.enum_def->Lookup(word);
 2019|  3.58k|    } else {
 2020|    340|      auto dot = word.find_first_of('.');
 2021|    340|      if (std::string::npos == dot)
  ------------------
  |  Branch (2021:11): [True: 34, False: 306]
  ------------------
 2022|     34|        return Error("enum values need to be qualified by an enum type");
 2023|    306|      auto enum_def_str = word.substr(0, dot);
 2024|    306|      const auto enum_def = LookupEnum(enum_def_str);
 2025|    306|      if (!enum_def) return Error("unknown enum: " + enum_def_str);
  ------------------
  |  Branch (2025:11): [True: 33, False: 273]
  ------------------
 2026|    273|      auto enum_val_str = word.substr(dot + 1);
 2027|    273|      ev = enum_def->Lookup(enum_val_str);
 2028|    273|    }
 2029|  3.86k|    if (!ev) return Error("unknown enum value: " + word);
  ------------------
  |  Branch (2029:9): [True: 192, False: 3.66k]
  ------------------
 2030|  3.66k|    u64 |= ev->GetAsUInt64();
 2031|  3.66k|  }
 2032|  1.00k|  *result = IsUnsigned(base_type) ? NumToString(u64)
  ------------------
  |  Branch (2032:13): [True: 740, False: 265]
  ------------------
 2033|  1.00k|                                  : NumToString(static_cast<int64_t>(u64));
 2034|  1.00k|  return NoError();
 2035|  1.26k|}
_ZN11flatbuffers6Parser9ParseHashERNS_5ValueEPNS_8FieldDefE:
 2037|  3.13k|CheckedError Parser::ParseHash(Value& e, FieldDef* field) {
 2038|  3.13k|  FLATBUFFERS_ASSERT(field);
 2039|  3.13k|  Value* hash_name = field->attributes.Lookup("hash");
 2040|  3.13k|  switch (e.type.base_type) {
 2041|      0|    case BASE_TYPE_SHORT: {
  ------------------
  |  Branch (2041:5): [True: 0, False: 3.13k]
  ------------------
 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.13k]
  ------------------
 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|    593|    case BASE_TYPE_INT: {
  ------------------
  |  Branch (2053:5): [True: 593, False: 2.54k]
  ------------------
 2054|    593|      auto hash = FindHashFunction32(hash_name->constant.c_str());
 2055|    593|      int32_t hashed_value = static_cast<int32_t>(hash(attribute_.c_str()));
 2056|    593|      e.constant = NumToString(hashed_value);
 2057|    593|      break;
 2058|      0|    }
 2059|    804|    case BASE_TYPE_UINT: {
  ------------------
  |  Branch (2059:5): [True: 804, False: 2.33k]
  ------------------
 2060|    804|      auto hash = FindHashFunction32(hash_name->constant.c_str());
 2061|    804|      uint32_t hashed_value = hash(attribute_.c_str());
 2062|    804|      e.constant = NumToString(hashed_value);
 2063|    804|      break;
 2064|      0|    }
 2065|  1.18k|    case BASE_TYPE_LONG: {
  ------------------
  |  Branch (2065:5): [True: 1.18k, False: 1.94k]
  ------------------
 2066|  1.18k|      auto hash = FindHashFunction64(hash_name->constant.c_str());
 2067|  1.18k|      int64_t hashed_value = static_cast<int64_t>(hash(attribute_.c_str()));
 2068|  1.18k|      e.constant = NumToString(hashed_value);
 2069|  1.18k|      break;
 2070|      0|    }
 2071|    551|    case BASE_TYPE_ULONG: {
  ------------------
  |  Branch (2071:5): [True: 551, False: 2.58k]
  ------------------
 2072|    551|      auto hash = FindHashFunction64(hash_name->constant.c_str());
 2073|    551|      uint64_t hashed_value = hash(attribute_.c_str());
 2074|    551|      e.constant = NumToString(hashed_value);
 2075|    551|      break;
 2076|      0|    }
 2077|      0|    default:
  ------------------
  |  Branch (2077:5): [True: 0, False: 3.13k]
  ------------------
 2078|      0|      FLATBUFFERS_ASSERT(0);
 2079|  3.13k|  }
 2080|  3.13k|  NEXT();
  ------------------
  |  |   63|  3.13k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  3.13k|  {                            \
  |  |  |  |   57|  3.13k|    auto ce = (call);          \
  |  |  |  |   58|  3.13k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 10, False: 3.12k]
  |  |  |  |  ------------------
  |  |  |  |   59|  3.13k|  }
  |  |  ------------------
  ------------------
 2081|  3.12k|  return NoError();
 2082|  3.13k|}
_ZN11flatbuffers6Parser10TokenErrorEv:
 2084|    232|CheckedError Parser::TokenError() {
 2085|    232|  return Error("cannot parse value starting with: " + TokenToStringId(token_));
 2086|    232|}
_ZN11flatbuffers6Parser13ParseFunctionEPKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERNS_5ValueE:
 2088|  3.57k|CheckedError Parser::ParseFunction(const std::string* name, Value& e) {
 2089|  3.57k|  ParseDepthGuard depth_guard(this);
 2090|  3.57k|  ECHECK(depth_guard.Check());
  ------------------
  |  |   56|  3.57k|  {                            \
  |  |   57|  3.57k|    auto ce = (call);          \
  |  |   58|  3.57k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1, False: 3.57k]
  |  |  ------------------
  |  |   59|  3.57k|  }
  ------------------
 2091|       |
 2092|       |  // Copy name, attribute will be changed on NEXT().
 2093|  3.57k|  const auto functionname = attribute_;
 2094|  3.57k|  if (!IsFloat(e.type.base_type)) {
  ------------------
  |  Branch (2094:7): [True: 18, False: 3.55k]
  ------------------
 2095|     18|    return Error(functionname + ": type of argument mismatch, expecting: " +
 2096|     18|                 TypeName(BASE_TYPE_DOUBLE) +
 2097|     18|                 ", found: " + TypeName(e.type.base_type) +
 2098|     18|                 ", name: " + (name ? *name : "") + ", value: " + e.constant);
  ------------------
  |  Branch (2098:32): [True: 17, False: 1]
  ------------------
 2099|     18|  }
 2100|  3.55k|  NEXT();
  ------------------
  |  |   63|  3.55k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  3.55k|  {                            \
  |  |  |  |   57|  3.55k|    auto ce = (call);          \
  |  |  |  |   58|  3.55k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 0, False: 3.55k]
  |  |  |  |  ------------------
  |  |  |  |   59|  3.55k|  }
  |  |  ------------------
  ------------------
 2101|  3.55k|  EXPECT('(');
  ------------------
  |  |   64|  3.55k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  3.55k|  {                            \
  |  |  |  |   57|  3.55k|    auto ce = (call);          \
  |  |  |  |   58|  3.55k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 5, False: 3.55k]
  |  |  |  |  ------------------
  |  |  |  |   59|  3.55k|  }
  |  |  ------------------
  ------------------
 2102|  3.55k|  ECHECK(ParseSingleValue(name, e, false));
  ------------------
  |  |   56|  3.55k|  {                            \
  |  |   57|  3.55k|    auto ce = (call);          \
  |  |   58|  3.55k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 208, False: 3.34k]
  |  |  ------------------
  |  |   59|  3.55k|  }
  ------------------
 2103|  3.34k|  EXPECT(')');
  ------------------
  |  |   64|  3.34k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  3.34k|  {                            \
  |  |  |  |   57|  3.34k|    auto ce = (call);          \
  |  |  |  |   58|  3.34k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 26, False: 3.31k]
  |  |  |  |  ------------------
  |  |  |  |   59|  3.34k|  }
  |  |  ------------------
  ------------------
 2104|       |  // calculate with double precision
 2105|  3.31k|  double x, y = 0.0;
 2106|  3.31k|  ECHECK(atot(e.constant.c_str(), *this, &x));
  ------------------
  |  |   56|  3.31k|  {                            \
  |  |   57|  3.31k|    auto ce = (call);          \
  |  |   58|  3.31k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 4, False: 3.31k]
  |  |  ------------------
  |  |   59|  3.31k|  }
  ------------------
 2107|       |  // clang-format off
 2108|  3.31k|  auto func_match = false;
 2109|  3.31k|  #define FLATBUFFERS_FN_DOUBLE(name, op) \
 2110|  3.31k|    if (!func_match && functionname == name) { y = op; func_match = true; }
 2111|  3.31k|  FLATBUFFERS_FN_DOUBLE("deg", x / kPi * 180);
  ------------------
  |  | 2110|  3.31k|    if (!func_match && functionname == name) { y = op; func_match = true; }
  |  |  ------------------
  |  |  |  Branch (2110:9): [True: 3.31k, False: 0]
  |  |  |  Branch (2110:24): [True: 431, False: 2.88k]
  |  |  ------------------
  ------------------
 2112|  3.31k|  FLATBUFFERS_FN_DOUBLE("rad", x * kPi / 180);
  ------------------
  |  | 2110|  3.31k|    if (!func_match && functionname == name) { y = op; func_match = true; }
  |  |  ------------------
  |  |  |  Branch (2110:9): [True: 2.88k, False: 431]
  |  |  |  Branch (2110:24): [True: 194, False: 2.68k]
  |  |  ------------------
  ------------------
 2113|  3.31k|  FLATBUFFERS_FN_DOUBLE("sin", sin(x));
  ------------------
  |  | 2110|  3.31k|    if (!func_match && functionname == name) { y = op; func_match = true; }
  |  |  ------------------
  |  |  |  Branch (2110:9): [True: 2.68k, False: 625]
  |  |  |  Branch (2110:24): [True: 143, False: 2.54k]
  |  |  ------------------
  ------------------
 2114|  3.31k|  FLATBUFFERS_FN_DOUBLE("cos", cos(x));
  ------------------
  |  | 2110|  3.31k|    if (!func_match && functionname == name) { y = op; func_match = true; }
  |  |  ------------------
  |  |  |  Branch (2110:9): [True: 2.54k, False: 768]
  |  |  |  Branch (2110:24): [True: 353, False: 2.19k]
  |  |  ------------------
  ------------------
 2115|  3.31k|  FLATBUFFERS_FN_DOUBLE("tan", tan(x));
  ------------------
  |  | 2110|  3.31k|    if (!func_match && functionname == name) { y = op; func_match = true; }
  |  |  ------------------
  |  |  |  Branch (2110:9): [True: 2.19k, False: 1.12k]
  |  |  |  Branch (2110:24): [True: 59, False: 2.13k]
  |  |  ------------------
  ------------------
 2116|  3.31k|  FLATBUFFERS_FN_DOUBLE("asin", asin(x));
  ------------------
  |  | 2110|  3.31k|    if (!func_match && functionname == name) { y = op; func_match = true; }
  |  |  ------------------
  |  |  |  Branch (2110:9): [True: 2.13k, False: 1.18k]
  |  |  |  Branch (2110:24): [True: 1.07k, False: 1.06k]
  |  |  ------------------
  ------------------
 2117|  3.31k|  FLATBUFFERS_FN_DOUBLE("acos", acos(x));
  ------------------
  |  | 2110|  3.31k|    if (!func_match && functionname == name) { y = op; func_match = true; }
  |  |  ------------------
  |  |  |  Branch (2110:9): [True: 1.06k, False: 2.25k]
  |  |  |  Branch (2110:24): [True: 929, False: 133]
  |  |  ------------------
  ------------------
 2118|  3.31k|  FLATBUFFERS_FN_DOUBLE("atan", atan(x));
  ------------------
  |  | 2110|  3.31k|    if (!func_match && functionname == name) { y = op; func_match = true; }
  |  |  ------------------
  |  |  |  Branch (2110:9): [True: 133, False: 3.17k]
  |  |  |  Branch (2110:24): [True: 100, False: 33]
  |  |  ------------------
  ------------------
 2119|       |  // TODO(wvo): add more useful conversion functions here.
 2120|  3.31k|  #undef FLATBUFFERS_FN_DOUBLE
 2121|       |  // clang-format on
 2122|  3.31k|  if (true != func_match) {
  ------------------
  |  Branch (2122:7): [True: 33, False: 3.27k]
  ------------------
 2123|     33|    return Error(std::string("Unknown conversion function: ") + functionname +
 2124|     33|                 ", field name: " + (name ? *name : "") +
  ------------------
  |  Branch (2124:38): [True: 32, False: 1]
  ------------------
 2125|     33|                 ", value: " + e.constant);
 2126|     33|  }
 2127|  3.27k|  e.constant = NumToString(y);
 2128|  3.27k|  return NoError();
 2129|  3.31k|}
_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.58k, False: 176k]
  ------------------
 2139|  6.58k|    if (e.type.base_type == BASE_TYPE_NONE) {
  ------------------
  |  Branch (2139:9): [True: 6.58k, False: 5]
  ------------------
 2140|  6.58k|      e.type.base_type = req;
 2141|  6.58k|    } else {
 2142|      5|      return Error(std::string("type mismatch: expecting: ") +
 2143|      5|                   TypeName(e.type.base_type) + ", found: " + TypeName(req) +
 2144|      5|                   ", name: " + (name ? *name : "") + ", value: " + e.constant);
  ------------------
  |  Branch (2144:34): [True: 5, False: 0]
  ------------------
 2145|      5|    }
 2146|  6.58k|  }
 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: 180k, False: 2.16k]
  |  Branch (2149:42): [True: 39.6k, False: 141k]
  ------------------
 2150|  39.6k|    const auto& s = e.constant;
 2151|  39.6k|    const auto k = s.find_first_of("0123456789.");
 2152|  39.6k|    if ((std::string::npos != k) && (s.length() > (k + 1)) &&
  ------------------
  |  Branch (2152:9): [True: 36.6k, False: 3.03k]
  |  Branch (2152:37): [True: 6.22k, False: 30.4k]
  ------------------
 2153|  6.22k|        (s[k] == '0' && is_alpha_char(s[k + 1], 'X')) &&
  ------------------
  |  Branch (2153:10): [True: 3.90k, False: 2.32k]
  |  Branch (2153:25): [True: 809, False: 3.09k]
  ------------------
 2154|    809|        (std::string::npos == s.find_first_of("pP", k + 2))) {
  ------------------
  |  Branch (2154:9): [True: 9, False: 800]
  ------------------
 2155|      9|      return Error(
 2156|      9|          "invalid number, the exponent suffix of hexadecimal "
 2157|      9|          "floating-point literals is mandatory: \"" +
 2158|      9|          s + "\"");
 2159|      9|    }
 2160|  39.6k|  }
 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: 64, False: 183k]
  |  |  |  |  ------------------
  |  |  |  |   59|   183k|  }
  |  |  ------------------
  ------------------
 2162|   183k|  return NoError();
 2163|   183k|}
_ZN11flatbuffers6Parser16ParseSingleValueEPKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERNS_5ValueEb:
 2166|   191k|                                      bool check_now) {
 2167|   191k|  if (token_ == '+' || token_ == '-') {
  ------------------
  |  Branch (2167:7): [True: 604, False: 190k]
  |  Branch (2167:24): [True: 1.16k, False: 189k]
  ------------------
 2168|  1.76k|    const char sign = static_cast<char>(token_);
 2169|       |    // Get an indentifier: NAN, INF, or function name like cos/sin/deg.
 2170|  1.76k|    NEXT();
  ------------------
  |  |   63|  1.76k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  1.76k|  {                            \
  |  |  |  |   57|  1.76k|    auto ce = (call);          \
  |  |  |  |   58|  1.76k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 0, False: 1.76k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.76k|  }
  |  |  ------------------
  ------------------
 2171|  1.76k|    if (token_ != kTokenIdentifier) return Error("constant name expected");
  ------------------
  |  Branch (2171:9): [True: 0, False: 1.76k]
  ------------------
 2172|  1.76k|    attribute_.insert(size_t(0), size_t(1), sign);
 2173|  1.76k|  }
 2174|       |
 2175|   191k|  const auto in_type = e.type.base_type;
 2176|   191k|  const auto is_tok_ident = (token_ == kTokenIdentifier);
 2177|   191k|  const auto is_tok_string = (token_ == kTokenStringConstant);
 2178|       |
 2179|       |  // First see if this could be a conversion function.
 2180|   191k|  if (is_tok_ident && *cursor_ == '(') {
  ------------------
  |  Branch (2180:7): [True: 13.9k, False: 177k]
  |  Branch (2180:23): [True: 3.57k, False: 10.3k]
  ------------------
 2181|  3.57k|    return ParseFunction(name, e);
 2182|  3.57k|  }
 2183|       |
 2184|       |  // clang-format off
 2185|   187k|  auto match = false;
 2186|       |
 2187|   187k|  #define IF_ECHECK_(force, dtoken, check, req)    \
 2188|   187k|    if (!match && ((dtoken) == token_) && ((check) || flatbuffers::IsConstTrue(force))) \
 2189|   187k|      ECHECK(TryTypedValue(name, dtoken, check, e, req, &match))
 2190|   187k|  #define TRY_ECHECK(dtoken, check, req) IF_ECHECK_(false, dtoken, check, req)
 2191|   187k|  #define FORCE_ECHECK(dtoken, check, req) IF_ECHECK_(true, dtoken, check, req)
 2192|       |  // clang-format on
 2193|       |
 2194|   187k|  if (is_tok_ident || is_tok_string) {
  ------------------
  |  Branch (2194:7): [True: 10.3k, False: 177k]
  |  Branch (2194:23): [True: 11.0k, False: 166k]
  ------------------
 2195|  21.4k|    const auto kTokenStringOrIdent = token_;
 2196|       |    // The string type is a most probable type, check it first.
 2197|  21.4k|    TRY_ECHECK(kTokenStringConstant, in_type == BASE_TYPE_STRING,
  ------------------
  |  | 2190|  21.4k|  #define TRY_ECHECK(dtoken, check, req) IF_ECHECK_(false, dtoken, check, req)
  |  |  ------------------
  |  |  |  | 2188|  21.4k|    if (!match && ((dtoken) == token_) && ((check) || flatbuffers::IsConstTrue(force))) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2188:9): [True: 21.4k, False: 0]
  |  |  |  |  |  Branch (2188:19): [True: 11.0k, False: 10.3k]
  |  |  |  |  |  Branch (2188:44): [True: 99, False: 10.9k]
  |  |  |  |  |  Branch (2188:55): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2189|  21.4k|      ECHECK(TryTypedValue(name, dtoken, check, e, req, &match))
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     99|  {                            \
  |  |  |  |  |  |   57|     99|    auto ce = (call);          \
  |  |  |  |  |  |   58|     99|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (58:9): [True: 1, False: 98]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   59|     99|  }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2198|  21.4k|               BASE_TYPE_STRING);
 2199|       |
 2200|       |    // avoid escaped and non-ascii in the string
 2201|  21.4k|    if (!match && is_tok_string && IsScalar(in_type) &&
  ------------------
  |  Branch (2201:9): [True: 21.3k, False: 98]
  |  Branch (2201:19): [True: 10.9k, False: 10.3k]
  |  Branch (2201:36): [True: 9.72k, False: 1.20k]
  ------------------
 2202|  9.72k|        !attr_is_trivial_ascii_string_) {
  ------------------
  |  Branch (2202:9): [True: 6, False: 9.71k]
  ------------------
 2203|      6|      return Error(
 2204|      6|          std::string("type mismatch or invalid value, an initializer of "
 2205|      6|                      "non-string field must be trivial ASCII string: type: ") +
 2206|      6|          TypeName(in_type) + ", name: " + (name ? *name : "") +
  ------------------
  |  Branch (2206:45): [True: 5, False: 1]
  ------------------
 2207|      6|          ", value: " + attribute_);
 2208|      6|    }
 2209|       |
 2210|       |    // A boolean as true/false. Boolean as Integer check below.
 2211|  21.4k|    if (!match && IsBool(in_type)) {
  ------------------
  |  Branch (2211:9): [True: 21.3k, False: 98]
  |  Branch (2211:19): [True: 9.19k, False: 12.1k]
  ------------------
 2212|  9.19k|      auto is_true = attribute_ == "true";
 2213|  9.19k|      if (is_true || attribute_ == "false") {
  ------------------
  |  Branch (2213:11): [True: 465, False: 8.72k]
  |  Branch (2213:22): [True: 355, False: 8.37k]
  ------------------
 2214|    820|        attribute_ = is_true ? "1" : "0";
  ------------------
  |  Branch (2214:22): [True: 465, False: 355]
  ------------------
 2215|       |        // accepts both kTokenStringConstant and kTokenIdentifier
 2216|    820|        TRY_ECHECK(kTokenStringOrIdent, IsBool(in_type), BASE_TYPE_BOOL);
  ------------------
  |  | 2190|    820|  #define TRY_ECHECK(dtoken, check, req) IF_ECHECK_(false, dtoken, check, req)
  |  |  ------------------
  |  |  |  | 2188|    820|    if (!match && ((dtoken) == token_) && ((check) || flatbuffers::IsConstTrue(force))) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2188:9): [True: 820, False: 0]
  |  |  |  |  |  Branch (2188:19): [True: 820, False: 0]
  |  |  |  |  |  Branch (2188:44): [True: 820, False: 0]
  |  |  |  |  |  Branch (2188:55): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2189|    820|      ECHECK(TryTypedValue(name, dtoken, check, e, req, &match))
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    820|  {                            \
  |  |  |  |  |  |   57|    820|    auto ce = (call);          \
  |  |  |  |  |  |   58|    820|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (58:9): [True: 1, False: 819]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    820|  }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2217|    819|      }
 2218|  9.19k|    }
 2219|       |    // Check for optional scalars.
 2220|  21.4k|    if (!match && IsScalar(in_type) && attribute_ == "null") {
  ------------------
  |  Branch (2220:9): [True: 20.4k, False: 917]
  |  Branch (2220:19): [True: 19.2k, False: 1.21k]
  |  Branch (2220:40): [True: 2.79k, False: 16.4k]
  ------------------
 2221|  2.79k|      e.constant = "null";
 2222|  2.79k|      NEXT();
  ------------------
  |  |   63|  2.79k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  2.79k|  {                            \
  |  |  |  |   57|  2.79k|    auto ce = (call);          \
  |  |  |  |   58|  2.79k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 2.79k]
  |  |  |  |  ------------------
  |  |  |  |   59|  2.79k|  }
  |  |  ------------------
  ------------------
 2223|  2.79k|      match = true;
 2224|  2.79k|    }
 2225|       |    // Check if this could be a string/identifier enum value.
 2226|       |    // Enum can have only true integer base type.
 2227|  21.4k|    if (!match && IsInteger(in_type) && !IsBool(in_type) &&
  ------------------
  |  Branch (2227:9): [True: 17.6k, False: 3.70k]
  |  Branch (2227:19): [True: 12.2k, False: 5.47k]
  |  Branch (2227:41): [True: 4.13k, False: 8.08k]
  ------------------
 2228|  4.13k|        IsIdentifierStart(*attribute_.c_str())) {
  ------------------
  |  Branch (2228:9): [True: 1.26k, False: 2.87k]
  ------------------
 2229|  1.26k|      ECHECK(ParseEnumFromString(e.type, &e.constant));
  ------------------
  |  |   56|  1.26k|  {                            \
  |  |   57|  1.26k|    auto ce = (call);          \
  |  |   58|  1.26k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 259, False: 1.00k]
  |  |  ------------------
  |  |   59|  1.26k|  }
  ------------------
 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: 4, 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|  21.1k|    if (!match && is_tok_string && IsScalar(in_type)) {
  ------------------
  |  Branch (2235:9): [True: 16.4k, False: 4.70k]
  |  Branch (2235:19): [True: 10.7k, False: 5.68k]
  |  Branch (2235:36): [True: 9.53k, False: 1.20k]
  ------------------
 2236|       |      // Strip trailing whitespaces from attribute_.
 2237|  9.53k|      auto last_non_ws = attribute_.find_last_not_of(' ');
 2238|  9.53k|      if (std::string::npos != last_non_ws) attribute_.resize(last_non_ws + 1);
  ------------------
  |  Branch (2238:11): [True: 8.68k, False: 856]
  ------------------
 2239|  9.53k|      if (IsFloat(e.type.base_type)) {
  ------------------
  |  Branch (2239:11): [True: 873, False: 8.66k]
  ------------------
 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|    873|        if (attribute_.find_last_of(')') != std::string::npos) {
  ------------------
  |  Branch (2243:13): [True: 15, False: 858]
  ------------------
 2244|     15|          return Error("invalid number: " + attribute_);
 2245|     15|        }
 2246|    873|      }
 2247|  9.53k|    }
 2248|       |    // Float numbers or nan, inf, pi, etc.
 2249|  21.1k|    TRY_ECHECK(kTokenStringOrIdent, IsFloat(in_type), BASE_TYPE_FLOAT);
  ------------------
  |  | 2190|  21.1k|  #define TRY_ECHECK(dtoken, check, req) IF_ECHECK_(false, dtoken, check, req)
  |  |  ------------------
  |  |  |  | 2188|  21.1k|    if (!match && ((dtoken) == token_) && ((check) || flatbuffers::IsConstTrue(force))) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2188:9): [True: 16.4k, False: 4.70k]
  |  |  |  |  |  Branch (2188:19): [True: 16.4k, False: 0]
  |  |  |  |  |  Branch (2188:44): [True: 4.24k, False: 12.1k]
  |  |  |  |  |  Branch (2188:55): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2189|  21.1k|      ECHECK(TryTypedValue(name, dtoken, check, e, req, &match))
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  4.24k|  {                            \
  |  |  |  |  |  |   57|  4.24k|    auto ce = (call);          \
  |  |  |  |  |  |   58|  4.24k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (58:9): [True: 21, False: 4.22k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  4.24k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2250|       |    // An integer constant in string.
 2251|  21.1k|    TRY_ECHECK(kTokenStringOrIdent, IsInteger(in_type), BASE_TYPE_INT);
  ------------------
  |  | 2190|  21.1k|  #define TRY_ECHECK(dtoken, check, req) IF_ECHECK_(false, dtoken, check, req)
  |  |  ------------------
  |  |  |  | 2188|  21.1k|    if (!match && ((dtoken) == token_) && ((check) || flatbuffers::IsConstTrue(force))) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2188:9): [True: 12.1k, False: 8.93k]
  |  |  |  |  |  Branch (2188:19): [True: 12.1k, False: 0]
  |  |  |  |  |  Branch (2188:44): [True: 10.9k, False: 1.21k]
  |  |  |  |  |  Branch (2188:55): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2189|  21.1k|      ECHECK(TryTypedValue(name, dtoken, check, e, req, &match))
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  10.9k|  {                            \
  |  |  |  |  |  |   57|  10.9k|    auto ce = (call);          \
  |  |  |  |  |  |   58|  10.9k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (58:9): [True: 7, False: 10.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  10.9k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2252|       |    // Unknown tokens will be interpreted as string type.
 2253|       |    // An attribute value may be a scalar or string constant.
 2254|  21.0k|    FORCE_ECHECK(kTokenStringConstant, in_type == BASE_TYPE_STRING,
  ------------------
  |  | 2191|  21.0k|  #define FORCE_ECHECK(dtoken, check, req) IF_ECHECK_(true, dtoken, check, req)
  |  |  ------------------
  |  |  |  | 2188|  21.0k|    if (!match && ((dtoken) == token_) && ((check) || flatbuffers::IsConstTrue(force))) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2188:9): [True: 1.21k, False: 19.8k]
  |  |  |  |  |  Branch (2188:19): [True: 1.20k, False: 10]
  |  |  |  |  |  Branch (2188:44): [True: 0, False: 1.20k]
  |  |  |  |  |  Branch (2188:55): [True: 1.20k, Folded]
  |  |  |  |  ------------------
  |  |  |  | 2189|  21.0k|      ECHECK(TryTypedValue(name, dtoken, check, e, req, &match))
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.20k|  {                            \
  |  |  |  |  |  |   57|  1.20k|    auto ce = (call);          \
  |  |  |  |  |  |   58|  1.20k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 1.19k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.20k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2255|  21.0k|                 BASE_TYPE_STRING);
 2256|   166k|  } else {
 2257|       |    // Try a float number.
 2258|   166k|    TRY_ECHECK(kTokenFloatConstant, IsFloat(in_type), BASE_TYPE_FLOAT);
  ------------------
  |  | 2190|   166k|  #define TRY_ECHECK(dtoken, check, req) IF_ECHECK_(false, dtoken, check, req)
  |  |  ------------------
  |  |  |  | 2188|   166k|    if (!match && ((dtoken) == token_) && ((check) || flatbuffers::IsConstTrue(force))) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2188:9): [True: 166k, False: 0]
  |  |  |  |  |  Branch (2188:19): [True: 2.17k, False: 163k]
  |  |  |  |  |  Branch (2188:44): [True: 2.16k, False: 7]
  |  |  |  |  |  Branch (2188:55): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2189|   166k|      ECHECK(TryTypedValue(name, dtoken, check, e, req, &match))
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  2.16k|  {                            \
  |  |  |  |  |  |   57|  2.16k|    auto ce = (call);          \
  |  |  |  |  |  |   58|  2.16k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (58:9): [True: 4, False: 2.16k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  2.16k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2259|       |    // Integer token can init any scalar (integer of float).
 2260|   166k|    FORCE_ECHECK(kTokenIntegerConstant, IsScalar(in_type), BASE_TYPE_INT);
  ------------------
  |  | 2191|   166k|  #define FORCE_ECHECK(dtoken, check, req) IF_ECHECK_(true, dtoken, check, req)
  |  |  ------------------
  |  |  |  | 2188|   166k|    if (!match && ((dtoken) == token_) && ((check) || flatbuffers::IsConstTrue(force))) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2188:9): [True: 163k, False: 2.16k]
  |  |  |  |  |  Branch (2188:19): [True: 163k, False: 253]
  |  |  |  |  |  Branch (2188:44): [True: 158k, False: 5.38k]
  |  |  |  |  |  Branch (2188:55): [True: 5.38k, Folded]
  |  |  |  |  ------------------
  |  |  |  | 2189|   166k|      ECHECK(TryTypedValue(name, dtoken, check, e, req, &match))
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|   163k|  {                            \
  |  |  |  |  |  |   57|   163k|    auto ce = (call);          \
  |  |  |  |  |  |   58|   163k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (58:9): [True: 40, False: 163k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   163k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2261|   166k|  }
 2262|       |  // Match empty vectors for default-empty-vectors.
 2263|   187k|  if (!match && IsVector(e.type) && token_ == '[') {
  ------------------
  |  Branch (2263:7): [True: 263, False: 186k]
  |  Branch (2263:17): [True: 31, False: 232]
  |  Branch (2263:37): [True: 26, False: 5]
  ------------------
 2264|     26|    NEXT();
  ------------------
  |  |   63|     26|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|     26|  {                            \
  |  |  |  |   57|     26|    auto ce = (call);          \
  |  |  |  |   58|     26|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 25]
  |  |  |  |  ------------------
  |  |  |  |   59|     26|  }
  |  |  ------------------
  ------------------
 2265|     25|    if (token_ != ']') {
  ------------------
  |  Branch (2265:9): [True: 7, False: 18]
  ------------------
 2266|      7|      return Error("Expected `]` in vector default");
 2267|      7|    }
 2268|     18|    NEXT();
  ------------------
  |  |   63|     18|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|     18|  {                            \
  |  |  |  |   57|     18|    auto ce = (call);          \
  |  |  |  |   58|     18|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 17]
  |  |  |  |  ------------------
  |  |  |  |   59|     18|  }
  |  |  ------------------
  ------------------
 2269|     17|    match = true;
 2270|     17|    e.constant = "[]";
 2271|     17|  }
 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: 237, False: 186k]
  ------------------
 2278|    237|    std::string msg;
 2279|    237|    msg += "Cannot assign token starting with '" + TokenToStringId(token_) +
 2280|    237|           "' to value of <" + std::string(TypeName(in_type)) + "> type.";
 2281|    237|    return Error(msg);
 2282|    237|  }
 2283|   186k|  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|   186k|  if (check_now && IsScalar(match_type) && e.constant != "null") {
  ------------------
  |  Branch (2289:7): [True: 10.5k, False: 176k]
  |  Branch (2289:20): [True: 9.22k, False: 1.31k]
  |  Branch (2289:44): [True: 8.26k, False: 963]
  ------------------
 2290|       |    // clang-format off
 2291|  8.26k|    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.26k|    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.26k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 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.26k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 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|    260|  TD(BOOL,     "bool",   uint8_t,  boolean,bool,    bool,   bool,    bool, Boolean, Bool, 2) \
  |  |  ------------------
  |  |  |  | 2298|    260|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    260|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 260, False: 8.00k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    105|          CTYPE val; \
  |  |  |  |  |  | 2295|    260|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    260|  {                            \
  |  |  |  |  |  |  |  |   57|    260|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    260|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 155, False: 105]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    260|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    105|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    105|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|    282|  TD(CHAR,     "byte",   int8_t,   byte,   int8,    sbyte,  int8,    i8,   Byte, Int8, 3) \
  |  |  ------------------
  |  |  |  | 2298|    282|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    282|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 282, False: 7.97k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    164|          CTYPE val; \
  |  |  |  |  |  | 2295|    282|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    282|  {                            \
  |  |  |  |  |  |  |  |   57|    282|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    282|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 118, False: 164]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    282|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    164|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    164|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|    164|  TD(UCHAR,    "ubyte",  uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 4) \
  |  |  ------------------
  |  |  |  | 2298|    129|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    129|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 129, False: 8.13k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    112|          CTYPE val; \
  |  |  |  |  |  | 2295|    129|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    129|  {                            \
  |  |  |  |  |  |  |  |   57|    129|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    129|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 17, False: 112]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    129|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    112|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    112|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|    309|  TD(SHORT,    "short",  int16_t,  short,  int16,   short,  int16,   i16,  Short, Int16, 5) \
  |  |  ------------------
  |  |  |  | 2298|    309|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    309|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 309, False: 7.95k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    198|          CTYPE val; \
  |  |  |  |  |  | 2295|    309|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    309|  {                            \
  |  |  |  |  |  |  |  |   57|    309|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    309|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 111, False: 198]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    309|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    198|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    198|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   56|    200|  TD(USHORT,   "ushort", uint16_t, short,  uint16,  ushort, uint16,  u16,  UShort, UInt16, 6) \
  |  |  ------------------
  |  |  |  | 2298|    200|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    200|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 200, False: 8.06k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    118|          CTYPE val; \
  |  |  |  |  |  | 2295|    200|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    200|  {                            \
  |  |  |  |  |  |  |  |   57|    200|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    200|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 82, False: 118]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    200|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    118|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    118|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   57|  5.67k|  TD(INT,      "int",    int32_t,  int,    int32,   int,    int32,   i32,  Int, Int32, 7) \
  |  |  ------------------
  |  |  |  | 2298|  5.67k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|  5.67k|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 5.67k, False: 2.58k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|  5.57k|          CTYPE val; \
  |  |  |  |  |  | 2295|  5.67k|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  5.67k|  {                            \
  |  |  |  |  |  |  |  |   57|  5.67k|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|  5.67k|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 101, False: 5.57k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|  5.67k|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|  5.57k|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|  5.57k|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  5.57k|  TD(UINT,     "uint",   uint32_t, int,    uint32,  uint,   uint32,  u32,  UInt, UInt32, 8) \
  |  |  ------------------
  |  |  |  | 2298|    347|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    347|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 347, False: 7.91k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    241|          CTYPE val; \
  |  |  |  |  |  | 2295|    347|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    347|  {                            \
  |  |  |  |  |  |  |  |   57|    347|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    347|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 106, False: 241]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    347|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    241|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    241|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   59|    241|  TD(LONG,     "long",   int64_t,  long,   int64,   long,   int64,   i64,  Long, Int64, 9) \
  |  |  ------------------
  |  |  |  | 2298|    202|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    202|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 202, False: 8.05k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    168|          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: 34, False: 168]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    202|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    168|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    168|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|    374|  TD(ULONG,    "ulong",  uint64_t, long,   uint64,  ulong,  uint64,  u64,  ULong, UInt64, 10) /* end int */ \
  |  |  ------------------
  |  |  |  | 2298|    374|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    374|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 374, False: 7.88k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    319|          CTYPE val; \
  |  |  |  |  |  | 2295|    374|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    374|  {                            \
  |  |  |  |  |  |  |  |   57|    374|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    374|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 55, False: 319]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    374|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    319|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    319|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|    319|  TD(FLOAT,    "float",  float,    float,  float32, float,  float32, f32,  Float, Float32, 11) /* begin float */ \
  |  |  ------------------
  |  |  |  | 2298|    271|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    271|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 271, False: 7.98k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    208|          CTYPE val; \
  |  |  |  |  |  | 2295|    271|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    271|  {                            \
  |  |  |  |  |  |  |  |   57|    271|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    271|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 63, False: 208]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    271|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    208|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    208|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|    210|  TD(DOUBLE,   "double", double,   double, float64, double, float64, f64,  Double, Double, 12) /* end float/scalar */
  |  |  ------------------
  |  |  |  | 2298|    210|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2293|    210|      case BASE_TYPE_ ## ENUM: {\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2293:7): [True: 210, False: 8.05k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2294|    193|          CTYPE val; \
  |  |  |  |  |  | 2295|    210|          ECHECK(atot(e.constant.c_str(), *this, &val)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    210|  {                            \
  |  |  |  |  |  |  |  |   57|    210|    auto ce = (call);          \
  |  |  |  |  |  |  |  |   58|    210|    if (ce.Check()) return ce; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (58:9): [True: 17, False: 193]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   59|    210|  }
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2296|    193|          SingleValueRepack(e, val); \
  |  |  |  |  |  | 2297|    193|        break; }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2299|      0|    #undef FLATBUFFERS_TD
 2300|      0|    default: break;
  ------------------
  |  Branch (2300:5): [True: 0, False: 8.26k]
  ------------------
 2301|  8.26k|    }
 2302|       |    // clang-format on
 2303|  8.26k|  }
 2304|   186k|  return NoError();
 2305|   186k|}
_ZN11flatbuffers6Parser18LookupCreateStructERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEbb:
 2308|   474k|                                      bool create_if_new, bool definition) {
 2309|   474k|  std::string qualified_name = current_namespace_->GetFullyQualifiedName(name);
 2310|       |  // See if it exists pre-declared by an unqualified use.
 2311|   474k|  auto struct_def = LookupStruct(name);
 2312|   474k|  if (struct_def && struct_def->predecl) {
  ------------------
  |  Branch (2312:7): [True: 197k, False: 276k]
  |  Branch (2312:21): [True: 178k, False: 19.0k]
  ------------------
 2313|   178k|    if (definition) {
  ------------------
  |  Branch (2313:9): [True: 9.98k, False: 168k]
  ------------------
 2314|       |      // Make sure it has the current namespace, and is registered under its
 2315|       |      // qualified name.
 2316|  9.98k|      struct_def->defined_namespace = current_namespace_;
 2317|  9.98k|      structs_.Move(name, qualified_name);
 2318|  9.98k|    }
 2319|   178k|    return struct_def;
 2320|   178k|  }
 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: 6.89k, False: 288k]
  |  Branch (2323:21): [True: 40, False: 6.85k]
  ------------------
 2324|     40|    if (definition) {
  ------------------
  |  Branch (2324:9): [True: 6, False: 34]
  ------------------
 2325|       |      // Make sure it has the current namespace.
 2326|      6|      struct_def->defined_namespace = current_namespace_;
 2327|      6|    }
 2328|     40|    return struct_def;
 2329|     40|  }
 2330|   295k|  if (!definition && !struct_def) {
  ------------------
  |  Branch (2330:7): [True: 230k, False: 65.0k]
  |  Branch (2330:22): [True: 223k, False: 6.84k]
  ------------------
 2331|   223k|    struct_def = LookupStructThruParentNamespaces(name);
 2332|   223k|  }
 2333|   295k|  if (!struct_def && create_if_new) {
  ------------------
  |  Branch (2333:7): [True: 285k, False: 9.99k]
  |  Branch (2333:22): [True: 228k, False: 57.1k]
  ------------------
 2334|   228k|    struct_def = new StructDef();
 2335|   228k|    if (definition) {
  ------------------
  |  Branch (2335:9): [True: 65.0k, False: 163k]
  ------------------
 2336|  65.0k|      structs_.Add(qualified_name, struct_def);
 2337|  65.0k|      struct_def->name = name;
 2338|  65.0k|      struct_def->defined_namespace = current_namespace_;
 2339|   163k|    } 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|   163k|      structs_.Add(name, struct_def);
 2346|   163k|      struct_def->name = name;
 2347|   163k|      struct_def->defined_namespace = current_namespace_;
 2348|   163k|      struct_def->original_location.reset(
 2349|   163k|          new std::string(file_being_parsed_ + ":" + NumToString(line_)));
 2350|   163k|    }
 2351|   228k|  }
 2352|   295k|  return struct_def;
 2353|   295k|}
_ZNK11flatbuffers7EnumDef13ReverseLookupElb:
 2377|  1.45k|                                bool skip_union_default) const {
 2378|  1.45k|  auto skip_first = static_cast<int>(is_union && skip_union_default);
  ------------------
  |  Branch (2378:38): [True: 302, False: 1.14k]
  |  Branch (2378:50): [True: 302, False: 0]
  ------------------
 2379|  1.80k|  for (auto it = Vals().begin() + skip_first; it != Vals().end(); ++it) {
  ------------------
  |  Branch (2379:47): [True: 1.67k, False: 123]
  ------------------
 2380|  1.67k|    if ((*it)->GetAsInt64() == enum_idx) {
  ------------------
  |  Branch (2380:9): [True: 1.32k, False: 351]
  ------------------
 2381|  1.32k|      return *it;
 2382|  1.32k|    }
 2383|  1.67k|  }
 2384|    123|  return nullptr;
 2385|  1.45k|}
_ZNK11flatbuffers7EnumDef11FindByValueERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 2387|  1.14k|EnumVal* EnumDef::FindByValue(const std::string& constant) const {
 2388|  1.14k|  int64_t i64;
 2389|  1.14k|  auto done = false;
 2390|  1.14k|  if (IsUInt64()) {
  ------------------
  |  Branch (2390:7): [True: 251, False: 897]
  ------------------
 2391|    251|    uint64_t u64;  // avoid reinterpret_cast of pointers
 2392|    251|    done = StringToNumber(constant.c_str(), &u64);
 2393|    251|    i64 = static_cast<int64_t>(u64);
 2394|    897|  } else {
 2395|    897|    done = StringToNumber(constant.c_str(), &i64);
 2396|    897|  }
 2397|  1.14k|  FLATBUFFERS_ASSERT(done);
 2398|  1.14k|  if (!done) return nullptr;
  ------------------
  |  Branch (2398:7): [True: 0, False: 1.14k]
  ------------------
 2399|  1.14k|  return ReverseLookup(i64, false);
 2400|  1.14k|}
_ZN11flatbuffers7EnumDef11SortByValueEv:
 2402|   103k|void EnumDef::SortByValue() {
 2403|   103k|  auto& v = vals.vec;
 2404|   103k|  if (IsUInt64())
  ------------------
  |  Branch (2404:7): [True: 10.5k, False: 92.7k]
  ------------------
 2405|  10.5k|    std::sort(v.begin(), v.end(), [](const EnumVal* e1, const EnumVal* e2) {
 2406|  10.5k|      if (e1->GetAsUInt64() == e2->GetAsUInt64()) {
 2407|  10.5k|        return e1->name < e2->name;
 2408|  10.5k|      }
 2409|  10.5k|      return e1->GetAsUInt64() < e2->GetAsUInt64();
 2410|  10.5k|    });
 2411|  92.7k|  else
 2412|  92.7k|    std::sort(v.begin(), v.end(), [](const EnumVal* e1, const EnumVal* e2) {
 2413|  92.7k|      if (e1->GetAsInt64() == e2->GetAsInt64()) {
 2414|  92.7k|        return e1->name < e2->name;
 2415|  92.7k|      }
 2416|  92.7k|      return e1->GetAsInt64() < e2->GetAsInt64();
 2417|  92.7k|    });
 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: 11, 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: 61, 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: 69, 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.6k, False: 21.6k]
  ------------------
 2570|       |      // Enum is forced to have an explicit underlying type in declaration.
 2571|  84.6k|      if (!is_union) {
  ------------------
  |  Branch (2571:11): [True: 134, False: 84.4k]
  ------------------
 2572|    134|        return Error(
 2573|    134|            "must specify the underlying integer type for this"
 2574|    134|            " enum (e.g. \': short\', which was the default).");
 2575|    134|      }
 2576|  84.6k|    } else {
 2577|       |      // Union underlying type is only supported for cpp
 2578|  21.6k|      if (is_union && !SupportsUnionUnderlyingType()) {
  ------------------
  |  Branch (2578:11): [True: 9.22k, False: 12.4k]
  |  Branch (2578:23): [True: 0, False: 9.22k]
  ------------------
 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|  21.6k|      NEXT();
  ------------------
  |  |   63|  21.6k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  21.6k|  {                            \
  |  |  |  |   57|  21.6k|    auto ce = (call);          \
  |  |  |  |   58|  21.6k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 3, False: 21.6k]
  |  |  |  |  ------------------
  |  |  |  |   59|  21.6k|  }
  |  |  ------------------
  ------------------
 2584|  21.6k|      explicit_underlying_type = true;
 2585|  21.6k|    }
 2586|       |
 2587|   106k|    if (explicit_underlying_type) {
  ------------------
  |  Branch (2587:9): [True: 21.6k, False: 84.4k]
  ------------------
 2588|       |      // Specify the integer type underlying this enum.
 2589|  21.6k|      ECHECK(ParseType(enum_def->underlying_type));
  ------------------
  |  |   56|  21.6k|  {                            \
  |  |   57|  21.6k|    auto ce = (call);          \
  |  |   58|  21.6k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 208, False: 21.4k]
  |  |  ------------------
  |  |   59|  21.6k|  }
  ------------------
 2590|  21.4k|      if (!IsInteger(enum_def->underlying_type.base_type) ||
  ------------------
  |  Branch (2590:11): [True: 169, False: 21.2k]
  ------------------
 2591|  21.2k|          IsBool(enum_def->underlying_type.base_type)) {
  ------------------
  |  Branch (2591:11): [True: 1, False: 21.2k]
  ------------------
 2592|    170|        return Error("underlying " + std::string(is_union ? "union" : "enum") +
  ------------------
  |  Branch (2592:50): [True: 36, False: 134]
  ------------------
 2593|    170|                     "type must be integral");
 2594|    170|      }
 2595|       |
 2596|       |      // Make this type refer back to the enum it was derived from.
 2597|  21.2k|      enum_def->underlying_type.enum_def = enum_def;
 2598|  21.2k|    }
 2599|   106k|  }
 2600|   105k|  ECHECK(ParseMetaData(&enum_def->attributes));
  ------------------
  |  |   56|   105k|  {                            \
  |  |   57|   105k|    auto ce = (call);          \
  |  |   58|   105k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 145, False: 105k]
  |  |  ------------------
  |  |   59|   105k|  }
  ------------------
 2601|   105k|  const auto underlying_type = enum_def->underlying_type.base_type;
 2602|   105k|  if (enum_def->attributes.Lookup("bit_flags") &&
  ------------------
  |  Branch (2602:7): [True: 667, False: 104k]
  |  Branch (2602:7): [True: 309, False: 105k]
  ------------------
 2603|    667|      !IsUnsigned(underlying_type)) {
  ------------------
  |  Branch (2603:7): [True: 309, False: 358]
  ------------------
 2604|       |    // todo: Convert to the Error in the future?
 2605|    309|    Warning("underlying type of bit_flags enum must be unsigned");
 2606|    309|  }
 2607|   105k|  if (enum_def->attributes.Lookup("force_align")) {
  ------------------
  |  Branch (2607:7): [True: 1, False: 105k]
  ------------------
 2608|      1|    return Error("`force_align` is not a valid attribute for Enums. ");
 2609|      1|  }
 2610|   105k|  EnumValBuilder evb(*this, *enum_def);
 2611|   105k|  EXPECT('{');
  ------------------
  |  |   64|   105k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|   105k|  {                            \
  |  |  |  |   57|   105k|    auto ce = (call);          \
  |  |  |  |   58|   105k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 217, False: 105k]
  |  |  |  |  ------------------
  |  |  |  |   59|   105k|  }
  |  |  ------------------
  ------------------
 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.3k, False: 12.0k]
  |  Branch (2613:20): [True: 364, False: 11.6k]
  |  Branch (2613:32): [True: 93.7k, False: 0]
  ------------------
 2614|  93.7k|    evb.CreateEnumerator("NONE");
 2615|  93.7k|    ECHECK(evb.AcceptEnumerator());
  ------------------
  |  |   56|  93.7k|  {                            \
  |  |   57|  93.7k|    auto ce = (call);          \
  |  |   58|  93.7k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 0, False: 93.7k]
  |  |  ------------------
  |  |   59|  93.7k|  }
  ------------------
 2616|  93.7k|  }
 2617|   105k|  std::set<std::pair<BaseType, StructDef*>> union_types;
 2618|   537k|  while (!Is('}')) {
  ------------------
  |  Branch (2618:10): [True: 456k, False: 81.6k]
  ------------------
 2619|   456k|    if (opts.proto_mode && attribute_ == "option") {
  ------------------
  |  Branch (2619:9): [True: 0, False: 456k]
  |  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|   456k|    } else {
 2622|   456k|      auto& ev = *evb.CreateEnumerator(attribute_);
 2623|   456k|      auto full_name = ev.name;
 2624|   456k|      ev.doc_comment = doc_comment_;
 2625|   456k|      EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|   456k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|   456k|  {                            \
  |  |  |  |   57|   456k|    auto ce = (call);          \
  |  |  |  |   58|   456k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 107, False: 455k]
  |  |  |  |  ------------------
  |  |  |  |   59|   456k|  }
  |  |  ------------------
  ------------------
 2626|   455k|      if (is_union) {
  ------------------
  |  Branch (2626:11): [True: 308k, False: 147k]
  ------------------
 2627|   308k|        ECHECK(ParseNamespacing(&full_name, &ev.name));
  ------------------
  |  |   56|   308k|  {                            \
  |  |   57|   308k|    auto ce = (call);          \
  |  |   58|   308k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 11, False: 308k]
  |  |  ------------------
  |  |   59|   308k|  }
  ------------------
 2628|   308k|        if (opts.union_value_namespacing) {
  ------------------
  |  Branch (2628:13): [True: 308k, False: 0]
  ------------------
 2629|       |          // Since we can't namespace the actual enum identifiers, turn
 2630|       |          // namespace parts into part of the identifier.
 2631|   308k|          ev.name = full_name;
 2632|   308k|          std::replace(ev.name.begin(), ev.name.end(), '.', '_');
 2633|   308k|        }
 2634|   308k|        if (Is(':')) {
  ------------------
  |  Branch (2634:13): [True: 2.63k, False: 306k]
  ------------------
 2635|  2.63k|          NEXT();
  ------------------
  |  |   63|  2.63k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  2.63k|  {                            \
  |  |  |  |   57|  2.63k|    auto ce = (call);          \
  |  |  |  |   58|  2.63k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 2.63k]
  |  |  |  |  ------------------
  |  |  |  |   59|  2.63k|  }
  |  |  ------------------
  ------------------
 2636|  2.63k|          ECHECK(ParseType(ev.union_type));
  ------------------
  |  |   56|  2.63k|  {                            \
  |  |   57|  2.63k|    auto ce = (call);          \
  |  |   58|  2.63k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 9, False: 2.62k]
  |  |  ------------------
  |  |   59|  2.63k|  }
  ------------------
 2637|  2.62k|          if (ev.union_type.base_type != BASE_TYPE_STRUCT &&
  ------------------
  |  Branch (2637:15): [True: 56, False: 2.56k]
  ------------------
 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|   306k|        } else {
 2641|   306k|          ev.union_type = Type(BASE_TYPE_STRUCT, LookupCreateStruct(full_name));
 2642|   306k|        }
 2643|   308k|        if (!enum_def->uses_multiple_type_instances) {
  ------------------
  |  Branch (2643:13): [True: 307k, False: 1.57k]
  ------------------
 2644|   307k|          auto ins = union_types.insert(std::make_pair(
 2645|   307k|              ev.union_type.base_type, ev.union_type.struct_def));
 2646|   307k|          enum_def->uses_multiple_type_instances = (false == ins.second);
 2647|   307k|        }
 2648|   308k|      }
 2649|       |
 2650|   455k|      if (Is('=')) {
  ------------------
  |  Branch (2650:11): [True: 121k, False: 334k]
  ------------------
 2651|   121k|        NEXT();
  ------------------
  |  |   63|   121k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|   121k|  {                            \
  |  |  |  |   57|   121k|    auto ce = (call);          \
  |  |  |  |   58|   121k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 6, False: 121k]
  |  |  |  |  ------------------
  |  |  |  |   59|   121k|  }
  |  |  ------------------
  ------------------
 2652|   121k|        ECHECK(evb.AssignEnumeratorValue(attribute_));
  ------------------
  |  |   56|   121k|  {                            \
  |  |   57|   121k|    auto ce = (call);          \
  |  |   58|   121k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 124, False: 121k]
  |  |  ------------------
  |  |   59|   121k|  }
  ------------------
 2653|   121k|        EXPECT(kTokenIntegerConstant);
  ------------------
  |  |   64|   121k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|   121k|  {                            \
  |  |  |  |   57|   121k|    auto ce = (call);          \
  |  |  |  |   58|   121k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 13, False: 121k]
  |  |  |  |  ------------------
  |  |  |  |   59|   121k|  }
  |  |  ------------------
  ------------------
 2654|   121k|      }
 2655|       |
 2656|   455k|      if (opts.proto_mode && Is('[')) {
  ------------------
  |  Branch (2656:11): [True: 0, False: 455k]
  |  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|   455k|      } else {
 2662|       |        // parse attributes in fbs schema
 2663|   455k|        ECHECK(ParseMetaData(&ev.attributes));
  ------------------
  |  |   56|   455k|  {                            \
  |  |   57|   455k|    auto ce = (call);          \
  |  |   58|   455k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 2, False: 455k]
  |  |  ------------------
  |  |   59|   455k|  }
  ------------------
 2664|   455k|      }
 2665|       |
 2666|   455k|      ECHECK(evb.AcceptEnumerator());
  ------------------
  |  |   56|   455k|  {                            \
  |  |   57|   455k|    auto ce = (call);          \
  |  |   58|   455k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 999, False: 454k]
  |  |  ------------------
  |  |   59|   455k|  }
  ------------------
 2667|   454k|    }
 2668|   454k|    if (!Is(opts.proto_mode ? ';' : ',')) break;
  ------------------
  |  Branch (2668:9): [True: 22.3k, False: 432k]
  |  Branch (2668:13): [True: 0, False: 454k]
  ------------------
 2669|   432k|    NEXT();
  ------------------
  |  |   63|   432k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|   432k|  {                            \
  |  |  |  |   57|   432k|    auto ce = (call);          \
  |  |  |  |   58|   432k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 18, False: 432k]
  |  |  |  |  ------------------
  |  |  |  |   59|   432k|  }
  |  |  ------------------
  ------------------
 2670|   432k|  }
 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: 632, 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: 644, False: 102k]
  ------------------
 2678|    644|    const auto base_width = static_cast<uint64_t>(8 * SizeOf(underlying_type));
 2679|  3.42k|    for (auto it = enum_def->Vals().begin(); it != enum_def->Vals().end();
  ------------------
  |  Branch (2679:46): [True: 2.85k, False: 571]
  ------------------
 2680|  2.85k|         ++it) {
 2681|  2.85k|      auto ev = *it;
 2682|  2.85k|      const auto u = ev->GetAsUInt64();
 2683|       |      // Stop manipulations with the sign.
 2684|  2.85k|      if (!IsUnsigned(underlying_type) && u == (base_width - 1))
  ------------------
  |  Branch (2684:11): [True: 1.40k, False: 1.45k]
  |  Branch (2684:43): [True: 2, False: 1.40k]
  ------------------
 2685|      2|        return Error("underlying type of bit_flags enum must be unsigned");
 2686|  2.85k|      if (u >= base_width)
  ------------------
  |  Branch (2686:11): [True: 71, False: 2.78k]
  ------------------
 2687|     71|        return Error("bit flag out of range of underlying integral type");
 2688|  2.78k|      enum_def->ChangeEnumValue(ev, 1ULL << u);
 2689|  2.78k|    }
 2690|    644|  }
 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|   481k|  for (auto it = prev_it + 1; it != enum_def->Vals().end(); ++it) {
  ------------------
  |  Branch (2696:31): [True: 380k, False: 100k]
  ------------------
 2697|   380k|    auto prev_ev = *prev_it;
 2698|   380k|    auto ev = *it;
 2699|   380k|    if (prev_ev->GetAsUInt64() == ev->GetAsUInt64())
  ------------------
  |  Branch (2699:9): [True: 2.40k, False: 378k]
  ------------------
 2700|  2.40k|      return Error("all enum values must be unique: " + prev_ev->name +
 2701|  2.40k|                   " and " + ev->name + " are both " +
 2702|  2.40k|                   NumToString(ev->GetAsInt64()));
 2703|   380k|  }
 2704|       |
 2705|   100k|  if (dest) *dest = enum_def;
  ------------------
  |  Branch (2705:7): [True: 0, False: 100k]
  ------------------
 2706|   100k|  const auto qualified_name =
 2707|   100k|      current_namespace_->GetFullyQualifiedName(enum_def->name);
 2708|   100k|  if (types_.Add(qualified_name, new Type(BASE_TYPE_UNION, nullptr, enum_def)))
  ------------------
  |  Branch (2708:7): [True: 2, False: 100k]
  ------------------
 2709|      2|    return Error("datatype already exists: " + qualified_name);
 2710|   100k|  return NoError();
 2711|   100k|}
_ZN11flatbuffers6Parser11StartStructERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEPPNS_9StructDefE:
 2713|  75.0k|CheckedError Parser::StartStruct(const std::string& name, StructDef** dest) {
 2714|  75.0k|  auto& struct_def = *LookupCreateStruct(name, true, true);
 2715|  75.0k|  if (!struct_def.predecl)
  ------------------
  |  Branch (2715:7): [True: 2, False: 75.0k]
  ------------------
 2716|      2|    return Error("datatype already exists: " +
 2717|      2|                 current_namespace_->GetFullyQualifiedName(name));
 2718|  75.0k|  struct_def.predecl = false;
 2719|  75.0k|  struct_def.name = name;
 2720|  75.0k|  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.0k|  *std::remove(structs_.vec.begin(), structs_.vec.end(), &struct_def) =
 2724|  75.0k|      &struct_def;
 2725|  75.0k|  *dest = &struct_def;
 2726|  75.0k|  return NoError();
 2727|  75.0k|}
_ZN11flatbuffers6Parser10CheckClashERNSt3__16vectorIPNS_8FieldDefENS1_9allocatorIS4_EEEEPNS_9StructDefEPKcNS_8BaseTypeE:
 2731|   428k|                                BaseType basetype) {
 2732|   428k|  auto len = strlen(suffix);
 2733|   813k|  for (auto it = fields.begin(); it != fields.end(); ++it) {
  ------------------
  |  Branch (2733:34): [True: 384k, False: 428k]
  ------------------
 2734|   384k|    auto& fname = (*it)->name;
 2735|   384k|    if (fname.length() > len &&
  ------------------
  |  Branch (2735:9): [True: 71.2k, False: 313k]
  ------------------
 2736|  71.2k|        fname.compare(fname.length() - len, len, suffix) == 0 &&
  ------------------
  |  Branch (2736:9): [True: 18.3k, False: 52.8k]
  ------------------
 2737|  18.3k|        (*it)->value.type.base_type != BASE_TYPE_UTYPE) {
  ------------------
  |  Branch (2737:9): [True: 1.96k, False: 16.4k]
  ------------------
 2738|  1.96k|      auto field =
 2739|  1.96k|          struct_def->fields.Lookup(fname.substr(0, fname.length() - len));
 2740|  1.96k|      if (field && field->value.type.base_type == basetype)
  ------------------
  |  Branch (2740:11): [True: 1.49k, False: 469]
  |  Branch (2740:20): [True: 11, False: 1.48k]
  ------------------
 2741|     11|        return Error("Field " + fname +
 2742|     11|                     " would clash with generated functions for field " +
 2743|     11|                     field->name);
 2744|  1.96k|    }
 2745|   384k|  }
 2746|   428k|  return NoError();
 2747|   428k|}
_ZNK11flatbuffers6Parser23SupportsOptionalScalarsEv:
 2804|    961|bool Parser::SupportsOptionalScalars() const {
 2805|       |  // Check in general if a language isn't specified.
 2806|    961|  return opts.lang_to_generate == 0 || SupportsOptionalScalars(opts);
  ------------------
  |  Branch (2806:10): [True: 961, False: 0]
  |  Branch (2806:40): [True: 0, False: 0]
  ------------------
 2807|    961|}
_ZNK11flatbuffers6Parser32SupportsDefaultVectorsAndStringsEv:
 2809|     97|bool Parser::SupportsDefaultVectorsAndStrings() const {
 2810|     97|  static FLATBUFFERS_CONSTEXPR unsigned long supported_langs =
 2811|     97|      IDLOptions::kRust | IDLOptions::kSwift | IDLOptions::kNim |
 2812|     97|      IDLOptions::kCpp | IDLOptions::kBinary | IDLOptions::kJson |
 2813|     97|      IDLOptions::kTs;
 2814|     97|  return !(opts.lang_to_generate & ~supported_langs);
 2815|     97|}
_ZNK11flatbuffers6Parser29SupportsAdvancedUnionFeaturesEv:
 2817|  1.65k|bool Parser::SupportsAdvancedUnionFeatures() const {
 2818|  1.65k|  return (opts.lang_to_generate &
 2819|  1.65k|          ~(IDLOptions::kCpp | IDLOptions::kTs | IDLOptions::kPhp |
 2820|  1.65k|            IDLOptions::kJava | IDLOptions::kCSharp | IDLOptions::kKotlin |
 2821|  1.65k|            IDLOptions::kBinary | IDLOptions::kSwift | IDLOptions::kNim |
 2822|  1.65k|            IDLOptions::kJson | IDLOptions::kKotlinKmp)) == 0;
 2823|  1.65k|}
_ZNK11flatbuffers6Parser29SupportsAdvancedArrayFeaturesEv:
 2825|    967|bool Parser::SupportsAdvancedArrayFeatures() const {
 2826|    967|  return (opts.lang_to_generate &
 2827|    967|          ~(IDLOptions::kCpp | IDLOptions::kPython | IDLOptions::kJava |
 2828|    967|            IDLOptions::kCSharp | IDLOptions::kJsonSchema | IDLOptions::kJson |
 2829|    967|            IDLOptions::kBinary | IDLOptions::kRust | IDLOptions::kTs |
 2830|    967|            IDLOptions::kSwift)) == 0;
 2831|    967|}
_ZNK11flatbuffers6Parser20Supports64BitOffsetsEv:
 2833|    323|bool Parser::Supports64BitOffsets() const {
 2834|    323|  return (opts.lang_to_generate &
 2835|    323|          ~(IDLOptions::kCpp | IDLOptions::kJson | IDLOptions::kBinary)) == 0;
 2836|    323|}
_ZNK11flatbuffers6Parser27SupportsUnionUnderlyingTypeEv:
 2838|  9.22k|bool Parser::SupportsUnionUnderlyingType() const {
 2839|  9.22k|  return (opts.lang_to_generate &
 2840|  9.22k|          ~(IDLOptions::kCpp | IDLOptions::kTs | IDLOptions::kBinary)) == 0;
 2841|  9.22k|}
_ZN11flatbuffers6Parser15UniqueNamespaceEPNS_9NamespaceE:
 2843|  20.0k|Namespace* Parser::UniqueNamespace(Namespace* ns) {
 2844|   259k|  for (auto it = namespaces_.begin(); it != namespaces_.end(); ++it) {
  ------------------
  |  Branch (2844:39): [True: 239k, False: 19.4k]
  ------------------
 2845|   239k|    if (ns->components == (*it)->components) {
  ------------------
  |  Branch (2845:9): [True: 641, False: 239k]
  ------------------
 2846|    641|      delete ns;
 2847|    641|      return *it;
 2848|    641|    }
 2849|   239k|  }
 2850|  19.4k|  namespaces_.push_back(ns);
 2851|  19.4k|  return ns;
 2852|  20.0k|}
_ZN11flatbuffers6Parser9ParseDeclEPKc:
 2869|  76.3k|CheckedError Parser::ParseDecl(const char* filename) {
 2870|  76.3k|  std::vector<std::string> dc = doc_comment_;
 2871|  76.3k|  bool fixed = IsIdent("struct");
 2872|  76.3k|  if (!fixed && !IsIdent("table")) return Error("declaration expected");
  ------------------
  |  Branch (2872:7): [True: 75.0k, False: 1.30k]
  |  Branch (2872:17): [True: 1.25k, False: 73.7k]
  ------------------
 2873|  75.0k|  NEXT();
  ------------------
  |  |   63|  75.0k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  75.0k|  {                            \
  |  |  |  |   57|  75.0k|    auto ce = (call);          \
  |  |  |  |   58|  75.0k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 75.0k]
  |  |  |  |  ------------------
  |  |  |  |   59|  75.0k|  }
  |  |  ------------------
  ------------------
 2874|  75.0k|  std::string name = attribute_;
 2875|  75.0k|  EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|  75.0k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  75.0k|  {                            \
  |  |  |  |   57|  75.0k|    auto ce = (call);          \
  |  |  |  |   58|  75.0k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 19, False: 75.0k]
  |  |  |  |  ------------------
  |  |  |  |   59|  75.0k|  }
  |  |  ------------------
  ------------------
 2876|  75.0k|  StructDef* struct_def;
 2877|  75.0k|  ECHECK(StartStruct(name, &struct_def));
  ------------------
  |  |   56|  75.0k|  {                            \
  |  |   57|  75.0k|    auto ce = (call);          \
  |  |   58|  75.0k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 2, False: 75.0k]
  |  |  ------------------
  |  |   59|  75.0k|  }
  ------------------
 2878|  75.0k|  struct_def->doc_comment = dc;
 2879|  75.0k|  struct_def->fixed = fixed;
 2880|  75.0k|  if (filename && !opts.project_root.empty()) {
  ------------------
  |  Branch (2880:7): [True: 0, False: 75.0k]
  |  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.0k|  ECHECK(ParseMetaData(&struct_def->attributes));
  ------------------
  |  |   56|  75.0k|  {                            \
  |  |   57|  75.0k|    auto ce = (call);          \
  |  |   58|  75.0k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 269, False: 74.7k]
  |  |  ------------------
  |  |   59|  75.0k|  }
  ------------------
 2885|  74.7k|  struct_def->sortbysize =
 2886|  74.7k|      struct_def->attributes.Lookup("original_order") == nullptr && !fixed;
  ------------------
  |  Branch (2886:7): [True: 74.6k, False: 101]
  |  Branch (2886:69): [True: 73.3k, False: 1.29k]
  ------------------
 2887|  74.7k|  EXPECT('{');
  ------------------
  |  |   64|  74.7k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  74.7k|  {                            \
  |  |  |  |   57|  74.7k|    auto ce = (call);          \
  |  |  |  |   58|  74.7k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 124, False: 74.6k]
  |  |  |  |  ------------------
  |  |  |  |   59|  74.7k|  }
  |  |  ------------------
  ------------------
 2888|   129k|  while (token_ != '}') ECHECK(ParseField(*struct_def));
  ------------------
  |  |   56|   131k|  {                            \
  |  |   57|   131k|    auto ce = (call);          \
  |  |   58|   131k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 2.73k, False: 54.3k]
  |  |  ------------------
  |  |   59|   131k|  }
  ------------------
  |  Branch (2888:10): [True: 57.1k, False: 71.9k]
  ------------------
 2889|  71.9k|  if (fixed) {
  ------------------
  |  Branch (2889:7): [True: 1.09k, False: 70.8k]
  ------------------
 2890|  1.09k|    const auto force_align = struct_def->attributes.Lookup("force_align");
 2891|  1.09k|    if (force_align) {
  ------------------
  |  Branch (2891:9): [True: 372, False: 725]
  ------------------
 2892|    372|      size_t align;
 2893|    372|      ECHECK(ParseAlignAttribute(force_align->constant, struct_def->minalign,
  ------------------
  |  |   56|    372|  {                            \
  |  |   57|    372|    auto ce = (call);          \
  |  |   58|    372|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 135, False: 237]
  |  |  ------------------
  |  |   59|    372|  }
  ------------------
 2894|    372|                                 &align));
 2895|    237|      struct_def->minalign = align;
 2896|    237|    }
 2897|    962|    if (!struct_def->bytesize) return Error("size 0 structs not allowed");
  ------------------
  |  Branch (2897:9): [True: 7, False: 955]
  ------------------
 2898|    962|  }
 2899|  71.7k|  struct_def->PadLastField(struct_def->minalign);
 2900|       |  // Check if this is a table that has manual id assignments
 2901|  71.7k|  auto& fields = struct_def->fields.vec;
 2902|  71.7k|  if (!fixed && fields.size()) {
  ------------------
  |  Branch (2902:7): [True: 70.8k, False: 955]
  |  Branch (2902:17): [True: 25.7k, False: 45.0k]
  ------------------
 2903|  25.7k|    size_t num_id_fields = 0;
 2904|  96.2k|    for (auto it = fields.begin(); it != fields.end(); ++it) {
  ------------------
  |  Branch (2904:36): [True: 70.4k, False: 25.7k]
  ------------------
 2905|  70.4k|      if ((*it)->attributes.Lookup("id")) num_id_fields++;
  ------------------
  |  Branch (2905:11): [True: 8.30k, False: 62.1k]
  ------------------
 2906|  70.4k|    }
 2907|       |    // If any fields have ids..
 2908|  25.7k|    if (num_id_fields || opts.require_explicit_ids) {
  ------------------
  |  Branch (2908:9): [True: 374, False: 25.3k]
  |  Branch (2908:26): [True: 0, False: 25.3k]
  ------------------
 2909|       |      // Then all fields must have them.
 2910|    374|      if (num_id_fields != fields.size()) {
  ------------------
  |  Branch (2910:11): [True: 1, False: 373]
  ------------------
 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|    373|      std::sort(fields.begin(), fields.end(), compareFieldDefs);
 2923|       |      // Verify we have a contiguous set, and reassign vtable offsets.
 2924|    373|      FLATBUFFERS_ASSERT(fields.size() <=
 2925|    373|                         flatbuffers::numeric_limits<voffset_t>::max());
 2926|    855|      for (voffset_t i = 0; i < static_cast<voffset_t>(fields.size()); i++) {
  ------------------
  |  Branch (2926:29): [True: 798, False: 57]
  ------------------
 2927|    798|        auto& field = *fields[i];
 2928|    798|        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|    798|        voffset_t id = 0;
 2935|    798|        const auto done = !atot(id_str.c_str(), *this, &id).Check();
 2936|    798|        if (!done)
  ------------------
  |  Branch (2936:13): [True: 42, False: 756]
  ------------------
 2937|     42|          return Error("field id\'s must be non-negative number, field: " +
 2938|     42|                       field.name + ", id: " + id_str);
 2939|    756|        if (i != id)
  ------------------
  |  Branch (2939:13): [True: 274, False: 482]
  ------------------
 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|    482|        field.value.offset = FieldIndexToOffset(i);
 2944|    482|      }
 2945|    373|    }
 2946|  25.7k|  }
 2947|       |
 2948|  71.4k|  ECHECK(
  ------------------
  |  |   56|  71.4k|  {                            \
  |  |   57|  71.4k|    auto ce = (call);          \
  |  |   58|  71.4k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 0, False: 71.4k]
  |  |  ------------------
  |  |   59|  71.4k|  }
  ------------------
 2949|  71.4k|      CheckClash(fields, struct_def, UnionTypeFieldSuffix(), BASE_TYPE_UNION));
 2950|  71.4k|  ECHECK(CheckClash(fields, struct_def, "Type", BASE_TYPE_UNION));
  ------------------
  |  |   56|  71.4k|  {                            \
  |  |   57|  71.4k|    auto ce = (call);          \
  |  |   58|  71.4k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 8, False: 71.4k]
  |  |  ------------------
  |  |   59|  71.4k|  }
  ------------------
 2951|  71.4k|  ECHECK(CheckClash(fields, struct_def, "_length", BASE_TYPE_VECTOR));
  ------------------
  |  |   56|  71.4k|  {                            \
  |  |   57|  71.4k|    auto ce = (call);          \
  |  |   58|  71.4k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1, False: 71.4k]
  |  |  ------------------
  |  |   59|  71.4k|  }
  ------------------
 2952|  71.4k|  ECHECK(CheckClash(fields, struct_def, "Length", BASE_TYPE_VECTOR));
  ------------------
  |  |   56|  71.4k|  {                            \
  |  |   57|  71.4k|    auto ce = (call);          \
  |  |   58|  71.4k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1, False: 71.4k]
  |  |  ------------------
  |  |   59|  71.4k|  }
  ------------------
 2953|  71.4k|  ECHECK(CheckClash(fields, struct_def, "_byte_vector", BASE_TYPE_STRING));
  ------------------
  |  |   56|  71.4k|  {                            \
  |  |   57|  71.4k|    auto ce = (call);          \
  |  |   58|  71.4k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 0, False: 71.4k]
  |  |  ------------------
  |  |   59|  71.4k|  }
  ------------------
 2954|  71.4k|  ECHECK(CheckClash(fields, struct_def, "ByteVector", BASE_TYPE_STRING));
  ------------------
  |  |   56|  71.4k|  {                            \
  |  |   57|  71.4k|    auto ce = (call);          \
  |  |   58|  71.4k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1, False: 71.4k]
  |  |  ------------------
  |  |   59|  71.4k|  }
  ------------------
 2955|  71.4k|  EXPECT('}');
  ------------------
  |  |   64|  71.4k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  71.4k|  {                            \
  |  |  |  |   57|  71.4k|    auto ce = (call);          \
  |  |  |  |   58|  71.4k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 7, False: 71.4k]
  |  |  |  |  ------------------
  |  |  |  |   59|  71.4k|  }
  |  |  ------------------
  ------------------
 2956|  71.4k|  const auto qualified_name =
 2957|  71.4k|      current_namespace_->GetFullyQualifiedName(struct_def->name);
 2958|  71.4k|  if (types_.Add(qualified_name,
  ------------------
  |  Branch (2958:7): [True: 2, False: 71.4k]
  ------------------
 2959|  71.4k|                 new Type(BASE_TYPE_STRUCT, struct_def, nullptr)))
 2960|      2|    return Error("datatype already exists: " + qualified_name);
 2961|  71.4k|  return NoError();
 2962|  71.4k|}
_ZN11flatbuffers6Parser12ParseServiceEPKc:
 2964|  2.48k|CheckedError Parser::ParseService(const char* filename) {
 2965|  2.48k|  std::vector<std::string> service_comment = doc_comment_;
 2966|  2.48k|  NEXT();
  ------------------
  |  |   63|  2.48k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  2.48k|  {                            \
  |  |  |  |   57|  2.48k|    auto ce = (call);          \
  |  |  |  |   58|  2.48k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 2.48k]
  |  |  |  |  ------------------
  |  |  |  |   59|  2.48k|  }
  |  |  ------------------
  ------------------
 2967|  2.48k|  auto service_name = attribute_;
 2968|  2.48k|  EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|  2.48k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  2.48k|  {                            \
  |  |  |  |   57|  2.48k|    auto ce = (call);          \
  |  |  |  |   58|  2.48k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 2.48k]
  |  |  |  |  ------------------
  |  |  |  |   59|  2.48k|  }
  |  |  ------------------
  ------------------
 2969|  2.48k|  auto& service_def = *new ServiceDef();
 2970|  2.48k|  service_def.name = service_name;
 2971|  2.48k|  service_def.file = file_being_parsed_;
 2972|  2.48k|  service_def.doc_comment = service_comment;
 2973|  2.48k|  service_def.defined_namespace = current_namespace_;
 2974|  2.48k|  if (filename != nullptr && !opts.project_root.empty()) {
  ------------------
  |  Branch (2974:7): [True: 0, False: 2.48k]
  |  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.48k|  if (services_.Add(current_namespace_->GetFullyQualifiedName(service_name),
  ------------------
  |  Branch (2978:7): [True: 3, False: 2.47k]
  ------------------
 2979|  2.48k|                    &service_def))
 2980|      3|    return Error("service already exists: " + service_name);
 2981|  2.47k|  ECHECK(ParseMetaData(&service_def.attributes));
  ------------------
  |  |   56|  2.47k|  {                            \
  |  |   57|  2.47k|    auto ce = (call);          \
  |  |   58|  2.47k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 8, False: 2.47k]
  |  |  ------------------
  |  |   59|  2.47k|  }
  ------------------
 2982|  2.47k|  EXPECT('{');
  ------------------
  |  |   64|  2.47k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  2.47k|  {                            \
  |  |  |  |   57|  2.47k|    auto ce = (call);          \
  |  |  |  |   58|  2.47k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 103, False: 2.36k]
  |  |  |  |  ------------------
  |  |  |  |   59|  2.47k|  }
  |  |  ------------------
  ------------------
 2983|  6.76k|  do {
 2984|  6.76k|    std::vector<std::string> doc_comment = doc_comment_;
 2985|  6.76k|    auto rpc_name = attribute_;
 2986|  6.76k|    EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|  6.76k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  6.76k|  {                            \
  |  |  |  |   57|  6.76k|    auto ce = (call);          \
  |  |  |  |   58|  6.76k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 26, False: 6.73k]
  |  |  |  |  ------------------
  |  |  |  |   59|  6.76k|  }
  |  |  ------------------
  ------------------
 2987|  6.73k|    EXPECT('(');
  ------------------
  |  |   64|  6.73k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  6.73k|  {                            \
  |  |  |  |   57|  6.73k|    auto ce = (call);          \
  |  |  |  |   58|  6.73k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 43, False: 6.69k]
  |  |  |  |  ------------------
  |  |  |  |   59|  6.73k|  }
  |  |  ------------------
  ------------------
 2988|  6.69k|    Type reqtype, resptype;
 2989|  6.69k|    ECHECK(ParseTypeIdent(reqtype));
  ------------------
  |  |   56|  6.69k|  {                            \
  |  |   57|  6.69k|    auto ce = (call);          \
  |  |   58|  6.69k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 3, False: 6.69k]
  |  |  ------------------
  |  |   59|  6.69k|  }
  ------------------
 2990|  6.69k|    EXPECT(')');
  ------------------
  |  |   64|  6.69k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  6.69k|  {                            \
  |  |  |  |   57|  6.69k|    auto ce = (call);          \
  |  |  |  |   58|  6.69k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 13, False: 6.67k]
  |  |  |  |  ------------------
  |  |  |  |   59|  6.69k|  }
  |  |  ------------------
  ------------------
 2991|  6.67k|    EXPECT(':');
  ------------------
  |  |   64|  6.67k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  6.67k|  {                            \
  |  |  |  |   57|  6.67k|    auto ce = (call);          \
  |  |  |  |   58|  6.67k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 7, False: 6.67k]
  |  |  |  |  ------------------
  |  |  |  |   59|  6.67k|  }
  |  |  ------------------
  ------------------
 2992|  6.67k|    ECHECK(ParseTypeIdent(resptype));
  ------------------
  |  |   56|  6.67k|  {                            \
  |  |   57|  6.67k|    auto ce = (call);          \
  |  |   58|  6.67k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 5, False: 6.66k]
  |  |  ------------------
  |  |   59|  6.67k|  }
  ------------------
 2993|  6.66k|    if (reqtype.base_type != BASE_TYPE_STRUCT || reqtype.struct_def->fixed ||
  ------------------
  |  Branch (2993:9): [True: 1, False: 6.66k]
  |  Branch (2993:50): [True: 1, False: 6.66k]
  ------------------
 2994|  6.66k|        resptype.base_type != BASE_TYPE_STRUCT || resptype.struct_def->fixed)
  ------------------
  |  Branch (2994:9): [True: 3, False: 6.66k]
  |  Branch (2994:51): [True: 1, False: 6.66k]
  ------------------
 2995|      6|      return Error("rpc request and response types must be tables");
 2996|  6.66k|    auto& rpc = *new RPCCall();
 2997|  6.66k|    rpc.name = rpc_name;
 2998|  6.66k|    rpc.request = reqtype.struct_def;
 2999|  6.66k|    rpc.response = resptype.struct_def;
 3000|  6.66k|    rpc.doc_comment = doc_comment;
 3001|  6.66k|    if (service_def.calls.Add(rpc_name, &rpc))
  ------------------
  |  Branch (3001:9): [True: 20, False: 6.64k]
  ------------------
 3002|     20|      return Error("rpc already exists: " + rpc_name);
 3003|  6.64k|    ECHECK(ParseMetaData(&rpc.attributes));
  ------------------
  |  |   56|  6.64k|  {                            \
  |  |   57|  6.64k|    auto ce = (call);          \
  |  |   58|  6.64k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 6, False: 6.63k]
  |  |  ------------------
  |  |   59|  6.64k|  }
  ------------------
 3004|  6.63k|    EXPECT(';');
  ------------------
  |  |   64|  6.63k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  6.63k|  {                            \
  |  |  |  |   57|  6.63k|    auto ce = (call);          \
  |  |  |  |   58|  6.63k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 141, False: 6.49k]
  |  |  |  |  ------------------
  |  |  |  |   59|  6.63k|  }
  |  |  ------------------
  ------------------
 3005|  6.49k|  } while (token_ != '}');
  ------------------
  |  Branch (3005:12): [True: 4.39k, False: 2.09k]
  ------------------
 3006|  2.09k|  NEXT();
  ------------------
  |  |   63|  2.09k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  2.09k|  {                            \
  |  |  |  |   57|  2.09k|    auto ce = (call);          \
  |  |  |  |   58|  2.09k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 2.09k]
  |  |  |  |  ------------------
  |  |  |  |   59|  2.09k|  }
  |  |  ------------------
  ------------------
 3007|  2.09k|  return NoError();
 3008|  2.09k|}
_ZN11flatbuffers6Parser11SetRootTypeEPKc:
 3010|  9.42k|bool Parser::SetRootType(const char* name) {
 3011|  9.42k|  root_struct_def_ = LookupStruct(name);
 3012|  9.42k|  if (!root_struct_def_)
  ------------------
  |  Branch (3012:7): [True: 552, False: 8.87k]
  ------------------
 3013|    552|    root_struct_def_ =
 3014|    552|        LookupStruct(current_namespace_->GetFullyQualifiedName(name));
 3015|  9.42k|  return root_struct_def_ != nullptr;
 3016|  9.42k|}
_ZN11flatbuffers6Parser14ParseNamespaceEv:
 3035|  20.1k|CheckedError Parser::ParseNamespace() {
 3036|  20.1k|  NEXT();
  ------------------
  |  |   63|  20.1k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  20.1k|  {                            \
  |  |  |  |   57|  20.1k|    auto ce = (call);          \
  |  |  |  |   58|  20.1k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 4, False: 20.1k]
  |  |  |  |  ------------------
  |  |  |  |   59|  20.1k|  }
  |  |  ------------------
  ------------------
 3037|  20.1k|  auto ns = new Namespace();
 3038|  20.1k|  namespaces_.push_back(ns);  // Store it here to not leak upon error.
 3039|  20.1k|  if (token_ != ';') {
  ------------------
  |  Branch (3039:7): [True: 19.8k, False: 267]
  ------------------
 3040|  39.7k|    for (;;) {
 3041|  39.7k|      ns->components.push_back(attribute_);
 3042|  39.7k|      EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|  39.7k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  39.7k|  {                            \
  |  |  |  |   57|  39.7k|    auto ce = (call);          \
  |  |  |  |   58|  39.7k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 63, False: 39.7k]
  |  |  |  |  ------------------
  |  |  |  |   59|  39.7k|  }
  |  |  ------------------
  ------------------
 3043|  39.7k|      if (Is('.')) NEXT() else break;
  ------------------
  |  |   63|  19.9k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  19.9k|  {                            \
  |  |  |  |   57|  19.9k|    auto ce = (call);          \
  |  |  |  |   58|  19.9k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 19.9k]
  |  |  |  |  ------------------
  |  |  |  |   59|  19.9k|  }
  |  |  ------------------
  ------------------
  |  Branch (3043:11): [True: 19.9k, False: 19.8k]
  ------------------
 3044|  39.7k|    }
 3045|  19.8k|  }
 3046|  20.0k|  namespaces_.pop_back();
 3047|  20.0k|  current_namespace_ = UniqueNamespace(ns);
 3048|  20.0k|  EXPECT(';');
  ------------------
  |  |   64|  20.0k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  20.0k|  {                            \
  |  |  |  |   57|  20.0k|    auto ce = (call);          \
  |  |  |  |   58|  20.0k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 115, False: 19.9k]
  |  |  |  |  ------------------
  |  |  |  |   59|  20.0k|  }
  |  |  ------------------
  ------------------
 3049|  19.9k|  return NoError();
 3050|  20.0k|}
_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: 69, False: 106k]
  ------------------
 3130|     69|    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.7k, False: 12.5k]
  ------------------
 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|  11.8k|CheckedError Parser::SkipAnyJsonValue() {
 3454|  11.8k|  ParseDepthGuard depth_guard(this);
 3455|  11.8k|  ECHECK(depth_guard.Check());
  ------------------
  |  |   56|  11.8k|  {                            \
  |  |   57|  11.8k|    auto ce = (call);          \
  |  |   58|  11.8k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 3, False: 11.8k]
  |  |  ------------------
  |  |   59|  11.8k|  }
  ------------------
 3456|       |
 3457|  11.8k|  switch (token_) {
 3458|  1.03k|    case '{': {
  ------------------
  |  Branch (3458:5): [True: 1.03k, False: 10.8k]
  ------------------
 3459|  1.03k|      size_t fieldn_outer = 0;
 3460|  1.03k|      return ParseTableDelimiters(fieldn_outer, nullptr,
 3461|  1.03k|                                  [&](const std::string&, size_t& fieldn,
 3462|  1.03k|                                      const StructDef*) -> CheckedError {
 3463|  1.03k|                                    ECHECK(SkipAnyJsonValue());
 3464|  1.03k|                                    fieldn++;
 3465|  1.03k|                                    return NoError();
 3466|  1.03k|                                  });
 3467|      0|    }
 3468|  1.22k|    case '[': {
  ------------------
  |  Branch (3468:5): [True: 1.22k, False: 10.6k]
  ------------------
 3469|  1.22k|      size_t count = 0;
 3470|  1.22k|      return ParseVectorDelimiters(
 3471|  1.22k|          count, [&](size_t&) -> CheckedError { return SkipAnyJsonValue(); });
 3472|      0|    }
 3473|    354|    case kTokenStringConstant:
  ------------------
  |  Branch (3473:5): [True: 354, False: 11.4k]
  ------------------
 3474|  8.18k|    case kTokenIntegerConstant:
  ------------------
  |  Branch (3474:5): [True: 7.83k, False: 4.00k]
  ------------------
 3475|  8.98k|    case kTokenFloatConstant:
  ------------------
  |  Branch (3475:5): [True: 792, False: 11.0k]
  ------------------
 3476|  8.98k|      NEXT();
  ------------------
  |  |   63|  8.98k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  8.98k|  {                            \
  |  |  |  |   57|  8.98k|    auto ce = (call);          \
  |  |  |  |   58|  8.98k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 8, False: 8.97k]
  |  |  |  |  ------------------
  |  |  |  |   59|  8.98k|  }
  |  |  ------------------
  ------------------
 3477|  8.97k|      break;
 3478|    606|    default:
  ------------------
  |  Branch (3478:5): [True: 606, False: 11.2k]
  ------------------
 3479|    606|      if (IsIdent("true") || IsIdent("false") || IsIdent("null") ||
  ------------------
  |  Branch (3479:11): [True: 210, False: 396]
  |  Branch (3479:30): [True: 66, False: 330]
  |  Branch (3479:50): [True: 67, False: 263]
  ------------------
 3480|    537|          IsIdent("inf")) {
  ------------------
  |  Branch (3480:11): [True: 194, False: 69]
  ------------------
 3481|    537|        NEXT();
  ------------------
  |  |   63|    537|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    537|  {                            \
  |  |  |  |   57|    537|    auto ce = (call);          \
  |  |  |  |   58|    537|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 536]
  |  |  |  |  ------------------
  |  |  |  |   59|    537|  }
  |  |  ------------------
  ------------------
 3482|    536|      } else
 3483|     69|        return TokenError();
 3484|  11.8k|  }
 3485|  9.50k|  return NoError();
 3486|  11.8k|}
_ZN11flatbuffers6Parser30ParseFlexBufferNumericConstantEPN11flexbuffers7BuilderE:
 3489|  2.04k|    flexbuffers::Builder* builder) {
 3490|  2.04k|  double d;
 3491|  2.04k|  if (!StringToNumber(attribute_.c_str(), &d))
  ------------------
  |  Branch (3491:7): [True: 19, False: 2.02k]
  ------------------
 3492|     19|    return Error("unexpected floating-point constant: " + attribute_);
 3493|  2.02k|  builder->Double(d);
 3494|  2.02k|  return NoError();
 3495|  2.04k|}
_ZN11flatbuffers6Parser20ParseFlexBufferValueEPN11flexbuffers7BuilderE:
 3497|   335k|CheckedError Parser::ParseFlexBufferValue(flexbuffers::Builder* builder) {
 3498|   335k|  ParseDepthGuard depth_guard(this);
 3499|   335k|  ECHECK(depth_guard.Check());
  ------------------
  |  |   56|   335k|  {                            \
  |  |   57|   335k|    auto ce = (call);          \
  |  |   58|   335k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 6, False: 335k]
  |  |  ------------------
  |  |   59|   335k|  }
  ------------------
 3500|       |
 3501|   335k|  switch (token_) {
 3502|  45.1k|    case '{': {
  ------------------
  |  Branch (3502:5): [True: 45.1k, False: 290k]
  ------------------
 3503|  45.1k|      auto start = builder->StartMap();
 3504|  45.1k|      size_t fieldn_outer = 0;
 3505|  45.1k|      auto err =
 3506|  45.1k|          ParseTableDelimiters(fieldn_outer, nullptr,
 3507|  45.1k|                               [&](const std::string& name, size_t& fieldn,
 3508|  45.1k|                                   const StructDef*) -> CheckedError {
 3509|  45.1k|                                 builder->Key(name);
 3510|  45.1k|                                 ECHECK(ParseFlexBufferValue(builder));
 3511|  45.1k|                                 fieldn++;
 3512|  45.1k|                                 return NoError();
 3513|  45.1k|                               });
 3514|  45.1k|      ECHECK(err);
  ------------------
  |  |   56|  45.1k|  {                            \
  |  |   57|  45.1k|    auto ce = (call);          \
  |  |   58|  45.1k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 880, False: 44.2k]
  |  |  ------------------
  |  |   59|  45.1k|  }
  ------------------
 3515|  44.2k|      builder->EndMap(start);
 3516|  44.2k|      if (builder->HasDuplicateKeys())
  ------------------
  |  Branch (3516:11): [True: 1.81k, False: 42.4k]
  ------------------
 3517|  1.81k|        return Error("FlexBuffers map has duplicate keys");
 3518|  42.4k|      break;
 3519|  44.2k|    }
 3520|  42.4k|    case '[': {
  ------------------
  |  Branch (3520:5): [True: 5.57k, False: 330k]
  ------------------
 3521|  5.57k|      auto start = builder->StartVector();
 3522|  5.57k|      size_t count = 0;
 3523|  5.57k|      ECHECK(ParseVectorDelimiters(count, [&](size_t&) -> CheckedError {
  ------------------
  |  |   56|  5.57k|  {                            \
  |  |   57|  5.57k|    auto ce = (call);          \
  |  |   58|  5.57k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 860, False: 4.71k]
  |  |  ------------------
  |  |   59|  5.57k|  }
  ------------------
 3524|  5.57k|        return ParseFlexBufferValue(builder);
 3525|  5.57k|      }));
 3526|  4.71k|      builder->EndVector(start, false, false);
 3527|  4.71k|      break;
 3528|  5.57k|    }
 3529|  4.36k|    case kTokenStringConstant:
  ------------------
  |  Branch (3529:5): [True: 4.36k, False: 331k]
  ------------------
 3530|  4.36k|      builder->String(attribute_);
 3531|  4.36k|      EXPECT(kTokenStringConstant);
  ------------------
  |  |   64|  4.36k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  4.36k|  {                            \
  |  |  |  |   57|  4.36k|    auto ce = (call);          \
  |  |  |  |   58|  4.36k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 27, False: 4.33k]
  |  |  |  |  ------------------
  |  |  |  |   59|  4.36k|  }
  |  |  ------------------
  ------------------
 3532|  4.33k|      break;
 3533|   241k|    case kTokenIntegerConstant:
  ------------------
  |  Branch (3533:5): [True: 241k, False: 94.7k]
  ------------------
 3534|   241k|      builder->Int(StringToInt(attribute_.c_str()));
 3535|   241k|      EXPECT(kTokenIntegerConstant);
  ------------------
  |  |   64|   241k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|   241k|  {                            \
  |  |  |  |   57|   241k|    auto ce = (call);          \
  |  |  |  |   58|   241k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 17, False: 241k]
  |  |  |  |  ------------------
  |  |  |  |   59|   241k|  }
  |  |  ------------------
  ------------------
 3536|   241k|      break;
 3537|  35.9k|    case kTokenFloatConstant: {
  ------------------
  |  Branch (3537:5): [True: 35.9k, False: 299k]
  ------------------
 3538|  35.9k|      double d;
 3539|  35.9k|      StringToNumber(attribute_.c_str(), &d);
 3540|  35.9k|      builder->Double(d);
 3541|  35.9k|      EXPECT(kTokenFloatConstant);
  ------------------
  |  |   64|  35.9k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  35.9k|  {                            \
  |  |  |  |   57|  35.9k|    auto ce = (call);          \
  |  |  |  |   58|  35.9k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 3, False: 35.9k]
  |  |  |  |  ------------------
  |  |  |  |   59|  35.9k|  }
  |  |  ------------------
  ------------------
 3542|  35.9k|      break;
 3543|  35.9k|    }
 3544|    203|    case '-':
  ------------------
  |  Branch (3544:5): [True: 203, False: 335k]
  ------------------
 3545|    650|    case '+': {
  ------------------
  |  Branch (3545:5): [True: 447, False: 335k]
  ------------------
 3546|       |      // `[-+]?(nan|inf|infinity)`, see ParseSingleValue().
 3547|    650|      const auto sign = static_cast<char>(token_);
 3548|    650|      NEXT();
  ------------------
  |  |   63|    650|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    650|  {                            \
  |  |  |  |   57|    650|    auto ce = (call);          \
  |  |  |  |   58|    650|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 0, False: 650]
  |  |  |  |  ------------------
  |  |  |  |   59|    650|  }
  |  |  ------------------
  ------------------
 3549|    650|      if (token_ != kTokenIdentifier)
  ------------------
  |  Branch (3549:11): [True: 0, False: 650]
  ------------------
 3550|      0|        return Error("floating-point constant expected");
 3551|    650|      attribute_.insert(size_t(0), size_t(1), sign);
 3552|    650|      ECHECK(ParseFlexBufferNumericConstant(builder));
  ------------------
  |  |   56|    650|  {                            \
  |  |   57|    650|    auto ce = (call);          \
  |  |   58|    650|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 19, False: 631]
  |  |  ------------------
  |  |   59|    650|  }
  ------------------
 3553|    631|      NEXT();
  ------------------
  |  |   63|    631|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    631|  {                            \
  |  |  |  |   57|    631|    auto ce = (call);          \
  |  |  |  |   58|    631|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 630]
  |  |  |  |  ------------------
  |  |  |  |   59|    631|  }
  |  |  ------------------
  ------------------
 3554|    630|      break;
 3555|    631|    }
 3556|  2.98k|    default:
  ------------------
  |  Branch (3556:5): [True: 2.98k, False: 332k]
  ------------------
 3557|  2.98k|      if (IsIdent("true")) {
  ------------------
  |  Branch (3557:11): [True: 639, False: 2.35k]
  ------------------
 3558|    639|        builder->Bool(true);
 3559|    639|        NEXT();
  ------------------
  |  |   63|    639|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    639|  {                            \
  |  |  |  |   57|    639|    auto ce = (call);          \
  |  |  |  |   58|    639|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 638]
  |  |  |  |  ------------------
  |  |  |  |   59|    639|  }
  |  |  ------------------
  ------------------
 3560|  2.35k|      } else if (IsIdent("false")) {
  ------------------
  |  Branch (3560:18): [True: 400, False: 1.95k]
  ------------------
 3561|    400|        builder->Bool(false);
 3562|    400|        NEXT();
  ------------------
  |  |   63|    400|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    400|  {                            \
  |  |  |  |   57|    400|    auto ce = (call);          \
  |  |  |  |   58|    400|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 398]
  |  |  |  |  ------------------
  |  |  |  |   59|    400|  }
  |  |  ------------------
  ------------------
 3563|  1.95k|      } else if (IsIdent("null")) {
  ------------------
  |  Branch (3563:18): [True: 390, False: 1.56k]
  ------------------
 3564|    390|        builder->Null();
 3565|    390|        NEXT();
  ------------------
  |  |   63|    390|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    390|  {                            \
  |  |  |  |   57|    390|    auto ce = (call);          \
  |  |  |  |   58|    390|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 389]
  |  |  |  |  ------------------
  |  |  |  |   59|    390|  }
  |  |  ------------------
  ------------------
 3566|  1.56k|      } else if (IsIdent("inf") || IsIdent("infinity") || IsIdent("nan")) {
  ------------------
  |  Branch (3566:18): [True: 785, False: 775]
  |  Branch (3566:36): [True: 234, False: 541]
  |  Branch (3566:59): [True: 378, False: 163]
  ------------------
 3567|  1.39k|        ECHECK(ParseFlexBufferNumericConstant(builder));
  ------------------
  |  |   56|  1.39k|  {                            \
  |  |   57|  1.39k|    auto ce = (call);          \
  |  |   58|  1.39k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 0, False: 1.39k]
  |  |  ------------------
  |  |   59|  1.39k|  }
  ------------------
 3568|  1.39k|        NEXT();
  ------------------
  |  |   63|  1.39k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  1.39k|  {                            \
  |  |  |  |   57|  1.39k|    auto ce = (call);          \
  |  |  |  |   58|  1.39k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 5, False: 1.39k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.39k|  }
  |  |  ------------------
  ------------------
 3569|  1.39k|      } else
 3570|    163|        return TokenError();
 3571|   335k|  }
 3572|   331k|  return NoError();
 3573|   335k|}
_ZN11flatbuffers6Parser5ParseEPKcPS2_S2_:
 3587|  28.1k|                   const char* source_filename) {
 3588|  28.1k|  const auto initial_depth = parse_depth_counter_;
 3589|  28.1k|  (void)initial_depth;
 3590|  28.1k|  bool r;
 3591|       |
 3592|  28.1k|  if (opts.use_flexbuffers) {
  ------------------
  |  Branch (3592:7): [True: 0, False: 28.1k]
  ------------------
 3593|      0|    r = ParseFlexBuffer(source, source_filename, &flex_builder_);
 3594|  28.1k|  } else {
 3595|  28.1k|    r = !ParseRoot(source, include_paths, source_filename).Check();
 3596|  28.1k|  }
 3597|  28.1k|  FLATBUFFERS_ASSERT(initial_depth == parse_depth_counter_);
 3598|  28.1k|  return r;
 3599|  28.1k|}
_ZN11flatbuffers6Parser14StartParseFileEPKcS2_:
 3616|  28.2k|                                    const char* source_filename) {
 3617|  28.2k|  file_being_parsed_ = source_filename ? source_filename : "";
  ------------------
  |  Branch (3617:24): [True: 15, False: 28.1k]
  ------------------
 3618|  28.2k|  source_ = source;
 3619|  28.2k|  ResetState(source_);
 3620|  28.2k|  error_.clear();
 3621|  28.2k|  ECHECK(SkipByteOrderMark());
  ------------------
  |  |   56|  28.2k|  {                            \
  |  |   57|  28.2k|    auto ce = (call);          \
  |  |   58|  28.2k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 19, False: 28.1k]
  |  |  ------------------
  |  |   59|  28.2k|  }
  ------------------
 3622|  28.1k|  NEXT();
  ------------------
  |  |   63|  28.1k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  28.1k|  {                            \
  |  |  |  |   57|  28.1k|    auto ce = (call);          \
  |  |  |  |   58|  28.1k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 525, False: 27.6k]
  |  |  |  |  ------------------
  |  |  |  |   59|  28.1k|  }
  |  |  ------------------
  ------------------
 3623|  27.6k|  if (Is(kTokenEof)) return Error("input file is empty");
  ------------------
  |  Branch (3623:7): [True: 120, False: 27.5k]
  ------------------
 3624|  27.5k|  return NoError();
 3625|  27.6k|}
_ZN11flatbuffers6Parser9ParseRootEPKcPS2_S2_:
 3628|  28.1k|                               const char* source_filename) {
 3629|  28.1k|  ECHECK(DoParse(source, include_paths, source_filename, nullptr));
  ------------------
  |  |   56|  28.1k|  {                            \
  |  |   57|  28.1k|    auto ce = (call);          \
  |  |   58|  28.1k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 11.8k, False: 16.3k]
  |  |  ------------------
  |  |   59|  28.1k|  }
  ------------------
 3630|       |
 3631|       |  // Check that all types were defined.
 3632|  82.2k|  for (auto it = structs_.vec.begin(); it != structs_.vec.end();) {
  ------------------
  |  Branch (3632:40): [True: 68.6k, False: 13.5k]
  ------------------
 3633|  68.6k|    auto& struct_def = **it;
 3634|  68.6k|    if (struct_def.predecl) {
  ------------------
  |  Branch (3634:9): [True: 2.81k, False: 65.8k]
  ------------------
 3635|  2.81k|      if (opts.proto_mode) {
  ------------------
  |  Branch (3635:11): [True: 0, False: 2.81k]
  ------------------
 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.81k|      auto err = "type referenced but not defined (check namespace): " +
 3681|  2.81k|                 struct_def.name;
 3682|  2.81k|      if (struct_def.original_location)
  ------------------
  |  Branch (3682:11): [True: 2.81k, False: 0]
  ------------------
 3683|  2.81k|        err += ", originally at: " + *struct_def.original_location;
 3684|  2.81k|      return Error(err);
 3685|  2.81k|    }
 3686|  65.8k|    ++it;
 3687|  65.8k|  }
 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|  93.9k|  for (auto it = enums_.vec.begin(); it != enums_.vec.end(); ++it) {
  ------------------
  |  Branch (3691:38): [True: 80.4k, False: 13.5k]
  ------------------
 3692|  80.4k|    auto& enum_def = **it;
 3693|  80.4k|    if (enum_def.is_union) {
  ------------------
  |  Branch (3693:9): [True: 77.7k, False: 2.65k]
  ------------------
 3694|  77.7k|      for (auto val_it = enum_def.Vals().begin();
 3695|   155k|           val_it != enum_def.Vals().end(); ++val_it) {
  ------------------
  |  Branch (3695:12): [True: 78.0k, False: 77.7k]
  ------------------
 3696|  78.0k|        auto& val = **val_it;
 3697|       |
 3698|  78.0k|        if (!(opts.lang_to_generate != 0 && SupportsAdvancedUnionFeatures()) &&
  ------------------
  |  Branch (3698:15): [True: 0, False: 78.0k]
  |  Branch (3698:45): [True: 0, False: 0]
  ------------------
 3699|  78.0k|            (IsStruct(val.union_type) || IsString(val.union_type)))
  ------------------
  |  Branch (3699:14): [True: 1, False: 78.0k]
  |  Branch (3699:42): [True: 1, False: 78.0k]
  ------------------
 3700|       |
 3701|      2|          return Error(
 3702|      2|              "only tables can be union elements in the generated language: " +
 3703|      2|              val.name);
 3704|  78.0k|      }
 3705|  77.7k|    }
 3706|  80.4k|  }
 3707|       |
 3708|  13.5k|  auto err = CheckPrivateLeak();
 3709|  13.5k|  if (err.Check()) return err;
  ------------------
  |  Branch (3709:7): [True: 0, False: 13.5k]
  ------------------
 3710|       |
 3711|       |  // Parse JSON object only if the scheme has been parsed.
 3712|  13.5k|  if (token_ == '{') {
  ------------------
  |  Branch (3712:7): [True: 8.55k, False: 4.97k]
  ------------------
 3713|  8.55k|    ECHECK(DoParseJson());
  ------------------
  |  |   56|  8.55k|  {                            \
  |  |   57|  8.55k|    auto ce = (call);          \
  |  |   58|  8.55k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 8.32k, False: 229]
  |  |  ------------------
  |  |   59|  8.55k|  }
  ------------------
 3714|    229|  }
 3715|  5.20k|  return NoError();
 3716|  13.5k|}
_ZN11flatbuffers6Parser16CheckPrivateLeakEv:
 3718|  13.5k|CheckedError Parser::CheckPrivateLeak() {
 3719|  13.5k|  if (!opts.no_leak_private_annotations) return NoError();
  ------------------
  |  Branch (3719:7): [True: 13.5k, 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|  28.2k|                             const char* include_filename) {
 3780|  28.2k|  uint64_t source_hash = 0;
 3781|  28.2k|  if (source_filename) {
  ------------------
  |  Branch (3781:7): [True: 15, False: 28.1k]
  ------------------
 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|     15|    if (FileExists(source_filename))
  ------------------
  |  Branch (3784:9): [True: 15, False: 0]
  ------------------
 3785|     15|      source_hash = HashFile(source_filename, source);
 3786|      0|    else
 3787|      0|      source_hash = HashFile(source_filename, nullptr);
 3788|       |
 3789|     15|    if (included_files_.find(source_hash) == included_files_.end()) {
  ------------------
  |  Branch (3789:9): [True: 15, False: 0]
  ------------------
 3790|     15|      included_files_[source_hash] = include_filename ? include_filename : "";
  ------------------
  |  Branch (3790:38): [True: 15, False: 0]
  ------------------
 3791|     15|      files_included_per_file_[source_filename] = std::set<IncludedFile>();
 3792|     15|    } else {
 3793|      0|      return NoError();
 3794|      0|    }
 3795|     15|  }
 3796|  28.2k|  if (!include_paths) {
  ------------------
  |  Branch (3796:7): [True: 28.1k, False: 15]
  ------------------
 3797|  28.1k|    static const char* current_directory[] = {"", nullptr};
 3798|  28.1k|    include_paths = current_directory;
 3799|  28.1k|  }
 3800|  28.2k|  field_stack_.clear();
 3801|  28.2k|  builder_.Clear();
 3802|       |  // Start with a blank namespace just in case this file doesn't have one.
 3803|  28.2k|  current_namespace_ = empty_namespace_;
 3804|       |
 3805|  28.2k|  ECHECK(StartParseFile(source, source_filename));
  ------------------
  |  |   56|  28.2k|  {                            \
  |  |   57|  28.2k|    auto ce = (call);          \
  |  |   58|  28.2k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 664, False: 27.5k]
  |  |  ------------------
  |  |   59|  28.2k|  }
  ------------------
 3806|       |
 3807|       |  // Includes must come before type declarations:
 3808|  28.1k|  for (;;) {
 3809|       |    // Parse pre-include proto statements if any:
 3810|  28.1k|    if (opts.proto_mode && (attribute_ == "option" || attribute_ == "syntax" ||
  ------------------
  |  Branch (3810:9): [True: 0, False: 28.1k]
  |  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|  28.1k|    } else if (IsIdent("native_include")) {
  ------------------
  |  Branch (3813:16): [True: 577, False: 27.5k]
  ------------------
 3814|    577|      NEXT();
  ------------------
  |  |   63|    577|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    577|  {                            \
  |  |  |  |   57|    577|    auto ce = (call);          \
  |  |  |  |   58|    577|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 576]
  |  |  |  |  ------------------
  |  |  |  |   59|    577|  }
  |  |  ------------------
  ------------------
 3815|    576|      native_included_files_.emplace_back(attribute_);
 3816|    576|      EXPECT(kTokenStringConstant);
  ------------------
  |  |   64|    576|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|    576|  {                            \
  |  |  |  |   57|    576|    auto ce = (call);          \
  |  |  |  |   58|    576|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 14, False: 562]
  |  |  |  |  ------------------
  |  |  |  |   59|    576|  }
  |  |  ------------------
  ------------------
 3817|    562|      EXPECT(';');
  ------------------
  |  |   64|    562|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|    562|  {                            \
  |  |  |  |   57|    562|    auto ce = (call);          \
  |  |  |  |   58|    562|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 3, False: 559]
  |  |  |  |  ------------------
  |  |  |  |   59|    562|  }
  |  |  ------------------
  ------------------
 3818|  27.5k|    } else if (IsIdent("include") || (opts.proto_mode && IsIdent("import"))) {
  ------------------
  |  Branch (3818:16): [True: 168, False: 27.3k]
  |  Branch (3818:39): [True: 0, False: 27.3k]
  |  Branch (3818:58): [True: 0, False: 0]
  ------------------
 3819|    168|      NEXT();
  ------------------
  |  |   63|    168|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    168|  {                            \
  |  |  |  |   57|    168|    auto ce = (call);          \
  |  |  |  |   58|    168|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 167]
  |  |  |  |  ------------------
  |  |  |  |   59|    168|  }
  |  |  ------------------
  ------------------
 3820|    167|      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: 167]
  |  Branch (3820:30): [True: 0, False: 0]
  ------------------
 3821|    167|      auto name = flatbuffers::PosixPath(attribute_.c_str());
 3822|    167|      EXPECT(kTokenStringConstant);
  ------------------
  |  |   64|    167|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|    167|  {                            \
  |  |  |  |   57|    167|    auto ce = (call);          \
  |  |  |  |   58|    167|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 28, False: 139]
  |  |  |  |  ------------------
  |  |  |  |   59|    167|  }
  |  |  ------------------
  ------------------
 3823|       |      // Look for the file relative to the directory of the current file.
 3824|    139|      std::string filepath;
 3825|    139|      if (source_filename) {
  ------------------
  |  Branch (3825:11): [True: 0, False: 139]
  ------------------
 3826|      0|        auto source_file_directory =
 3827|      0|            flatbuffers::StripFileName(source_filename);
 3828|      0|        filepath = flatbuffers::ConCatPathFileName(source_file_directory, name);
 3829|      0|      }
 3830|    139|      if (filepath.empty() || !FileExists(filepath.c_str())) {
  ------------------
  |  Branch (3830:11): [True: 139, False: 0]
  |  Branch (3830:31): [True: 0, False: 0]
  ------------------
 3831|       |        // Look for the file in include_paths.
 3832|    254|        for (auto paths = include_paths; paths && *paths; paths++) {
  ------------------
  |  Branch (3832:42): [True: 254, False: 0]
  |  Branch (3832:51): [True: 139, False: 115]
  ------------------
 3833|    139|          filepath = flatbuffers::ConCatPathFileName(*paths, name);
 3834|    139|          if (FileExists(filepath.c_str())) break;
  ------------------
  |  Branch (3834:15): [True: 24, False: 115]
  ------------------
 3835|    139|        }
 3836|    139|      }
 3837|    139|      if (filepath.empty())
  ------------------
  |  Branch (3837:11): [True: 3, False: 136]
  ------------------
 3838|      3|        return Error("unable to locate include file: " + name);
 3839|    136|      if (source_filename) {
  ------------------
  |  Branch (3839:11): [True: 0, False: 136]
  ------------------
 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|    136|      std::string contents;
 3847|    136|      bool file_loaded = LoadFile(filepath.c_str(), true, &contents);
 3848|    136|      if (included_files_.find(HashFile(filepath.c_str(), contents.c_str())) ==
  ------------------
  |  Branch (3848:11): [True: 136, False: 0]
  ------------------
 3849|    136|          included_files_.end()) {
 3850|       |        // We found an include file that we have not parsed yet.
 3851|       |        // Parse it.
 3852|    136|        if (!file_loaded) return Error("unable to load include file: " + name);
  ------------------
  |  Branch (3852:13): [True: 121, False: 15]
  ------------------
 3853|     15|        ECHECK(DoParse(contents.c_str(), include_paths, filepath.c_str(),
  ------------------
  |  |   56|     15|  {                            \
  |  |   57|     15|    auto ce = (call);          \
  |  |   58|     15|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 15, False: 0]
  |  |  ------------------
  |  |   59|     15|  }
  ------------------
 3854|     15|                       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|     15|      }
 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|  27.3k|    } else {
 3875|  27.3k|      break;
 3876|  27.3k|    }
 3877|  28.1k|  }
 3878|       |  // Now parse all other kinds of declarations:
 3879|   237k|  while (token_ != kTokenEof) {
  ------------------
  |  Branch (3879:10): [True: 229k, False: 7.78k]
  ------------------
 3880|   229k|    if (opts.proto_mode) {
  ------------------
  |  Branch (3880:9): [True: 0, False: 229k]
  ------------------
 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|   229k|    } else if (IsIdent("namespace")) {
  ------------------
  |  Branch (3882:16): [True: 20.1k, False: 209k]
  ------------------
 3883|  20.1k|      ECHECK(ParseNamespace());
  ------------------
  |  |   56|  20.1k|  {                            \
  |  |   57|  20.1k|    auto ce = (call);          \
  |  |   58|  20.1k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 183, False: 19.9k]
  |  |  ------------------
  |  |   59|  20.1k|  }
  ------------------
 3884|   209k|    } else if (token_ == '{') {
  ------------------
  |  Branch (3884:16): [True: 8.56k, False: 200k]
  ------------------
 3885|  8.56k|      return NoError();
 3886|   200k|    } else if (IsIdent("enum")) {
  ------------------
  |  Branch (3886:16): [True: 12.6k, False: 188k]
  ------------------
 3887|  12.6k|      ECHECK(ParseEnum(false, nullptr, source_filename));
  ------------------
  |  |   56|  12.6k|  {                            \
  |  |   57|  12.6k|    auto ce = (call);          \
  |  |   58|  12.6k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 2.59k, False: 10.0k]
  |  |  ------------------
  |  |   59|  12.6k|  }
  ------------------
 3888|   188k|    } else if (IsIdent("union")) {
  ------------------
  |  Branch (3888:16): [True: 93.7k, False: 94.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.85k, False: 90.9k]
  |  |  ------------------
  |  |   59|  93.7k|  }
  ------------------
 3890|  94.4k|    } else if (IsIdent("root_type")) {
  ------------------
  |  Branch (3890:16): [True: 9.43k, False: 84.9k]
  ------------------
 3891|  9.43k|      NEXT();
  ------------------
  |  |   63|  9.43k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  9.43k|  {                            \
  |  |  |  |   57|  9.43k|    auto ce = (call);          \
  |  |  |  |   58|  9.43k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 9.43k]
  |  |  |  |  ------------------
  |  |  |  |   59|  9.43k|  }
  |  |  ------------------
  ------------------
 3892|  9.43k|      auto root_type = attribute_;
 3893|  9.43k|      EXPECT(kTokenIdentifier);
  ------------------
  |  |   64|  9.43k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  9.43k|  {                            \
  |  |  |  |   57|  9.43k|    auto ce = (call);          \
  |  |  |  |   58|  9.43k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 5, False: 9.43k]
  |  |  |  |  ------------------
  |  |  |  |   59|  9.43k|  }
  |  |  ------------------
  ------------------
 3894|  9.43k|      ECHECK(ParseNamespacing(&root_type, nullptr));
  ------------------
  |  |   56|  9.43k|  {                            \
  |  |   57|  9.43k|    auto ce = (call);          \
  |  |   58|  9.43k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 8, False: 9.42k]
  |  |  ------------------
  |  |   59|  9.43k|  }
  ------------------
 3895|  9.42k|      if (opts.root_type.empty()) {
  ------------------
  |  Branch (3895:11): [True: 9.42k, False: 0]
  ------------------
 3896|  9.42k|        if (!SetRootType(root_type.c_str()))
  ------------------
  |  Branch (3896:13): [True: 35, False: 9.38k]
  ------------------
 3897|     35|          return Error("unknown root type: " + root_type);
 3898|  9.38k|        if (root_struct_def_->fixed) return Error("root type must be a table");
  ------------------
  |  Branch (3898:13): [True: 1, False: 9.38k]
  ------------------
 3899|  9.38k|      }
 3900|  9.38k|      EXPECT(';');
  ------------------
  |  |   64|  9.38k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  9.38k|  {                            \
  |  |  |  |   57|  9.38k|    auto ce = (call);          \
  |  |  |  |   58|  9.38k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 12, False: 9.37k]
  |  |  |  |  ------------------
  |  |  |  |   59|  9.38k|  }
  |  |  ------------------
  ------------------
 3901|  84.9k|    } else if (IsIdent("file_identifier")) {
  ------------------
  |  Branch (3901:16): [True: 87, False: 84.9k]
  ------------------
 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|  84.9k|    } else if (IsIdent("file_extension")) {
  ------------------
  |  Branch (3910:16): [True: 89, False: 84.8k]
  ------------------
 3911|     89|      NEXT();
  ------------------
  |  |   63|     89|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|     89|  {                            \
  |  |  |  |   57|     89|    auto ce = (call);          \
  |  |  |  |   58|     89|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 88]
  |  |  |  |  ------------------
  |  |  |  |   59|     89|  }
  |  |  ------------------
  ------------------
 3912|     88|      file_extension_ = attribute_;
 3913|     88|      EXPECT(kTokenStringConstant);
  ------------------
  |  |   64|     88|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|     88|  {                            \
  |  |  |  |   57|     88|    auto ce = (call);          \
  |  |  |  |   58|     88|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 86]
  |  |  |  |  ------------------
  |  |  |  |   59|     88|  }
  |  |  ------------------
  ------------------
 3914|     86|      EXPECT(';');
  ------------------
  |  |   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: 1, False: 85]
  |  |  |  |  ------------------
  |  |  |  |   59|     86|  }
  |  |  ------------------
  ------------------
 3915|  84.8k|    } else if (IsIdent("include")) {
  ------------------
  |  Branch (3915:16): [True: 1, False: 84.8k]
  ------------------
 3916|      1|      return Error("includes must come before declarations");
 3917|  84.8k|    } else if (IsIdent("attribute")) {
  ------------------
  |  Branch (3917:16): [True: 6.01k, False: 78.8k]
  ------------------
 3918|  6.01k|      NEXT();
  ------------------
  |  |   63|  6.01k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  6.01k|  {                            \
  |  |  |  |   57|  6.01k|    auto ce = (call);          \
  |  |  |  |   58|  6.01k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 3, False: 6.00k]
  |  |  |  |  ------------------
  |  |  |  |   59|  6.01k|  }
  |  |  ------------------
  ------------------
 3919|  6.00k|      auto name = attribute_;
 3920|  6.00k|      if (Is(kTokenIdentifier)) {
  ------------------
  |  Branch (3920:11): [True: 4.49k, False: 1.50k]
  ------------------
 3921|  4.49k|        NEXT();
  ------------------
  |  |   63|  4.49k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   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|  }
  |  |  ------------------
  ------------------
 3922|  4.49k|      } else {
 3923|  1.50k|        EXPECT(kTokenStringConstant);
  ------------------
  |  |   64|  1.50k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  1.50k|  {                            \
  |  |  |  |   57|  1.50k|    auto ce = (call);          \
  |  |  |  |   58|  1.50k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 10, False: 1.49k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.50k|  }
  |  |  ------------------
  ------------------
 3924|  1.49k|      }
 3925|  5.99k|      EXPECT(';');
  ------------------
  |  |   64|  5.99k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  5.99k|  {                            \
  |  |  |  |   57|  5.99k|    auto ce = (call);          \
  |  |  |  |   58|  5.99k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 13, False: 5.98k]
  |  |  |  |  ------------------
  |  |  |  |   59|  5.99k|  }
  |  |  ------------------
  ------------------
 3926|  5.98k|      known_attributes_[name] = false;
 3927|  78.8k|    } else if (IsIdent("rpc_service")) {
  ------------------
  |  Branch (3927:16): [True: 2.48k, False: 76.3k]
  ------------------
 3928|  2.48k|      ECHECK(ParseService(source_filename));
  ------------------
  |  |   56|  2.48k|  {                            \
  |  |   57|  2.48k|    auto ce = (call);          \
  |  |   58|  2.48k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 389, False: 2.09k]
  |  |  ------------------
  |  |   59|  2.48k|  }
  ------------------
 3929|  76.3k|    } else {
 3930|  76.3k|      ECHECK(ParseDecl(source_filename));
  ------------------
  |  |   56|  76.3k|  {                            \
  |  |   57|  76.3k|    auto ce = (call);          \
  |  |   58|  76.3k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 4.89k, False: 71.4k]
  |  |  ------------------
  |  |   59|  76.3k|  }
  ------------------
 3931|  71.4k|    }
 3932|   229k|  }
 3933|  7.78k|  EXPECT(kTokenEof);
  ------------------
  |  |   64|  7.78k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  7.78k|  {                            \
  |  |  |  |   57|  7.78k|    auto ce = (call);          \
  |  |  |  |   58|  7.78k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 0, False: 7.78k]
  |  |  |  |  ------------------
  |  |  |  |   59|  7.78k|  }
  |  |  ------------------
  ------------------
 3934|  7.78k|  if (opts.warnings_as_errors && has_warning_) {
  ------------------
  |  Branch (3934:7): [True: 0, False: 7.78k]
  |  Branch (3934:34): [True: 0, False: 0]
  ------------------
 3935|      0|    return Error("treating warnings as errors, failed due to above warnings");
 3936|      0|  }
 3937|  7.78k|  return NoError();
 3938|  7.78k|}
_ZN11flatbuffers6Parser11DoParseJsonEv:
 3940|  8.55k|CheckedError Parser::DoParseJson() {
 3941|  8.55k|  if (token_ != '{') {
  ------------------
  |  Branch (3941:7): [True: 0, False: 8.55k]
  ------------------
 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.55k|  } else {
 3944|  8.55k|    if (!root_struct_def_) return Error("no root type set to parse json with");
  ------------------
  |  Branch (3944:9): [True: 6, False: 8.54k]
  ------------------
 3945|  8.54k|    if (builder_.GetSize()) {
  ------------------
  |  Branch (3945:9): [True: 0, False: 8.54k]
  ------------------
 3946|      0|      return Error("cannot have more than one json object in a file");
 3947|      0|    }
 3948|  8.54k|    uoffset_t toff;
 3949|  8.54k|    ECHECK(ParseTable(*root_struct_def_, nullptr, &toff));
  ------------------
  |  |   56|  8.54k|  {                            \
  |  |   57|  8.54k|    auto ce = (call);          \
  |  |   58|  8.54k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 8.28k, False: 258]
  |  |  ------------------
  |  |   59|  8.54k|  }
  ------------------
 3950|    258|    if (opts.size_prefixed) {
  ------------------
  |  Branch (3950:9): [True: 0, False: 258]
  ------------------
 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|    258|    } else {
 3955|    258|      builder_.Finish(Offset<Table>(toff), file_identifier_.length()
  ------------------
  |  Branch (3955:44): [True: 2, False: 256]
  ------------------
 3956|    258|                                               ? file_identifier_.c_str()
 3957|    258|                                               : nullptr);
 3958|    258|    }
 3959|    258|  }
 3960|    258|  if (opts.require_json_eof) {
  ------------------
  |  Branch (3960:7): [True: 258, False: 0]
  ------------------
 3961|       |    // Check that JSON file doesn't contain more objects or IDL directives.
 3962|       |    // Comments after JSON are allowed.
 3963|    258|    EXPECT(kTokenEof);
  ------------------
  |  |   64|    258|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|    258|  {                            \
  |  |  |  |   57|    258|    auto ce = (call);          \
  |  |  |  |   58|    258|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 29, False: 229]
  |  |  |  |  ------------------
  |  |  |  |   59|    258|  }
  |  |  ------------------
  ------------------
 3964|    229|  }
 3965|    229|  return NoError();
 3966|    258|}
_ZN11flatbuffers6Parser9SerializeEv:
 4036|  5.20k|void Parser::Serialize() {
 4037|  5.20k|  builder_.Clear();
 4038|  5.20k|  AssignIndices(structs_.vec);
 4039|  5.20k|  AssignIndices(enums_.vec);
 4040|  5.20k|  std::vector<Offset<reflection::Object>> object_offsets;
 4041|  5.20k|  std::set<std::string> files;
 4042|  60.6k|  for (auto it = structs_.vec.begin(); it != structs_.vec.end(); ++it) {
  ------------------
  |  Branch (4042:40): [True: 55.3k, False: 5.20k]
  ------------------
 4043|  55.3k|    auto offset = (*it)->Serialize(&builder_, *this);
 4044|  55.3k|    object_offsets.push_back(offset);
 4045|  55.3k|    (*it)->serialized_location = offset.o;
 4046|  55.3k|    const std::string* file = (*it)->declaration_file;
 4047|  55.3k|    if (file) files.insert(*file);
  ------------------
  |  Branch (4047:9): [True: 0, False: 55.3k]
  ------------------
 4048|  55.3k|  }
 4049|  5.20k|  std::vector<Offset<reflection::Enum>> enum_offsets;
 4050|  85.4k|  for (auto it = enums_.vec.begin(); it != enums_.vec.end(); ++it) {
  ------------------
  |  Branch (4050:38): [True: 80.2k, False: 5.20k]
  ------------------
 4051|  80.2k|    auto offset = (*it)->Serialize(&builder_, *this);
 4052|  80.2k|    enum_offsets.push_back(offset);
 4053|  80.2k|    const std::string* file = (*it)->declaration_file;
 4054|  80.2k|    if (file) files.insert(*file);
  ------------------
  |  Branch (4054:9): [True: 0, False: 80.2k]
  ------------------
 4055|  80.2k|  }
 4056|  5.20k|  std::vector<Offset<reflection::Service>> service_offsets;
 4057|  6.00k|  for (auto it = services_.vec.begin(); it != services_.vec.end(); ++it) {
  ------------------
  |  Branch (4057:41): [True: 793, False: 5.20k]
  ------------------
 4058|    793|    auto offset = (*it)->Serialize(&builder_, *this);
 4059|    793|    service_offsets.push_back(offset);
 4060|    793|    const std::string* file = (*it)->declaration_file;
 4061|    793|    if (file) files.insert(*file);
  ------------------
  |  Branch (4061:9): [True: 0, False: 793]
  ------------------
 4062|    793|  }
 4063|       |
 4064|       |  // Create Schemafiles vector of tables.
 4065|  5.20k|  flatbuffers::Offset<
 4066|  5.20k|      flatbuffers::Vector<flatbuffers::Offset<reflection::SchemaFile>>>
 4067|  5.20k|      schema_files__;
 4068|  5.20k|  if (!opts.project_root.empty()) {
  ------------------
  |  Branch (4068:7): [True: 0, False: 5.20k]
  ------------------
 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.20k|  const auto objs__ = builder_.CreateVectorOfSortedTables(&object_offsets);
 4090|  5.20k|  const auto enum__ = builder_.CreateVectorOfSortedTables(&enum_offsets);
 4091|  5.20k|  const auto fiid__ = builder_.CreateString(file_identifier_);
 4092|  5.20k|  const auto fext__ = builder_.CreateString(file_extension_);
 4093|  5.20k|  const auto serv__ = builder_.CreateVectorOfSortedTables(&service_offsets);
 4094|  5.20k|  const auto schema_offset = reflection::CreateSchema(
 4095|  5.20k|      builder_, objs__, enum__, fiid__, fext__,
 4096|  5.20k|      (root_struct_def_ ? root_struct_def_->serialized_location : 0), serv__,
  ------------------
  |  Branch (4096:8): [True: 241, False: 4.96k]
  ------------------
 4097|  5.20k|      static_cast<reflection::AdvancedFeatures>(advanced_features_),
 4098|  5.20k|      schema_files__);
 4099|  5.20k|  if (opts.size_prefixed) {
  ------------------
  |  Branch (4099:7): [True: 0, False: 5.20k]
  ------------------
 4100|      0|    builder_.FinishSizePrefixed(schema_offset, reflection::SchemaIdentifier());
 4101|  5.20k|  } else {
 4102|  5.20k|    builder_.Finish(schema_offset, reflection::SchemaIdentifier());
 4103|  5.20k|  }
 4104|  5.20k|}
_ZNK11flatbuffers9StructDef9SerializeEPNS_21FlatBufferBuilderImplILb0EEERKNS_6ParserE:
 4107|  55.3k|                                                const Parser& parser) const {
 4108|  55.3k|  std::vector<Offset<reflection::Field>> field_offsets;
 4109|  94.3k|  for (auto it = fields.vec.begin(); it != fields.vec.end(); ++it) {
  ------------------
  |  Branch (4109:38): [True: 38.9k, False: 55.3k]
  ------------------
 4110|  38.9k|    field_offsets.push_back((*it)->Serialize(
 4111|  38.9k|        builder, static_cast<uint16_t>(it - fields.vec.begin()), parser));
 4112|  38.9k|  }
 4113|  55.3k|  const auto qualified_name = defined_namespace->GetFullyQualifiedName(name);
 4114|  55.3k|  const auto name__ = builder->CreateString(qualified_name);
 4115|  55.3k|  const auto flds__ = builder->CreateVectorOfSortedTables(&field_offsets);
 4116|  55.3k|  const auto attr__ = SerializeAttributes(builder, parser);
 4117|  55.3k|  const auto docs__ = parser.opts.binary_schema_comments && !doc_comment.empty()
  ------------------
  |  Branch (4117:23): [True: 0, False: 55.3k]
  |  Branch (4117:61): [True: 0, False: 0]
  ------------------
 4118|  55.3k|                          ? builder->CreateVectorOfStrings(doc_comment)
 4119|  55.3k|                          : 0;
 4120|  55.3k|  std::string decl_file_in_project = declaration_file ? *declaration_file : "";
  ------------------
  |  Branch (4120:38): [True: 0, False: 55.3k]
  ------------------
 4121|  55.3k|  const auto file__ = builder->CreateSharedString(decl_file_in_project);
 4122|  55.3k|  return reflection::CreateObject(
 4123|  55.3k|      *builder, name__, flds__, fixed, static_cast<int>(minalign),
 4124|  55.3k|      static_cast<int>(bytesize), attr__, docs__, file__);
 4125|  55.3k|}
_ZNK11flatbuffers8FieldDef9SerializeEPNS_21FlatBufferBuilderImplILb0EEEtRKNS_6ParserE:
 4179|  38.9k|                                              const Parser& parser) const {
 4180|  38.9k|  auto name__ = builder->CreateString(name);
 4181|  38.9k|  auto type__ = value.type.Serialize(builder);
 4182|  38.9k|  auto attr__ = SerializeAttributes(builder, parser);
 4183|  38.9k|  auto docs__ = parser.opts.binary_schema_comments && !doc_comment.empty()
  ------------------
  |  Branch (4183:17): [True: 0, False: 38.9k]
  |  Branch (4183:55): [True: 0, False: 0]
  ------------------
 4184|  38.9k|                    ? builder->CreateVectorOfStrings(doc_comment)
 4185|  38.9k|                    : 0;
 4186|  38.9k|  double d;
 4187|  38.9k|  StringToNumber(value.constant.c_str(), &d);
 4188|  38.9k|  return reflection::CreateField(
 4189|  38.9k|      *builder, name__, type__, id, value.offset,
 4190|       |      // Is uint64>max(int64) tested?
 4191|  38.9k|      IsInteger(value.type.base_type) ? StringToInt(value.constant.c_str()) : 0,
  ------------------
  |  Branch (4191:7): [True: 12.6k, False: 26.3k]
  ------------------
 4192|       |      // result may be platform-dependent if underlying is float (not double)
 4193|  38.9k|      IsFloat(value.type.base_type) ? d : 0.0, deprecated, IsRequired(), key,
  ------------------
  |  Branch (4193:7): [True: 170, False: 38.8k]
  ------------------
 4194|  38.9k|      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.9k|}
_ZNK11flatbuffers7RPCCall9SerializeEPNS_21FlatBufferBuilderImplILb0EEERKNS_6ParserE:
 4234|  1.64k|                                               const Parser& parser) const {
 4235|  1.64k|  auto name__ = builder->CreateString(name);
 4236|  1.64k|  auto attr__ = SerializeAttributes(builder, parser);
 4237|  1.64k|  auto docs__ = parser.opts.binary_schema_comments && !doc_comment.empty()
  ------------------
  |  Branch (4237:17): [True: 0, False: 1.64k]
  |  Branch (4237:55): [True: 0, False: 0]
  ------------------
 4238|  1.64k|                    ? builder->CreateVectorOfStrings(doc_comment)
 4239|  1.64k|                    : 0;
 4240|  1.64k|  return reflection::CreateRPCCall(
 4241|  1.64k|      *builder, name__, request->serialized_location,
 4242|  1.64k|      response->serialized_location, attr__, docs__);
 4243|  1.64k|}
_ZNK11flatbuffers10ServiceDef9SerializeEPNS_21FlatBufferBuilderImplILb0EEERKNS_6ParserE:
 4258|    793|                                                  const Parser& parser) const {
 4259|    793|  std::vector<Offset<reflection::RPCCall>> servicecall_offsets;
 4260|  2.43k|  for (auto it = calls.vec.begin(); it != calls.vec.end(); ++it) {
  ------------------
  |  Branch (4260:37): [True: 1.64k, False: 793]
  ------------------
 4261|  1.64k|    servicecall_offsets.push_back((*it)->Serialize(builder, parser));
 4262|  1.64k|  }
 4263|    793|  const auto qualified_name = defined_namespace->GetFullyQualifiedName(name);
 4264|    793|  const auto name__ = builder->CreateString(qualified_name);
 4265|    793|  const auto call__ = builder->CreateVector(servicecall_offsets);
 4266|    793|  const auto attr__ = SerializeAttributes(builder, parser);
 4267|    793|  const auto docs__ = parser.opts.binary_schema_comments && !doc_comment.empty()
  ------------------
  |  Branch (4267:23): [True: 0, False: 793]
  |  Branch (4267:61): [True: 0, False: 0]
  ------------------
 4268|    793|                          ? builder->CreateVectorOfStrings(doc_comment)
 4269|    793|                          : 0;
 4270|    793|  std::string decl_file_in_project = declaration_file ? *declaration_file : "";
  ------------------
  |  Branch (4270:38): [True: 0, False: 793]
  ------------------
 4271|    793|  const auto file__ = builder->CreateSharedString(decl_file_in_project);
 4272|    793|  return reflection::CreateService(*builder, name__, call__, attr__, docs__,
 4273|    793|                                   file__);
 4274|    793|}
_ZNK11flatbuffers7EnumDef9SerializeEPNS_21FlatBufferBuilderImplILb0EEERKNS_6ParserE:
 4295|  80.2k|                                            const Parser& parser) const {
 4296|  80.2k|  std::vector<Offset<reflection::EnumVal>> enumval_offsets;
 4297|   194k|  for (auto it = vals.vec.begin(); it != vals.vec.end(); ++it) {
  ------------------
  |  Branch (4297:36): [True: 114k, False: 80.2k]
  ------------------
 4298|   114k|    enumval_offsets.push_back((*it)->Serialize(builder, parser));
 4299|   114k|  }
 4300|  80.2k|  const auto qualified_name = defined_namespace->GetFullyQualifiedName(name);
 4301|  80.2k|  const auto name__ = builder->CreateString(qualified_name);
 4302|  80.2k|  const auto vals__ = builder->CreateVector(enumval_offsets);
 4303|  80.2k|  const auto type__ = underlying_type.Serialize(builder);
 4304|  80.2k|  const auto attr__ = SerializeAttributes(builder, parser);
 4305|  80.2k|  const auto docs__ = parser.opts.binary_schema_comments && !doc_comment.empty()
  ------------------
  |  Branch (4305:23): [True: 0, False: 80.2k]
  |  Branch (4305:61): [True: 0, False: 0]
  ------------------
 4306|  80.2k|                          ? builder->CreateVectorOfStrings(doc_comment)
 4307|  80.2k|                          : 0;
 4308|  80.2k|  std::string decl_file_in_project = declaration_file ? *declaration_file : "";
  ------------------
  |  Branch (4308:38): [True: 0, False: 80.2k]
  ------------------
 4309|  80.2k|  const auto file__ = builder->CreateSharedString(decl_file_in_project);
 4310|  80.2k|  return reflection::CreateEnum(*builder, name__, vals__, is_union, type__,
 4311|  80.2k|                                attr__, docs__, file__);
 4312|  80.2k|}
_ZNK11flatbuffers7EnumVal19SerializeAttributesEPNS_21FlatBufferBuilderImplILb0EEERKNS_6ParserE:
 4336|   114k|                             const Parser& parser) const {
 4337|   114k|  return SerializeAttributesCommon(attributes, builder, parser);
 4338|   114k|}
_ZNK11flatbuffers7EnumVal9SerializeEPNS_21FlatBufferBuilderImplILb0EEERKNS_6ParserE:
 4346|   114k|                                               const Parser& parser) const {
 4347|   114k|  const auto name__ = builder->CreateString(name);
 4348|   114k|  const auto type__ = union_type.Serialize(builder);
 4349|   114k|  const auto attr__ = SerializeAttributes(builder, parser);
 4350|   114k|  const auto docs__ = parser.opts.binary_schema_comments && !doc_comment.empty()
  ------------------
  |  Branch (4350:23): [True: 0, False: 114k]
  |  Branch (4350:61): [True: 0, False: 0]
  ------------------
 4351|   114k|                          ? builder->CreateVectorOfStrings(doc_comment)
 4352|   114k|                          : 0;
 4353|   114k|  return reflection::CreateEnumVal(*builder, name__, value, type__, docs__,
 4354|   114k|                                   attr__);
 4355|   114k|}
_ZNK11flatbuffers4Type9SerializeEPNS_21FlatBufferBuilderImplILb0EEE:
 4366|   233k|Offset<reflection::Type> Type::Serialize(FlatBufferBuilder* builder) const {
 4367|   233k|  size_t element_size = SizeOf(element);
 4368|   233k|  if (base_type == BASE_TYPE_VECTOR && element == BASE_TYPE_STRUCT &&
  ------------------
  |  Branch (4368:7): [True: 1.98k, False: 231k]
  |  Branch (4368:40): [True: 193, False: 1.79k]
  ------------------
 4369|    193|      struct_def->bytesize != 0) {
  ------------------
  |  Branch (4369:7): [True: 97, False: 96]
  ------------------
 4370|       |    // struct_def->bytesize==0 means struct is table
 4371|     97|    element_size = struct_def->bytesize;
 4372|     97|  }
 4373|   233k|  return reflection::CreateType(
 4374|   233k|      *builder, static_cast<reflection::BaseType>(base_type),
 4375|   233k|      static_cast<reflection::BaseType>(element),
 4376|   233k|      struct_def ? struct_def->index : (enum_def ? enum_def->index : -1),
  ------------------
  |  Branch (4376:7): [True: 12.4k, False: 221k]
  |  Branch (4376:41): [True: 105k, False: 115k]
  ------------------
 4377|   233k|      fixed_length, static_cast<uint32_t>(SizeOf(base_type)),
 4378|   233k|      static_cast<uint32_t>(element_size));
 4379|   233k|}
_ZNK11flatbuffers10Definition19SerializeAttributesEPNS_21FlatBufferBuilderImplILb0EEERKNS_6ParserE:
 4411|   177k|                                const Parser& parser) const {
 4412|   177k|  return SerializeAttributesCommon(attributes, builder, parser);
 4413|   177k|}
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.39k, False: 8.07k]
  ------------------
  196|  8.39k|    std::string s;
  197|  8.39k|    s.append(1, static_cast<char>(t));
  198|  8.39k|    return s;
  199|  8.39k|  } else {       // Other tokens.
  200|  8.07k|    return tokens[t - 256];
  201|  8.07k|  }
  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|    921|static bool ValidateUTF8(const std::string& str) {
   67|    921|  const char* s = &str[0];
   68|    921|  const char* const sEnd = s + str.length();
   69|  21.2k|  while (s < sEnd) {
  ------------------
  |  Branch (69:10): [True: 20.3k, False: 831]
  ------------------
   70|  20.3k|    if (FromUTF8(&s) < 0) {
  ------------------
  |  Branch (70:9): [True: 90, False: 20.3k]
  ------------------
   71|     90|      return false;
   72|     90|    }
   73|  20.3k|  }
   74|    831|  return true;
   75|    921|}
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.23M, False: 3.00M]
  |  Branch (205:63): [True: 86.4k, False: 2.91M]
  ------------------
_ZN11flatbuffers6Parser15ParseDepthGuardC2EPS0_:
  426|   539k|      : parser_(*parser_not_null), caller_depth_(parser_.parse_depth_counter_) {
  427|   539k|    FLATBUFFERS_ASSERT(caller_depth_ <= (FLATBUFFERS_MAX_PARSING_DEPTH) &&
  428|   539k|                       "Check() must be called to prevent stack overflow");
  429|   539k|    parser_.parse_depth_counter_ += 1;
  430|   539k|  }
_ZN11flatbuffers6Parser15ParseDepthGuard5CheckEv:
  434|   539k|  CheckedError Check() {
  435|   539k|    return caller_depth_ >= (FLATBUFFERS_MAX_PARSING_DEPTH)
  ------------------
  |  Branch (435:12): [True: 15, False: 539k]
  ------------------
  436|   539k|               ? parser_.RecurseError()
  437|   539k|               : CheckedError(false);
  438|   539k|  }
_ZN11flatbuffers6Parser15ParseDepthGuardD2Ev:
  432|   539k|  ~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: 39.0k]
  ------------------
   79|   132k|    char c = str[i];
   80|   132k|    if (!check_ascii_range(c, 'a', 'z') && !is_digit(c) && c != '_') {
  ------------------
  |  Branch (80:9): [True: 30.7k, False: 102k]
  |  Branch (80:44): [True: 20.7k, False: 10.0k]
  |  Branch (80:60): [True: 18.0k, False: 2.66k]
  ------------------
   81|  18.0k|      return false;
   82|  18.0k|    }
   83|   132k|  }
   84|  39.0k|  return true;
   85|  57.1k|}
idl_parser.cpp:_ZZN11flatbuffers6Parser10ParseFieldERNS_9StructDefEENK3$_0clEPKNS_8FieldDefERKNS_4TypeERKNSt3__112basic_stringIcNSA_11char_traitsIcEENSA_9allocatorIcEEEESI_:
 1206|  1.47k|                           const std::string& constant) -> CheckedError {
 1207|       |    // Optional and bitflags enums may have default constants that are not
 1208|       |    // their specified variants.
 1209|  1.47k|    if (!field->IsOptional() &&
  ------------------
  |  Branch (1209:9): [True: 1.21k, False: 262]
  |  Branch (1209:9): [True: 1.14k, False: 331]
  ------------------
 1210|  1.21k|        type.enum_def->attributes.Lookup("bit_flags") == nullptr) {
  ------------------
  |  Branch (1210:9): [True: 1.14k, False: 69]
  ------------------
 1211|  1.14k|      if (type.enum_def->FindByValue(constant) == nullptr) {
  ------------------
  |  Branch (1211:11): [True: 107, False: 1.04k]
  ------------------
 1212|    107|        return Error("default value of `" + constant + "` for " + "field `" +
 1213|    107|                     name + "` is not part of enum `" + type.enum_def->name +
 1214|    107|                     "`.");
 1215|    107|      }
 1216|  1.14k|    }
 1217|       |
 1218|  1.37k|    return NoError();
 1219|  1.47k|  };
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotINS_8Offset64IvEEEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  136|  10.9k|                                  Offset64<void>* val) {
  137|  10.9k|  (void)parser;
  138|  10.9k|  *val = Offset64<void>(atoi(s));
  139|  10.9k|  return NoError();
  140|  10.9k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotINS_6OffsetIvEEEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  128|   116k|                                Offset<void>* val) {
  129|   116k|  (void)parser;
  130|   116k|  *val = Offset<void>(atoi(s));
  131|   116k|  return NoError();
  132|   116k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120SwapSerializedTablesEPNS_6OffsetINS_5TableEEES4_:
  263|  69.3k|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.3k|  ptrdiff_t diff = (b - a) * sizeof(Offset<Table>);
  267|  69.3k|  FLATBUFFERS_ASSERT(diff >= 0);  // Guaranteed by SimpleQsort.
  268|  69.3k|  auto udiff = static_cast<uoffset_t>(diff);
  269|  69.3k|  a->o = EndianScalar(ReadScalar<uoffset_t>(a) - udiff);
  270|  69.3k|  b->o = EndianScalar(ReadScalar<uoffset_t>(b) + udiff);
  271|  69.3k|  std::swap(*a, *b);
  272|  69.3k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackERNS_5ValueEf:
  306|    208|static void SingleValueRepack(Value& e, float val) {
  307|    208|  if (val != val) e.constant = "nan";
  ------------------
  |  Branch (307:7): [True: 28, False: 180]
  ------------------
  308|    208|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackERNS_5ValueEd:
  309|    193|static void SingleValueRepack(Value& e, double val) {
  310|    193|  if (val != val) e.constant = "nan";
  ------------------
  |  Branch (310:7): [True: 35, False: 158]
  ------------------
  311|    193|}
_ZN11flatbuffers14EnumValBuilderC2ERNS_6ParserERNS_7EnumDefE:
 2539|   105k|      : parser(_parser),
 2540|   105k|        enum_def(_enum_def),
 2541|   105k|        temp(nullptr),
 2542|   105k|        user_value(false) {}
_ZN11flatbuffers14EnumValBuilder16CreateEnumeratorERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 2460|   549k|  EnumVal* CreateEnumerator(const std::string& ev_name) {
 2461|   549k|    FLATBUFFERS_ASSERT(!temp);
 2462|   549k|    auto first = enum_def.vals.vec.empty();
 2463|   549k|    user_value = first;
 2464|   549k|    temp = new EnumVal(ev_name, first ? 0 : enum_def.vals.vec.back()->value);
  ------------------
  |  Branch (2464:33): [True: 105k, False: 444k]
  ------------------
 2465|   549k|    return temp;
 2466|   549k|  }
_ZN11flatbuffers14EnumValBuilder16AcceptEnumeratorEv:
 2486|   549k|  FLATBUFFERS_CHECKED_ERROR AcceptEnumerator() {
 2487|   549k|    return AcceptEnumerator(temp->name);
 2488|   549k|  }
_ZN11flatbuffers14EnumValBuilder21AssignEnumeratorValueERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 2490|   121k|  FLATBUFFERS_CHECKED_ERROR AssignEnumeratorValue(const std::string& value) {
 2491|   121k|    user_value = true;
 2492|   121k|    auto fit = false;
 2493|   121k|    if (enum_def.IsUInt64()) {
  ------------------
  |  Branch (2493:9): [True: 61.0k, False: 60.3k]
  ------------------
 2494|  61.0k|      uint64_t u64;
 2495|  61.0k|      fit = StringToNumber(value.c_str(), &u64);
 2496|  61.0k|      temp->value = static_cast<int64_t>(u64);  // well-defined since C++20.
 2497|  61.0k|    } else {
 2498|  60.3k|      int64_t i64;
 2499|  60.3k|      fit = StringToNumber(value.c_str(), &i64);
 2500|  60.3k|      temp->value = i64;
 2501|  60.3k|    }
 2502|   121k|    if (!fit) return parser.Error("enum value does not fit, \"" + value + "\"");
  ------------------
  |  Branch (2502:9): [True: 124, False: 121k]
  ------------------
 2503|   121k|    return NoError();
 2504|   121k|  }
_ZN11flatbuffers14EnumValBuilderD2Ev:
 2544|   105k|  ~EnumValBuilder() { delete temp; }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_116compareFieldDefsEPKNS_8FieldDefES3_:
  324|  73.1k|static bool compareFieldDefs(const FieldDef* a, const FieldDef* b) {
  325|  73.1k|  auto a_id = atoi(a->attributes.Lookup("id")->constant.c_str());
  326|  73.1k|  auto b_id = atoi(b->attributes.Lookup("id")->constant.c_str());
  327|  73.1k|  return a_id < b_id;
  328|  73.1k|}
_ZN11flatbuffers14EnumValBuilder16AcceptEnumeratorERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 2475|   549k|  FLATBUFFERS_CHECKED_ERROR AcceptEnumerator(const std::string& name) {
 2476|   549k|    FLATBUFFERS_ASSERT(temp);
 2477|   549k|    ECHECK(ValidateValue(&temp->value, false == user_value));
  ------------------
  |  |   56|   549k|  {                            \
  |  |   57|   549k|    auto ce = (call);          \
  |  |   58|   549k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 942, False: 548k]
  |  |  ------------------
  |  |   59|   549k|  }
  ------------------
 2478|   548k|    FLATBUFFERS_ASSERT((temp->union_type.enum_def == nullptr) ||
 2479|   548k|                       (temp->union_type.enum_def == &enum_def));
 2480|   548k|    auto not_unique = enum_def.vals.Add(name, temp);
 2481|   548k|    temp = nullptr;
 2482|   548k|    if (not_unique) return parser.Error("enum value already exists: " + name);
  ------------------
  |  Branch (2482:9): [True: 57, False: 548k]
  ------------------
 2483|   548k|    return NoError();
 2484|   548k|  }
_ZN11flatbuffers14EnumValBuilder13ValidateValueEPlb:
 2522|   549k|  FLATBUFFERS_CHECKED_ERROR ValidateValue(int64_t* ev, bool next) {
 2523|       |    // clang-format off
 2524|   549k|    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|   549k|      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: 549k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 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|   126k|  TD(UTYPE,    "",       uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 1) /* begin scalar/int */ \
  |  |  ------------------
  |  |  |  | 2530|   126k|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|   126k|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 126k, False: 422k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|   126k|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 126k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|   126k|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 35.7k, False: 91.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|   126k|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|   126k|  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: 549k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 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|    646|  TD(CHAR,     "byte",   int8_t,   byte,   int8,    sbyte,  int8,    i8,   Byte, Int8, 3) \
  |  |  ------------------
  |  |  |  | 2530|    646|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|    646|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 646, False: 548k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|    646|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 646]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|    646|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 388, False: 258]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|    646|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|  1.13k|  TD(UCHAR,    "ubyte",  uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 4) \
  |  |  ------------------
  |  |  |  | 2530|  1.13k|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|  1.13k|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 1.13k, False: 548k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|  1.13k|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 1.13k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|  1.13k|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 396, False: 736]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|  1.13k|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|  3.85k|  TD(SHORT,    "short",  int16_t,  short,  int16,   short,  int16,   i16,  Short, Int16, 5) \
  |  |  ------------------
  |  |  |  | 2530|  3.85k|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|  3.85k|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 3.85k, False: 545k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|  3.85k|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 3.85k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|  3.85k|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 2.96k, False: 891]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|  3.85k|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   56|  37.0k|  TD(USHORT,   "ushort", uint16_t, short,  uint16,  ushort, uint16,  u16,  UShort, UInt16, 6) \
  |  |  ------------------
  |  |  |  | 2530|  37.0k|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|  37.0k|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 37.0k, False: 512k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|  37.0k|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 37.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|  37.0k|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 25.9k, False: 11.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|  37.0k|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   57|  37.0k|  TD(INT,      "int",    int32_t,  int,    int32,   int,    int32,   i32,  Int, Int32, 7) \
  |  |  ------------------
  |  |  |  | 2530|  23.7k|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|  23.7k|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 23.7k, False: 525k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|  23.7k|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 23.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|  23.7k|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 14.9k, False: 8.79k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|  23.7k|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|   100k|  TD(UINT,     "uint",   uint32_t, int,    uint32,  uint,   uint32,  u32,  UInt, UInt32, 8) \
  |  |  ------------------
  |  |  |  | 2530|   100k|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|   100k|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 100k, False: 449k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|   100k|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 100k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|   100k|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 69.3k, False: 30.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|   100k|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   59|   100k|  TD(LONG,     "long",   int64_t,  long,   int64,   long,   int64,   i64,  Long, Int64, 9) \
  |  |  ------------------
  |  |  |  | 2530|  25.1k|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|  25.1k|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 25.1k, False: 524k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|  25.1k|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 25.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|  25.1k|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 17.6k, False: 7.46k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|  25.1k|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|   230k|  TD(ULONG,    "ulong",  uint64_t, long,   uint64,  ulong,  uint64,  u64,  ULong, UInt64, 10) /* end int */ \
  |  |  ------------------
  |  |  |  | 2530|   230k|      FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  | 2526|   230k|      case BASE_TYPE_##ENUM: {                                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2526:7): [True: 230k, False: 318k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2527|   230k|        if (!IsInteger(BASE_TYPE_##ENUM)) break;                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2527:13): [True: 0, False: 230k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2528|   230k|        return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2528:58): [True: 162k, False: 68.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2529|   230k|      }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|   230k|  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: 549k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 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: 549k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 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: 549k]
  ------------------
 2533|   549k|    }
 2534|       |    // clang-format on
 2535|      0|    return parser.Error("fatal: invalid enum underlying type");
 2536|   549k|  }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120TypeToIntervalStringIhEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEv:
   97|    489|static std::string TypeToIntervalString() {
   98|    489|  return "[" + NumToString((flatbuffers::numeric_limits<T>::lowest)()) + "; " +
   99|    489|         NumToString((flatbuffers::numeric_limits<T>::max)()) + "]";
  100|    489|}
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE1EhEENS_12CheckedErrorEPli:
 2507|   126k|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|   126k|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|   126k|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|   126k|    const auto v = static_cast<T>(*ev);
 2511|   126k|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|   126k|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|   126k|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 73, False: 126k]
  |  Branch (2513:19): [True: 85, False: 126k]
  ------------------
 2514|    158|      return parser.Error("enum value does not fit, \"" + NumToString(v) +
 2515|    158|                          (m ? " + 1\"" : "\"") + " out of " +
  ------------------
  |  Branch (2515:28): [True: 0, False: 158]
  ------------------
 2516|    158|                          TypeToIntervalString<CTYPE>());
 2517|    158|    }
 2518|   126k|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|   126k|    return NoError();
 2520|   126k|  }
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE3EaEENS_12CheckedErrorEPli:
 2507|    646|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|    646|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|    646|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|    646|    const auto v = static_cast<T>(*ev);
 2511|    646|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|    646|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|    646|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 62, False: 584]
  |  Branch (2513:19): [True: 86, False: 498]
  ------------------
 2514|    148|      return parser.Error("enum value does not fit, \"" + NumToString(v) +
 2515|    148|                          (m ? " + 1\"" : "\"") + " out of " +
  ------------------
  |  Branch (2515:28): [True: 0, False: 148]
  ------------------
 2516|    148|                          TypeToIntervalString<CTYPE>());
 2517|    148|    }
 2518|    498|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|    498|    return NoError();
 2520|    646|  }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120TypeToIntervalStringIaEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEv:
   97|    271|static std::string TypeToIntervalString() {
   98|    271|  return "[" + NumToString((flatbuffers::numeric_limits<T>::lowest)()) + "; " +
   99|    271|         NumToString((flatbuffers::numeric_limits<T>::max)()) + "]";
  100|    271|}
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE4EhEENS_12CheckedErrorEPli:
 2507|  1.13k|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|  1.13k|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|  1.13k|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|  1.13k|    const auto v = static_cast<T>(*ev);
 2511|  1.13k|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|  1.13k|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|  1.13k|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 67, False: 1.06k]
  |  Branch (2513:19): [True: 104, False: 961]
  ------------------
 2514|    171|      return parser.Error("enum value does not fit, \"" + NumToString(v) +
 2515|    171|                          (m ? " + 1\"" : "\"") + " out of " +
  ------------------
  |  Branch (2515:28): [True: 0, False: 171]
  ------------------
 2516|    171|                          TypeToIntervalString<CTYPE>());
 2517|    171|    }
 2518|    961|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|    961|    return NoError();
 2520|  1.13k|  }
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE5EsEENS_12CheckedErrorEPli:
 2507|  3.85k|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|  3.85k|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|  3.85k|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|  3.85k|    const auto v = static_cast<T>(*ev);
 2511|  3.85k|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|  3.85k|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|  3.85k|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 41, False: 3.81k]
  |  Branch (2513:19): [True: 66, False: 3.74k]
  ------------------
 2514|    107|      return parser.Error("enum value does not fit, \"" + NumToString(v) +
 2515|    107|                          (m ? " + 1\"" : "\"") + " out of " +
  ------------------
  |  Branch (2515:28): [True: 0, False: 107]
  ------------------
 2516|    107|                          TypeToIntervalString<CTYPE>());
 2517|    107|    }
 2518|  3.74k|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|  3.74k|    return NoError();
 2520|  3.85k|  }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120TypeToIntervalStringIsEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEv:
   97|    213|static std::string TypeToIntervalString() {
   98|    213|  return "[" + NumToString((flatbuffers::numeric_limits<T>::lowest)()) + "; " +
   99|    213|         NumToString((flatbuffers::numeric_limits<T>::max)()) + "]";
  100|    213|}
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE6EtEENS_12CheckedErrorEPli:
 2507|  37.0k|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|  37.0k|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|  37.0k|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|  37.0k|    const auto v = static_cast<T>(*ev);
 2511|  37.0k|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|  37.0k|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|  37.0k|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 51, False: 36.9k]
  |  Branch (2513:19): [True: 93, False: 36.8k]
  ------------------
 2514|    144|      return parser.Error("enum value does not fit, \"" + NumToString(v) +
 2515|    144|                          (m ? " + 1\"" : "\"") + " out of " +
  ------------------
  |  Branch (2515:28): [True: 1, False: 143]
  ------------------
 2516|    144|                          TypeToIntervalString<CTYPE>());
 2517|    144|    }
 2518|  36.8k|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|  36.8k|    return NoError();
 2520|  37.0k|  }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120TypeToIntervalStringItEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEv:
   97|    256|static std::string TypeToIntervalString() {
   98|    256|  return "[" + NumToString((flatbuffers::numeric_limits<T>::lowest)()) + "; " +
   99|    256|         NumToString((flatbuffers::numeric_limits<T>::max)()) + "]";
  100|    256|}
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE7EiEENS_12CheckedErrorEPli:
 2507|  23.7k|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|  23.7k|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|  23.7k|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|  23.7k|    const auto v = static_cast<T>(*ev);
 2511|  23.7k|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|  23.7k|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|  23.7k|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 56, False: 23.6k]
  |  Branch (2513:19): [True: 47, False: 23.6k]
  ------------------
 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|  23.6k|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|  23.6k|    return NoError();
 2520|  23.7k|  }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120TypeToIntervalStringIiEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEv:
   97|    170|static std::string TypeToIntervalString() {
   98|    170|  return "[" + NumToString((flatbuffers::numeric_limits<T>::lowest)()) + "; " +
   99|    170|         NumToString((flatbuffers::numeric_limits<T>::max)()) + "]";
  100|    170|}
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE8EjEENS_12CheckedErrorEPli:
 2507|   100k|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|   100k|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|   100k|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|   100k|    const auto v = static_cast<T>(*ev);
 2511|   100k|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|   100k|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|   100k|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 46, False: 100k]
  |  Branch (2513:19): [True: 63, False: 99.9k]
  ------------------
 2514|    109|      return parser.Error("enum value does not fit, \"" + NumToString(v) +
 2515|    109|                          (m ? " + 1\"" : "\"") + " out of " +
  ------------------
  |  Branch (2515:28): [True: 0, False: 109]
  ------------------
 2516|    109|                          TypeToIntervalString<CTYPE>());
 2517|    109|    }
 2518|  99.9k|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|  99.9k|    return NoError();
 2520|   100k|  }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120TypeToIntervalStringIjEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEv:
   97|    217|static std::string TypeToIntervalString() {
   98|    217|  return "[" + NumToString((flatbuffers::numeric_limits<T>::lowest)()) + "; " +
   99|    217|         NumToString((flatbuffers::numeric_limits<T>::max)()) + "]";
  100|    217|}
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE9ElEENS_12CheckedErrorEPli:
 2507|  25.1k|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|  25.1k|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|  25.1k|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|  25.1k|    const auto v = static_cast<T>(*ev);
 2511|  25.1k|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|  25.1k|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|  25.1k|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 0, False: 25.1k]
  |  Branch (2513:19): [True: 1, False: 25.1k]
  ------------------
 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|  25.1k|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|  25.1k|    return NoError();
 2520|  25.1k|  }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120TypeToIntervalStringIlEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEv:
   97|     19|static std::string TypeToIntervalString() {
   98|     19|  return "[" + NumToString((flatbuffers::numeric_limits<T>::lowest)()) + "; " +
   99|     19|         NumToString((flatbuffers::numeric_limits<T>::max)()) + "]";
  100|     19|}
_ZN11flatbuffers14EnumValBuilder12ValidateImplILNS_8BaseTypeE10EmEENS_12CheckedErrorEPli:
 2507|   230k|  inline FLATBUFFERS_CHECKED_ERROR ValidateImpl(int64_t* ev, int m) {
 2508|   230k|    typedef typename EnumHelper::EnumValType<E>::type T;  // int64_t or uint64_t
 2509|   230k|    static_assert(sizeof(T) == sizeof(int64_t), "invalid EnumValType");
 2510|   230k|    const auto v = static_cast<T>(*ev);
 2511|   230k|    auto up = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::max)());
 2512|   230k|    auto dn = static_cast<T>((flatbuffers::numeric_limits<CTYPE>::lowest)());
 2513|   230k|    if (v < dn || v > (up - m)) {
  ------------------
  |  Branch (2513:9): [True: 0, False: 230k]
  |  Branch (2513:19): [True: 1, False: 230k]
  ------------------
 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|   230k|    *ev = static_cast<int64_t>(v + m);  // well-defined since C++20.
 2519|   230k|    return NoError();
 2520|   230k|  }
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_120TypeToIntervalStringImEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEv:
   97|     49|static std::string TypeToIntervalString() {
   98|     49|  return "[" + NumToString((flatbuffers::numeric_limits<T>::lowest)()) + "; " +
   99|     49|         NumToString((flatbuffers::numeric_limits<T>::max)()) + "]";
  100|     49|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_18HashFileEPKcS2_:
  359|    151|static uint64_t HashFile(const char* source_filename, const char* source) {
  360|    151|  uint64_t hash = 0;
  361|       |
  362|    151|  if (source_filename)
  ------------------
  |  Branch (362:7): [True: 151, False: 0]
  ------------------
  363|    151|    hash = HashFnv1a<uint64_t>(StripPath(source_filename).c_str());
  364|       |
  365|    151|  if (source && *source) hash ^= HashFnv1a<uint64_t>(source);
  ------------------
  |  Branch (365:7): [True: 151, False: 0]
  |  Branch (365:17): [True: 30, False: 121]
  ------------------
  366|       |
  367|    151|  return hash;
  368|    151|}
idl_parser.cpp:_ZN11flatbuffersL25SerializeAttributesCommonERKNS_11SymbolTableINS_5ValueEEEPNS_21FlatBufferBuilderImplILb0EEERKNS_6ParserE:
 3999|   291k|                          FlatBufferBuilder* builder, const Parser& parser) {
 4000|   291k|  std::vector<flatbuffers::Offset<reflection::KeyValue>> attrs;
 4001|   293k|  for (auto kv = attributes.dict.begin(); kv != attributes.dict.end(); ++kv) {
  ------------------
  |  Branch (4001:43): [True: 1.28k, False: 291k]
  ------------------
 4002|  1.28k|    auto it = parser.known_attributes_.find(kv->first);
 4003|  1.28k|    FLATBUFFERS_ASSERT(it != parser.known_attributes_.end());
 4004|  1.28k|    if (parser.opts.binary_schema_builtins || !it->second) {
  ------------------
  |  Branch (4004:9): [True: 0, False: 1.28k]
  |  Branch (4004:47): [True: 776, False: 511]
  ------------------
 4005|    776|      auto key = builder->CreateString(kv->first);
 4006|    776|      auto val = builder->CreateString(kv->second->constant);
 4007|    776|      attrs.push_back(reflection::CreateKeyValue(*builder, key, val));
 4008|    776|    }
 4009|  1.28k|  }
 4010|   291k|  if (attrs.size()) {
  ------------------
  |  Branch (4010:7): [True: 776, False: 291k]
  ------------------
 4011|    776|    return builder->CreateVectorOfSortedTables(&attrs);
 4012|   291k|  } else {
 4013|   291k|    return 0;
 4014|   291k|  }
 4015|   291k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117LookupTableByNameINS_7EnumDefEEEPT_RKNS_11SymbolTableIS3_EERKNSt3__112basic_stringIcNS9_11char_traitsIcEENS9_9allocatorIcEEEERKNS_9NamespaceEm:
  146|  74.4k|                            size_t skip_top) {
  147|  74.4k|  const auto& components = current_namespace.components;
  148|  74.4k|  if (table.dict.empty()) return nullptr;
  ------------------
  |  Branch (148:7): [True: 24.6k, False: 49.8k]
  ------------------
  149|  49.8k|  if (components.size() < skip_top) return nullptr;
  ------------------
  |  Branch (149:7): [True: 0, False: 49.8k]
  ------------------
  150|  49.8k|  const auto N = components.size() - skip_top;
  151|  49.8k|  std::string full_name;
  152|   110k|  for (size_t i = 0; i < N; i++) {
  ------------------
  |  Branch (152:22): [True: 60.2k, False: 49.8k]
  ------------------
  153|  60.2k|    full_name += components[i];
  154|  60.2k|    full_name += '.';
  155|  60.2k|  }
  156|   109k|  for (size_t i = N; i > 0; i--) {
  ------------------
  |  Branch (156:22): [True: 60.2k, False: 49.6k]
  ------------------
  157|  60.2k|    full_name += name;
  158|  60.2k|    auto obj = table.Lookup(full_name);
  159|  60.2k|    if (obj) return obj;
  ------------------
  |  Branch (159:9): [True: 215, False: 60.0k]
  ------------------
  160|  60.0k|    auto len = full_name.size() - components[i - 1].size() - 1 - name.size();
  161|  60.0k|    full_name.resize(len);
  162|  60.0k|  }
  163|  49.6k|  FLATBUFFERS_ASSERT(full_name.empty());
  164|  49.6k|  return table.Lookup(name);  // lookup in global namespace
  165|  49.6k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117LookupTableByNameINS_9StructDefEEEPT_RKNS_11SymbolTableIS3_EERKNSt3__112basic_stringIcNS9_11char_traitsIcEENS9_9allocatorIcEEEERKNS_9NamespaceEm:
  146|   223k|                            size_t skip_top) {
  147|   223k|  const auto& components = current_namespace.components;
  148|   223k|  if (table.dict.empty()) return nullptr;
  ------------------
  |  Branch (148:7): [True: 6.56k, False: 217k]
  ------------------
  149|   217k|  if (components.size() < skip_top) return nullptr;
  ------------------
  |  Branch (149:7): [True: 153k, False: 63.8k]
  ------------------
  150|  63.8k|  const auto N = components.size() - skip_top;
  151|  63.8k|  std::string full_name;
  152|   648k|  for (size_t i = 0; i < N; i++) {
  ------------------
  |  Branch (152:22): [True: 585k, False: 63.8k]
  ------------------
  153|   585k|    full_name += components[i];
  154|   585k|    full_name += '.';
  155|   585k|  }
  156|   648k|  for (size_t i = N; i > 0; i--) {
  ------------------
  |  Branch (156:22): [True: 584k, False: 63.5k]
  ------------------
  157|   584k|    full_name += name;
  158|   584k|    auto obj = table.Lookup(full_name);
  159|   584k|    if (obj) return obj;
  ------------------
  |  Branch (159:9): [True: 302, False: 584k]
  ------------------
  160|   584k|    auto len = full_name.size() - components[i - 1].size() - 1 - name.size();
  161|   584k|    full_name.resize(len);
  162|   584k|  }
  163|  63.5k|  FLATBUFFERS_ASSERT(full_name.empty());
  164|  63.5k|  return table.Lookup(name);  // lookup in global namespace
  165|  63.5k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotItEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  11.5k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  11.5k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  11.5k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 11.4k, False: 152]
  ------------------
  120|    152|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 40, False: 112]
  ------------------
  121|     40|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|    112|  else
  123|    112|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|    112|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|    152|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarItEEbPKcPT_NSt3__117integral_constantIbLb0EEE:
  104|  11.5k|static bool atot_scalar(const char* s, T* val, bool_constant<false>) {
  105|  11.5k|  return StringToNumber(s, val);
  106|  11.5k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotIjEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  8.81k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  8.81k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  8.81k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 8.67k, False: 147]
  ------------------
  120|    147|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 39, False: 108]
  ------------------
  121|     39|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|    108|  else
  123|    108|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|    108|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|    147|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarIjEEbPKcPT_NSt3__117integral_constantIbLb0EEE:
  104|  8.81k|static bool atot_scalar(const char* s, T* val, bool_constant<false>) {
  105|  8.81k|  return StringToNumber(s, val);
  106|  8.81k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotIhEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  53.8k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  53.8k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  53.8k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 53.6k, False: 230]
  ------------------
  120|    230|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 70, False: 160]
  ------------------
  121|     70|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|    160|  else
  123|    160|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|    160|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|    230|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarIhEEbPKcPT_NSt3__117integral_constantIbLb0EEE:
  104|  53.8k|static bool atot_scalar(const char* s, T* val, bool_constant<false>) {
  105|  53.8k|  return StringToNumber(s, val);
  106|  53.8k|}
idl_parser.cpp:_ZN11flatbuffers6Parser20ParseTableDelimitersIZNS0_10ParseTableERKNS_9StructDefEPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEPjE3$_0EENS_12CheckedErrorERmPS3_T_:
 1509|   175k|                                          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|   175k|  char terminator = '}';
 1513|   175k|  bool is_nested_vector = struct_def && Is('[');
  ------------------
  |  Branch (1513:27): [True: 175k, False: 0]
  |  Branch (1513:41): [True: 111k, False: 63.9k]
  ------------------
 1514|   175k|  if (is_nested_vector) {
  ------------------
  |  Branch (1514:7): [True: 111k, False: 63.9k]
  ------------------
 1515|   111k|    NEXT();
  ------------------
  |  |   63|   111k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|   111k|  {                            \
  |  |  |  |   57|   111k|    auto ce = (call);          \
  |  |  |  |   58|   111k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 18, False: 111k]
  |  |  |  |  ------------------
  |  |  |  |   59|   111k|  }
  |  |  ------------------
  ------------------
 1516|   111k|    terminator = ']';
 1517|   111k|  } else {
 1518|  63.9k|    EXPECT('{');
  ------------------
  |  |   64|  63.9k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  63.9k|  {                            \
  |  |  |  |   57|  63.9k|    auto ce = (call);          \
  |  |  |  |   58|  63.9k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 274, False: 63.7k]
  |  |  |  |  ------------------
  |  |  |  |   59|  63.9k|  }
  |  |  ------------------
  ------------------
 1519|  63.7k|  }
 1520|   235k|  for (;;) {
 1521|   235k|    if ((!opts.strict_json || !fieldn) && Is(terminator)) break;
  ------------------
  |  Branch (1521:10): [True: 233k, False: 1.83k]
  |  Branch (1521:31): [True: 1.64k, False: 196]
  |  Branch (1521:43): [True: 55.3k, False: 179k]
  ------------------
 1522|   179k|    std::string name;
 1523|   179k|    if (is_nested_vector) {
  ------------------
  |  Branch (1523:9): [True: 168k, False: 11.5k]
  ------------------
 1524|   168k|      if (fieldn >= struct_def->fields.vec.size()) {
  ------------------
  |  Branch (1524:11): [True: 34, False: 168k]
  ------------------
 1525|     34|        return Error("too many unnamed fields in nested array");
 1526|     34|      }
 1527|   168k|      name = struct_def->fields.vec[fieldn]->name;
 1528|   168k|    } else {
 1529|  11.5k|      name = attribute_;
 1530|  11.5k|      if (Is(kTokenStringConstant)) {
  ------------------
  |  Branch (1530:11): [True: 2.12k, False: 9.45k]
  ------------------
 1531|  2.12k|        NEXT();
  ------------------
  |  |   63|  2.12k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   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|  }
  |  |  ------------------
  ------------------
 1532|  9.45k|      } else {
 1533|  9.45k|        EXPECT(opts.strict_json ? kTokenStringConstant : kTokenIdentifier);
  ------------------
  |  |   64|  9.45k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  9.45k|  {                            \
  |  |  |  |   57|  18.9k|    auto ce = (call);          \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:16): [True: 11, False: 9.44k]
  |  |  |  |  ------------------
  |  |  |  |   58|  9.45k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 123, False: 9.33k]
  |  |  |  |  ------------------
  |  |  |  |   59|  9.45k|  }
  |  |  ------------------
  ------------------
 1534|  9.33k|      }
 1535|  11.4k|      if (!opts.protobuf_ascii_alike || !(Is('{') || Is('['))) EXPECT(':');
  ------------------
  |  |   64|  11.4k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  11.4k|  {                            \
  |  |  |  |   57|  11.4k|    auto ce = (call);          \
  |  |  |  |   58|  11.4k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 22, False: 11.4k]
  |  |  |  |  ------------------
  |  |  |  |   59|  11.4k|  }
  |  |  ------------------
  ------------------
  |  Branch (1535:11): [True: 11.4k, False: 0]
  |  Branch (1535:43): [True: 0, False: 0]
  |  Branch (1535:54): [True: 0, False: 0]
  ------------------
 1536|  11.4k|    }
 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.59k, False: 170k]
  |  |  ------------------
  |  |   59|   179k|  }
  ------------------
 1538|   170k|    if (Is(terminator)) break;
  ------------------
  |  Branch (1538:9): [True: 108k, False: 62.7k]
  ------------------
 1539|  62.7k|    ECHECK(ParseComma());
  ------------------
  |  |   56|  62.7k|  {                            \
  |  |   57|  62.7k|    auto ce = (call);          \
  |  |   58|  62.7k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 2.99k, False: 59.7k]
  |  |  ------------------
  |  |   59|  62.7k|  }
  ------------------
 1540|  59.7k|  }
 1541|   163k|  NEXT();
  ------------------
  |  |   63|   163k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|   163k|  {                            \
  |  |  |  |   57|   163k|    auto ce = (call);          \
  |  |  |  |   58|   163k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 17, False: 163k]
  |  |  |  |  ------------------
  |  |  |  |   59|   163k|  }
  |  |  ------------------
  ------------------
 1542|   163k|  if (is_nested_vector && fieldn != struct_def->fields.vec.size()) {
  ------------------
  |  Branch (1542:7): [True: 108k, False: 55.2k]
  |  Branch (1542:27): [True: 37, False: 108k]
  ------------------
 1543|     37|    return Error("wrong number of unnamed fields in table vector");
 1544|     37|  }
 1545|   163k|  return NoError();
 1546|   163k|}
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: 248, False: 179k]
  ------------------
 1559|    248|          ECHECK(Expect(kTokenStringConstant));
  ------------------
  |  |   56|    248|  {                            \
  |  |   57|    248|    auto ce = (call);          \
  |  |   58|    248|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 3, False: 245]
  |  |  ------------------
  |  |   59|    248|  }
  ------------------
 1560|    245|          return NoError();
 1561|    248|        }
 1562|   179k|        auto field = struct_def_inner->fields.Lookup(name);
 1563|   179k|        if (!field) {
  ------------------
  |  Branch (1563:13): [True: 2.06k, False: 177k]
  ------------------
 1564|  2.06k|          if (!opts.skip_unexpected_fields_in_json) {
  ------------------
  |  Branch (1564:15): [True: 19, False: 2.04k]
  ------------------
 1565|     19|            return Error("unknown field: " + name);
 1566|  2.04k|          } else {
 1567|  2.04k|            ECHECK(SkipAnyJsonValue());
  ------------------
  |  |   56|  2.04k|  {                            \
  |  |   57|  2.04k|    auto ce = (call);          \
  |  |   58|  2.04k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 199, False: 1.84k]
  |  |  ------------------
  |  |   59|  2.04k|  }
  ------------------
 1568|  1.84k|          }
 1569|   177k|        } else {
 1570|   177k|          if (IsIdent("null") && !IsScalar(field->value.type.base_type)) {
  ------------------
  |  Branch (1570:15): [True: 1.89k, False: 175k]
  |  Branch (1570:34): [True: 69, False: 1.82k]
  ------------------
 1571|     69|            ECHECK(Next());  // Ignore this field.
  ------------------
  |  |   56|     69|  {                            \
  |  |   57|     69|    auto ce = (call);          \
  |  |   58|     69|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1, False: 68]
  |  |  ------------------
  |  |   59|     69|  }
  ------------------
 1572|   177k|          } else {
 1573|   177k|            Value val = field->value;
 1574|   177k|            if (field->flexbuffer) {
  ------------------
  |  Branch (1574:17): [True: 6.84k, False: 170k]
  ------------------
 1575|  6.84k|              flexbuffers::Builder builder(1024,
 1576|  6.84k|                                           flexbuffers::BUILDER_FLAG_SHARE_ALL);
 1577|  6.84k|              ECHECK(ParseFlexBufferValue(&builder));
  ------------------
  |  |   56|  6.84k|  {                            \
  |  |   57|  6.84k|    auto ce = (call);          \
  |  |   58|  6.84k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 2.64k, False: 4.20k]
  |  |  ------------------
  |  |   59|  6.84k|  }
  ------------------
 1578|  4.20k|              builder.Finish();
 1579|       |              // Force alignment for nested flexbuffer
 1580|  4.20k|              builder_.ForceVectorAlignment(builder.GetSize(), sizeof(uint8_t),
 1581|  4.20k|                                            sizeof(largest_scalar_t));
 1582|  4.20k|              auto off = builder_.CreateVector(builder.GetBuffer());
 1583|  4.20k|              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.69k, False: 164k]
  |  |  ------------------
  |  |   59|   170k|  }
  ------------------
 1589|   164k|            }
 1590|       |            // Hardcoded insertion-sort with error-check.
 1591|       |            // If fields are specified in order, then this loop exits
 1592|       |            // immediately.
 1593|   168k|            auto elem = field_stack_.rbegin();
 1594|   169k|            for (; elem != field_stack_.rbegin() + fieldn; ++elem) {
  ------------------
  |  Branch (1594:20): [True: 56.9k, False: 112k]
  ------------------
 1595|  56.9k|              auto existing_field = elem->second;
 1596|  56.9k|              if (existing_field == field)
  ------------------
  |  Branch (1596:19): [True: 35, False: 56.8k]
  ------------------
 1597|     35|                return Error("field set more than once: " + field->name);
 1598|  56.8k|              if (existing_field->value.offset < field->value.offset) break;
  ------------------
  |  Branch (1598:19): [True: 56.4k, False: 449]
  ------------------
 1599|  56.8k|            }
 1600|       |            // Note: elem points to before the insertion point, thus .base()
 1601|       |            // points to the correct spot.
 1602|   168k|            field_stack_.insert(elem.base(), std::make_pair(val, field));
 1603|   168k|            fieldn++;
 1604|   168k|          }
 1605|   177k|        }
 1606|   170k|        return NoError();
 1607|   179k|      });
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotIaEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  19.7k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  19.7k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  19.7k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 19.5k, False: 149]
  ------------------
  120|    149|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 26, False: 123]
  ------------------
  121|     26|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|    123|  else
  123|    123|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|    123|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|    149|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarIaEEbPKcPT_NSt3__117integral_constantIbLb0EEE:
  104|  19.7k|static bool atot_scalar(const char* s, T* val, bool_constant<false>) {
  105|  19.7k|  return StringToNumber(s, val);
  106|  19.7k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotIsEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  13.2k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  13.2k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  13.2k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 13.0k, False: 139]
  ------------------
  120|    139|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 33, False: 106]
  ------------------
  121|     33|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|    106|  else
  123|    106|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|    106|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|    139|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarIsEEbPKcPT_NSt3__117integral_constantIbLb0EEE:
  104|  13.2k|static bool atot_scalar(const char* s, T* val, bool_constant<false>) {
  105|  13.2k|  return StringToNumber(s, val);
  106|  13.2k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotIiEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  34.6k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  34.6k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  34.6k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 34.4k, False: 114]
  ------------------
  120|    114|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 47, False: 67]
  ------------------
  121|     47|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|     67|  else
  123|     67|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|     67|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|    114|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarIiEEbPKcPT_NSt3__117integral_constantIbLb0EEE:
  104|  34.6k|static bool atot_scalar(const char* s, T* val, bool_constant<false>) {
  105|  34.6k|  return StringToNumber(s, val);
  106|  34.6k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotIlEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  26.1k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  26.1k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  26.1k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 26.0k, False: 49]
  ------------------
  120|     49|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 31, False: 18]
  ------------------
  121|     31|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|     18|  else
  123|     18|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|     18|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|     49|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarIlEEbPKcPT_NSt3__117integral_constantIbLb0EEE:
  104|  26.1k|static bool atot_scalar(const char* s, T* val, bool_constant<false>) {
  105|  26.1k|  return StringToNumber(s, val);
  106|  26.1k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotImEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  15.2k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  15.2k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  15.2k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 15.2k, False: 72]
  ------------------
  120|     72|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 24, False: 48]
  ------------------
  121|     24|    return parser.Error("invalid number: \"" + std::string(s) + "\"");
  122|     48|  else
  123|     48|    return parser.Error("invalid number: \"" + std::string(s) + "\"" +
  124|     48|                        ", constant does not fit " + TypeToIntervalString<T>());
  125|     72|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarImEEbPKcPT_NSt3__117integral_constantIbLb0EEE:
  104|  15.2k|static bool atot_scalar(const char* s, T* val, bool_constant<false>) {
  105|  15.2k|  return StringToNumber(s, val);
  106|  15.2k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotIfEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  21.2k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  21.2k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  21.2k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 21.1k, 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|  21.2k|static bool atot_scalar(const char* s, T* val, bool_constant<true>) {
  110|       |  // Normalize NaN parsed from fbs or json to unsigned NaN.
  111|  21.2k|  if (false == StringToNumber(s, val)) return false;
  ------------------
  |  Branch (111:7): [True: 80, False: 21.1k]
  ------------------
  112|  21.1k|  *val = (*val != *val) ? std::fabs(*val) : *val;
  ------------------
  |  Branch (112:10): [True: 255, False: 20.9k]
  ------------------
  113|  21.1k|  return true;
  114|  21.2k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_14atotIdEENS_12CheckedErrorEPKcRNS_6ParserEPT_:
  117|  21.1k|static CheckedError atot(const char* s, Parser& parser, T* val) {
  118|  21.1k|  auto done = atot_scalar(s, val, bool_constant<is_floating_point<T>::value>());
  119|  21.1k|  if (done) return NoError();
  ------------------
  |  Branch (119:7): [True: 21.0k, False: 43]
  ------------------
  120|     43|  if (0 == *val)
  ------------------
  |  Branch (120:7): [True: 43, False: 0]
  ------------------
  121|     43|    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|     43|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111atot_scalarIdEEbPKcPT_NSt3__117integral_constantIbLb1EEE:
  109|  21.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|  21.1k|  if (false == StringToNumber(s, val)) return false;
  ------------------
  |  Branch (111:7): [True: 43, False: 21.0k]
  ------------------
  112|  21.0k|  *val = (*val != *val) ? std::fabs(*val) : *val;
  ------------------
  |  Branch (112:10): [True: 230, False: 20.8k]
  ------------------
  113|  21.0k|  return true;
  114|  21.1k|}
idl_parser.cpp:_ZN11flatbuffers6Parser21ParseVectorDelimitersIZNS0_11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmE3$_0EENS_12CheckedErrorERmT_:
 1729|  45.2k|CheckedError Parser::ParseVectorDelimiters(size_t& count, F body) {
 1730|  45.2k|  EXPECT('[');
  ------------------
  |  |   64|  45.2k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  45.2k|  {                            \
  |  |  |  |   57|  45.2k|    auto ce = (call);          \
  |  |  |  |   58|  45.2k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 45, False: 45.2k]
  |  |  |  |  ------------------
  |  |  |  |   59|  45.2k|  }
  |  |  ------------------
  ------------------
 1731|   231k|  for (;;) {
 1732|   231k|    if ((!opts.strict_json || !count) && Is(']')) break;
  ------------------
  |  Branch (1732:10): [True: 227k, False: 4.44k]
  |  Branch (1732:31): [True: 185, False: 4.26k]
  |  Branch (1732:42): [True: 18.0k, False: 209k]
  ------------------
 1733|   213k|    ECHECK(body(count));
  ------------------
  |  |   56|   213k|  {                            \
  |  |   57|   213k|    auto ce = (call);          \
  |  |   58|   213k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 3.66k, False: 209k]
  |  |  ------------------
  |  |   59|   213k|  }
  ------------------
 1734|   209k|    count++;
 1735|   209k|    if (Is(']')) break;
  ------------------
  |  Branch (1735:9): [True: 22.4k, False: 187k]
  ------------------
 1736|   187k|    ECHECK(ParseComma());
  ------------------
  |  |   56|   187k|  {                            \
  |  |   57|   187k|    auto ce = (call);          \
  |  |   58|   187k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 1.13k, False: 186k]
  |  |  ------------------
  |  |   59|   187k|  }
  ------------------
 1737|   186k|  }
 1738|  40.4k|  NEXT();
  ------------------
  |  |   63|  40.4k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  40.4k|  {                            \
  |  |  |  |   57|  40.4k|    auto ce = (call);          \
  |  |  |  |   58|  40.4k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 7, False: 40.4k]
  |  |  |  |  ------------------
  |  |  |  |   59|  40.4k|  }
  |  |  ------------------
  ------------------
 1739|  40.4k|  return NoError();
 1740|  40.4k|}
idl_parser.cpp:_ZZN11flatbuffers6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmENK3$_0clERm:
 1763|   213k|  auto err = ParseVectorDelimiters(count, [&](size_t&) -> CheckedError {
 1764|   213k|    Value val;
 1765|   213k|    val.type = type;
 1766|   213k|    ECHECK(ParseAnyValue(val, field, fieldn, nullptr, count, true));
  ------------------
  |  |   56|   213k|  {                            \
  |  |   57|   213k|    auto ce = (call);          \
  |  |   58|   213k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 3.66k, False: 209k]
  |  |  ------------------
  |  |   59|   213k|  }
  ------------------
 1767|   209k|    field_stack_.push_back(std::make_pair(val, nullptr));
 1768|   209k|    return NoError();
 1769|   213k|  });
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111SimpleQsortIhZNS_6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmE3$_1ZNS2_11ParseVectorES5_S6_S8_mE3$_2EEvPT_SC_mT0_T1_:
  277|  1.36k|                        S swapper) {
  278|  1.36k|  if (end - begin <= static_cast<ptrdiff_t>(width)) return;
  ------------------
  |  Branch (278:7): [True: 707, False: 655]
  ------------------
  279|    655|  auto l = begin + width;
  280|    655|  auto r = end;
  281|  23.1k|  while (l < r) {
  ------------------
  |  Branch (281:10): [True: 22.4k, False: 655]
  ------------------
  282|  22.4k|    if (comparator(begin, l)) {
  ------------------
  |  Branch (282:9): [True: 583, False: 21.8k]
  ------------------
  283|    583|      r -= width;
  284|    583|      swapper(l, r);
  285|  21.8k|    } else {
  286|  21.8k|      l += width;
  287|  21.8k|    }
  288|  22.4k|  }
  289|    655|  l -= width;
  290|    655|  swapper(begin, l);
  291|    655|  SimpleQsort(begin, l, width, comparator, swapper);
  292|    655|  SimpleQsort(r, end, width, comparator, swapper);
  293|    655|}
idl_parser.cpp:_ZZN11flatbuffers6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmENK3$_1clEPKhS9_:
 1848|  22.4k|          [offset, key](const uint8_t* a, const uint8_t* b) -> bool {
 1849|  22.4k|            return CompareSerializedScalars(a + offset, b + offset, *key);
 1850|  22.4k|          },
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_124CompareSerializedScalarsEPKhS2_RKNS_8FieldDefE:
  208|  78.0M|                                     const FieldDef& key) {
  209|  78.0M|  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: 78.0M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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: 78.0M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  1.27k|  TD(BOOL,     "bool",   uint8_t,  boolean,bool,    bool,   bool,    bool, Boolean, Bool, 2) \
  |  |  ------------------
  |  |  |  |  220|  1.27k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  1.27k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 1.27k, False: 78.0M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  1.27k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  1.27k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 526, False: 745]
  |  |  |  |  |  |  |  Branch (213:15): [True: 265, False: 480]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|    791|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|    791|    }                                                   \
  |  |  |  |  |  |  216|  1.27k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 745, False: 526]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  1.27k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 507, False: 764]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  1.27k|    return av < bv;                                     \
  |  |  |  |  |  |  219|  1.27k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|  3.33k|  TD(CHAR,     "byte",   int8_t,   byte,   int8,    sbyte,  int8,    i8,   Byte, Int8, 3) \
  |  |  ------------------
  |  |  |  |  220|  3.33k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  3.33k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 3.33k, False: 78.0M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  3.33k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  3.33k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 800, False: 2.53k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 222, False: 2.31k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  1.02k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  1.02k|    }                                                   \
  |  |  |  |  |  |  216|  3.33k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 2.53k, False: 800]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  3.33k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 2.33k, False: 1.00k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  3.33k|    return av < bv;                                     \
  |  |  |  |  |  |  219|  3.33k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|  14.3k|  TD(UCHAR,    "ubyte",  uint8_t,  byte,   byte,    byte,   uint8,   u8,   UByte, UInt8, 4) \
  |  |  ------------------
  |  |  |  |  220|  14.3k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  14.3k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 14.3k, False: 78.0M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  14.3k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  14.3k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 1.10k, False: 13.2k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 473, False: 12.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  1.57k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  1.57k|    }                                                   \
  |  |  |  |  |  |  216|  14.3k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 13.2k, False: 1.10k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  14.3k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 13.0k, False: 1.31k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  14.3k|    return av < bv;                                     \
  |  |  |  |  |  |  219|  14.3k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|   645k|  TD(SHORT,    "short",  int16_t,  short,  int16,   short,  int16,   i16,  Short, Int16, 5) \
  |  |  ------------------
  |  |  |  |  220|   645k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|   645k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 645k, False: 77.3M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|   645k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|   645k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 16.1k, False: 629k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 2.43k, False: 627k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  18.5k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  18.5k|    }                                                   \
  |  |  |  |  |  |  216|   645k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 629k, False: 16.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|   645k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 628k, False: 16.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|   645k|    return av < bv;                                     \
  |  |  |  |  |  |  219|   645k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   56|   645k|  TD(USHORT,   "ushort", uint16_t, short,  uint16,  ushort, uint16,  u16,  UShort, UInt16, 6) \
  |  |  ------------------
  |  |  |  |  220|  22.1k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  22.1k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 22.1k, False: 78.0M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  22.1k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  22.1k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 971, False: 21.1k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 505, False: 20.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  1.47k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  1.47k|    }                                                   \
  |  |  |  |  |  |  216|  22.1k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 21.1k, False: 971]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  22.1k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 21.0k, False: 1.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  22.1k|    return av < bv;                                     \
  |  |  |  |  |  |  219|  22.1k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   57|  22.1k|  TD(INT,      "int",    int32_t,  int,    int32,   int,    int32,   i32,  Int, Int32, 7) \
  |  |  ------------------
  |  |  |  |  220|  3.25k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  3.25k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 3.25k, False: 78.0M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  3.25k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  3.25k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 1.07k, False: 2.17k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 251, False: 1.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  1.32k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  1.32k|    }                                                   \
  |  |  |  |  |  |  216|  3.25k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 2.17k, False: 1.07k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  3.25k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 2.08k, False: 1.16k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  3.25k|    return av < bv;                                     \
  |  |  |  |  |  |  219|  3.25k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  9.04k|  TD(UINT,     "uint",   uint32_t, int,    uint32,  uint,   uint32,  u32,  UInt, UInt32, 8) \
  |  |  ------------------
  |  |  |  |  220|  9.04k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  9.04k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 9.04k, False: 78.0M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  9.04k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  9.04k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 6.78k, False: 2.26k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 330, False: 1.93k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  7.11k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  7.11k|    }                                                   \
  |  |  |  |  |  |  216|  9.04k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 2.26k, False: 6.78k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  9.04k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 2.13k, False: 6.91k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  9.04k|    return av < bv;                                     \
  |  |  |  |  |  |  219|  9.04k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   59|  77.1M|  TD(LONG,     "long",   int64_t,  long,   int64,   long,   int64,   i64,  Long, Int64, 9) \
  |  |  ------------------
  |  |  |  |  220|  77.1M|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  77.1M|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 77.1M, False: 849k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  77.1M|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  77.1M|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 77.1M, False: 27.3k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 890, False: 26.4k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  77.1M|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  77.1M|    }                                                   \
  |  |  |  |  |  |  216|  77.1M|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 27.3k, False: 77.1M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  77.1M|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 26.8k, False: 77.1M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  77.1M|    return av < bv;                                     \
  |  |  |  |  |  |  219|  77.1M|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  77.1M|  TD(ULONG,    "ulong",  uint64_t, long,   uint64,  ulong,  uint64,  u64,  ULong, UInt64, 10) /* end int */ \
  |  |  ------------------
  |  |  |  |  220|   138k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|   138k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 138k, False: 77.8M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|   138k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|   138k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 3.41k, False: 134k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 1.83k, False: 132k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  5.24k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  5.24k|    }                                                   \
  |  |  |  |  |  |  216|   138k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 134k, False: 3.41k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|   138k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 133k, False: 4.43k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|   138k|    return av < bv;                                     \
  |  |  |  |  |  |  219|   138k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|   138k|  TD(FLOAT,    "float",  float,    float,  float32, float,  float32, f32,  Float, Float32, 11) /* begin float */ \
  |  |  ------------------
  |  |  |  |  220|  7.02k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  7.02k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 7.02k, False: 78.0M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  7.02k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  7.02k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 952, False: 6.07k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 236, False: 5.83k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  1.18k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  1.18k|    }                                                   \
  |  |  |  |  |  |  216|  7.02k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 6.07k, False: 952]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  7.02k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 5.97k, False: 1.05k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  7.02k|    return av < bv;                                     \
  |  |  |  |  |  |  219|  7.02k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|  7.02k|  TD(DOUBLE,   "double", double,   double, float64, double, float64, f64,  Double, Double, 12) /* end float/scalar */
  |  |  ------------------
  |  |  |  |  220|  5.52k|    FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|  5.52k|  case BASE_TYPE_##ENUM: {                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (211:3): [True: 5.52k, False: 78.0M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  212|  5.52k|    CTYPE def = static_cast<CTYPE>(0);                  \
  |  |  |  |  |  |  213|  5.52k|    if (!a || !b) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (213:9): [True: 1.27k, False: 4.25k]
  |  |  |  |  |  |  |  Branch (213:15): [True: 335, False: 3.91k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  1.60k|      StringToNumber(key.value.constant.c_str(), &def); \
  |  |  |  |  |  |  215|  1.60k|    }                                                   \
  |  |  |  |  |  |  216|  5.52k|    const auto av = a ? ReadScalar<CTYPE>(a) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (216:21): [True: 4.25k, False: 1.27k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  5.52k|    const auto bv = b ? ReadScalar<CTYPE>(b) : def;     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (217:21): [True: 4.01k, False: 1.50k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  218|  5.52k|    return av < bv;                                     \
  |  |  |  |  |  |  219|  5.52k|  }
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  221|      0|#undef FLATBUFFERS_TD
  222|      0|    default: {
  ------------------
  |  Branch (222:5): [True: 0, False: 78.0M]
  ------------------
  223|      0|      FLATBUFFERS_ASSERT(false && "scalar type expected");
  224|      0|      return false;
  225|      0|    }
  226|  78.0M|  }
  227|  78.0M|}
idl_parser.cpp:_ZZN11flatbuffers6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmENK3$_2clEPhS8_:
 1851|  1.23k|          [struct_size](uint8_t* a, uint8_t* b) {
 1852|       |            // FIXME: faster?
 1853|  9.78k|            for (size_t i = 0; i < struct_size; i++) {
  ------------------
  |  Branch (1853:32): [True: 8.54k, False: 1.23k]
  ------------------
 1854|  8.54k|              std::swap(a[i], b[i]);
 1855|  8.54k|            }
 1856|  1.23k|          });
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111SimpleQsortINS_6OffsetINS_5TableEEEZNS_6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmE3$_3PFvPS4_SD_EEEvPT_SH_mT0_T1_:
  277|  2.98k|                        S swapper) {
  278|  2.98k|  if (end - begin <= static_cast<ptrdiff_t>(width)) return;
  ------------------
  |  Branch (278:7): [True: 2.09k, False: 886]
  ------------------
  279|    886|  auto l = begin + width;
  280|    886|  auto r = end;
  281|  11.0k|  while (l < r) {
  ------------------
  |  Branch (281:10): [True: 10.1k, False: 886]
  ------------------
  282|  10.1k|    if (comparator(begin, l)) {
  ------------------
  |  Branch (282:9): [True: 2.93k, False: 7.18k]
  ------------------
  283|  2.93k|      r -= width;
  284|  2.93k|      swapper(l, r);
  285|  7.18k|    } else {
  286|  7.18k|      l += width;
  287|  7.18k|    }
  288|  10.1k|  }
  289|    886|  l -= width;
  290|    886|  swapper(begin, l);
  291|    886|  SimpleQsort(begin, l, width, comparator, swapper);
  292|    886|  SimpleQsort(r, end, width, comparator, swapper);
  293|    886|}
idl_parser.cpp:_ZZN11flatbuffers6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmENK3$_3clEPKNS_6OffsetINS_5TableEEESC_:
 1866|  10.1k|            [key](const Offset<Table>* _a, const Offset<Table>* _b) -> bool {
 1867|  10.1k|              return CompareTablesByStringKey(_a, _b, *key);
 1868|  10.1k|            },
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_124CompareTablesByStringKeyEPKNS_6OffsetINS_5TableEEES5_RKNS_8FieldDefE:
  244|  10.1k|                                     const FieldDef& key) {
  245|  10.1k|  const voffset_t offset = key.value.offset;
  246|       |  // Indirect offset pointer to table pointer.
  247|  10.1k|  auto a = reinterpret_cast<const uint8_t*>(_a) + ReadScalar<uoffset_t>(_a);
  248|  10.1k|  auto b = reinterpret_cast<const uint8_t*>(_b) + ReadScalar<uoffset_t>(_b);
  249|       |  // Fetch field address from table.
  250|  10.1k|  a = reinterpret_cast<const Table*>(a)->GetAddressOf(offset);
  251|  10.1k|  b = reinterpret_cast<const Table*>(b)->GetAddressOf(offset);
  252|  10.1k|  if (a && b) {
  ------------------
  |  Branch (252:7): [True: 10.1k, False: 0]
  |  Branch (252:12): [True: 10.1k, False: 0]
  ------------------
  253|       |    // Indirect offset pointer to string pointer.
  254|  10.1k|    a += ReadScalar<uoffset_t>(a);
  255|  10.1k|    b += ReadScalar<uoffset_t>(b);
  256|  10.1k|    return *reinterpret_cast<const String*>(a) <
  257|  10.1k|           *reinterpret_cast<const String*>(b);
  258|  10.1k|  } else {
  259|      0|    return a ? true : false;
  ------------------
  |  Branch (259:12): [True: 0, False: 0]
  ------------------
  260|      0|  }
  261|  10.1k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111SimpleQsortINS_6OffsetINS_5TableEEEZNS_6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmE3$_4PFvPS4_SD_EEEvPT_SH_mT0_T1_:
  277|   121k|                        S swapper) {
  278|   121k|  if (end - begin <= static_cast<ptrdiff_t>(width)) return;
  ------------------
  |  Branch (278:7): [True: 61.1k, False: 60.0k]
  ------------------
  279|  60.0k|  auto l = begin + width;
  280|  60.0k|  auto r = end;
  281|  78.0M|  while (l < r) {
  ------------------
  |  Branch (281:10): [True: 78.0M, False: 60.0k]
  ------------------
  282|  78.0M|    if (comparator(begin, l)) {
  ------------------
  |  Branch (282:9): [True: 5.48k, False: 77.9M]
  ------------------
  283|  5.48k|      r -= width;
  284|  5.48k|      swapper(l, r);
  285|  77.9M|    } else {
  286|  77.9M|      l += width;
  287|  77.9M|    }
  288|  78.0M|  }
  289|  60.0k|  l -= width;
  290|  60.0k|  swapper(begin, l);
  291|  60.0k|  SimpleQsort(begin, l, width, comparator, swapper);
  292|  60.0k|  SimpleQsort(r, end, width, comparator, swapper);
  293|  60.0k|}
idl_parser.cpp:_ZZN11flatbuffers6Parser11ParseVectorERKNS_4TypeEPjPNS_8FieldDefEmENK3$_4clEPKNS_6OffsetINS_5TableEEESC_:
 1873|  78.0M|            [key](const Offset<Table>* _a, const Offset<Table>* _b) -> bool {
 1874|  78.0M|              return CompareTablesByScalarKey(_a, _b, *key);
 1875|  78.0M|            },
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_124CompareTablesByScalarKeyEPKNS_6OffsetINS_5TableEEES5_RKNS_8FieldDefE:
  231|  78.0M|                                     const FieldDef& key) {
  232|  78.0M|  const voffset_t offset = key.value.offset;
  233|       |  // Indirect offset pointer to table pointer.
  234|  78.0M|  auto a = reinterpret_cast<const uint8_t*>(_a) + ReadScalar<uoffset_t>(_a);
  235|  78.0M|  auto b = reinterpret_cast<const uint8_t*>(_b) + ReadScalar<uoffset_t>(_b);
  236|       |  // Fetch field address from table.
  237|  78.0M|  a = reinterpret_cast<const Table*>(a)->GetAddressOf(offset);
  238|  78.0M|  b = reinterpret_cast<const Table*>(b)->GetAddressOf(offset);
  239|  78.0M|  return CompareSerializedScalars(a, b, key);
  240|  78.0M|}
idl_parser.cpp:_ZN11flatbuffers6Parser21ParseVectorDelimitersIZNS0_10ParseArrayERNS_5ValueEE3$_0EENS_12CheckedErrorERmT_:
 1729|  5.96k|CheckedError Parser::ParseVectorDelimiters(size_t& count, F body) {
 1730|  5.96k|  EXPECT('[');
  ------------------
  |  |   64|  5.96k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  5.96k|  {                            \
  |  |  |  |   57|  5.96k|    auto ce = (call);          \
  |  |  |  |   58|  5.96k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 15, False: 5.94k]
  |  |  |  |  ------------------
  |  |  |  |   59|  5.96k|  }
  |  |  ------------------
  ------------------
 1731|  19.2k|  for (;;) {
 1732|  19.2k|    if ((!opts.strict_json || !count) && Is(']')) break;
  ------------------
  |  Branch (1732:10): [True: 18.7k, False: 470]
  |  Branch (1732:31): [True: 96, False: 374]
  |  Branch (1732:42): [True: 230, False: 18.6k]
  ------------------
 1733|  19.0k|    ECHECK(body(count));
  ------------------
  |  |   56|  19.0k|  {                            \
  |  |   57|  19.0k|    auto ce = (call);          \
  |  |   58|  19.0k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 144, False: 18.8k]
  |  |  ------------------
  |  |   59|  19.0k|  }
  ------------------
 1734|  18.8k|    count++;
 1735|  18.8k|    if (Is(']')) break;
  ------------------
  |  Branch (1735:9): [True: 5.55k, False: 13.3k]
  ------------------
 1736|  13.3k|    ECHECK(ParseComma());
  ------------------
  |  |   56|  13.3k|  {                            \
  |  |   57|  13.3k|    auto ce = (call);          \
  |  |   58|  13.3k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 24, False: 13.2k]
  |  |  ------------------
  |  |   59|  13.3k|  }
  ------------------
 1737|  13.2k|  }
 1738|  5.78k|  NEXT();
  ------------------
  |  |   63|  5.78k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  5.78k|  {                            \
  |  |  |  |   57|  5.78k|    auto ce = (call);          \
  |  |  |  |   58|  5.78k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 5.77k]
  |  |  |  |  ------------------
  |  |  |  |   59|  5.78k|  }
  |  |  ------------------
  ------------------
 1739|  5.77k|  return NoError();
 1740|  5.78k|}
idl_parser.cpp:_ZZN11flatbuffers6Parser10ParseArrayERNS_5ValueEENK3$_0clERm:
 1889|  19.0k|  auto err = ParseVectorDelimiters(count, [&](size_t&) -> CheckedError {
 1890|  19.0k|    stack.emplace_back(Value());
 1891|  19.0k|    auto& val = stack.back();
 1892|  19.0k|    val.type = type;
 1893|  19.0k|    if (IsStruct(type)) {
  ------------------
  |  Branch (1893:9): [True: 110, False: 18.9k]
  ------------------
 1894|    110|      ECHECK(ParseTable(*val.type.struct_def, &val.constant, nullptr));
  ------------------
  |  |   56|    110|  {                            \
  |  |   57|    110|    auto ce = (call);          \
  |  |   58|    110|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 110, False: 0]
  |  |  ------------------
  |  |   59|    110|  }
  ------------------
 1895|  18.9k|    } else {
 1896|  18.9k|      ECHECK(ParseSingleValue(nullptr, val, false));
  ------------------
  |  |   56|  18.9k|  {                            \
  |  |   57|  18.9k|    auto ce = (call);          \
  |  |   58|  18.9k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 34, False: 18.8k]
  |  |  ------------------
  |  |   59|  18.9k|  }
  ------------------
 1897|  18.8k|    }
 1898|  18.8k|    return NoError();
 1899|  19.0k|  });
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackIhEEvRNS_5ValueET_:
  296|    217|static inline void SingleValueRepack(Value& e, T val) {
  297|       |  // Remove leading zeros.
  298|    217|  if (IsInteger(e.type.base_type)) {
  ------------------
  |  Branch (298:7): [True: 217, False: 0]
  ------------------
  299|    217|    e.constant = NumToString(val);
  300|    217|  }
  301|    217|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackIaEEvRNS_5ValueET_:
  296|    164|static inline void SingleValueRepack(Value& e, T val) {
  297|       |  // Remove leading zeros.
  298|    164|  if (IsInteger(e.type.base_type)) {
  ------------------
  |  Branch (298:7): [True: 164, False: 0]
  ------------------
  299|    164|    e.constant = NumToString(val);
  300|    164|  }
  301|    164|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackIsEEvRNS_5ValueET_:
  296|    198|static inline void SingleValueRepack(Value& e, T val) {
  297|       |  // Remove leading zeros.
  298|    198|  if (IsInteger(e.type.base_type)) {
  ------------------
  |  Branch (298:7): [True: 198, False: 0]
  ------------------
  299|    198|    e.constant = NumToString(val);
  300|    198|  }
  301|    198|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackItEEvRNS_5ValueET_:
  296|    118|static inline void SingleValueRepack(Value& e, T val) {
  297|       |  // Remove leading zeros.
  298|    118|  if (IsInteger(e.type.base_type)) {
  ------------------
  |  Branch (298:7): [True: 118, False: 0]
  ------------------
  299|    118|    e.constant = NumToString(val);
  300|    118|  }
  301|    118|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackIiEEvRNS_5ValueET_:
  296|  5.57k|static inline void SingleValueRepack(Value& e, T val) {
  297|       |  // Remove leading zeros.
  298|  5.57k|  if (IsInteger(e.type.base_type)) {
  ------------------
  |  Branch (298:7): [True: 5.57k, False: 0]
  ------------------
  299|  5.57k|    e.constant = NumToString(val);
  300|  5.57k|  }
  301|  5.57k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackIjEEvRNS_5ValueET_:
  296|    241|static inline void SingleValueRepack(Value& e, T val) {
  297|       |  // Remove leading zeros.
  298|    241|  if (IsInteger(e.type.base_type)) {
  ------------------
  |  Branch (298:7): [True: 241, False: 0]
  ------------------
  299|    241|    e.constant = NumToString(val);
  300|    241|  }
  301|    241|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackIlEEvRNS_5ValueET_:
  296|    168|static inline void SingleValueRepack(Value& e, T val) {
  297|       |  // Remove leading zeros.
  298|    168|  if (IsInteger(e.type.base_type)) {
  ------------------
  |  Branch (298:7): [True: 168, False: 0]
  ------------------
  299|    168|    e.constant = NumToString(val);
  300|    168|  }
  301|    168|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_117SingleValueRepackImEEvRNS_5ValueET_:
  296|    319|static inline void SingleValueRepack(Value& e, T val) {
  297|       |  // Remove leading zeros.
  298|    319|  if (IsInteger(e.type.base_type)) {
  ------------------
  |  Branch (298:7): [True: 319, False: 0]
  ------------------
  299|    319|    e.constant = NumToString(val);
  300|    319|  }
  301|    319|}
idl_parser.cpp:_ZZN11flatbuffers7EnumDef11SortByValueEvENK3$_0clEPKNS_7EnumValES4_:
 2405|  1.76M|    std::sort(v.begin(), v.end(), [](const EnumVal* e1, const EnumVal* e2) {
 2406|  1.76M|      if (e1->GetAsUInt64() == e2->GetAsUInt64()) {
  ------------------
  |  Branch (2406:11): [True: 269k, False: 1.49M]
  ------------------
 2407|   269k|        return e1->name < e2->name;
 2408|   269k|      }
 2409|  1.49M|      return e1->GetAsUInt64() < e2->GetAsUInt64();
 2410|  1.76M|    });
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: 263k, False: 1.48M]
  ------------------
 2414|   263k|        return e1->name < e2->name;
 2415|   263k|      }
 2416|  1.48M|      return e1->GetAsInt64() < e2->GetAsInt64();
 2417|  1.74M|    });
_ZN11flatbuffers7EnumDef15ChangeEnumValueIyEEvPNS_7EnumValET_:
 2444|  2.78k|void EnumDef::ChangeEnumValue(EnumVal* ev, T new_value) {
 2445|  2.78k|  ev->value = static_cast<int64_t>(new_value);
 2446|  2.78k|}
idl_parser.cpp:_ZN11flatbuffers6Parser20ParseTableDelimitersIZNS0_16SkipAnyJsonValueEvE3$_0EENS_12CheckedErrorERmPKNS_9StructDefET_:
 1509|  1.03k|                                          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|  1.03k|  char terminator = '}';
 1513|  1.03k|  bool is_nested_vector = struct_def && Is('[');
  ------------------
  |  Branch (1513:27): [True: 0, False: 1.03k]
  |  Branch (1513:41): [True: 0, False: 0]
  ------------------
 1514|  1.03k|  if (is_nested_vector) {
  ------------------
  |  Branch (1514:7): [True: 0, False: 1.03k]
  ------------------
 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|  1.03k|  } else {
 1518|  1.03k|    EXPECT('{');
  ------------------
  |  |   64|  1.03k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  1.03k|  {                            \
  |  |  |  |   57|  1.03k|    auto ce = (call);          \
  |  |  |  |   58|  1.03k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 1.03k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.03k|  }
  |  |  ------------------
  ------------------
 1519|  1.03k|  }
 1520|  1.94k|  for (;;) {
 1521|  1.94k|    if ((!opts.strict_json || !fieldn) && Is(terminator)) break;
  ------------------
  |  Branch (1521:10): [True: 1.10k, False: 848]
  |  Branch (1521:31): [True: 361, False: 487]
  |  Branch (1521:43): [True: 631, False: 831]
  ------------------
 1522|  1.31k|    std::string name;
 1523|  1.31k|    if (is_nested_vector) {
  ------------------
  |  Branch (1523:9): [True: 0, False: 1.31k]
  ------------------
 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.31k|    } else {
 1529|  1.31k|      name = attribute_;
 1530|  1.31k|      if (Is(kTokenStringConstant)) {
  ------------------
  |  Branch (1530:11): [True: 523, False: 795]
  ------------------
 1531|    523|        NEXT();
  ------------------
  |  |   63|    523|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    523|  {                            \
  |  |  |  |   57|    523|    auto ce = (call);          \
  |  |  |  |   58|    523|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 521]
  |  |  |  |  ------------------
  |  |  |  |   59|    523|  }
  |  |  ------------------
  ------------------
 1532|    795|      } else {
 1533|    795|        EXPECT(opts.strict_json ? kTokenStringConstant : kTokenIdentifier);
  ------------------
  |  |   64|    795|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|    795|  {                            \
  |  |  |  |   57|  1.59k|    auto ce = (call);          \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:16): [True: 11, False: 784]
  |  |  |  |  ------------------
  |  |  |  |   58|    795|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 27, False: 768]
  |  |  |  |  ------------------
  |  |  |  |   59|    795|  }
  |  |  ------------------
  ------------------
 1534|    768|      }
 1535|  1.28k|      if (!opts.protobuf_ascii_alike || !(Is('{') || Is('['))) EXPECT(':');
  ------------------
  |  |   64|  1.28k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  1.28k|  {                            \
  |  |  |  |   57|  1.28k|    auto ce = (call);          \
  |  |  |  |   58|  1.28k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 15, False: 1.27k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.28k|  }
  |  |  ------------------
  ------------------
  |  Branch (1535:11): [True: 1.28k, False: 0]
  |  Branch (1535:43): [True: 0, False: 0]
  |  Branch (1535:54): [True: 0, False: 0]
  ------------------
 1536|  1.27k|    }
 1537|  1.27k|    ECHECK(body(name, fieldn, struct_def));
  ------------------
  |  |   56|  1.27k|  {                            \
  |  |   57|  1.27k|    auto ce = (call);          \
  |  |   58|  1.27k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 104, False: 1.17k]
  |  |  ------------------
  |  |   59|  1.27k|  }
  ------------------
 1538|  1.17k|    if (Is(terminator)) break;
  ------------------
  |  Branch (1538:9): [True: 245, False: 925]
  ------------------
 1539|    925|    ECHECK(ParseComma());
  ------------------
  |  |   56|    925|  {                            \
  |  |   57|    925|    auto ce = (call);          \
  |  |   58|    925|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 7, False: 918]
  |  |  ------------------
  |  |   59|    925|  }
  ------------------
 1540|    918|  }
 1541|    876|  NEXT();
  ------------------
  |  |   63|    876|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    876|  {                            \
  |  |  |  |   57|    876|    auto ce = (call);          \
  |  |  |  |   58|    876|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 875]
  |  |  |  |  ------------------
  |  |  |  |   59|    876|  }
  |  |  ------------------
  ------------------
 1542|    875|  if (is_nested_vector && fieldn != struct_def->fields.vec.size()) {
  ------------------
  |  Branch (1542:7): [True: 0, False: 875]
  |  Branch (1542:27): [True: 0, False: 0]
  ------------------
 1543|      0|    return Error("wrong number of unnamed fields in table vector");
 1544|      0|  }
 1545|    875|  return NoError();
 1546|    875|}
idl_parser.cpp:_ZZN11flatbuffers6Parser16SkipAnyJsonValueEvENK3$_0clERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERmPKNS_9StructDefE:
 3462|  1.27k|                                      const StructDef*) -> CheckedError {
 3463|  1.27k|                                    ECHECK(SkipAnyJsonValue());
  ------------------
  |  |   56|  1.27k|  {                            \
  |  |   57|  1.27k|    auto ce = (call);          \
  |  |   58|  1.27k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 104, False: 1.17k]
  |  |  ------------------
  |  |   59|  1.27k|  }
  ------------------
 3464|  1.17k|                                    fieldn++;
 3465|  1.17k|                                    return NoError();
 3466|  1.27k|                                  });
idl_parser.cpp:_ZN11flatbuffers6Parser21ParseVectorDelimitersIZNS0_16SkipAnyJsonValueEvE3$_1EENS_12CheckedErrorERmT_:
 1729|  1.22k|CheckedError Parser::ParseVectorDelimiters(size_t& count, F body) {
 1730|  1.22k|  EXPECT('[');
  ------------------
  |  |   64|  1.22k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  1.22k|  {                            \
  |  |  |  |   57|  1.22k|    auto ce = (call);          \
  |  |  |  |   58|  1.22k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 3, False: 1.21k]
  |  |  |  |  ------------------
  |  |  |  |   59|  1.22k|  }
  |  |  ------------------
  ------------------
 1731|  8.84k|  for (;;) {
 1732|  8.84k|    if ((!opts.strict_json || !count) && Is(']')) break;
  ------------------
  |  Branch (1732:10): [True: 2.24k, False: 6.60k]
  |  Branch (1732:31): [True: 557, False: 6.04k]
  |  Branch (1732:42): [True: 365, False: 2.43k]
  ------------------
 1733|  8.48k|    ECHECK(body(count));
  ------------------
  |  |   56|  8.48k|  {                            \
  |  |   57|  8.48k|    auto ce = (call);          \
  |  |   58|  8.48k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 213, False: 8.26k]
  |  |  ------------------
  |  |   59|  8.48k|  }
  ------------------
 1734|  8.26k|    count++;
 1735|  8.26k|    if (Is(']')) break;
  ------------------
  |  Branch (1735:9): [True: 574, False: 7.69k]
  ------------------
 1736|  7.69k|    ECHECK(ParseComma());
  ------------------
  |  |   56|  7.69k|  {                            \
  |  |   57|  7.69k|    auto ce = (call);          \
  |  |   58|  7.69k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 66, False: 7.62k]
  |  |  ------------------
  |  |   59|  7.69k|  }
  ------------------
 1737|  7.62k|  }
 1738|    939|  NEXT();
  ------------------
  |  |   63|    939|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|    939|  {                            \
  |  |  |  |   57|    939|    auto ce = (call);          \
  |  |  |  |   58|    939|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 938]
  |  |  |  |  ------------------
  |  |  |  |   59|    939|  }
  |  |  ------------------
  ------------------
 1739|    938|  return NoError();
 1740|    939|}
idl_parser.cpp:_ZZN11flatbuffers6Parser16SkipAnyJsonValueEvENK3$_1clERm:
 3471|  8.48k|          count, [&](size_t&) -> CheckedError { return SkipAnyJsonValue(); });
idl_parser.cpp:_ZN11flatbuffers6Parser20ParseTableDelimitersIZNS0_20ParseFlexBufferValueEPN11flexbuffers7BuilderEE3$_0EENS_12CheckedErrorERmPKNS_9StructDefET_:
 1509|  45.1k|                                          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|  45.1k|  char terminator = '}';
 1513|  45.1k|  bool is_nested_vector = struct_def && Is('[');
  ------------------
  |  Branch (1513:27): [True: 0, False: 45.1k]
  |  Branch (1513:41): [True: 0, False: 0]
  ------------------
 1514|  45.1k|  if (is_nested_vector) {
  ------------------
  |  Branch (1514:7): [True: 0, False: 45.1k]
  ------------------
 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|  45.1k|  } else {
 1518|  45.1k|    EXPECT('{');
  ------------------
  |  |   64|  45.1k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  45.1k|  {                            \
  |  |  |  |   57|  45.1k|    auto ce = (call);          \
  |  |  |  |   58|  45.1k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 45.1k]
  |  |  |  |  ------------------
  |  |  |  |   59|  45.1k|  }
  |  |  ------------------
  ------------------
 1519|  45.1k|  }
 1520|   253k|  for (;;) {
 1521|   253k|    if ((!opts.strict_json || !fieldn) && Is(terminator)) break;
  ------------------
  |  Branch (1521:10): [True: 238k, False: 14.8k]
  |  Branch (1521:31): [True: 1.29k, False: 13.5k]
  |  Branch (1521:43): [True: 1.60k, False: 237k]
  ------------------
 1522|   251k|    std::string name;
 1523|   251k|    if (is_nested_vector) {
  ------------------
  |  Branch (1523:9): [True: 0, False: 251k]
  ------------------
 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|   251k|    } else {
 1529|   251k|      name = attribute_;
 1530|   251k|      if (Is(kTokenStringConstant)) {
  ------------------
  |  Branch (1530:11): [True: 32.7k, False: 218k]
  ------------------
 1531|  32.7k|        NEXT();
  ------------------
  |  |   63|  32.7k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  32.7k|  {                            \
  |  |  |  |   57|  32.7k|    auto ce = (call);          \
  |  |  |  |   58|  32.7k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 2, False: 32.7k]
  |  |  |  |  ------------------
  |  |  |  |   59|  32.7k|  }
  |  |  ------------------
  ------------------
 1532|   218k|      } else {
 1533|   218k|        EXPECT(opts.strict_json ? kTokenStringConstant : kTokenIdentifier);
  ------------------
  |  |   64|   218k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|   218k|  {                            \
  |  |  |  |   57|   437k|    auto ce = (call);          \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:16): [True: 13, False: 218k]
  |  |  |  |  ------------------
  |  |  |  |   58|   218k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 58, False: 218k]
  |  |  |  |  ------------------
  |  |  |  |   59|   218k|  }
  |  |  ------------------
  ------------------
 1534|   218k|      }
 1535|   251k|      if (!opts.protobuf_ascii_alike || !(Is('{') || Is('['))) EXPECT(':');
  ------------------
  |  |   64|   251k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|   251k|  {                            \
  |  |  |  |   57|   251k|    auto ce = (call);          \
  |  |  |  |   58|   251k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 29, False: 251k]
  |  |  |  |  ------------------
  |  |  |  |   59|   251k|  }
  |  |  ------------------
  ------------------
  |  Branch (1535:11): [True: 251k, False: 0]
  |  Branch (1535:43): [True: 0, False: 0]
  |  Branch (1535:54): [True: 0, False: 0]
  ------------------
 1536|   251k|    }
 1537|   251k|    ECHECK(body(name, fieldn, struct_def));
  ------------------
  |  |   56|   251k|  {                            \
  |  |   57|   251k|    auto ce = (call);          \
  |  |   58|   251k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 632, False: 250k]
  |  |  ------------------
  |  |   59|   251k|  }
  ------------------
 1538|   250k|    if (Is(terminator)) break;
  ------------------
  |  Branch (1538:9): [True: 42.6k, False: 208k]
  ------------------
 1539|   208k|    ECHECK(ParseComma());
  ------------------
  |  |   56|   208k|  {                            \
  |  |   57|   208k|    auto ce = (call);          \
  |  |   58|   208k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 154, False: 207k]
  |  |  ------------------
  |  |   59|   208k|  }
  ------------------
 1540|   207k|  }
 1541|  44.2k|  NEXT();
  ------------------
  |  |   63|  44.2k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  44.2k|  {                            \
  |  |  |  |   57|  44.2k|    auto ce = (call);          \
  |  |  |  |   58|  44.2k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 4, False: 44.2k]
  |  |  |  |  ------------------
  |  |  |  |   59|  44.2k|  }
  |  |  ------------------
  ------------------
 1542|  44.2k|  if (is_nested_vector && fieldn != struct_def->fields.vec.size()) {
  ------------------
  |  Branch (1542:7): [True: 0, False: 44.2k]
  |  Branch (1542:27): [True: 0, False: 0]
  ------------------
 1543|      0|    return Error("wrong number of unnamed fields in table vector");
 1544|      0|  }
 1545|  44.2k|  return NoError();
 1546|  44.2k|}
idl_parser.cpp:_ZZN11flatbuffers6Parser20ParseFlexBufferValueEPN11flexbuffers7BuilderEENK3$_0clERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEERmPKNS_9StructDefE:
 3508|   251k|                                   const StructDef*) -> CheckedError {
 3509|   251k|                                 builder->Key(name);
 3510|   251k|                                 ECHECK(ParseFlexBufferValue(builder));
  ------------------
  |  |   56|   251k|  {                            \
  |  |   57|   251k|    auto ce = (call);          \
  |  |   58|   251k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 632, False: 250k]
  |  |  ------------------
  |  |   59|   251k|  }
  ------------------
 3511|   250k|                                 fieldn++;
 3512|   250k|                                 return NoError();
 3513|   251k|                               });
idl_parser.cpp:_ZN11flatbuffers6Parser21ParseVectorDelimitersIZNS0_20ParseFlexBufferValueEPN11flexbuffers7BuilderEE3$_1EENS_12CheckedErrorERmT_:
 1729|  5.57k|CheckedError Parser::ParseVectorDelimiters(size_t& count, F body) {
 1730|  5.57k|  EXPECT('[');
  ------------------
  |  |   64|  5.57k|#define EXPECT(tok) ECHECK(Expect(tok))
  |  |  ------------------
  |  |  |  |   56|  5.57k|  {                            \
  |  |  |  |   57|  5.57k|    auto ce = (call);          \
  |  |  |  |   58|  5.57k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 5.56k]
  |  |  |  |  ------------------
  |  |  |  |   59|  5.57k|  }
  |  |  ------------------
  ------------------
 1731|  79.3k|  for (;;) {
 1732|  79.3k|    if ((!opts.strict_json || !count) && Is(']')) break;
  ------------------
  |  Branch (1732:10): [True: 78.8k, False: 575]
  |  Branch (1732:31): [True: 139, False: 436]
  |  Branch (1732:42): [True: 1.86k, False: 77.0k]
  ------------------
 1733|  77.5k|    ECHECK(body(count));
  ------------------
  |  |   56|  77.5k|  {                            \
  |  |   57|  77.5k|    auto ce = (call);          \
  |  |   58|  77.5k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 525, False: 77.0k]
  |  |  ------------------
  |  |   59|  77.5k|  }
  ------------------
 1734|  77.0k|    count++;
 1735|  77.0k|    if (Is(']')) break;
  ------------------
  |  Branch (1735:9): [True: 2.84k, False: 74.1k]
  ------------------
 1736|  74.1k|    ECHECK(ParseComma());
  ------------------
  |  |   56|  74.1k|  {                            \
  |  |   57|  74.1k|    auto ce = (call);          \
  |  |   58|  74.1k|    if (ce.Check()) return ce; \
  |  |  ------------------
  |  |  |  Branch (58:9): [True: 333, False: 73.8k]
  |  |  ------------------
  |  |   59|  74.1k|  }
  ------------------
 1737|  73.8k|  }
 1738|  4.71k|  NEXT();
  ------------------
  |  |   63|  4.71k|#define NEXT() ECHECK(Next())
  |  |  ------------------
  |  |  |  |   56|  4.71k|  {                            \
  |  |  |  |   57|  4.71k|    auto ce = (call);          \
  |  |  |  |   58|  4.71k|    if (ce.Check()) return ce; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:9): [True: 1, False: 4.71k]
  |  |  |  |  ------------------
  |  |  |  |   59|  4.71k|  }
  |  |  ------------------
  ------------------
 1739|  4.71k|  return NoError();
 1740|  4.71k|}
idl_parser.cpp:_ZZN11flatbuffers6Parser20ParseFlexBufferValueEPN11flexbuffers7BuilderEENK3$_1clERm:
   57|  77.5k|    auto ce = (call);          \
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_113AssignIndicesINS_9StructDefEEEvRKNSt3__16vectorIPT_NS3_9allocatorIS6_EEEE:
  377|  5.20k|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.20k|  auto vec = defvec;
  380|  5.20k|  std::sort(vec.begin(), vec.end(), compareName<T>);
  381|  60.6k|  for (int i = 0; i < static_cast<int>(vec.size()); i++) vec[i]->index = i;
  ------------------
  |  Branch (381:19): [True: 55.3k, False: 5.20k]
  ------------------
  382|  5.20k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111compareNameINS_9StructDefEEEbPKT_S5_:
  371|   428k|static bool compareName(const T* a, const T* b) {
  372|   428k|  return a->defined_namespace->GetFullyQualifiedName(a->name) <
  373|   428k|         b->defined_namespace->GetFullyQualifiedName(b->name);
  374|   428k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_113AssignIndicesINS_7EnumDefEEEvRKNSt3__16vectorIPT_NS3_9allocatorIS6_EEEE:
  377|  5.20k|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.20k|  auto vec = defvec;
  380|  5.20k|  std::sort(vec.begin(), vec.end(), compareName<T>);
  381|  85.4k|  for (int i = 0; i < static_cast<int>(vec.size()); i++) vec[i]->index = i;
  ------------------
  |  Branch (381:19): [True: 80.2k, False: 5.20k]
  ------------------
  382|  5.20k|}
idl_parser.cpp:_ZN11flatbuffers12_GLOBAL__N_111compareNameINS_7EnumDefEEEbPKT_S5_:
  371|   687k|static bool compareName(const T* a, const T* b) {
  372|   687k|  return a->defined_namespace->GetFullyQualifiedName(a->name) <
  373|   687k|         b->defined_namespace->GetFullyQualifiedName(b->name);
  374|   687k|}

_ZN11flatbuffers8LoadFileEPKcbPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  217|    136|bool LoadFile(const char* name, bool binary, std::string* buf) {
  218|    136|  FLATBUFFERS_ASSERT(g_load_file_function);
  219|    136|  return g_load_file_function(name, binary, buf);
  220|    136|}
_ZN11flatbuffers10FileExistsEPKc:
  222|    154|bool FileExists(const char* name) {
  223|    154|  FLATBUFFERS_ASSERT(g_file_exists_function);
  224|    154|  return g_file_exists_function(name);
  225|    154|}
_ZN11flatbuffers9DirExistsEPKc:
  227|    136|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|    136|    #define flatbuffers_stat stat
  235|    136|    #define FLATBUFFERS_S_IFDIR S_IFDIR
  236|    136|  #endif
  237|       |  // clang-format on
  238|    136|  struct flatbuffers_stat file_info;
  239|    136|  if (flatbuffers_stat(name, &file_info) != 0) return false;
  ------------------
  |  |  234|    136|    #define flatbuffers_stat stat
  ------------------
  |  Branch (239:7): [True: 112, False: 24]
  ------------------
  240|     24|  return (file_info.st_mode & FLATBUFFERS_S_IFDIR) != 0;
  ------------------
  |  |  235|     24|    #define FLATBUFFERS_S_IFDIR S_IFDIR
  ------------------
  241|    136|}
_ZN11flatbuffers9StripPathERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE:
  281|    151|std::string StripPath(const std::string& filepath) {
  282|    151|  size_t i = filepath.find_last_of(PathSeparatorSet);
  283|    151|  return i != std::string::npos ? filepath.substr(i + 1) : filepath;
  ------------------
  |  Branch (283:10): [True: 114, False: 37]
  ------------------
  284|    151|}
_ZN11flatbuffers18ConCatPathFileNameERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEES8_:
  301|    139|                               const std::string& filename) {
  302|    139|  std::string filepath = path;
  303|    139|  if (filepath.length()) {
  ------------------
  |  Branch (303:7): [True: 0, False: 139]
  ------------------
  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|    139|  filepath += filename;
  312|       |  // Ignore './' at the start of filepath.
  313|    139|  if (filepath[0] == '.' && filepath[1] == kPathSeparator) {
  ------------------
  |  Branch (313:7): [True: 13, False: 126]
  |  Branch (313:29): [True: 1, False: 12]
  ------------------
  314|      1|    filepath.erase(0, 2);
  315|      1|  }
  316|    139|  return filepath;
  317|    139|}
_ZN11flatbuffers9PosixPathEPKc:
  319|    167|std::string PosixPath(const char* path) {
  320|    167|  std::string p = path;
  321|    167|  std::replace(p.begin(), p.end(), '\\', '/');
  322|    167|  return p;
  323|    167|}
_ZN11flatbuffers12AbsolutePathERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE:
  347|     15|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|     15|      char *abs_path_temp = realpath(filepath.c_str(), nullptr);
  358|     15|      bool success = abs_path_temp != nullptr;
  359|     15|      std::string abs_path;
  360|     15|      if(success) {
  ------------------
  |  Branch (360:10): [True: 15, False: 0]
  ------------------
  361|     15|        abs_path = abs_path_temp;
  362|     15|        free(abs_path_temp);
  363|     15|      }
  364|     15|      return success
  ------------------
  |  Branch (364:14): [True: 15, False: 0]
  ------------------
  365|     15|    #endif
  366|     15|      ? abs_path
  367|     15|      : filepath;
  368|     15|  #endif // FLATBUFFERS_NO_ABSOLUTE_PATH_RESOLUTION
  369|       |  // clang-format on
  370|     15|}
_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|    136|static bool LoadFileRaw(const char* name, bool binary, std::string* buf) {
   67|    136|  if (DirExists(name)) return false;
  ------------------
  |  Branch (67:7): [True: 9, False: 127]
  ------------------
   68|    127|  std::ifstream ifs(name, binary ? std::ifstream::binary : std::ifstream::in);
  ------------------
  |  Branch (68:27): [True: 127, False: 0]
  ------------------
   69|    127|  if (!ifs.is_open()) return false;
  ------------------
  |  Branch (69:7): [True: 112, False: 15]
  ------------------
   70|     15|  if (binary) {
  ------------------
  |  Branch (70:7): [True: 15, False: 0]
  ------------------
   71|       |    // The fastest way to read a file into a string.
   72|     15|    ifs.seekg(0, std::ios::end);
   73|     15|    auto size = ifs.tellg();
   74|     15|    (*buf).resize(static_cast<size_t>(size));
   75|     15|    ifs.seekg(0, std::ios::beg);
   76|     15|    ifs.read(&(*buf)[0], (*buf).size());
   77|     15|  } 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|     15|  return !ifs.bad();
   84|    127|}
util.cpp:_ZN11flatbuffers12_GLOBAL__N_113FileExistsRawEPKc:
   61|    154|static bool FileExistsRaw(const char* name) {
   62|    154|  std::ifstream ifs(name);
   63|    154|  return ifs.good();
   64|    154|}

LLVMFuzzerTestOneInput:
   23|  28.2k|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|  28.2k|  if (size < 3) return 0;
  ------------------
  |  Branch (25:7): [True: 2, False: 28.2k]
  ------------------
   26|  28.2k|  const uint8_t flags = data[0];
   27|  28.2k|  (void)data[1];  //  reserved
   28|  28.2k|  data += 2;
   29|  28.2k|  size -= 2;  // bypass
   30|       |
   31|  28.2k|  const std::string original(reinterpret_cast<const char*>(data), size);
   32|  28.2k|  auto input = std::string(original.c_str());  // until '\0'
   33|  28.2k|  if (input.size() < kMinInputLength || input.size() > kMaxInputLength)
  ------------------
  |  Branch (33:7): [True: 2, False: 28.2k]
  |  Branch (33:41): [True: 14, False: 28.1k]
  ------------------
   34|     16|    return 0;
   35|       |
   36|  28.1k|  flatbuffers::IDLOptions opts;
   37|  28.1k|  opts.strict_json = (flags & flags_strict_json);
   38|  28.1k|  opts.skip_unexpected_fields_in_json =
   39|  28.1k|      (flags & flags_skip_unexpected_fields_in_json);
   40|  28.1k|  opts.allow_non_utf8 = (flags & flags_allow_non_utf8);
   41|       |
   42|  28.1k|  flatbuffers::Parser parser(opts);
   43|       |
   44|       |  // Guarantee 0-termination in the input.
   45|  28.1k|  auto parse_input = input.c_str();
   46|       |
   47|       |  // Check Parser.
   48|  28.1k|  auto result = parser.Parse(parse_input);
   49|  28.1k|  if (result) {
  ------------------
  |  Branch (49:7): [True: 5.20k, False: 22.9k]
  ------------------
   50|  5.20k|    parser.Serialize();
   51|  5.20k|    const uint8_t* buf = parser.builder_.GetBufferPointer();
   52|  5.20k|    flatbuffers::Verifier verifier(buf, parser.builder_.GetSize());
   53|  5.20k|    TEST_EQ(true, reflection::VerifySchemaBuffer(verifier));
  ------------------
  |  |   19|  5.20k|#define TEST_EQ(exp, val) TestEq(exp, val, "'" #exp "' != '" #val "'", __FILE__, __LINE__, "")
  ------------------
   54|       |
   55|  5.20k|    auto root = flatbuffers::GetRoot<flatbuffers::Table>(buf);
   56|  5.20k|    if (verifier.VerifyTableStart(buf) && root->VerifyTableStart(verifier)) {
  ------------------
  |  Branch (56:9): [True: 0, False: 5.20k]
  |  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.20k|  }
   63|  28.1k|  return 0;
   64|  28.2k|}

_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.20k|            const char* func) {
   95|  5.20k|  if (static_cast<U>(expval) != val) {
  ------------------
  |  Branch (95:7): [True: 0, False: 5.20k]
  ------------------
   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.20k|}

