Commit 075e8d67 authored by Vladimir Glavnyy's avatar Vladimir Glavnyy Committed by Wouter van Oortmerssen

Simplify declarations of x-macro FLATBUFFERS_TD (#5638)

parent bcf1bd5c
...@@ -91,6 +91,20 @@ switch (type) { ...@@ -91,6 +91,20 @@ switch (type) {
} }
*/ */
// If not all FLATBUFFERS_GEN_() arguments are necessary for implementation
// of FLATBUFFERS_TD, you can use a variadic macro (with __VA_ARGS__ if needed).
// In the above example, only CTYPE is used to generate the code, it can be rewritten:
/*
switch (type) {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
case BASE_TYPE_ ## ENUM: \
// do something specific to CTYPE here
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD
}
*/
#define FLATBUFFERS_GEN_TYPES(TD) \ #define FLATBUFFERS_GEN_TYPES(TD) \
FLATBUFFERS_GEN_TYPES_SCALAR(TD) \ FLATBUFFERS_GEN_TYPES_SCALAR(TD) \
FLATBUFFERS_GEN_TYPES_POINTER(TD) \ FLATBUFFERS_GEN_TYPES_POINTER(TD) \
...@@ -101,15 +115,13 @@ switch (type) { ...@@ -101,15 +115,13 @@ switch (type) {
__extension__ // Stop GCC complaining about trailing comma with -Wpendantic. __extension__ // Stop GCC complaining about trailing comma with -Wpendantic.
#endif #endif
enum BaseType { enum BaseType {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, \ #define FLATBUFFERS_TD(ENUM, ...) \
RTYPE, KTYPE) \
BASE_TYPE_ ## ENUM, BASE_TYPE_ ## ENUM,
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
}; };
#define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
RTYPE, KTYPE) \
static_assert(sizeof(CTYPE) <= sizeof(largest_scalar_t), \ static_assert(sizeof(CTYPE) <= sizeof(largest_scalar_t), \
"define largest_scalar_t as " #CTYPE); "define largest_scalar_t as " #CTYPE);
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
......
...@@ -545,8 +545,7 @@ class CppGenerator : public BaseGenerator { ...@@ -545,8 +545,7 @@ class CppGenerator : public BaseGenerator {
std::string GenTypeBasic(const Type &type, bool user_facing_type) const { std::string GenTypeBasic(const Type &type, bool user_facing_type) const {
// clang-format off // clang-format off
static const char *const ctypename[] = { static const char *const ctypename[] = {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
RTYPE, KTYPE) \
#CTYPE, #CTYPE,
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
......
...@@ -119,8 +119,7 @@ class CSharpGenerator : public BaseGenerator { ...@@ -119,8 +119,7 @@ class CSharpGenerator : public BaseGenerator {
std::string GenTypeBasic(const Type &type, bool enableLangOverrides) const { std::string GenTypeBasic(const Type &type, bool enableLangOverrides) const {
// clang-format off // clang-format off
static const char * const csharp_typename[] = { static const char * const csharp_typename[] = {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, ...) \
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \
#NTYPE, #NTYPE,
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
......
...@@ -1162,15 +1162,14 @@ class GoGenerator : public BaseGenerator { ...@@ -1162,15 +1162,14 @@ class GoGenerator : public BaseGenerator {
} }
std::string GenTypeBasic(const Type &type) { std::string GenTypeBasic(const Type &type) {
static const char *ctypename[] = {
// clang-format off // clang-format off
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ static const char *ctypename[] = {
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, ...) \
#GTYPE, #GTYPE,
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
// clang-format on
}; };
// clang-format on
return ctypename[type.base_type]; return ctypename[type.base_type];
} }
......
...@@ -143,14 +143,12 @@ class JavaGenerator : public BaseGenerator { ...@@ -143,14 +143,12 @@ class JavaGenerator : public BaseGenerator {
std::string GenTypeBasic(const Type &type) const { std::string GenTypeBasic(const Type &type) const {
// clang-format off // clang-format off
static const char * const java_typename[] = { static const char * const java_typename[] = {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, ...) \
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \
#JTYPE, #JTYPE,
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
}; };
// clang-format on // clang-format on
return java_typename[type.base_type]; return java_typename[type.base_type];
} }
......
...@@ -145,8 +145,8 @@ class KotlinGenerator : public BaseGenerator { ...@@ -145,8 +145,8 @@ class KotlinGenerator : public BaseGenerator {
#KTYPE, #KTYPE,
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
// clang-format on
}; };
// clang-format on
return kotlin_typename[type]; return kotlin_typename[type];
} }
......
...@@ -83,15 +83,15 @@ class LobsterGenerator : public BaseGenerator { ...@@ -83,15 +83,15 @@ class LobsterGenerator : public BaseGenerator {
// This uses Python names for now.. // This uses Python names for now..
std::string GenTypeBasic(const Type &type) { std::string GenTypeBasic(const Type &type) {
static const char *ctypename[] = {
// clang-format off // clang-format off
static const char *ctypename[] = {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, \
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \ CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, ...) \
#PTYPE, #PTYPE,
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
// clang-format on
}; };
// clang-format on
return ctypename[type.base_type]; return ctypename[type.base_type];
} }
......
...@@ -595,15 +595,15 @@ class LuaGenerator : public BaseGenerator { ...@@ -595,15 +595,15 @@ class LuaGenerator : public BaseGenerator {
} }
std::string GenTypeBasic(const Type &type) { std::string GenTypeBasic(const Type &type) {
static const char *ctypename[] = {
// clang-format off // clang-format off
static const char *ctypename[] = {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, \
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \ CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, ...) \
#PTYPE, #PTYPE,
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
// clang-format on
}; };
// clang-format on
return ctypename[type.base_type]; return ctypename[type.base_type];
} }
......
...@@ -860,15 +860,15 @@ class PhpGenerator : public BaseGenerator { ...@@ -860,15 +860,15 @@ class PhpGenerator : public BaseGenerator {
} }
static std::string GenTypeBasic(const Type &type) { static std::string GenTypeBasic(const Type &type) {
static const char *ctypename[] = {
// clang-format off // clang-format off
static const char *ctypename[] = {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, \
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \ CTYPE, JTYPE, GTYPE, NTYPE, ...) \
#NTYPE, #NTYPE,
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
// clang-format on
}; };
// clang-format on
return ctypename[type.base_type]; return ctypename[type.base_type];
} }
......
...@@ -667,15 +667,15 @@ class PythonGenerator : public BaseGenerator { ...@@ -667,15 +667,15 @@ class PythonGenerator : public BaseGenerator {
} }
std::string GenTypeBasic(const Type &type) { std::string GenTypeBasic(const Type &type) {
static const char *ctypename[] = {
// clang-format off // clang-format off
static const char *ctypename[] = {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, \
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \ CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, ...) \
#PTYPE, #PTYPE,
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
// clang-format on
}; };
// clang-format on
return ctypename[IsArray(type) ? type.VectorType().base_type return ctypename[IsArray(type) ? type.VectorType().base_type
: type.base_type]; : type.base_type];
} }
......
...@@ -457,12 +457,12 @@ class RustGenerator : public BaseGenerator { ...@@ -457,12 +457,12 @@ class RustGenerator : public BaseGenerator {
// clang-format off // clang-format off
static const char * const ctypename[] = { static const char * const ctypename[] = {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, \
RTYPE, KTYPE) \ RTYPE, ...) \
#RTYPE, #RTYPE,
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
// clang-format on
}; };
// clang-format on
if (type.enum_def) { return WrapInNameSpace(*type.enum_def); } if (type.enum_def) { return WrapInNameSpace(*type.enum_def); }
return ctypename[type.base_type]; return ctypename[type.base_type];
...@@ -476,15 +476,15 @@ class RustGenerator : public BaseGenerator { ...@@ -476,15 +476,15 @@ class RustGenerator : public BaseGenerator {
FLATBUFFERS_ASSERT(false && "precondition failed in GetEnumTypeForDecl"); FLATBUFFERS_ASSERT(false && "precondition failed in GetEnumTypeForDecl");
} }
static const char *ctypename[] = {
// clang-format off // clang-format off
static const char *ctypename[] = {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, \
RTYPE, KTYPE) \ RTYPE, ...) \
#RTYPE, #RTYPE,
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
// clang-format on
}; };
// clang-format on
// Enums can be bools, but their Rust representation must be a u8, as used // Enums can be bools, but their Rust representation must be a u8, as used
// in the repr attribute (#[repr(bool)] is an invalid attribute). // in the repr attribute (#[repr(bool)] is an invalid attribute).
......
...@@ -167,8 +167,7 @@ bool Print<const void *>(const void *val, Type type, int indent, ...@@ -167,8 +167,7 @@ bool Print<const void *>(const void *val, Type type, int indent,
// Call PrintVector above specifically for each element type: // Call PrintVector above specifically for each element type:
// clang-format off // clang-format off
switch (vec_type.base_type) { switch (vec_type.base_type) {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \
case BASE_TYPE_ ## ENUM: \ case BASE_TYPE_ ## ENUM: \
if (!PrintVector<CTYPE>( \ if (!PrintVector<CTYPE>( \
*reinterpret_cast<const Vector<CTYPE> *>(val), \ *reinterpret_cast<const Vector<CTYPE> *>(val), \
...@@ -187,8 +186,7 @@ bool Print<const void *>(const void *val, Type type, int indent, ...@@ -187,8 +186,7 @@ bool Print<const void *>(const void *val, Type type, int indent,
// Call PrintArray above specifically for each element type: // Call PrintArray above specifically for each element type:
// clang-format off // clang-format off
switch (vec_type.base_type) { switch (vec_type.base_type) {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \
case BASE_TYPE_ ## ENUM: \ case BASE_TYPE_ ## ENUM: \
if (!PrintArray<CTYPE>( \ if (!PrintArray<CTYPE>( \
*reinterpret_cast<const Array<CTYPE, 0xFFFF> *>(val), \ *reinterpret_cast<const Array<CTYPE, 0xFFFF> *>(val), \
...@@ -198,6 +196,7 @@ bool Print<const void *>(const void *val, Type type, int indent, ...@@ -198,6 +196,7 @@ bool Print<const void *>(const void *val, Type type, int indent,
} \ } \
break; break;
FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
// Arrays of scalars or structs are only possible.
FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
case BASE_TYPE_ARRAY: FLATBUFFERS_ASSERT(0); case BASE_TYPE_ARRAY: FLATBUFFERS_ASSERT(0);
...@@ -286,8 +285,7 @@ static bool GenStruct(const StructDef &struct_def, const Table *table, ...@@ -286,8 +285,7 @@ static bool GenStruct(const StructDef &struct_def, const Table *table,
text += " "; text += " ";
switch (fd.value.type.base_type) { switch (fd.value.type.base_type) {
// clang-format off // clang-format off
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \
case BASE_TYPE_ ## ENUM: \ case BASE_TYPE_ ## ENUM: \
if (!GenField<CTYPE>(fd, table, struct_def.fixed, \ if (!GenField<CTYPE>(fd, table, struct_def.fixed, \
opts, indent + Indent(opts), _text)) { \ opts, indent + Indent(opts), _text)) { \
...@@ -297,8 +295,7 @@ static bool GenStruct(const StructDef &struct_def, const Table *table, ...@@ -297,8 +295,7 @@ static bool GenStruct(const StructDef &struct_def, const Table *table,
FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
// Generate drop-thru case statements for all pointer types: // Generate drop-thru case statements for all pointer types:
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ #define FLATBUFFERS_TD(ENUM, ...) \
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \
case BASE_TYPE_ ## ENUM: case BASE_TYPE_ ## ENUM:
FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD)
FLATBUFFERS_GEN_TYPE_ARRAY(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPE_ARRAY(FLATBUFFERS_TD)
......
...@@ -37,26 +37,22 @@ const char *FLATBUFFERS_VERSION() { ...@@ -37,26 +37,22 @@ const char *FLATBUFFERS_VERSION() {
const double kPi = 3.14159265358979323846; const double kPi = 3.14159265358979323846;
const char *const kTypeNames[] = {
// clang-format off // clang-format off
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ const char *const kTypeNames[] = {
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, ...) \
IDLTYPE, IDLTYPE,
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
// clang-format on
nullptr nullptr
}; };
const char kTypeSizes[] = { const char kTypeSizes[] = {
// clang-format off #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \
sizeof(CTYPE), sizeof(CTYPE),
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
// clang-format on
}; };
// clang-format on
// The enums in the reflection schema should match the ones we use internally. // The enums in the reflection schema should match the ones we use internally.
// Compare the last element to check if these go out of sync. // Compare the last element to check if these go out of sync.
...@@ -222,8 +218,7 @@ static std::string TokenToString(int t) { ...@@ -222,8 +218,7 @@ static std::string TokenToString(int t) {
#define FLATBUFFERS_TOKEN(NAME, VALUE, STRING) STRING, #define FLATBUFFERS_TOKEN(NAME, VALUE, STRING) STRING,
FLATBUFFERS_GEN_TOKENS(FLATBUFFERS_TOKEN) FLATBUFFERS_GEN_TOKENS(FLATBUFFERS_TOKEN)
#undef FLATBUFFERS_TOKEN #undef FLATBUFFERS_TOKEN
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, ...) \
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \
IDLTYPE, IDLTYPE,
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
...@@ -1179,8 +1174,7 @@ CheckedError Parser::ParseTable(const StructDef &struct_def, std::string *value, ...@@ -1179,8 +1174,7 @@ CheckedError Parser::ParseTable(const StructDef &struct_def, std::string *value,
size == SizeOf(field_value.type.base_type)) { size == SizeOf(field_value.type.base_type)) {
switch (field_value.type.base_type) { switch (field_value.type.base_type) {
// clang-format off // clang-format off
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \
case BASE_TYPE_ ## ENUM: \ case BASE_TYPE_ ## ENUM: \
builder_.Pad(field->padding); \ builder_.Pad(field->padding); \
if (struct_def.fixed) { \ if (struct_def.fixed) { \
...@@ -1194,10 +1188,9 @@ CheckedError Parser::ParseTable(const StructDef &struct_def, std::string *value, ...@@ -1194,10 +1188,9 @@ CheckedError Parser::ParseTable(const StructDef &struct_def, std::string *value,
builder_.AddElement(field_value.offset, val, valdef); \ builder_.AddElement(field_value.offset, val, valdef); \
} \ } \
break; break;
FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD); FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \
case BASE_TYPE_ ## ENUM: \ case BASE_TYPE_ ## ENUM: \
builder_.Pad(field->padding); \ builder_.Pad(field->padding); \
if (IsStruct(field->value.type)) { \ if (IsStruct(field->value.type)) { \
...@@ -1208,7 +1201,7 @@ CheckedError Parser::ParseTable(const StructDef &struct_def, std::string *value, ...@@ -1208,7 +1201,7 @@ CheckedError Parser::ParseTable(const StructDef &struct_def, std::string *value,
builder_.AddOffset(field_value.offset, val); \ builder_.AddOffset(field_value.offset, val); \
} \ } \
break; break;
FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD); FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
case BASE_TYPE_ARRAY: case BASE_TYPE_ARRAY:
builder_.Pad(field->padding); builder_.Pad(field->padding);
...@@ -1258,8 +1251,7 @@ CheckedError Parser::ParseVectorDelimiters(uoffset_t &count, F body) { ...@@ -1258,8 +1251,7 @@ CheckedError Parser::ParseVectorDelimiters(uoffset_t &count, F body) {
static bool CompareType(const uint8_t *a, const uint8_t *b, BaseType ftype) { static bool CompareType(const uint8_t *a, const uint8_t *b, BaseType ftype) {
switch (ftype) { switch (ftype) {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
RTYPE, KTYPE) \
case BASE_TYPE_##ENUM: return ReadScalar<CTYPE>(a) < ReadScalar<CTYPE>(b); case BASE_TYPE_##ENUM: return ReadScalar<CTYPE>(a) < ReadScalar<CTYPE>(b);
FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD) FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
...@@ -1314,8 +1306,7 @@ CheckedError Parser::ParseVector(const Type &type, uoffset_t *ovalue, ...@@ -1314,8 +1306,7 @@ CheckedError Parser::ParseVector(const Type &type, uoffset_t *ovalue,
auto &val = field_stack_.back().first; auto &val = field_stack_.back().first;
switch (val.type.base_type) { switch (val.type.base_type) {
// clang-format off // clang-format off
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE,...) \
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \
case BASE_TYPE_ ## ENUM: \ case BASE_TYPE_ ## ENUM: \
if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \ if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
else { \ else { \
...@@ -1429,8 +1420,7 @@ CheckedError Parser::ParseArray(Value &array) { ...@@ -1429,8 +1420,7 @@ CheckedError Parser::ParseArray(Value &array) {
auto &val = *it; auto &val = *it;
// clang-format off // clang-format off
switch (val.type.base_type) { switch (val.type.base_type) {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \
case BASE_TYPE_ ## ENUM: \ case BASE_TYPE_ ## ENUM: \
if (IsStruct(val.type)) { \ if (IsStruct(val.type)) { \
SerializeStruct(builder, *val.type.struct_def, val); \ SerializeStruct(builder, *val.type.struct_def, val); \
...@@ -1782,14 +1772,13 @@ CheckedError Parser::ParseSingleValue(const std::string *name, Value &e, ...@@ -1782,14 +1772,13 @@ CheckedError Parser::ParseSingleValue(const std::string *name, Value &e,
if (check_now && IsScalar(match_type)) { if (check_now && IsScalar(match_type)) {
// clang-format off // clang-format off
switch (match_type) { switch (match_type) {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, RTYPE, KTYPE) \
case BASE_TYPE_ ## ENUM: {\ case BASE_TYPE_ ## ENUM: {\
CTYPE val; \ CTYPE val; \
ECHECK(atot(e.constant.c_str(), *this, &val)); \ ECHECK(atot(e.constant.c_str(), *this, &val)); \
SingleValueRepack(e, val); \ SingleValueRepack(e, val); \
break; } break; }
FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD); FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
default: break; default: break;
} }
...@@ -2018,13 +2007,12 @@ struct EnumValBuilder { ...@@ -2018,13 +2007,12 @@ struct EnumValBuilder {
FLATBUFFERS_CHECKED_ERROR ValidateValue(int64_t *ev, bool next) { FLATBUFFERS_CHECKED_ERROR ValidateValue(int64_t *ev, bool next) {
// clang-format off // clang-format off
switch (enum_def.underlying_type.base_type) { switch (enum_def.underlying_type.base_type) {
#define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, \ #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, ...) \
PTYPE, RTYPE, KTYPE) \
case BASE_TYPE_##ENUM: { \ case BASE_TYPE_##ENUM: { \
if (!IsInteger(BASE_TYPE_##ENUM)) break; \ if (!IsInteger(BASE_TYPE_##ENUM)) break; \
return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \ return ValidateImpl<BASE_TYPE_##ENUM, CTYPE>(ev, next ? 1 : 0); \
} }
FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD); FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
#undef FLATBUFFERS_TD #undef FLATBUFFERS_TD
default: break; default: break;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment