- int ret = 0;
- switch(bt_field_class_get_type(in_field_class)) {
- case BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER:
- ret = field_class_unsigned_integer_copy(md_maps,
- in_field_class, out_field_class);
- break;
- case BT_FIELD_CLASS_TYPE_SIGNED_INTEGER:
- ret = field_class_signed_integer_copy(md_maps,
- in_field_class, out_field_class);
- break;
- case BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION:
- ret = field_class_unsigned_enumeration_copy(md_maps,
- in_field_class, out_field_class);
- break;
- case BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION:
- ret = field_class_signed_enumeration_copy(md_maps,
- in_field_class, out_field_class);
- break;
- case BT_FIELD_CLASS_TYPE_REAL:
- ret = field_class_real_copy(md_maps,
- in_field_class, out_field_class);
- break;
- case BT_FIELD_CLASS_TYPE_STRING:
- ret = field_class_string_copy(md_maps,
- in_field_class, out_field_class);
- break;
- case BT_FIELD_CLASS_TYPE_STRUCTURE:
- ret = field_class_structure_copy(md_maps,
- in_field_class, out_field_class);
- break;
- case BT_FIELD_CLASS_TYPE_STATIC_ARRAY:
- ret = field_class_static_array_copy(md_maps,
- in_field_class, out_field_class);
- break;
- case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY:
- ret = field_class_dynamic_array_copy(md_maps,
- in_field_class, out_field_class);
- break;
- case BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR:
- case BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR:
- case BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR:
- ret = field_class_variant_copy(md_maps,
- in_field_class, out_field_class);
- break;
- default:
- abort();
+ enum debug_info_trace_ir_mapping_status status;
+ bt_field_class_type in_fc_type =
+ bt_field_class_get_type(in_field_class);
+
+ /*
+ * Safe to use the same value object because it's frozen at this
+ * point.
+ */
+ bt_field_class_set_user_attributes(out_field_class,
+ bt_field_class_borrow_user_attributes_const(in_field_class));
+
+ if (in_fc_type == BT_FIELD_CLASS_TYPE_BOOL) {
+ status = field_class_bool_copy(md_maps,
+ in_field_class, out_field_class);
+ } else if (in_fc_type == BT_FIELD_CLASS_TYPE_BIT_ARRAY) {
+ status = field_class_bit_array_copy(md_maps,
+ in_field_class, out_field_class);
+ } else if (in_fc_type == BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER) {
+ status = field_class_unsigned_integer_copy(md_maps,
+ in_field_class, out_field_class);
+ } else if (in_fc_type == BT_FIELD_CLASS_TYPE_SIGNED_INTEGER) {
+ status = field_class_signed_integer_copy(md_maps,
+ in_field_class, out_field_class);
+ } else if (in_fc_type == BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION) {
+ status = field_class_unsigned_enumeration_copy(md_maps,
+ in_field_class, out_field_class);
+ } else if (in_fc_type == BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION) {
+ status = field_class_signed_enumeration_copy(md_maps,
+ in_field_class, out_field_class);
+ } else if (in_fc_type == BT_FIELD_CLASS_TYPE_SINGLE_PRECISION_REAL) {
+ status = field_class_single_precision_real_copy(md_maps,
+ in_field_class, out_field_class);
+ } else if (in_fc_type == BT_FIELD_CLASS_TYPE_DOUBLE_PRECISION_REAL) {
+ status = field_class_double_precision_real_copy(md_maps,
+ in_field_class, out_field_class);
+ } else if (in_fc_type == BT_FIELD_CLASS_TYPE_STRING) {
+ status = field_class_string_copy(md_maps,
+ in_field_class, out_field_class);
+ } else if (in_fc_type == BT_FIELD_CLASS_TYPE_STRUCTURE) {
+ status = field_class_structure_copy(md_maps,
+ in_field_class, out_field_class);
+ } else if (in_fc_type == BT_FIELD_CLASS_TYPE_STATIC_ARRAY) {
+ status = field_class_static_array_copy(md_maps,
+ in_field_class, out_field_class);
+ } else if (bt_field_class_type_is(in_fc_type,
+ BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY)) {
+ status = field_class_dynamic_array_copy(md_maps,
+ in_field_class, out_field_class);
+ } else if (bt_field_class_type_is(in_fc_type,
+ BT_FIELD_CLASS_TYPE_OPTION)) {
+ status = field_class_option_copy(md_maps,
+ in_field_class, out_field_class);
+ } else if (bt_field_class_type_is(in_fc_type,
+ BT_FIELD_CLASS_TYPE_VARIANT)) {
+ status = field_class_variant_copy(md_maps,
+ in_field_class, out_field_class);
+ } else {
+ bt_common_abort();