From 290e9f270b93efc55d2124d6c73f3f48e033230c Mon Sep 17 00:00:00 2001 From: Wouter van Oortmerssen <wvo@google.com> Date: Mon, 7 Nov 2016 09:51:28 -0800 Subject: [PATCH] Fixes to support GCC 4.4.7 Fixed generation of a trailing comma and removed unnecessary use of a lambda. Change-Id: I9993f6eb83e2ebc36fc40295a2059c340c1fbe03 Tested: on Linux. --- include/flatbuffers/reflection_generated.h | 2 +- src/idl_gen_cpp.cpp | 77 +++++++++++----------- 2 files changed, 40 insertions(+), 39 deletions(-) diff --git a/include/flatbuffers/reflection_generated.h b/include/flatbuffers/reflection_generated.h index e0452c88..b6233ff0 100644 --- a/include/flatbuffers/reflection_generated.h +++ b/include/flatbuffers/reflection_generated.h @@ -38,7 +38,7 @@ enum BaseType { String = 13, Vector = 14, Obj = 15, - Union = 16, + Union = 16 }; inline const char **EnumNamesBaseType() { diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index b66cd786..97cb3556 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -435,7 +435,8 @@ class CppGenerator : public BaseGenerator { auto &ev = **it; GenComment(ev.doc_comment, code_ptr, nullptr, " "); code += " " + GenEnumValDecl(enum_def, ev.name, parser_.opts) + " = "; - code += NumToString(ev.value) + ",\n"; + code += NumToString(ev.value); + if (it != enum_def.vals.vec.end() - 1) code += ",\n"; minv = !minv || minv->value > ev.value ? &ev : minv; maxv = !maxv || maxv->value < ev.value ? &ev : maxv; anyv |= ev.value; @@ -444,18 +445,18 @@ class CppGenerator : public BaseGenerator { assert(minv && maxv); if (enum_def.attributes.Lookup("bit_flags")) { if (minv->value != 0) // If the user didn't defined NONE value - code += " " + GenEnumValDecl(enum_def, "NONE", parser_.opts) + " = 0,\n"; + code += ",\n " + GenEnumValDecl(enum_def, "NONE", parser_.opts) + " = 0"; if (maxv->value != anyv) // If the user didn't defined ANY value - code += " " + GenEnumValDecl(enum_def, "ANY", parser_.opts) + " = " + - NumToString(anyv) + "\n"; + code += ",\n " + GenEnumValDecl(enum_def, "ANY", parser_.opts) + " = " + + NumToString(anyv); } else { // MIN & MAX are useless for bit_flags - code += " " + GenEnumValDecl(enum_def, "MIN", parser_.opts) + " = "; - code += GenEnumValDecl(enum_def, minv->name, parser_.opts) + ",\n"; - code += " " + GenEnumValDecl(enum_def, "MAX", parser_.opts) + " = "; - code += GenEnumValDecl(enum_def, maxv->name, parser_.opts) + "\n"; + code += ",\n " + GenEnumValDecl(enum_def, "MIN", parser_.opts) + " = "; + code += GenEnumValDecl(enum_def, minv->name, parser_.opts); + code += ",\n " + GenEnumValDecl(enum_def, "MAX", parser_.opts) + " = "; + code += GenEnumValDecl(enum_def, maxv->name, parser_.opts); } } - code += "};\n"; + code += "\n};\n"; if (parser_.opts.scoped_enums && enum_def.attributes.Lookup("bit_flags")) code += "DEFINE_BITMASK_OPERATORS(" + enum_def.name + ", " + GenTypeBasic(enum_def.underlying_type, false) + ")\n"; @@ -1008,6 +1009,32 @@ class CppGenerator : public BaseGenerator { } } + std::string GenUnpackVal(const Type &type, const std::string &val, + bool invector, const FieldDef &afield) { + switch (type.base_type) { + case BASE_TYPE_STRING: + return val + "->str()"; + case BASE_TYPE_STRUCT: + if (IsStruct(type)) { + if (invector) { + return "*" + val; + } else { + return GenTypeNativePtr(WrapInNameSpace(*type.struct_def), + &afield, true) + + "(new " + + WrapInNameSpace(*type.struct_def) + "(*" + val + "))"; + } + } else { + return GenTypeNativePtr(NativeName(WrapInNameSpace( + *type.struct_def)), &afield, true) + + "(" + val + "->UnPack(resolver))"; + } + default: + return val; + break; + } + }; + // Generate code for tables that needs to come after the regular definition. void GenTablePost(StructDef &struct_def, std::string *code_ptr) { std::string &code = *code_ptr; @@ -1026,32 +1053,6 @@ class CppGenerator : public BaseGenerator { auto deref = "_o->"; auto dest = deref + field.name; auto assign = prefix + dest + " = "; - auto gen_unpack_val = [&](const Type &type, const std::string &val, - bool invector, const FieldDef &afield) - -> std::string { - switch (type.base_type) { - case BASE_TYPE_STRING: - return val + "->str()"; - case BASE_TYPE_STRUCT: - if (IsStruct(type)) { - if (invector) { - return "*" + val; - } else { - return GenTypeNativePtr(WrapInNameSpace(*type.struct_def), - &afield, true) + - "(new " + - WrapInNameSpace(*type.struct_def) + "(*" + val + "))"; - } - } else { - return GenTypeNativePtr(NativeName(WrapInNameSpace( - *type.struct_def)), &afield, true) + - "(" + val + "->UnPack(resolver))"; - } - default: - return val; - break; - } - }; switch (field.value.type.base_type) { case BASE_TYPE_VECTOR: { code += prefix; @@ -1061,8 +1062,8 @@ class CppGenerator : public BaseGenerator { std::string indexing = "_e->Get(_i)"; if (field.value.type.element == BASE_TYPE_BOOL) indexing += "!=0"; - code += gen_unpack_val(field.value.type.VectorType(), - indexing, true, field); + code += GenUnpackVal(field.value.type.VectorType(), + indexing, true, field); code += "); } }"; break; } @@ -1089,7 +1090,7 @@ class CppGenerator : public BaseGenerator { code += dest + " = nullptr"; } else { code += assign; - code += gen_unpack_val(field.value.type, "_e", false, field); + code += GenUnpackVal(field.value.type, "_e", false, field); } code += ";"; break; -- GitLab