Minireflect fixed array (#6129)

* CMakeLists: also really generate optional_scalars as needed by test elsewhere

* [C++] Handle fixed-length array in minireflection

Fixes #6128
This commit is contained in:
Mark Nauwelaerts
2020-09-23 02:57:01 +02:00
committed by GitHub
parent 96d5e35977
commit 34d67b425e
16 changed files with 127 additions and 73 deletions

View File

@@ -341,21 +341,22 @@ inline const flatbuffers::TypeTable *TestEnumTypeTable() {
"C"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, names
flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
inline const flatbuffers::TypeTable *NestedStructTypeTable() {
static const flatbuffers::TypeCode type_codes[] = {
{ flatbuffers::ET_SEQUENCE, 0, -1 },
{ flatbuffers::ET_INT, 1, -1 },
{ flatbuffers::ET_CHAR, 0, 0 },
{ flatbuffers::ET_SEQUENCE, 0, 0 },
{ flatbuffers::ET_SEQUENCE, 0, -1 }
{ flatbuffers::ET_CHAR, 1, 0 },
{ flatbuffers::ET_LONG, 1, -1 }
};
static const flatbuffers::TypeFunction type_refs[] = {
MyGame::Example::TestEnumTypeTable
};
static const int16_t array_sizes[] = { 2, 2, 2, };
static const int64_t values[] = { 0, 8, 9, 16, 32 };
static const char * const names[] = {
"a",
@@ -364,7 +365,7 @@ inline const flatbuffers::TypeTable *NestedStructTypeTable() {
"d"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 4, type_codes, type_refs, values, names
flatbuffers::ST_STRUCT, 4, type_codes, type_refs, array_sizes, values, names
};
return &tt;
}
@@ -372,15 +373,16 @@ inline const flatbuffers::TypeTable *NestedStructTypeTable() {
inline const flatbuffers::TypeTable *ArrayStructTypeTable() {
static const flatbuffers::TypeCode type_codes[] = {
{ flatbuffers::ET_FLOAT, 0, -1 },
{ flatbuffers::ET_SEQUENCE, 0, -1 },
{ flatbuffers::ET_INT, 1, -1 },
{ flatbuffers::ET_CHAR, 0, -1 },
{ flatbuffers::ET_SEQUENCE, 0, 0 },
{ flatbuffers::ET_SEQUENCE, 1, 0 },
{ flatbuffers::ET_INT, 0, -1 },
{ flatbuffers::ET_SEQUENCE, 0, -1 }
{ flatbuffers::ET_LONG, 1, -1 }
};
static const flatbuffers::TypeFunction type_refs[] = {
MyGame::Example::NestedStructTypeTable
};
static const int16_t array_sizes[] = { 15, 2, 2, };
static const int64_t values[] = { 0, 4, 64, 72, 136, 144, 160 };
static const char * const names[] = {
"a",
@@ -391,7 +393,7 @@ inline const flatbuffers::TypeTable *ArrayStructTypeTable() {
"f"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 6, type_codes, type_refs, values, names
flatbuffers::ST_STRUCT, 6, type_codes, type_refs, array_sizes, values, names
};
return &tt;
}
@@ -407,7 +409,7 @@ inline const flatbuffers::TypeTable *ArrayTableTypeTable() {
"a"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}

View File

@@ -2867,7 +2867,7 @@ inline const flatbuffers::TypeTable *ColorTypeTable() {
"Blue"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_ENUM, 3, type_codes, type_refs, values, names
flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, values, names
};
return &tt;
}
@@ -2890,7 +2890,7 @@ inline const flatbuffers::TypeTable *RaceTypeTable() {
"Elf"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_ENUM, 4, type_codes, type_refs, values, names
flatbuffers::ST_ENUM, 4, type_codes, type_refs, nullptr, values, names
};
return &tt;
}
@@ -2914,7 +2914,7 @@ inline const flatbuffers::TypeTable *AnyTypeTable() {
"MyGame_Example2_Monster"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, names
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -2938,7 +2938,7 @@ inline const flatbuffers::TypeTable *AnyUniqueAliasesTypeTable() {
"M2"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, names
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -2960,7 +2960,7 @@ inline const flatbuffers::TypeTable *AnyAmbiguousAliasesTypeTable() {
"M3"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, names
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -2969,7 +2969,7 @@ inline const flatbuffers::TypeTable *AnyAmbiguousAliasesTypeTable() {
inline const flatbuffers::TypeTable *InParentNamespaceTypeTable() {
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr
flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr, nullptr
};
return &tt;
}
@@ -2978,7 +2978,7 @@ namespace Example2 {
inline const flatbuffers::TypeTable *MonsterTypeTable() {
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr
flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr, nullptr
};
return &tt;
}
@@ -2998,7 +2998,7 @@ inline const flatbuffers::TypeTable *TestTypeTable() {
"b"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, values, names
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, nullptr, values, names
};
return &tt;
}
@@ -3014,7 +3014,7 @@ inline const flatbuffers::TypeTable *TestSimpleTableWithEnumTypeTable() {
"color"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -3042,7 +3042,7 @@ inline const flatbuffers::TypeTable *Vec3TypeTable() {
"test3"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 6, type_codes, type_refs, values, names
flatbuffers::ST_STRUCT, 6, type_codes, type_refs, nullptr, values, names
};
return &tt;
}
@@ -3058,7 +3058,7 @@ inline const flatbuffers::TypeTable *AbilityTypeTable() {
"distance"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, values, names
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, nullptr, values, names
};
return &tt;
}
@@ -3075,7 +3075,7 @@ inline const flatbuffers::TypeTable *StatTypeTable() {
"count"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 3, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 3, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}
@@ -3088,7 +3088,7 @@ inline const flatbuffers::TypeTable *ReferrableTypeTable() {
"id"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}
@@ -3211,7 +3211,7 @@ inline const flatbuffers::TypeTable *MonsterTypeTable() {
"signed_enum"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 49, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 49, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -3246,7 +3246,7 @@ inline const flatbuffers::TypeTable *TypeAliasesTypeTable() {
"vf64"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 12, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 12, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}

View File

@@ -725,7 +725,7 @@ inline const flatbuffers::TypeTable *OptionalByteTypeTable() {
"One"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_ENUM, 2, type_codes, type_refs, nullptr, names
flatbuffers::ST_ENUM, 2, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -809,7 +809,7 @@ inline const flatbuffers::TypeTable *ScalarStuffTypeTable() {
"default_enum"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 35, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 35, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}

View File

@@ -341,7 +341,7 @@ inline const flatbuffers::TypeTable *MonsterExtraTypeTable() {
"deprec"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 11, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 11, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}

View File

@@ -3149,7 +3149,7 @@ inline const flatbuffers::TypeTable *ColorTypeTable() {
"Blue"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_ENUM, 3, type_codes, type_refs, values, names
flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, values, names
};
return &tt;
}
@@ -3172,7 +3172,7 @@ inline const flatbuffers::TypeTable *RaceTypeTable() {
"Elf"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_ENUM, 4, type_codes, type_refs, values, names
flatbuffers::ST_ENUM, 4, type_codes, type_refs, nullptr, values, names
};
return &tt;
}
@@ -3196,7 +3196,7 @@ inline const flatbuffers::TypeTable *AnyTypeTable() {
"MyGame_Example2_Monster"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, names
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -3220,7 +3220,7 @@ inline const flatbuffers::TypeTable *AnyUniqueAliasesTypeTable() {
"M2"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, names
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -3242,7 +3242,7 @@ inline const flatbuffers::TypeTable *AnyAmbiguousAliasesTypeTable() {
"M3"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, names
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -3251,7 +3251,7 @@ inline const flatbuffers::TypeTable *AnyAmbiguousAliasesTypeTable() {
inline const flatbuffers::TypeTable *InParentNamespaceTypeTable() {
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr
flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr, nullptr
};
return &tt;
}
@@ -3260,7 +3260,7 @@ namespace Example2 {
inline const flatbuffers::TypeTable *MonsterTypeTable() {
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr
flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr, nullptr
};
return &tt;
}
@@ -3280,7 +3280,7 @@ inline const flatbuffers::TypeTable *TestTypeTable() {
"b"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, values, names
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, nullptr, values, names
};
return &tt;
}
@@ -3296,7 +3296,7 @@ inline const flatbuffers::TypeTable *TestSimpleTableWithEnumTypeTable() {
"color"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -3324,7 +3324,7 @@ inline const flatbuffers::TypeTable *Vec3TypeTable() {
"test3"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 6, type_codes, type_refs, values, names
flatbuffers::ST_STRUCT, 6, type_codes, type_refs, nullptr, values, names
};
return &tt;
}
@@ -3340,7 +3340,7 @@ inline const flatbuffers::TypeTable *AbilityTypeTable() {
"distance"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, values, names
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, nullptr, values, names
};
return &tt;
}
@@ -3357,7 +3357,7 @@ inline const flatbuffers::TypeTable *StatTypeTable() {
"count"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 3, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 3, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}
@@ -3370,7 +3370,7 @@ inline const flatbuffers::TypeTable *ReferrableTypeTable() {
"id"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}
@@ -3493,7 +3493,7 @@ inline const flatbuffers::TypeTable *MonsterTypeTable() {
"signed_enum"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 49, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 49, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -3528,7 +3528,7 @@ inline const flatbuffers::TypeTable *TypeAliasesTypeTable() {
"vf64"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 12, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 12, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}

View File

@@ -221,7 +221,7 @@ inline const flatbuffers::TypeTable *EnumInNestedNSTypeTable() {
"C"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, names
flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -234,7 +234,7 @@ inline const flatbuffers::TypeTable *TableInNestedNSTypeTable() {
"foo"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}
@@ -250,7 +250,7 @@ inline const flatbuffers::TypeTable *StructInNestedNSTypeTable() {
"b"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, values, names
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, nullptr, values, names
};
return &tt;
}

View File

@@ -455,7 +455,7 @@ inline const flatbuffers::TypeTable *TableInFirstNSTypeTable() {
"foo_struct"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 3, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 3, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -478,7 +478,7 @@ inline const flatbuffers::TypeTable *TableInCTypeTable() {
"refer_to_a2"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 2, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 2, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -498,7 +498,7 @@ inline const flatbuffers::TypeTable *SecondTableInATypeTable() {
"refer_to_c"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}

View File

@@ -170,7 +170,7 @@ inline const flatbuffers::TypeTable *Vector3DTypeTable() {
"z"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 3, type_codes, nullptr, values, names
flatbuffers::ST_STRUCT, 3, type_codes, nullptr, nullptr, values, names
};
return &tt;
}
@@ -186,7 +186,7 @@ inline const flatbuffers::TypeTable *ApplicationDataTypeTable() {
"vectors"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}

View File

@@ -803,7 +803,7 @@ inline const flatbuffers::TypeTable *OptionalByteTypeTable() {
"One"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_ENUM, 2, type_codes, type_refs, nullptr, names
flatbuffers::ST_ENUM, 2, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -887,7 +887,7 @@ inline const flatbuffers::TypeTable *ScalarStuffTypeTable() {
"default_enum"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 35, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 35, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}

View File

@@ -1108,6 +1108,30 @@ void MiniReflectFlatBuffersTest(uint8_t *flatbuf) {
"16, b: 32 } }");
}
void MiniReflectFixedLengthArrayTest() {
// VS10 does not support typed enums, exclude from tests
#if !defined(_MSC_VER) || _MSC_VER >= 1700
flatbuffers::FlatBufferBuilder fbb;
MyGame::Example::ArrayStruct aStruct(2, 12, 1);
auto aTable = MyGame::Example::CreateArrayTable(fbb, &aStruct);
fbb.Finish(aTable);
auto flatbuf = fbb.Release();
auto s = flatbuffers::FlatBufferToString(
flatbuf.data(), MyGame::Example::ArrayTableTypeTable());
TEST_EQ_STR(
"{ "
"a: { a: 2.0, "
"b: [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "
"c: 12, "
"d: [ { a: [ 0, 0 ], b: A, c: [ A, A ], d: [ 0, 0 ] }, "
"{ a: [ 0, 0 ], b: A, c: [ A, A ], d: [ 0, 0 ] } ], "
"e: 1, f: [ 0, 0 ] } "
"}",
s.c_str());
#endif
}
// Parse a .proto schema, output as .fbs
void ParseProtoTest() {
// load the .proto and the golden file from disk
@@ -3566,6 +3590,7 @@ int FlatBufferTests() {
ObjectFlatBuffersTest(flatbuf.data());
MiniReflectFlatBuffersTest(flatbuf.data());
MiniReflectFixedLengthArrayTest();
SizePrefixedTest();

View File

@@ -752,7 +752,7 @@ inline const flatbuffers::TypeTable *CharacterTypeTable() {
"Unused"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_UNION, 7, type_codes, type_refs, nullptr, names
flatbuffers::ST_UNION, 7, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -765,7 +765,7 @@ inline const flatbuffers::TypeTable *AttackerTypeTable() {
"sword_attack_damage"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}
@@ -779,7 +779,7 @@ inline const flatbuffers::TypeTable *RapunzelTypeTable() {
"hair_length"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 1, type_codes, nullptr, values, names
flatbuffers::ST_STRUCT, 1, type_codes, nullptr, nullptr, values, names
};
return &tt;
}
@@ -793,7 +793,7 @@ inline const flatbuffers::TypeTable *BookReaderTypeTable() {
"books_read"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 1, type_codes, nullptr, values, names
flatbuffers::ST_STRUCT, 1, type_codes, nullptr, nullptr, values, names
};
return &tt;
}
@@ -815,7 +815,7 @@ inline const flatbuffers::TypeTable *MovieTypeTable() {
"characters"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 4, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 4, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}