force explicit conversions to desired types in generated code

pull/13171/head
Matt Kulukundis 3 years ago
parent f196268799
commit 9457aa6452
  1. 18
      upb/upb.h
  2. 12
      upbc/protoc-gen-upb.cc

@ -90,6 +90,24 @@ UPB_INLINE bool upb_StringView_IsEqual(upb_StringView a, upb_StringView b) {
return a.size == b.size && memcmp(a.data, b.data, a.size) == 0;
}
/** upb_*Int* conversion routines ********************************************/
UPB_INLINE int32_t upb_Int32_FromI(int v) {
return (int32_t)v;
}
UPB_INLINE int64_t upb_Int64_FromLL(long long v) {
return (int64_t)v;
}
UPB_INLINE uint32_t upb_UInt32_FromU(unsigned v) {
return (uint32_t)v;
}
UPB_INLINE uint64_t upb_UInt64_FromULL(unsigned long long v) {
return (uint64_t)v;
}
#define UPB_STRINGVIEW_INIT(ptr, len) \
{ ptr, len }

@ -323,13 +323,17 @@ std::string FieldDefault(const protobuf::FieldDescriptor* field) {
return absl::Substitute("upb_StringView_FromString(\"$0\")",
absl::CEscape(field->default_value_string()));
case protobuf::FieldDescriptor::CPPTYPE_INT32:
return absl::StrCat(field->default_value_int32());
return absl::Substitute("upb_Int32_FromI($0)",
field->default_value_int32());
case protobuf::FieldDescriptor::CPPTYPE_INT64:
return absl::StrCat(field->default_value_int64());
return absl::Substitute("upb_Int64_FromLL($0ll)",
field->default_value_int64());
case protobuf::FieldDescriptor::CPPTYPE_UINT32:
return absl::StrCat(field->default_value_uint32());
return absl::Substitute("upb_UInt32_FromU($0u)",
field->default_value_uint32());
case protobuf::FieldDescriptor::CPPTYPE_UINT64:
return absl::StrCat(field->default_value_uint64());
return absl::Substitute("upb_UInt64_FromULL($0ull)",
field->default_value_uint64());
case protobuf::FieldDescriptor::CPPTYPE_FLOAT:
return absl::StrCat(field->default_value_float());
case protobuf::FieldDescriptor::CPPTYPE_DOUBLE:

Loading…
Cancel
Save