aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dfilter
diff options
context:
space:
mode:
authorJoão Valverde <j@v6e.pt>2022-04-20 11:27:24 +0100
committerJoão Valverde <j@v6e.pt>2022-05-12 14:06:33 +0100
commit164f3ce9a28d85811dc86e20a48d2e84cfe06e2b (patch)
tree222bf26726dd6e48d469a451932d9f2236651734 /epan/dfilter
parent8c9480214bd82c33410d0891585b82902931ea7f (diff)
dfilter: Improve syntax tree display format for sets
Diffstat (limited to 'epan/dfilter')
-rw-r--r--epan/dfilter/syntax-tree.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/epan/dfilter/syntax-tree.c b/epan/dfilter/syntax-tree.c
index c9ba44a9ce..30439dc878 100644
--- a/epan/dfilter/syntax-tree.c
+++ b/epan/dfilter/syntax-tree.c
@@ -375,7 +375,9 @@ static void
visit_tree(wmem_strbuf_t *buf, stnode_t *node, int level)
{
stnode_t *left, *right;
+ stnode_t *lower, *upper;
GSList *params;
+ GSList *nodelist;
if (stnode_type_id(node) == STTYPE_TEST ||
stnode_type_id(node) == STTYPE_ARITHMETIC) {
@@ -396,6 +398,27 @@ visit_tree(wmem_strbuf_t *buf, stnode_t *node, int level)
ws_assert_not_reached();
}
}
+ else if (stnode_type_id(node) == STTYPE_SET) {
+ nodelist = stnode_data(node);
+ wmem_strbuf_append_printf(buf, "SET(#%u):\n", g_slist_length(nodelist) / 2);
+ while (nodelist) {
+ indent(buf, level + 1);
+ lower = nodelist->data;
+ wmem_strbuf_append(buf, stnode_tostr(lower, FALSE));
+ /* Set elements are always in pairs; upper may be null. */
+ nodelist = g_slist_next(nodelist);
+ ws_assert(nodelist);
+ upper = nodelist->data;
+ if (upper != NULL) {
+ wmem_strbuf_append(buf, " .. ");
+ wmem_strbuf_append(buf, stnode_tostr(upper, FALSE));
+ }
+ nodelist = g_slist_next(nodelist);
+ if (nodelist != NULL) {
+ wmem_strbuf_append_c(buf, '\n');
+ }
+ }
+ }
else if (stnode_type_id(node) == STTYPE_FUNCTION) {
wmem_strbuf_append_printf(buf, "%s:\n", stnode_todebug(node));
params = sttype_function_params(node);