@ -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 ) ;