dfilter: Remove token value from syntax tree

Currently unused. This might still be useful to differentiate
different spelling of the same token in user messages, like
"==" and "eq", but currently we are not storing test tokens
anyway, so just remove it, it makes everything simpler.

If it's ever necessary it can be added back.
This commit is contained in:
João Valverde 2021-10-26 12:32:08 +01:00
parent 0e4851b025
commit f5fea52982
5 changed files with 25 additions and 56 deletions

View File

@ -78,7 +78,7 @@ dfilter_new_function(dfwork_t *dfw, const char *name)
if (!def) {
dfilter_parse_fail(dfw, "Function '%s' does not exist", name);
}
return stnode_new(STTYPE_FUNCTION, def, name);
return stnode_new(STTYPE_FUNCTION, def);
}
/* Gets a regex from a string, and sets the error message on failure. */

View File

@ -110,25 +110,25 @@ expr(X) ::= logical_test(L). { X = L; }
/* Logical tests */
logical_test(T) ::= expr(E) TEST_AND expr(F).
{
T = stnode_new(STTYPE_TEST, NULL, NULL);
T = stnode_new(STTYPE_TEST, NULL);
sttype_test_set2(T, TEST_OP_AND, E, F);
}
logical_test(T) ::= expr(E) TEST_OR expr(F).
{
T = stnode_new(STTYPE_TEST, NULL, NULL);
T = stnode_new(STTYPE_TEST, NULL);
sttype_test_set2(T, TEST_OP_OR, E, F);
}
logical_test(T) ::= TEST_NOT expr(E).
{
T = stnode_new(STTYPE_TEST, NULL, NULL);
T = stnode_new(STTYPE_TEST, NULL);
sttype_test_set1(T, TEST_OP_NOT, E);
}
logical_test(T) ::= entity(E).
{
T = stnode_new(STTYPE_TEST, NULL, NULL);
T = stnode_new(STTYPE_TEST, NULL);
sttype_test_set1(T, TEST_OP_EXISTS, E);
}
@ -137,17 +137,17 @@ logical_test(T) ::= entity(E).
/* Entities, or things that can be compared/tested/checked */
entity(E) ::= STRING(S).
{
E = stnode_new(STTYPE_STRING, df_lval_value(S), df_lval_value(S));
E = stnode_new(STTYPE_STRING, df_lval_value(S));
df_lval_free(S);
}
entity(E) ::= CHARCONST(C).
{
E = stnode_new(STTYPE_CHARCONST, df_lval_value(C), df_lval_value(C));
E = stnode_new(STTYPE_CHARCONST, df_lval_value(C));
df_lval_free(C);
}
entity(E) ::= UNPARSED(U).
{
E = stnode_new(STTYPE_UNPARSED, df_lval_value(U), df_lval_value(U));
E = stnode_new(STTYPE_UNPARSED, df_lval_value(U));
dfilter_resolve_unparsed(dfw, E);
df_lval_free(U);
}
@ -158,7 +158,7 @@ entity(E) ::= function(F). { E = F; }
/* Ranges */
range(R) ::= entity(E) LBRACKET range_node_list(L) RBRACKET.
{
R = stnode_new(STTYPE_RANGE, NULL, NULL);
R = stnode_new(STTYPE_RANGE, NULL);
sttype_range_set(R, E, L);
/* Delete the list, but not the drange_nodes that
@ -202,7 +202,7 @@ rel_binop(O) ::= TEST_CONTAINS. { O = TEST_OP_CONTAINS; }
/* Relational tests */
relation_test(T) ::= entity(E) rel_binop(O) entity(F).
{
T = stnode_new(STTYPE_TEST, NULL, NULL);
T = stnode_new(STTYPE_TEST, NULL);
sttype_test_set2(T, O, E, F);
}
@ -220,10 +220,10 @@ relation_test(T) ::= entity(E) rel_binop(O) relation_test(R).
sttype_test_get(F, NULL, &F, NULL);
} while (stnode_type_id(F) == STTYPE_TEST);
L = stnode_new(STTYPE_TEST, NULL, NULL);
L = stnode_new(STTYPE_TEST, NULL);
sttype_test_set2(L, O, E, stnode_dup(F));
T = stnode_new(STTYPE_TEST, NULL, NULL);
T = stnode_new(STTYPE_TEST, NULL);
sttype_test_set2(T, TEST_OP_AND, L, R);
}
@ -232,15 +232,15 @@ relation_test(T) ::= entity(E) TEST_MATCHES entity(F).
{
stnode_t *R = dfilter_new_regex(dfw, F);
T = stnode_new(STTYPE_TEST, NULL, NULL);
T = stnode_new(STTYPE_TEST, NULL);
sttype_test_set2(T, TEST_OP_MATCHES, E, R);
}
relation_test(T) ::= entity(E) TEST_IN LBRACE set_node_list(L) RBRACE.
{
stnode_t *S;
T = stnode_new(STTYPE_TEST, NULL, NULL);
S = stnode_new(STTYPE_SET, L, NULL);
T = stnode_new(STTYPE_TEST, NULL);
S = stnode_new(STTYPE_SET, L);
sttype_test_set2(T, TEST_OP_IN, E, S);
}

View File

@ -973,7 +973,7 @@ check_param_entity(dfwork_t *dfw, stnode_t *st_node)
/* If there's an unparsed string, change it to an FT_STRING */
if (e_type == STTYPE_UNPARSED || e_type == STTYPE_CHARCONST) {
fvalue = dfilter_fvalue_from_unparsed(dfw, FT_STRING, st_node, TRUE, NULL);
new_st = stnode_new(STTYPE_FVALUE, fvalue, st_node->token_value);
new_st = stnode_new(STTYPE_FVALUE, fvalue);
stnode_free(st_node);
return new_st;
}

View File

@ -72,8 +72,8 @@ sttype_lookup(sttype_id_t type_id)
return result;
}
static void
_node_clear(stnode_t *node)
void
stnode_clear(stnode_t *node)
{
ws_assert_magic(node, STNODE_MAGIC);
if (node->type) {
@ -95,15 +95,7 @@ _node_clear(stnode_t *node)
}
void
stnode_clear(stnode_t *node)
{
_node_clear(node);
g_free(node->token_value);
node->token_value = NULL;
}
static void
_node_init(stnode_t *node, sttype_id_t type_id, gpointer data)
stnode_init(stnode_t *node, sttype_id_t type_id, gpointer data)
{
sttype_t *type;
@ -133,32 +125,24 @@ _node_init(stnode_t *node, sttype_id_t type_id, gpointer data)
}
}
void
stnode_init(stnode_t *node, sttype_id_t type_id, gpointer data, const char *token_value)
{
_node_init(node, type_id, data);
ws_assert(node->token_value == NULL);
node->token_value = g_strdup(token_value);
}
void
stnode_replace(stnode_t *node, sttype_id_t type_id, gpointer data)
{
uint16_t flags = node->flags; /* Save flags. */
_node_clear(node);
_node_init(node, type_id, data);
stnode_clear(node);
stnode_init(node, type_id, data);
node->flags = flags;
}
stnode_t*
stnode_new(sttype_id_t type_id, gpointer data, const char *token_value)
stnode_new(sttype_id_t type_id, gpointer data)
{
stnode_t *node;
node = g_new0(stnode_t, 1);
node->magic = STNODE_MAGIC;
stnode_init(node, type_id, data, token_value);
stnode_init(node, type_id, data);
return node;
}
@ -172,7 +156,6 @@ stnode_dup(const stnode_t *node)
new = g_new(stnode_t, 1);
new->magic = STNODE_MAGIC;
new->flags = node->flags;
new->token_value = g_strdup(node->token_value);
new->repr_display = NULL;
new->repr_debug = NULL;
@ -232,15 +215,6 @@ stnode_steal_data(stnode_t *node)
return data;
}
const char *
stnode_token_value(stnode_t *node)
{
if (node->token_value) {
return node->token_value;
}
return "<null token value>";
}
gboolean
stnode_inside_parens(stnode_t *node)
{
@ -309,7 +283,6 @@ sprint_node(stnode_t *node)
wmem_strbuf_append_printf(buf, "\t\tinside_parens = %s\n",
true_or_false(stnode_inside_parens(node)));
wmem_strbuf_append(buf, "\t}\n");
wmem_strbuf_append_printf(buf, "\ttoken_value = \"%s\"\n", stnode_token_value(node));
wmem_strbuf_append(buf, "}\n");
return wmem_strbuf_finalize(buf);
}

View File

@ -58,7 +58,6 @@ typedef struct {
sttype_t *type;
uint16_t flags;
gpointer data;
char *token_value;
char *repr_display;
char *repr_debug;
} stnode_t;
@ -82,7 +81,7 @@ void
sttype_register(sttype_t *type);
stnode_t*
stnode_new(sttype_id_t type_id, gpointer data, const char *token_value);
stnode_new(sttype_id_t type_id, gpointer data);
stnode_t*
stnode_dup(const stnode_t *org);
@ -91,7 +90,7 @@ void
stnode_clear(stnode_t *node);
void
stnode_init(stnode_t *node, sttype_id_t type_id, gpointer data, const char *token_value);
stnode_init(stnode_t *node, sttype_id_t type_id, gpointer data);
void
stnode_replace(stnode_t *node, sttype_id_t type_id, gpointer data);
@ -111,9 +110,6 @@ stnode_data(stnode_t *node);
gpointer
stnode_steal_data(stnode_t *node);
const char *
stnode_token_value(stnode_t *node);
const char *
stnode_tostr(stnode_t *node, gboolean pretty);