mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-04 20:48:59 +00:00
Java: fix unsigned default value code generation and add 'L' suffix for long default value (#4051)
* Java: emit "signed" equivalent of unsigned default value in generated code and add "L" suffix to long default value. * Updated generated code * Only convert ulong to "signed" equivalent. ubyte and ushort don't need specific handling as "user facing" type is int. uint need 'L' suffix as "user facing" type is long. * Added missing cast to primitive type of default value which is in "user facing" type in builder.add<type>() calls. * Do not cast default value to actual type in C#.
This commit is contained in:
committed by
Wouter van Oortmerssen
parent
6862b2ff08
commit
5b5fcbfc00
@@ -490,9 +490,21 @@ std::string GenDefaultValue(const Value &value, bool enableLangOverrides) {
|
||||
return GenEnumDefaultValue(value);
|
||||
}
|
||||
}
|
||||
|
||||
auto longSuffix = lang_.language == IDLOptions::kJava ? "L" : "";
|
||||
switch (value.type.base_type) {
|
||||
case BASE_TYPE_FLOAT: return value.constant + "f";
|
||||
case BASE_TYPE_BOOL: return value.constant == "0" ? "false" : "true";
|
||||
case BASE_TYPE_ULONG:
|
||||
{
|
||||
if (lang_.language != IDLOptions::kJava)
|
||||
return value.constant;
|
||||
// Converts the ulong into its bits signed equivalent
|
||||
uint64_t defaultValue = StringToUInt(value.constant.c_str());
|
||||
return NumToString(static_cast<int64_t>(defaultValue)) + longSuffix;
|
||||
}
|
||||
case BASE_TYPE_UINT:
|
||||
case BASE_TYPE_LONG: return value.constant + longSuffix;
|
||||
default: return value.constant;
|
||||
}
|
||||
}
|
||||
@@ -1240,7 +1252,10 @@ void GenStruct(StructDef &struct_def, std::string *code_ptr) {
|
||||
lang_.language == IDLOptions::kCSharp) {
|
||||
code += ".Value";
|
||||
}
|
||||
code += ", " + GenDefaultValue(field.value, false);
|
||||
code += ", ";
|
||||
if (lang_.language == IDLOptions::kJava)
|
||||
code += SourceCastBasic( field.value.type );
|
||||
code += GenDefaultValue(field.value, false);
|
||||
code += "); }\n";
|
||||
if (field.value.type.base_type == BASE_TYPE_VECTOR) {
|
||||
auto vector_type = field.value.type.VectorType();
|
||||
|
||||
Reference in New Issue
Block a user