From 6df9e1c537f566be082aa41c5e35628aa06733fc Mon Sep 17 00:00:00 2001 From: reynolma2 <mreynolds@wavesys.com> Date: Mon, 9 Mar 2015 11:35:18 -0700 Subject: [PATCH] Update idl_gen_general.cpp There is a bug in creating a C# table when it includes a field of type 'BOOL'. The problem is that the generate C# code is as follows: "bool SampleValue = 0;" This will fail to compile, because in C# this fails, it needs to be generated as: "bool SampleValue = false;" The error is in line ~510 Change-Id: I77f6eea0f269b0540dbeb462602fc447cb69237d --- src/idl_gen_general.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/idl_gen_general.cpp b/src/idl_gen_general.cpp index 0336ad8a..bc6f7b93 100644 --- a/src/idl_gen_general.cpp +++ b/src/idl_gen_general.cpp @@ -167,6 +167,12 @@ static std::string GenTypeGet(const LanguageParameters &lang, : GenTypePointer(lang, type); } +static std::string GenDefaultValue(const Value &value) { + return value.type.base_type == BASE_TYPE_BOOL + ? (value.constant == "0" ? "false" : "true") + : value.constant; +} + static void GenEnum(const LanguageParameters &lang, EnumDef &enum_def, std::string *code_ptr) { std::string &code = *code_ptr; @@ -392,9 +398,7 @@ static void GenStruct(const LanguageParameters &lang, const Parser &parser, } else { code += offset_prefix + getter; code += "(o + bb_pos) : " + default_cast; - code += field.value.type.base_type == BASE_TYPE_BOOL - ? (field.value.constant == "0" ? "false" : "true") - : field.value.constant; + code += GenDefaultValue(field.value); } } else { switch (field.value.type.base_type) { @@ -506,8 +510,9 @@ static void GenStruct(const LanguageParameters &lang, const Parser &parser, code += field.name; // Java doesn't have defaults, which means this method must always // supply all arguments, and thus won't compile when fields are added. - if (lang.language != GeneratorOptions::kJava) - code += " = " + field.value.constant; + if (lang.language != GeneratorOptions::kJava) { + code += " = " + GenDefaultValue(field.value); + } } code += ") {\n builder."; code += FunctionStart(lang, 'S') + "tartObject("; @@ -554,12 +559,7 @@ static void GenStruct(const LanguageParameters &lang, const Parser &parser, code += " " + argname + ") { builder." + FunctionStart(lang, 'A') + "dd"; code += GenMethod(lang, field.value.type) + "("; code += NumToString(it - struct_def.fields.vec.begin()) + ", "; - code += argname + ", "; - if (field.value.type.base_type == BASE_TYPE_BOOL) { - code += field.value.constant == "0" ? "false" : "true"; - } else { - code += field.value.constant; - } + code += argname + ", " + GenDefaultValue(field.value); code += "); }\n"; if (field.value.type.base_type == BASE_TYPE_VECTOR) { auto vector_type = field.value.type.VectorType(); -- GitLab