diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2023-11-15 00:53:22 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2023-11-15 00:59:10 (GMT) |
commit | 025b364871c7a78ac03652dc6e47ee29e38199a0 (patch) | |
tree | c1de132b05edbbe9ece40b6b5cff253cda10b733 /src/analysis | |
parent | 50789d8c735178858411f67118bc73eb620f4e69 (diff) |
Ban pattern count indexes sooner (from the grammar).
Diffstat (limited to 'src/analysis')
-rw-r--r-- | src/analysis/scan/exprs/handler.c | 23 | ||||
-rw-r--r-- | src/analysis/scan/exprs/handler.h | 3 | ||||
-rw-r--r-- | src/analysis/scan/grammar.y | 9 |
3 files changed, 34 insertions, 1 deletions
diff --git a/src/analysis/scan/exprs/handler.c b/src/analysis/scan/exprs/handler.c index ea24443..ecc5a21 100644 --- a/src/analysis/scan/exprs/handler.c +++ b/src/analysis/scan/exprs/handler.c @@ -248,6 +248,29 @@ bool g_scan_pattern_handler_create(GScanPatternHandler *handler, GSearchPattern /****************************************************************************** * * * Paramètres : handler = instance à initialiser pleinement. * +* * +* Description : Indique le type de manipulation de correspondances spécifié. * +* * +* Retour : Type de manipulation de correspondances représentée. * +* * +* Remarques : - * +* * +******************************************************************************/ + +ScanHandlerType g_scan_pattern_handler_get_handler_type(const GScanPatternHandler *handler) +{ + ScanHandlerType result; /* Nature à retourner */ + + result = handler->type; + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : handler = instance à initialiser pleinement. * * ctx = contexte de suivi de l'analyse courante. * * count = quantité de correspondances enregistrées. [OUT] * * * diff --git a/src/analysis/scan/exprs/handler.h b/src/analysis/scan/exprs/handler.h index 407ccdc..24c4e8f 100644 --- a/src/analysis/scan/exprs/handler.h +++ b/src/analysis/scan/exprs/handler.h @@ -62,6 +62,9 @@ GType g_scan_pattern_handler_get_type(void); /* Met en place une manipulation de correspondances établies. */ GScanExpression *g_scan_pattern_handler_new(GSearchPattern ** const, size_t, ScanHandlerType); +/* Indique le type de manipulation de correspondances spécifié. */ +ScanHandlerType g_scan_pattern_handler_get_handler_type(const GScanPatternHandler *); + /* Fournit la liste de toutes les correspondances représentées. */ GScanMatch **g_scan_pattern_handler_get_all_matches(const GScanPatternHandler *, GScanContext *, size_t *); diff --git a/src/analysis/scan/grammar.y b/src/analysis/scan/grammar.y index 801898f..8380a81 100644 --- a/src/analysis/scan/grammar.y +++ b/src/analysis/scan/grammar.y @@ -1541,11 +1541,18 @@ relational_expr : cexpression "<" cexpression { $$ = $1; } - | pattern_handler "[" cexpression "]" + | _pattern_handler "[" cexpression "]" { + if (g_scan_pattern_handler_get_handler_type(G_SCAN_PATTERN_HANDLER($1)) == SHT_COUNTER) + { + raise_error("Match counts can not get indexed"); + YYERROR; + } + $$ = g_scan_set_item_new($1, $3); g_object_unref(G_OBJECT($1)); g_object_unref(G_OBJECT($3)); + } ; |