|
@@ -53,7 +53,7 @@ rb_data_type_t Message_type = {
|
|
};
|
|
};
|
|
|
|
|
|
VALUE Message_alloc(VALUE klass) {
|
|
VALUE Message_alloc(VALUE klass) {
|
|
- VALUE descriptor = rb_iv_get(klass, kDescriptorInstanceVar);
|
|
|
|
|
|
+ VALUE descriptor = rb_ivar_get(klass, descriptor_instancevar_interned);
|
|
Descriptor* desc = ruby_to_Descriptor(descriptor);
|
|
Descriptor* desc = ruby_to_Descriptor(descriptor);
|
|
MessageHeader* msg = (MessageHeader*)ALLOC_N(
|
|
MessageHeader* msg = (MessageHeader*)ALLOC_N(
|
|
uint8_t, sizeof(MessageHeader) + desc->layout->size);
|
|
uint8_t, sizeof(MessageHeader) + desc->layout->size);
|
|
@@ -63,7 +63,7 @@ VALUE Message_alloc(VALUE klass) {
|
|
// a collection happens during object creation in layout_init().
|
|
// a collection happens during object creation in layout_init().
|
|
VALUE ret = TypedData_Wrap_Struct(klass, &Message_type, msg);
|
|
VALUE ret = TypedData_Wrap_Struct(klass, &Message_type, msg);
|
|
msg->descriptor = desc;
|
|
msg->descriptor = desc;
|
|
- rb_iv_set(ret, kDescriptorInstanceVar, descriptor);
|
|
|
|
|
|
+ rb_ivar_set(ret, descriptor_instancevar_interned, descriptor);
|
|
|
|
|
|
layout_init(desc->layout, Message_data(msg));
|
|
layout_init(desc->layout, Message_data(msg));
|
|
|
|
|
|
@@ -341,7 +341,8 @@ VALUE Message_to_h(VALUE _self) {
|
|
!upb_msg_field_done(&it);
|
|
!upb_msg_field_done(&it);
|
|
upb_msg_field_next(&it)) {
|
|
upb_msg_field_next(&it)) {
|
|
const upb_fielddef* field = upb_msg_iter_field(&it);
|
|
const upb_fielddef* field = upb_msg_iter_field(&it);
|
|
- VALUE msg_value = layout_get(self->descriptor->layout, Message_data(self), field);
|
|
|
|
|
|
+ VALUE msg_value = layout_get(self->descriptor->layout, Message_data(self),
|
|
|
|
+ field);
|
|
VALUE msg_key = ID2SYM(rb_intern(upb_fielddef_name(field)));
|
|
VALUE msg_key = ID2SYM(rb_intern(upb_fielddef_name(field)));
|
|
if (upb_fielddef_label(field) == UPB_LABEL_REPEATED) {
|
|
if (upb_fielddef_label(field) == UPB_LABEL_REPEATED) {
|
|
msg_value = RepeatedField_to_ary(msg_value);
|
|
msg_value = RepeatedField_to_ary(msg_value);
|
|
@@ -400,7 +401,7 @@ VALUE Message_index_set(VALUE _self, VALUE field_name, VALUE value) {
|
|
* message class's type.
|
|
* message class's type.
|
|
*/
|
|
*/
|
|
VALUE Message_descriptor(VALUE klass) {
|
|
VALUE Message_descriptor(VALUE klass) {
|
|
- return rb_iv_get(klass, kDescriptorInstanceVar);
|
|
|
|
|
|
+ return rb_ivar_get(klass, descriptor_instancevar_interned);
|
|
}
|
|
}
|
|
|
|
|
|
VALUE build_class_from_descriptor(Descriptor* desc) {
|
|
VALUE build_class_from_descriptor(Descriptor* desc) {
|
|
@@ -421,11 +422,13 @@ VALUE build_class_from_descriptor(Descriptor* desc) {
|
|
// their own toplevel constant class name.
|
|
// their own toplevel constant class name.
|
|
rb_intern("Message"),
|
|
rb_intern("Message"),
|
|
rb_cObject);
|
|
rb_cObject);
|
|
- rb_iv_set(klass, kDescriptorInstanceVar, get_def_obj(desc->msgdef));
|
|
|
|
|
|
+ rb_ivar_set(klass, descriptor_instancevar_interned,
|
|
|
|
+ get_def_obj(desc->msgdef));
|
|
rb_define_alloc_func(klass, Message_alloc);
|
|
rb_define_alloc_func(klass, Message_alloc);
|
|
rb_require("google/protobuf/message_exts");
|
|
rb_require("google/protobuf/message_exts");
|
|
rb_include_module(klass, rb_eval_string("Google::Protobuf::MessageExts"));
|
|
rb_include_module(klass, rb_eval_string("Google::Protobuf::MessageExts"));
|
|
- rb_extend_object(klass, rb_eval_string("Google::Protobuf::MessageExts::ClassMethods"));
|
|
|
|
|
|
+ rb_extend_object(
|
|
|
|
+ klass, rb_eval_string("Google::Protobuf::MessageExts::ClassMethods"));
|
|
|
|
|
|
rb_define_method(klass, "method_missing",
|
|
rb_define_method(klass, "method_missing",
|
|
Message_method_missing, -1);
|
|
Message_method_missing, -1);
|
|
@@ -458,7 +461,7 @@ VALUE build_class_from_descriptor(Descriptor* desc) {
|
|
*/
|
|
*/
|
|
VALUE enum_lookup(VALUE self, VALUE number) {
|
|
VALUE enum_lookup(VALUE self, VALUE number) {
|
|
int32_t num = NUM2INT(number);
|
|
int32_t num = NUM2INT(number);
|
|
- VALUE desc = rb_iv_get(self, kDescriptorInstanceVar);
|
|
|
|
|
|
+ VALUE desc = rb_ivar_get(self, descriptor_instancevar_interned);
|
|
EnumDescriptor* enumdesc = ruby_to_EnumDescriptor(desc);
|
|
EnumDescriptor* enumdesc = ruby_to_EnumDescriptor(desc);
|
|
|
|
|
|
const char* name = upb_enumdef_iton(enumdesc->enumdef, num);
|
|
const char* name = upb_enumdef_iton(enumdesc->enumdef, num);
|
|
@@ -478,7 +481,7 @@ VALUE enum_lookup(VALUE self, VALUE number) {
|
|
*/
|
|
*/
|
|
VALUE enum_resolve(VALUE self, VALUE sym) {
|
|
VALUE enum_resolve(VALUE self, VALUE sym) {
|
|
const char* name = rb_id2name(SYM2ID(sym));
|
|
const char* name = rb_id2name(SYM2ID(sym));
|
|
- VALUE desc = rb_iv_get(self, kDescriptorInstanceVar);
|
|
|
|
|
|
+ VALUE desc = rb_ivar_get(self, descriptor_instancevar_interned);
|
|
EnumDescriptor* enumdesc = ruby_to_EnumDescriptor(desc);
|
|
EnumDescriptor* enumdesc = ruby_to_EnumDescriptor(desc);
|
|
|
|
|
|
int32_t num = 0;
|
|
int32_t num = 0;
|
|
@@ -498,7 +501,7 @@ VALUE enum_resolve(VALUE self, VALUE sym) {
|
|
* EnumDescriptor corresponding to this enum type.
|
|
* EnumDescriptor corresponding to this enum type.
|
|
*/
|
|
*/
|
|
VALUE enum_descriptor(VALUE self) {
|
|
VALUE enum_descriptor(VALUE self) {
|
|
- return rb_iv_get(self, kDescriptorInstanceVar);
|
|
|
|
|
|
+ return rb_ivar_get(self, descriptor_instancevar_interned);
|
|
}
|
|
}
|
|
|
|
|
|
VALUE build_module_from_enumdesc(EnumDescriptor* enumdesc) {
|
|
VALUE build_module_from_enumdesc(EnumDescriptor* enumdesc) {
|
|
@@ -523,7 +526,8 @@ VALUE build_module_from_enumdesc(EnumDescriptor* enumdesc) {
|
|
rb_define_singleton_method(mod, "lookup", enum_lookup, 1);
|
|
rb_define_singleton_method(mod, "lookup", enum_lookup, 1);
|
|
rb_define_singleton_method(mod, "resolve", enum_resolve, 1);
|
|
rb_define_singleton_method(mod, "resolve", enum_resolve, 1);
|
|
rb_define_singleton_method(mod, "descriptor", enum_descriptor, 0);
|
|
rb_define_singleton_method(mod, "descriptor", enum_descriptor, 0);
|
|
- rb_iv_set(mod, kDescriptorInstanceVar, get_def_obj(enumdesc->enumdef));
|
|
|
|
|
|
+ rb_ivar_set(mod, descriptor_instancevar_interned,
|
|
|
|
+ get_def_obj(enumdesc->enumdef));
|
|
|
|
|
|
return mod;
|
|
return mod;
|
|
}
|
|
}
|