+ size = state->heapinfo1[block1].busy_frag.frag_size[frag1];
+
+ if(type_id != NULL){
+ xbt_free(state->types1[block1][frag1]);
+ xbt_free(state->types2[block2][frag2]);
+ state->types1[block1][frag1] = strdup(type_id);
+ state->types2[block2][frag2] = strdup(type_id);
+ }
+
+ if(real_addr_frag1 != area1 || real_addr_frag2 != area2){
+ offset1 = (char *)area1 - (char *)real_addr_frag1;
+ offset2 = (char *)area2 - (char *)real_addr_frag2;
+ if(state->types1[block1][frag1] != NULL && state->types2[block2][frag2] != NULL){
+ new_type_id1 = get_offset_type(state->types1[block1][frag1], offset1, info, other_info, size, &switch_type);
+ new_type_id2 = get_offset_type(state->types2[block2][frag2], offset1, info, other_info, size, &switch_type);
+ }else if(state->types1[block1][frag1] != NULL){
+ new_type_id1 = get_offset_type(state->types1[block1][frag1], offset1, info, other_info, size, &switch_type);
+ new_type_id2 = get_offset_type(state->types1[block1][frag1], offset2, info, other_info, size, &switch_type);
+ }else if(state->types2[block2][frag2] != NULL){
+ new_type_id1 = get_offset_type(state->types2[block2][frag2], offset1, info, other_info, size, &switch_type);
+ new_type_id2 = get_offset_type(state->types2[block2][frag2], offset2, info, other_info, size, &switch_type);
+ }else{
+ if(match_pairs){
+ match_equals(state, previous);
+ xbt_dynar_free(&previous);
+ }
+ return -1;
+ }
+
+ if(new_type_id1 != NULL && new_type_id2 != NULL && !strcmp(new_type_id1, new_type_id2)){
+ if(switch_type){
+ type = xbt_dict_get_or_null(other_info->types, new_type_id1);
+ while(type->byte_size == 0 && type->dw_type_id != NULL)
+ type = xbt_dict_get_or_null(other_info->types, type->dw_type_id);
+ new_size1 = type->byte_size;
+ type = xbt_dict_get_or_null(other_info->types, new_type_id2);
+ while(type->byte_size == 0 && type->dw_type_id != NULL)
+ type = xbt_dict_get_or_null(other_info->types, type->dw_type_id);
+ new_size2 = type->byte_size;
+ }else{
+ type = xbt_dict_get_or_null(info->types, new_type_id1);
+ while(type->byte_size == 0 && type->dw_type_id != NULL)
+ type = xbt_dict_get_or_null(info->types, type->dw_type_id);
+ new_size1 = type->byte_size;
+ type = xbt_dict_get_or_null(info->types, new_type_id2);
+ while(type->byte_size == 0 && type->dw_type_id != NULL)
+ type = xbt_dict_get_or_null(info->types, type->dw_type_id);
+ new_size2 = type->byte_size;
+ }
+ }else{
+ if(match_pairs){
+ match_equals(state, previous);
+ xbt_dynar_free(&previous);
+ }
+ return -1;