| Index: third_party/protobuf/ruby/ext/google/protobuf_c/repeated_field.c
|
| diff --git a/third_party/protobuf/ruby/ext/google/protobuf_c/repeated_field.c b/third_party/protobuf/ruby/ext/google/protobuf_c/repeated_field.c
|
| index 1c651c192ddcf5d3181cd9d52fe4ddf546ff7bfc..83afbc915db46c39626e79a3d295a70d9da6df54 100644
|
| --- a/third_party/protobuf/ruby/ext/google/protobuf_c/repeated_field.c
|
| +++ b/third_party/protobuf/ruby/ext/google/protobuf_c/repeated_field.c
|
| @@ -244,11 +244,6 @@ void* RepeatedField_index_native(VALUE _self, int index) {
|
| return RepeatedField_memoryat(self, index, element_size);
|
| }
|
|
|
| -int RepeatedField_size(VALUE _self) {
|
| - RepeatedField* self = ruby_to_RepeatedField(_self);
|
| - return self->size;
|
| -}
|
| -
|
| /*
|
| * Private ruby method, used by RepeatedField.pop
|
| */
|
| @@ -447,8 +442,9 @@ VALUE RepeatedField_eq(VALUE _self, VALUE _other) {
|
| */
|
| VALUE RepeatedField_hash(VALUE _self) {
|
| RepeatedField* self = ruby_to_RepeatedField(_self);
|
| - st_index_t h = rb_hash_start(0);
|
| - VALUE hash_sym = rb_intern("hash");
|
| +
|
| + VALUE hash = LL2NUM(0);
|
| +
|
| upb_fieldtype_t field_type = self->field_type;
|
| VALUE field_type_class = self->field_type_class;
|
| size_t elem_size = native_slot_size(field_type);
|
| @@ -456,11 +452,12 @@ VALUE RepeatedField_hash(VALUE _self) {
|
| for (int i = 0; i < self->size; i++, off += elem_size) {
|
| void* mem = ((uint8_t *)self->elements) + off;
|
| VALUE elem = native_slot_get(field_type, field_type_class, mem);
|
| - h = rb_hash_uint(h, NUM2LONG(rb_funcall(elem, hash_sym, 0)));
|
| + hash = rb_funcall(hash, rb_intern("<<"), 1, INT2NUM(2));
|
| + hash = rb_funcall(hash, rb_intern("^"), 1,
|
| + rb_funcall(elem, rb_intern("hash"), 0));
|
| }
|
| - h = rb_hash_end(h);
|
|
|
| - return INT2FIX(h);
|
| + return hash;
|
| }
|
|
|
| /*
|
|
|