|  | @@ -53,7 +53,7 @@ rb_data_type_t Message_type = {
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  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);
 | 
	
		
			
				|  |  |    MessageHeader* msg = (MessageHeader*)ALLOC_N(
 | 
	
		
			
				|  |  |        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().
 | 
	
		
			
				|  |  |    VALUE ret = TypedData_Wrap_Struct(klass, &Message_type, msg);
 | 
	
		
			
				|  |  |    msg->descriptor = desc;
 | 
	
		
			
				|  |  | -  rb_iv_set(ret, kDescriptorInstanceVar, descriptor);
 | 
	
		
			
				|  |  | +  rb_ivar_set(ret, descriptor_instancevar_interned, descriptor);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    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_next(&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)));
 | 
	
		
			
				|  |  |      if (upb_fielddef_label(field) == UPB_LABEL_REPEATED) {
 | 
	
		
			
				|  |  |        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.
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  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) {
 | 
	
	
		
			
				|  | @@ -421,11 +422,13 @@ VALUE build_class_from_descriptor(Descriptor* desc) {
 | 
	
		
			
				|  |  |        // their own toplevel constant class name.
 | 
	
		
			
				|  |  |        rb_intern("Message"),
 | 
	
		
			
				|  |  |        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_require("google/protobuf/message_exts");
 | 
	
		
			
				|  |  |    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",
 | 
	
		
			
				|  |  |                     Message_method_missing, -1);
 | 
	
	
		
			
				|  | @@ -458,7 +461,7 @@ VALUE build_class_from_descriptor(Descriptor* desc) {
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  VALUE enum_lookup(VALUE self, VALUE 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);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    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) {
 | 
	
		
			
				|  |  |    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);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    int32_t num = 0;
 | 
	
	
		
			
				|  | @@ -498,7 +501,7 @@ VALUE enum_resolve(VALUE self, VALUE sym) {
 | 
	
		
			
				|  |  |   * EnumDescriptor corresponding to this enum type.
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  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) {
 | 
	
	
		
			
				|  | @@ -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, "resolve", enum_resolve, 1);
 | 
	
		
			
				|  |  |    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;
 | 
	
		
			
				|  |  |  }
 |