mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-15 00:38:52 +00:00
* [swift] fix broken swift test build (#7633) * [swift] fix unused variable (#7633) * [swift] update generated code (#7633) * [swift] add binary & json test for nan, inf, -inf for swift (#7633) * [swift] use just '.infinity' instead of '+.infinity' (#7633) * [swift] remove commented code (#7633) Co-authored-by: Derek Bailey <derekbailey@google.com> Co-authored-by: mustiikhalil <26250654+mustiikhalil@users.noreply.github.com>
This commit is contained in:
@@ -258,11 +258,9 @@ class SwiftGenerator : public BaseGenerator {
|
||||
IsEnum(field.value.type) ? "{{BASEVALUE}}" : "{{VALUETYPE}}";
|
||||
code_ += "private var _{{FIELDVAR}}: " + valueType;
|
||||
const auto accessing_value = IsEnum(field.value.type) ? ".value" : "";
|
||||
const auto is_bool = IsBool(field.value.type.base_type);
|
||||
const auto base_value =
|
||||
IsStruct(field.value.type) ? (type + "()")
|
||||
: is_bool ? ("0" == field.value.constant ? "false" : "true")
|
||||
: field.value.constant;
|
||||
: SwiftConstant(field);
|
||||
|
||||
main_constructor.push_back("_" + field_var + " = " + field_var +
|
||||
accessing_value);
|
||||
@@ -378,35 +376,6 @@ class SwiftGenerator : public BaseGenerator {
|
||||
code_ += "}\n";
|
||||
}
|
||||
|
||||
// Generates the create function for swift
|
||||
void GenStructWriter(const StructDef &struct_def) {
|
||||
const bool is_private_access =
|
||||
parser_.opts.swift_implementation_only ||
|
||||
struct_def.attributes.Lookup("private") != nullptr;
|
||||
code_.SetValue("ACCESS_TYPE", is_private_access ? "internal" : "public");
|
||||
code_.SetValue("STRUCTNAME", namer_.NamespacedType(struct_def));
|
||||
code_.SetValue("SHORT_STRUCTNAME", namer_.Method(struct_def));
|
||||
code_ += "extension {{STRUCTNAME}} {";
|
||||
Indent();
|
||||
code_ += "@discardableResult";
|
||||
code_ +=
|
||||
"{{ACCESS_TYPE}} static func create{{SHORT_STRUCTNAME}}(builder: inout "
|
||||
"FlatBufferBuilder, \\";
|
||||
std::string func_header = "";
|
||||
GenerateStructArgs(struct_def, &func_header, "", "");
|
||||
code_ += func_header.substr(0, func_header.size() - 2) + "\\";
|
||||
code_ += ") -> Offset {";
|
||||
Indent();
|
||||
code_ +=
|
||||
"builder.createStructOf(size: {{STRUCTNAME}}.size, alignment: "
|
||||
"{{STRUCTNAME}}.alignment)";
|
||||
code_ += "return builder.endStruct()";
|
||||
Outdent();
|
||||
code_ += "}\n";
|
||||
Outdent();
|
||||
code_ += "}\n";
|
||||
}
|
||||
|
||||
void GenerateStructArgs(const StructDef &struct_def, std::string *code_ptr,
|
||||
const std::string &nameprefix,
|
||||
const std::string &object_name,
|
||||
@@ -430,11 +399,7 @@ class SwiftGenerator : public BaseGenerator {
|
||||
code += nameprefix + field_var + ": " + type;
|
||||
if (!IsEnum(field.value.type)) {
|
||||
code += " = ";
|
||||
const auto is_bool = IsBool(field.value.type.base_type);
|
||||
const auto constant =
|
||||
is_bool ? ("0" == field.value.constant ? "false" : "true")
|
||||
: field.value.constant;
|
||||
code += constant;
|
||||
code += SwiftConstant(field);
|
||||
}
|
||||
code += ", ";
|
||||
continue;
|
||||
@@ -633,7 +598,7 @@ class SwiftGenerator : public BaseGenerator {
|
||||
code_.SetValue("FIELDVAR", namer_.Variable(field));
|
||||
code_.SetValue("VALUETYPE", nullable_type);
|
||||
code_.SetValue("OFFSET", namer_.Field(field));
|
||||
code_.SetValue("CONSTANT", field.value.constant);
|
||||
code_.SetValue("CONSTANT", SwiftConstant(field));
|
||||
std::string check_if_vector =
|
||||
(IsVector(field.value.type) || IsArray(field.value.type)) ? "VectorOf("
|
||||
: "(";
|
||||
@@ -659,7 +624,7 @@ class SwiftGenerator : public BaseGenerator {
|
||||
const auto default_value =
|
||||
IsEnum(field.value.type)
|
||||
? (field.IsOptional() ? "nil" : GenEnumDefaultValue(field))
|
||||
: field.value.constant;
|
||||
: SwiftConstant(field);
|
||||
create_func_header.push_back(
|
||||
"" + field_field + ": " + nullable_type + " = " +
|
||||
(field.IsOptional() ? "nil" : default_value));
|
||||
@@ -667,8 +632,7 @@ class SwiftGenerator : public BaseGenerator {
|
||||
}
|
||||
|
||||
if (IsBool(field.value.type.base_type)) {
|
||||
std::string default_value =
|
||||
"0" == field.value.constant ? "false" : "true";
|
||||
std::string default_value = SwiftConstant(field);
|
||||
|
||||
code_.SetValue("CONSTANT", default_value);
|
||||
code_.SetValue("VALUETYPE", field.IsOptional() ? "Bool?" : "Bool");
|
||||
@@ -743,7 +707,7 @@ class SwiftGenerator : public BaseGenerator {
|
||||
code_.SetValue("FIELDMETHOD", namer_.Method(field));
|
||||
code_.SetValue("VALUETYPE", type);
|
||||
code_.SetValue("OFFSET", namer_.Constant(field.name));
|
||||
code_.SetValue("CONSTANT", field.value.constant);
|
||||
code_.SetValue("CONSTANT", SwiftConstant(field));
|
||||
bool opt_scalar =
|
||||
field.IsOptional() && IsScalar(field.value.type.base_type);
|
||||
std::string def_Val = opt_scalar ? "nil" : "{{CONSTANT}}";
|
||||
@@ -761,7 +725,7 @@ class SwiftGenerator : public BaseGenerator {
|
||||
if (IsBool(field.value.type.base_type)) {
|
||||
std::string default_value =
|
||||
field.IsOptional() ? "nil"
|
||||
: ("0" == field.value.constant ? "false" : "true");
|
||||
: SwiftConstant(field);
|
||||
code_.SetValue("CONSTANT", default_value);
|
||||
code_.SetValue("VALUETYPE", "Bool");
|
||||
code_ += GenReaderMainBody(optional) + "\\";
|
||||
@@ -809,7 +773,7 @@ class SwiftGenerator : public BaseGenerator {
|
||||
break;
|
||||
|
||||
case BASE_TYPE_STRING: {
|
||||
const auto default_string = "\"" + field.value.constant + "\"";
|
||||
const auto default_string = "\"" + SwiftConstant(field) + "\"";
|
||||
code_.SetValue("VALUETYPE", GenType(field.value.type));
|
||||
code_.SetValue("CONSTANT", field.IsDefault() ? default_string : "nil");
|
||||
code_ += GenReaderMainBody(is_required) + GenOffset() +
|
||||
@@ -1017,20 +981,20 @@ class SwiftGenerator : public BaseGenerator {
|
||||
field.value.type.VectorType().base_type != BASE_TYPE_UTYPE;
|
||||
|
||||
code_.SetValue("FIELDVAR", namer_.Variable(field));
|
||||
code_.SetValue("CONSTANT", field.value.constant);
|
||||
code_.SetValue("CONSTANT", SwiftConstant(field));
|
||||
bool should_indent = true;
|
||||
if (is_non_union_vector) {
|
||||
code_ += "if {{FIELDVAR}}Count > 0 {";
|
||||
} else if (IsEnum(type) && !field.IsOptional()) {
|
||||
code_.SetValue("CONSTANT", GenEnumDefaultValue(field));
|
||||
code_ += "if {{FIELDVAR}} != {{CONSTANT}} {";
|
||||
} else if (IsFloat(type.base_type) && StringIsFlatbufferNan(field.value.constant)) {
|
||||
code_ += "if !{{FIELDVAR}}.isNaN {";
|
||||
} else if (IsScalar(type.base_type) && !IsEnum(type) &&
|
||||
!IsBool(type.base_type) && !field.IsOptional()) {
|
||||
code_ += "if {{FIELDVAR}} != {{CONSTANT}} {";
|
||||
} else if (IsBool(type.base_type) && !field.IsOptional()) {
|
||||
std::string default_value =
|
||||
"0" == field.value.constant ? "false" : "true";
|
||||
code_.SetValue("CONSTANT", default_value);
|
||||
code_.SetValue("CONSTANT", SwiftConstant(field));
|
||||
code_ += "if {{FIELDVAR}} != {{CONSTANT}} {";
|
||||
} else {
|
||||
should_indent = false;
|
||||
@@ -1578,13 +1542,13 @@ class SwiftGenerator : public BaseGenerator {
|
||||
|
||||
if (field.IsRequired()) {
|
||||
std::string default_value =
|
||||
field.IsDefault() ? field.value.constant : "";
|
||||
field.IsDefault() ? SwiftConstant(field) : "";
|
||||
base_constructor.push_back(field_var + " = \"" + default_value +
|
||||
"\"");
|
||||
break;
|
||||
}
|
||||
if (field.IsDefault() && !field.IsRequired()) {
|
||||
std::string value = field.IsDefault() ? field.value.constant : "nil";
|
||||
std::string value = field.IsDefault() ? SwiftConstant(field) : "nil";
|
||||
base_constructor.push_back(field_var + " = \"" + value + "\"");
|
||||
}
|
||||
break;
|
||||
@@ -1603,14 +1567,14 @@ class SwiftGenerator : public BaseGenerator {
|
||||
code_ += "{{ACCESS_TYPE}} var {{FIELDVAR}}: {{VALUETYPE}}" + nullable;
|
||||
if (!field.IsOptional())
|
||||
base_constructor.push_back(field_var + " = " +
|
||||
field.value.constant);
|
||||
SwiftConstant(field));
|
||||
break;
|
||||
}
|
||||
|
||||
if (IsEnum(field.value.type)) {
|
||||
const auto default_value = IsEnum(field.value.type)
|
||||
? GenEnumDefaultValue(field)
|
||||
: field.value.constant;
|
||||
: SwiftConstant(field);
|
||||
code_ += "{{ACCESS_TYPE}} var {{FIELDVAR}}: {{VALUETYPE}}";
|
||||
base_constructor.push_back(field_var + " = " + default_value);
|
||||
break;
|
||||
@@ -1618,10 +1582,8 @@ class SwiftGenerator : public BaseGenerator {
|
||||
|
||||
if (IsBool(field.value.type.base_type)) {
|
||||
code_ += "{{ACCESS_TYPE}} var {{FIELDVAR}}: Bool" + nullable;
|
||||
std::string default_value =
|
||||
"0" == field.value.constant ? "false" : "true";
|
||||
if (!field.IsOptional())
|
||||
base_constructor.push_back(field_var + " = " + default_value);
|
||||
base_constructor.push_back(field_var + " = " + SwiftConstant(field));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1676,7 +1638,7 @@ class SwiftGenerator : public BaseGenerator {
|
||||
if (IsEnum(vectortype) && vectortype.base_type != BASE_TYPE_UNION) {
|
||||
const auto default_value = IsEnum(field.value.type)
|
||||
? GenEnumDefaultValue(field)
|
||||
: field.value.constant;
|
||||
: SwiftConstant(field);
|
||||
buffer_constructor.push_back(indentation + field_var + ".append(_t." +
|
||||
field_field + "(at: index)!)");
|
||||
break;
|
||||
@@ -1869,6 +1831,16 @@ class SwiftGenerator : public BaseGenerator {
|
||||
}
|
||||
}
|
||||
|
||||
std::string SwiftConstant(const FieldDef& field) {
|
||||
const auto default_value =
|
||||
StringIsFlatbufferNan(field.value.constant) ? ".nan" :
|
||||
StringIsFlatbufferPositiveInfinity(field.value.constant) ? ".infinity" :
|
||||
StringIsFlatbufferNegativeInfinity(field.value.constant) ? "-.infinity" :
|
||||
IsBool(field.value.type.base_type) ? ("0" == field.value.constant ? "false" : "true") :
|
||||
field.value.constant;
|
||||
return default_value;
|
||||
}
|
||||
|
||||
std::string GenEnumConstructor(const std::string &at) {
|
||||
return "{{VALUETYPE}}(rawValue: " + GenReader("BASEVALUE", at) + ") ";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user