Fixed --scoped-enums not always generating type prefixes.
Change-Id: Ib5b0ae75617e18094ac31eb5e11d10e5d592cf9b
Tested: on Linux.
diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp
index edb14cc..74a6bf9 100644
--- a/src/idl_gen_cpp.cpp
+++ b/src/idl_gen_cpp.cpp
@@ -333,15 +333,15 @@
return (opts.scoped_enums ? "enum class " : "enum ") + enum_def.name;
}
- static std::string GenEnumVal(const EnumDef &enum_def,
- const std::string &enum_val,
- const IDLOptions &opts) {
+ static std::string GenEnumValDecl(const EnumDef &enum_def,
+ const std::string &enum_val,
+ const IDLOptions &opts) {
return opts.prefixed_enums ? enum_def.name + "_" + enum_val : enum_val;
}
- static std::string GetEnumVal(const EnumDef &enum_def,
- const EnumVal &enum_val,
- const IDLOptions &opts) {
+ static std::string GetEnumValUse(const EnumDef &enum_def,
+ const EnumVal &enum_val,
+ const IDLOptions &opts) {
if (opts.scoped_enums) {
return enum_def.name + "::" + enum_val.name;
} else if (opts.prefixed_enums) {
@@ -396,7 +396,7 @@
++it) {
auto &ev = **it;
GenComment(ev.doc_comment, code_ptr, nullptr, " ");
- code += " " + GenEnumVal(enum_def, ev.name, parser_.opts) + " = ";
+ code += " " + GenEnumValDecl(enum_def, ev.name, parser_.opts) + " = ";
code += NumToString(ev.value) + ",\n";
minv = !minv || minv->value > ev.value ? &ev : minv;
maxv = !maxv || maxv->value < ev.value ? &ev : maxv;
@@ -406,15 +406,15 @@
assert(minv && maxv);
if (enum_def.attributes.Lookup("bit_flags")) {
if (minv->value != 0) // If the user didn't defined NONE value
- code += " " + GenEnumVal(enum_def, "NONE", parser_.opts) + " = 0,\n";
+ code += " " + GenEnumValDecl(enum_def, "NONE", parser_.opts) + " = 0,\n";
if (maxv->value != anyv) // If the user didn't defined ANY value
- code += " " + GenEnumVal(enum_def, "ANY", parser_.opts) + " = " +
+ code += " " + GenEnumValDecl(enum_def, "ANY", parser_.opts) + " = " +
NumToString(anyv) + "\n";
} else { // MIN & MAX are useless for bit_flags
- code += " " + GenEnumVal(enum_def, "MIN", parser_.opts) + " = ";
- code += GenEnumVal(enum_def, minv->name, parser_.opts) + ",\n";
- code += " " + GenEnumVal(enum_def, "MAX", parser_.opts) + " = ";
- code += GenEnumVal(enum_def, maxv->name, parser_.opts) + "\n";
+ 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";
@@ -429,7 +429,7 @@
code += " " + enum_def.name + " type;\n\n";
code += " flatbuffers::NativeTable *table;\n";
code += " " + enum_def.name + "Union() : type(";
- code += GenEnumVal(enum_def, "NONE", parser_.opts);
+ code += GetEnumValUse(enum_def, *enum_def.vals.Lookup("NONE"), parser_.opts);
code += "), table(nullptr) {}\n";
code += " " + enum_def.name + "Union(const ";
code += enum_def.name + "Union &);\n";
@@ -445,7 +445,7 @@
auto native_name = NativeName(WrapInNameSpace(*ev.struct_def));
code += " " + native_name + " *As";
code += ev.name + "() { return type == ";
- code += GetEnumVal(enum_def, ev, parser_.opts);
+ code += GetEnumValUse(enum_def, ev, parser_.opts);
code += " ? reinterpret_cast<" + native_name;
code += " *>(table) : nullptr; }\n";
}
@@ -478,7 +478,7 @@
code += "()[static_cast<int>(e)";
if (enum_def.vals.vec.front()->value) {
code += " - static_cast<int>(";
- code += GetEnumVal(enum_def, *enum_def.vals.vec.front(), parser_.opts) +
+ code += GetEnumValUse(enum_def, *enum_def.vals.vec.front(), parser_.opts) +
")";
}
code += "]; }\n\n";
@@ -500,7 +500,7 @@
for (auto it = enum_def.vals.vec.begin(); it != enum_def.vals.vec.end();
++it) {
auto &ev = **it;
- code += " case " + GetEnumVal(enum_def, ev, parser_.opts);
+ code += " case " + GetEnumValUse(enum_def, ev, parser_.opts);
if (!ev.value) {
code += ": return true;\n"; // "NONE" enum value.
} else {
@@ -518,7 +518,7 @@
for (auto it = enum_def.vals.vec.begin(); it != enum_def.vals.vec.end();
++it) {
auto &ev = **it;
- code += " case " + GetEnumVal(enum_def, ev, parser_.opts);
+ code += " case " + GetEnumValUse(enum_def, ev, parser_.opts);
if (!ev.value) {
code += ": return nullptr;\n"; // "NONE" enum value.
} else {
@@ -533,7 +533,7 @@
for (auto it = enum_def.vals.vec.begin(); it != enum_def.vals.vec.end();
++it) {
auto &ev = **it;
- code += " case " + GetEnumVal(enum_def, ev, parser_.opts);
+ code += " case " + GetEnumValUse(enum_def, ev, parser_.opts);
if (!ev.value) {
code += ": return 0;\n"; // "NONE" enum value.
} else {
@@ -553,7 +553,7 @@
++it) {
auto &ev = **it;
if (ev.value) {
- code += " case " + GenEnumVal(enum_def, ev.name, parser_.opts);
+ code += " case " + GetEnumValUse(enum_def, ev, parser_.opts);
code += ": delete reinterpret_cast<";
code += NativeName(WrapInNameSpace(*ev.struct_def));
code += " *>(table); break;\n";
@@ -613,7 +613,7 @@
if (ev) {
code += WrapInNameSpace(
field.value.type.enum_def->defined_namespace,
- GetEnumVal(*field.value.type.enum_def, *ev, parser_.opts));
+ GetEnumValUse(*field.value.type.enum_def, *ev, parser_.opts));
} else {
code += GenUnderlyingCast(field, true, field.value.constant);
}