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/analysis | |
parent | 21d310503e29c61411491eef6be2fb83bb5ed61c (diff) |
Extended the types API.
Diffstat (limited to 'src/analysis')
-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 *); |