diff options
Diffstat (limited to 'tools/d2c/pproc.c')
-rw-r--r-- | tools/d2c/pproc.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tools/d2c/pproc.c b/tools/d2c/pproc.c index fb72774..ec397f3 100644 --- a/tools/d2c/pproc.c +++ b/tools/d2c/pproc.c @@ -38,6 +38,9 @@ struct _pre_processor string_exch *macros; /* Remplacements de chaînes */ size_t macros_count; /* Nombre de ces remplacements */ + const char **op_producers; /* Producteurs d'opérandes */ + size_t op_prod_count; /* Quantité de producteurs */ + }; @@ -238,3 +241,53 @@ const char *find_macro(const pre_processor *pp, const char *src) return result; } + + +/****************************************************************************** +* * +* Paramètres : pp = pré-processeur dont le contenu est à compléter. * +* func = fonction produisant un opérande final. * +* * +* Description : Mémorise une fonction comme produisant un opérateur final. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void register_as_operand_producer(pre_processor *pp, const char *func) +{ + pp->op_producers = (const char **)realloc(pp->op_producers, ++pp->op_prod_count * sizeof(const char **)); + + pp->op_producers[pp->op_prod_count - 1] = func; + +} + + +/****************************************************************************** +* * +* Paramètres : pp = pré-processeur dont le contenu est à consulter. * +* func = fonction dont la nature du résultat est recherchée. * +* * +* Description : Détermine si une fonction produit un opérande ou non. * +* * +* Retour : true si la fonction fournie produit un opérande final. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool is_operand_producer(const pre_processor *pp, const char *func) +{ + bool result; /* Bilan à retourner */ + size_t i; /* Boucle de parcours */ + + result = false; + + for (i = 0; i < pp->op_prod_count && !result; i++) + result = (strcmp(pp->op_producers[i], func) == 0); + + return result; + +} |