From dfe76faf21e254c02c86a1b0b1f8ca8fc07fe027 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Sat, 12 Sep 2020 11:49:14 +0200 Subject: Noted a special attention to a potential special case. --- tools/d2c/conv/manager.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/tools/d2c/conv/manager.c b/tools/d2c/conv/manager.c index f664beb..aae69c2 100644 --- a/tools/d2c/conv/manager.c +++ b/tools/d2c/conv/manager.c @@ -452,8 +452,39 @@ bool define_conv_func(conv_func *func, int fd, const coding_bits *bits, const co */ if (func->defined) { - // TODO : faire un object_ref() si c'est un objet - //assert(0); + /** + * La question de la propriété d'un opérande se pose si un opérande + * est partagé entre plusieurs propriétaires. + * + * Le second usage de cet opérande, détecté ici, doit conduire à + * une incrémentation de son compteur de références, via un appel à + * g_object_ref(), si une instance GObject est manipulée. + * + * Or ce n'est jusqu'à présent jamais le cas. Les doubles usages sont + * issus de constructions via les fonctions suivantes : + * + * - UInt ; + * - SingleWordVector ; + * - DoubleWordVector. + * + * La mise en place d'une incrémentation des objets est donc reportée + * au moment où elle sera utile. + */ + +#ifndef NDEBUG + + if (!func->is_expr) + { + if (strcmp(func->name, "UInt") != 0 + && strcmp(func->name, "SingleWordVector") != 0 + && strcmp(func->name, "DoubleWordVector") != 0) + { + assert(false); + } + + } + +#endif return true; -- cgit v0.11.2-87-g4458