upb: add a non-void typedef for upb_Message

PiperOrigin-RevId: 592863926
pull/15134/head
Eric Salo 2023-12-21 08:09:54 -08:00 committed by Copybara-Service
parent 588d5aa0db
commit b997cb6d8d
36 changed files with 1793 additions and 1379 deletions

View File

@ -72,7 +72,7 @@ class Ptr final {
#endif
private:
Ptr(void* msg, upb_Arena* arena) : p_(msg, arena) {} // NOLINT
Ptr(upb_Message* msg, upb_Arena* arena) : p_(msg, arena) {} // NOLINT
friend class Ptr<const T>;
friend typename T::Access;
@ -132,11 +132,11 @@ struct PrivateAccess {
return message->msg();
}
template <typename T>
static auto Proxy(void* p, upb_Arena* arena) {
static auto Proxy(upb_Message* p, upb_Arena* arena) {
return typename T::Proxy(p, arena);
}
template <typename T>
static auto CProxy(const void* p, upb_Arena* arena) {
static auto CProxy(const upb_Message* p, upb_Arena* arena) {
return typename T::CProxy(p, arena);
}
};
@ -152,7 +152,7 @@ T CreateMessage() {
}
template <typename T>
typename T::Proxy CreateMessageProxy(void* msg, upb_Arena* arena) {
typename T::Proxy CreateMessageProxy(upb_Message* msg, upb_Arena* arena) {
return typename T::Proxy(msg, arena);
}
@ -418,7 +418,7 @@ absl::StatusOr<Ptr<const Extension>> GetExtension(
upb_MiniTableExtension_Number(id.mini_table_ext()));
}
return Ptr<const Extension>(::protos::internal::CreateMessage<Extension>(
ext->data.ptr, ::protos::internal::GetArena(message)));
(upb_Message*)ext->data.ptr, ::protos::internal::GetArena(message)));
}
template <typename T, typename Extendee, typename Extension,

View File

@ -26,8 +26,8 @@ TEST(CppGeneratedCode, InternalMoveMessage) {
protos_generator_test_TestModel_set_int_value_with_default(message, 123);
// Move ownership.
TestModel model =
protos::internal::MoveMessage<TestModel>(message, source_arena);
TestModel model = protos::internal::MoveMessage<TestModel>(
(upb_Message*)message, source_arena);
// Now that we have moved ownership, free original arena.
upb_Arena_Free(source_arena);
EXPECT_EQ(model.int_value_with_default(), 123);

View File

@ -325,7 +325,7 @@ void WriteMapAccessorDefinitions(const protobuf::Descriptor* message,
$5* msg_value;
$7bool success = $4_$9_get(msg_, $8, &msg_value);
if (success) {
return ::protos::internal::CreateMessage<$6>(msg_value, arena_);
return ::protos::internal::CreateMessage<$6>(UPB_UPCAST(msg_value), arena_);
}
return absl::NotFoundError("");
}

View File

@ -181,8 +181,8 @@ void WriteModelPublicDeclaration(
output(
R"cc(
private:
const void* msg() const { return msg_; }
void* msg() { return msg_; }
const upb_Message* msg() const { return UPB_UPCAST(msg_); }
upb_Message* msg() { return UPB_UPCAST(msg_); }
$0(upb_Message* msg, upb_Arena* arena) : $0Access() {
msg_ = ($1*)msg;
@ -242,9 +242,10 @@ void WriteModelProxyDeclaration(const protobuf::Descriptor* descriptor,
output(
R"cc(
private:
void* msg() const { return msg_; }
upb_Message* msg() const { return UPB_UPCAST(msg_); }
$0Proxy(void* msg, upb_Arena* arena) : internal::$0Access(($1*)msg, arena) {}
$0Proxy(upb_Message* msg, upb_Arena* arena)
: internal::$0Access(($1*)msg, arena) {}
friend $0::Proxy(::protos::CreateMessage<$0>(::protos::Arena& arena));
friend $0::Proxy(::protos::internal::CreateMessageProxy<$0>(
upb_Message*, upb_Arena*));
@ -295,9 +296,9 @@ void WriteModelCProxyDeclaration(const protobuf::Descriptor* descriptor,
R"cc(
private:
using AsNonConst = $0Proxy;
const void* msg() const { return msg_; }
const upb_Message* msg() const { return UPB_UPCAST(msg_); }
$0CProxy(const void* msg, upb_Arena* arena)
$0CProxy(const upb_Message* msg, upb_Arena* arena)
: internal::$0Access(($1*)msg, arena){};
friend struct ::protos::internal::PrivateAccess;
friend class RepeatedFieldProxy;
@ -340,7 +341,7 @@ void WriteMessageImplementation(
}
$0::$0(const $0& from) : $0Access() {
arena_ = owned_arena_.ptr();
msg_ = ($1*)::protos::internal::DeepClone(from.msg_, &$2, arena_);
msg_ = ($1*)::protos::internal::DeepClone(UPB_UPCAST(from.msg_), &$2, arena_);
}
$0::$0(const CProxy& from) : $0Access() {
arena_ = owned_arena_.ptr();
@ -354,7 +355,7 @@ void WriteMessageImplementation(
}
$0& $0::operator=(const $3& from) {
arena_ = owned_arena_.ptr();
msg_ = ($1*)::protos::internal::DeepClone(from.msg_, &$2, arena_);
msg_ = ($1*)::protos::internal::DeepClone(UPB_UPCAST(from.msg_), &$2, arena_);
return *this;
}
$0& $0::operator=(const CProxy& from) {

View File

@ -190,6 +190,7 @@ py_extension(
],
target_compatible_with = select(_message_target_compatible_with),
deps = [
"//upb:base",
"//upb:descriptor_upb_proto_reflection",
"//upb:eps_copy_input_stream",
"//upb:hash",

View File

@ -12,6 +12,7 @@
#include "python/descriptor_pool.h"
#include "python/message.h"
#include "python/protobuf.h"
#include "upb/base/upcast.h"
#include "upb/reflection/def.h"
#include "upb/util/def_to_proto.h"
@ -391,7 +392,7 @@ static PyObject* PyUpb_Descriptor_GetOneofs(PyObject* _self, void* closure) {
static PyObject* PyUpb_Descriptor_GetOptions(PyObject* _self, PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetOptions(
&self->options, upb_MessageDef_Options(self->def),
&self->options, UPB_UPCAST(upb_MessageDef_Options(self->def)),
&google__protobuf__MessageOptions_msg_init,
PYUPB_DESCRIPTOR_PROTO_PACKAGE ".MessageOptions");
}
@ -399,7 +400,7 @@ static PyObject* PyUpb_Descriptor_GetOptions(PyObject* _self, PyObject* args) {
static PyObject* PyUpb_Descriptor_GetFeatures(PyObject* _self, PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetFeatures(
&self->features, upb_MessageDef_ResolvedFeatures(self->def));
&self->features, UPB_UPCAST(upb_MessageDef_ResolvedFeatures(self->def)));
}
static PyObject* PyUpb_Descriptor_CopyToProto(PyObject* _self,
@ -700,10 +701,10 @@ static PyType_Slot PyUpb_Descriptor_Slots[] = {
{0, NULL}};
static PyType_Spec PyUpb_Descriptor_Spec = {
PYUPB_MODULE_NAME ".Descriptor", // tp_name
sizeof(PyUpb_DescriptorBase), // tp_basicsize
0, // tp_itemsize
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, // tp_flags
PYUPB_MODULE_NAME ".Descriptor", // tp_name
sizeof(PyUpb_DescriptorBase), // tp_basicsize
0, // tp_itemsize
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, // tp_flags
PyUpb_Descriptor_Slots,
};
@ -809,7 +810,7 @@ static PyObject* PyUpb_EnumDescriptor_GetOptions(PyObject* _self,
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetOptions(
&self->options, upb_EnumDef_Options(self->def),
&self->options, UPB_UPCAST(upb_EnumDef_Options(self->def)),
&google__protobuf__EnumOptions_msg_init,
PYUPB_DESCRIPTOR_PROTO_PACKAGE ".EnumOptions");
}
@ -818,7 +819,7 @@ static PyObject* PyUpb_EnumDescriptor_GetFeatures(PyObject* _self,
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetFeatures(
&self->features, upb_EnumDef_ResolvedFeatures(self->def));
&self->features, UPB_UPCAST(upb_EnumDef_ResolvedFeatures(self->def)));
}
static PyObject* PyUpb_EnumDescriptor_CopyToProto(PyObject* _self,
@ -908,7 +909,7 @@ static PyObject* PyUpb_EnumValueDescriptor_GetOptions(PyObject* _self,
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetOptions(
&self->options, upb_EnumValueDef_Options(self->def),
&self->options, UPB_UPCAST(upb_EnumValueDef_Options(self->def)),
&google__protobuf__EnumValueOptions_msg_init,
PYUPB_DESCRIPTOR_PROTO_PACKAGE ".EnumValueOptions");
}
@ -917,7 +918,8 @@ static PyObject* PyUpb_EnumValueDescriptor_GetFeatures(PyObject* _self,
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetFeatures(
&self->features, upb_EnumValueDef_ResolvedFeatures(self->def));
&self->features,
UPB_UPCAST(upb_EnumValueDef_ResolvedFeatures(self->def)));
}
static PyGetSetDef PyUpb_EnumValueDescriptor_Getters[] = {
@ -1121,7 +1123,7 @@ static PyObject* PyUpb_FieldDescriptor_GetOptions(PyObject* _self,
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetOptions(
&self->options, upb_FieldDef_Options(self->def),
&self->options, UPB_UPCAST(upb_FieldDef_Options(self->def)),
&google__protobuf__FieldOptions_msg_init,
PYUPB_DESCRIPTOR_PROTO_PACKAGE ".FieldOptions");
}
@ -1130,7 +1132,7 @@ static PyObject* PyUpb_FieldDescriptor_GetFeatures(PyObject* _self,
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetFeatures(
&self->features, upb_FieldDef_ResolvedFeatures(self->def));
&self->features, UPB_UPCAST(upb_FieldDef_ResolvedFeatures(self->def)));
}
static PyGetSetDef PyUpb_FieldDescriptor_Getters[] = {
@ -1381,7 +1383,7 @@ static PyObject* PyUpb_FileDescriptor_GetOptions(PyObject* _self,
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetOptions(
&self->options, upb_FileDef_Options(self->def),
&self->options, UPB_UPCAST(upb_FileDef_Options(self->def)),
&google__protobuf__FileOptions_msg_init,
PYUPB_DESCRIPTOR_PROTO_PACKAGE ".FileOptions");
}
@ -1390,7 +1392,7 @@ static PyObject* PyUpb_FileDescriptor_GetFeatures(PyObject* _self,
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetFeatures(
&self->features, upb_FileDef_ResolvedFeatures(self->def));
&self->features, UPB_UPCAST(upb_FileDef_ResolvedFeatures(self->def)));
}
static PyObject* PyUpb_FileDescriptor_CopyToProto(PyObject* _self,
@ -1515,7 +1517,7 @@ static PyObject* PyUpb_MethodDescriptor_GetOptions(PyObject* _self,
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetOptions(
&self->options, upb_MethodDef_Options(self->def),
&self->options, UPB_UPCAST(upb_MethodDef_Options(self->def)),
&google__protobuf__MethodOptions_msg_init,
PYUPB_DESCRIPTOR_PROTO_PACKAGE ".MethodOptions");
}
@ -1524,7 +1526,7 @@ static PyObject* PyUpb_MethodDescriptor_GetFeatures(PyObject* _self,
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetFeatures(
&self->features, upb_MethodDef_ResolvedFeatures(self->def));
&self->features, UPB_UPCAST(upb_MethodDef_ResolvedFeatures(self->def)));
}
static PyObject* PyUpb_MethodDescriptor_CopyToProto(PyObject* _self,
@ -1632,7 +1634,7 @@ static PyObject* PyUpb_OneofDescriptor_GetOptions(PyObject* _self,
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetOptions(
&self->options, upb_OneofDef_Options(self->def),
&self->options, UPB_UPCAST(upb_OneofDef_Options(self->def)),
&google__protobuf__OneofOptions_msg_init,
PYUPB_DESCRIPTOR_PROTO_PACKAGE ".OneofOptions");
}
@ -1641,7 +1643,7 @@ static PyObject* PyUpb_OneofDescriptor_GetFeatures(PyObject* _self,
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetFeatures(
&self->features, upb_OneofDef_ResolvedFeatures(self->def));
&self->features, UPB_UPCAST(upb_OneofDef_ResolvedFeatures(self->def)));
}
static PyGetSetDef PyUpb_OneofDescriptor_Getters[] = {
@ -1742,7 +1744,7 @@ static PyObject* PyUpb_ServiceDescriptor_GetOptions(PyObject* _self,
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetOptions(
&self->options, upb_ServiceDef_Options(self->def),
&self->options, UPB_UPCAST(upb_ServiceDef_Options(self->def)),
&google__protobuf__ServiceOptions_msg_init,
PYUPB_DESCRIPTOR_PROTO_PACKAGE ".ServiceOptions");
}
@ -1751,7 +1753,7 @@ static PyObject* PyUpb_ServiceDescriptor_GetFeatures(PyObject* _self,
PyObject* args) {
PyUpb_DescriptorBase* self = (void*)_self;
return PyUpb_DescriptorBase_GetFeatures(
&self->features, upb_ServiceDef_ResolvedFeatures(self->def));
&self->features, UPB_UPCAST(upb_ServiceDef_ResolvedFeatures(self->def)));
}
static PyObject* PyUpb_ServiceDescriptor_CopyToProto(PyObject* _self,

View File

@ -12,6 +12,7 @@
#include "python/descriptor.h"
#include "python/message.h"
#include "python/protobuf.h"
#include "upb/base/upcast.h"
#include "upb/reflection/def.h"
#include "upb/util/def_to_proto.h"
@ -147,8 +148,7 @@ bool PyUpb_DescriptorPool_CheckNoDatabase(PyObject* _self) { return true; }
static bool PyUpb_DescriptorPool_LoadDependentFiles(
PyUpb_DescriptorPool* self, google_protobuf_FileDescriptorProto* proto) {
size_t n;
const upb_StringView* deps =
google_protobuf_FileDescriptorProto_dependency(proto, &n);
const upb_StringView* deps = google_protobuf_FileDescriptorProto_dependency(proto, &n);
for (size_t i = 0; i < n; i++) {
const upb_FileDef* dep = upb_DefPool_FindFileByNameWithSize(
self->symtab, deps[i].data, deps[i].size);
@ -191,14 +191,13 @@ static PyObject* PyUpb_DescriptorPool_DoAddSerializedFile(
if (file) {
// If the existing file is equal to the new file, then silently ignore the
// duplicate add.
google_protobuf_FileDescriptorProto* existing =
upb_FileDef_ToProto(file, arena);
google_protobuf_FileDescriptorProto* existing = upb_FileDef_ToProto(file, arena);
if (!existing) {
PyErr_SetNone(PyExc_MemoryError);
goto done;
}
const upb_MessageDef* m = PyUpb_DescriptorPool_GetFileProtoDef();
if (upb_Message_IsEqual(proto, existing, m)) {
if (upb_Message_IsEqual(UPB_UPCAST(proto), UPB_UPCAST(existing), m)) {
result = PyUpb_FileDescriptor_Get(file);
goto done;
}

View File

@ -184,7 +184,7 @@ static PyObject* PyUpb_MapContainer_Subscript(PyObject* _self, PyObject* key) {
map = PyUpb_MapContainer_EnsureReified(_self);
upb_Arena* arena = PyUpb_Arena_Get(self->arena);
if (upb_FieldDef_IsSubMessage(val_f)) {
const upb_Message* m = upb_FieldDef_MessageSubDef(val_f);
const upb_MessageDef* m = upb_FieldDef_MessageSubDef(val_f);
const upb_MiniTable* layout = upb_MessageDef_MiniTable(m);
u_val.msg_val = upb_Message_New(layout, arena);
} else {

View File

@ -17,6 +17,7 @@ cc_library(
"status.h",
"status.hpp",
"string_view.h",
"upcast.h",
],
copts = UPB_DEFAULT_COPTS,
visibility = ["//visibility:public"],

29
upb/base/upcast.h Normal file
View File

@ -0,0 +1,29 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2023 Google LLC. All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
#ifndef UPB_BASE_UPCAST_H_
#define UPB_BASE_UPCAST_H_
// Must be last.
#include "upb/port/def.inc"
// This macro provides a way to upcast message pointers in a way that is
// somewhat more bulletproof than blindly casting a pointer. Example:
//
// typedef struct {
// upb_Message UPB_PRIVATE(base);
// } pkg_FooMessage;
//
// void f(pkg_FooMessage* msg) {
// upb_Decode(UPB_UPCAST(msg), ...);
// }
#define UPB_UPCAST(x) (&(x)->base##_dont_copy_me__upb_internal_use_only)
#include "upb/port/undef.inc"
#endif /* UPB_BASE_UPCAST_H_ */

View File

@ -75,6 +75,7 @@ cc_binary(
":test_messages_proto3_upbdefs",
"//src/google/protobuf/editions:test_messages_proto2_editions_upbdefs",
"//src/google/protobuf/editions:test_messages_proto3_editions_upbdefs",
"//upb:base",
"//upb:json",
"//upb:port",
"//upb:reflection",
@ -128,6 +129,7 @@ cc_binary(
":test_messages_proto3_upbdefs",
"//src/google/protobuf/editions:test_messages_proto2_editions_upbdefs",
"//src/google/protobuf/editions:test_messages_proto3_editions_upbdefs",
"//upb:base",
"//upb:json",
"//upb:port",
"//upb:reflection",

View File

@ -20,6 +20,7 @@
#include "google/protobuf/editions/golden/test_messages_proto3_editions.upbdefs.h"
#include "google/protobuf/test_messages_proto2.upbdefs.h"
#include "google/protobuf/test_messages_proto3.upbdefs.h"
#include "upb/base/upcast.h"
#include "upb/json/decode.h"
#include "upb/json/encode.h"
#include "upb/reflection/message.h"
@ -291,9 +292,9 @@ bool DoTestIo(upb_DefPool* symtab) {
test_count++;
if (verbose) {
debug_print("Request", c.request,
debug_print("Request", UPB_UPCAST(c.request),
conformance_ConformanceRequest_getmsgdef(symtab), &c);
debug_print("Response", c.response,
debug_print("Response", UPB_UPCAST(c.response),
conformance_ConformanceResponse_getmsgdef(symtab), &c);
fprintf(stderr, "\n");
}

View File

@ -9,6 +9,7 @@
#define UPB_GENERATED_CODE_SUPPORT_H_
// IWYU pragma: begin_exports
#include "upb/base/upcast.h"
#include "upb/message/accessors.h"
#include "upb/message/array.h"
#include "upb/message/internal/accessors.h"

View File

@ -13,6 +13,7 @@
#include "google/protobuf/struct.upb.h"
#include <gtest/gtest.h>
#include "upb/base/status.hpp"
#include "upb/base/upcast.h"
#include "upb/json/test.upb.h"
#include "upb/json/test.upbdefs.h"
#include "upb/mem/arena.h"
@ -27,8 +28,8 @@ static upb_test_Box* JsonDecode(const char* json, upb_Arena* a) {
upb_test_Box* box = upb_test_Box_new(a);
int options = 0;
bool ok = upb_JsonDecode(json, strlen(json), box, m.ptr(), defpool.ptr(),
options, a, status.ptr());
bool ok = upb_JsonDecode(json, strlen(json), UPB_UPCAST(box), m.ptr(),
defpool.ptr(), options, a, status.ptr());
return ok ? box : nullptr;
}

View File

@ -13,6 +13,7 @@
#include "google/protobuf/struct.upb.h"
#include <gtest/gtest.h>
#include "upb/base/status.hpp"
#include "upb/base/upcast.h"
#include "upb/json/test.upb.h"
#include "upb/json/test.upbdefs.h"
#include "upb/mem/arena.h"
@ -26,12 +27,12 @@ static std::string JsonEncode(const upb_test_Box* msg, int options) {
upb::MessageDefPtr m(upb_test_Box_getmsgdef(defpool.ptr()));
EXPECT_TRUE(m.ptr() != nullptr);
size_t json_size = upb_JsonEncode(msg, m.ptr(), defpool.ptr(), options,
nullptr, 0, status.ptr());
size_t json_size = upb_JsonEncode(UPB_UPCAST(msg), m.ptr(), defpool.ptr(),
options, nullptr, 0, status.ptr());
char* json_buf = (char*)upb_Arena_Malloc(a.ptr(), json_size + 1);
size_t size = upb_JsonEncode(msg, m.ptr(), defpool.ptr(), options, json_buf,
json_size + 1, status.ptr());
size_t size = upb_JsonEncode(UPB_UPCAST(msg), m.ptr(), defpool.ptr(), options,
json_buf, json_size + 1, status.ptr());
EXPECT_EQ(size, json_size);
return std::string(json_buf, json_size);
}

View File

@ -12,6 +12,7 @@
#include <gtest/gtest.h>
#include "testing/fuzzing/fuzztest.h"
#include "upb/base/status.hpp"
#include "upb/base/upcast.h"
#include "upb/json/decode.h"
#include "upb/json/encode.h"
#include "upb/json/test.upb.h"
@ -37,17 +38,17 @@ void DecodeEncodeArbitraryJson(std::string_view json) {
upb_test_Box* box = upb_test_Box_new(arena.ptr());
int options = 0;
bool ok = upb_JsonDecode(json_heap, json.size(), box, m.ptr(), defpool.ptr(),
options, arena.ptr(), status.ptr());
bool ok = upb_JsonDecode(json_heap, json.size(), UPB_UPCAST(box), m.ptr(),
defpool.ptr(), options, arena.ptr(), status.ptr());
delete[] json_heap;
if (!ok) return;
size_t size = upb_JsonEncode(box, m.ptr(), defpool.ptr(), options, nullptr, 0,
status.ptr());
size_t size = upb_JsonEncode(UPB_UPCAST(box), m.ptr(), defpool.ptr(), options,
nullptr, 0, status.ptr());
char* json_buf = (char*)upb_Arena_Malloc(arena.ptr(), size + 1);
size_t written = upb_JsonEncode(box, m.ptr(), defpool.ptr(), options,
json_buf, size + 1, status.ptr());
size_t written = upb_JsonEncode(UPB_UPCAST(box), m.ptr(), defpool.ptr(),
options, json_buf, size + 1, status.ptr());
EXPECT_EQ(written, size);
}
FUZZ_TEST(FuzzTest, DecodeEncodeArbitraryJson);

View File

@ -27,6 +27,7 @@
#include "upb/base/descriptor_constants.h"
#include "upb/base/status.h"
#include "upb/base/string_view.h"
#include "upb/base/upcast.h"
#include "upb/mem/arena.h"
#include "upb/message/array.h"
#include "upb/message/message.h"
@ -81,11 +82,11 @@ TEST(GeneratedCode, HazzersProto2) {
// Scalar/Boolean.
const upb_MiniTableField* optional_bool_field =
find_proto2_field(kFieldOptionalBool);
EXPECT_EQ(false, upb_Message_HasField(msg, optional_bool_field));
EXPECT_EQ(false, upb_Message_HasField(UPB_UPCAST(msg), optional_bool_field));
protobuf_test_messages_proto2_TestAllTypesProto2_set_optional_bool(msg, true);
EXPECT_EQ(true, upb_Message_HasField(msg, optional_bool_field));
upb_Message_ClearField(msg, optional_bool_field);
EXPECT_EQ(false, upb_Message_HasField(msg, optional_bool_field));
EXPECT_EQ(true, upb_Message_HasField(UPB_UPCAST(msg), optional_bool_field));
upb_Message_ClearField(UPB_UPCAST(msg), optional_bool_field);
EXPECT_EQ(false, upb_Message_HasField(UPB_UPCAST(msg), optional_bool_field));
EXPECT_EQ(
false,
protobuf_test_messages_proto2_TestAllTypesProto2_optional_bool(msg));
@ -93,16 +94,18 @@ TEST(GeneratedCode, HazzersProto2) {
// String.
const upb_MiniTableField* optional_string_field =
find_proto2_field(kFieldOptionalString);
EXPECT_EQ(false, upb_Message_HasField(msg, optional_string_field));
EXPECT_EQ(false,
upb_Message_HasField(UPB_UPCAST(msg), optional_string_field));
protobuf_test_messages_proto2_TestAllTypesProto2_set_optional_string(
msg, upb_StringView_FromString(kTestStr1));
EXPECT_EQ(true, upb_Message_HasField(msg, optional_string_field));
EXPECT_EQ(true, upb_Message_HasField(UPB_UPCAST(msg), optional_string_field));
EXPECT_EQ(
strlen(kTestStr1),
protobuf_test_messages_proto2_TestAllTypesProto2_optional_string(msg)
.size);
upb_Message_ClearField(msg, optional_string_field);
EXPECT_EQ(false, upb_Message_HasField(msg, optional_string_field));
upb_Message_ClearField(UPB_UPCAST(msg), optional_string_field);
EXPECT_EQ(false,
upb_Message_HasField(UPB_UPCAST(msg), optional_string_field));
EXPECT_EQ(
0, protobuf_test_messages_proto2_TestAllTypesProto2_optional_string(msg)
.size);
@ -110,12 +113,15 @@ TEST(GeneratedCode, HazzersProto2) {
// Message.
const upb_MiniTableField* optional_message_field =
find_proto2_field(kFieldOptionalNestedMessage);
EXPECT_EQ(false, upb_Message_HasField(msg, optional_message_field));
EXPECT_EQ(false,
upb_Message_HasField(UPB_UPCAST(msg), optional_message_field));
protobuf_test_messages_proto2_TestAllTypesProto2_mutable_optional_nested_message(
msg, arena);
EXPECT_EQ(true, upb_Message_HasField(msg, optional_message_field));
upb_Message_ClearField(msg, optional_message_field);
EXPECT_EQ(false, upb_Message_HasField(msg, optional_message_field));
EXPECT_EQ(true,
upb_Message_HasField(UPB_UPCAST(msg), optional_message_field));
upb_Message_ClearField(UPB_UPCAST(msg), optional_message_field);
EXPECT_EQ(false,
upb_Message_HasField(UPB_UPCAST(msg), optional_message_field));
EXPECT_EQ(
true,
protobuf_test_messages_proto2_TestAllTypesProto2_optional_nested_message(
@ -127,21 +133,31 @@ TEST(GeneratedCode, HazzersProto2) {
const upb_MiniTableField* optional_oneof_string_field =
find_proto2_field(kFieldOptionalOneOfString);
EXPECT_EQ(false, upb_Message_HasField(msg, optional_oneof_uint32_field));
EXPECT_EQ(false, upb_Message_HasField(msg, optional_oneof_string_field));
EXPECT_EQ(false,
upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_uint32_field));
EXPECT_EQ(false,
upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_string_field));
protobuf_test_messages_proto2_TestAllTypesProto2_set_oneof_uint32(msg, 123);
EXPECT_EQ(true, upb_Message_HasField(msg, optional_oneof_uint32_field));
EXPECT_EQ(false, upb_Message_HasField(msg, optional_oneof_string_field));
EXPECT_EQ(true,
upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_uint32_field));
EXPECT_EQ(false,
upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_string_field));
protobuf_test_messages_proto2_TestAllTypesProto2_set_oneof_string(
msg, upb_StringView_FromString(kTestStr1));
EXPECT_EQ(false, upb_Message_HasField(msg, optional_oneof_uint32_field));
EXPECT_EQ(true, upb_Message_HasField(msg, optional_oneof_string_field));
upb_Message_ClearField(msg, optional_oneof_uint32_field);
EXPECT_EQ(false, upb_Message_HasField(msg, optional_oneof_uint32_field));
EXPECT_EQ(true, upb_Message_HasField(msg, optional_oneof_string_field));
upb_Message_ClearField(msg, optional_oneof_string_field);
EXPECT_EQ(false, upb_Message_HasField(msg, optional_oneof_uint32_field));
EXPECT_EQ(false, upb_Message_HasField(msg, optional_oneof_string_field));
EXPECT_EQ(false,
upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_uint32_field));
EXPECT_EQ(true,
upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_string_field));
upb_Message_ClearField(UPB_UPCAST(msg), optional_oneof_uint32_field);
EXPECT_EQ(false,
upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_uint32_field));
EXPECT_EQ(true,
upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_string_field));
upb_Message_ClearField(UPB_UPCAST(msg), optional_oneof_string_field);
EXPECT_EQ(false,
upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_uint32_field));
EXPECT_EQ(false,
upb_Message_HasField(UPB_UPCAST(msg), optional_oneof_string_field));
upb_Arena_Free(arena);
}
@ -157,10 +173,12 @@ TEST(GeneratedCode, ScalarsProto2) {
EXPECT_EQ(
0, protobuf_test_messages_proto2_TestAllTypesProto2_optional_int32(msg));
EXPECT_EQ(0, upb_Message_GetInt32(msg, optional_int32_field, 0));
upb_Message_SetInt32(msg, optional_int32_field, kTestInt32, nullptr);
EXPECT_EQ(true, upb_Message_HasField(msg, optional_int32_field));
EXPECT_EQ(kTestInt32, upb_Message_GetInt32(msg, optional_int32_field, 0));
EXPECT_EQ(0, upb_Message_GetInt32(UPB_UPCAST(msg), optional_int32_field, 0));
upb_Message_SetInt32(UPB_UPCAST(msg), optional_int32_field, kTestInt32,
nullptr);
EXPECT_EQ(true, upb_Message_HasField(UPB_UPCAST(msg), optional_int32_field));
EXPECT_EQ(kTestInt32,
upb_Message_GetInt32(UPB_UPCAST(msg), optional_int32_field, 0));
EXPECT_EQ(
kTestInt32,
protobuf_test_messages_proto2_TestAllTypesProto2_optional_int32(msg));
@ -170,9 +188,12 @@ TEST(GeneratedCode, ScalarsProto2) {
EXPECT_EQ(
0, protobuf_test_messages_proto2_TestAllTypesProto2_optional_uint32(msg));
EXPECT_EQ(0, upb_Message_GetUInt32(msg, optional_uint32_field, 0));
upb_Message_SetUInt32(msg, optional_uint32_field, kTestUInt32, nullptr);
EXPECT_EQ(kTestUInt32, upb_Message_GetUInt32(msg, optional_uint32_field, 0));
EXPECT_EQ(0,
upb_Message_GetUInt32(UPB_UPCAST(msg), optional_uint32_field, 0));
upb_Message_SetUInt32(UPB_UPCAST(msg), optional_uint32_field, kTestUInt32,
nullptr);
EXPECT_EQ(kTestUInt32,
upb_Message_GetUInt32(UPB_UPCAST(msg), optional_uint32_field, 0));
EXPECT_EQ(
kTestUInt32,
protobuf_test_messages_proto2_TestAllTypesProto2_optional_uint32(msg));
@ -192,18 +213,20 @@ TEST(GeneratedCode, ScalarProto3) {
EXPECT_EQ(
0, protobuf_test_messages_proto3_TestAllTypesProto3_optional_int64(msg));
upb_Message_SetInt64(msg, optional_int64_field, -1, nullptr);
upb_Message_SetInt64(UPB_UPCAST(msg), optional_int64_field, -1, nullptr);
EXPECT_EQ(
-1, protobuf_test_messages_proto3_TestAllTypesProto3_optional_int64(msg));
EXPECT_EQ(-1, upb_Message_GetInt64(msg, optional_int64_field, 0));
EXPECT_EQ(-1, upb_Message_GetInt64(UPB_UPCAST(msg), optional_int64_field, 0));
EXPECT_EQ(
0, protobuf_test_messages_proto3_TestAllTypesProto3_optional_uint64(msg));
upb_Message_SetUInt64(msg, optional_uint64_field, kTestUInt64, nullptr);
upb_Message_SetUInt64(UPB_UPCAST(msg), optional_uint64_field, kTestUInt64,
nullptr);
EXPECT_EQ(
kTestUInt64,
protobuf_test_messages_proto3_TestAllTypesProto3_optional_uint64(msg));
EXPECT_EQ(kTestUInt64, upb_Message_GetUInt64(msg, optional_uint64_field, 0));
EXPECT_EQ(kTestUInt64,
upb_Message_GetUInt64(UPB_UPCAST(msg), optional_uint64_field, 0));
upb_Arena_Free(arena);
}
@ -217,25 +240,27 @@ TEST(GeneratedCode, Strings) {
find_proto2_field(kFieldOptionalString);
// Test default.
EXPECT_EQ(false, upb_Message_HasField(msg, optional_string_field));
EXPECT_EQ(false,
upb_Message_HasField(UPB_UPCAST(msg), optional_string_field));
// Test read after write using C.
protobuf_test_messages_proto2_TestAllTypesProto2_set_optional_string(
msg, upb_StringView_FromString(kTestStr1));
EXPECT_EQ(true, upb_Message_HasField(msg, optional_string_field));
upb_StringView value = upb_Message_GetString(msg, optional_string_field,
upb_StringView{nullptr, 0});
EXPECT_EQ(true, upb_Message_HasField(UPB_UPCAST(msg), optional_string_field));
upb_StringView value = upb_Message_GetString(
UPB_UPCAST(msg), optional_string_field, upb_StringView{nullptr, 0});
std::string read_value = std::string(value.data, value.size);
EXPECT_EQ(kTestStr1, read_value);
// Clear.
upb_Message_ClearField(msg, optional_string_field);
EXPECT_EQ(false, upb_Message_HasField(msg, optional_string_field));
upb_Message_ClearField(UPB_UPCAST(msg), optional_string_field);
EXPECT_EQ(false,
upb_Message_HasField(UPB_UPCAST(msg), optional_string_field));
EXPECT_EQ(
false,
protobuf_test_messages_proto2_TestAllTypesProto2_has_optional_string(
msg));
upb_Message_SetString(msg, optional_string_field,
upb_Message_SetString(UPB_UPCAST(msg), optional_string_field,
upb_StringView_FromString(kTestStr2), nullptr);
EXPECT_EQ(true, upb_Message_HasField(msg, optional_string_field));
EXPECT_EQ(true, upb_Message_HasField(UPB_UPCAST(msg), optional_string_field));
EXPECT_EQ(
true,
protobuf_test_messages_proto2_TestAllTypesProto2_has_optional_string(
@ -256,23 +281,25 @@ TEST(GeneratedCode, SubMessage) {
find_proto2_field(kFieldOptionalNestedMessage);
const upb_Message* test_message =
upb_Message_GetMessage(msg, optional_message_field, nullptr);
upb_Message_GetMessage(UPB_UPCAST(msg), optional_message_field, nullptr);
EXPECT_EQ(nullptr, test_message);
EXPECT_EQ(false, upb_Message_HasField(msg, optional_message_field));
EXPECT_EQ(false,
upb_Message_HasField(UPB_UPCAST(msg), optional_message_field));
// Get mutable using C API.
protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage* nested_message =
protobuf_test_messages_proto2_TestAllTypesProto2_mutable_optional_nested_message(
msg, arena);
EXPECT_EQ(true, nested_message != nullptr);
EXPECT_EQ(true, upb_Message_HasField(msg, optional_message_field));
EXPECT_EQ(true,
upb_Message_HasField(UPB_UPCAST(msg), optional_message_field));
protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage_set_a(
nested_message, 5);
// Read back using mini table API.
const upb_Message* sub_message =
upb_Message_GetMessage(msg, optional_message_field, nullptr);
upb_Message_GetMessage(UPB_UPCAST(msg), optional_message_field, nullptr);
EXPECT_EQ(true, sub_message != nullptr);
const upb_MiniTableField* nested_message_a_field =
@ -281,29 +308,34 @@ TEST(GeneratedCode, SubMessage) {
kFieldOptionalNestedMessageA);
EXPECT_EQ(5, upb_Message_GetInt32(sub_message, nested_message_a_field, 0));
upb_Message_ClearField(msg, optional_message_field);
upb_Message_ClearField(UPB_UPCAST(msg), optional_message_field);
EXPECT_EQ(
nullptr,
protobuf_test_messages_proto2_TestAllTypesProto2_optional_nested_message(
msg));
EXPECT_EQ(false, upb_Message_HasField(msg, optional_message_field));
EXPECT_EQ(false,
upb_Message_HasField(UPB_UPCAST(msg), optional_message_field));
upb_Message* new_nested_message =
protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage_new(arena);
upb_Message* new_nested_message = UPB_UPCAST(
protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage_new(
arena));
upb_Message_SetInt32(new_nested_message, nested_message_a_field, 123,
nullptr);
upb_Message_SetMessage(
msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
UPB_UPCAST(msg),
&protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
optional_message_field, new_nested_message);
upb_Message* mutable_message = upb_Message_GetOrCreateMutableMessage(
msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
UPB_UPCAST(msg),
&protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
optional_message_field, arena);
EXPECT_EQ(
true,
protobuf_test_messages_proto2_TestAllTypesProto2_optional_nested_message(
msg) != nullptr);
EXPECT_EQ(true, upb_Message_HasField(msg, optional_message_field));
EXPECT_EQ(true,
upb_Message_HasField(UPB_UPCAST(msg), optional_message_field));
EXPECT_EQ(123,
upb_Message_GetInt32(mutable_message, nested_message_a_field, 0));
@ -325,7 +357,8 @@ TEST(GeneratedCode, RepeatedScalar) {
// Test Get/Set Array values, validate with C API.
EXPECT_EQ(0, len);
EXPECT_EQ(nullptr, arr);
EXPECT_EQ(nullptr, upb_Message_GetArray(msg, repeated_int32_field));
EXPECT_EQ(nullptr,
upb_Message_GetArray(UPB_UPCAST(msg), repeated_int32_field));
protobuf_test_messages_proto2_TestAllTypesProto2_resize_repeated_int32(
msg, 10, arena);
int32_t* mutable_values =
@ -333,13 +366,13 @@ TEST(GeneratedCode, RepeatedScalar) {
msg, &len);
mutable_values[5] = 123;
const upb_Array* readonly_arr =
upb_Message_GetArray(msg, repeated_int32_field);
upb_Message_GetArray(UPB_UPCAST(msg), repeated_int32_field);
EXPECT_EQ(123, upb_Array_Get(readonly_arr, 5).int32_val);
upb_MessageValue new_value;
new_value.int32_val = 567;
upb_Array* mutable_array =
upb_Message_GetMutableArray(msg, repeated_int32_field);
upb_Message_GetMutableArray(UPB_UPCAST(msg), repeated_int32_field);
upb_Array_Set(mutable_array, 5, new_value);
EXPECT_EQ(new_value.int32_val,
protobuf_test_messages_proto2_TestAllTypesProto2_repeated_int32(
@ -370,10 +403,12 @@ TEST(GeneratedCode, GetMutableMessage) {
const upb_MiniTableField* optional_message_field =
find_proto2_field(kFieldOptionalNestedMessage);
upb_Message* msg1 = upb_Message_GetOrCreateMutableMessage(
msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
UPB_UPCAST(msg),
&protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
optional_message_field, arena);
upb_Message* msg2 = upb_Message_GetOrCreateMutableMessage(
msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
UPB_UPCAST(msg),
&protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
optional_message_field, arena);
// Verify that newly constructed sub message is stored in msg.
EXPECT_EQ(msg1, msg2);

View File

@ -23,6 +23,7 @@
#include "google/protobuf/test_messages_proto2.upb.h"
#include "google/protobuf/test_messages_proto2.upb_minitable.h"
#include "upb/base/string_view.h"
#include "upb/base/upcast.h"
#include "upb/mem/arena.h"
#include "upb/message/accessors.h"
#include "upb/message/internal/message.h"
@ -61,31 +62,34 @@ TEST(GeneratedCode, DeepCloneMessageScalarAndString) {
find_proto2_field(kFieldOptionalInt32);
const upb_MiniTableField* optional_string_field =
find_proto2_field(kFieldOptionalString);
upb_Message_SetInt32(msg, optional_int32_field, kTestInt32, nullptr);
upb_Message_SetInt32(UPB_UPCAST(msg), optional_int32_field, kTestInt32,
nullptr);
char* string_in_arena =
(char*)upb_Arena_Malloc(source_arena, sizeof(kTestStr1));
memcpy(string_in_arena, kTestStr1, sizeof(kTestStr1));
upb_Message_SetString(
msg, optional_string_field,
UPB_UPCAST(msg), optional_string_field,
upb_StringView_FromDataAndSize(string_in_arena, sizeof(kTestStr1) - 1),
source_arena);
upb_Arena* arena = upb_Arena_New();
protobuf_test_messages_proto2_TestAllTypesProto2* clone =
(protobuf_test_messages_proto2_TestAllTypesProto2*)upb_Message_DeepClone(
msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
UPB_UPCAST(msg),
&protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
arena);
// After cloning overwrite values and destroy source arena for MSAN.
memset(string_in_arena, 0, sizeof(kTestStr1));
upb_Arena_Free(source_arena);
EXPECT_TRUE(upb_Message_HasField(clone, optional_int32_field));
EXPECT_EQ(upb_Message_GetInt32(clone, optional_int32_field, 0), kTestInt32);
EXPECT_TRUE(upb_Message_HasField(clone, optional_string_field));
EXPECT_EQ(upb_Message_GetString(clone, optional_string_field,
EXPECT_TRUE(upb_Message_HasField(UPB_UPCAST(clone), optional_int32_field));
EXPECT_EQ(upb_Message_GetInt32(UPB_UPCAST(clone), optional_int32_field, 0),
kTestInt32);
EXPECT_TRUE(upb_Message_HasField(UPB_UPCAST(clone), optional_string_field));
EXPECT_EQ(upb_Message_GetString(UPB_UPCAST(clone), optional_string_field,
upb_StringView_FromDataAndSize(nullptr, 0))
.size,
sizeof(kTestStr1) - 1);
EXPECT_TRUE(upb_StringView_IsEqual(
upb_Message_GetString(clone, optional_string_field,
upb_Message_GetString(UPB_UPCAST(clone), optional_string_field,
upb_StringView_FromDataAndSize(nullptr, 0)),
upb_StringView_FromString(kTestStr1)));
upb_Arena_Free(arena);
@ -103,22 +107,25 @@ TEST(GeneratedCode, DeepCloneMessageSubMessage) {
protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage_set_a(
nested, kTestNestedInt32);
upb_Message_SetMessage(
msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
nested_message_field, nested);
UPB_UPCAST(msg),
&protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
nested_message_field, UPB_UPCAST(nested));
upb_Arena* arena = upb_Arena_New();
protobuf_test_messages_proto2_TestAllTypesProto2* clone =
(protobuf_test_messages_proto2_TestAllTypesProto2*)upb_Message_DeepClone(
msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
UPB_UPCAST(msg),
&protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
arena);
// After cloning overwrite values and destroy source arena for MSAN.
protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage_set_a(nested,
0);
upb_Arena_Free(source_arena);
EXPECT_TRUE(upb_Message_HasField(clone, nested_message_field));
EXPECT_TRUE(upb_Message_HasField(UPB_UPCAST(clone), nested_message_field));
protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage*
cloned_nested =
(protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage*)
upb_Message_GetMessage(clone, nested_message_field, nullptr);
upb_Message_GetMessage(UPB_UPCAST(clone), nested_message_field,
nullptr);
EXPECT_EQ(protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage_a(
cloned_nested),
kTestNestedInt32);
@ -138,7 +145,8 @@ TEST(GeneratedCode, DeepCloneMessageArrayField) {
upb_Arena* arena = upb_Arena_New();
protobuf_test_messages_proto2_TestAllTypesProto2* clone =
(protobuf_test_messages_proto2_TestAllTypesProto2*)upb_Message_DeepClone(
msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
UPB_UPCAST(msg),
&protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
arena);
protobuf_test_messages_proto2_TestAllTypesProto2_clear_repeated_sint32(msg);
upb_Arena_Free(source_arena);
@ -177,7 +185,8 @@ TEST(GeneratedCode, DeepCloneMessageMapField) {
upb_Arena* arena = upb_Arena_New();
protobuf_test_messages_proto2_TestAllTypesProto2* clone =
(protobuf_test_messages_proto2_TestAllTypesProto2*)upb_Message_DeepClone(
msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
UPB_UPCAST(msg),
&protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
arena);
protobuf_test_messages_proto2_TestAllTypesProto2_NestedMessage_set_a(nested,
0);
@ -253,7 +262,7 @@ TEST(GeneratedCode, DeepCloneMessageExtensions) {
protobuf_test_messages_proto2_TestAllTypesProto2_MessageSetCorrect* clone =
(protobuf_test_messages_proto2_TestAllTypesProto2_MessageSetCorrect*)
upb_Message_DeepClone(
msg,
UPB_UPCAST(msg),
&protobuf_0test_0messages__proto2__TestAllTypesProto2__MessageSetCorrect_msg_init,
arena);
@ -298,18 +307,20 @@ TEST(GeneratedCode, DeepCloneMessageWithUnknowns) {
char* data;
upb_Arena* encode_arena = upb_Arena_New();
upb_EncodeStatus status = upb_Encode(
unknown_source,
UPB_UPCAST(unknown_source),
&protobuf_0test_0messages__proto2__UnknownToTestAllTypes_msg_init,
kUpb_EncodeOption_CheckRequired, encode_arena, &data, &len);
ASSERT_EQ(status, kUpb_EncodeStatus_Ok);
std::string unknown_data(data, len);
// Add unknown data.
UPB_PRIVATE(_upb_Message_AddUnknown)(msg, data, len, source_arena);
UPB_PRIVATE(_upb_Message_AddUnknown)
(UPB_UPCAST(msg), data, len, source_arena);
// Create clone.
upb_Arena* clone_arena = upb_Arena_New();
protobuf_test_messages_proto2_TestAllTypesProto2* clone =
(protobuf_test_messages_proto2_TestAllTypesProto2*)upb_Message_DeepClone(
msg, &protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
UPB_UPCAST(msg),
&protobuf_0test_0messages__proto2__TestAllTypesProto2_msg_init,
clone_arena);
upb_Arena_Free(source_arena);
upb_Arena_Free(unknown_arena);
@ -317,7 +328,7 @@ TEST(GeneratedCode, DeepCloneMessageWithUnknowns) {
// Read unknown data from clone and verify.
size_t cloned_length;
const char* cloned_unknown_data =
upb_Message_GetUnknown(clone, &cloned_length);
upb_Message_GetUnknown(UPB_UPCAST(clone), &cloned_length);
EXPECT_EQ(cloned_length, len);
EXPECT_EQ(memcmp(cloned_unknown_data, unknown_data.c_str(), cloned_length),
0);

View File

@ -23,6 +23,7 @@
#include "upb/base/descriptor_constants.h"
#include "upb/base/status.h"
#include "upb/base/string_view.h"
#include "upb/base/upcast.h"
#include "upb/mem/arena.h"
#include "upb/mem/arena.hpp"
#include "upb/message/accessors.h"
@ -69,13 +70,13 @@ TEST(GeneratedCode, FindUnknown) {
arena);
upb_FindUnknownRet result = upb_Message_FindUnknown(
base_msg,
UPB_UPCAST(base_msg),
upb_MiniTableExtension_Number(&upb_test_ModelExtension1_model_ext_ext),
0);
EXPECT_EQ(kUpb_FindUnknown_Ok, result.status);
result = upb_Message_FindUnknown(
base_msg,
UPB_UPCAST(base_msg),
upb_MiniTableExtension_Number(&upb_test_ModelExtension2_model_ext_ext),
0);
EXPECT_EQ(kUpb_FindUnknown_NotPresent, result.status);
@ -129,7 +130,8 @@ TEST(GeneratedCode, Extensions) {
// Test known GetExtension 1
promote_status = upb_MiniTable_GetOrPromoteExtension(
msg, &upb_test_ModelExtension1_model_ext_ext, 0, arena, &upb_ext2);
UPB_UPCAST(msg), &upb_test_ModelExtension1_model_ext_ext, 0, arena,
&upb_ext2);
ext1 = (upb_test_ModelExtension1*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_TRUE(upb_StringView_IsEqual(upb_StringView_FromString("World"),
@ -137,35 +139,40 @@ TEST(GeneratedCode, Extensions) {
// Test known GetExtension 2
promote_status = upb_MiniTable_GetOrPromoteExtension(
msg, &upb_test_ModelExtension2_model_ext_ext, 0, arena, &upb_ext2);
UPB_UPCAST(msg), &upb_test_ModelExtension2_model_ext_ext, 0, arena,
&upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(5, upb_test_ModelExtension2_i(ext2));
// Test known GetExtension 3
promote_status = upb_MiniTable_GetOrPromoteExtension(
msg, &upb_test_ModelExtension2_model_ext_2_ext, 0, arena, &upb_ext2);
UPB_UPCAST(msg), &upb_test_ModelExtension2_model_ext_2_ext, 0, arena,
&upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(6, upb_test_ModelExtension2_i(ext2));
// Test known GetExtension 4
promote_status = upb_MiniTable_GetOrPromoteExtension(
msg, &upb_test_ModelExtension2_model_ext_3_ext, 0, arena, &upb_ext2);
UPB_UPCAST(msg), &upb_test_ModelExtension2_model_ext_3_ext, 0, arena,
&upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(7, upb_test_ModelExtension2_i(ext2));
// Test known GetExtension 5
promote_status = upb_MiniTable_GetOrPromoteExtension(
msg, &upb_test_ModelExtension2_model_ext_4_ext, 0, arena, &upb_ext2);
UPB_UPCAST(msg), &upb_test_ModelExtension2_model_ext_4_ext, 0, arena,
&upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(8, upb_test_ModelExtension2_i(ext2));
// Test known GetExtension 6
promote_status = upb_MiniTable_GetOrPromoteExtension(
msg, &upb_test_ModelExtension2_model_ext_5_ext, 0, arena, &upb_ext2);
UPB_UPCAST(msg), &upb_test_ModelExtension2_model_ext_5_ext, 0, arena,
&upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(9, upb_test_ModelExtension2_i(ext2));
@ -176,13 +183,14 @@ TEST(GeneratedCode, Extensions) {
// Get unknown extension bytes before promotion.
size_t start_len;
upb_Message_GetUnknown(base_msg, &start_len);
upb_Message_GetUnknown(UPB_UPCAST(base_msg), &start_len);
EXPECT_GT(start_len, 0);
EXPECT_EQ(0, upb_Message_ExtensionCount(base_msg));
EXPECT_EQ(0, upb_Message_ExtensionCount(UPB_UPCAST(base_msg)));
// Test unknown GetExtension.
promote_status = upb_MiniTable_GetOrPromoteExtension(
base_msg, &upb_test_ModelExtension1_model_ext_ext, 0, arena, &upb_ext2);
UPB_UPCAST(base_msg), &upb_test_ModelExtension1_model_ext_ext, 0, arena,
&upb_ext2);
ext1 = (upb_test_ModelExtension1*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_TRUE(upb_StringView_IsEqual(upb_StringView_FromString("World"),
@ -190,43 +198,48 @@ TEST(GeneratedCode, Extensions) {
// Test unknown GetExtension.
promote_status = upb_MiniTable_GetOrPromoteExtension(
base_msg, &upb_test_ModelExtension2_model_ext_ext, 0, arena, &upb_ext2);
UPB_UPCAST(base_msg), &upb_test_ModelExtension2_model_ext_ext, 0, arena,
&upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(5, upb_test_ModelExtension2_i(ext2));
// Test unknown GetExtension.
promote_status = upb_MiniTable_GetOrPromoteExtension(
base_msg, &upb_test_ModelExtension2_model_ext_2_ext, 0, arena, &upb_ext2);
UPB_UPCAST(base_msg), &upb_test_ModelExtension2_model_ext_2_ext, 0, arena,
&upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(6, upb_test_ModelExtension2_i(ext2));
// Test unknown GetExtension.
promote_status = upb_MiniTable_GetOrPromoteExtension(
base_msg, &upb_test_ModelExtension2_model_ext_3_ext, 0, arena, &upb_ext2);
UPB_UPCAST(base_msg), &upb_test_ModelExtension2_model_ext_3_ext, 0, arena,
&upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(7, upb_test_ModelExtension2_i(ext2));
// Test unknown GetExtension.
promote_status = upb_MiniTable_GetOrPromoteExtension(
base_msg, &upb_test_ModelExtension2_model_ext_4_ext, 0, arena, &upb_ext2);
UPB_UPCAST(base_msg), &upb_test_ModelExtension2_model_ext_4_ext, 0, arena,
&upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(8, upb_test_ModelExtension2_i(ext2));
// Test unknown GetExtension.
promote_status = upb_MiniTable_GetOrPromoteExtension(
base_msg, &upb_test_ModelExtension2_model_ext_5_ext, 0, arena, &upb_ext2);
UPB_UPCAST(base_msg), &upb_test_ModelExtension2_model_ext_5_ext, 0, arena,
&upb_ext2);
ext2 = (upb_test_ModelExtension2*)upb_ext2->data.ptr;
EXPECT_EQ(kUpb_GetExtension_Ok, promote_status);
EXPECT_EQ(9, upb_test_ModelExtension2_i(ext2));
size_t end_len;
upb_Message_GetUnknown(base_msg, &end_len);
upb_Message_GetUnknown(UPB_UPCAST(base_msg), &end_len);
EXPECT_LT(end_len, start_len);
EXPECT_EQ(6, upb_Message_ExtensionCount(base_msg));
EXPECT_EQ(6, upb_Message_ExtensionCount(UPB_UPCAST(base_msg)));
upb_Arena_Free(arena);
}
@ -377,7 +390,8 @@ TEST(GeneratedCode, PromoteUnknownMessage) {
arena.ptr(), (upb_Message**)&promoted);
EXPECT_EQ(promote_result, kUpb_DecodeStatus_Ok);
EXPECT_NE(nullptr, promoted);
EXPECT_EQ(promoted, upb_Message_GetMessage(msg, submsg_field, nullptr));
EXPECT_EQ(UPB_UPCAST(promoted),
upb_Message_GetMessage(msg, submsg_field, nullptr));
EXPECT_EQ(upb_test_ModelWithExtensions_random_int32(promoted), 12);
}
@ -425,7 +439,8 @@ TEST(GeneratedCode, ReparseUnlinked) {
arena.ptr(), (upb_Message**)&promoted);
EXPECT_EQ(promote_result, kUpb_DecodeStatus_Ok);
EXPECT_NE(nullptr, promoted);
EXPECT_EQ(promoted, upb_Message_GetMessage(msg, submsg_field, nullptr));
EXPECT_EQ(UPB_UPCAST(promoted),
upb_Message_GetMessage(msg, submsg_field, nullptr));
// The repeated field should have two entries for the two parses.
size_t repeated_size;
@ -478,7 +493,8 @@ TEST(GeneratedCode, PromoteInParser) {
nullptr);
EXPECT_NE(nullptr, promoted);
EXPECT_EQ(promoted, upb_Message_GetMessage(msg, submsg_field, nullptr));
EXPECT_EQ(UPB_UPCAST(promoted),
upb_Message_GetMessage(msg, submsg_field, nullptr));
// The repeated field should have two entries for the two parses.
size_t repeated_size;
@ -624,15 +640,15 @@ TEST(GeneratedCode, PromoteUnknownToMap) {
upb_MessageValue val;
key.int32_val = 111;
EXPECT_TRUE(upb_Map_Get(map, key, &val));
EXPECT_EQ(123,
upb_test_ModelWithExtensions_random_int32(
static_cast<const upb_test_ModelWithExtensions*>(val.msg_val)));
EXPECT_EQ(123, upb_test_ModelWithExtensions_random_int32(
static_cast<const upb_test_ModelWithExtensions*>(
(void*)(val.msg_val))));
key.int32_val = 222;
EXPECT_TRUE(upb_Map_Get(map, key, &val));
EXPECT_EQ(456,
upb_test_ModelWithExtensions_random_int32(
static_cast<const upb_test_ModelWithExtensions*>(val.msg_val)));
EXPECT_EQ(456, upb_test_ModelWithExtensions_random_int32(
static_cast<const upb_test_ModelWithExtensions*>(
(void*)(val.msg_val))));
}
} // namespace

View File

@ -16,6 +16,7 @@
#include "google/protobuf/test_messages_proto3.upb.h"
#include "upb/base/status.hpp"
#include "upb/base/string_view.h"
#include "upb/base/upcast.h"
#include "upb/json/decode.h"
#include "upb/json/encode.h"
#include "upb/mem/arena.h"
@ -72,8 +73,9 @@ TEST(MessageTest, Extensions) {
}
)json";
upb::Status status;
EXPECT_TRUE(upb_JsonDecode(json.data(), json.size(), ext_msg, m.ptr(),
defpool.ptr(), 0, arena.ptr(), status.ptr()))
EXPECT_TRUE(upb_JsonDecode(json.data(), json.size(), UPB_UPCAST(ext_msg),
m.ptr(), defpool.ptr(), 0, arena.ptr(),
status.ptr()))
<< status.error_message();
VerifyMessage(ext_msg);
@ -91,14 +93,14 @@ TEST(MessageTest, Extensions) {
VerifyMessage(ext_msg2);
// Test round-trip through JSON format.
size_t json_size = upb_JsonEncode(ext_msg, m.ptr(), defpool.ptr(), 0, nullptr,
0, status.ptr());
size_t json_size = upb_JsonEncode(UPB_UPCAST(ext_msg), m.ptr(), defpool.ptr(),
0, nullptr, 0, status.ptr());
char* json_buf =
static_cast<char*>(upb_Arena_Malloc(arena.ptr(), json_size + 1));
upb_JsonEncode(ext_msg, m.ptr(), defpool.ptr(), 0, json_buf, json_size + 1,
status.ptr());
upb_JsonEncode(UPB_UPCAST(ext_msg), m.ptr(), defpool.ptr(), 0, json_buf,
json_size + 1, status.ptr());
upb_test_TestExtensions* ext_msg3 = upb_test_TestExtensions_new(arena.ptr());
EXPECT_TRUE(upb_JsonDecode(json_buf, json_size, ext_msg3, m.ptr(),
EXPECT_TRUE(upb_JsonDecode(json_buf, json_size, UPB_UPCAST(ext_msg3), m.ptr(),
defpool.ptr(), 0, arena.ptr(), status.ptr()))
<< status.error_message();
VerifyMessage(ext_msg3);
@ -132,8 +134,9 @@ TEST(MessageTest, MessageSet) {
}
)json";
upb::Status status;
EXPECT_TRUE(upb_JsonDecode(json.data(), json.size(), ext_msg, m.ptr(),
defpool.ptr(), 0, arena.ptr(), status.ptr()))
EXPECT_TRUE(upb_JsonDecode(json.data(), json.size(), UPB_UPCAST(ext_msg),
m.ptr(), defpool.ptr(), 0, arena.ptr(),
status.ptr()))
<< status.error_message();
VerifyMessageSet(ext_msg);
@ -151,14 +154,14 @@ TEST(MessageTest, MessageSet) {
VerifyMessageSet(ext_msg2);
// Test round-trip through JSON format.
size_t json_size = upb_JsonEncode(ext_msg, m.ptr(), defpool.ptr(), 0, nullptr,
0, status.ptr());
size_t json_size = upb_JsonEncode(UPB_UPCAST(ext_msg), m.ptr(), defpool.ptr(),
0, nullptr, 0, status.ptr());
char* json_buf =
static_cast<char*>(upb_Arena_Malloc(arena.ptr(), json_size + 1));
upb_JsonEncode(ext_msg, m.ptr(), defpool.ptr(), 0, json_buf, json_size + 1,
status.ptr());
upb_JsonEncode(UPB_UPCAST(ext_msg), m.ptr(), defpool.ptr(), 0, json_buf,
json_size + 1, status.ptr());
upb_test_TestMessageSet* ext_msg3 = upb_test_TestMessageSet_new(arena.ptr());
EXPECT_TRUE(upb_JsonDecode(json_buf, json_size, ext_msg3, m.ptr(),
EXPECT_TRUE(upb_JsonDecode(json_buf, json_size, UPB_UPCAST(ext_msg3), m.ptr(),
defpool.ptr(), 0, arena.ptr(), status.ptr()))
<< status.error_message();
VerifyMessageSet(ext_msg3);
@ -311,10 +314,10 @@ TEST(MessageTest, DecodeRequiredFieldsTopLevelMessage) {
EXPECT_NE(nullptr, test_msg);
// Fails, because required fields are missing.
EXPECT_EQ(
kUpb_DecodeStatus_MissingRequired,
upb_Decode(nullptr, 0, test_msg, &upb_0test__TestRequiredFields_msg_init,
nullptr, kUpb_DecodeOption_CheckRequired, arena.ptr()));
EXPECT_EQ(kUpb_DecodeStatus_MissingRequired,
upb_Decode(nullptr, 0, UPB_UPCAST(test_msg),
&upb_0test__TestRequiredFields_msg_init, nullptr,
kUpb_DecodeOption_CheckRequired, arena.ptr()));
upb_test_TestRequiredFields_set_required_int32(test_msg, 1);
size_t size;
@ -326,7 +329,7 @@ TEST(MessageTest, DecodeRequiredFieldsTopLevelMessage) {
// Fails, but the code path is slightly different because the serialized
// payload is not empty.
EXPECT_EQ(kUpb_DecodeStatus_MissingRequired,
upb_Decode(serialized, size, test_msg,
upb_Decode(serialized, size, UPB_UPCAST(test_msg),
&upb_0test__TestRequiredFields_msg_init, nullptr,
kUpb_DecodeOption_CheckRequired, arena.ptr()));
@ -336,10 +339,10 @@ TEST(MessageTest, DecodeRequiredFieldsTopLevelMessage) {
upb_test_TestRequiredFields_set_required_message(test_msg, empty_msg);
// Succeeds, because required fields are present (though not in the input).
EXPECT_EQ(
kUpb_DecodeStatus_Ok,
upb_Decode(nullptr, 0, test_msg, &upb_0test__TestRequiredFields_msg_init,
nullptr, kUpb_DecodeOption_CheckRequired, arena.ptr()));
EXPECT_EQ(kUpb_DecodeStatus_Ok,
upb_Decode(nullptr, 0, UPB_UPCAST(test_msg),
&upb_0test__TestRequiredFields_msg_init, nullptr,
kUpb_DecodeOption_CheckRequired, arena.ptr()));
// Serialize a complete payload.
serialized =
@ -356,7 +359,7 @@ TEST(MessageTest, DecodeRequiredFieldsTopLevelMessage) {
upb_test_TestRequiredFields_set_optional_message(
test_msg2, upb_test_TestRequiredFields_new(arena.ptr()));
EXPECT_EQ(kUpb_DecodeStatus_Ok,
upb_Decode(serialized, size, test_msg2,
upb_Decode(serialized, size, UPB_UPCAST(test_msg2),
&upb_0test__TestRequiredFields_msg_init, nullptr,
kUpb_DecodeOption_CheckRequired, arena.ptr()));
}
@ -450,7 +453,7 @@ TEST(MessageTest, MaxRequiredFields) {
for (int i = 1; i <= 61; i++) {
upb::FieldDefPtr f = m.FindFieldByNumber(i);
ASSERT_TRUE(f);
upb_Message_SetFieldByDef(test_msg, f.ptr(), val, arena.ptr());
upb_Message_SetFieldByDef(UPB_UPCAST(test_msg), f.ptr(), val, arena.ptr());
}
// Fails, field 63 still isn't set.
@ -461,7 +464,7 @@ TEST(MessageTest, MaxRequiredFields) {
// Succeeds, all required fields are set.
upb::FieldDefPtr f = m.FindFieldByNumber(62);
ASSERT_TRUE(f);
upb_Message_SetFieldByDef(test_msg, f.ptr(), val, arena.ptr());
upb_Message_SetFieldByDef(UPB_UPCAST(test_msg), f.ptr(), val, arena.ptr());
serialized = upb_test_TestMaxRequiredFields_serialize_ex(
test_msg, kUpb_EncodeOption_CheckRequired, arena.ptr(), &size);
ASSERT_TRUE(serialized != nullptr);

View File

@ -10,6 +10,8 @@
// This typedef is in a leaf header to resolve a circular dependency between
// messages and mini tables.
typedef void upb_Message;
typedef struct upb_Message {
int unused; // Placeholder cuz Windows won't compile an empty struct.
} upb_Message;
#endif /* UPB_MESSAGE_TYPES_H_ */

View File

@ -9,6 +9,7 @@
#include <gtest/gtest.h>
#include "upb/base/string_view.h"
#include "upb/base/upcast.h"
#include "upb/mem/arena.h"
#include "upb/mem/arena.hpp"
#include "upb/message/utf8_test.upb.h"
@ -46,9 +47,9 @@ TEST(Utf8Test, Proto3FieldValidates) {
upb_test_TestUtf8Proto3String* msg =
upb_test_TestUtf8Proto3String_new(arena.ptr());
upb_DecodeStatus status =
upb_Decode(data, size, msg, &upb_0test__TestUtf8Proto3String_msg_init,
nullptr, 0, arena.ptr());
upb_DecodeStatus status = upb_Decode(
data, size, UPB_UPCAST(msg), &upb_0test__TestUtf8Proto3String_msg_init,
nullptr, 0, arena.ptr());
// Parse fails, because proto3 string fields validate UTF-8.
ASSERT_EQ(kUpb_DecodeStatus_BadUtf8, status);
@ -62,9 +63,10 @@ TEST(Utf8Test, RepeatedProto3FieldValidates) {
upb_test_TestUtf8RepeatedProto3String* msg =
upb_test_TestUtf8RepeatedProto3String_new(arena.ptr());
upb_DecodeStatus status = upb_Decode(
data, size, msg, &upb_0test__TestUtf8RepeatedProto3String_msg_init,
nullptr, 0, arena.ptr());
upb_DecodeStatus status =
upb_Decode(data, size, UPB_UPCAST(msg),
&upb_0test__TestUtf8RepeatedProto3String_msg_init, nullptr, 0,
arena.ptr());
// Parse fails, because proto3 string fields validate UTF-8.
ASSERT_EQ(kUpb_DecodeStatus_BadUtf8, status);
@ -80,8 +82,8 @@ TEST(Utf8Test, RepeatedProto3FieldValidates) {
// upb_test_TestUtf8Proto3StringMixed_new(arena.ptr());
//
// upb_DecodeStatus status = upb_Decode(
// data, size, msg, &upb_0test__TestUtf8Proto3StringMixed_msg_init, nullptr,
// 0, arena.ptr());
// data, size, UPB_UPCAST(msg),
// &upb_0test__TestUtf8Proto3StringMixed_msg_init, nullptr, 0, arena.ptr());
//
// // Parse fails, because proto3 string fields validate UTF-8.
// ASSERT_EQ(kUpb_DecodeStatus_BadUtf8, status);

View File

@ -146,6 +146,7 @@ bootstrap_cc_library(
"//upb:mini_descriptor_internal",
"//upb:mini_table",
"//upb:port",
"//upb:wire",
],
)
@ -178,6 +179,7 @@ cc_test(
deps = [
":descriptor_upb_proto",
"@com_google_googletest//:gtest_main",
"//upb:base",
"//upb:hash",
"//upb:mem",
"//upb:port",

View File

@ -16,6 +16,7 @@
#include "upb/base/descriptor_constants.h"
#include "upb/base/string_view.h"
#include "upb/base/upcast.h"
#include "upb/mem/arena.h"
#include "upb/message/accessors.h"
#include "upb/message/value.h"
@ -607,7 +608,8 @@ static void _upb_FieldDef_Create(upb_DefBuilder* ctx, const char* prefix,
bool implicit = false;
if (syntax != kUpb_Syntax_Editions) {
upb_Message_Clear(ctx->legacy_features, UPB_DESC_MINITABLE(FeatureSet));
upb_Message_Clear(UPB_UPCAST(ctx->legacy_features),
UPB_DESC_MINITABLE(FeatureSet));
if (_upb_FieldDef_InferLegacyFeatures(ctx, f, field_proto, f->opts, syntax,
ctx->legacy_features)) {
implicit = true;

View File

@ -10,6 +10,7 @@
#include <string.h>
#include "upb/base/internal/log2.h"
#include "upb/base/upcast.h"
#include "upb/mem/alloc.h"
#include "upb/message/copy.h"
#include "upb/reflection/def_pool.h"
@ -17,6 +18,7 @@
#include "upb/reflection/field_def.h"
#include "upb/reflection/file_def.h"
#include "upb/reflection/internal/strdup2.h"
#include "upb/wire/decode.h"
// Must be last.
#include "upb/port/def.inc"
@ -368,8 +370,8 @@ bool _upb_DefBuilder_GetOrCreateFeatureSet(upb_DefBuilder* ctx,
return false;
}
*set =
upb_Message_DeepClone(parent, UPB_DESC_MINITABLE(FeatureSet), ctx->arena);
*set = (UPB_DESC(FeatureSet*))upb_Message_DeepClone(
UPB_UPCAST(parent), UPB_DESC_MINITABLE(FeatureSet), ctx->arena);
if (!*set) _upb_DefBuilder_OomErr(ctx);
v = upb_value_ptr(*set);
@ -406,7 +408,7 @@ const UPB_DESC(FeatureSet*)
}
upb_DecodeStatus dec_status =
upb_Decode(child_bytes, child_size, resolved,
upb_Decode(child_bytes, child_size, UPB_UPCAST(resolved),
UPB_DESC_MINITABLE(FeatureSet), NULL, 0, ctx->arena);
if (dec_status != kUpb_DecodeStatus_Ok) _upb_DefBuilder_OomErr(ctx);

File diff suppressed because it is too large Load Diff

View File

@ -208,6 +208,7 @@ cc_test(
":timestamp_upb_proto",
":timestamp_upb_proto_reflection",
"@com_google_googletest//:gtest_main",
"//upb:base",
"//upb:json",
"//upb:port",
"//upb:reflection",

View File

@ -17,6 +17,7 @@
#include "google/protobuf/timestamp.upb.h"
#include "google/protobuf/timestamp.upbdefs.h"
#include <gtest/gtest.h>
#include "upb/base/upcast.h"
#include "upb/json/decode.h"
#include "upb/json/encode.h"
#include "upb/reflection/def.h"
@ -57,7 +58,8 @@ TEST(Cpp, Default) {
upb::Arena arena;
upb::MessageDefPtr md(upb_test_TestMessage_getmsgdef(defpool.ptr()));
upb_test_TestMessage* msg = upb_test_TestMessage_new(arena.ptr());
size_t size = upb_JsonEncode(msg, md.ptr(), nullptr, 0, nullptr, 0, nullptr);
size_t size = upb_JsonEncode(UPB_UPCAST(msg), md.ptr(), nullptr, 0, nullptr,
0, nullptr);
EXPECT_EQ(2, size); // "{}"
}
@ -95,10 +97,10 @@ TEST(Cpp, TimestampEncoder) {
google_protobuf_Timestamp_set_seconds(timestamp_upb, timestamp);
char json[128];
size_t size = upb_JsonEncode(timestamp_upb, md.ptr(), nullptr, 0, json,
sizeof(json), nullptr);
bool result = upb_JsonDecode(json, size, timestamp_upb_decoded, md.ptr(),
nullptr, 0, arena.ptr(), nullptr);
size_t size = upb_JsonEncode(UPB_UPCAST(timestamp_upb), md.ptr(), nullptr,
0, json, sizeof(json), nullptr);
bool result = upb_JsonDecode(json, size, UPB_UPCAST(timestamp_upb_decoded),
md.ptr(), nullptr, 0, arena.ptr(), nullptr);
const int64_t timestamp_decoded =
google_protobuf_Timestamp_seconds(timestamp_upb_decoded);

View File

@ -75,9 +75,9 @@ MATCHER_P2(EqualsUpbProto, proto, msgdef_func,
AddMessageDescriptor(msgdef, &pool);
EXPECT_TRUE(desc != nullptr);
std::unique_ptr<google::protobuf::Message> m1(
ToProto(proto, msgdef.ptr(), desc, &factory));
ToProto(UPB_UPCAST(proto), msgdef.ptr(), desc, &factory));
std::unique_ptr<google::protobuf::Message> m2(
ToProto(arg, msgdef.ptr(), desc, &factory));
ToProto((upb_Message*)arg, msgdef.ptr(), desc, &factory));
std::string differences;
google::protobuf::util::MessageDifferencer differencer;
differencer.ReportDifferencesToString(&differences);

View File

@ -12,6 +12,7 @@
#include <gtest/gtest.h>
#include "absl/strings/string_view.h"
#include "upb/base/status.hpp"
#include "upb/base/upcast.h"
#include "upb/json/decode.h"
#include "upb/mem/arena.h"
#include "upb/mem/arena.hpp"
@ -53,13 +54,14 @@ class RequiredFieldsTest : public testing::Test {
auto* test_msg = T::NewMessage(arena.ptr());
upb::MessageDefPtr m = T::GetMessageDef(defpool.ptr());
upb::Status status;
EXPECT_TRUE(upb_JsonDecode(json.data(), json.size(), test_msg, m.ptr(),
defpool.ptr(), 0, arena.ptr(), status.ptr()))
EXPECT_TRUE(upb_JsonDecode(json.data(), json.size(), UPB_UPCAST(test_msg),
m.ptr(), defpool.ptr(), 0, arena.ptr(),
status.ptr()))
<< status.error_message();
upb_FieldPathEntry* entries = nullptr;
EXPECT_EQ(
!missing.empty(),
upb_util_HasUnsetRequired(test_msg, m.ptr(), defpool.ptr(), &entries));
EXPECT_EQ(!missing.empty(),
upb_util_HasUnsetRequired(UPB_UPCAST(test_msg), m.ptr(),
defpool.ptr(), &entries));
if (entries) {
EXPECT_EQ(missing, PathsToText(entries));
free(entries);
@ -67,8 +69,9 @@ class RequiredFieldsTest : public testing::Test {
// Verify that we can pass a NULL pointer to entries when we don't care
// about them.
EXPECT_EQ(!missing.empty(), upb_util_HasUnsetRequired(
test_msg, m.ptr(), defpool.ptr(), nullptr));
EXPECT_EQ(!missing.empty(),
upb_util_HasUnsetRequired(UPB_UPCAST(test_msg), m.ptr(),
defpool.ptr(), nullptr));
}
};

View File

@ -647,18 +647,18 @@ static const char* _upb_Decoder_DecodeToMap(upb_Decoder* d, const char* ptr,
ent.data.v.val = upb_value_uintptr(msg);
}
ptr =
_upb_Decoder_DecodeSubMessage(d, ptr, &ent.data, subs, field, val->size);
ptr = _upb_Decoder_DecodeSubMessage(d, ptr, (upb_Message*)&ent.data, subs,
field, val->size);
// check if ent had any unknown fields
size_t size;
upb_Message_GetUnknown(&ent.data, &size);
upb_Message_GetUnknown((upb_Message*)&ent.data, &size);
if (size != 0) {
char* buf;
size_t size;
uint32_t tag =
((uint32_t)field->UPB_PRIVATE(number) << 3) | kUpb_WireType_Delimited;
upb_EncodeStatus status =
upb_Encode(&ent.data, entry, 0, &d->arena, &buf, &size);
upb_Encode((upb_Message*)&ent.data, entry, 0, &d->arena, &buf, &size);
if (status != kUpb_EncodeStatus_Ok) {
_upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
}
@ -1160,7 +1160,7 @@ static const char* _upb_Decoder_DecodeKnownField(
_upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
}
d->unknown_msg = msg;
msg = &ext->data;
msg = (upb_Message*)&ext->data;
subs = &ext->ext->UPB_PRIVATE(sub);
}
@ -1351,7 +1351,7 @@ static upb_DecodeStatus upb_Decoder_Decode(upb_Decoder* const decoder,
return decoder->status;
}
upb_DecodeStatus upb_Decode(const char* buf, size_t size, void* msg,
upb_DecodeStatus upb_Decode(const char* buf, size_t size, upb_Message* msg,
const upb_MiniTable* l,
const upb_ExtensionRegistry* extreg, int options,
upb_Arena* arena) {

View File

@ -535,7 +535,7 @@ static void encode_ext(upb_encstate* e, const upb_Extension* ext,
if (UPB_UNLIKELY(is_message_set)) {
encode_msgset_item(e, ext);
} else {
encode_field(e, &ext->data, &ext->ext->UPB_PRIVATE(sub),
encode_field(e, (upb_Message*)&ext->data, &ext->ext->UPB_PRIVATE(sub),
&ext->ext->UPB_PRIVATE(field));
}
}
@ -603,7 +603,7 @@ static void encode_message(upb_encstate* e, const upb_Message* msg,
}
static upb_EncodeStatus upb_Encoder_Encode(upb_encstate* const encoder,
const void* const msg,
const upb_Message* const msg,
const upb_MiniTable* const l,
char** const buf,
size_t* const size) {
@ -631,7 +631,7 @@ static upb_EncodeStatus upb_Encoder_Encode(upb_encstate* const encoder,
return encoder->status;
}
upb_EncodeStatus upb_Encode(const void* msg, const upb_MiniTable* l,
upb_EncodeStatus upb_Encode(const upb_Message* msg, const upb_MiniTable* l,
int options, upb_Arena* arena, char** buf,
size_t* size) {
upb_encstate e;

View File

@ -63,9 +63,9 @@ UPB_INLINE int upb_Encode_LimitDepth(uint32_t encode_options, uint32_t limit) {
return upb_EncodeOptions_MaxDepth(max_depth) | (encode_options & 0xffff);
}
UPB_API upb_EncodeStatus upb_Encode(const void* msg, const upb_MiniTable* l,
int options, upb_Arena* arena, char** buf,
size_t* size);
UPB_API upb_EncodeStatus upb_Encode(const upb_Message* msg,
const upb_MiniTable* l, int options,
upb_Arena* arena, char** buf, size_t* size);
#ifdef __cplusplus
} /* extern "C" */

View File

@ -260,7 +260,7 @@ void GenerateExtensionInHeader(const DefPoolPair& pools, upb::FieldDefPtr ext,
output(
R"cc(
UPB_INLINE bool $0_has_$1(const struct $2* msg) {
return _upb_Message_HasExtensionField(msg, &$3);
return _upb_Message_HasExtensionField((upb_Message*)msg, &$3);
}
)cc",
ExtensionIdentBase(ext), ext.name(), MessageName(ext.containing_type()),
@ -269,7 +269,7 @@ void GenerateExtensionInHeader(const DefPoolPair& pools, upb::FieldDefPtr ext,
output(
R"cc(
UPB_INLINE void $0_clear_$1(struct $2* msg) {
_upb_Message_ClearExtensionField(msg, &$3);
_upb_Message_ClearExtensionField((upb_Message*)msg, &$3);
}
)cc",
ExtensionIdentBase(ext), ext.name(), MessageName(ext.containing_type()),
@ -287,7 +287,7 @@ void GenerateExtensionInHeader(const DefPoolPair& pools, upb::FieldDefPtr ext,
&ext->UPB_PRIVATE(field)) == $5);
$0 default_val = $6;
$0 ret;
_upb_Message_GetExtensionField(msg, ext, &default_val, &ret);
_upb_Message_GetExtensionField((upb_Message*)msg, ext, &default_val, &ret);
return ret;
}
)cc",
@ -301,7 +301,7 @@ void GenerateExtensionInHeader(const DefPoolPair& pools, upb::FieldDefPtr ext,
UPB_ASSUME(upb_MiniTableField_IsScalar(&ext->UPB_PRIVATE(field)));
UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(
&ext->UPB_PRIVATE(field)) == $5);
bool ok = _upb_Message_SetExtensionField(msg, ext, &val, arena);
bool ok = _upb_Message_SetExtensionField((upb_Message*)msg, ext, &val, arena);
UPB_ASSERT(ok);
}
)cc",
@ -323,7 +323,8 @@ void GenerateMessageFunctionsInHeader(upb::MessageDefPtr message,
UPB_INLINE $0* $0_parse(const char* buf, size_t size, upb_Arena* arena) {
$0* ret = $0_new(arena);
if (!ret) return NULL;
if (upb_Decode(buf, size, ret, $1, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
if (upb_Decode(buf, size, UPB_UPCAST(ret), $1, NULL, 0, arena) !=
kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@ -333,21 +334,21 @@ void GenerateMessageFunctionsInHeader(upb::MessageDefPtr message,
int options, upb_Arena* arena) {
$0* ret = $0_new(arena);
if (!ret) return NULL;
if (upb_Decode(buf, size, ret, $1, extreg, options, arena) !=
kUpb_DecodeStatus_Ok) {
if (upb_Decode(buf, size, UPB_UPCAST(ret), $1, extreg, options,
arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* $0_serialize(const $0* msg, upb_Arena* arena, size_t* len) {
char* ptr;
(void)upb_Encode(msg, $1, 0, arena, &ptr, len);
(void)upb_Encode(UPB_UPCAST(msg), $1, 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* $0_serialize_ex(const $0* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
(void)upb_Encode(msg, $1, options, arena, &ptr, len);
(void)upb_Encode(UPB_UPCAST(msg), $1, options, arena, &ptr, len);
return ptr;
}
)cc",
@ -371,7 +372,8 @@ void GenerateOneofInHeader(upb::OneofDefPtr oneof, const DefPoolPair& pools,
R"cc(
UPB_INLINE $0_oneofcases $1_$2_case(const $1* msg) {
const upb_MiniTableField field = $3;
return ($0_oneofcases)upb_Message_WhichOneofFieldNumber(msg, &field);
return ($0_oneofcases)upb_Message_WhichOneofFieldNumber(
UPB_UPCAST(msg), &field);
}
)cc",
fullname, msg_name, oneof.name(),
@ -388,7 +390,7 @@ void GenerateHazzer(upb::FieldDefPtr field, const DefPoolPair& pools,
R"cc(
UPB_INLINE bool $0_has_$1(const $0* msg) {
const upb_MiniTableField field = $2;
return _upb_Message_HasNonExtensionField(msg, &field);
return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
)cc",
msg_name, resolved_name, FieldInitializer(pools, field, options));
@ -409,7 +411,7 @@ void GenerateClear(upb::FieldDefPtr field, const DefPoolPair& pools,
R"cc(
UPB_INLINE void $0_clear_$1($0* msg) {
const upb_MiniTableField field = $2;
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
)cc",
msg_name, resolved_name, FieldInitializer(pools, field, options));
@ -424,7 +426,7 @@ void GenerateMapGetters(upb::FieldDefPtr field, const DefPoolPair& pools,
R"cc(
UPB_INLINE size_t $0_$1_size(const $0* msg) {
const upb_MiniTableField field = $2;
const upb_Map* map = upb_Message_GetMap(msg, &field);
const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field);
return map ? _upb_Map_Size(map) : 0;
}
)cc",
@ -433,7 +435,7 @@ void GenerateMapGetters(upb::FieldDefPtr field, const DefPoolPair& pools,
R"cc(
UPB_INLINE bool $0_$1_get(const $0* msg, $2 key, $3* val) {
const upb_MiniTableField field = $4;
const upb_Map* map = upb_Message_GetMap(msg, &field);
const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field);
if (!map) return false;
return _upb_Map_Get(map, &key, $5, val, $6);
}
@ -445,7 +447,7 @@ void GenerateMapGetters(upb::FieldDefPtr field, const DefPoolPair& pools,
R"cc(
UPB_INLINE $0 $1_$2_next(const $1* msg, size_t* iter) {
const upb_MiniTableField field = $3;
const upb_Map* map = upb_Message_GetMap(msg, &field);
const upb_Map* map = upb_Message_GetMap(UPB_UPCAST(msg), &field);
if (!map) return NULL;
return ($0)_upb_map_next(map, iter);
}
@ -462,11 +464,11 @@ void GenerateMapGetters(upb::FieldDefPtr field, const DefPoolPair& pools,
R"cc(
UPB_INLINE const upb_Map* _$0_$1_$2($0* msg) {
const upb_MiniTableField field = $4;
return upb_Message_GetMap(msg, &field);
return upb_Message_GetMap(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_Map* _$0_$1_$3($0* msg, upb_Arena* a) {
const upb_MiniTableField field = $4;
return _upb_Message_GetOrCreateMutableMap(msg, &field, $5, $6, a);
return _upb_Message_GetOrCreateMutableMap(UPB_UPCAST(msg), &field, $5, $6, a);
}
)cc",
msg_name, resolved_name, kMapGetterPostfix, kMutableMapGetterPostfix,
@ -501,7 +503,7 @@ void GenerateRepeatedGetters(upb::FieldDefPtr field, const DefPoolPair& pools,
R"cc(
UPB_INLINE $0 const* $1_$2(const $1* msg, size_t* size) {
const upb_MiniTableField field = $3;
const upb_Array* arr = upb_Message_GetArray(msg, &field);
const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
if (size) *size = arr->UPB_PRIVATE(size);
return ($0 const*)_upb_array_constptr(arr);
@ -526,16 +528,16 @@ void GenerateRepeatedGetters(upb::FieldDefPtr field, const DefPoolPair& pools,
R"cc(
UPB_INLINE const upb_Array* _$1_$2_$4(const $1* msg, size_t* size) {
const upb_MiniTableField field = $3;
const upb_Array* arr = upb_Message_GetArray(msg, &field);
const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
*size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
UPB_INLINE upb_Array* _$1_$2_$5(const $1* msg, size_t* size, upb_Arena* arena) {
UPB_INLINE upb_Array* _$1_$2_$5($1* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = $3;
upb_Array* arr = upb_Message_GetOrCreateMutableArray(
(upb_Message*)msg, &field, arena);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(UPB_UPCAST(msg),
&field, arena);
if (size) {
*size = arr ? arr->UPB_PRIVATE(size) : 0;
}
@ -562,7 +564,8 @@ void GenerateScalarGetters(upb::FieldDefPtr field, const DefPoolPair& pools,
$0 default_val = $3;
$0 ret;
const upb_MiniTableField field = $4;
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
_upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
&default_val, &ret);
return ret;
}
)cc",
@ -596,7 +599,7 @@ void GenerateMapSetters(upb::FieldDefPtr field, const DefPoolPair& pools,
R"cc(
UPB_INLINE void $0_$1_clear($0* msg) {
const upb_MiniTableField field = $2;
upb_Map* map = (upb_Map*)upb_Message_GetMap(msg, &field);
upb_Map* map = (upb_Map*)upb_Message_GetMap(UPB_UPCAST(msg), &field);
if (!map) return;
_upb_Map_Clear(map);
}
@ -606,7 +609,8 @@ void GenerateMapSetters(upb::FieldDefPtr field, const DefPoolPair& pools,
R"cc(
UPB_INLINE bool $0_$1_set($0* msg, $2 key, $3 val, upb_Arena* a) {
const upb_MiniTableField field = $4;
upb_Map* map = _upb_Message_GetOrCreateMutableMap(msg, &field, $5, $6, a);
upb_Map* map = _upb_Message_GetOrCreateMutableMap(UPB_UPCAST(msg),
&field, $5, $6, a);
return _upb_Map_Insert(map, &key, $5, &val, $6, a) !=
kUpb_MapInsertStatus_OutOfMemory;
}
@ -618,7 +622,7 @@ void GenerateMapSetters(upb::FieldDefPtr field, const DefPoolPair& pools,
R"cc(
UPB_INLINE bool $0_$1_delete($0* msg, $2 key) {
const upb_MiniTableField field = $3;
upb_Map* map = (upb_Map*)upb_Message_GetMap(msg, &field);
upb_Map* map = (upb_Map*)upb_Message_GetMap(UPB_UPCAST(msg), &field);
if (!map) return false;
return _upb_Map_Delete(map, &key, $4, NULL);
}
@ -629,7 +633,7 @@ void GenerateMapSetters(upb::FieldDefPtr field, const DefPoolPair& pools,
R"cc(
UPB_INLINE $0 $1_$2_nextmutable($1* msg, size_t* iter) {
const upb_MiniTableField field = $3;
upb_Map* map = (upb_Map*)upb_Message_GetMap(msg, &field);
upb_Map* map = (upb_Map*)upb_Message_GetMap(UPB_UPCAST(msg), &field);
if (!map) return NULL;
return ($0)_upb_map_next(map, iter);
}
@ -647,7 +651,7 @@ void GenerateRepeatedSetters(upb::FieldDefPtr field, const DefPoolPair& pools,
R"cc(
UPB_INLINE $0* $1_mutable_$2($1* msg, size_t* size) {
upb_MiniTableField field = $3;
upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
if (size) *size = arr->UPB_PRIVATE(size);
return ($0*)_upb_array_ptr(arr);
@ -663,7 +667,8 @@ void GenerateRepeatedSetters(upb::FieldDefPtr field, const DefPoolPair& pools,
R"cc(
UPB_INLINE $0* $1_resize_$2($1* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = $3;
return ($0*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
return ($0*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
&field, size, arena);
}
)cc",
CType(field), msg_name, resolved_name,
@ -673,7 +678,8 @@ void GenerateRepeatedSetters(upb::FieldDefPtr field, const DefPoolPair& pools,
R"cc(
UPB_INLINE struct $0* $1_add_$2($1* msg, upb_Arena* arena) {
upb_MiniTableField field = $4;
upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(
UPB_UPCAST(msg), &field, arena);
if (!arr || !_upb_Array_ResizeUninitialized(
arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
@ -693,7 +699,8 @@ void GenerateRepeatedSetters(upb::FieldDefPtr field, const DefPoolPair& pools,
R"cc(
UPB_INLINE bool $1_add_$2($1* msg, $0 val, upb_Arena* arena) {
upb_MiniTableField field = $3;
upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(
UPB_UPCAST(msg), &field, arena);
if (!arr || !_upb_Array_ResizeUninitialized(
arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
@ -733,7 +740,7 @@ void GenerateNonRepeatedSetters(upb::FieldDefPtr field,
output(R"cc(
UPB_INLINE void $0_set_$1($0 *msg, $2 value) {
const upb_MiniTableField field = $3;
_upb_Message_SetNonExtensionField(msg, &field, &value);
_upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
)cc",
msg_name, field_name, CType(field),
@ -892,7 +899,8 @@ void WriteHeader(const DefPoolPair& pools, upb::FileDefPtr file,
// Forward-declare types defined in this file.
for (auto message : this_file_messages) {
output("typedef struct $0 $0;\n", ToCIdent(message.full_name()));
output("typedef struct $0 { upb_Message UPB_PRIVATE(base); } $0;\n",
ToCIdent(message.full_name()));
}
// Forward-declare types not in this file, but used as submessages.

View File

@ -25,10 +25,10 @@ extern const upb_MiniTable* google__protobuf__FileDescriptorProto_msg_init();
extern const upb_MiniTable* google__protobuf__GeneratedCodeInfo_msg_init();
extern const upb_MiniTableEnum* google_protobuf_compiler_CodeGeneratorResponse_Feature_enum_init();
typedef struct google_protobuf_compiler_Version google_protobuf_compiler_Version;
typedef struct google_protobuf_compiler_CodeGeneratorRequest google_protobuf_compiler_CodeGeneratorRequest;
typedef struct google_protobuf_compiler_CodeGeneratorResponse google_protobuf_compiler_CodeGeneratorResponse;
typedef struct google_protobuf_compiler_CodeGeneratorResponse_File google_protobuf_compiler_CodeGeneratorResponse_File;
typedef struct google_protobuf_compiler_Version { upb_Message UPB_PRIVATE(base); } google_protobuf_compiler_Version;
typedef struct google_protobuf_compiler_CodeGeneratorRequest { upb_Message UPB_PRIVATE(base); } google_protobuf_compiler_CodeGeneratorRequest;
typedef struct google_protobuf_compiler_CodeGeneratorResponse { upb_Message UPB_PRIVATE(base); } google_protobuf_compiler_CodeGeneratorResponse;
typedef struct google_protobuf_compiler_CodeGeneratorResponse_File { upb_Message UPB_PRIVATE(base); } google_protobuf_compiler_CodeGeneratorResponse_File;
struct google_protobuf_FileDescriptorProto;
struct google_protobuf_GeneratedCodeInfo;
@ -48,7 +48,8 @@ UPB_INLINE google_protobuf_compiler_Version* google_protobuf_compiler_Version_ne
UPB_INLINE google_protobuf_compiler_Version* google_protobuf_compiler_Version_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_compiler_Version* ret = google_protobuf_compiler_Version_new(arena);
if (!ret) return NULL;
if (upb_Decode(buf, size, ret, google__protobuf__compiler__Version_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__compiler__Version_msg_init(), NULL, 0, arena) !=
kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@ -58,99 +59,103 @@ UPB_INLINE google_protobuf_compiler_Version* google_protobuf_compiler_Version_pa
int options, upb_Arena* arena) {
google_protobuf_compiler_Version* ret = google_protobuf_compiler_Version_new(arena);
if (!ret) return NULL;
if (upb_Decode(buf, size, ret, google__protobuf__compiler__Version_msg_init(), extreg, options, arena) !=
kUpb_DecodeStatus_Ok) {
if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__compiler__Version_msg_init(), extreg, options,
arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_compiler_Version_serialize(const google_protobuf_compiler_Version* msg, upb_Arena* arena, size_t* len) {
char* ptr;
(void)upb_Encode(msg, google__protobuf__compiler__Version_msg_init(), 0, arena, &ptr, len);
(void)upb_Encode(UPB_UPCAST(msg), google__protobuf__compiler__Version_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_compiler_Version_serialize_ex(const google_protobuf_compiler_Version* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
(void)upb_Encode(msg, google__protobuf__compiler__Version_msg_init(), options, arena, &ptr, len);
(void)upb_Encode(UPB_UPCAST(msg), google__protobuf__compiler__Version_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_compiler_Version_clear_major(google_protobuf_compiler_Version* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 1);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_compiler_Version_major(const google_protobuf_compiler_Version* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 1);
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
_upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
&default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_Version_has_major(const google_protobuf_compiler_Version* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 1);
return _upb_Message_HasNonExtensionField(msg, &field);
return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_Version_clear_minor(google_protobuf_compiler_Version* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 2);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_compiler_Version_minor(const google_protobuf_compiler_Version* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 2);
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
_upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
&default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_Version_has_minor(const google_protobuf_compiler_Version* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 2);
return _upb_Message_HasNonExtensionField(msg, &field);
return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_Version_clear_patch(google_protobuf_compiler_Version* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 3);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_compiler_Version_patch(const google_protobuf_compiler_Version* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 3);
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
_upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
&default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_Version_has_patch(const google_protobuf_compiler_Version* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 3);
return _upb_Message_HasNonExtensionField(msg, &field);
return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_Version_clear_suffix(google_protobuf_compiler_Version* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 4);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_compiler_Version_suffix(const google_protobuf_compiler_Version* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 4);
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
_upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
&default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_Version_has_suffix(const google_protobuf_compiler_Version* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 4);
return _upb_Message_HasNonExtensionField(msg, &field);
return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_Version_set_major(google_protobuf_compiler_Version *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 1);
_upb_Message_SetNonExtensionField(msg, &field, &value);
_upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_Version_set_minor(google_protobuf_compiler_Version *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 2);
_upb_Message_SetNonExtensionField(msg, &field, &value);
_upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_Version_set_patch(google_protobuf_compiler_Version *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 3);
_upb_Message_SetNonExtensionField(msg, &field, &value);
_upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_Version_set_suffix(google_protobuf_compiler_Version *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__Version_msg_init(), 4);
_upb_Message_SetNonExtensionField(msg, &field, &value);
_upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
/* google.protobuf.compiler.CodeGeneratorRequest */
@ -161,7 +166,8 @@ UPB_INLINE google_protobuf_compiler_CodeGeneratorRequest* google_protobuf_compil
UPB_INLINE google_protobuf_compiler_CodeGeneratorRequest* google_protobuf_compiler_CodeGeneratorRequest_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_compiler_CodeGeneratorRequest* ret = google_protobuf_compiler_CodeGeneratorRequest_new(arena);
if (!ret) return NULL;
if (upb_Decode(buf, size, ret, google__protobuf__compiler__CodeGeneratorRequest_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__compiler__CodeGeneratorRequest_msg_init(), NULL, 0, arena) !=
kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@ -171,30 +177,30 @@ UPB_INLINE google_protobuf_compiler_CodeGeneratorRequest* google_protobuf_compil
int options, upb_Arena* arena) {
google_protobuf_compiler_CodeGeneratorRequest* ret = google_protobuf_compiler_CodeGeneratorRequest_new(arena);
if (!ret) return NULL;
if (upb_Decode(buf, size, ret, google__protobuf__compiler__CodeGeneratorRequest_msg_init(), extreg, options, arena) !=
kUpb_DecodeStatus_Ok) {
if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__compiler__CodeGeneratorRequest_msg_init(), extreg, options,
arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_compiler_CodeGeneratorRequest_serialize(const google_protobuf_compiler_CodeGeneratorRequest* msg, upb_Arena* arena, size_t* len) {
char* ptr;
(void)upb_Encode(msg, google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 0, arena, &ptr, len);
(void)upb_Encode(UPB_UPCAST(msg), google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_compiler_CodeGeneratorRequest_serialize_ex(const google_protobuf_compiler_CodeGeneratorRequest* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
(void)upb_Encode(msg, google__protobuf__compiler__CodeGeneratorRequest_msg_init(), options, arena, &ptr, len);
(void)upb_Encode(UPB_UPCAST(msg), google__protobuf__compiler__CodeGeneratorRequest_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorRequest_clear_file_to_generate(google_protobuf_compiler_CodeGeneratorRequest* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 1);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView const* google_protobuf_compiler_CodeGeneratorRequest_file_to_generate(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 1);
const upb_Array* arr = upb_Message_GetArray(msg, &field);
const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView const*)_upb_array_constptr(arr);
@ -205,16 +211,16 @@ UPB_INLINE upb_StringView const* google_protobuf_compiler_CodeGeneratorRequest_f
}
UPB_INLINE const upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_file_to_generate_upb_array(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 1);
const upb_Array* arr = upb_Message_GetArray(msg, &field);
const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
*size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_file_to_generate_mutable_upb_array(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size, upb_Arena* arena) {
UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_file_to_generate_mutable_upb_array(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 1);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(
(upb_Message*)msg, &field, arena);
UPB_UPCAST(msg), &field, arena);
if (size) {
*size = arr ? arr->UPB_PRIVATE(size) : 0;
}
@ -222,41 +228,43 @@ UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_file_to_gen
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorRequest_clear_parameter(google_protobuf_compiler_CodeGeneratorRequest* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 2);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_compiler_CodeGeneratorRequest_parameter(const google_protobuf_compiler_CodeGeneratorRequest* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 2);
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
_upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
&default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorRequest_has_parameter(const google_protobuf_compiler_CodeGeneratorRequest* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 2);
return _upb_Message_HasNonExtensionField(msg, &field);
return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorRequest_clear_compiler_version(google_protobuf_compiler_CodeGeneratorRequest* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 3);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_compiler_Version* google_protobuf_compiler_CodeGeneratorRequest_compiler_version(const google_protobuf_compiler_CodeGeneratorRequest* msg) {
const google_protobuf_compiler_Version* default_val = NULL;
const google_protobuf_compiler_Version* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 3);
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
_upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
&default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorRequest_has_compiler_version(const google_protobuf_compiler_CodeGeneratorRequest* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 3);
return _upb_Message_HasNonExtensionField(msg, &field);
return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorRequest_clear_proto_file(google_protobuf_compiler_CodeGeneratorRequest* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 15);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const struct google_protobuf_FileDescriptorProto* const* google_protobuf_compiler_CodeGeneratorRequest_proto_file(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 15);
const upb_Array* arr = upb_Message_GetArray(msg, &field);
const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
if (size) *size = arr->UPB_PRIVATE(size);
return (const struct google_protobuf_FileDescriptorProto* const*)_upb_array_constptr(arr);
@ -267,16 +275,16 @@ UPB_INLINE const struct google_protobuf_FileDescriptorProto* const* google_proto
}
UPB_INLINE const upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_proto_file_upb_array(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 15);
const upb_Array* arr = upb_Message_GetArray(msg, &field);
const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
*size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_proto_file_mutable_upb_array(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size, upb_Arena* arena) {
UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_proto_file_mutable_upb_array(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 15);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(
(upb_Message*)msg, &field, arena);
UPB_UPCAST(msg), &field, arena);
if (size) {
*size = arr ? arr->UPB_PRIVATE(size) : 0;
}
@ -284,11 +292,11 @@ UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_proto_file_
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorRequest_clear_source_file_descriptors(google_protobuf_compiler_CodeGeneratorRequest* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 17);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const struct google_protobuf_FileDescriptorProto* const* google_protobuf_compiler_CodeGeneratorRequest_source_file_descriptors(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 17);
const upb_Array* arr = upb_Message_GetArray(msg, &field);
const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
if (size) *size = arr->UPB_PRIVATE(size);
return (const struct google_protobuf_FileDescriptorProto* const*)_upb_array_constptr(arr);
@ -299,16 +307,16 @@ UPB_INLINE const struct google_protobuf_FileDescriptorProto* const* google_proto
}
UPB_INLINE const upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_source_file_descriptors_upb_array(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 17);
const upb_Array* arr = upb_Message_GetArray(msg, &field);
const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
*size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_source_file_descriptors_mutable_upb_array(const google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size, upb_Arena* arena) {
UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_source_file_descriptors_mutable_upb_array(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 17);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(
(upb_Message*)msg, &field, arena);
UPB_UPCAST(msg), &field, arena);
if (size) {
*size = arr ? arr->UPB_PRIVATE(size) : 0;
}
@ -317,7 +325,7 @@ UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorRequest_source_file
UPB_INLINE upb_StringView* google_protobuf_compiler_CodeGeneratorRequest_mutable_file_to_generate(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 1);
upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
if (size) *size = arr->UPB_PRIVATE(size);
return (upb_StringView*)_upb_array_ptr(arr);
@ -328,11 +336,13 @@ UPB_INLINE upb_StringView* google_protobuf_compiler_CodeGeneratorRequest_mutable
}
UPB_INLINE upb_StringView* google_protobuf_compiler_CodeGeneratorRequest_resize_file_to_generate(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 1);
return (upb_StringView*)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
return (upb_StringView*)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
&field, size, arena);
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorRequest_add_file_to_generate(google_protobuf_compiler_CodeGeneratorRequest* msg, upb_StringView val, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 1);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(
UPB_UPCAST(msg), &field, arena);
if (!arr || !_upb_Array_ResizeUninitialized(
arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
@ -343,11 +353,11 @@ UPB_INLINE bool google_protobuf_compiler_CodeGeneratorRequest_add_file_to_genera
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorRequest_set_parameter(google_protobuf_compiler_CodeGeneratorRequest *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 2);
_upb_Message_SetNonExtensionField(msg, &field, &value);
_upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorRequest_set_compiler_version(google_protobuf_compiler_CodeGeneratorRequest *msg, google_protobuf_compiler_Version* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 3);
_upb_Message_SetNonExtensionField(msg, &field, &value);
_upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_compiler_Version* google_protobuf_compiler_CodeGeneratorRequest_mutable_compiler_version(google_protobuf_compiler_CodeGeneratorRequest* msg, upb_Arena* arena) {
struct google_protobuf_compiler_Version* sub = (struct google_protobuf_compiler_Version*)google_protobuf_compiler_CodeGeneratorRequest_compiler_version(msg);
@ -359,7 +369,7 @@ UPB_INLINE struct google_protobuf_compiler_Version* google_protobuf_compiler_Cod
}
UPB_INLINE struct google_protobuf_FileDescriptorProto** google_protobuf_compiler_CodeGeneratorRequest_mutable_proto_file(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 15);
upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
if (size) *size = arr->UPB_PRIVATE(size);
return (struct google_protobuf_FileDescriptorProto**)_upb_array_ptr(arr);
@ -370,11 +380,13 @@ UPB_INLINE struct google_protobuf_FileDescriptorProto** google_protobuf_compiler
}
UPB_INLINE struct google_protobuf_FileDescriptorProto** google_protobuf_compiler_CodeGeneratorRequest_resize_proto_file(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 15);
return (struct google_protobuf_FileDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
return (struct google_protobuf_FileDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
&field, size, arena);
}
UPB_INLINE struct google_protobuf_FileDescriptorProto* google_protobuf_compiler_CodeGeneratorRequest_add_proto_file(google_protobuf_compiler_CodeGeneratorRequest* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 15);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(
UPB_UPCAST(msg), &field, arena);
if (!arr || !_upb_Array_ResizeUninitialized(
arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
@ -387,7 +399,7 @@ UPB_INLINE struct google_protobuf_FileDescriptorProto* google_protobuf_compiler_
}
UPB_INLINE struct google_protobuf_FileDescriptorProto** google_protobuf_compiler_CodeGeneratorRequest_mutable_source_file_descriptors(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 17);
upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
if (size) *size = arr->UPB_PRIVATE(size);
return (struct google_protobuf_FileDescriptorProto**)_upb_array_ptr(arr);
@ -398,11 +410,13 @@ UPB_INLINE struct google_protobuf_FileDescriptorProto** google_protobuf_compiler
}
UPB_INLINE struct google_protobuf_FileDescriptorProto** google_protobuf_compiler_CodeGeneratorRequest_resize_source_file_descriptors(google_protobuf_compiler_CodeGeneratorRequest* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 17);
return (struct google_protobuf_FileDescriptorProto**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
return (struct google_protobuf_FileDescriptorProto**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
&field, size, arena);
}
UPB_INLINE struct google_protobuf_FileDescriptorProto* google_protobuf_compiler_CodeGeneratorRequest_add_source_file_descriptors(google_protobuf_compiler_CodeGeneratorRequest* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorRequest_msg_init(), 17);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(
UPB_UPCAST(msg), &field, arena);
if (!arr || !_upb_Array_ResizeUninitialized(
arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
@ -422,7 +436,8 @@ UPB_INLINE google_protobuf_compiler_CodeGeneratorResponse* google_protobuf_compi
UPB_INLINE google_protobuf_compiler_CodeGeneratorResponse* google_protobuf_compiler_CodeGeneratorResponse_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_compiler_CodeGeneratorResponse* ret = google_protobuf_compiler_CodeGeneratorResponse_new(arena);
if (!ret) return NULL;
if (upb_Decode(buf, size, ret, google__protobuf__compiler__CodeGeneratorResponse_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__compiler__CodeGeneratorResponse_msg_init(), NULL, 0, arena) !=
kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@ -432,90 +447,94 @@ UPB_INLINE google_protobuf_compiler_CodeGeneratorResponse* google_protobuf_compi
int options, upb_Arena* arena) {
google_protobuf_compiler_CodeGeneratorResponse* ret = google_protobuf_compiler_CodeGeneratorResponse_new(arena);
if (!ret) return NULL;
if (upb_Decode(buf, size, ret, google__protobuf__compiler__CodeGeneratorResponse_msg_init(), extreg, options, arena) !=
kUpb_DecodeStatus_Ok) {
if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__compiler__CodeGeneratorResponse_msg_init(), extreg, options,
arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_compiler_CodeGeneratorResponse_serialize(const google_protobuf_compiler_CodeGeneratorResponse* msg, upb_Arena* arena, size_t* len) {
char* ptr;
(void)upb_Encode(msg, google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 0, arena, &ptr, len);
(void)upb_Encode(UPB_UPCAST(msg), google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_compiler_CodeGeneratorResponse_serialize_ex(const google_protobuf_compiler_CodeGeneratorResponse* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
(void)upb_Encode(msg, google__protobuf__compiler__CodeGeneratorResponse_msg_init(), options, arena, &ptr, len);
(void)upb_Encode(UPB_UPCAST(msg), google__protobuf__compiler__CodeGeneratorResponse_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_clear_error(google_protobuf_compiler_CodeGeneratorResponse* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 1);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_compiler_CodeGeneratorResponse_error(const google_protobuf_compiler_CodeGeneratorResponse* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 1);
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
_upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
&default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorResponse_has_error(const google_protobuf_compiler_CodeGeneratorResponse* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 1);
return _upb_Message_HasNonExtensionField(msg, &field);
return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_clear_supported_features(google_protobuf_compiler_CodeGeneratorResponse* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 2);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE uint64_t google_protobuf_compiler_CodeGeneratorResponse_supported_features(const google_protobuf_compiler_CodeGeneratorResponse* msg) {
uint64_t default_val = (uint64_t)0ull;
uint64_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 2);
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
_upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
&default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorResponse_has_supported_features(const google_protobuf_compiler_CodeGeneratorResponse* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 2);
return _upb_Message_HasNonExtensionField(msg, &field);
return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_clear_minimum_edition(google_protobuf_compiler_CodeGeneratorResponse* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 3);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_compiler_CodeGeneratorResponse_minimum_edition(const google_protobuf_compiler_CodeGeneratorResponse* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 3);
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
_upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
&default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorResponse_has_minimum_edition(const google_protobuf_compiler_CodeGeneratorResponse* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 3);
return _upb_Message_HasNonExtensionField(msg, &field);
return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_clear_maximum_edition(google_protobuf_compiler_CodeGeneratorResponse* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 4);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE int32_t google_protobuf_compiler_CodeGeneratorResponse_maximum_edition(const google_protobuf_compiler_CodeGeneratorResponse* msg) {
int32_t default_val = (int32_t)0;
int32_t ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 4);
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
_upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
&default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorResponse_has_maximum_edition(const google_protobuf_compiler_CodeGeneratorResponse* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 4);
return _upb_Message_HasNonExtensionField(msg, &field);
return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_clear_file(google_protobuf_compiler_CodeGeneratorResponse* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 15);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const google_protobuf_compiler_CodeGeneratorResponse_File* const* google_protobuf_compiler_CodeGeneratorResponse_file(const google_protobuf_compiler_CodeGeneratorResponse* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 15);
const upb_Array* arr = upb_Message_GetArray(msg, &field);
const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (arr) {
if (size) *size = arr->UPB_PRIVATE(size);
return (const google_protobuf_compiler_CodeGeneratorResponse_File* const*)_upb_array_constptr(arr);
@ -526,16 +545,16 @@ UPB_INLINE const google_protobuf_compiler_CodeGeneratorResponse_File* const* goo
}
UPB_INLINE const upb_Array* _google_protobuf_compiler_CodeGeneratorResponse_file_upb_array(const google_protobuf_compiler_CodeGeneratorResponse* msg, size_t* size) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 15);
const upb_Array* arr = upb_Message_GetArray(msg, &field);
const upb_Array* arr = upb_Message_GetArray(UPB_UPCAST(msg), &field);
if (size) {
*size = arr ? arr->UPB_PRIVATE(size) : 0;
}
return arr;
}
UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorResponse_file_mutable_upb_array(const google_protobuf_compiler_CodeGeneratorResponse* msg, size_t* size, upb_Arena* arena) {
UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorResponse_file_mutable_upb_array(google_protobuf_compiler_CodeGeneratorResponse* msg, size_t* size, upb_Arena* arena) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 15);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(
(upb_Message*)msg, &field, arena);
UPB_UPCAST(msg), &field, arena);
if (size) {
*size = arr ? arr->UPB_PRIVATE(size) : 0;
}
@ -544,23 +563,23 @@ UPB_INLINE upb_Array* _google_protobuf_compiler_CodeGeneratorResponse_file_mutab
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_set_error(google_protobuf_compiler_CodeGeneratorResponse *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 1);
_upb_Message_SetNonExtensionField(msg, &field, &value);
_upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_set_supported_features(google_protobuf_compiler_CodeGeneratorResponse *msg, uint64_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 2);
_upb_Message_SetNonExtensionField(msg, &field, &value);
_upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_set_minimum_edition(google_protobuf_compiler_CodeGeneratorResponse *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 3);
_upb_Message_SetNonExtensionField(msg, &field, &value);
_upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_set_maximum_edition(google_protobuf_compiler_CodeGeneratorResponse *msg, int32_t value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 4);
_upb_Message_SetNonExtensionField(msg, &field, &value);
_upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE google_protobuf_compiler_CodeGeneratorResponse_File** google_protobuf_compiler_CodeGeneratorResponse_mutable_file(google_protobuf_compiler_CodeGeneratorResponse* msg, size_t* size) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 15);
upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
upb_Array* arr = upb_Message_GetMutableArray(UPB_UPCAST(msg), &field);
if (arr) {
if (size) *size = arr->UPB_PRIVATE(size);
return (google_protobuf_compiler_CodeGeneratorResponse_File**)_upb_array_ptr(arr);
@ -571,11 +590,13 @@ UPB_INLINE google_protobuf_compiler_CodeGeneratorResponse_File** google_protobuf
}
UPB_INLINE google_protobuf_compiler_CodeGeneratorResponse_File** google_protobuf_compiler_CodeGeneratorResponse_resize_file(google_protobuf_compiler_CodeGeneratorResponse* msg, size_t size, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 15);
return (google_protobuf_compiler_CodeGeneratorResponse_File**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
return (google_protobuf_compiler_CodeGeneratorResponse_File**)upb_Message_ResizeArrayUninitialized(UPB_UPCAST(msg),
&field, size, arena);
}
UPB_INLINE struct google_protobuf_compiler_CodeGeneratorResponse_File* google_protobuf_compiler_CodeGeneratorResponse_add_file(google_protobuf_compiler_CodeGeneratorResponse* msg, upb_Arena* arena) {
upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse_msg_init(), 15);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
upb_Array* arr = upb_Message_GetOrCreateMutableArray(
UPB_UPCAST(msg), &field, arena);
if (!arr || !_upb_Array_ResizeUninitialized(
arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return NULL;
@ -595,7 +616,8 @@ UPB_INLINE google_protobuf_compiler_CodeGeneratorResponse_File* google_protobuf_
UPB_INLINE google_protobuf_compiler_CodeGeneratorResponse_File* google_protobuf_compiler_CodeGeneratorResponse_File_parse(const char* buf, size_t size, upb_Arena* arena) {
google_protobuf_compiler_CodeGeneratorResponse_File* ret = google_protobuf_compiler_CodeGeneratorResponse_File_new(arena);
if (!ret) return NULL;
if (upb_Decode(buf, size, ret, google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), NULL, 0, arena) !=
kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
@ -605,99 +627,103 @@ UPB_INLINE google_protobuf_compiler_CodeGeneratorResponse_File* google_protobuf_
int options, upb_Arena* arena) {
google_protobuf_compiler_CodeGeneratorResponse_File* ret = google_protobuf_compiler_CodeGeneratorResponse_File_new(arena);
if (!ret) return NULL;
if (upb_Decode(buf, size, ret, google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), extreg, options, arena) !=
kUpb_DecodeStatus_Ok) {
if (upb_Decode(buf, size, UPB_UPCAST(ret), google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), extreg, options,
arena) != kUpb_DecodeStatus_Ok) {
return NULL;
}
return ret;
}
UPB_INLINE char* google_protobuf_compiler_CodeGeneratorResponse_File_serialize(const google_protobuf_compiler_CodeGeneratorResponse_File* msg, upb_Arena* arena, size_t* len) {
char* ptr;
(void)upb_Encode(msg, google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 0, arena, &ptr, len);
(void)upb_Encode(UPB_UPCAST(msg), google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 0, arena, &ptr, len);
return ptr;
}
UPB_INLINE char* google_protobuf_compiler_CodeGeneratorResponse_File_serialize_ex(const google_protobuf_compiler_CodeGeneratorResponse_File* msg, int options,
upb_Arena* arena, size_t* len) {
char* ptr;
(void)upb_Encode(msg, google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), options, arena, &ptr, len);
(void)upb_Encode(UPB_UPCAST(msg), google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), options, arena, &ptr, len);
return ptr;
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_File_clear_name(google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 1);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_compiler_CodeGeneratorResponse_File_name(const google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 1);
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
_upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
&default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorResponse_File_has_name(const google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 1);
return _upb_Message_HasNonExtensionField(msg, &field);
return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_File_clear_insertion_point(google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 2);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_compiler_CodeGeneratorResponse_File_insertion_point(const google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 2);
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
_upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
&default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorResponse_File_has_insertion_point(const google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 2);
return _upb_Message_HasNonExtensionField(msg, &field);
return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_File_clear_content(google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 15);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE upb_StringView google_protobuf_compiler_CodeGeneratorResponse_File_content(const google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
upb_StringView default_val = upb_StringView_FromString("");
upb_StringView ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 15);
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
_upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
&default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorResponse_File_has_content(const google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 15);
return _upb_Message_HasNonExtensionField(msg, &field);
return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_File_clear_generated_code_info(google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 16);
_upb_Message_ClearNonExtensionField(msg, &field);
_upb_Message_ClearNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE const struct google_protobuf_GeneratedCodeInfo* google_protobuf_compiler_CodeGeneratorResponse_File_generated_code_info(const google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const struct google_protobuf_GeneratedCodeInfo* default_val = NULL;
const struct google_protobuf_GeneratedCodeInfo* ret;
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 16);
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
_upb_Message_GetNonExtensionField(UPB_UPCAST(msg), &field,
&default_val, &ret);
return ret;
}
UPB_INLINE bool google_protobuf_compiler_CodeGeneratorResponse_File_has_generated_code_info(const google_protobuf_compiler_CodeGeneratorResponse_File* msg) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 16);
return _upb_Message_HasNonExtensionField(msg, &field);
return _upb_Message_HasNonExtensionField(UPB_UPCAST(msg), &field);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_File_set_name(google_protobuf_compiler_CodeGeneratorResponse_File *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 1);
_upb_Message_SetNonExtensionField(msg, &field, &value);
_upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_File_set_insertion_point(google_protobuf_compiler_CodeGeneratorResponse_File *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 2);
_upb_Message_SetNonExtensionField(msg, &field, &value);
_upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_File_set_content(google_protobuf_compiler_CodeGeneratorResponse_File *msg, upb_StringView value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 15);
_upb_Message_SetNonExtensionField(msg, &field, &value);
_upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE void google_protobuf_compiler_CodeGeneratorResponse_File_set_generated_code_info(google_protobuf_compiler_CodeGeneratorResponse_File *msg, struct google_protobuf_GeneratedCodeInfo* value) {
const upb_MiniTableField field = *upb_MiniTable_FindFieldByNumber(google__protobuf__compiler__CodeGeneratorResponse__File_msg_init(), 16);
_upb_Message_SetNonExtensionField(msg, &field, &value);
_upb_Message_SetNonExtensionField((upb_Message *)msg, &field, &value);
}
UPB_INLINE struct google_protobuf_GeneratedCodeInfo* google_protobuf_compiler_CodeGeneratorResponse_File_mutable_generated_code_info(google_protobuf_compiler_CodeGeneratorResponse_File* msg, upb_Arena* arena) {
struct google_protobuf_GeneratedCodeInfo* sub = (struct google_protobuf_GeneratedCodeInfo*)google_protobuf_compiler_CodeGeneratorResponse_File_generated_code_info(msg);

View File

@ -19,6 +19,7 @@
#include "google/protobuf/compiler/plugin.upb.h"
#include "google/protobuf/compiler/plugin.upbdefs.h"
#include "upb/base/status.h"
#include "upb/base/upcast.h"
#include "upb/json/decode.h"
#include "upb/json/encode.h"
#include "upb/mem/arena.h"
@ -34,7 +35,8 @@ static google_protobuf_compiler_CodeGeneratorResponse* upbc_JsonDecode(
upb_DefPool* s = upb_DefPool_New();
const upb_MessageDef* m = google_protobuf_compiler_CodeGeneratorResponse_getmsgdef(s);
(void)upb_JsonDecode(data, size, response, m, s, 0, arena, status);
(void)upb_JsonDecode(data, size, UPB_UPCAST(response), m, s, 0, arena,
status);
if (!upb_Status_IsOk(status)) return NULL;
upb_DefPool_Free(s);
@ -50,12 +52,14 @@ static upb_StringView upbc_JsonEncode(const upb_CodeGeneratorRequest* request,
const upb_MessageDef* m = upb_CodeGeneratorRequest_getmsgdef(s);
const int options = upb_JsonEncode_FormatEnumsAsIntegers;
out.size = upb_JsonEncode(request, m, s, options, NULL, 0, status);
out.size =
upb_JsonEncode(UPB_UPCAST(request), m, s, options, NULL, 0, status);
if (!upb_Status_IsOk(status)) goto done;
char* data = (char*)upb_Arena_Malloc(arena, out.size + 1);
(void)upb_JsonEncode(request, m, s, options, data, out.size + 1, status);
(void)upb_JsonEncode(UPB_UPCAST(request), m, s, options, data, out.size + 1,
status);
if (!upb_Status_IsOk(status)) goto done;
out.data = (const char*)data;