Bläddra i källkod

Initialize members explicitly

Sebastian Schmidt 4 år sedan
förälder
incheckning
e44ac5c519

+ 15 - 13
Firestore/Source/API/FSTUserDataReader.mm

@@ -303,8 +303,10 @@ NS_ASSUME_NONNULL_BEGIN
 
 - (Message<google_firestore_v1_Value>)parseDictionary:(NSDictionary<NSString *, id> *)dict
                                               context:(ParseContext &&)context {
-  __block Message<google_firestore_v1_Value> result{};
+  __block Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_map_value_tag;
+  result->map_value.fields_count = 0;
+  result->map_value.fields = nil;
 
   if (dict.count == 0) {
     const FieldPath *path = context.path();
@@ -340,7 +342,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 - (Message<google_firestore_v1_Value>)parseArray:(NSArray<id> *)array
                                          context:(ParseContext &&)context {
-  __block Message<google_firestore_v1_Value> result{};
+  __block Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_array_value_tag;
   result->array_value.values_count = CheckedSize([array count]);
   result->array_value.values =
@@ -534,28 +536,28 @@ NS_ASSUME_NONNULL_BEGIN
 }
 
 - (Message<google_firestore_v1_Value>)encodeBoolean:(bool)value {
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_boolean_value_tag;
   result->boolean_value = value;
   return result;
 }
 
 - (Message<google_firestore_v1_Value>)encodeInteger:(int64_t)value {
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_integer_value_tag;
   result->integer_value = value;
   return result;
 }
 
 - (Message<google_firestore_v1_Value>)encodeDouble:(double)value {
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_double_value_tag;
   result->double_value = value;
   return result;
 }
 
 - (Message<google_firestore_v1_Value>)encodeTimestampValue:(Timestamp)value {
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_timestamp_value_tag;
   result->timestamp_value.seconds = value.seconds();
   result->timestamp_value.nanos = value.nanoseconds();
@@ -563,14 +565,14 @@ NS_ASSUME_NONNULL_BEGIN
 }
 
 - (Message<google_firestore_v1_Value>)encodeStringValue:(const std::string &)value {
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_string_value_tag;
   result->string_value = nanopb::MakeBytesArray(value);
   return result;
 }
 
 - (Message<google_firestore_v1_Value>)encodeBlob:(const nanopb::ByteString &)value {
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_bytes_value_tag;
   // Copy the blob so that pb_release can do the right thing.
   result->bytes_value = nanopb::CopyBytesArray(value.get());
@@ -582,18 +584,18 @@ NS_ASSUME_NONNULL_BEGIN
   HARD_ASSERT(_databaseID == databaseId, "Database %s cannot encode reference from %s",
               _databaseID.ToString(), databaseId.ToString());
 
-  Message<google_firestore_v1_Value> result{};
-  result->which_value_type = google_firestore_v1_Value_reference_value_tag;
-
   std::string referenceName = ResourcePath({"projects", databaseId.project_id(), "databases",
                                             databaseId.database_id(), "documents", key.ToString()})
                                   .CanonicalString();
+
+  Message<google_firestore_v1_Value> result;
+  result->which_value_type = google_firestore_v1_Value_reference_value_tag;
   result->reference_value = nanopb::MakeBytesArray(referenceName);
   return result;
 }
 
 - (Message<google_firestore_v1_Value>)encodeGeoPoint:(const GeoPoint &)value {
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_geo_point_value_tag;
   result->geo_point_value.latitude = value.latitude();
   result->geo_point_value.longitude = value.longitude();
@@ -603,7 +605,7 @@ NS_ASSUME_NONNULL_BEGIN
 - (Message<google_firestore_v1_ArrayValue>)parseArrayTransformElements:(NSArray<id> *)elements {
   ParseAccumulator accumulator{UserDataSource::Argument};
 
-  Message<google_firestore_v1_ArrayValue> array_value{};
+  Message<google_firestore_v1_ArrayValue> array_value;
   array_value->values_count = CheckedSize(elements.count);
   array_value->values = nanopb::MakeArray<google_firestore_v1_Value>(array_value->values_count);
 

+ 4 - 3
Firestore/core/src/bundle/bundle_serializer.cc

@@ -654,9 +654,10 @@ Message<google_firestore_v1_Value> BundleSerializer::DecodeValue(
     return {};
   }
 
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   if (value.contains("nullValue")) {
     result->which_value_type = google_firestore_v1_Value_null_value_tag;
+    result->null_value = {};
   } else if (value.contains("booleanValue")) {
     result->which_value_type = google_firestore_v1_Value_boolean_value_tag;
     auto val = value.at("booleanValue");
@@ -720,7 +721,7 @@ Message<google_firestore_v1_MapValue> BundleSerializer::DecodeMapValue(
 
   // Fill the map array. Note that we can't use SetRepeatedField here since the
   // JSON map doesn't currently work with SetRepeatedField.
-  Message<google_firestore_v1_MapValue> map_value{};
+  Message<google_firestore_v1_MapValue> map_value;
   map_value->fields_count = nanopb::CheckedSize(fields.size());
   map_value->fields =
       nanopb::MakeArray<google_firestore_v1_MapValue_FieldsEntry>(
@@ -738,7 +739,7 @@ Message<google_firestore_v1_ArrayValue> BundleSerializer::DecodeArrayValue(
     JsonReader& reader, const json& array_json) const {
   const auto& values = reader.RequiredArray("values", array_json);
 
-  Message<google_firestore_v1_ArrayValue> array_value{};
+  Message<google_firestore_v1_ArrayValue> array_value;
   SetRepeatedField(
       &array_value->values, &array_value->values_count, values,
       [&](const json& j) { return *DecodeValue(reader, j).release(); });

+ 7 - 3
Firestore/core/src/model/object_value.cc

@@ -200,7 +200,7 @@ ObjectValue::ObjectValue(const ObjectValue& other)
 
 ObjectValue ObjectValue::FromMapValue(
     Message<google_firestore_v1_MapValue> map_value) {
-  Message<google_firestore_v1_Value> value{};
+  Message<google_firestore_v1_Value> value;
   value->which_value_type = google_firestore_v1_Value_map_value_tag;
   value->map_value = *map_value.release();
   return ObjectValue{std::move(value)};
@@ -208,7 +208,7 @@ ObjectValue ObjectValue::FromMapValue(
 
 ObjectValue ObjectValue::FromFieldsEntry(
     google_firestore_v1_Document_FieldsEntry* fields_entry, pb_size_t count) {
-  Message<google_firestore_v1_Value> value{};
+  Message<google_firestore_v1_Value> value;
   value->which_value_type = google_firestore_v1_Value_map_value_tag;
   SetRepeatedField(
       &value->map_value.fields, &value->map_value.fields_count,
@@ -358,13 +358,17 @@ google_firestore_v1_MapValue* ObjectValue::ParentMap(const FieldPath& path) {
         // change it to a map type.
         FreeFieldsArray(&entry->value);
         entry->value.which_value_type = google_firestore_v1_Value_map_value_tag;
+        entry->value.map_value.fields_count = 0;
+        entry->value.map_value.fields = nil;
       }
 
       parent = &entry->value;
     } else {
       // Create a new map value for the current segment.
-      Message<google_firestore_v1_Value> new_entry{};
+      Message<google_firestore_v1_Value> new_entry;
       new_entry->which_value_type = google_firestore_v1_Value_map_value_tag;
+      new_entry->map_value.fields_count = 0;
+      new_entry->map_value.fields = nil;
 
       std::map<std::string, Message<google_firestore_v1_Value>> upserts;
       upserts[segment] = std::move(new_entry);

+ 3 - 1
Firestore/core/src/model/server_timestamp_util.cc

@@ -35,8 +35,10 @@ const char kServerTimestampSentinel[] = "server_timestamp";
 Message<google_firestore_v1_Value> EncodeServerTimestamp(
     const Timestamp& local_write_time,
     absl::optional<google_firestore_v1_Value> previous_value) {
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_map_value_tag;
+  result->map_value.fields_count = 0;
+  result->map_value.fields = nil;
 
   pb_size_t count = previous_value ? 3 : 2;
 

+ 4 - 3
Firestore/core/src/model/transform_operation.cc

@@ -284,7 +284,7 @@ Message<google_firestore_v1_Value> ArrayTransform::Rep::Apply(
     array_value->values_count = new_index;
   }
 
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_array_value_tag;
   result->array_value = *array_value.release();
   return result;
@@ -390,7 +390,7 @@ NumericIncrementTransform::Rep::ApplyToLocalView(
     const absl::optional<google_firestore_v1_Value>& previous_value,
     const Timestamp& /* local_write_time */) const {
   auto base_value = ComputeBaseValue(previous_value);
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
 
   // Return an integer value only if the previous value and the operand is an
   // integer.
@@ -417,8 +417,9 @@ NumericIncrementTransform::Rep::ComputeBaseValue(
     return DeepClone(*previous_value);
   }
 
-  Message<google_firestore_v1_Value> zero_value{};
+  Message<google_firestore_v1_Value> zero_value;
   zero_value->which_value_type = google_firestore_v1_Value_integer_value_tag;
+  zero_value->integer_value = 0;
   return zero_value;
 }
 

+ 4 - 3
Firestore/core/src/model/value_util.cc

@@ -497,8 +497,9 @@ bool Contains(google_firestore_v1_ArrayValue haystack,
 }
 
 Message<google_firestore_v1_Value> NullValue() {
-  Message<google_firestore_v1_Value> null_value{};
+  Message<google_firestore_v1_Value> null_value;
   null_value->which_value_type = google_firestore_v1_Value_null_value_tag;
+  null_value->null_value = {};
   return null_value;
 }
 
@@ -507,7 +508,7 @@ bool IsNullValue(const google_firestore_v1_Value& value) {
 }
 
 Message<google_firestore_v1_Value> NaNValue() {
-  Message<google_firestore_v1_Value> nan_value{};
+  Message<google_firestore_v1_Value> nan_value;
   nan_value->which_value_type = google_firestore_v1_Value_double_value_tag;
   nan_value->double_value = std::numeric_limits<double>::quiet_NaN();
   return nan_value;
@@ -521,7 +522,7 @@ bool IsNaNValue(const google_firestore_v1_Value& value) {
 Message<google_firestore_v1_Value> RefValue(
     const model::DatabaseId& database_id,
     const model::DocumentKey& document_key) {
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_reference_value_tag;
   result->string_value = nanopb::MakeBytesArray(util::StringFormat(
       "projects/%s/databases/%s/documents/%s", database_id.project_id(),

+ 1 - 1
Firestore/core/src/remote/serializer.cc

@@ -1194,7 +1194,7 @@ MutationResult Serializer::DecodeMutationResult(
           ? DecodeVersion(context, write_result.update_time)
           : commit_version;
 
-  Message<google_firestore_v1_ArrayValue> transform_results{};
+  Message<google_firestore_v1_ArrayValue> transform_results;
   SetRepeatedField(&transform_results->values, &transform_results->values_count,
                    absl::Span<google_firestore_v1_Value>(
                        write_result.transform_results,

+ 10 - 10
Firestore/core/test/unit/testutil/testutil.cc

@@ -95,7 +95,7 @@ namespace details {
 Message<google_firestore_v1_Value> BlobValue(
     std::initializer_list<uint8_t> octets) {
   nanopb::ByteString contents{octets};
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_bytes_value_tag;
   result->bytes_value = nanopb::MakeBytesArray(octets.begin(), octets.size());
   return result;
@@ -112,14 +112,14 @@ Message<google_firestore_v1_Value> Value(std::nullptr_t) {
 }
 
 Message<google_firestore_v1_Value> Value(double value) {
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_double_value_tag;
   result->double_value = value;
   return result;
 }
 
 Message<google_firestore_v1_Value> Value(Timestamp value) {
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_timestamp_value_tag;
   result->timestamp_value.seconds = value.seconds();
   result->timestamp_value.nanos = value.nanoseconds();
@@ -127,28 +127,28 @@ Message<google_firestore_v1_Value> Value(Timestamp value) {
 }
 
 Message<google_firestore_v1_Value> Value(const char* value) {
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_string_value_tag;
   result->string_value = nanopb::MakeBytesArray(value);
   return result;
 }
 
 Message<google_firestore_v1_Value> Value(const std::string& value) {
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_string_value_tag;
   result->string_value = nanopb::MakeBytesArray(value);
   return result;
 }
 
 Message<google_firestore_v1_Value> Value(const nanopb::ByteString& value) {
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_bytes_value_tag;
   result->bytes_value = nanopb::MakeBytesArray(value.begin(), value.size());
   return result;
 }
 
 Message<google_firestore_v1_Value> Value(const GeoPoint& value) {
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_geo_point_value_tag;
   result->geo_point_value.latitude = value.latitude();
   result->geo_point_value.longitude = value.longitude();
@@ -162,7 +162,7 @@ Message<google_firestore_v1_Value> Value(
 
 Message<google_firestore_v1_Value> Value(
     Message<google_firestore_v1_MapValue> value) {
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_map_value_tag;
   result->map_value = *value.release();
   return result;
@@ -170,7 +170,7 @@ Message<google_firestore_v1_Value> Value(
 
 Message<google_firestore_v1_Value> Value(
     Message<google_firestore_v1_ArrayValue> value) {
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_array_value_tag;
   result->array_value = *value.release();
   return result;
@@ -207,7 +207,7 @@ model::DatabaseId DbId(std::string project) {
 Message<google_firestore_v1_Value> Ref(std::string project,
                                        absl::string_view path) {
   model::DatabaseId database_id = DbId(std::move(project));
-  Message<google_firestore_v1_Value> result{};
+  Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_reference_value_tag;
   result->string_value = nanopb::MakeBytesArray(
       StringFormat("projects/%s/databases/%s/documents/%s",

+ 6 - 4
Firestore/core/test/unit/testutil/testutil.h

@@ -89,7 +89,7 @@ using EnableForInts = typename std::enable_if<std::is_integral<T>::value &&
 template <typename T>
 EnableForExactlyBool<T, nanopb::Message<google_firestore_v1_Value>> Value(
     T bool_value) {
-  nanopb::Message<google_firestore_v1_Value> result{};
+  nanopb::Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_boolean_value_tag;
   result->boolean_value = bool_value;
   return result;
@@ -108,7 +108,7 @@ EnableForExactlyBool<T, nanopb::Message<google_firestore_v1_Value>> Value(
  */
 template <typename T>
 EnableForInts<T, nanopb::Message<google_firestore_v1_Value>> Value(T value) {
-  nanopb::Message<google_firestore_v1_Value> result{};
+  nanopb::Message<google_firestore_v1_Value> result;
   result->which_value_type = google_firestore_v1_Value_integer_value_tag;
   result->integer_value = value;
   return result;
@@ -192,8 +192,10 @@ nanopb::Message<google_firestore_v1_Value> AddPairs(
  */
 template <typename... Args>
 nanopb::Message<google_firestore_v1_Value> MakeMap(Args... key_value_pairs) {
-  nanopb::Message<google_firestore_v1_Value> map_value{{}};
+  nanopb::Message<google_firestore_v1_Value> map_value;
   map_value->which_value_type = google_firestore_v1_Value_map_value_tag;
+  map_value->map_value.fields_count = 0;
+  map_value->map_value.fields = nil;
   return AddPairs(std::move(map_value), std::forward<Args>(key_value_pairs)...);
 }
 
@@ -230,7 +232,7 @@ void AddElements(nanopb::Message<google_firestore_v1_ArrayValue>& array_value,
  */
 template <typename... Args>
 nanopb::Message<google_firestore_v1_ArrayValue> MakeArray(Args&&... values) {
-  nanopb::Message<google_firestore_v1_ArrayValue> array_value{};
+  nanopb::Message<google_firestore_v1_ArrayValue> array_value;
   array_value->values_count = nanopb::CheckedSize(sizeof...(Args));
   array_value->values =
       nanopb::MakeArray<google_firestore_v1_Value>(array_value->values_count);