return ctx_decl_scope_register_prefix_alias(scope, _PREFIX_VARIANT, name, &decl->base);
}
-/**
- * Destroys a visitor context.
- *
- * @param ctx Visitor context to destroy
- */
-static void ctx_destroy(struct ctf_visitor_generate_ir *ctx)
+ctf_visitor_generate_ir::~ctf_visitor_generate_ir()
{
- struct ctx_decl_scope *scope;
-
- if (!ctx) {
- goto end;
- }
-
- scope = ctx->current_scope;
+ struct ctx_decl_scope *scope = this->current_scope;
/*
* Destroy all scopes, from current one to the root scope.
scope = parent_scope;
}
- bt_trace_class_put_ref(ctx->trace_class);
-
- if (ctx->ctf_tc) {
- ctf_trace_class_destroy(ctx->ctf_tc);
+ if (this->ctf_tc) {
+ ctf_trace_class_destroy(this->ctf_tc);
}
-
- delete ctx;
-
-end:
- return;
}
/**
ctf_visitor_generate_ir::UP ctx {new ctf_visitor_generate_ir {*decoder_config, logger}};
if (decoder_config->self_comp) {
- ctx->trace_class = bt_trace_class_create(decoder_config->self_comp);
- if (!ctx->trace_class) {
+ bt_trace_class *trace_class = bt_trace_class_create(decoder_config->self_comp);
+ if (!trace_class) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(ctx->logger, "Cannot create empty trace class.");
goto error;
}
+
+ ctx->trace_class = bt2::TraceClass::Shared::createWithoutRef(trace_class);
}
ctx->ctf_tc = ctf_trace_class_create();
/*
* If we have a pointer declarator, it HAS to
- * be present in the field class aliases (else
- * fail).
+ * be present in the field class aliases (else
+ * fail).
*/
qalias =
create_class_alias_identifier(ctx, cls_specifier_list, node_field_class_declarator);
static void apply_clock_class_is_absolute(struct ctf_visitor_generate_ir *ctx,
struct ctf_clock_class *clock)
{
- if (ctx->decoder_config.force_clock_class_origin_unix_epoch) {
+ if (ctx->decoder_config.clkClsCfg.forceOriginIsUnixEpoch) {
clock->is_absolute = true;
}
struct ctf_clock_class *clock)
{
uint64_t freq;
- int64_t offset_s_to_apply = ctx->decoder_config.clock_class_offset_s;
+ int64_t offset_s_to_apply = ctx->decoder_config.clkClsCfg.offsetSec;
uint64_t offset_ns_to_apply;
int64_t cur_offset_s;
uint64_t cur_offset_cycles;
- if (ctx->decoder_config.clock_class_offset_s == 0 &&
- ctx->decoder_config.clock_class_offset_ns == 0) {
+ if (ctx->decoder_config.clkClsCfg.offsetSec == 0 &&
+ ctx->decoder_config.clkClsCfg.offsetNanoSec == 0) {
goto end;
}
/* Transfer nanoseconds to seconds as much as possible */
- if (ctx->decoder_config.clock_class_offset_ns < 0) {
- const int64_t abs_ns = -ctx->decoder_config.clock_class_offset_ns;
+ if (ctx->decoder_config.clkClsCfg.offsetNanoSec < 0) {
+ const int64_t abs_ns = -ctx->decoder_config.clkClsCfg.offsetNanoSec;
const int64_t abs_extra_s = abs_ns / INT64_C(1000000000) + 1;
const int64_t extra_s = -abs_extra_s;
const int64_t offset_ns =
- ctx->decoder_config.clock_class_offset_ns - (extra_s * INT64_C(1000000000));
+ ctx->decoder_config.clkClsCfg.offsetNanoSec - (extra_s * INT64_C(1000000000));
BT_ASSERT(offset_ns > 0);
offset_ns_to_apply = (uint64_t) offset_ns;
offset_s_to_apply += extra_s;
} else {
- const int64_t extra_s = ctx->decoder_config.clock_class_offset_ns / INT64_C(1000000000);
+ const int64_t extra_s = ctx->decoder_config.clkClsCfg.offsetNanoSec / INT64_C(1000000000);
const int64_t offset_ns =
- ctx->decoder_config.clock_class_offset_ns - (extra_s * INT64_C(1000000000));
+ ctx->decoder_config.clkClsCfg.offsetNanoSec - (extra_s * INT64_C(1000000000));
BT_ASSERT(offset_ns >= 0);
offset_ns_to_apply = (uint64_t) offset_ns;
return ctx;
}
-static void ctf_visitor_generate_ir_destroy(struct ctf_visitor_generate_ir *visitor)
-{
- ctx_destroy(visitor);
-}
-
-void ctf_visitor_generate_ir_deleter::operator()(ctf_visitor_generate_ir *visitor)
-{
- ctf_visitor_generate_ir_destroy(visitor);
-}
-
-bt_trace_class *ctf_visitor_generate_ir_get_ir_trace_class(struct ctf_visitor_generate_ir *ctx)
+bt2::TraceClass::Shared
+ctf_visitor_generate_ir_get_ir_trace_class(struct ctf_visitor_generate_ir *ctx)
{
BT_ASSERT_DBG(ctx);
- if (ctx->trace_class) {
- bt_trace_class_get_ref(ctx->trace_class);
- }
-
return ctx->trace_class;
}
if (ctx->trace_class) {
/* Copy new CTF metadata -> new IR metadata */
- ret =
- ctf_trace_class_translate(ctx->decoder_config.self_comp, ctx->trace_class, ctx->ctf_tc);
+ ret = ctf_trace_class_translate(ctx->decoder_config.self_comp,
+ ctx->trace_class->libObjPtr(), ctx->ctf_tc);
if (ret) {
ret = -EINVAL;
goto end;