|
|
@ -167,7 +167,8 @@ VALUE Map_deep_copy(VALUE obj) { |
|
|
|
new_arena_rb); |
|
|
|
new_arena_rb); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const upb_map* Map_GetUpbMap(VALUE val, const upb_fielddef *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* key_field = map_field_key(field); |
|
|
|
const upb_fielddef* value_field = map_field_value(field); |
|
|
|
const upb_fielddef* value_field = map_field_value(field); |
|
|
|
TypeInfo value_type_info = TypeInfo_get(value_field); |
|
|
|
TypeInfo value_type_info = TypeInfo_get(value_field); |
|
|
@ -189,6 +190,7 @@ const upb_map* Map_GetUpbMap(VALUE val, const upb_fielddef *field) { |
|
|
|
rb_raise(cTypeError, "Map value type has wrong message/enum class"); |
|
|
|
rb_raise(cTypeError, "Map value type has wrong message/enum class"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Arena_fuse(self->arena, arena); |
|
|
|
return self->map; |
|
|
|
return self->map; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -236,7 +238,7 @@ static VALUE Map_merge_into_self(VALUE _self, VALUE hashmap) { |
|
|
|
upb_msg *self_msg = Map_GetMutable(_self); |
|
|
|
upb_msg *self_msg = Map_GetMutable(_self); |
|
|
|
size_t iter = UPB_MAP_BEGIN; |
|
|
|
size_t iter = UPB_MAP_BEGIN; |
|
|
|
|
|
|
|
|
|
|
|
upb_arena_fuse(arena, Arena_get(other->arena)); |
|
|
|
Arena_fuse(other->arena, arena); |
|
|
|
|
|
|
|
|
|
|
|
if (self->key_type != other->key_type || |
|
|
|
if (self->key_type != other->key_type || |
|
|
|
self->value_type_info.type != other->value_type_info.type || |
|
|
|
self->value_type_info.type != other->value_type_info.type || |
|
|
@ -511,7 +513,7 @@ static VALUE Map_dup(VALUE _self) { |
|
|
|
upb_arena *arena = Arena_get(new_self->arena); |
|
|
|
upb_arena *arena = Arena_get(new_self->arena); |
|
|
|
upb_map *new_map = Map_GetMutable(new_map_rb); |
|
|
|
upb_map *new_map = Map_GetMutable(new_map_rb); |
|
|
|
|
|
|
|
|
|
|
|
upb_arena_fuse(arena, Arena_get(self->arena)); |
|
|
|
Arena_fuse(self->arena, arena); |
|
|
|
|
|
|
|
|
|
|
|
while (upb_mapiter_next(self->map, &iter)) { |
|
|
|
while (upb_mapiter_next(self->map, &iter)) { |
|
|
|
upb_msgval key = upb_mapiter_key(self->map, iter); |
|
|
|
upb_msgval key = upb_mapiter_key(self->map, iter); |
|
|
|