diff options
Diffstat (limited to 'tools/d2c/rules.h')
-rw-r--r-- | tools/d2c/rules.h | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/tools/d2c/rules.h b/tools/d2c/rules.h index af2cac5..6344828 100644 --- a/tools/d2c/rules.h +++ b/tools/d2c/rules.h @@ -25,7 +25,10 @@ #define _TOOLS_RULES_H +#include "args.h" #include "bits.h" +#include "conv.h" +#include "pproc.h" @@ -67,10 +70,33 @@ cond_expr *build_composed_cond_expression(cond_expr *, CondOpType, cond_expr *); typedef enum _CondActionType { CAT_SEE, /* Renvoi vers une instruction */ - CAT_UNPREDICTABLE /* Cas de figure improbable */ + CAT_UNPREDICTABLE, /* Cas de figure improbable */ + CAT_CALL /* Appel à une fonction C */ } CondActionType; +/* Définition d'une action de règle */ +typedef struct _rule_action +{ + CondActionType type; /* Conséquence d'une validation*/ + + union + { + /* CAT_SEE */ + char *details; /* Eventuel complément d'info. */ + + /* CAT_CALL */ + struct + { + char *callee; /* Fonction appelée */ + arg_list_t *args; /* Arguments à fournir */ + + }; + + }; + +} rule_action; + /* Règles de décodage supplémentaires */ typedef struct _decoding_rules decoding_rules; @@ -82,10 +108,10 @@ decoding_rules *create_decoding_rules(void); void delete_decoding_rules(decoding_rules *); /* Ajoute une règle complète à la définition d'un codage. */ -void register_conditional_rule(decoding_rules *, cond_expr *, CondActionType, const char *); +void register_conditional_rule(decoding_rules *, cond_expr *, const rule_action *); /* Traduit en code les éventuelles règles présentes. */ -bool write_decoding_rules(decoding_rules *, int, const char *, const char *, const coding_bits *, bool *); +bool write_decoding_rules(decoding_rules *, CondActionType, int, const char *, const char *, const coding_bits *, const conv_list *, const pre_processor *, bool *); |