union side_float_value float_value;
/* Stack-copy compound types */
- const struct side_arg_vec *side_struct;
- const struct side_arg_variant *side_variant;
- const struct side_arg_vec *side_array;
- const struct side_arg_vec *side_vla;
+ side_ptr_t(const struct side_arg_vec) side_struct;
+ side_ptr_t(const struct side_arg_variant) side_variant;
+ side_ptr_t(const struct side_arg_vec) side_array;
+ side_ptr_t(const struct side_arg_vec) side_vla;
void *side_vla_app_visitor_ctx;
/* Gather basic types */
#define side_arg_float_binary64(_val) { .type = SIDE_TYPE_FLOAT_BINARY64, .u = { .side_static = { .float_value = { .side_float_binary64 = (_val) } } } }
#define side_arg_float_binary128(_val) { .type = SIDE_TYPE_FLOAT_BINARY128, .u = { .side_static = { .float_value = { .side_float_binary128 = (_val) } } } }
-#define side_arg_struct(_side_type) { .type = SIDE_TYPE_STRUCT, .u = { .side_static = { .side_struct = (_side_type) } } }
+#define side_arg_struct(_side_type) { .type = SIDE_TYPE_STRUCT, .u = { .side_static = { .side_struct = SIDE_PTR_INIT(_side_type) } } }
#define side_arg_define_variant(_identifier, _selector_val, _option) \
const struct side_arg_variant _identifier = { \
.type = SIDE_TYPE_VARIANT, \
.u = { \
.side_static = { \
- .side_variant = (_side_variant), \
+ .side_variant = SIDE_PTR_INIT(_side_variant), \
}, \
}, \
}
-#define side_arg_array(_side_type) { .type = SIDE_TYPE_ARRAY, .u = { .side_static = { .side_array = (_side_type) } } }
-#define side_arg_vla(_side_type) { .type = SIDE_TYPE_VLA, .u = { .side_static = { .side_vla = (_side_type) } } }
+#define side_arg_array(_side_type) { .type = SIDE_TYPE_ARRAY, .u = { .side_static = { .side_array = SIDE_PTR_INIT(_side_type) } } }
+#define side_arg_vla(_side_type) { .type = SIDE_TYPE_VLA, .u = { .side_static = { .side_vla = SIDE_PTR_INIT(_side_type) } } }
#define side_arg_vla_visitor(_ctx) { .type = SIDE_TYPE_VLA_VISITOR, .u = { .side_static = { .side_vla_app_visitor_ctx = (_ctx) } } }
/* Gather field arguments */
break;
case SIDE_TYPE_ARRAY:
elem_type = side_ptr_get(enum_elem_type->u.side_array.elem_type);
- array_item = item->u.side_static.side_array->sav;
+ array_item = side_ptr_get(item->u.side_static.side_array)->sav;
nr_items = type_desc->u.side_array.length;
break;
case SIDE_TYPE_VLA:
elem_type = side_ptr_get(enum_elem_type->u.side_vla.elem_type);
- array_item = item->u.side_static.side_vla->sav;
- nr_items = item->u.side_static.side_vla->len;
+ array_item = side_ptr_get(item->u.side_static.side_vla)->sav;
+ nr_items = side_ptr_get(item->u.side_static.side_vla)->len;
break;
default:
fprintf(stderr, "ERROR: Unexpected enum element type\n");
/* Stack-copy compound types */
case SIDE_TYPE_STRUCT:
- tracer_print_struct(type_desc, item->u.side_static.side_struct);
+ tracer_print_struct(type_desc, side_ptr_get(item->u.side_static.side_struct));
break;
case SIDE_TYPE_VARIANT:
- tracer_print_variant(type_desc, item->u.side_static.side_variant);
+ tracer_print_variant(type_desc, side_ptr_get(item->u.side_static.side_variant));
break;
case SIDE_TYPE_ARRAY:
- tracer_print_array(type_desc, item->u.side_static.side_array);
+ tracer_print_array(type_desc, side_ptr_get(item->u.side_static.side_array));
break;
case SIDE_TYPE_VLA:
- tracer_print_vla(type_desc, item->u.side_static.side_vla);
+ tracer_print_vla(type_desc, side_ptr_get(item->u.side_static.side_vla));
break;
case SIDE_TYPE_VLA_VISITOR:
tracer_print_vla_visitor(type_desc, item->u.side_static.side_vla_app_visitor_ctx);