summaryrefslogtreecommitdiff
path: root/src/analysis/scan/expr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/scan/expr.c')
-rw-r--r--src/analysis/scan/expr.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/analysis/scan/expr.c b/src/analysis/scan/expr.c
index 808b14f..2b00544 100644
--- a/src/analysis/scan/expr.c
+++ b/src/analysis/scan/expr.c
@@ -466,6 +466,7 @@ bool g_scan_expression_handle_set_features(const GScanExpression *expr)
/******************************************************************************
* *
* Paramètres : expr = expression à consulter. *
+* ctx = contexte de suivi de l'analyse courante. *
* count = quantité d'éléments déterminée. [OUT] *
* *
* Description : Dénombre les éléments portés par une expression. *
@@ -476,7 +477,7 @@ bool g_scan_expression_handle_set_features(const GScanExpression *expr)
* *
******************************************************************************/
-bool g_scan_expression_count_items(const GScanExpression *expr, size_t *count)
+bool g_scan_expression_count_items(const GScanExpression *expr, GScanContext *ctx, size_t *count)
{
bool result; /* Bilan à retourner */
GScanExpressionClass *class; /* Classe à activer */
@@ -486,7 +487,7 @@ bool g_scan_expression_count_items(const GScanExpression *expr, size_t *count)
class = G_SCAN_EXPRESSION_GET_CLASS(expr);
if (class->count != NULL)
- result = class->count(expr, count);
+ result = class->count(expr, ctx, count);
else
result = false;
@@ -504,6 +505,7 @@ bool g_scan_expression_count_items(const GScanExpression *expr, size_t *count)
* *
* Paramètres : expr = expression à consulter. *
* index = indice de l'élément à transférer. *
+* ctx = contexte de suivi de l'analyse courante. *
* out = zone d'enregistrement de la réduction opérée. [OUT] *
* *
* Description : Fournit un élément donné issu d'un ensemble constitué. *
@@ -514,7 +516,7 @@ bool g_scan_expression_count_items(const GScanExpression *expr, size_t *count)
* *
******************************************************************************/
-bool g_scan_expression_get_item(const GScanExpression *expr, size_t index, GScanExpression **out)
+bool g_scan_expression_get_item(const GScanExpression *expr, size_t index, GScanContext *ctx, GScanExpression **out)
{
bool result; /* Bilan à retourner */
GScanExpressionClass *class; /* Classe à activer */
@@ -525,7 +527,7 @@ bool g_scan_expression_get_item(const GScanExpression *expr, size_t index, GScan
if (class->get != NULL)
{
- result = class->get(expr, index, out);
+ result = class->get(expr, index, ctx, out);
if (*out != NULL)
g_object_ref(G_OBJECT(*out));
@@ -574,27 +576,27 @@ static GScanExpression *_g_scan_expression_intersect(GScanExpression *expr, cons
result = NULL;
- valid = g_scan_expression_count_items(other, &other_count);
+ valid = g_scan_expression_count_items(other, ctx, &other_count);
if (!valid) goto done;
/* Intersection entre deux ensembles ? */
if (g_scan_expression_handle_set_features(expr))
{
- valid = g_scan_expression_count_items(expr, &expr_count);
+ valid = g_scan_expression_count_items(expr, ctx, &expr_count);
if (!valid) goto done;
result = g_scan_generic_set_new();
for (k = 0; k < expr_count; k++)
{
- valid = g_scan_expression_get_item(expr, k, &item);
+ valid = g_scan_expression_get_item(expr, k, ctx, &item);
if (!valid) break;
comparable = G_COMPARABLE_ITEM(item);
for (i = 0; i < other_count; i++)
{
- valid = g_scan_expression_get_item(other, i, &item);
+ valid = g_scan_expression_get_item(other, i, ctx, &item);
if (!valid) break;
valid = g_comparable_item_compare_rich(comparable, G_COMPARABLE_ITEM(item), RCO_EQ, &status);
@@ -619,7 +621,7 @@ static GScanExpression *_g_scan_expression_intersect(GScanExpression *expr, cons
for (i = 0; i < other_count && result == NULL; i++)
{
- valid = g_scan_expression_get_item(other, i, &item);
+ valid = g_scan_expression_get_item(other, i, ctx, &item);
if (!valid) break;
valid = g_comparable_item_compare_rich(comparable, G_COMPARABLE_ITEM(item), RCO_EQ, &status);