Updated to new upb APIs.
diff --git a/ruby/ext/google/protobuf_c/convert.c b/ruby/ext/google/protobuf_c/convert.c
index 8bcf6ee..8b98aee 100644
--- a/ruby/ext/google/protobuf_c/convert.c
+++ b/ruby/ext/google/protobuf_c/convert.c
@@ -31,7 +31,7 @@
// -----------------------------------------------------------------------------
// Ruby <-> upb data conversion functions.
//
-// This file Also contains a few other assorted algorithms on upb_msgval.
+// This file Also contains a few other assorted algorithms on upb_MessageValue.
//
// None of the algorithms in this file require any access to the internal
// representation of Ruby or upb objects.
@@ -42,10 +42,10 @@
#include "message.h"
#include "protobuf.h"
-static upb_strview Convert_StringData(VALUE str, upb_arena *arena) {
- upb_strview ret;
+static upb_StringView Convert_StringData(VALUE str, upb_Arena* arena) {
+ upb_StringView ret;
if (arena) {
- char *ptr = upb_arena_malloc(arena, RSTRING_LEN(str));
+ char* ptr = upb_Arena_Malloc(arena, RSTRING_LEN(str));
memcpy(ptr, RSTRING_PTR(str), RSTRING_LEN(str));
ret.data = ptr;
} else {
@@ -57,13 +57,11 @@
}
static bool is_ruby_num(VALUE value) {
- return (TYPE(value) == T_FLOAT ||
- TYPE(value) == T_FIXNUM ||
+ return (TYPE(value) == T_FLOAT || TYPE(value) == T_FIXNUM ||
TYPE(value) == T_BIGNUM);
}
-static void Convert_CheckInt(const char* name, upb_fieldtype_t type,
- VALUE val) {
+static void Convert_CheckInt(const char* name, upb_CType type, VALUE val) {
if (!is_ruby_num(val)) {
rb_raise(cTypeError,
"Expected number type for integral field '%s' (given %s).", name,
@@ -82,7 +80,7 @@
name, rb_class2name(CLASS_OF(val)));
}
}
- if (type == UPB_TYPE_UINT32 || type == UPB_TYPE_UINT64) {
+ if (type == kUpb_CType_UInt32 || type == kUpb_CType_UInt64) {
if (NUM2DBL(val) < 0) {
rb_raise(
rb_eRangeError,
@@ -93,26 +91,31 @@
}
static int32_t Convert_ToEnum(VALUE value, const char* name,
- const upb_enumdef* e) {
+ const upb_EnumDef* e) {
int32_t val;
switch (TYPE(value)) {
case T_FLOAT:
case T_FIXNUM:
case T_BIGNUM:
- Convert_CheckInt(name, UPB_TYPE_INT32, value);
+ Convert_CheckInt(name, kUpb_CType_Int32, value);
val = NUM2INT(value);
break;
- case T_STRING:
- if (!upb_enumdef_ntoi(e, RSTRING_PTR(value), RSTRING_LEN(value), &val)) {
- goto unknownval;
- }
+ case T_STRING: {
+ const upb_EnumValueDef* ev = upb_EnumDef_FindValueByNameWithSize(
+ e, RSTRING_PTR(value), RSTRING_LEN(value));
+ if (!ev) goto unknownval;
+ val = upb_EnumValueDef_Number(ev);
break;
- case T_SYMBOL:
- if (!upb_enumdef_ntoiz(e, rb_id2name(SYM2ID(value)), &val)) {
+ }
+ case T_SYMBOL: {
+ const upb_EnumValueDef* ev =
+ upb_EnumDef_FindValueByName(e, rb_id2name(SYM2ID(value)));
+ if (!ev)
goto unknownval;
- }
+ val = upb_EnumValueDef_Number(ev);
break;
+ }
default:
rb_raise(cTypeError,
"Expected number or symbol type for enum field '%s'.", name);
@@ -124,47 +127,52 @@
rb_raise(rb_eRangeError, "Unknown symbol value for enum field '%s'.", name);
}
-upb_msgval Convert_RubyToUpb(VALUE value, const char* name, TypeInfo type_info,
- upb_arena* arena) {
- upb_msgval ret;
+upb_MessageValue Convert_RubyToUpb(VALUE value, const char* name,
+ TypeInfo type_info, upb_Arena* arena) {
+ upb_MessageValue ret;
switch (type_info.type) {
- case UPB_TYPE_FLOAT:
+ case kUpb_CType_Float:
if (!is_ruby_num(value)) {
- rb_raise(cTypeError, "Expected number type for float field '%s' (given %s).",
- name, rb_class2name(CLASS_OF(value)));
+ rb_raise(cTypeError,
+ "Expected number type for float field '%s' (given %s).", name,
+ rb_class2name(CLASS_OF(value)));
}
ret.float_val = NUM2DBL(value);
break;
- case UPB_TYPE_DOUBLE:
+ case kUpb_CType_Double:
if (!is_ruby_num(value)) {
- rb_raise(cTypeError, "Expected number type for double field '%s' (given %s).",
- name, rb_class2name(CLASS_OF(value)));
+ rb_raise(cTypeError,
+ "Expected number type for double field '%s' (given %s).", name,
+ rb_class2name(CLASS_OF(value)));
}
ret.double_val = NUM2DBL(value);
break;
- case UPB_TYPE_BOOL: {
+ case kUpb_CType_Bool: {
if (value == Qtrue) {
ret.bool_val = 1;
} else if (value == Qfalse) {
ret.bool_val = 0;
} else {
- rb_raise(cTypeError, "Invalid argument for boolean field '%s' (given %s).",
- name, rb_class2name(CLASS_OF(value)));
+ rb_raise(cTypeError,
+ "Invalid argument for boolean field '%s' (given %s).", name,
+ rb_class2name(CLASS_OF(value)));
}
break;
}
- case UPB_TYPE_STRING: {
+ case kUpb_CType_String: {
VALUE utf8 = rb_enc_from_encoding(rb_utf8_encoding());
if (CLASS_OF(value) == rb_cSymbol) {
value = rb_funcall(value, rb_intern("to_s"), 0);
} else if (CLASS_OF(value) != rb_cString) {
- rb_raise(cTypeError, "Invalid argument for string field '%s' (given %s).",
- name, rb_class2name(CLASS_OF(value)));
+ rb_raise(cTypeError,
+ "Invalid argument for string field '%s' (given %s).", name,
+ rb_class2name(CLASS_OF(value)));
}
if (rb_obj_encoding(value) != utf8) {
- // Note: this will not duplicate underlying string data unless necessary.
+ // Note: this will not duplicate underlying string data unless
+ // necessary.
value = rb_str_encode(value, utf8, 0, Qnil);
if (rb_enc_str_coderange(value) == ENC_CODERANGE_BROKEN) {
@@ -175,15 +183,17 @@
ret.str_val = Convert_StringData(value, arena);
break;
}
- case UPB_TYPE_BYTES: {
+ case kUpb_CType_Bytes: {
VALUE bytes = rb_enc_from_encoding(rb_ascii8bit_encoding());
if (CLASS_OF(value) != rb_cString) {
- rb_raise(cTypeError, "Invalid argument for bytes field '%s' (given %s).",
- name, rb_class2name(CLASS_OF(value)));
+ rb_raise(cTypeError,
+ "Invalid argument for bytes field '%s' (given %s).", name,
+ rb_class2name(CLASS_OF(value)));
}
if (rb_obj_encoding(value) != bytes) {
- // Note: this will not duplicate underlying string data unless necessary.
+ // Note: this will not duplicate underlying string data unless
+ // necessary.
// TODO(haberman): is this really necessary to get raw bytes?
value = rb_str_encode(value, bytes, 0, Qnil);
}
@@ -191,33 +201,33 @@
ret.str_val = Convert_StringData(value, arena);
break;
}
- case UPB_TYPE_MESSAGE:
+ case kUpb_CType_Message:
ret.msg_val =
Message_GetUpbMessage(value, type_info.def.msgdef, name, arena);
break;
- case UPB_TYPE_ENUM:
+ case kUpb_CType_Enum:
ret.int32_val = Convert_ToEnum(value, name, type_info.def.enumdef);
break;
- case UPB_TYPE_INT32:
- case UPB_TYPE_INT64:
- case UPB_TYPE_UINT32:
- case UPB_TYPE_UINT64:
+ case kUpb_CType_Int32:
+ case kUpb_CType_Int64:
+ case kUpb_CType_UInt32:
+ case kUpb_CType_UInt64:
Convert_CheckInt(name, type_info.type, value);
switch (type_info.type) {
- case UPB_TYPE_INT32:
- ret.int32_val = NUM2INT(value);
- break;
- case UPB_TYPE_INT64:
- ret.int64_val = NUM2LL(value);
- break;
- case UPB_TYPE_UINT32:
- ret.uint32_val = NUM2UINT(value);
- break;
- case UPB_TYPE_UINT64:
- ret.uint64_val = NUM2ULL(value);
- break;
- default:
- break;
+ case kUpb_CType_Int32:
+ ret.int32_val = NUM2INT(value);
+ break;
+ case kUpb_CType_Int64:
+ ret.int64_val = NUM2LL(value);
+ break;
+ case kUpb_CType_UInt32:
+ ret.uint32_val = NUM2UINT(value);
+ break;
+ case kUpb_CType_UInt64:
+ ret.uint64_val = NUM2ULL(value);
+ break;
+ default:
+ break;
}
break;
default:
@@ -227,45 +237,46 @@
return ret;
}
-VALUE Convert_UpbToRuby(upb_msgval upb_val, TypeInfo type_info, VALUE arena) {
+VALUE Convert_UpbToRuby(upb_MessageValue upb_val, TypeInfo type_info,
+ VALUE arena) {
switch (type_info.type) {
- case UPB_TYPE_FLOAT:
+ case kUpb_CType_Float:
return DBL2NUM(upb_val.float_val);
- case UPB_TYPE_DOUBLE:
+ case kUpb_CType_Double:
return DBL2NUM(upb_val.double_val);
- case UPB_TYPE_BOOL:
+ case kUpb_CType_Bool:
return upb_val.bool_val ? Qtrue : Qfalse;
- case UPB_TYPE_INT32:
+ case kUpb_CType_Int32:
return INT2NUM(upb_val.int32_val);
- case UPB_TYPE_INT64:
+ case kUpb_CType_Int64:
return LL2NUM(upb_val.int64_val);
- case UPB_TYPE_UINT32:
+ case kUpb_CType_UInt32:
return UINT2NUM(upb_val.uint32_val);
- case UPB_TYPE_UINT64:
+ case kUpb_CType_UInt64:
return ULL2NUM(upb_val.int64_val);
- case UPB_TYPE_ENUM: {
- const char* name =
- upb_enumdef_iton(type_info.def.enumdef, upb_val.int32_val);
- if (name) {
- return ID2SYM(rb_intern(name));
+ case kUpb_CType_Enum: {
+ const upb_EnumValueDef *ev = upb_EnumDef_FindValueByNumber(
+ type_info.def.enumdef, upb_val.int32_val);
+ if (ev) {
+ return ID2SYM(rb_intern(upb_EnumValueDef_Name(ev)));
} else {
return INT2NUM(upb_val.int32_val);
}
}
- case UPB_TYPE_STRING: {
+ case kUpb_CType_String: {
VALUE str_rb = rb_str_new(upb_val.str_val.data, upb_val.str_val.size);
rb_enc_associate(str_rb, rb_utf8_encoding());
rb_obj_freeze(str_rb);
return str_rb;
}
- case UPB_TYPE_BYTES: {
+ case kUpb_CType_Bytes: {
VALUE str_rb = rb_str_new(upb_val.str_val.data, upb_val.str_val.size);
rb_enc_associate(str_rb, rb_ascii8bit_encoding());
rb_obj_freeze(str_rb);
return str_rb;
}
- case UPB_TYPE_MESSAGE:
- return Message_GetRubyWrapper((upb_msg*)upb_val.msg_val,
+ case kUpb_CType_Message:
+ return Message_GetRubyWrapper((upb_Message*)upb_val.msg_val,
type_info.def.msgdef, arena);
default:
rb_raise(rb_eRuntimeError, "Convert_UpbToRuby(): Unexpected type %d",
@@ -273,24 +284,24 @@
}
}
-upb_msgval Msgval_DeepCopy(upb_msgval msgval, TypeInfo type_info,
- upb_arena* arena) {
- upb_msgval new_msgval;
+upb_MessageValue Msgval_DeepCopy(upb_MessageValue msgval, TypeInfo type_info,
+ upb_Arena* arena) {
+ upb_MessageValue new_msgval;
switch (type_info.type) {
default:
memcpy(&new_msgval, &msgval, sizeof(msgval));
break;
- case UPB_TYPE_STRING:
- case UPB_TYPE_BYTES: {
+ case kUpb_CType_String:
+ case kUpb_CType_Bytes: {
size_t n = msgval.str_val.size;
- char *mem = upb_arena_malloc(arena, n);
+ char* mem = upb_Arena_Malloc(arena, n);
new_msgval.str_val.data = mem;
new_msgval.str_val.size = n;
memcpy(mem, msgval.str_val.data, n);
break;
}
- case UPB_TYPE_MESSAGE:
+ case kUpb_CType_Message:
new_msgval.msg_val =
Message_deep_copy(msgval.msg_val, type_info.def.msgdef, arena);
break;
@@ -299,48 +310,50 @@
return new_msgval;
}
-bool Msgval_IsEqual(upb_msgval val1, upb_msgval val2, TypeInfo type_info) {
+bool Msgval_IsEqual(upb_MessageValue val1, upb_MessageValue val2,
+ TypeInfo type_info) {
switch (type_info.type) {
- case UPB_TYPE_BOOL:
+ case kUpb_CType_Bool:
return memcmp(&val1, &val2, 1) == 0;
- case UPB_TYPE_FLOAT:
- case UPB_TYPE_INT32:
- case UPB_TYPE_UINT32:
- case UPB_TYPE_ENUM:
+ case kUpb_CType_Float:
+ case kUpb_CType_Int32:
+ case kUpb_CType_UInt32:
+ case kUpb_CType_Enum:
return memcmp(&val1, &val2, 4) == 0;
- case UPB_TYPE_DOUBLE:
- case UPB_TYPE_INT64:
- case UPB_TYPE_UINT64:
+ case kUpb_CType_Double:
+ case kUpb_CType_Int64:
+ case kUpb_CType_UInt64:
return memcmp(&val1, &val2, 8) == 0;
- case UPB_TYPE_STRING:
- case UPB_TYPE_BYTES:
+ case kUpb_CType_String:
+ case kUpb_CType_Bytes:
return val1.str_val.size == val2.str_val.size &&
- memcmp(val1.str_val.data, val2.str_val.data,
- val1.str_val.size) == 0;
- case UPB_TYPE_MESSAGE:
+ memcmp(val1.str_val.data, val2.str_val.data, val1.str_val.size) ==
+ 0;
+ case kUpb_CType_Message:
return Message_Equal(val1.msg_val, val2.msg_val, type_info.def.msgdef);
default:
rb_raise(rb_eRuntimeError, "Internal error, unexpected type");
}
}
-uint64_t Msgval_GetHash(upb_msgval val, TypeInfo type_info, uint64_t seed) {
+uint64_t Msgval_GetHash(upb_MessageValue val, TypeInfo type_info,
+ uint64_t seed) {
switch (type_info.type) {
- case UPB_TYPE_BOOL:
+ case kUpb_CType_Bool:
return Wyhash(&val, 1, seed, kWyhashSalt);
- case UPB_TYPE_FLOAT:
- case UPB_TYPE_INT32:
- case UPB_TYPE_UINT32:
- case UPB_TYPE_ENUM:
+ case kUpb_CType_Float:
+ case kUpb_CType_Int32:
+ case kUpb_CType_UInt32:
+ case kUpb_CType_Enum:
return Wyhash(&val, 4, seed, kWyhashSalt);
- case UPB_TYPE_DOUBLE:
- case UPB_TYPE_INT64:
- case UPB_TYPE_UINT64:
+ case kUpb_CType_Double:
+ case kUpb_CType_Int64:
+ case kUpb_CType_UInt64:
return Wyhash(&val, 8, seed, kWyhashSalt);
- case UPB_TYPE_STRING:
- case UPB_TYPE_BYTES:
+ case kUpb_CType_String:
+ case kUpb_CType_Bytes:
return Wyhash(val.str_val.data, val.str_val.size, seed, kWyhashSalt);
- case UPB_TYPE_MESSAGE:
+ case kUpb_CType_Message:
return Message_Hash(val.msg_val, type_info.def.msgdef, seed);
default:
rb_raise(rb_eRuntimeError, "Internal error, unexpected type");
diff --git a/ruby/ext/google/protobuf_c/convert.h b/ruby/ext/google/protobuf_c/convert.h
index cda18a0..e48c979 100644
--- a/ruby/ext/google/protobuf_c/convert.h
+++ b/ruby/ext/google/protobuf_c/convert.h
@@ -36,7 +36,7 @@
#include "protobuf.h"
#include "ruby-upb.h"
-// Converts |ruby_val| to a upb_msgval according to |type_info|.
+// Converts |ruby_val| to a upb_MessageValue according to |type_info|.
//
// The |arena| parameter indicates the lifetime of the container where this
// value will be assigned. It is used as follows:
@@ -47,8 +47,8 @@
// - If type is message and the Ruby value is a message instance, we will fuse
// the message's arena into |arena|, to ensure that this message outlives the
// container.
-upb_msgval Convert_RubyToUpb(VALUE ruby_val, const char *name,
- TypeInfo type_info, upb_arena *arena);
+upb_MessageValue Convert_RubyToUpb(VALUE ruby_val, const char *name,
+ TypeInfo type_info, upb_Arena *arena);
// Converts |upb_val| to a Ruby VALUE according to |type_info|. This may involve
// creating a Ruby wrapper object.
@@ -56,17 +56,20 @@
// The |arena| parameter indicates the arena that owns the lifetime of
// |upb_val|. Any Ruby wrapper object that is created will reference |arena|
// and ensure it outlives the wrapper.
-VALUE Convert_UpbToRuby(upb_msgval upb_val, TypeInfo type_info, VALUE arena);
+VALUE Convert_UpbToRuby(upb_MessageValue upb_val, TypeInfo type_info,
+ VALUE arena);
// Creates a deep copy of |msgval| in |arena|.
-upb_msgval Msgval_DeepCopy(upb_msgval msgval, TypeInfo type_info,
- upb_arena *arena);
+upb_MessageValue Msgval_DeepCopy(upb_MessageValue msgval, TypeInfo type_info,
+ upb_Arena *arena);
// Returns true if |val1| and |val2| are equal. Their type is given by
// |type_info|.
-bool Msgval_IsEqual(upb_msgval val1, upb_msgval val2, TypeInfo type_info);
+bool Msgval_IsEqual(upb_MessageValue val1, upb_MessageValue val2,
+ TypeInfo type_info);
-// Returns a hash value for the given upb_msgval.
-uint64_t Msgval_GetHash(upb_msgval val, TypeInfo type_info, uint64_t seed);
+// Returns a hash value for the given upb_MessageValue.
+uint64_t Msgval_GetHash(upb_MessageValue val, TypeInfo type_info,
+ uint64_t seed);
#endif // RUBY_PROTOBUF_CONVERT_H_
diff --git a/ruby/ext/google/protobuf_c/defs.c b/ruby/ext/google/protobuf_c/defs.c
index fd32cce..aaa8b4d 100644
--- a/ruby/ext/google/protobuf_c/defs.c
+++ b/ruby/ext/google/protobuf_c/defs.c
@@ -41,11 +41,11 @@
// instances.
// -----------------------------------------------------------------------------
-static VALUE get_msgdef_obj(VALUE descriptor_pool, const upb_msgdef* def);
-static VALUE get_enumdef_obj(VALUE descriptor_pool, const upb_enumdef* def);
-static VALUE get_fielddef_obj(VALUE descriptor_pool, const upb_fielddef* def);
-static VALUE get_filedef_obj(VALUE descriptor_pool, const upb_filedef* def);
-static VALUE get_oneofdef_obj(VALUE descriptor_pool, const upb_oneofdef* def);
+static VALUE get_msgdef_obj(VALUE descriptor_pool, const upb_MessageDef* def);
+static VALUE get_enumdef_obj(VALUE descriptor_pool, const upb_EnumDef* def);
+static VALUE get_fielddef_obj(VALUE descriptor_pool, const upb_FieldDef* def);
+static VALUE get_filedef_obj(VALUE descriptor_pool, const upb_FileDef* def);
+static VALUE get_oneofdef_obj(VALUE descriptor_pool, const upb_OneofDef* def);
// A distinct object that is not accessible from Ruby. We use this as a
// constructor argument to enforce that certain objects cannot be created from
@@ -74,7 +74,7 @@
typedef struct {
VALUE def_to_descriptor; // Hash table of def* -> Ruby descriptor.
- upb_symtab* symtab;
+ upb_DefPool* symtab;
} DescriptorPool;
VALUE cDescriptorPool = Qnil;
@@ -90,14 +90,14 @@
static void DescriptorPool_free(void* _self) {
DescriptorPool* self = _self;
- upb_symtab_free(self->symtab);
+ upb_DefPool_Free(self->symtab);
xfree(self);
}
static const rb_data_type_t DescriptorPool_type = {
- "Google::Protobuf::DescriptorPool",
- {DescriptorPool_mark, DescriptorPool_free, NULL},
- .flags = RUBY_TYPED_FREE_IMMEDIATELY,
+ "Google::Protobuf::DescriptorPool",
+ {DescriptorPool_mark, DescriptorPool_free, NULL},
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
};
static DescriptorPool* ruby_to_DescriptorPool(VALUE val) {
@@ -107,8 +107,8 @@
}
// Exposed to other modules in defs.h.
-const upb_symtab *DescriptorPool_GetSymtab(VALUE desc_pool_rb) {
- DescriptorPool *pool = ruby_to_DescriptorPool(desc_pool_rb);
+const upb_DefPool* DescriptorPool_GetSymtab(VALUE desc_pool_rb) {
+ DescriptorPool* pool = ruby_to_DescriptorPool(desc_pool_rb);
return pool->symtab;
}
@@ -126,7 +126,7 @@
ret = TypedData_Wrap_Struct(klass, &DescriptorPool_type, self);
self->def_to_descriptor = rb_hash_new();
- self->symtab = upb_symtab_new();
+ self->symtab = upb_DefPool_New();
ObjectCache_Add(self->symtab, ret);
return ret;
@@ -143,7 +143,7 @@
DescriptorPool* self = ruby_to_DescriptorPool(_self);
Check_Type(serialized_file_proto, T_STRING);
VALUE arena_rb = Arena_new();
- upb_arena *arena = Arena_get(arena_rb);
+ upb_Arena* arena = Arena_get(arena_rb);
google_protobuf_FileDescriptorProto* file_proto =
google_protobuf_FileDescriptorProto_parse(
RSTRING_PTR(serialized_file_proto),
@@ -151,13 +151,13 @@
if (!file_proto) {
rb_raise(rb_eArgError, "Unable to parse FileDescriptorProto");
}
- upb_status status;
- upb_status_clear(&status);
- const upb_filedef* filedef =
- upb_symtab_addfile(self->symtab, file_proto, &status);
+ upb_Status status;
+ upb_Status_Clear(&status);
+ const upb_FileDef* filedef =
+ upb_DefPool_AddFile(self->symtab, file_proto, &status);
if (!filedef) {
rb_raise(cTypeError, "Unable to build file to DescriptorPool: %s",
- upb_status_errmsg(&status));
+ upb_Status_ErrorMessage(&status));
}
return get_filedef_obj(_self, filedef);
}
@@ -172,15 +172,15 @@
static VALUE DescriptorPool_lookup(VALUE _self, VALUE name) {
DescriptorPool* self = ruby_to_DescriptorPool(_self);
const char* name_str = get_str(name);
- const upb_msgdef* msgdef;
- const upb_enumdef* enumdef;
+ const upb_MessageDef* msgdef;
+ const upb_EnumDef* enumdef;
- msgdef = upb_symtab_lookupmsg(self->symtab, name_str);
+ msgdef = upb_DefPool_FindMessageByName(self->symtab, name_str);
if (msgdef) {
return get_msgdef_obj(_self, msgdef);
}
- enumdef = upb_symtab_lookupenum(self->symtab, name_str);
+ enumdef = upb_DefPool_FindEnumByName(self->symtab, name_str);
if (enumdef) {
return get_enumdef_obj(_self, enumdef);
}
@@ -202,8 +202,7 @@
}
static void DescriptorPool_register(VALUE module) {
- VALUE klass = rb_define_class_under(
- module, "DescriptorPool", rb_cObject);
+ VALUE klass = rb_define_class_under(module, "DescriptorPool", rb_cObject);
rb_define_alloc_func(klass, DescriptorPool_alloc);
rb_define_method(klass, "add_serialized_file",
DescriptorPool_add_serialized_file, 1);
@@ -222,7 +221,7 @@
// -----------------------------------------------------------------------------
typedef struct {
- const upb_msgdef* msgdef;
+ const upb_MessageDef* msgdef;
VALUE klass;
VALUE descriptor_pool;
} Descriptor;
@@ -236,9 +235,9 @@
}
static const rb_data_type_t Descriptor_type = {
- "Google::Protobuf::Descriptor",
- {Descriptor_mark, RUBY_DEFAULT_FREE, NULL},
- .flags = RUBY_TYPED_FREE_IMMEDIATELY,
+ "Google::Protobuf::Descriptor",
+ {Descriptor_mark, RUBY_DEFAULT_FREE, NULL},
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
};
static Descriptor* ruby_to_Descriptor(VALUE val) {
@@ -281,7 +280,7 @@
}
self->descriptor_pool = descriptor_pool;
- self->msgdef = (const upb_msgdef*)NUM2ULL(ptr);
+ self->msgdef = (const upb_MessageDef*)NUM2ULL(ptr);
return Qnil;
}
@@ -294,7 +293,8 @@
*/
static VALUE Descriptor_file_descriptor(VALUE _self) {
Descriptor* self = ruby_to_Descriptor(_self);
- return get_filedef_obj(self->descriptor_pool, upb_msgdef_file(self->msgdef));
+ return get_filedef_obj(self->descriptor_pool,
+ upb_MessageDef_File(self->msgdef));
}
/*
@@ -306,7 +306,7 @@
*/
static VALUE Descriptor_name(VALUE _self) {
Descriptor* self = ruby_to_Descriptor(_self);
- return rb_str_maybe_null(upb_msgdef_fullname(self->msgdef));
+ return rb_str_maybe_null(upb_MessageDef_FullName(self->msgdef));
}
/*
@@ -318,11 +318,9 @@
static VALUE Descriptor_each(VALUE _self) {
Descriptor* self = ruby_to_Descriptor(_self);
- upb_msg_field_iter it;
- for (upb_msg_field_begin(&it, self->msgdef);
- !upb_msg_field_done(&it);
- upb_msg_field_next(&it)) {
- const upb_fielddef* field = upb_msg_iter_field(&it);
+ int n = upb_MessageDef_FieldCount(self->msgdef);
+ for (int i = 0; i < n; i++) {
+ const upb_FieldDef* field = upb_MessageDef_Field(self->msgdef, i);
VALUE obj = get_fielddef_obj(self->descriptor_pool, field);
rb_yield(obj);
}
@@ -339,7 +337,7 @@
static VALUE Descriptor_lookup(VALUE _self, VALUE name) {
Descriptor* self = ruby_to_Descriptor(_self);
const char* s = get_str(name);
- const upb_fielddef* field = upb_msgdef_ntofz(self->msgdef, s);
+ const upb_FieldDef* field = upb_MessageDef_FindFieldByName(self->msgdef, s);
if (field == NULL) {
return Qnil;
}
@@ -356,11 +354,9 @@
static VALUE Descriptor_each_oneof(VALUE _self) {
Descriptor* self = ruby_to_Descriptor(_self);
- upb_msg_oneof_iter it;
- for (upb_msg_oneof_begin(&it, self->msgdef);
- !upb_msg_oneof_done(&it);
- upb_msg_oneof_next(&it)) {
- const upb_oneofdef* oneof = upb_msg_iter_oneof(&it);
+ int n = upb_MessageDef_OneofCount(self->msgdef);
+ for (int i = 0; i < n; i++) {
+ const upb_OneofDef* oneof = upb_MessageDef_Oneof(self->msgdef, i);
VALUE obj = get_oneofdef_obj(self->descriptor_pool, oneof);
rb_yield(obj);
}
@@ -377,7 +373,7 @@
static VALUE Descriptor_lookup_oneof(VALUE _self, VALUE name) {
Descriptor* self = ruby_to_Descriptor(_self);
const char* s = get_str(name);
- const upb_oneofdef* oneof = upb_msgdef_ntooz(self->msgdef, s);
+ const upb_OneofDef* oneof = upb_MessageDef_FindOneofByName(self->msgdef, s);
if (oneof == NULL) {
return Qnil;
}
@@ -399,8 +395,7 @@
}
static void Descriptor_register(VALUE module) {
- VALUE klass = rb_define_class_under(
- module, "Descriptor", rb_cObject);
+ VALUE klass = rb_define_class_under(module, "Descriptor", rb_cObject);
rb_define_alloc_func(klass, Descriptor_alloc);
rb_define_method(klass, "initialize", Descriptor_initialize, 3);
rb_define_method(klass, "each", Descriptor_each, 0);
@@ -420,8 +415,8 @@
// -----------------------------------------------------------------------------
typedef struct {
- const upb_filedef* filedef;
- VALUE descriptor_pool; // Owns the upb_filedef.
+ const upb_FileDef* filedef;
+ VALUE descriptor_pool; // Owns the upb_FileDef.
} FileDescriptor;
static VALUE cFileDescriptor = Qnil;
@@ -432,9 +427,9 @@
}
static const rb_data_type_t FileDescriptor_type = {
- "Google::Protobuf::FileDescriptor",
- {FileDescriptor_mark, RUBY_DEFAULT_FREE, NULL},
- .flags = RUBY_TYPED_FREE_IMMEDIATELY,
+ "Google::Protobuf::FileDescriptor",
+ {FileDescriptor_mark, RUBY_DEFAULT_FREE, NULL},
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
};
static FileDescriptor* ruby_to_FileDescriptor(VALUE val) {
@@ -459,7 +454,7 @@
* to a builder.
*/
static VALUE FileDescriptor_initialize(VALUE _self, VALUE cookie,
- VALUE descriptor_pool, VALUE ptr) {
+ VALUE descriptor_pool, VALUE ptr) {
FileDescriptor* self = ruby_to_FileDescriptor(_self);
if (cookie != c_only_cookie) {
@@ -468,7 +463,7 @@
}
self->descriptor_pool = descriptor_pool;
- self->filedef = (const upb_filedef*)NUM2ULL(ptr);
+ self->filedef = (const upb_FileDef*)NUM2ULL(ptr);
return Qnil;
}
@@ -481,7 +476,7 @@
*/
static VALUE FileDescriptor_name(VALUE _self) {
FileDescriptor* self = ruby_to_FileDescriptor(_self);
- const char* name = upb_filedef_name(self->filedef);
+ const char* name = upb_FileDef_Name(self->filedef);
return name == NULL ? Qnil : rb_str_new2(name);
}
@@ -497,16 +492,18 @@
static VALUE FileDescriptor_syntax(VALUE _self) {
FileDescriptor* self = ruby_to_FileDescriptor(_self);
- switch (upb_filedef_syntax(self->filedef)) {
- case UPB_SYNTAX_PROTO3: return ID2SYM(rb_intern("proto3"));
- case UPB_SYNTAX_PROTO2: return ID2SYM(rb_intern("proto2"));
- default: return Qnil;
+ switch (upb_FileDef_Syntax(self->filedef)) {
+ case kUpb_Syntax_Proto3:
+ return ID2SYM(rb_intern("proto3"));
+ case kUpb_Syntax_Proto2:
+ return ID2SYM(rb_intern("proto2"));
+ default:
+ return Qnil;
}
}
static void FileDescriptor_register(VALUE module) {
- VALUE klass = rb_define_class_under(
- module, "FileDescriptor", rb_cObject);
+ VALUE klass = rb_define_class_under(module, "FileDescriptor", rb_cObject);
rb_define_alloc_func(klass, FileDescriptor_alloc);
rb_define_method(klass, "initialize", FileDescriptor_initialize, 3);
rb_define_method(klass, "name", FileDescriptor_name, 0);
@@ -520,8 +517,8 @@
// -----------------------------------------------------------------------------
typedef struct {
- const upb_fielddef* fielddef;
- VALUE descriptor_pool; // Owns the upb_fielddef.
+ const upb_FieldDef* fielddef;
+ VALUE descriptor_pool; // Owns the upb_FieldDef.
} FieldDescriptor;
static VALUE cFieldDescriptor = Qnil;
@@ -532,9 +529,9 @@
}
static const rb_data_type_t FieldDescriptor_type = {
- "Google::Protobuf::FieldDescriptor",
- {FieldDescriptor_mark, RUBY_DEFAULT_FREE, NULL},
- .flags = RUBY_TYPED_FREE_IMMEDIATELY,
+ "Google::Protobuf::FieldDescriptor",
+ {FieldDescriptor_mark, RUBY_DEFAULT_FREE, NULL},
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
};
static FieldDescriptor* ruby_to_FieldDescriptor(VALUE val) {
@@ -573,7 +570,7 @@
}
self->descriptor_pool = descriptor_pool;
- self->fielddef = (const upb_fielddef*)NUM2ULL(ptr);
+ self->fielddef = (const upb_FieldDef*)NUM2ULL(ptr);
return Qnil;
}
@@ -586,31 +583,31 @@
*/
static VALUE FieldDescriptor_name(VALUE _self) {
FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
- return rb_str_maybe_null(upb_fielddef_name(self->fielddef));
+ return rb_str_maybe_null(upb_FieldDef_Name(self->fielddef));
}
// Non-static, exposed to other .c files.
-upb_fieldtype_t ruby_to_fieldtype(VALUE type) {
+upb_CType ruby_to_fieldtype(VALUE type) {
if (TYPE(type) != T_SYMBOL) {
rb_raise(rb_eArgError, "Expected symbol for field type.");
}
-#define CONVERT(upb, ruby) \
- if (SYM2ID(type) == rb_intern( # ruby )) { \
- return UPB_TYPE_ ## upb; \
+#define CONVERT(upb, ruby) \
+ if (SYM2ID(type) == rb_intern(#ruby)) { \
+ return kUpb_CType_##upb; \
}
- CONVERT(FLOAT, float);
- CONVERT(DOUBLE, double);
- CONVERT(BOOL, bool);
- CONVERT(STRING, string);
- CONVERT(BYTES, bytes);
- CONVERT(MESSAGE, message);
- CONVERT(ENUM, enum);
- CONVERT(INT32, int32);
- CONVERT(INT64, int64);
- CONVERT(UINT32, uint32);
- CONVERT(UINT64, uint64);
+ CONVERT(Float, float);
+ CONVERT(Double, double);
+ CONVERT(Bool, bool);
+ CONVERT(String, string);
+ CONVERT(Bytes, bytes);
+ CONVERT(Message, message);
+ CONVERT(Enum, enum);
+ CONVERT(Int32, int32);
+ CONVERT(Int64, int64);
+ CONVERT(UInt32, uint32);
+ CONVERT(UInt64, uint64);
#undef CONVERT
@@ -618,28 +615,29 @@
return 0;
}
-static VALUE descriptortype_to_ruby(upb_descriptortype_t type) {
+static VALUE descriptortype_to_ruby(upb_FieldType type) {
switch (type) {
-#define CONVERT(upb, ruby) \
- case UPB_DESCRIPTOR_TYPE_ ## upb : return ID2SYM(rb_intern( # ruby ));
- CONVERT(FLOAT, float);
- CONVERT(DOUBLE, double);
- CONVERT(BOOL, bool);
- CONVERT(STRING, string);
- CONVERT(BYTES, bytes);
- CONVERT(MESSAGE, message);
- CONVERT(GROUP, group);
- CONVERT(ENUM, enum);
- CONVERT(INT32, int32);
- CONVERT(INT64, int64);
- CONVERT(UINT32, uint32);
- CONVERT(UINT64, uint64);
- CONVERT(SINT32, sint32);
- CONVERT(SINT64, sint64);
- CONVERT(FIXED32, fixed32);
- CONVERT(FIXED64, fixed64);
- CONVERT(SFIXED32, sfixed32);
- CONVERT(SFIXED64, sfixed64);
+#define CONVERT(upb, ruby) \
+ case kUpb_FieldType_##upb: \
+ return ID2SYM(rb_intern(#ruby));
+ CONVERT(Float, float);
+ CONVERT(Double, double);
+ CONVERT(Bool, bool);
+ CONVERT(String, string);
+ CONVERT(Bytes, bytes);
+ CONVERT(Message, message);
+ CONVERT(Group, group);
+ CONVERT(Enum, enum);
+ CONVERT(Int32, int32);
+ CONVERT(Int64, int64);
+ CONVERT(UInt32, uint32);
+ CONVERT(UInt64, uint64);
+ CONVERT(SInt32, sint32);
+ CONVERT(SInt64, sint64);
+ CONVERT(Fixed32, fixed32);
+ CONVERT(Fixed64, fixed64);
+ CONVERT(SFixed32, sfixed32);
+ CONVERT(SFixed64, sfixed64);
#undef CONVERT
}
return Qnil;
@@ -657,7 +655,7 @@
*/
static VALUE FieldDescriptor__type(VALUE _self) {
FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
- return descriptortype_to_ruby(upb_fielddef_descriptortype(self->fielddef));
+ return descriptortype_to_ruby(upb_FieldDef_Type(self->fielddef));
}
/*
@@ -668,17 +666,16 @@
*/
static VALUE FieldDescriptor_default(VALUE _self) {
FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
- const upb_fielddef *f = self->fielddef;
- upb_msgval default_val = {0};
- if (upb_fielddef_issubmsg(f)) {
+ const upb_FieldDef* f = self->fielddef;
+ upb_MessageValue default_val = {0};
+ if (upb_FieldDef_IsSubMessage(f)) {
return Qnil;
- } else if (!upb_fielddef_isseq(f)) {
- default_val = upb_fielddef_default(f);
+ } else if (!upb_FieldDef_IsRepeated(f)) {
+ default_val = upb_FieldDef_Default(f);
}
return Convert_UpbToRuby(default_val, TypeInfo_get(self->fielddef), Qnil);
}
-
/*
* call-seq:
* FieldDescriptor.json_name => json_name
@@ -687,8 +684,8 @@
*/
static VALUE FieldDescriptor_json_name(VALUE _self) {
FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
- const upb_fielddef *f = self->fielddef;
- const char *json_name = upb_fielddef_jsonname(f);
+ const upb_FieldDef* f = self->fielddef;
+ const char* json_name = upb_FieldDef_JsonName(f);
return rb_str_new2(json_name);
}
@@ -703,13 +700,14 @@
*/
static VALUE FieldDescriptor_label(VALUE _self) {
FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
- switch (upb_fielddef_label(self->fielddef)) {
-#define CONVERT(upb, ruby) \
- case UPB_LABEL_ ## upb : return ID2SYM(rb_intern( # ruby ));
+ switch (upb_FieldDef_Label(self->fielddef)) {
+#define CONVERT(upb, ruby) \
+ case kUpb_Label_##upb: \
+ return ID2SYM(rb_intern(#ruby));
- CONVERT(OPTIONAL, optional);
- CONVERT(REQUIRED, required);
- CONVERT(REPEATED, repeated);
+ CONVERT(Optional, optional);
+ CONVERT(Required, required);
+ CONVERT(Repeated, repeated);
#undef CONVERT
}
@@ -725,7 +723,7 @@
*/
static VALUE FieldDescriptor_number(VALUE _self) {
FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
- return INT2NUM(upb_fielddef_number(self->fielddef));
+ return INT2NUM(upb_FieldDef_Number(self->fielddef));
}
/*
@@ -739,13 +737,13 @@
*/
static VALUE FieldDescriptor_submsg_name(VALUE _self) {
FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
- switch (upb_fielddef_type(self->fielddef)) {
- case UPB_TYPE_ENUM:
+ switch (upb_FieldDef_CType(self->fielddef)) {
+ case kUpb_CType_Enum:
return rb_str_new2(
- upb_enumdef_fullname(upb_fielddef_enumsubdef(self->fielddef)));
- case UPB_TYPE_MESSAGE:
+ upb_EnumDef_FullName(upb_FieldDef_EnumSubDef(self->fielddef)));
+ case kUpb_CType_Message:
return rb_str_new2(
- upb_msgdef_fullname(upb_fielddef_msgsubdef(self->fielddef)));
+ upb_MessageDef_FullName(upb_FieldDef_MessageSubDef(self->fielddef)));
default:
return Qnil;
}
@@ -762,13 +760,13 @@
*/
static VALUE FieldDescriptor_subtype(VALUE _self) {
FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
- switch (upb_fielddef_type(self->fielddef)) {
- case UPB_TYPE_ENUM:
+ switch (upb_FieldDef_CType(self->fielddef)) {
+ case kUpb_CType_Enum:
return get_enumdef_obj(self->descriptor_pool,
- upb_fielddef_enumsubdef(self->fielddef));
- case UPB_TYPE_MESSAGE:
+ upb_FieldDef_EnumSubDef(self->fielddef));
+ case kUpb_CType_Message:
return get_msgdef_obj(self->descriptor_pool,
- upb_fielddef_msgsubdef(self->fielddef));
+ upb_FieldDef_MessageSubDef(self->fielddef));
default:
return Qnil;
}
@@ -783,11 +781,11 @@
*/
static VALUE FieldDescriptor_get(VALUE _self, VALUE msg_rb) {
FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
- const upb_msgdef *m;
+ const upb_MessageDef* m;
Message_Get(msg_rb, &m);
- if (m != upb_fielddef_containingtype(self->fielddef)) {
+ if (m != upb_FieldDef_ContainingType(self->fielddef)) {
rb_raise(cTypeError, "get method called on wrong message type");
}
@@ -803,16 +801,16 @@
*/
static VALUE FieldDescriptor_has(VALUE _self, VALUE msg_rb) {
FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
- const upb_msgdef *m;
- const upb_msgdef *msg = Message_Get(msg_rb, &m);
+ const upb_MessageDef* m;
+ const upb_MessageDef* msg = Message_Get(msg_rb, &m);
- if (m != upb_fielddef_containingtype(self->fielddef)) {
+ if (m != upb_FieldDef_ContainingType(self->fielddef)) {
rb_raise(cTypeError, "has method called on wrong message type");
- } else if (!upb_fielddef_haspresence(self->fielddef)) {
+ } else if (!upb_FieldDef_HasPresence(self->fielddef)) {
rb_raise(rb_eArgError, "does not track presence");
}
- return upb_msg_has(msg, self->fielddef) ? Qtrue : Qfalse;
+ return upb_Message_Has(msg, self->fielddef) ? Qtrue : Qfalse;
}
/*
@@ -823,14 +821,14 @@
*/
static VALUE FieldDescriptor_clear(VALUE _self, VALUE msg_rb) {
FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
- const upb_msgdef *m;
- upb_msgdef *msg = Message_GetMutable(msg_rb, &m);
+ const upb_MessageDef* m;
+ upb_MessageDef* msg = Message_GetMutable(msg_rb, &m);
- if (m != upb_fielddef_containingtype(self->fielddef)) {
+ if (m != upb_FieldDef_ContainingType(self->fielddef)) {
rb_raise(cTypeError, "has method called on wrong message type");
}
- upb_msg_clearfield(msg, self->fielddef);
+ upb_Message_ClearField(msg, self->fielddef);
return Qnil;
}
@@ -844,24 +842,23 @@
*/
static VALUE FieldDescriptor_set(VALUE _self, VALUE msg_rb, VALUE value) {
FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
- const upb_msgdef *m;
- upb_msgdef *msg = Message_GetMutable(msg_rb, &m);
- upb_arena *arena = Arena_get(Message_GetArena(msg_rb));
- upb_msgval msgval;
+ const upb_MessageDef* m;
+ upb_MessageDef* msg = Message_GetMutable(msg_rb, &m);
+ upb_Arena* arena = Arena_get(Message_GetArena(msg_rb));
+ upb_MessageValue msgval;
- if (m != upb_fielddef_containingtype(self->fielddef)) {
+ if (m != upb_FieldDef_ContainingType(self->fielddef)) {
rb_raise(cTypeError, "set method called on wrong message type");
}
- msgval = Convert_RubyToUpb(value, upb_fielddef_name(self->fielddef),
+ msgval = Convert_RubyToUpb(value, upb_FieldDef_Name(self->fielddef),
TypeInfo_get(self->fielddef), arena);
- upb_msg_set(msg, self->fielddef, msgval, arena);
+ upb_Message_Set(msg, self->fielddef, msgval, arena);
return Qnil;
}
static void FieldDescriptor_register(VALUE module) {
- VALUE klass = rb_define_class_under(
- module, "FieldDescriptor", rb_cObject);
+ VALUE klass = rb_define_class_under(module, "FieldDescriptor", rb_cObject);
rb_define_alloc_func(klass, FieldDescriptor_alloc);
rb_define_method(klass, "initialize", FieldDescriptor_initialize, 3);
rb_define_method(klass, "name", FieldDescriptor_name, 0);
@@ -885,8 +882,8 @@
// -----------------------------------------------------------------------------
typedef struct {
- const upb_oneofdef* oneofdef;
- VALUE descriptor_pool; // Owns the upb_oneofdef.
+ const upb_OneofDef* oneofdef;
+ VALUE descriptor_pool; // Owns the upb_OneofDef.
} OneofDescriptor;
static VALUE cOneofDescriptor = Qnil;
@@ -930,7 +927,7 @@
* Creates a descriptor wrapper object. May only be called from C.
*/
static VALUE OneofDescriptor_initialize(VALUE _self, VALUE cookie,
- VALUE descriptor_pool, VALUE ptr) {
+ VALUE descriptor_pool, VALUE ptr) {
OneofDescriptor* self = ruby_to_OneofDescriptor(_self);
if (cookie != c_only_cookie) {
@@ -939,7 +936,7 @@
}
self->descriptor_pool = descriptor_pool;
- self->oneofdef = (const upb_oneofdef*)NUM2ULL(ptr);
+ self->oneofdef = (const upb_OneofDef*)NUM2ULL(ptr);
return Qnil;
}
@@ -952,7 +949,7 @@
*/
static VALUE OneofDescriptor_name(VALUE _self) {
OneofDescriptor* self = ruby_to_OneofDescriptor(_self);
- return rb_str_maybe_null(upb_oneofdef_name(self->oneofdef));
+ return rb_str_maybe_null(upb_OneofDef_Name(self->oneofdef));
}
/*
@@ -963,11 +960,10 @@
*/
static VALUE OneofDescriptor_each(VALUE _self) {
OneofDescriptor* self = ruby_to_OneofDescriptor(_self);
- upb_oneof_iter it;
- for (upb_oneof_begin(&it, self->oneofdef);
- !upb_oneof_done(&it);
- upb_oneof_next(&it)) {
- const upb_fielddef* f = upb_oneof_iter_field(&it);
+
+ int n = upb_OneofDef_FieldCount(self->oneofdef);
+ for (int i = 0; i < n; i++) {
+ const upb_FieldDef* f = upb_OneofDef_Field(self->oneofdef, i);
VALUE obj = get_fielddef_obj(self->descriptor_pool, f);
rb_yield(obj);
}
@@ -975,8 +971,7 @@
}
static void OneofDescriptor_register(VALUE module) {
- VALUE klass = rb_define_class_under(
- module, "OneofDescriptor", rb_cObject);
+ VALUE klass = rb_define_class_under(module, "OneofDescriptor", rb_cObject);
rb_define_alloc_func(klass, OneofDescriptor_alloc);
rb_define_method(klass, "initialize", OneofDescriptor_initialize, 3);
rb_define_method(klass, "name", OneofDescriptor_name, 0);
@@ -991,9 +986,9 @@
// -----------------------------------------------------------------------------
typedef struct {
- const upb_enumdef* enumdef;
- VALUE module; // begins as nil
- VALUE descriptor_pool; // Owns the upb_enumdef.
+ const upb_EnumDef* enumdef;
+ VALUE module; // begins as nil
+ VALUE descriptor_pool; // Owns the upb_EnumDef.
} EnumDescriptor;
static VALUE cEnumDescriptor = Qnil;
@@ -1005,9 +1000,9 @@
}
static const rb_data_type_t EnumDescriptor_type = {
- "Google::Protobuf::EnumDescriptor",
- {EnumDescriptor_mark, RUBY_DEFAULT_FREE, NULL},
- .flags = RUBY_TYPED_FREE_IMMEDIATELY,
+ "Google::Protobuf::EnumDescriptor",
+ {EnumDescriptor_mark, RUBY_DEFAULT_FREE, NULL},
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
};
static EnumDescriptor* ruby_to_EnumDescriptor(VALUE val) {
@@ -1026,8 +1021,8 @@
}
// Exposed to other modules in defs.h.
-const upb_enumdef *EnumDescriptor_GetEnumDef(VALUE enum_desc_rb) {
- EnumDescriptor *desc = ruby_to_EnumDescriptor(enum_desc_rb);
+const upb_EnumDef* EnumDescriptor_GetEnumDef(VALUE enum_desc_rb) {
+ EnumDescriptor* desc = ruby_to_EnumDescriptor(enum_desc_rb);
return desc->enumdef;
}
@@ -1047,7 +1042,7 @@
}
self->descriptor_pool = descriptor_pool;
- self->enumdef = (const upb_enumdef*)NUM2ULL(ptr);
+ self->enumdef = (const upb_EnumDef*)NUM2ULL(ptr);
return Qnil;
}
@@ -1061,7 +1056,7 @@
static VALUE EnumDescriptor_file_descriptor(VALUE _self) {
EnumDescriptor* self = ruby_to_EnumDescriptor(_self);
return get_filedef_obj(self->descriptor_pool,
- upb_enumdef_file(self->enumdef));
+ upb_EnumDef_File(self->enumdef));
}
/*
@@ -1072,7 +1067,7 @@
*/
static VALUE EnumDescriptor_name(VALUE _self) {
EnumDescriptor* self = ruby_to_EnumDescriptor(_self);
- return rb_str_maybe_null(upb_enumdef_fullname(self->enumdef));
+ return rb_str_maybe_null(upb_EnumDef_FullName(self->enumdef));
}
/*
@@ -1084,10 +1079,11 @@
*/
static VALUE EnumDescriptor_lookup_name(VALUE _self, VALUE name) {
EnumDescriptor* self = ruby_to_EnumDescriptor(_self);
- const char* name_str= rb_id2name(SYM2ID(name));
- int32_t val = 0;
- if (upb_enumdef_ntoiz(self->enumdef, name_str, &val)) {
- return INT2NUM(val);
+ const char* name_str = rb_id2name(SYM2ID(name));
+ const upb_EnumValueDef *ev =
+ upb_EnumDef_FindValueByName(self->enumdef, name_str);
+ if (ev) {
+ return INT2NUM(upb_EnumValueDef_Number(ev));
} else {
return Qnil;
}
@@ -1103,9 +1099,9 @@
static VALUE EnumDescriptor_lookup_value(VALUE _self, VALUE number) {
EnumDescriptor* self = ruby_to_EnumDescriptor(_self);
int32_t val = NUM2INT(number);
- const char* name = upb_enumdef_iton(self->enumdef, val);
- if (name != NULL) {
- return ID2SYM(rb_intern(name));
+ const upb_EnumValueDef* ev = upb_EnumDef_FindValueByNumber(self->enumdef, val);
+ if (ev) {
+ return ID2SYM(rb_intern(upb_EnumValueDef_Name(ev)));
} else {
return Qnil;
}
@@ -1121,12 +1117,11 @@
static VALUE EnumDescriptor_each(VALUE _self) {
EnumDescriptor* self = ruby_to_EnumDescriptor(_self);
- upb_enum_iter it;
- for (upb_enum_begin(&it, self->enumdef);
- !upb_enum_done(&it);
- upb_enum_next(&it)) {
- VALUE key = ID2SYM(rb_intern(upb_enum_iter_name(&it)));
- VALUE number = INT2NUM(upb_enum_iter_number(&it));
+ int n = upb_EnumDef_ValueCount(self->enumdef);
+ for (int i = 0; i < n; i++) {
+ const upb_EnumValueDef* ev = upb_EnumDef_Value(self->enumdef, i);
+ VALUE key = ID2SYM(rb_intern(upb_EnumValueDef_Name(ev)));
+ VALUE number = INT2NUM(upb_EnumValueDef_Number(ev));
rb_yield_values(2, key, number);
}
@@ -1148,8 +1143,7 @@
}
static void EnumDescriptor_register(VALUE module) {
- VALUE klass = rb_define_class_under(
- module, "EnumDescriptor", rb_cObject);
+ VALUE klass = rb_define_class_under(module, "EnumDescriptor", rb_cObject);
rb_define_alloc_func(klass, EnumDescriptor_alloc);
rb_define_method(klass, "initialize", EnumDescriptor_initialize, 3);
rb_define_method(klass, "name", EnumDescriptor_name, 0);
@@ -1176,7 +1170,7 @@
if (def == Qnil) {
// Lazily create wrapper object.
- VALUE args[3] = { c_only_cookie, _descriptor_pool, key };
+ VALUE args[3] = {c_only_cookie, _descriptor_pool, key};
def = rb_class_new_instance(3, args, klass);
rb_hash_aset(descriptor_pool->def_to_descriptor, key, def);
}
@@ -1184,23 +1178,23 @@
return def;
}
-static VALUE get_msgdef_obj(VALUE descriptor_pool, const upb_msgdef* def) {
+static VALUE get_msgdef_obj(VALUE descriptor_pool, const upb_MessageDef* def) {
return get_def_obj(descriptor_pool, def, cDescriptor);
}
-static VALUE get_enumdef_obj(VALUE descriptor_pool, const upb_enumdef* def) {
+static VALUE get_enumdef_obj(VALUE descriptor_pool, const upb_EnumDef* def) {
return get_def_obj(descriptor_pool, def, cEnumDescriptor);
}
-static VALUE get_fielddef_obj(VALUE descriptor_pool, const upb_fielddef* def) {
+static VALUE get_fielddef_obj(VALUE descriptor_pool, const upb_FieldDef* def) {
return get_def_obj(descriptor_pool, def, cFieldDescriptor);
}
-static VALUE get_filedef_obj(VALUE descriptor_pool, const upb_filedef* def) {
+static VALUE get_filedef_obj(VALUE descriptor_pool, const upb_FileDef* def) {
return get_def_obj(descriptor_pool, def, cFileDescriptor);
}
-static VALUE get_oneofdef_obj(VALUE descriptor_pool, const upb_oneofdef* def) {
+static VALUE get_oneofdef_obj(VALUE descriptor_pool, const upb_OneofDef* def) {
return get_def_obj(descriptor_pool, def, cOneofDescriptor);
}
@@ -1210,8 +1204,8 @@
// Functions exposed to other modules in defs.h.
-VALUE Descriptor_DefToClass(const upb_msgdef *m) {
- const upb_symtab *symtab = upb_filedef_symtab(upb_msgdef_file(m));
+VALUE Descriptor_DefToClass(const upb_MessageDef* m) {
+ const upb_DefPool* symtab = upb_FileDef_Pool(upb_MessageDef_File(m));
VALUE pool = ObjectCache_Get(symtab);
PBRUBY_ASSERT(pool != Qnil);
VALUE desc_rb = get_msgdef_obj(pool, m);
@@ -1219,15 +1213,16 @@
return desc->klass;
}
-const upb_msgdef *Descriptor_GetMsgDef(VALUE desc_rb) {
+const upb_MessageDef* Descriptor_GetMsgDef(VALUE desc_rb) {
const Descriptor* desc = ruby_to_Descriptor(desc_rb);
return desc->msgdef;
}
-VALUE TypeInfo_InitArg(int argc, VALUE *argv, int skip_arg) {
+VALUE TypeInfo_InitArg(int argc, VALUE* argv, int skip_arg) {
if (argc > skip_arg) {
if (argc > 1 + skip_arg) {
- rb_raise(rb_eArgError, "Expected a maximum of %d arguments.", skip_arg + 1);
+ rb_raise(rb_eArgError, "Expected a maximum of %d arguments.",
+ skip_arg + 1);
}
return argv[skip_arg];
} else {
@@ -1239,7 +1234,7 @@
VALUE* type_class, VALUE* init_arg) {
TypeInfo ret = {ruby_to_fieldtype(argv[skip_arg])};
- if (ret.type == UPB_TYPE_MESSAGE || ret.type == UPB_TYPE_ENUM) {
+ if (ret.type == kUpb_CType_Message || ret.type == kUpb_CType_Enum) {
*init_arg = TypeInfo_InitArg(argc, argv, skip_arg + 2);
if (argc < 2 + skip_arg) {
@@ -1257,11 +1252,11 @@
"class or enum as returned by the DescriptorPool.");
}
- if (ret.type == UPB_TYPE_MESSAGE) {
+ if (ret.type == kUpb_CType_Message) {
ret.def.msgdef = ruby_to_Descriptor(desc)->msgdef;
Message_CheckClass(klass);
} else {
- PBRUBY_ASSERT(ret.type == UPB_TYPE_ENUM);
+ PBRUBY_ASSERT(ret.type == kUpb_CType_Enum);
ret.def.enumdef = ruby_to_EnumDescriptor(desc)->enumdef;
}
} else {
diff --git a/ruby/ext/google/protobuf_c/defs.h b/ruby/ext/google/protobuf_c/defs.h
index 97a94bb..f559cb0 100644
--- a/ruby/ext/google/protobuf_c/defs.h
+++ b/ruby/ext/google/protobuf_c/defs.h
@@ -40,9 +40,9 @@
// TypeInfo
// -----------------------------------------------------------------------------
-// This bundles a upb_fieldtype_t and msgdef/enumdef when appropriate. This is
+// This bundles a upb_CType and msgdef/enumdef when appropriate. This is
// convenient for functions that need type information but cannot necessarily
-// assume a upb_fielddef will be available.
+// assume a upb_FieldDef will be available.
//
// For example, Google::Protobuf::Map and Google::Protobuf::RepeatedField can
// be constructed with type information alone:
@@ -51,21 +51,21 @@
// Google::Protobuf::RepeatedField.new(:message, FooMessage)
typedef struct {
- upb_fieldtype_t type;
+ upb_CType type;
union {
- const upb_msgdef* msgdef; // When type == UPB_TYPE_MESSAGE
- const upb_enumdef* enumdef; // When type == UPB_TYPE_ENUM
+ const upb_MessageDef* msgdef; // When type == kUpb_CType_Message
+ const upb_EnumDef* enumdef; // When type == kUpb_CType_Enum
} def;
} TypeInfo;
-static inline TypeInfo TypeInfo_get(const upb_fielddef *f) {
- TypeInfo ret = {upb_fielddef_type(f), {NULL}};
+static inline TypeInfo TypeInfo_get(const upb_FieldDef* f) {
+ TypeInfo ret = {upb_FieldDef_CType(f), {NULL}};
switch (ret.type) {
- case UPB_TYPE_MESSAGE:
- ret.def.msgdef = upb_fielddef_msgsubdef(f);
+ case kUpb_CType_Message:
+ ret.def.msgdef = upb_FieldDef_MessageSubDef(f);
break;
- case UPB_TYPE_ENUM:
- ret.def.enumdef = upb_fielddef_enumsubdef(f);
+ case kUpb_CType_Enum:
+ ret.def.enumdef = upb_FieldDef_EnumSubDef(f);
break;
default:
break;
@@ -76,9 +76,9 @@
TypeInfo TypeInfo_FromClass(int argc, VALUE* argv, int skip_arg,
VALUE* type_class, VALUE* init_arg);
-static inline TypeInfo TypeInfo_from_type(upb_fieldtype_t type) {
+static inline TypeInfo TypeInfo_from_type(upb_CType type) {
TypeInfo ret = {type};
- assert(type != UPB_TYPE_MESSAGE && type != UPB_TYPE_ENUM);
+ assert(type != kUpb_CType_Message && type != kUpb_CType_Enum);
return ret;
}
@@ -86,17 +86,17 @@
// Other utilities
// -----------------------------------------------------------------------------
-VALUE Descriptor_DefToClass(const upb_msgdef *m);
+VALUE Descriptor_DefToClass(const upb_MessageDef* m);
// Returns the underlying msgdef, enumdef, or symtab (respectively) for the
// given Descriptor, EnumDescriptor, or DescriptorPool Ruby object.
-const upb_enumdef *EnumDescriptor_GetEnumDef(VALUE enum_desc_rb);
-const upb_symtab *DescriptorPool_GetSymtab(VALUE desc_pool_rb);
-const upb_msgdef *Descriptor_GetMsgDef(VALUE desc_rb);
+const upb_EnumDef* EnumDescriptor_GetEnumDef(VALUE enum_desc_rb);
+const upb_DefPool* DescriptorPool_GetSymtab(VALUE desc_pool_rb);
+const upb_MessageDef* Descriptor_GetMsgDef(VALUE desc_rb);
// Returns a upb field type for the given Ruby symbol
-// (eg. :float => UPB_TYPE_FLOAT).
-upb_fieldtype_t ruby_to_fieldtype(VALUE type);
+// (eg. :float => kUpb_CType_Float).
+upb_CType ruby_to_fieldtype(VALUE type);
// The singleton generated pool (a DescriptorPool object).
extern VALUE generated_pool;
diff --git a/ruby/ext/google/protobuf_c/map.c b/ruby/ext/google/protobuf_c/map.c
index 2f6de4d..5d30319 100644
--- a/ruby/ext/google/protobuf_c/map.c
+++ b/ruby/ext/google/protobuf_c/map.c
@@ -34,7 +34,7 @@
#include "protobuf.h"
// -----------------------------------------------------------------------------
-// Basic map operations on top of upb_map.
+// Basic map operations on top of upb_Map.
//
// Note that we roll our own `Map` container here because, as for
// `RepeatedField`, we want a strongly-typed container. This is so that any user
@@ -48,8 +48,8 @@
// -----------------------------------------------------------------------------
typedef struct {
- const upb_map *map; // Can convert to mutable when non-frozen.
- upb_fieldtype_t key_type;
+ const upb_Map* map; // Can convert to mutable when non-frozen.
+ upb_CType key_type;
TypeInfo value_type_info;
VALUE value_type_class;
VALUE arena;
@@ -62,9 +62,9 @@
}
const rb_data_type_t Map_type = {
- "Google::Protobuf::Map",
- { Map_mark, RUBY_DEFAULT_FREE, NULL },
- .flags = RUBY_TYPED_FREE_IMMEDIATELY,
+ "Google::Protobuf::Map",
+ {Map_mark, RUBY_DEFAULT_FREE, NULL},
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
};
VALUE cMap;
@@ -84,8 +84,8 @@
return TypedData_Wrap_Struct(klass, &Map_type, self);
}
-VALUE Map_GetRubyWrapper(upb_map* map, upb_fieldtype_t key_type,
- TypeInfo value_type, VALUE arena) {
+VALUE Map_GetRubyWrapper(upb_Map* map, upb_CType key_type, TypeInfo value_type,
+ VALUE arena) {
PBRUBY_ASSERT(map);
VALUE val = ObjectCache_Get(map);
@@ -99,8 +99,8 @@
self->arena = arena;
self->key_type = key_type;
self->value_type_info = value_type;
- if (self->value_type_info.type == UPB_TYPE_MESSAGE) {
- const upb_msgdef *val_m = self->value_type_info.def.msgdef;
+ if (self->value_type_info.type == kUpb_CType_Message) {
+ const upb_MessageDef* val_m = self->value_type_info.def.msgdef;
self->value_type_class = Descriptor_DefToClass(val_m);
}
}
@@ -108,9 +108,9 @@
return val;
}
-static VALUE Map_new_this_type(Map *from) {
+static VALUE Map_new_this_type(Map* from) {
VALUE arena_rb = Arena_new();
- upb_map* map = upb_map_new(Arena_get(arena_rb), from->key_type,
+ upb_Map* map = upb_Map_New(Arena_get(arena_rb), from->key_type,
from->value_type_info.type);
VALUE ret =
Map_GetRubyWrapper(map, from->key_type, from->value_type_info, arena_rb);
@@ -125,22 +125,22 @@
return ret;
}
-static upb_map *Map_GetMutable(VALUE _self) {
+static upb_Map* Map_GetMutable(VALUE _self) {
rb_check_frozen(_self);
- return (upb_map*)ruby_to_Map(_self)->map;
+ return (upb_Map*)ruby_to_Map(_self)->map;
}
-VALUE Map_CreateHash(const upb_map* map, upb_fieldtype_t key_type,
+VALUE Map_CreateHash(const upb_Map* map, upb_CType key_type,
TypeInfo val_info) {
VALUE hash = rb_hash_new();
- size_t iter = UPB_MAP_BEGIN;
+ size_t iter = kUpb_Map_Begin;
TypeInfo key_info = TypeInfo_from_type(key_type);
if (!map) return hash;
- while (upb_mapiter_next(map, &iter)) {
- upb_msgval key = upb_mapiter_key(map, iter);
- upb_msgval val = upb_mapiter_value(map, iter);
+ while (upb_MapIterator_Next(map, &iter)) {
+ upb_MessageValue key = upb_MapIterator_Key(map, iter);
+ upb_MessageValue val = upb_MapIterator_Value(map, iter);
VALUE key_val = Convert_UpbToRuby(key, key_info, Qnil);
VALUE val_val = Scalar_CreateHash(val, val_info);
rb_hash_aset(hash, key_val, val_val);
@@ -152,25 +152,26 @@
VALUE Map_deep_copy(VALUE obj) {
Map* self = ruby_to_Map(obj);
VALUE new_arena_rb = Arena_new();
- upb_arena *arena = Arena_get(new_arena_rb);
- upb_map* new_map =
- upb_map_new(arena, self->key_type, self->value_type_info.type);
- size_t iter = UPB_MAP_BEGIN;
- while (upb_mapiter_next(self->map, &iter)) {
- upb_msgval key = upb_mapiter_key(self->map, iter);
- upb_msgval val = upb_mapiter_value(self->map, iter);
- upb_msgval val_copy = Msgval_DeepCopy(val, self->value_type_info, arena);
- upb_map_set(new_map, key, val_copy, arena);
+ upb_Arena* arena = Arena_get(new_arena_rb);
+ upb_Map* new_map =
+ upb_Map_New(arena, self->key_type, self->value_type_info.type);
+ size_t iter = kUpb_Map_Begin;
+ while (upb_MapIterator_Next(self->map, &iter)) {
+ upb_MessageValue key = upb_MapIterator_Key(self->map, iter);
+ upb_MessageValue val = upb_MapIterator_Value(self->map, iter);
+ upb_MessageValue val_copy =
+ Msgval_DeepCopy(val, self->value_type_info, arena);
+ upb_Map_Set(new_map, key, val_copy, arena);
}
return Map_GetRubyWrapper(new_map, self->key_type, self->value_type_info,
new_arena_rb);
}
-const upb_map* Map_GetUpbMap(VALUE val, const upb_fielddef* field,
- upb_arena* arena) {
- const upb_fielddef* key_field = map_field_key(field);
- const upb_fielddef* value_field = map_field_value(field);
+const upb_Map* Map_GetUpbMap(VALUE val, const upb_FieldDef* field,
+ upb_Arena* arena) {
+ const upb_FieldDef* key_field = map_field_key(field);
+ const upb_FieldDef* value_field = map_field_value(field);
TypeInfo value_type_info = TypeInfo_get(value_field);
Map* self;
@@ -180,7 +181,7 @@
}
self = ruby_to_Map(val);
- if (self->key_type != upb_fielddef_type(key_field)) {
+ if (self->key_type != upb_FieldDef_CType(key_field)) {
rb_raise(cTypeError, "Map key type does not match field's key type");
}
if (self->value_type_info.type != value_type_info.type) {
@@ -194,16 +195,16 @@
return self->map;
}
-void Map_Inspect(StringBuilder* b, const upb_map* map, upb_fieldtype_t key_type,
+void Map_Inspect(StringBuilder* b, const upb_Map* map, upb_CType key_type,
TypeInfo val_type) {
bool first = true;
TypeInfo key_type_info = {key_type};
StringBuilder_Printf(b, "{");
if (map) {
- size_t iter = UPB_MAP_BEGIN;
- while (upb_mapiter_next(map, &iter)) {
- upb_msgval key = upb_mapiter_key(map, iter);
- upb_msgval val = upb_mapiter_value(map, iter);
+ size_t iter = kUpb_Map_Begin;
+ while (upb_MapIterator_Next(map, &iter)) {
+ upb_MessageValue key = upb_MapIterator_Key(map, iter);
+ upb_MessageValue val = upb_MapIterator_Value(map, iter);
if (first) {
first = false;
} else {
@@ -219,10 +220,12 @@
static int merge_into_self_callback(VALUE key, VALUE val, VALUE _self) {
Map* self = ruby_to_Map(_self);
- upb_arena *arena = Arena_get(self->arena);
- upb_msgval key_val = Convert_RubyToUpb(key, "", Map_keyinfo(self), arena);
- upb_msgval val_val = Convert_RubyToUpb(val, "", self->value_type_info, arena);
- upb_map_set(Map_GetMutable(_self), key_val, val_val, arena);
+ upb_Arena* arena = Arena_get(self->arena);
+ upb_MessageValue key_val =
+ Convert_RubyToUpb(key, "", Map_keyinfo(self), arena);
+ upb_MessageValue val_val =
+ Convert_RubyToUpb(val, "", self->value_type_info, arena);
+ upb_Map_Set(Map_GetMutable(_self), key_val, val_val, arena);
return ST_CONTINUE;
}
@@ -234,9 +237,9 @@
RTYPEDDATA_TYPE(hashmap) == &Map_type) {
Map* self = ruby_to_Map(_self);
Map* other = ruby_to_Map(hashmap);
- upb_arena *arena = Arena_get(self->arena);
- upb_msg *self_msg = Map_GetMutable(_self);
- size_t iter = UPB_MAP_BEGIN;
+ upb_Arena* arena = Arena_get(self->arena);
+ upb_Message* self_msg = Map_GetMutable(_self);
+ size_t iter = kUpb_Map_Begin;
Arena_fuse(other->arena, arena);
@@ -246,10 +249,10 @@
rb_raise(rb_eArgError, "Attempt to merge Map with mismatching types");
}
- while (upb_mapiter_next(other->map, &iter)) {
- upb_msgval key = upb_mapiter_key(other->map, iter);
- upb_msgval val = upb_mapiter_value(other->map, iter);
- upb_map_set(self_msg, key, val, arena);
+ while (upb_MapIterator_Next(other->map, &iter)) {
+ upb_MessageValue key = upb_MapIterator_Key(other->map, iter);
+ upb_MessageValue val = upb_MapIterator_Value(other->map, iter);
+ upb_Map_Set(self_msg, key, val, arena);
}
} else {
rb_raise(rb_eArgError, "Unknown type merging into Map");
@@ -305,20 +308,20 @@
// Check that the key type is an allowed type.
switch (self->key_type) {
- case UPB_TYPE_INT32:
- case UPB_TYPE_INT64:
- case UPB_TYPE_UINT32:
- case UPB_TYPE_UINT64:
- case UPB_TYPE_BOOL:
- case UPB_TYPE_STRING:
- case UPB_TYPE_BYTES:
+ case kUpb_CType_Int32:
+ case kUpb_CType_Int64:
+ case kUpb_CType_UInt32:
+ case kUpb_CType_UInt64:
+ case kUpb_CType_Bool:
+ case kUpb_CType_String:
+ case kUpb_CType_Bytes:
// These are OK.
break;
default:
rb_raise(rb_eArgError, "Invalid key type for map.");
}
- self->map = upb_map_new(Arena_get(self->arena), self->key_type,
+ self->map = upb_Map_New(Arena_get(self->arena), self->key_type,
self->value_type_info.type);
ObjectCache_Add(self->map, _self);
@@ -339,11 +342,11 @@
*/
static VALUE Map_each(VALUE _self) {
Map* self = ruby_to_Map(_self);
- size_t iter = UPB_MAP_BEGIN;
+ size_t iter = kUpb_Map_Begin;
- while (upb_mapiter_next(self->map, &iter)) {
- upb_msgval key = upb_mapiter_key(self->map, iter);
- upb_msgval val = upb_mapiter_value(self->map, iter);
+ while (upb_MapIterator_Next(self->map, &iter)) {
+ upb_MessageValue key = upb_MapIterator_Key(self->map, iter);
+ upb_MessageValue val = upb_MapIterator_Value(self->map, iter);
VALUE key_val = Convert_UpbToRuby(key, Map_keyinfo(self), self->arena);
VALUE val_val = Convert_UpbToRuby(val, self->value_type_info, self->arena);
rb_yield_values(2, key_val, val_val);
@@ -360,11 +363,11 @@
*/
static VALUE Map_keys(VALUE _self) {
Map* self = ruby_to_Map(_self);
- size_t iter = UPB_MAP_BEGIN;
+ size_t iter = kUpb_Map_Begin;
VALUE ret = rb_ary_new();
- while (upb_mapiter_next(self->map, &iter)) {
- upb_msgval key = upb_mapiter_key(self->map, iter);
+ while (upb_MapIterator_Next(self->map, &iter)) {
+ upb_MessageValue key = upb_MapIterator_Key(self->map, iter);
VALUE key_val = Convert_UpbToRuby(key, Map_keyinfo(self), self->arena);
rb_ary_push(ret, key_val);
}
@@ -380,11 +383,11 @@
*/
static VALUE Map_values(VALUE _self) {
Map* self = ruby_to_Map(_self);
- size_t iter = UPB_MAP_BEGIN;
+ size_t iter = kUpb_Map_Begin;
VALUE ret = rb_ary_new();
- while (upb_mapiter_next(self->map, &iter)) {
- upb_msgval val = upb_mapiter_value(self->map, iter);
+ while (upb_MapIterator_Next(self->map, &iter)) {
+ upb_MessageValue val = upb_MapIterator_Value(self->map, iter);
VALUE val_val = Convert_UpbToRuby(val, self->value_type_info, self->arena);
rb_ary_push(ret, val_val);
}
@@ -401,10 +404,11 @@
*/
static VALUE Map_index(VALUE _self, VALUE key) {
Map* self = ruby_to_Map(_self);
- upb_msgval key_upb = Convert_RubyToUpb(key, "", Map_keyinfo(self), NULL);
- upb_msgval val;
+ upb_MessageValue key_upb =
+ Convert_RubyToUpb(key, "", Map_keyinfo(self), NULL);
+ upb_MessageValue val;
- if (upb_map_get(self->map, key_upb, &val)) {
+ if (upb_Map_Get(self->map, key_upb, &val)) {
return Convert_UpbToRuby(val, self->value_type_info, self->arena);
} else {
return Qnil;
@@ -421,11 +425,13 @@
*/
static VALUE Map_index_set(VALUE _self, VALUE key, VALUE val) {
Map* self = ruby_to_Map(_self);
- upb_arena *arena = Arena_get(self->arena);
- upb_msgval key_upb = Convert_RubyToUpb(key, "", Map_keyinfo(self), NULL);
- upb_msgval val_upb = Convert_RubyToUpb(val, "", self->value_type_info, arena);
+ upb_Arena* arena = Arena_get(self->arena);
+ upb_MessageValue key_upb =
+ Convert_RubyToUpb(key, "", Map_keyinfo(self), NULL);
+ upb_MessageValue val_upb =
+ Convert_RubyToUpb(val, "", self->value_type_info, arena);
- upb_map_set(Map_GetMutable(_self), key_upb, val_upb, arena);
+ upb_Map_Set(Map_GetMutable(_self), key_upb, val_upb, arena);
return val;
}
@@ -439,9 +445,10 @@
*/
static VALUE Map_has_key(VALUE _self, VALUE key) {
Map* self = ruby_to_Map(_self);
- upb_msgval key_upb = Convert_RubyToUpb(key, "", Map_keyinfo(self), NULL);
+ upb_MessageValue key_upb =
+ Convert_RubyToUpb(key, "", Map_keyinfo(self), NULL);
- if (upb_map_get(self->map, key_upb, NULL)) {
+ if (upb_Map_Get(self->map, key_upb, NULL)) {
return Qtrue;
} else {
return Qfalse;
@@ -457,21 +464,22 @@
*/
static VALUE Map_delete(VALUE _self, VALUE key) {
Map* self = ruby_to_Map(_self);
- upb_msgval key_upb = Convert_RubyToUpb(key, "", Map_keyinfo(self), NULL);
- upb_msgval val_upb;
+ upb_MessageValue key_upb =
+ Convert_RubyToUpb(key, "", Map_keyinfo(self), NULL);
+ upb_MessageValue val_upb;
VALUE ret;
rb_check_frozen(_self);
- // TODO(haberman): make upb_map_delete() also capable of returning the deleted
+ // TODO(haberman): make upb_Map_Delete() also capable of returning the deleted
// value.
- if (upb_map_get(self->map, key_upb, &val_upb)) {
+ if (upb_Map_Get(self->map, key_upb, &val_upb)) {
ret = Convert_UpbToRuby(val_upb, self->value_type_info, self->arena);
} else {
ret = Qnil;
}
- upb_map_delete(Map_GetMutable(_self), key_upb);
+ upb_Map_Delete(Map_GetMutable(_self), key_upb);
return ret;
}
@@ -483,7 +491,7 @@
* Removes all entries from the map.
*/
static VALUE Map_clear(VALUE _self) {
- upb_map_clear(Map_GetMutable(_self));
+ upb_Map_Clear(Map_GetMutable(_self));
return Qnil;
}
@@ -495,7 +503,7 @@
*/
static VALUE Map_length(VALUE _self) {
Map* self = ruby_to_Map(_self);
- return ULL2NUM(upb_map_size(self->map));
+ return ULL2NUM(upb_Map_Size(self->map));
}
/*
@@ -509,16 +517,16 @@
Map* self = ruby_to_Map(_self);
VALUE new_map_rb = Map_new_this_type(self);
Map* new_self = ruby_to_Map(new_map_rb);
- size_t iter = UPB_MAP_BEGIN;
- upb_arena *arena = Arena_get(new_self->arena);
- upb_map *new_map = Map_GetMutable(new_map_rb);
+ size_t iter = kUpb_Map_Begin;
+ upb_Arena* arena = Arena_get(new_self->arena);
+ upb_Map* new_map = Map_GetMutable(new_map_rb);
Arena_fuse(self->arena, arena);
- while (upb_mapiter_next(self->map, &iter)) {
- upb_msgval key = upb_mapiter_key(self->map, iter);
- upb_msgval val = upb_mapiter_value(self->map, iter);
- upb_map_set(new_map, key, val, arena);
+ while (upb_MapIterator_Next(self->map, &iter)) {
+ upb_MessageValue key = upb_MapIterator_Key(self->map, iter);
+ upb_MessageValue val = upb_MapIterator_Value(self->map, iter);
+ upb_Map_Set(new_map, key, val, arena);
}
return new_map_rb;
@@ -559,18 +567,18 @@
self->value_type_class != other->value_type_class) {
return Qfalse;
}
- if (upb_map_size(self->map) != upb_map_size(other->map)) {
+ if (upb_Map_Size(self->map) != upb_Map_Size(other->map)) {
return Qfalse;
}
// For each member of self, check that an equal member exists at the same key
// in other.
- size_t iter = UPB_MAP_BEGIN;
- while (upb_mapiter_next(self->map, &iter)) {
- upb_msgval key = upb_mapiter_key(self->map, iter);
- upb_msgval val = upb_mapiter_value(self->map, iter);
- upb_msgval other_val;
- if (!upb_map_get(other->map, key, &other_val)) {
+ size_t iter = kUpb_Map_Begin;
+ while (upb_MapIterator_Next(self->map, &iter)) {
+ upb_MessageValue key = upb_MapIterator_Key(self->map, iter);
+ upb_MessageValue val = upb_MapIterator_Value(self->map, iter);
+ upb_MessageValue other_val;
+ if (!upb_Map_Get(other->map, key, &other_val)) {
// Not present in other map.
return Qfalse;
}
@@ -609,11 +617,11 @@
Map* self = ruby_to_Map(_self);
uint64_t hash = 0;
- size_t iter = UPB_MAP_BEGIN;
+ size_t iter = kUpb_Map_Begin;
TypeInfo key_info = {self->key_type};
- while (upb_mapiter_next(self->map, &iter)) {
- upb_msgval key = upb_mapiter_key(self->map, iter);
- upb_msgval val = upb_mapiter_value(self->map, iter);
+ while (upb_MapIterator_Next(self->map, &iter)) {
+ upb_MessageValue key = upb_MapIterator_Key(self->map, iter);
+ upb_MessageValue val = upb_MapIterator_Value(self->map, iter);
hash = Msgval_GetHash(key, key_info, hash);
hash = Msgval_GetHash(val, self->value_type_info, hash);
}
diff --git a/ruby/ext/google/protobuf_c/map.h b/ruby/ext/google/protobuf_c/map.h
index 411362c..7b4a151 100644
--- a/ruby/ext/google/protobuf_c/map.h
+++ b/ruby/ext/google/protobuf_c/map.h
@@ -38,22 +38,21 @@
// Returns a Ruby wrapper object for the given map, which will be created if
// one does not exist already.
-VALUE Map_GetRubyWrapper(upb_map *map, upb_fieldtype_t key_type,
- TypeInfo value_type, VALUE arena);
+VALUE Map_GetRubyWrapper(upb_Map *map, upb_CType key_type, TypeInfo value_type,
+ VALUE arena);
-// Gets the underlying upb_map for this Ruby map object, which must have
+// Gets the underlying upb_Map for this Ruby map object, which must have
// key/value type that match |field|. If this is not a map or the type doesn't
// match, raises an exception.
-const upb_map *Map_GetUpbMap(VALUE val, const upb_fielddef *field,
- upb_arena *arena);
+const upb_Map *Map_GetUpbMap(VALUE val, const upb_FieldDef *field,
+ upb_Arena *arena);
// Implements #inspect for this map by appending its contents to |b|.
-void Map_Inspect(StringBuilder *b, const upb_map *map, upb_fieldtype_t key_type,
+void Map_Inspect(StringBuilder *b, const upb_Map *map, upb_CType key_type,
TypeInfo val_type);
// Returns a new Hash object containing the contents of this Map.
-VALUE Map_CreateHash(const upb_map* map, upb_fieldtype_t key_type,
- TypeInfo val_info);
+VALUE Map_CreateHash(const upb_Map *map, upb_CType key_type, TypeInfo val_info);
// Returns a deep copy of this Map object.
VALUE Map_deep_copy(VALUE obj);
diff --git a/ruby/ext/google/protobuf_c/message.c b/ruby/ext/google/protobuf_c/message.c
index d07eba7..7feee75 100644
--- a/ruby/ext/google/protobuf_c/message.c
+++ b/ruby/ext/google/protobuf_c/message.c
@@ -40,7 +40,7 @@
static ID descriptor_instancevar_interned;
static VALUE initialize_rb_class_with_no_args(VALUE klass) {
- return rb_funcall(klass, rb_intern("new"), 0);
+ return rb_funcall(klass, rb_intern("new"), 0);
}
VALUE MessageOrEnum_GetDescriptor(VALUE klass) {
@@ -53,19 +53,20 @@
typedef struct {
VALUE arena;
- const upb_msg* msg; // Can get as mutable when non-frozen.
- const upb_msgdef* msgdef; // kept alive by self.class.descriptor reference.
+ const upb_Message* msg; // Can get as mutable when non-frozen.
+ const upb_MessageDef*
+ msgdef; // kept alive by self.class.descriptor reference.
} Message;
static void Message_mark(void* _self) {
- Message* self = (Message *)_self;
+ Message* self = (Message*)_self;
rb_gc_mark(self->arena);
}
static rb_data_type_t Message_type = {
- "Message",
- { Message_mark, RUBY_DEFAULT_FREE, NULL },
- .flags = RUBY_TYPED_FREE_IMMEDIATELY,
+ "Message",
+ {Message_mark, RUBY_DEFAULT_FREE, NULL},
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
};
static Message* ruby_to_Message(VALUE msg_rb) {
@@ -89,18 +90,18 @@
return ret;
}
-const upb_msg *Message_Get(VALUE msg_rb, const upb_msgdef **m) {
+const upb_Message* Message_Get(VALUE msg_rb, const upb_MessageDef** m) {
Message* msg = ruby_to_Message(msg_rb);
if (m) *m = msg->msgdef;
return msg->msg;
}
-upb_msg *Message_GetMutable(VALUE msg_rb, const upb_msgdef **m) {
+upb_Message* Message_GetMutable(VALUE msg_rb, const upb_MessageDef** m) {
rb_check_frozen(msg_rb);
- return (upb_msg*)Message_Get(msg_rb, m);
+ return (upb_Message*)Message_Get(msg_rb, m);
}
-void Message_InitPtr(VALUE self_, upb_msg *msg, VALUE arena) {
+void Message_InitPtr(VALUE self_, upb_Message* msg, VALUE arena) {
Message* self = ruby_to_Message(self_);
self->msg = msg;
self->arena = arena;
@@ -119,7 +120,8 @@
}
}
-VALUE Message_GetRubyWrapper(upb_msg* msg, const upb_msgdef* m, VALUE arena) {
+VALUE Message_GetRubyWrapper(upb_Message* msg, const upb_MessageDef* m,
+ VALUE arena) {
if (msg == NULL) return Qnil;
VALUE val = ObjectCache_Get(msg);
@@ -133,17 +135,17 @@
return val;
}
-void Message_PrintMessage(StringBuilder* b, const upb_msg* msg,
- const upb_msgdef* m) {
+void Message_PrintMessage(StringBuilder* b, const upb_Message* msg,
+ const upb_MessageDef* m) {
bool first = true;
- int n = upb_msgdef_fieldcount(m);
+ int n = upb_MessageDef_FieldCount(m);
VALUE klass = Descriptor_DefToClass(m);
StringBuilder_Printf(b, "<%s: ", rb_class2name(klass));
for (int i = 0; i < n; i++) {
- const upb_fielddef* field = upb_msgdef_field(m, i);
+ const upb_FieldDef* field = upb_MessageDef_Field(m, i);
- if (upb_fielddef_haspresence(field) && !upb_msg_has(msg, field)) {
+ if (upb_FieldDef_HasPresence(field) && !upb_Message_Has(msg, field)) {
continue;
}
@@ -153,17 +155,19 @@
first = false;
}
- upb_msgval msgval = upb_msg_get(msg, field);
+ upb_MessageValue msgval = upb_Message_Get(msg, field);
- StringBuilder_Printf(b, "%s: ", upb_fielddef_name(field));
+ StringBuilder_Printf(b, "%s: ", upb_FieldDef_Name(field));
- if (upb_fielddef_ismap(field)) {
- const upb_msgdef* entry_m = upb_fielddef_msgsubdef(field);
- const upb_fielddef* key_f = upb_msgdef_itof(entry_m, 1);
- const upb_fielddef* val_f = upb_msgdef_itof(entry_m, 2);
+ if (upb_FieldDef_IsMap(field)) {
+ const upb_MessageDef* entry_m = upb_FieldDef_MessageSubDef(field);
+ const upb_FieldDef* key_f =
+ upb_MessageDef_FindFieldByNumberWithSize(entry_m, 1);
+ const upb_FieldDef* val_f =
+ upb_MessageDef_FindFieldByNumberWithSize(entry_m, 2);
TypeInfo val_info = TypeInfo_get(val_f);
- Map_Inspect(b, msgval.map_val, upb_fielddef_type(key_f), val_info);
- } else if (upb_fielddef_isseq(field)) {
+ Map_Inspect(b, msgval.map_val, upb_FieldDef_CType(key_f), val_info);
+ } else if (upb_FieldDef_IsRepeated(field)) {
RepeatedField_Inspect(b, msgval.array_val, TypeInfo_get(field));
} else {
StringBuilder_PrintMsgval(b, msgval, TypeInfo_get(field));
@@ -187,14 +191,31 @@
};
// Check if the field is a well known wrapper type
-static bool IsWrapper(const upb_fielddef* f) {
- return upb_fielddef_issubmsg(f) &&
- upb_msgdef_iswrapper(upb_fielddef_msgsubdef(f));
+static bool IsWrapper(const upb_MessageDef* m) {
+ if (!m) return false;
+ switch (upb_MessageDef_WellKnownType(m)) {
+ case kUpb_WellKnown_DoubleValue:
+ case kUpb_WellKnown_FloatValue:
+ case kUpb_WellKnown_Int64Value:
+ case kUpb_WellKnown_UInt64Value:
+ case kUpb_WellKnown_Int32Value:
+ case kUpb_WellKnown_UInt32Value:
+ case kUpb_WellKnown_StringValue:
+ case kUpb_WellKnown_BytesValue:
+ case kUpb_WellKnown_BoolValue:
+ return true;
+ default:
+ return false;
+ }
}
-static bool Match(const upb_msgdef* m, const char* name, const upb_fielddef** f,
- const upb_oneofdef** o, const char* prefix,
- const char* suffix) {
+static bool IsFieldWrapper(const upb_FieldDef* f) {
+ return IsWrapper(upb_FieldDef_MessageSubDef(f));
+}
+
+static bool Match(const upb_MessageDef* m, const char* name,
+ const upb_FieldDef** f, const upb_OneofDef** o,
+ const char* prefix, const char* suffix) {
size_t sp = strlen(prefix);
size_t ss = strlen(suffix);
size_t sn = strlen(name);
@@ -206,12 +227,12 @@
return false;
}
- return upb_msgdef_lookupname(m, name + sp, sn - sp - ss, f, o);
+ return upb_MessageDef_FindByNameWithSize(m, name + sp, sn - sp - ss, f, o);
}
static int extract_method_call(VALUE method_name, Message* self,
- const upb_fielddef** f, const upb_oneofdef** o) {
- const upb_msgdef* m = self->msgdef;
+ const upb_FieldDef** f, const upb_OneofDef** o) {
+ const upb_MessageDef* m = self->msgdef;
const char* name;
Check_Type(method_name, T_SYMBOL);
@@ -221,156 +242,159 @@
if (Match(m, name, f, o, "", "=")) return METHOD_SETTER;
if (Match(m, name, f, o, "clear_", "")) return METHOD_CLEAR;
if (Match(m, name, f, o, "has_", "?") &&
- (*o || (*f && upb_fielddef_haspresence(*f)))) {
+ (*o || (*f && upb_FieldDef_HasPresence(*f)))) {
// Disallow oneof hazzers for proto3.
// TODO(haberman): remove this test when we are enabling oneof hazzers for
// proto3.
- if (*f && !upb_fielddef_issubmsg(*f) &&
- upb_fielddef_realcontainingoneof(*f) &&
- upb_msgdef_syntax(upb_fielddef_containingtype(*f)) !=
- UPB_SYNTAX_PROTO2) {
+ if (*f && !upb_FieldDef_IsSubMessage(*f) &&
+ upb_FieldDef_RealContainingOneof(*f) &&
+ upb_MessageDef_Syntax(upb_FieldDef_ContainingType(*f)) !=
+ kUpb_Syntax_Proto2) {
return METHOD_UNKNOWN;
}
return METHOD_PRESENCE;
}
- if (Match(m, name, f, o, "", "_as_value") && *f && !upb_fielddef_isseq(*f) &&
- IsWrapper(*f)) {
+ if (Match(m, name, f, o, "", "_as_value") && *f &&
+ !upb_FieldDef_IsRepeated(*f) && IsFieldWrapper(*f)) {
return METHOD_WRAPPER_GETTER;
}
- if (Match(m, name, f, o, "", "_as_value=") && *f && !upb_fielddef_isseq(*f) &&
- IsWrapper(*f)) {
+ if (Match(m, name, f, o, "", "_as_value=") && *f &&
+ !upb_FieldDef_IsRepeated(*f) && IsFieldWrapper(*f)) {
return METHOD_WRAPPER_SETTER;
}
if (Match(m, name, f, o, "", "_const") && *f &&
- upb_fielddef_type(*f) == UPB_TYPE_ENUM) {
+ upb_FieldDef_CType(*f) == kUpb_CType_Enum) {
return METHOD_ENUM_GETTER;
}
return METHOD_UNKNOWN;
}
-static VALUE Message_oneof_accessor(VALUE _self, const upb_oneofdef* o,
+static VALUE Message_oneof_accessor(VALUE _self, const upb_OneofDef* o,
int accessor_type) {
Message* self = ruby_to_Message(_self);
- const upb_fielddef* oneof_field = upb_msg_whichoneof(self->msg, o);
+ const upb_FieldDef* oneof_field = upb_Message_WhichOneof(self->msg, o);
switch (accessor_type) {
case METHOD_PRESENCE:
return oneof_field == NULL ? Qfalse : Qtrue;
case METHOD_CLEAR:
if (oneof_field != NULL) {
- upb_msg_clearfield(Message_GetMutable(_self, NULL), oneof_field);
+ upb_Message_ClearField(Message_GetMutable(_self, NULL), oneof_field);
}
return Qnil;
case METHOD_GETTER:
return oneof_field == NULL
? Qnil
- : ID2SYM(rb_intern(upb_fielddef_name(oneof_field)));
+ : ID2SYM(rb_intern(upb_FieldDef_Name(oneof_field)));
case METHOD_SETTER:
rb_raise(rb_eRuntimeError, "Oneof accessors are read-only.");
}
rb_raise(rb_eRuntimeError, "Invalid access of oneof field.");
}
-static void Message_setfield(upb_msg* msg, const upb_fielddef* f, VALUE val,
- upb_arena* arena) {
- upb_msgval msgval;
- if (upb_fielddef_ismap(f)) {
+static void Message_setfield(upb_Message* msg, const upb_FieldDef* f, VALUE val,
+ upb_Arena* arena) {
+ upb_MessageValue msgval;
+ if (upb_FieldDef_IsMap(f)) {
msgval.map_val = Map_GetUpbMap(val, f, arena);
- } else if (upb_fielddef_isseq(f)) {
+ } else if (upb_FieldDef_IsRepeated(f)) {
msgval.array_val = RepeatedField_GetUpbArray(val, f, arena);
} else {
if (val == Qnil &&
- (upb_fielddef_issubmsg(f) || upb_fielddef_realcontainingoneof(f))) {
- upb_msg_clearfield(msg, f);
+ (upb_FieldDef_IsSubMessage(f) || upb_FieldDef_RealContainingOneof(f))) {
+ upb_Message_ClearField(msg, f);
return;
}
msgval =
- Convert_RubyToUpb(val, upb_fielddef_name(f), TypeInfo_get(f), arena);
+ Convert_RubyToUpb(val, upb_FieldDef_Name(f), TypeInfo_get(f), arena);
}
- upb_msg_set(msg, f, msgval, arena);
+ upb_Message_Set(msg, f, msgval, arena);
}
-VALUE Message_getfield(VALUE _self, const upb_fielddef* f) {
+VALUE Message_getfield(VALUE _self, const upb_FieldDef* f) {
Message* self = ruby_to_Message(_self);
- // This is a special-case: upb_msg_mutable() for map & array are logically
+ // This is a special-case: upb_Message_Mutable() for map & array are logically
// const (they will not change what is serialized) but physically
// non-const, as they do allocate a repeated field or map. The logical
// constness means it's ok to do even if the message is frozen.
- upb_msg *msg = (upb_msg*)self->msg;
- upb_arena *arena = Arena_get(self->arena);
- if (upb_fielddef_ismap(f)) {
- upb_map *map = upb_msg_mutable(msg, f, arena).map;
- const upb_fielddef *key_f = map_field_key(f);
- const upb_fielddef *val_f = map_field_value(f);
- upb_fieldtype_t key_type = upb_fielddef_type(key_f);
+ upb_Message* msg = (upb_Message*)self->msg;
+ upb_Arena* arena = Arena_get(self->arena);
+ if (upb_FieldDef_IsMap(f)) {
+ upb_Map* map = upb_Message_Mutable(msg, f, arena).map;
+ const upb_FieldDef* key_f = map_field_key(f);
+ const upb_FieldDef* val_f = map_field_value(f);
+ upb_CType key_type = upb_FieldDef_CType(key_f);
TypeInfo value_type_info = TypeInfo_get(val_f);
return Map_GetRubyWrapper(map, key_type, value_type_info, self->arena);
- } else if (upb_fielddef_isseq(f)) {
- upb_array *arr = upb_msg_mutable(msg, f, arena).array;
+ } else if (upb_FieldDef_IsRepeated(f)) {
+ upb_Array* arr = upb_Message_Mutable(msg, f, arena).array;
return RepeatedField_GetRubyWrapper(arr, TypeInfo_get(f), self->arena);
- } else if (upb_fielddef_issubmsg(f)) {
- if (!upb_msg_has(self->msg, f)) return Qnil;
- upb_msg *submsg = upb_msg_mutable(msg, f, arena).msg;
- const upb_msgdef *m = upb_fielddef_msgsubdef(f);
+ } else if (upb_FieldDef_IsSubMessage(f)) {
+ if (!upb_Message_Has(self->msg, f)) return Qnil;
+ upb_Message* submsg = upb_Message_Mutable(msg, f, arena).msg;
+ const upb_MessageDef* m = upb_FieldDef_MessageSubDef(f);
return Message_GetRubyWrapper(submsg, m, self->arena);
} else {
- upb_msgval msgval = upb_msg_get(self->msg, f);
+ upb_MessageValue msgval = upb_Message_Get(self->msg, f);
return Convert_UpbToRuby(msgval, TypeInfo_get(f), self->arena);
}
}
-static VALUE Message_field_accessor(VALUE _self, const upb_fielddef* f,
+static VALUE Message_field_accessor(VALUE _self, const upb_FieldDef* f,
int accessor_type, int argc, VALUE* argv) {
- upb_arena *arena = Arena_get(Message_GetArena(_self));
+ upb_Arena* arena = Arena_get(Message_GetArena(_self));
switch (accessor_type) {
case METHOD_SETTER:
Message_setfield(Message_GetMutable(_self, NULL), f, argv[1], arena);
return Qnil;
case METHOD_CLEAR:
- upb_msg_clearfield(Message_GetMutable(_self, NULL), f);
+ upb_Message_ClearField(Message_GetMutable(_self, NULL), f);
return Qnil;
case METHOD_PRESENCE:
- if (!upb_fielddef_haspresence(f)) {
+ if (!upb_FieldDef_HasPresence(f)) {
rb_raise(rb_eRuntimeError, "Field does not have presence.");
}
- return upb_msg_has(Message_Get(_self, NULL), f);
+ return upb_Message_Has(Message_Get(_self, NULL), f);
case METHOD_WRAPPER_GETTER: {
Message* self = ruby_to_Message(_self);
- if (upb_msg_has(self->msg, f)) {
- PBRUBY_ASSERT(upb_fielddef_issubmsg(f) && !upb_fielddef_isseq(f));
- upb_msgval wrapper = upb_msg_get(self->msg, f);
- const upb_msgdef *wrapper_m = upb_fielddef_msgsubdef(f);
- const upb_fielddef *value_f = upb_msgdef_itof(wrapper_m, 1);
- upb_msgval value = upb_msg_get(wrapper.msg_val, value_f);
+ if (upb_Message_Has(self->msg, f)) {
+ PBRUBY_ASSERT(upb_FieldDef_IsSubMessage(f) &&
+ !upb_FieldDef_IsRepeated(f));
+ upb_MessageValue wrapper = upb_Message_Get(self->msg, f);
+ const upb_MessageDef* wrapper_m = upb_FieldDef_MessageSubDef(f);
+ const upb_FieldDef* value_f =
+ upb_MessageDef_FindFieldByNumberWithSize(wrapper_m, 1);
+ upb_MessageValue value = upb_Message_Get(wrapper.msg_val, value_f);
return Convert_UpbToRuby(value, TypeInfo_get(value_f), self->arena);
} else {
return Qnil;
}
}
case METHOD_WRAPPER_SETTER: {
- upb_msg *msg = Message_GetMutable(_self, NULL);
+ upb_Message* msg = Message_GetMutable(_self, NULL);
if (argv[1] == Qnil) {
- upb_msg_clearfield(msg, f);
+ upb_Message_ClearField(msg, f);
} else {
- const upb_fielddef *val_f = upb_msgdef_itof(upb_fielddef_msgsubdef(f), 1);
- upb_msgval msgval = Convert_RubyToUpb(argv[1], upb_fielddef_name(f),
- TypeInfo_get(val_f), arena);
- upb_msg *wrapper = upb_msg_mutable(msg, f, arena).msg;
- upb_msg_set(wrapper, val_f, msgval, arena);
+ const upb_FieldDef* val_f = upb_MessageDef_FindFieldByNumberWithSize(
+ upb_FieldDef_MessageSubDef(f), 1);
+ upb_MessageValue msgval = Convert_RubyToUpb(
+ argv[1], upb_FieldDef_Name(f), TypeInfo_get(val_f), arena);
+ upb_Message* wrapper = upb_Message_Mutable(msg, f, arena).msg;
+ upb_Message_Set(wrapper, val_f, msgval, arena);
}
return Qnil;
}
case METHOD_ENUM_GETTER: {
- upb_msgval msgval = upb_msg_get(Message_Get(_self, NULL), f);
+ upb_MessageValue msgval = upb_Message_Get(Message_Get(_self, NULL), f);
- if (upb_fielddef_label(f) == UPB_LABEL_REPEATED) {
+ if (upb_FieldDef_Label(f) == kUpb_Label_Repeated) {
// Map repeated fields to a new type with ints
VALUE arr = rb_ary_new();
- size_t i, n = upb_array_size(msgval.array_val);
+ size_t i, n = upb_Array_Size(msgval.array_val);
for (i = 0; i < n; i++) {
- upb_msgval elem = upb_array_get(msgval.array_val, i);
+ upb_MessageValue elem = upb_Array_Get(msgval.array_val, i);
rb_ary_push(arr, INT2NUM(elem.int32_val));
}
return arr;
@@ -415,8 +439,8 @@
*/
static VALUE Message_method_missing(int argc, VALUE* argv, VALUE _self) {
Message* self = ruby_to_Message(_self);
- const upb_oneofdef* o;
- const upb_fielddef* f;
+ const upb_OneofDef* o;
+ const upb_FieldDef* f;
int accessor_type;
if (argc < 1) {
@@ -453,8 +477,8 @@
static VALUE Message_respond_to_missing(int argc, VALUE* argv, VALUE _self) {
Message* self = ruby_to_Message(_self);
- const upb_oneofdef* o;
- const upb_fielddef* f;
+ const upb_OneofDef* o;
+ const upb_FieldDef* f;
int accessor_type;
if (argc < 1) {
@@ -472,53 +496,56 @@
}
}
-void Message_InitFromValue(upb_msg* msg, const upb_msgdef* m, VALUE val,
- upb_arena* arena);
+void Message_InitFromValue(upb_Message* msg, const upb_MessageDef* m, VALUE val,
+ upb_Arena* arena);
typedef struct {
- upb_map *map;
+ upb_Map* map;
TypeInfo key_type;
TypeInfo val_type;
- upb_arena *arena;
+ upb_Arena* arena;
} MapInit;
static int Map_initialize_kwarg(VALUE key, VALUE val, VALUE _self) {
- MapInit *map_init = (MapInit*)_self;
- upb_msgval k, v;
+ MapInit* map_init = (MapInit*)_self;
+ upb_MessageValue k, v;
k = Convert_RubyToUpb(key, "", map_init->key_type, NULL);
- if (map_init->val_type.type == UPB_TYPE_MESSAGE && TYPE(val) == T_HASH) {
- upb_msg *msg = upb_msg_new(map_init->val_type.def.msgdef, map_init->arena);
+ if (map_init->val_type.type == kUpb_CType_Message && TYPE(val) == T_HASH) {
+ upb_Message* msg =
+ upb_Message_New(map_init->val_type.def.msgdef, map_init->arena);
Message_InitFromValue(msg, map_init->val_type.def.msgdef, val,
map_init->arena);
v.msg_val = msg;
} else {
v = Convert_RubyToUpb(val, "", map_init->val_type, map_init->arena);
}
- upb_map_set(map_init->map, k, v, map_init->arena);
+ upb_Map_Set(map_init->map, k, v, map_init->arena);
return ST_CONTINUE;
}
-static void Map_InitFromValue(upb_map* map, const upb_fielddef* f, VALUE val,
- upb_arena* arena) {
- const upb_msgdef* entry_m = upb_fielddef_msgsubdef(f);
- const upb_fielddef* key_f = upb_msgdef_itof(entry_m, 1);
- const upb_fielddef* val_f = upb_msgdef_itof(entry_m, 2);
+static void Map_InitFromValue(upb_Map* map, const upb_FieldDef* f, VALUE val,
+ upb_Arena* arena) {
+ const upb_MessageDef* entry_m = upb_FieldDef_MessageSubDef(f);
+ const upb_FieldDef* key_f =
+ upb_MessageDef_FindFieldByNumberWithSize(entry_m, 1);
+ const upb_FieldDef* val_f =
+ upb_MessageDef_FindFieldByNumberWithSize(entry_m, 2);
if (TYPE(val) != T_HASH) {
rb_raise(rb_eArgError,
"Expected Hash object as initializer value for map field '%s' "
"(given %s).",
- upb_fielddef_name(f), rb_class2name(CLASS_OF(val)));
+ upb_FieldDef_Name(f), rb_class2name(CLASS_OF(val)));
}
MapInit map_init = {map, TypeInfo_get(key_f), TypeInfo_get(val_f), arena};
rb_hash_foreach(val, Map_initialize_kwarg, (VALUE)&map_init);
}
-static upb_msgval MessageValue_FromValue(VALUE val, TypeInfo info,
- upb_arena* arena) {
- if (info.type == UPB_TYPE_MESSAGE) {
- upb_msgval msgval;
- upb_msg* msg = upb_msg_new(info.def.msgdef, arena);
+static upb_MessageValue MessageValue_FromValue(VALUE val, TypeInfo info,
+ upb_Arena* arena) {
+ if (info.type == kUpb_CType_Message) {
+ upb_MessageValue msgval;
+ upb_Message* msg = upb_Message_New(info.def.msgdef, arena);
Message_InitFromValue(msg, info.def.msgdef, val, arena);
msgval.msg_val = msg;
return msgval;
@@ -527,61 +554,62 @@
}
}
-static void RepeatedField_InitFromValue(upb_array* arr, const upb_fielddef* f,
- VALUE val, upb_arena* arena) {
+static void RepeatedField_InitFromValue(upb_Array* arr, const upb_FieldDef* f,
+ VALUE val, upb_Arena* arena) {
TypeInfo type_info = TypeInfo_get(f);
if (TYPE(val) != T_ARRAY) {
rb_raise(rb_eArgError,
- "Expected array as initializer value for repeated field '%s' (given %s).",
- upb_fielddef_name(f), rb_class2name(CLASS_OF(val)));
+ "Expected array as initializer value for repeated field '%s' "
+ "(given %s).",
+ upb_FieldDef_Name(f), rb_class2name(CLASS_OF(val)));
}
for (int i = 0; i < RARRAY_LEN(val); i++) {
VALUE entry = rb_ary_entry(val, i);
- upb_msgval msgval;
- if (upb_fielddef_issubmsg(f) && TYPE(entry) == T_HASH) {
+ upb_MessageValue msgval;
+ if (upb_FieldDef_IsSubMessage(f) && TYPE(entry) == T_HASH) {
msgval = MessageValue_FromValue(entry, type_info, arena);
} else {
- msgval = Convert_RubyToUpb(entry, upb_fielddef_name(f), type_info, arena);
+ msgval = Convert_RubyToUpb(entry, upb_FieldDef_Name(f), type_info, arena);
}
- upb_array_append(arr, msgval, arena);
+ upb_Array_Append(arr, msgval, arena);
}
}
-static void Message_InitFieldFromValue(upb_msg* msg, const upb_fielddef* f,
- VALUE val, upb_arena* arena) {
+static void Message_InitFieldFromValue(upb_Message* msg, const upb_FieldDef* f,
+ VALUE val, upb_Arena* arena) {
if (TYPE(val) == T_NIL) return;
- if (upb_fielddef_ismap(f)) {
- upb_map *map = upb_msg_mutable(msg, f, arena).map;
+ if (upb_FieldDef_IsMap(f)) {
+ upb_Map* map = upb_Message_Mutable(msg, f, arena).map;
Map_InitFromValue(map, f, val, arena);
- } else if (upb_fielddef_label(f) == UPB_LABEL_REPEATED) {
- upb_array *arr = upb_msg_mutable(msg, f, arena).array;
+ } else if (upb_FieldDef_Label(f) == kUpb_Label_Repeated) {
+ upb_Array* arr = upb_Message_Mutable(msg, f, arena).array;
RepeatedField_InitFromValue(arr, f, val, arena);
- } else if (upb_fielddef_issubmsg(f)) {
+ } else if (upb_FieldDef_IsSubMessage(f)) {
if (TYPE(val) == T_HASH) {
- upb_msg *submsg = upb_msg_mutable(msg, f, arena).msg;
- Message_InitFromValue(submsg, upb_fielddef_msgsubdef(f), val, arena);
+ upb_Message* submsg = upb_Message_Mutable(msg, f, arena).msg;
+ Message_InitFromValue(submsg, upb_FieldDef_MessageSubDef(f), val, arena);
} else {
Message_setfield(msg, f, val, arena);
}
} else {
- upb_msgval msgval =
- Convert_RubyToUpb(val, upb_fielddef_name(f), TypeInfo_get(f), arena);
- upb_msg_set(msg, f, msgval, arena);
+ upb_MessageValue msgval =
+ Convert_RubyToUpb(val, upb_FieldDef_Name(f), TypeInfo_get(f), arena);
+ upb_Message_Set(msg, f, msgval, arena);
}
}
typedef struct {
- upb_msg *msg;
- const upb_msgdef *msgdef;
- upb_arena *arena;
+ upb_Message* msg;
+ const upb_MessageDef* msgdef;
+ upb_Arena* arena;
} MsgInit;
static int Message_initialize_kwarg(VALUE key, VALUE val, VALUE _self) {
- MsgInit *msg_init = (MsgInit*)_self;
- const char *name;
+ MsgInit* msg_init = (MsgInit*)_self;
+ const char* name;
if (TYPE(key) == T_STRING) {
name = RSTRING_PTR(key);
@@ -589,10 +617,12 @@
name = RSTRING_PTR(rb_id2str(SYM2ID(key)));
} else {
rb_raise(rb_eArgError,
- "Expected string or symbols as hash keys when initializing proto from hash.");
+ "Expected string or symbols as hash keys when initializing proto "
+ "from hash.");
}
- const upb_fielddef* f = upb_msgdef_ntofz(msg_init->msgdef, name);
+ const upb_FieldDef* f =
+ upb_MessageDef_FindFieldByName(msg_init->msgdef, name);
if (f == NULL) {
rb_raise(rb_eArgError,
@@ -603,8 +633,8 @@
return ST_CONTINUE;
}
-void Message_InitFromValue(upb_msg* msg, const upb_msgdef* m, VALUE val,
- upb_arena* arena) {
+void Message_InitFromValue(upb_Message* msg, const upb_MessageDef* m, VALUE val,
+ upb_Arena* arena) {
MsgInit msg_init = {msg, m, arena};
if (TYPE(val) == T_HASH) {
rb_hash_foreach(val, Message_initialize_kwarg, (VALUE)&msg_init);
@@ -629,8 +659,8 @@
static VALUE Message_initialize(int argc, VALUE* argv, VALUE _self) {
Message* self = ruby_to_Message(_self);
VALUE arena_rb = Arena_new();
- upb_arena *arena = Arena_get(arena_rb);
- upb_msg *msg = upb_msg_new(self->msgdef, arena);
+ upb_Arena* arena = Arena_get(arena_rb);
+ upb_Message* msg = upb_Message_New(self->msgdef, arena);
Message_InitPtr(_self, msg, arena_rb);
@@ -640,7 +670,7 @@
if (argc != 1) {
rb_raise(rb_eArgError, "Expected 0 or 1 arguments.");
}
- Message_InitFromValue((upb_msg*)self->msg, self->msgdef, argv[0], arena);
+ Message_InitFromValue((upb_Message*)self->msg, self->msgdef, argv[0], arena);
return Qnil;
}
@@ -654,34 +684,35 @@
Message* self = ruby_to_Message(_self);
VALUE new_msg = rb_class_new_instance(0, NULL, CLASS_OF(_self));
Message* new_msg_self = ruby_to_Message(new_msg);
- size_t size = upb_msgdef_layout(self->msgdef)->size;
+ size_t size = upb_MessageDef_MiniTable(self->msgdef)->size;
// TODO(copy unknown fields?)
// TODO(use official upb msg copy function)
- memcpy((upb_msg*)new_msg_self->msg, self->msg, size);
+ memcpy((upb_Message*)new_msg_self->msg, self->msg, size);
Arena_fuse(self->arena, Arena_get(new_msg_self->arena));
return new_msg;
}
// Support function for Message_eq, and also used by other #eq functions.
-bool Message_Equal(const upb_msg *m1, const upb_msg *m2, const upb_msgdef *m) {
+bool Message_Equal(const upb_Message* m1, const upb_Message* m2,
+ const upb_MessageDef* m) {
if (m1 == m2) return true;
size_t size1, size2;
- int encode_opts = UPB_ENCODE_SKIPUNKNOWN | UPB_ENCODE_DETERMINISTIC;
- upb_arena *arena_tmp = upb_arena_new();
- const upb_msglayout *layout = upb_msgdef_layout(m);
+ int encode_opts = kUpb_Encode_SkipUnknown | kUpb_Encode_Deterministic;
+ upb_Arena* arena_tmp = upb_Arena_New();
+ const upb_MiniTable* layout = upb_MessageDef_MiniTable(m);
// Compare deterministically serialized payloads with no unknown fields.
- char *data1 = upb_encode_ex(m1, layout, encode_opts, arena_tmp, &size1);
- char *data2 = upb_encode_ex(m2, layout, encode_opts, arena_tmp, &size2);
+ char* data1 = upb_Encode(m1, layout, encode_opts, arena_tmp, &size1);
+ char* data2 = upb_Encode(m2, layout, encode_opts, arena_tmp, &size2);
if (data1 && data2) {
bool ret = (size1 == size2) && (memcmp(data1, data2, size1) == 0);
- upb_arena_free(arena_tmp);
+ upb_Arena_Free(arena_tmp);
return ret;
} else {
- upb_arena_free(arena_tmp);
+ upb_Arena_Free(arena_tmp);
rb_raise(cParseError, "Error comparing messages");
}
}
@@ -705,22 +736,23 @@
return Message_Equal(self->msg, other->msg, self->msgdef) ? Qtrue : Qfalse;
}
-uint64_t Message_Hash(const upb_msg* msg, const upb_msgdef* m, uint64_t seed) {
- upb_arena *arena = upb_arena_new();
- const char *data;
+uint64_t Message_Hash(const upb_Message* msg, const upb_MessageDef* m,
+ uint64_t seed) {
+ upb_Arena* arena = upb_Arena_New();
+ const char* data;
size_t size;
// Hash a deterministically serialized payloads with no unknown fields.
- data = upb_encode_ex(msg, upb_msgdef_layout(m),
- UPB_ENCODE_SKIPUNKNOWN | UPB_ENCODE_DETERMINISTIC, arena,
- &size);
+ data = upb_Encode(msg, upb_MessageDef_MiniTable(m),
+ kUpb_Encode_SkipUnknown | kUpb_Encode_Deterministic, arena,
+ &size);
if (data) {
uint64_t ret = Wyhash(data, size, seed, kWyhashSalt);
- upb_arena_free(arena);
+ upb_Arena_Free(arena);
return ret;
} else {
- upb_arena_free(arena);
+ upb_Arena_Free(arena);
rb_raise(cParseError, "Error calculating hash");
}
}
@@ -759,13 +791,13 @@
// Support functions for Message_to_h //////////////////////////////////////////
-static VALUE RepeatedField_CreateArray(const upb_array* arr,
+static VALUE RepeatedField_CreateArray(const upb_Array* arr,
TypeInfo type_info) {
- int size = arr ? upb_array_size(arr) : 0;
+ int size = arr ? upb_Array_Size(arr) : 0;
VALUE ary = rb_ary_new2(size);
for (int i = 0; i < size; i++) {
- upb_msgval msgval = upb_array_get(arr, i);
+ upb_MessageValue msgval = upb_Array_Get(arr, i);
VALUE val = Scalar_CreateHash(msgval, type_info);
rb_ary_push(ary, val);
}
@@ -773,54 +805,57 @@
return ary;
}
-static VALUE Message_CreateHash(const upb_msg *msg, const upb_msgdef *m) {
+static VALUE Message_CreateHash(const upb_Message* msg,
+ const upb_MessageDef* m) {
if (!msg) return Qnil;
VALUE hash = rb_hash_new();
- int n = upb_msgdef_fieldcount(m);
+ int n = upb_MessageDef_FieldCount(m);
bool is_proto2;
// We currently have a few behaviors that are specific to proto2.
// This is unfortunate, we should key behaviors off field attributes (like
// whether a field has presence), not proto2 vs. proto3. We should see if we
// can change this without breaking users.
- is_proto2 = upb_msgdef_syntax(m) == UPB_SYNTAX_PROTO2;
+ is_proto2 = upb_MessageDef_Syntax(m) == kUpb_Syntax_Proto2;
for (int i = 0; i < n; i++) {
- const upb_fielddef* field = upb_msgdef_field(m, i);
+ const upb_FieldDef* field = upb_MessageDef_Field(m, i);
TypeInfo type_info = TypeInfo_get(field);
- upb_msgval msgval;
+ upb_MessageValue msgval;
VALUE msg_value;
VALUE msg_key;
- if (!is_proto2 && upb_fielddef_issubmsg(field) &&
- !upb_fielddef_isseq(field) && !upb_msg_has(msg, field)) {
+ if (!is_proto2 && upb_FieldDef_IsSubMessage(field) &&
+ !upb_FieldDef_IsRepeated(field) && !upb_Message_Has(msg, field)) {
// TODO: Legacy behavior, remove when we fix the is_proto2 differences.
- msg_key = ID2SYM(rb_intern(upb_fielddef_name(field)));
+ msg_key = ID2SYM(rb_intern(upb_FieldDef_Name(field)));
rb_hash_aset(hash, msg_key, Qnil);
continue;
}
// Do not include fields that are not present (oneof or optional fields).
- if (is_proto2 && upb_fielddef_haspresence(field) &&
- !upb_msg_has(msg, field)) {
+ if (is_proto2 && upb_FieldDef_HasPresence(field) &&
+ !upb_Message_Has(msg, field)) {
continue;
}
- msg_key = ID2SYM(rb_intern(upb_fielddef_name(field)));
- msgval = upb_msg_get(msg, field);
+ msg_key = ID2SYM(rb_intern(upb_FieldDef_Name(field)));
+ msgval = upb_Message_Get(msg, field);
// Proto2 omits empty map/repeated filds also.
- if (upb_fielddef_ismap(field)) {
- const upb_msgdef *entry_m = upb_fielddef_msgsubdef(field);
- const upb_fielddef *key_f = upb_msgdef_itof(entry_m, 1);
- const upb_fielddef *val_f = upb_msgdef_itof(entry_m, 2);
- upb_fieldtype_t key_type = upb_fielddef_type(key_f);
+ if (upb_FieldDef_IsMap(field)) {
+ const upb_MessageDef* entry_m = upb_FieldDef_MessageSubDef(field);
+ const upb_FieldDef* key_f =
+ upb_MessageDef_FindFieldByNumberWithSize(entry_m, 1);
+ const upb_FieldDef* val_f =
+ upb_MessageDef_FindFieldByNumberWithSize(entry_m, 2);
+ upb_CType key_type = upb_FieldDef_CType(key_f);
msg_value = Map_CreateHash(msgval.map_val, key_type, TypeInfo_get(val_f));
- } else if (upb_fielddef_isseq(field)) {
+ } else if (upb_FieldDef_IsRepeated(field)) {
if (is_proto2 &&
- (!msgval.array_val || upb_array_size(msgval.array_val) == 0)) {
+ (!msgval.array_val || upb_Array_Size(msgval.array_val) == 0)) {
continue;
}
msg_value = RepeatedField_CreateArray(msgval.array_val, type_info);
@@ -834,8 +869,8 @@
return hash;
}
-VALUE Scalar_CreateHash(upb_msgval msgval, TypeInfo type_info) {
- if (type_info.type == UPB_TYPE_MESSAGE) {
+VALUE Scalar_CreateHash(upb_MessageValue msgval, TypeInfo type_info) {
+ if (type_info.type == kUpb_CType_Message) {
return Message_CreateHash(msgval.msg_val, type_info.def.msgdef);
} else {
return Convert_UpbToRuby(msgval, type_info, Qnil);
@@ -878,10 +913,10 @@
*/
static VALUE Message_index(VALUE _self, VALUE field_name) {
Message* self = ruby_to_Message(_self);
- const upb_fielddef* field;
+ const upb_FieldDef* field;
Check_Type(field_name, T_STRING);
- field = upb_msgdef_ntofz(self->msgdef, RSTRING_PTR(field_name));
+ field = upb_MessageDef_FindFieldByName(self->msgdef, RSTRING_PTR(field_name));
if (field == NULL) {
return Qnil;
@@ -899,19 +934,19 @@
*/
static VALUE Message_index_set(VALUE _self, VALUE field_name, VALUE value) {
Message* self = ruby_to_Message(_self);
- const upb_fielddef* f;
- upb_msgval val;
- upb_arena *arena = Arena_get(self->arena);
+ const upb_FieldDef* f;
+ upb_MessageValue val;
+ upb_Arena* arena = Arena_get(self->arena);
Check_Type(field_name, T_STRING);
- f = upb_msgdef_ntofz(self->msgdef, RSTRING_PTR(field_name));
+ f = upb_MessageDef_FindFieldByName(self->msgdef, RSTRING_PTR(field_name));
if (f == NULL) {
rb_raise(rb_eArgError, "Unknown field: %s", RSTRING_PTR(field_name));
}
- val = Convert_RubyToUpb(value, upb_fielddef_name(f), TypeInfo_get(f), arena);
- upb_msg_set(Message_GetMutable(_self, NULL), f, val, arena);
+ val = Convert_RubyToUpb(value, upb_FieldDef_Name(f), TypeInfo_get(f), arena);
+ upb_Message_Set(Message_GetMutable(_self, NULL), f, val, arena);
return Qnil;
}
@@ -932,9 +967,11 @@
VALUE msg_rb = initialize_rb_class_with_no_args(klass);
Message* msg = ruby_to_Message(msg_rb);
- if (!upb_decode(RSTRING_PTR(data), RSTRING_LEN(data), (upb_msg*)msg->msg,
- upb_msgdef_layout(msg->msgdef),
- Arena_get(msg->arena))) {
+ upb_DecodeStatus status = upb_Decode(
+ RSTRING_PTR(data), RSTRING_LEN(data), (upb_Message*)msg->msg,
+ upb_MessageDef_MiniTable(msg->msgdef), NULL, 0, Arena_get(msg->arena));
+
+ if (status != kUpb_DecodeStatus_Ok) {
rb_raise(cParseError, "Error occurred during parsing");
}
@@ -956,10 +993,10 @@
static VALUE Message_decode_json(int argc, VALUE* argv, VALUE klass) {
VALUE data = argv[0];
int options = 0;
- upb_status status;
+ upb_Status status;
// TODO(haberman): use this message's pool instead.
- const upb_symtab *symtab = DescriptorPool_GetSymtab(generated_pool);
+ const upb_DefPool* symtab = DescriptorPool_GetSymtab(generated_pool);
if (argc < 1 || argc > 2) {
rb_raise(rb_eArgError, "Expected 1 or 2 arguments.");
@@ -971,8 +1008,9 @@
rb_raise(rb_eArgError, "Expected hash arguments.");
}
- if (RTEST(rb_hash_lookup2( hash_args, ID2SYM(rb_intern("ignore_unknown_fields")), Qfalse))) {
- options |= UPB_JSONDEC_IGNOREUNKNOWN;
+ if (RTEST(rb_hash_lookup2(
+ hash_args, ID2SYM(rb_intern("ignore_unknown_fields")), Qfalse))) {
+ options |= upb_JsonDecode_IgnoreUnknown;
}
}
@@ -988,16 +1026,16 @@
Message* msg = ruby_to_Message(msg_rb);
// We don't allow users to decode a wrapper type directly.
- if (upb_msgdef_iswrapper(msg->msgdef)) {
+ if (IsWrapper(msg->msgdef)) {
rb_raise(rb_eRuntimeError, "Cannot parse a wrapper directly.");
}
- upb_status_clear(&status);
- if (!upb_json_decode(RSTRING_PTR(data), RSTRING_LEN(data), (upb_msg*)msg->msg,
- msg->msgdef, symtab, options,
- Arena_get(msg->arena), &status)) {
+ upb_Status_Clear(&status);
+ if (!upb_JsonDecode(RSTRING_PTR(data), RSTRING_LEN(data),
+ (upb_Message*)msg->msg, msg->msgdef, symtab, options,
+ Arena_get(msg->arena), &status)) {
rb_raise(cParseError, "Error occurred during parsing: %s",
- upb_status_errmsg(&status));
+ upb_Status_ErrorMessage(&status));
}
return msg_rb;
@@ -1012,25 +1050,25 @@
*/
static VALUE Message_encode(VALUE klass, VALUE msg_rb) {
Message* msg = ruby_to_Message(msg_rb);
- const char *data;
+ const char* data;
size_t size;
if (CLASS_OF(msg_rb) != klass) {
rb_raise(rb_eArgError, "Message of wrong type.");
}
- upb_arena *arena = upb_arena_new();
+ upb_Arena* arena = upb_Arena_New();
- data = upb_encode(msg->msg, upb_msgdef_layout(msg->msgdef), arena,
+ data = upb_Encode(msg->msg, upb_MessageDef_MiniTable(msg->msgdef), 0, arena,
&size);
if (data) {
VALUE ret = rb_str_new(data, size);
rb_enc_associate(ret, rb_ascii8bit_encoding());
- upb_arena_free(arena);
+ upb_Arena_Free(arena);
return ret;
} else {
- upb_arena_free(arena);
+ upb_Arena_Free(arena);
rb_raise(rb_eRuntimeError, "Exceeded maximum depth (possibly cycle)");
}
}
@@ -1041,18 +1079,19 @@
*
* Encodes the given message object into its serialized JSON representation.
* @param options [Hash] options for the decoder
- * preserve_proto_fieldnames: set true to use original fieldnames (default is to camelCase)
- * emit_defaults: set true to emit 0/false values (default is to omit them)
+ * preserve_proto_fieldnames: set true to use original fieldnames (default is
+ * to camelCase) emit_defaults: set true to emit 0/false values (default is to
+ * omit them)
*/
static VALUE Message_encode_json(int argc, VALUE* argv, VALUE klass) {
Message* msg = ruby_to_Message(argv[0]);
int options = 0;
char buf[1024];
size_t size;
- upb_status status;
+ upb_Status status;
// TODO(haberman): use this message's pool instead.
- const upb_symtab *symtab = DescriptorPool_GetSymtab(generated_pool);
+ const upb_DefPool* symtab = DescriptorPool_GetSymtab(generated_pool);
if (argc < 1 || argc > 2) {
rb_raise(rb_eArgError, "Expected 1 or 2 arguments.");
@@ -1067,29 +1106,29 @@
if (RTEST(rb_hash_lookup2(hash_args,
ID2SYM(rb_intern("preserve_proto_fieldnames")),
Qfalse))) {
- options |= UPB_JSONENC_PROTONAMES;
+ options |= upb_JsonEncode_UseProtoNames;
}
if (RTEST(rb_hash_lookup2(hash_args, ID2SYM(rb_intern("emit_defaults")),
Qfalse))) {
- options |= UPB_JSONENC_EMITDEFAULTS;
+ options |= upb_JsonEncode_EmitDefaults;
}
}
- upb_status_clear(&status);
- size = upb_json_encode(msg->msg, msg->msgdef, symtab, options, buf,
- sizeof(buf), &status);
+ upb_Status_Clear(&status);
+ size = upb_JsonEncode(msg->msg, msg->msgdef, symtab, options, buf,
+ sizeof(buf), &status);
- if (!upb_ok(&status)) {
+ if (!upb_Status_IsOk(&status)) {
rb_raise(cParseError, "Error occurred during encoding: %s",
- upb_status_errmsg(&status));
+ upb_Status_ErrorMessage(&status));
}
VALUE ret;
if (size >= sizeof(buf)) {
char* buf2 = malloc(size + 1);
- upb_json_encode(msg->msg, msg->msgdef, symtab, options, buf2, size + 1,
- &status);
+ upb_JsonEncode(msg->msg, msg->msgdef, symtab, options, buf2, size + 1,
+ &status);
ret = rb_str_new(buf2, size);
free(buf2);
} else {
@@ -1112,10 +1151,10 @@
}
VALUE build_class_from_descriptor(VALUE descriptor) {
- const char *name;
+ const char* name;
VALUE klass;
- name = upb_msgdef_fullname(Descriptor_GetMsgDef(descriptor));
+ name = upb_MessageDef_FullName(Descriptor_GetMsgDef(descriptor));
if (name == NULL) {
rb_raise(rb_eRuntimeError, "Descriptor does not have assigned name.");
}
@@ -1123,8 +1162,7 @@
klass = rb_define_class_id(
// Docs say this parameter is ignored. User will assign return value to
// their own toplevel constant class name.
- rb_intern("Message"),
- rb_cObject);
+ rb_intern("Message"), rb_cObject);
rb_ivar_set(klass, descriptor_instancevar_interned, descriptor);
rb_define_alloc_func(klass, Message_alloc);
rb_require("google/protobuf/message_exts");
@@ -1132,10 +1170,9 @@
rb_extend_object(
klass, rb_eval_string("::Google::Protobuf::MessageExts::ClassMethods"));
- rb_define_method(klass, "method_missing",
- Message_method_missing, -1);
- rb_define_method(klass, "respond_to_missing?",
- Message_respond_to_missing, -1);
+ rb_define_method(klass, "method_missing", Message_method_missing, -1);
+ rb_define_method(klass, "respond_to_missing?", Message_respond_to_missing,
+ -1);
rb_define_method(klass, "initialize", Message_initialize, -1);
rb_define_method(klass, "dup", Message_dup, 0);
// Also define #clone so that we don't inherit Object#clone.
@@ -1168,13 +1205,12 @@
static VALUE enum_lookup(VALUE self, VALUE number) {
int32_t num = NUM2INT(number);
VALUE desc = rb_ivar_get(self, descriptor_instancevar_interned);
- const upb_enumdef *e = EnumDescriptor_GetEnumDef(desc);
-
- const char* name = upb_enumdef_iton(e, num);
- if (name == NULL) {
- return Qnil;
+ const upb_EnumDef* e = EnumDescriptor_GetEnumDef(desc);
+ const upb_EnumValueDef* ev = upb_EnumDef_FindValueByNumber(e, num);
+ if (ev) {
+ return ID2SYM(rb_intern(upb_EnumValueDef_Name(ev)));
} else {
- return ID2SYM(rb_intern(name));
+ return Qnil;
}
}
@@ -1188,14 +1224,12 @@
static VALUE enum_resolve(VALUE self, VALUE sym) {
const char* name = rb_id2name(SYM2ID(sym));
VALUE desc = rb_ivar_get(self, descriptor_instancevar_interned);
- const upb_enumdef *e = EnumDescriptor_GetEnumDef(desc);
-
- int32_t num = 0;
- bool found = upb_enumdef_ntoiz(e, name, &num);
- if (!found) {
- return Qnil;
+ const upb_EnumDef* e = EnumDescriptor_GetEnumDef(desc);
+ const upb_EnumValueDef* ev = upb_EnumDef_FindValueByName(e, name);
+ if (ev) {
+ return INT2NUM(upb_EnumValueDef_Number(ev));
} else {
- return INT2NUM(num);
+ return Qnil;
}
}
@@ -1211,19 +1245,19 @@
}
VALUE build_module_from_enumdesc(VALUE _enumdesc) {
- const upb_enumdef *e = EnumDescriptor_GetEnumDef(_enumdesc);
- VALUE mod = rb_define_module_id(rb_intern(upb_enumdef_fullname(e)));
+ const upb_EnumDef* e = EnumDescriptor_GetEnumDef(_enumdesc);
+ VALUE mod = rb_define_module_id(rb_intern(upb_EnumDef_FullName(e)));
- upb_enum_iter it;
- for (upb_enum_begin(&it, e);
- !upb_enum_done(&it);
- upb_enum_next(&it)) {
- const char* name = upb_enum_iter_name(&it);
- int32_t value = upb_enum_iter_number(&it);
+ int n = upb_EnumDef_ValueCount(e);
+ for (int i = 0; i < n; i++) {
+ const upb_EnumValueDef* ev = upb_EnumDef_Value(e, i);
+ const char* name = upb_EnumValueDef_Name(ev);
+ int32_t value = upb_EnumValueDef_Number(ev);
if (name[0] < 'A' || name[0] > 'Z') {
- rb_warn("Enum value '%s' does not start with an uppercase letter "
- "as is required for Ruby constants.",
- name);
+ rb_warn(
+ "Enum value '%s' does not start with an uppercase letter "
+ "as is required for Ruby constants.",
+ name);
}
rb_define_const(mod, name, INT2NUM(value));
}
@@ -1237,80 +1271,84 @@
}
// Internal only; used by Google::Protobuf.deep_copy.
-upb_msg* Message_deep_copy(const upb_msg* msg, const upb_msgdef* m,
- upb_arena *arena) {
+upb_Message* Message_deep_copy(const upb_Message* msg, const upb_MessageDef* m,
+ upb_Arena* arena) {
// Serialize and parse.
- upb_arena *tmp_arena = upb_arena_new();
- const upb_msglayout *layout = upb_msgdef_layout(m);
+ upb_Arena* tmp_arena = upb_Arena_New();
+ const upb_MiniTable* layout = upb_MessageDef_MiniTable(m);
size_t size;
- char* data = upb_encode_ex(msg, layout, 0, tmp_arena, &size);
- upb_msg* new_msg = upb_msg_new(m, arena);
+ char* data = upb_Encode(msg, layout, 0, tmp_arena, &size);
+ upb_Message* new_msg = upb_Message_New(m, arena);
- if (!data || !upb_decode(data, size, new_msg, layout, arena)) {
- upb_arena_free(tmp_arena);
+ if (!data || upb_Decode(data, size, new_msg, layout, NULL, 0, arena) !=
+ kUpb_DecodeStatus_Ok) {
+ upb_Arena_Free(tmp_arena);
rb_raise(cParseError, "Error occurred copying proto");
}
- upb_arena_free(tmp_arena);
+ upb_Arena_Free(tmp_arena);
return new_msg;
}
-const upb_msg* Message_GetUpbMessage(VALUE value, const upb_msgdef* m,
- const char* name, upb_arena* arena) {
+const upb_Message* Message_GetUpbMessage(VALUE value, const upb_MessageDef* m,
+ const char* name, upb_Arena* arena) {
if (value == Qnil) {
rb_raise(cTypeError, "nil message not allowed here.");
}
VALUE klass = CLASS_OF(value);
VALUE desc_rb = rb_ivar_get(klass, descriptor_instancevar_interned);
- const upb_msgdef* val_m =
+ const upb_MessageDef* val_m =
desc_rb == Qnil ? NULL : Descriptor_GetMsgDef(desc_rb);
if (val_m != m) {
// Check for possible implicit conversions
// TODO: hash conversion?
- switch (upb_msgdef_wellknowntype(m)) {
- case UPB_WELLKNOWN_TIMESTAMP: {
+ switch (upb_MessageDef_WellKnownType(m)) {
+ case kUpb_WellKnown_Timestamp: {
// Time -> Google::Protobuf::Timestamp
- upb_msg *msg = upb_msg_new(m, arena);
- upb_msgval sec, nsec;
+ upb_Message* msg = upb_Message_New(m, arena);
+ upb_MessageValue sec, nsec;
struct timespec time;
- const upb_fielddef *sec_f = upb_msgdef_itof(m, 1);
- const upb_fielddef *nsec_f = upb_msgdef_itof(m, 2);
+ const upb_FieldDef* sec_f =
+ upb_MessageDef_FindFieldByNumberWithSize(m, 1);
+ const upb_FieldDef* nsec_f =
+ upb_MessageDef_FindFieldByNumberWithSize(m, 2);
if (!rb_obj_is_kind_of(value, rb_cTime)) goto badtype;
time = rb_time_timespec(value);
sec.int64_val = time.tv_sec;
nsec.int32_val = time.tv_nsec;
- upb_msg_set(msg, sec_f, sec, arena);
- upb_msg_set(msg, nsec_f, nsec, arena);
+ upb_Message_Set(msg, sec_f, sec, arena);
+ upb_Message_Set(msg, nsec_f, nsec, arena);
return msg;
}
- case UPB_WELLKNOWN_DURATION: {
+ case kUpb_WellKnown_Duration: {
// Numeric -> Google::Protobuf::Duration
- upb_msg *msg = upb_msg_new(m, arena);
- upb_msgval sec, nsec;
- const upb_fielddef *sec_f = upb_msgdef_itof(m, 1);
- const upb_fielddef *nsec_f = upb_msgdef_itof(m, 2);
+ upb_Message* msg = upb_Message_New(m, arena);
+ upb_MessageValue sec, nsec;
+ const upb_FieldDef* sec_f =
+ upb_MessageDef_FindFieldByNumberWithSize(m, 1);
+ const upb_FieldDef* nsec_f =
+ upb_MessageDef_FindFieldByNumberWithSize(m, 2);
if (!rb_obj_is_kind_of(value, rb_cNumeric)) goto badtype;
sec.int64_val = NUM2LL(value);
nsec.int32_val = round((NUM2DBL(value) - NUM2LL(value)) * 1000000000);
- upb_msg_set(msg, sec_f, sec, arena);
- upb_msg_set(msg, nsec_f, nsec, arena);
+ upb_Message_Set(msg, sec_f, sec, arena);
+ upb_Message_Set(msg, nsec_f, nsec, arena);
return msg;
}
default:
badtype:
rb_raise(cTypeError,
"Invalid type %s to assign to submessage field '%s'.",
- rb_class2name(CLASS_OF(value)), name);
+ rb_class2name(CLASS_OF(value)), name);
}
-
}
Message* self = ruby_to_Message(value);
diff --git a/ruby/ext/google/protobuf_c/message.h b/ruby/ext/google/protobuf_c/message.h
index 2ec440c..b409650 100644
--- a/ruby/ext/google/protobuf_c/message.h
+++ b/ruby/ext/google/protobuf_c/message.h
@@ -36,55 +36,58 @@
#include "protobuf.h"
#include "ruby-upb.h"
-// Gets the underlying upb_msg* and upb_msgdef for the given Ruby message
-// wrapper. Requires that |value| is indeed a message object.
-const upb_msg *Message_Get(VALUE value, const upb_msgdef **m);
+// Gets the underlying upb_Message* and upb_MessageDef for the given Ruby
+// message wrapper. Requires that |value| is indeed a message object.
+const upb_Message* Message_Get(VALUE value, const upb_MessageDef** m);
// Like Message_Get(), but checks that the object is not frozen and returns a
// mutable pointer.
-upb_msg *Message_GetMutable(VALUE value, const upb_msgdef **m);
+upb_Message* Message_GetMutable(VALUE value, const upb_MessageDef** m);
// Returns the Arena object for this message.
VALUE Message_GetArena(VALUE value);
-// Converts |value| into a upb_msg value of the expected upb_msgdef type,
-// raising an error if this is not possible. Used when assigning |value| to a
-// field of another message, which means the message must be of a particular
-// type.
+// Converts |value| into a upb_Message value of the expected upb_MessageDef
+// type, raising an error if this is not possible. Used when assigning |value|
+// to a field of another message, which means the message must be of a
+// particular type.
//
// This will perform automatic conversions in some cases (for example, Time ->
// Google::Protobuf::Timestamp). If any new message is created, it will be
// created on |arena|, and any existing message will have its arena fused with
// |arena|.
-const upb_msg* Message_GetUpbMessage(VALUE value, const upb_msgdef* m,
- const char* name, upb_arena* arena);
+const upb_Message* Message_GetUpbMessage(VALUE value, const upb_MessageDef* m,
+ const char* name, upb_Arena* arena);
// Gets or constructs a Ruby wrapper object for the given message. The wrapper
// object will reference |arena| and ensure that it outlives this object.
-VALUE Message_GetRubyWrapper(upb_msg* msg, const upb_msgdef* m, VALUE arena);
+VALUE Message_GetRubyWrapper(upb_Message* msg, const upb_MessageDef* m,
+ VALUE arena);
// Gets the given field from this message.
-VALUE Message_getfield(VALUE _self, const upb_fielddef* f);
+VALUE Message_getfield(VALUE _self, const upb_FieldDef* f);
// Implements #inspect for this message, printing the text to |b|.
-void Message_PrintMessage(StringBuilder* b, const upb_msg* msg,
- const upb_msgdef* m);
+void Message_PrintMessage(StringBuilder* b, const upb_Message* msg,
+ const upb_MessageDef* m);
// Returns a hash value for the given message.
-uint64_t Message_Hash(const upb_msg *msg, const upb_msgdef *m, uint64_t seed);
+uint64_t Message_Hash(const upb_Message* msg, const upb_MessageDef* m,
+ uint64_t seed);
// Returns a deep copy of the given message.
-upb_msg* Message_deep_copy(const upb_msg* msg, const upb_msgdef* m,
- upb_arena *arena);
+upb_Message* Message_deep_copy(const upb_Message* msg, const upb_MessageDef* m,
+ upb_Arena* arena);
// Returns true if these two messages are equal.
-bool Message_Equal(const upb_msg *m1, const upb_msg *m2, const upb_msgdef *m);
+bool Message_Equal(const upb_Message* m1, const upb_Message* m2,
+ const upb_MessageDef* m);
// Checks that this Ruby object is a message, and raises an exception if not.
void Message_CheckClass(VALUE klass);
// Returns a new Hash object containing the contents of this message.
-VALUE Scalar_CreateHash(upb_msgval val, TypeInfo type_info);
+VALUE Scalar_CreateHash(upb_MessageValue val, TypeInfo type_info);
// Creates a message class or enum module for this descriptor, respectively.
VALUE build_class_from_descriptor(VALUE descriptor);
diff --git a/ruby/ext/google/protobuf_c/protobuf.c b/ruby/ext/google/protobuf_c/protobuf.c
index a61328b..4d3e1a5 100644
--- a/ruby/ext/google/protobuf_c/protobuf.c
+++ b/ruby/ext/google/protobuf_c/protobuf.c
@@ -40,14 +40,14 @@
VALUE cParseError;
VALUE cTypeError;
-const upb_fielddef* map_field_key(const upb_fielddef* field) {
- const upb_msgdef *entry = upb_fielddef_msgsubdef(field);
- return upb_msgdef_itof(entry, 1);
+const upb_FieldDef *map_field_key(const upb_FieldDef *field) {
+ const upb_MessageDef *entry = upb_FieldDef_MessageSubDef(field);
+ return upb_MessageDef_FindFieldByNumberWithSize(entry, 1);
}
-const upb_fielddef* map_field_value(const upb_fielddef* field) {
- const upb_msgdef *entry = upb_fielddef_msgsubdef(field);
- return upb_msgdef_itof(entry, 2);
+const upb_FieldDef *map_field_value(const upb_FieldDef *field) {
+ const upb_MessageDef *entry = upb_FieldDef_MessageSubDef(field);
+ return upb_MessageDef_FindFieldByNumberWithSize(entry, 2);
}
// -----------------------------------------------------------------------------
@@ -66,21 +66,21 @@
return sizeof(StringBuilder) + cap;
}
-StringBuilder* StringBuilder_New() {
+StringBuilder *StringBuilder_New() {
const size_t cap = 128;
- StringBuilder* builder = malloc(sizeof(*builder));
+ StringBuilder *builder = malloc(sizeof(*builder));
builder->size = 0;
builder->cap = cap;
builder->data = malloc(builder->cap);
return builder;
}
-void StringBuilder_Free(StringBuilder* b) {
+void StringBuilder_Free(StringBuilder *b) {
free(b->data);
free(b);
}
-void StringBuilder_Printf(StringBuilder* b, const char *fmt, ...) {
+void StringBuilder_Printf(StringBuilder *b, const char *fmt, ...) {
size_t have = b->cap - b->size;
size_t n;
va_list args;
@@ -104,60 +104,62 @@
b->size += n;
}
-VALUE StringBuilder_ToRubyString(StringBuilder* b) {
+VALUE StringBuilder_ToRubyString(StringBuilder *b) {
VALUE ret = rb_str_new(b->data, b->size);
rb_enc_associate(ret, rb_utf8_encoding());
return ret;
}
-static void StringBuilder_PrintEnum(StringBuilder* b, int32_t val,
- const upb_enumdef* e) {
- const char *name = upb_enumdef_iton(e, val);
- if (name) {
- StringBuilder_Printf(b, ":%s", name);
+static void StringBuilder_PrintEnum(StringBuilder *b, int32_t val,
+ const upb_EnumDef *e) {
+ const upb_EnumValueDef *ev = upb_EnumDef_FindValueByNumber(e, val);
+ if (ev) {
+ StringBuilder_Printf(b, ":%s", upb_EnumValueDef_Name(ev));
} else {
StringBuilder_Printf(b, "%" PRId32, val);
}
}
-void StringBuilder_PrintMsgval(StringBuilder* b, upb_msgval val,
+void StringBuilder_PrintMsgval(StringBuilder *b, upb_MessageValue val,
TypeInfo info) {
switch (info.type) {
- case UPB_TYPE_BOOL:
+ case kUpb_CType_Bool:
StringBuilder_Printf(b, "%s", val.bool_val ? "true" : "false");
break;
- case UPB_TYPE_FLOAT: {
+ case kUpb_CType_Float: {
VALUE str = rb_inspect(DBL2NUM(val.float_val));
StringBuilder_Printf(b, "%s", RSTRING_PTR(str));
break;
}
- case UPB_TYPE_DOUBLE: {
+ case kUpb_CType_Double: {
VALUE str = rb_inspect(DBL2NUM(val.double_val));
StringBuilder_Printf(b, "%s", RSTRING_PTR(str));
break;
}
- case UPB_TYPE_INT32:
+ case kUpb_CType_Int32:
StringBuilder_Printf(b, "%" PRId32, val.int32_val);
break;
- case UPB_TYPE_UINT32:
+ case kUpb_CType_UInt32:
StringBuilder_Printf(b, "%" PRIu32, val.uint32_val);
break;
- case UPB_TYPE_INT64:
+ case kUpb_CType_Int64:
StringBuilder_Printf(b, "%" PRId64, val.int64_val);
break;
- case UPB_TYPE_UINT64:
+ case kUpb_CType_UInt64:
StringBuilder_Printf(b, "%" PRIu64, val.uint64_val);
break;
- case UPB_TYPE_STRING:
- StringBuilder_Printf(b, "\"%.*s\"", (int)val.str_val.size, val.str_val.data);
+ case kUpb_CType_String:
+ StringBuilder_Printf(b, "\"%.*s\"", (int)val.str_val.size,
+ val.str_val.data);
break;
- case UPB_TYPE_BYTES:
- StringBuilder_Printf(b, "\"%.*s\"", (int)val.str_val.size, val.str_val.data);
+ case kUpb_CType_Bytes:
+ StringBuilder_Printf(b, "\"%.*s\"", (int)val.str_val.size,
+ val.str_val.data);
break;
- case UPB_TYPE_ENUM:
+ case kUpb_CType_Enum:
StringBuilder_PrintEnum(b, val.int32_val, info.def.enumdef);
break;
- case UPB_TYPE_MESSAGE:
+ case kUpb_CType_Message:
Message_PrintMessage(b, val.msg_val, info.def.msgdef);
break;
}
@@ -168,7 +170,7 @@
// -----------------------------------------------------------------------------
typedef struct {
- upb_arena *arena;
+ upb_Arena *arena;
VALUE pinned_objs;
} Arena;
@@ -179,44 +181,42 @@
static void Arena_free(void *data) {
Arena *arena = data;
- upb_arena_free(arena->arena);
+ upb_Arena_Free(arena->arena);
xfree(arena);
}
static VALUE cArena;
const rb_data_type_t Arena_type = {
- "Google::Protobuf::Internal::Arena",
- { Arena_mark, Arena_free, NULL },
- .flags = RUBY_TYPED_FREE_IMMEDIATELY,
+ "Google::Protobuf::Internal::Arena",
+ {Arena_mark, Arena_free, NULL},
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
};
static VALUE Arena_alloc(VALUE klass) {
Arena *arena = ALLOC(Arena);
- arena->arena = upb_arena_new();
+ arena->arena = upb_Arena_New();
arena->pinned_objs = Qnil;
return TypedData_Wrap_Struct(klass, &Arena_type, arena);
}
-upb_arena *Arena_get(VALUE _arena) {
+upb_Arena *Arena_get(VALUE _arena) {
Arena *arena;
TypedData_Get_Struct(_arena, Arena, &Arena_type, arena);
return arena->arena;
}
-void Arena_fuse(VALUE _arena, upb_arena *other) {
+void Arena_fuse(VALUE _arena, upb_Arena *other) {
Arena *arena;
TypedData_Get_Struct(_arena, Arena, &Arena_type, arena);
- if (!upb_arena_fuse(arena->arena, other)) {
+ if (!upb_Arena_Fuse(arena->arena, other)) {
rb_raise(rb_eRuntimeError,
"Unable to fuse arenas. This should never happen since Ruby does "
"not use initial blocks");
}
}
-VALUE Arena_new() {
- return Arena_alloc(cArena);
-}
+VALUE Arena_new() { return Arena_alloc(cArena); }
void Arena_Pin(VALUE _arena, VALUE obj) {
Arena *arena;
@@ -333,8 +333,8 @@
// avoid O(N^2) CPU costs.
size_t threshold = PBRUBY_MAX(secondary_len * 0.2, 2000);
if (waste > threshold) {
- rb_funcall(gc_secondary_map_lambda, rb_intern("call"), 2,
- secondary_map, weak_obj_cache);
+ rb_funcall(gc_secondary_map_lambda, rb_intern("call"), 2, secondary_map,
+ weak_obj_cache);
}
}
@@ -353,7 +353,7 @@
#endif
// Requires: secondary_map_mutex is held by this thread iff create == true.
-static VALUE ObjectCache_GetKey(const void* key, bool create) {
+static VALUE ObjectCache_GetKey(const void *key, bool create) {
VALUE key_val = (VALUE)key;
PBRUBY_ASSERT((key_val & 3) == 0);
VALUE ret = LL2NUM(key_val >> 2);
@@ -380,7 +380,7 @@
#endif
}
-void ObjectCache_Add(const void* key, VALUE val) {
+void ObjectCache_Add(const void *key, VALUE val) {
PBRUBY_ASSERT(ObjectCache_Get(key) == Qnil);
#if USE_SECONDARY_MAP
rb_mutex_lock(secondary_map_mutex);
@@ -394,7 +394,7 @@
}
// Returns the cached object for this key, if any. Otherwise returns Qnil.
-VALUE ObjectCache_Get(const void* key) {
+VALUE ObjectCache_Get(const void *key) {
VALUE key_rb = ObjectCache_GetKey(key, false);
return rb_funcall(weak_obj_cache, item_get, 1, key_rb);
}
@@ -407,9 +407,9 @@
* unknown fields in submessages.
*/
static VALUE Google_Protobuf_discard_unknown(VALUE self, VALUE msg_rb) {
- const upb_msgdef *m;
- upb_msg *msg = Message_GetMutable(msg_rb, &m);
- if (!upb_msg_discardunknown(msg, m, 128)) {
+ const upb_MessageDef *m;
+ upb_Message *msg = Message_GetMutable(msg_rb, &m);
+ if (!upb_Message_DiscardUnknown(msg, m, 128)) {
rb_raise(rb_eRuntimeError, "Messages nested too deeply.");
}
@@ -431,10 +431,10 @@
return Map_deep_copy(obj);
} else {
VALUE new_arena_rb = Arena_new();
- upb_arena *new_arena = Arena_get(new_arena_rb);
- const upb_msgdef *m;
- const upb_msg *msg = Message_Get(obj, &m);
- upb_msg* new_msg = Message_deep_copy(msg, m, new_arena);
+ upb_Arena *new_arena = Arena_get(new_arena_rb);
+ const upb_MessageDef *m;
+ const upb_Message *msg = Message_Get(obj, &m);
+ upb_Message *new_msg = Message_deep_copy(msg, m, new_arena);
return Message_GetRubyWrapper(new_msg, m, new_arena_rb);
}
}
@@ -445,8 +445,7 @@
// This must be named "Init_protobuf_c" because the Ruby module is named
// "protobuf_c" -- the VM looks for this symbol in our .so.
-__attribute__ ((visibility ("default")))
-void Init_protobuf_c() {
+__attribute__((visibility("default"))) void Init_protobuf_c() {
ObjectCache_Init();
VALUE google = rb_define_module("Google");
@@ -465,6 +464,6 @@
rb_define_singleton_method(protobuf, "discard_unknown",
Google_Protobuf_discard_unknown, 1);
- rb_define_singleton_method(protobuf, "deep_copy",
- Google_Protobuf_deep_copy, 1);
+ rb_define_singleton_method(protobuf, "deep_copy", Google_Protobuf_deep_copy,
+ 1);
}
diff --git a/ruby/ext/google/protobuf_c/protobuf.h b/ruby/ext/google/protobuf_c/protobuf.h
index f7ac204..c6af98f 100644
--- a/ruby/ext/google/protobuf_c/protobuf.h
+++ b/ruby/ext/google/protobuf_c/protobuf.h
@@ -31,33 +31,33 @@
#ifndef __GOOGLE_PROTOBUF_RUBY_PROTOBUF_H__
#define __GOOGLE_PROTOBUF_RUBY_PROTOBUF_H__
+#include <ruby/encoding.h>
#include <ruby/ruby.h>
#include <ruby/vm.h>
-#include <ruby/encoding.h>
-#include "ruby-upb.h"
#include "defs.h"
+#include "ruby-upb.h"
// These operate on a map field (i.e., a repeated field of submessages whose
// submessage type is a map-entry msgdef).
-const upb_fielddef* map_field_key(const upb_fielddef* field);
-const upb_fielddef* map_field_value(const upb_fielddef* field);
+const upb_FieldDef* map_field_key(const upb_FieldDef* field);
+const upb_FieldDef* map_field_value(const upb_FieldDef* field);
// -----------------------------------------------------------------------------
// Arena
// -----------------------------------------------------------------------------
-// A Ruby object that wraps an underlying upb_arena. Any objects that are
+// A Ruby object that wraps an underlying upb_Arena. Any objects that are
// allocated from this arena should reference the Arena in rb_gc_mark(), to
// ensure that the object's underlying memory outlives any Ruby object that can
// reach it.
VALUE Arena_new();
-upb_arena *Arena_get(VALUE arena);
+upb_Arena* Arena_get(VALUE arena);
// Fuses this arena to another, throwing a Ruby exception if this is not
// possible.
-void Arena_fuse(VALUE arena, upb_arena *other);
+void Arena_fuse(VALUE arena, upb_Arena* other);
// Pins this Ruby object to the lifetime of this arena, so that as long as the
// arena is alive this object will not be collected.
@@ -93,10 +93,11 @@
StringBuilder* StringBuilder_New();
void StringBuilder_Free(StringBuilder* b);
-void StringBuilder_Printf(StringBuilder* b, const char *fmt, ...);
+void StringBuilder_Printf(StringBuilder* b, const char* fmt, ...);
VALUE StringBuilder_ToRubyString(StringBuilder* b);
-void StringBuilder_PrintMsgval(StringBuilder* b, upb_msgval val, TypeInfo info);
+void StringBuilder_PrintMsgval(StringBuilder* b, upb_MessageValue val,
+ TypeInfo info);
// -----------------------------------------------------------------------------
// Utilities.
@@ -105,7 +106,9 @@
extern VALUE cTypeError;
#ifdef NDEBUG
-#define PBRUBY_ASSERT(expr) do {} while (false && (expr))
+#define PBRUBY_ASSERT(expr) \
+ do { \
+ } while (false && (expr))
#else
#define PBRUBY_ASSERT(expr) assert(expr)
#endif
diff --git a/ruby/ext/google/protobuf_c/repeated_field.c b/ruby/ext/google/protobuf_c/repeated_field.c
index 5ff3c76..700ca16 100644
--- a/ruby/ext/google/protobuf_c/repeated_field.c
+++ b/ruby/ext/google/protobuf_c/repeated_field.c
@@ -40,10 +40,10 @@
// -----------------------------------------------------------------------------
typedef struct {
- const upb_array *array; // Can get as mutable when non-frozen.
+ const upb_Array* array; // Can get as mutable when non-frozen.
TypeInfo type_info;
VALUE type_class; // To GC-root the msgdef/enumdef in type_info.
- VALUE arena; // To GC-root the upb_array.
+ VALUE arena; // To GC-root the upb_Array.
} RepeatedField;
VALUE cRepeatedField;
@@ -55,9 +55,9 @@
}
const rb_data_type_t RepeatedField_type = {
- "Google::Protobuf::RepeatedField",
- { RepeatedField_mark, RUBY_DEFAULT_FREE, NULL },
- .flags = RUBY_TYPED_FREE_IMMEDIATELY,
+ "Google::Protobuf::RepeatedField",
+ {RepeatedField_mark, RUBY_DEFAULT_FREE, NULL},
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
};
static RepeatedField* ruby_to_RepeatedField(VALUE _self) {
@@ -66,9 +66,9 @@
return self;
}
-static upb_array *RepeatedField_GetMutable(VALUE _self) {
+static upb_Array* RepeatedField_GetMutable(VALUE _self) {
rb_check_frozen(_self);
- return (upb_array*)ruby_to_RepeatedField(_self)->array;
+ return (upb_Array*)ruby_to_RepeatedField(_self)->array;
}
VALUE RepeatedField_alloc(VALUE klass) {
@@ -79,7 +79,7 @@
return TypedData_Wrap_Struct(klass, &RepeatedField_type, self);
}
-VALUE RepeatedField_GetRubyWrapper(upb_array* array, TypeInfo type_info,
+VALUE RepeatedField_GetRubyWrapper(upb_Array* array, TypeInfo type_info,
VALUE arena) {
PBRUBY_ASSERT(array);
VALUE val = ObjectCache_Get(array);
@@ -92,7 +92,7 @@
self->array = array;
self->arena = arena;
self->type_info = type_info;
- if (self->type_info.type == UPB_TYPE_MESSAGE) {
+ if (self->type_info.type == kUpb_CType_Message) {
self->type_class = Descriptor_DefToClass(type_info.def.msgdef);
}
}
@@ -105,24 +105,24 @@
static VALUE RepeatedField_new_this_type(RepeatedField* from) {
VALUE arena_rb = Arena_new();
- upb_array *array = upb_array_new(Arena_get(arena_rb), from->type_info.type);
+ upb_Array* array = upb_Array_New(Arena_get(arena_rb), from->type_info.type);
VALUE ret = RepeatedField_GetRubyWrapper(array, from->type_info, arena_rb);
PBRUBY_ASSERT(ruby_to_RepeatedField(ret)->type_class == from->type_class);
return ret;
}
-void RepeatedField_Inspect(StringBuilder* b, const upb_array* array,
+void RepeatedField_Inspect(StringBuilder* b, const upb_Array* array,
TypeInfo info) {
bool first = true;
StringBuilder_Printf(b, "[");
- size_t n = array ? upb_array_size(array) : 0;
+ size_t n = array ? upb_Array_Size(array) : 0;
for (size_t i = 0; i < n; i++) {
if (first) {
first = false;
} else {
StringBuilder_Printf(b, ", ");
}
- StringBuilder_PrintMsgval(b, upb_array_get(array, i), info);
+ StringBuilder_PrintMsgval(b, upb_Array_Get(array, i), info);
}
StringBuilder_Printf(b, "]");
}
@@ -132,24 +132,24 @@
VALUE new_rptfield = RepeatedField_new_this_type(self);
RepeatedField* new_self = ruby_to_RepeatedField(new_rptfield);
VALUE arena_rb = new_self->arena;
- upb_array *new_array = RepeatedField_GetMutable(new_rptfield);
- upb_arena *arena = Arena_get(arena_rb);
- size_t elements = upb_array_size(self->array);
+ upb_Array* new_array = RepeatedField_GetMutable(new_rptfield);
+ upb_Arena* arena = Arena_get(arena_rb);
+ size_t elements = upb_Array_Size(self->array);
- upb_array_resize(new_array, elements, arena);
+ upb_Array_Resize(new_array, elements, arena);
- size_t size = upb_array_size(self->array);
+ size_t size = upb_Array_Size(self->array);
for (size_t i = 0; i < size; i++) {
- upb_msgval msgval = upb_array_get(self->array, i);
- upb_msgval copy = Msgval_DeepCopy(msgval, self->type_info, arena);
- upb_array_set(new_array, i, copy);
+ upb_MessageValue msgval = upb_Array_Get(self->array, i);
+ upb_MessageValue copy = Msgval_DeepCopy(msgval, self->type_info, arena);
+ upb_Array_Set(new_array, i, copy);
}
return new_rptfield;
}
-const upb_array* RepeatedField_GetUpbArray(VALUE val, const upb_fielddef* field,
- upb_arena* arena) {
+const upb_Array* RepeatedField_GetUpbArray(VALUE val, const upb_FieldDef* field,
+ upb_Arena* arena) {
RepeatedField* self;
TypeInfo type_info = TypeInfo_get(field);
@@ -173,17 +173,17 @@
static int index_position(VALUE _index, RepeatedField* repeated_field) {
int index = NUM2INT(_index);
- if (index < 0) index += upb_array_size(repeated_field->array);
+ if (index < 0) index += upb_Array_Size(repeated_field->array);
return index;
}
static VALUE RepeatedField_subarray(RepeatedField* self, long beg, long len) {
- size_t size = upb_array_size(self->array);
+ size_t size = upb_Array_Size(self->array);
VALUE ary = rb_ary_new2(size);
long i;
for (i = beg; i < beg + len; i++) {
- upb_msgval msgval = upb_array_get(self->array, i);
+ upb_MessageValue msgval = upb_Array_Get(self->array, i);
VALUE elem = Convert_UpbToRuby(msgval, self->type_info, self->arena);
rb_ary_push(ary, elem);
}
@@ -200,18 +200,17 @@
*/
static VALUE RepeatedField_each(VALUE _self) {
RepeatedField* self = ruby_to_RepeatedField(_self);
- int size = upb_array_size(self->array);
+ int size = upb_Array_Size(self->array);
int i;
for (i = 0; i < size; i++) {
- upb_msgval msgval = upb_array_get(self->array, i);
+ upb_MessageValue msgval = upb_Array_Get(self->array, i);
VALUE val = Convert_UpbToRuby(msgval, self->type_info, self->arena);
rb_yield(val);
}
return _self;
}
-
/*
* call-seq:
* RepeatedField.[](index) => value
@@ -220,20 +219,20 @@
*/
static VALUE RepeatedField_index(int argc, VALUE* argv, VALUE _self) {
RepeatedField* self = ruby_to_RepeatedField(_self);
- long size = upb_array_size(self->array);
+ long size = upb_Array_Size(self->array);
VALUE arg = argv[0];
long beg, len;
- if (argc == 1){
+ if (argc == 1) {
if (FIXNUM_P(arg)) {
/* standard case */
- upb_msgval msgval;
+ upb_MessageValue msgval;
int index = index_position(argv[0], self);
- if (index < 0 || (size_t)index >= upb_array_size(self->array)) {
+ if (index < 0 || (size_t)index >= upb_Array_Size(self->array)) {
return Qnil;
}
- msgval = upb_array_get(self->array, index);
+ msgval = upb_Array_Get(self->array, index);
return Convert_UpbToRuby(msgval, self->type_info, self->arena);
} else {
/* check if idx is Range */
@@ -269,10 +268,10 @@
*/
static VALUE RepeatedField_index_set(VALUE _self, VALUE _index, VALUE val) {
RepeatedField* self = ruby_to_RepeatedField(_self);
- int size = upb_array_size(self->array);
- upb_array *array = RepeatedField_GetMutable(_self);
- upb_arena *arena = Arena_get(self->arena);
- upb_msgval msgval = Convert_RubyToUpb(val, "", self->type_info, arena);
+ int size = upb_Array_Size(self->array);
+ upb_Array* array = RepeatedField_GetMutable(_self);
+ upb_Arena* arena = Arena_get(self->arena);
+ upb_MessageValue msgval = Convert_RubyToUpb(val, "", self->type_info, arena);
int index = index_position(_index, self);
if (index < 0 || index >= (INT_MAX - 1)) {
@@ -280,17 +279,17 @@
}
if (index >= size) {
- upb_array_resize(array, index + 1, arena);
- upb_msgval fill;
+ upb_Array_Resize(array, index + 1, arena);
+ upb_MessageValue fill;
memset(&fill, 0, sizeof(fill));
for (int i = size; i < index; i++) {
// Fill default values.
// TODO(haberman): should this happen at the upb level?
- upb_array_set(array, i, fill);
+ upb_Array_Set(array, i, fill);
}
}
- upb_array_set(array, index, msgval);
+ upb_Array_Set(array, index, msgval);
return Qnil;
}
@@ -302,13 +301,14 @@
*/
static VALUE RepeatedField_push_vararg(int argc, VALUE* argv, VALUE _self) {
RepeatedField* self = ruby_to_RepeatedField(_self);
- upb_arena *arena = Arena_get(self->arena);
- upb_array *array = RepeatedField_GetMutable(_self);
+ upb_Arena* arena = Arena_get(self->arena);
+ upb_Array* array = RepeatedField_GetMutable(_self);
int i;
for (i = 0; i < argc; i++) {
- upb_msgval msgval = Convert_RubyToUpb(argv[i], "", self->type_info, arena);
- upb_array_append(array, msgval, arena);
+ upb_MessageValue msgval =
+ Convert_RubyToUpb(argv[i], "", self->type_info, arena);
+ upb_Array_Append(array, msgval, arena);
}
return _self;
@@ -322,11 +322,11 @@
*/
static VALUE RepeatedField_push(VALUE _self, VALUE val) {
RepeatedField* self = ruby_to_RepeatedField(_self);
- upb_arena *arena = Arena_get(self->arena);
- upb_array *array = RepeatedField_GetMutable(_self);
+ upb_Arena* arena = Arena_get(self->arena);
+ upb_Array* array = RepeatedField_GetMutable(_self);
- upb_msgval msgval = Convert_RubyToUpb(val, "", self->type_info, arena);
- upb_array_append(array, msgval, arena);
+ upb_MessageValue msgval = Convert_RubyToUpb(val, "", self->type_info, arena);
+ upb_Array_Append(array, msgval, arena);
return _self;
}
@@ -336,19 +336,19 @@
*/
static VALUE RepeatedField_pop_one(VALUE _self) {
RepeatedField* self = ruby_to_RepeatedField(_self);
- size_t size = upb_array_size(self->array);
- upb_array *array = RepeatedField_GetMutable(_self);
- upb_msgval last;
+ size_t size = upb_Array_Size(self->array);
+ upb_Array* array = RepeatedField_GetMutable(_self);
+ upb_MessageValue last;
VALUE ret;
if (size == 0) {
return Qnil;
}
- last = upb_array_get(self->array, size - 1);
+ last = upb_Array_Get(self->array, size - 1);
ret = Convert_UpbToRuby(last, self->type_info, self->arena);
- upb_array_resize(array, size - 1, Arena_get(self->arena));
+ upb_Array_Resize(array, size - 1, Arena_get(self->arena));
return ret;
}
@@ -360,11 +360,11 @@
*/
static VALUE RepeatedField_replace(VALUE _self, VALUE list) {
RepeatedField* self = ruby_to_RepeatedField(_self);
- upb_array *array = RepeatedField_GetMutable(_self);
+ upb_Array* array = RepeatedField_GetMutable(_self);
int i;
Check_Type(list, T_ARRAY);
- upb_array_resize(array, 0, Arena_get(self->arena));
+ upb_Array_Resize(array, 0, Arena_get(self->arena));
for (i = 0; i < RARRAY_LEN(list); i++) {
RepeatedField_push(_self, rb_ary_entry(list, i));
@@ -381,8 +381,8 @@
*/
static VALUE RepeatedField_clear(VALUE _self) {
RepeatedField* self = ruby_to_RepeatedField(_self);
- upb_array *array = RepeatedField_GetMutable(_self);
- upb_array_resize(array, 0, Arena_get(self->arena));
+ upb_Array* array = RepeatedField_GetMutable(_self);
+ upb_Array_Resize(array, 0, Arena_get(self->arena));
return _self;
}
@@ -394,7 +394,7 @@
*/
static VALUE RepeatedField_length(VALUE _self) {
RepeatedField* self = ruby_to_RepeatedField(_self);
- return INT2NUM(upb_array_size(self->array));
+ return INT2NUM(upb_Array_Size(self->array));
}
/*
@@ -408,16 +408,16 @@
RepeatedField* self = ruby_to_RepeatedField(_self);
VALUE new_rptfield = RepeatedField_new_this_type(self);
RepeatedField* new_rptfield_self = ruby_to_RepeatedField(new_rptfield);
- upb_array *new_array = RepeatedField_GetMutable(new_rptfield);
- upb_arena* arena = Arena_get(new_rptfield_self->arena);
- int size = upb_array_size(self->array);
+ upb_Array* new_array = RepeatedField_GetMutable(new_rptfield);
+ upb_Arena* arena = Arena_get(new_rptfield_self->arena);
+ int size = upb_Array_Size(self->array);
int i;
Arena_fuse(self->arena, arena);
for (i = 0; i < size; i++) {
- upb_msgval msgval = upb_array_get(self->array, i);
- upb_array_append(new_array, msgval, arena);
+ upb_MessageValue msgval = upb_Array_Get(self->array, i);
+ upb_Array_Append(new_array, msgval, arena);
}
return new_rptfield;
@@ -432,12 +432,12 @@
*/
VALUE RepeatedField_to_ary(VALUE _self) {
RepeatedField* self = ruby_to_RepeatedField(_self);
- int size = upb_array_size(self->array);
+ int size = upb_Array_Size(self->array);
VALUE ary = rb_ary_new2(size);
int i;
for (i = 0; i < size; i++) {
- upb_msgval msgval = upb_array_get(self->array, i);
+ upb_MessageValue msgval = upb_Array_Get(self->array, i);
VALUE val = Convert_UpbToRuby(msgval, self->type_info, self->arena);
rb_ary_push(ary, val);
}
@@ -473,17 +473,17 @@
self = ruby_to_RepeatedField(_self);
other = ruby_to_RepeatedField(_other);
- size_t n = upb_array_size(self->array);
+ size_t n = upb_Array_Size(self->array);
if (self->type_info.type != other->type_info.type ||
self->type_class != other->type_class ||
- upb_array_size(other->array) != n) {
+ upb_Array_Size(other->array) != n) {
return Qfalse;
}
for (size_t i = 0; i < n; i++) {
- upb_msgval val1 = upb_array_get(self->array, i);
- upb_msgval val2 = upb_array_get(other->array, i);
+ upb_MessageValue val1 = upb_Array_Get(self->array, i);
+ upb_MessageValue val2 = upb_Array_Get(other->array, i);
if (!Msgval_IsEqual(val1, val2, self->type_info)) {
return Qfalse;
}
@@ -517,10 +517,10 @@
VALUE RepeatedField_hash(VALUE _self) {
RepeatedField* self = ruby_to_RepeatedField(_self);
uint64_t hash = 0;
- size_t n = upb_array_size(self->array);
+ size_t n = upb_Array_Size(self->array);
for (size_t i = 0; i < n; i++) {
- upb_msgval val = upb_array_get(self->array, i);
+ upb_MessageValue val = upb_Array_Get(self->array, i);
hash = Msgval_GetHash(val, self->type_info, hash);
}
@@ -549,10 +549,10 @@
RepeatedField* self = ruby_to_RepeatedField(_self);
RepeatedField* list_rptfield = ruby_to_RepeatedField(list);
RepeatedField* dupped = ruby_to_RepeatedField(dupped_);
- upb_array *dupped_array = RepeatedField_GetMutable(dupped_);
- upb_arena* arena = Arena_get(dupped->arena);
+ upb_Array* dupped_array = RepeatedField_GetMutable(dupped_);
+ upb_Arena* arena = Arena_get(dupped->arena);
Arena_fuse(list_rptfield->arena, arena);
- int size = upb_array_size(list_rptfield->array);
+ int size = upb_Array_Size(list_rptfield->array);
int i;
if (self->type_info.type != list_rptfield->type_info.type ||
@@ -562,8 +562,8 @@
}
for (i = 0; i < size; i++) {
- upb_msgval msgval = upb_array_get(list_rptfield->array, i);
- upb_array_append(dupped_array, msgval, arena);
+ upb_MessageValue msgval = upb_Array_Get(list_rptfield->array, i);
+ upb_Array_Append(dupped_array, msgval, arena);
}
} else {
rb_raise(rb_eArgError, "Unknown type appending to RepeatedField");
@@ -601,7 +601,7 @@
*/
VALUE RepeatedField_init(int argc, VALUE* argv, VALUE _self) {
RepeatedField* self = ruby_to_RepeatedField(_self);
- upb_arena *arena;
+ upb_Arena* arena;
VALUE ary = Qnil;
self->arena = Arena_new();
@@ -612,7 +612,7 @@
}
self->type_info = TypeInfo_FromClass(argc, argv, 0, &self->type_class, &ary);
- self->array = upb_array_new(arena, self->type_info.type);
+ self->array = upb_Array_New(arena, self->type_info.type);
ObjectCache_Add(self->array, _self);
if (ary != Qnil) {
@@ -627,14 +627,12 @@
}
void RepeatedField_register(VALUE module) {
- VALUE klass = rb_define_class_under(
- module, "RepeatedField", rb_cObject);
+ VALUE klass = rb_define_class_under(module, "RepeatedField", rb_cObject);
rb_define_alloc_func(klass, RepeatedField_alloc);
rb_gc_register_address(&cRepeatedField);
cRepeatedField = klass;
- rb_define_method(klass, "initialize",
- RepeatedField_init, -1);
+ rb_define_method(klass, "initialize", RepeatedField_init, -1);
rb_define_method(klass, "each", RepeatedField_each, 0);
rb_define_method(klass, "[]", RepeatedField_index, -1);
rb_define_method(klass, "at", RepeatedField_index, -1);
diff --git a/ruby/ext/google/protobuf_c/repeated_field.h b/ruby/ext/google/protobuf_c/repeated_field.h
index e4ef252..b058163 100644
--- a/ruby/ext/google/protobuf_c/repeated_field.h
+++ b/ruby/ext/google/protobuf_c/repeated_field.h
@@ -36,19 +36,19 @@
#include "protobuf.h"
#include "ruby-upb.h"
-// Returns a Ruby wrapper object for the given upb_array, which will be created
+// Returns a Ruby wrapper object for the given upb_Array, which will be created
// if one does not exist already.
-VALUE RepeatedField_GetRubyWrapper(upb_array* msg, TypeInfo type_info,
+VALUE RepeatedField_GetRubyWrapper(upb_Array* msg, TypeInfo type_info,
VALUE arena);
-// Gets the underlying upb_array for this Ruby RepeatedField object, which must
+// Gets the underlying upb_Array for this Ruby RepeatedField object, which must
// have a type that matches |f|. If this is not a repeated field or the type
// doesn't match, raises an exception.
-const upb_array* RepeatedField_GetUpbArray(VALUE value, const upb_fielddef* f,
- upb_arena* arena);
+const upb_Array* RepeatedField_GetUpbArray(VALUE value, const upb_FieldDef* f,
+ upb_Arena* arena);
// Implements #inspect for this repeated field by appending its contents to |b|.
-void RepeatedField_Inspect(StringBuilder* b, const upb_array* array,
+void RepeatedField_Inspect(StringBuilder* b, const upb_Array* array,
TypeInfo info);
// Returns a deep copy of this RepeatedField object.
diff --git a/ruby/ext/google/protobuf_c/ruby-upb.c b/ruby/ext/google/protobuf_c/ruby-upb.c
index 294be7f..79a480e 100755
--- a/ruby/ext/google/protobuf_c/ruby-upb.c
+++ b/ruby/ext/google/protobuf_c/ruby-upb.c
@@ -2624,7 +2624,7 @@
return low ^ high;
}
-static uint64_t Wyhash(const void* data, size_t len, uint64_t seed,
+uint64_t Wyhash(const void* data, size_t len, uint64_t seed,
const uint64_t salt[]) {
const uint8_t* ptr = (const uint8_t*)data;
uint64_t starting_length = (uint64_t)len;
diff --git a/ruby/ext/google/protobuf_c/ruby-upb.h b/ruby/ext/google/protobuf_c/ruby-upb.h
index 276f6b1..369861c 100755
--- a/ruby/ext/google/protobuf_c/ruby-upb.h
+++ b/ruby/ext/google/protobuf_c/ruby-upb.h
@@ -786,6 +786,10 @@
extern "C" {
#endif
+uint64_t Wyhash(const void* data, size_t len, uint64_t seed,
+ const uint64_t salt[]);
+extern const uint64_t kWyhashSalt[5];
+
/* upb_value ******************************************************************/
typedef struct {
diff --git a/ruby/ext/google/protobuf_c/wrap_memcpy.c b/ruby/ext/google/protobuf_c/wrap_memcpy.c
index 18c0367..6bbd4ba 100644
--- a/ruby/ext/google/protobuf_c/wrap_memcpy.c
+++ b/ruby/ext/google/protobuf_c/wrap_memcpy.c
@@ -33,7 +33,8 @@
// On x86-64 Linux with glibc, we link against the 2.2.5 version of memcpy so
// that we avoid depending on the 2.14 version of the symbol. This way,
// distributions that are using pre-2.14 versions of glibc can successfully use
-// the gem we distribute (https://github.com/protocolbuffers/protobuf/issues/2783).
+// the gem we distribute
+// (https://github.com/protocolbuffers/protobuf/issues/2783).
//
// This wrapper is enabled by passing the linker flags -Wl,-wrap,memcpy in
// extconf.rb.
@@ -41,11 +42,11 @@
#if defined(__x86_64__) && defined(__GNU_LIBRARY__)
__asm__(".symver memcpy,memcpy@GLIBC_2.2.5");
void *__wrap_memcpy(void *dest, const void *src, size_t n) {
- return memcpy(dest, src, n);
+ return memcpy(dest, src, n);
}
#else
void *__wrap_memcpy(void *dest, const void *src, size_t n) {
- return memmove(dest, src, n);
+ return memmove(dest, src, n);
}
#endif
#endif