summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-07-07 10:49:20 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-07-07 10:49:20 (GMT)
commita857e1e9db9d298b7aa91e8f618e6c0ea4db84ac (patch)
treee0dc140ee5bf5badbcee673e79c4b43f88a53322 /src
parent21d310503e29c61411491eef6be2fb83bb5ed61c (diff)
Extended the types API.
Diffstat (limited to 'src')
-rw-r--r--src/analysis/routine.c24
-rw-r--r--src/analysis/routine.h4
-rw-r--r--src/analysis/type.c43
-rw-r--r--src/analysis/type.h10
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 *);