diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2023-08-18 00:07:39 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2023-08-18 00:07:39 (GMT) |
commit | 2424c52c4f3bc44ce5f36348442cfa103e0989c2 (patch) | |
tree | f68aea488f403b234d4fcc6fd6e0f7b88a628ac8 /src/analysis/scan/expr.c | |
parent | 1c5a0e67186def152536d9c506e2e6c3a3a265c5 (diff) |
Create some modifiers and handle match properties inside ROST.
Diffstat (limited to 'src/analysis/scan/expr.c')
-rw-r--r-- | src/analysis/scan/expr.c | 20 |
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); |