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/scan | |
| parent | 50789d8c735178858411f67118bc73eb620f4e69 (diff) | |
Ban pattern count indexes sooner (from the grammar).
Diffstat (limited to 'src/analysis/scan')
| -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)); +                     }                     ; | 
