diff options
| author | Cyrille Bagard <nocbos@gmail.com> | 2018-07-07 10:49:20 (GMT) | 
|---|---|---|
| committer | Cyrille Bagard <nocbos@gmail.com> | 2018-07-07 10:49:20 (GMT) | 
| commit | a857e1e9db9d298b7aa91e8f618e6c0ea4db84ac (patch) | |
| tree | e0dc140ee5bf5badbcee673e79c4b43f88a53322 /src | |
| parent | 21d310503e29c61411491eef6be2fb83bb5ed61c (diff) | |
Extended the types API.
Diffstat (limited to 'src')
| -rw-r--r-- | src/analysis/routine.c | 24 | ||||
| -rw-r--r-- | src/analysis/routine.h | 4 | ||||
| -rw-r--r-- | src/analysis/type.c | 43 | ||||
| -rw-r--r-- | src/analysis/type.h | 10 | 
4 files changed, 75 insertions, 6 deletions
diff --git a/src/analysis/routine.c b/src/analysis/routine.c index 43097cc..d223165 100644 --- a/src/analysis/routine.c +++ b/src/analysis/routine.c @@ -24,6 +24,7 @@  #include "routine.h" +#include <assert.h>  #include <malloc.h>  #include <string.h>  #include <stdio.h> @@ -341,7 +342,7 @@ const char *g_binary_routine_get_name(const GBinRoutine *routine)  *                                                                             *  ******************************************************************************/ -void g_binary_routine_set_name_from_type(GBinRoutine *routine, GDataType *type) +void g_binary_routine_set_typed_name(GBinRoutine *routine, GDataType *type)  {      if (routine->full_name != NULL)           g_object_unref(G_OBJECT(routine->full_name)); @@ -363,7 +364,7 @@ void g_binary_routine_set_name_from_type(GBinRoutine *routine, GDataType *type)  *                                                                             *  ******************************************************************************/ -GDataType *g_binary_routine_get_type_from_name(const GBinRoutine *routine) +GDataType *g_binary_routine_get_typed_name(const GBinRoutine *routine)  {      GDataType *result;                      /* Type à retourner            */ @@ -486,7 +487,22 @@ size_t g_binary_routine_get_args_count(const GBinRoutine *routine)  GBinVariable *g_binary_routine_get_arg(GBinRoutine *routine, size_t index)  { -    return routine->args[index]; +    GBinVariable *result;                   /* Argument à retourner        */ + +    assert(index < routine->args_count); + +    if (index >= routine->args_count) +        result = NULL; + +    else +    { +        result = routine->args[index]; + +        g_object_ref(G_OBJECT(result)); + +    } + +    return result;  } @@ -537,7 +553,7 @@ static char *g_binary_routine_get_label(const GBinRoutine *routine)      char *result;                           /* Etiquette à renvoyer        */      if (routine->full_name != NULL) -        result = g_data_type_to_string(routine->full_name, false); +        result = g_data_type_to_string(routine->full_name, true);      else          result = strdup(routine->name != NULL ? routine->name : ""); diff --git a/src/analysis/routine.h b/src/analysis/routine.h index 0a4917f..9671c92 100644 --- a/src/analysis/routine.h +++ b/src/analysis/routine.h @@ -87,10 +87,10 @@ void g_binary_routine_set_name(GBinRoutine *, char *);  const char *g_binary_routine_get_name(const GBinRoutine *);  /* Définit de façon indirecte le nom humain d'une routine. */ -void g_binary_routine_set_name_from_type(GBinRoutine *, GDataType *); +void g_binary_routine_set_typed_name(GBinRoutine *, GDataType *);  /* Fournit le type construisant le nom humain d'une routine. */ -GDataType *g_binary_routine_get_type_from_name(const GBinRoutine *); +GDataType *g_binary_routine_get_typed_name(const GBinRoutine *);  /* Définit le type de retour d'une routine. */  void g_binary_routine_set_return_type(GBinRoutine *, GDataType *); diff --git a/src/analysis/type.c b/src/analysis/type.c index cc446cb..5c1878f 100644 --- a/src/analysis/type.c +++ b/src/analysis/type.c @@ -271,6 +271,26 @@ GDataType *g_data_type_get_namespace(const GDataType *type)  /******************************************************************************  *                                                                             * +*  Paramètres  : type       = instance à mettre à jour.                       * +*                qualifiers = nouveaux qualificatifs pour la variable.        * +*                                                                             * +*  Description : Définit l'ensemble des qualificatifs d'une instance de type. * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +void g_data_type_set_qualifiers(GDataType *type, TypeQualifier qualifiers) +{ +    type->qualifiers = qualifiers; + +} + + +/****************************************************************************** +*                                                                             *  *  Paramètres  : type      = instance à mettre à jour.                        *  *                qualifier = nouveau qualificatif pour la variable.           *  *                                                                             * @@ -291,6 +311,29 @@ void g_data_type_add_qualifier(GDataType *type, TypeQualifier qualifier)  /******************************************************************************  *                                                                             * +*  Paramètres  : type = instance à consulter.                                 * +*                                                                             * +*  Description : Fournit les qualificatifs associés à une instance de type.   * +*                                                                             * +*  Retour      : Qualificatifs éventuels.                                     * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +TypeQualifier g_data_type_get_qualifiers(const GDataType *type) +{ +    TypeQualifier result;                   /* Qualificatifs à renvoyer    */ + +    result = type->qualifiers; + +    return result; + +} + + +/****************************************************************************** +*                                                                             *  *  Paramètres  : type = type à consulter.                                     *  *                                                                             *  *  Description : Indique si le type est un pointeur.                          * diff --git a/src/analysis/type.h b/src/analysis/type.h index bd80f18..a8a9d5f 100644 --- a/src/analysis/type.h +++ b/src/analysis/type.h @@ -56,6 +56,10 @@ typedef enum _TypeQualifier  } TypeQualifier; +/* Masque de tous les qualificatifs */ +#define TQF_ALL ((1 << 3) - 1) + +  /* Indique le type défini pour un type quelconque. */  GType g_data_type_get_type(void); @@ -71,9 +75,15 @@ void g_data_type_set_namespace(GDataType *, GDataType *, const char *);  /* Fournit le groupe d'appartenance d'un type donné. */  GDataType *g_data_type_get_namespace(const GDataType *); +/* Définit l'ensemble des qualificatifs d'une instance de type. */ +void g_data_type_set_qualifiers(GDataType *, TypeQualifier); +  /* Ajoute un qualificatif à une instance de type. */  void g_data_type_add_qualifier(GDataType *, TypeQualifier); +/* Fournit les qualificatifs associés à une instance de type. */ +TypeQualifier g_data_type_get_qualifiers(const GDataType *); +  /* Indique si le type est un pointeur. */  bool g_data_type_is_pointer(const GDataType *);  | 
