dfilter: Replace compile booleans arguments with a bit flag

This commit is contained in:
João Valverde 2022-11-30 17:24:09 +00:00
parent 84e75be5c6
commit b116ccd6d5
4 changed files with 20 additions and 14 deletions

View File

@ -165,7 +165,7 @@ main(int argc, char **argv)
/* Compile it */
if (!dfilter_compile_real(expanded_text, &df, &df_err,
"dftest", TRUE, FALSE, FALSE)) {
DF_SAVE_TREE, "dftest")) {
fprintf(stderr, "dftest: %s\n", df_err->msg);
if (df_err->loc.col_start >= 0) {
fprintf(stderr, "\t%s\n", expanded_text);

View File

@ -355,9 +355,8 @@ dfilter_expand(const char *expr, char **err_ret)
gboolean
dfilter_compile_real(const gchar *text, dfilter_t **dfp,
df_error_t **errpp,
const char *caller, gboolean save_tree,
gboolean apply_macros, gboolean apply_optimization)
df_error_t **errpp, unsigned flags,
const char *caller)
{
int token;
dfilter_t *dfilter;
@ -393,9 +392,9 @@ dfilter_compile_real(const gchar *text, dfilter_t **dfp,
}
dfw = dfwork_new();
dfw->apply_optimization = apply_optimization;
dfw->apply_optimization = flags & DF_OPTIMIZE;
if (apply_macros) {
if (flags & DF_EXPAND_MACROS) {
dfw->expanded_text = dfilter_macro_apply(text, &dfw->error.msg);
if (dfw->expanded_text == NULL) {
goto FAILURE;
@ -495,7 +494,7 @@ dfilter_compile_real(const gchar *text, dfilter_t **dfp,
tree_str = NULL;
log_syntax_tree(LOG_LEVEL_NOISY, dfw->st_root, "Syntax tree after successful semantic check", &tree_str);
if (save_tree && tree_str == NULL) {
if ((flags & DF_SAVE_TREE) && tree_str == NULL) {
tree_str = dump_syntax_tree_str(dfw->st_root);
}
@ -515,7 +514,7 @@ dfilter_compile_real(const gchar *text, dfilter_t **dfp,
dfilter->raw_references = dfw->raw_references;
dfw->raw_references = NULL;
if (save_tree) {
if (flags & DF_SAVE_TREE) {
ws_assert(tree_str);
dfilter->syntax_tree_str = tree_str;
tree_str = NULL;

View File

@ -69,16 +69,23 @@ WS_DLL_PUBLIC
void
dfilter_error_free(df_error_t *);
// TODO: Replace booleans with a bit flag.
/* Save textual representation of syntax tree (for debugging purposes). */
#define DF_SAVE_TREE (1U << 0)
/* Perform macro substitution on filter text. */
#define DF_EXPAND_MACROS (1U << 1)
/* Do an optimization pass on the compiled filter. */
#define DF_OPTIMIZE (1U << 2)
WS_DLL_PUBLIC
gboolean
dfilter_compile_real(const gchar *text, dfilter_t **dfp,
df_error_t **errpp,
const char *caller, gboolean save_tree,
gboolean apply_macros, gboolean apply_optimization);
df_error_t **errpp, unsigned flags,
const char *caller);
#define dfilter_compile(text, dfp, errp) \
dfilter_compile_real(text, dfp, errp, __func__, FALSE, TRUE, TRUE)
dfilter_compile_real(text, dfp, errp, \
DF_EXPAND_MACROS|DF_OPTIMIZE, \
__func__)
/* Frees all memory used by dfilter, and frees
* the dfilter itself. */

View File

@ -626,7 +626,7 @@ _compile_dfilter(const char *text, dfilter_t **dfp, const char *caller)
return FALSE;
}
ok = dfilter_compile_real(expanded, dfp, &df_err, caller, FALSE, FALSE, TRUE);
ok = dfilter_compile_real(expanded, dfp, &df_err, DF_OPTIMIZE, caller);
if (!ok ) {
cmdarg_err("%s", df_err->msg);