aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dfilter/scanner.l
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dfilter/scanner.l')
-rw-r--r--epan/dfilter/scanner.l21
1 files changed, 17 insertions, 4 deletions
diff --git a/epan/dfilter/scanner.l b/epan/dfilter/scanner.l
index a621292699..545c923c85 100644
--- a/epan/dfilter/scanner.l
+++ b/epan/dfilter/scanner.l
@@ -32,6 +32,7 @@
#include "dfilter-int.h"
#include "syntax-tree.h"
#include "grammar.h"
+#include "dfunctions.h"
/*
* GLib 1.2[.x] doesn't define G_MAXINT32 or G_MININT32; if they're not
@@ -75,6 +76,7 @@ GString* quoted_string = NULL;
"(" return simple(TOKEN_LPAREN);
")" return simple(TOKEN_RPAREN);
+"," return simple(TOKEN_COMMA);
"==" return simple(TOKEN_TEST_EQ);
"eq" return simple(TOKEN_TEST_EQ);
@@ -232,9 +234,10 @@ GString* quoted_string = NULL;
return set_lval(TOKEN_UNPARSED, yytext);
}
-[-\+[:alnum:]_.,:]+ {
+[-\+[:alnum:]_.:]+ {
/* Is it a field name? */
header_field_info *hfinfo;
+ df_func_def_t *df_func_def;
hfinfo = proto_registrar_get_byname(yytext);
if (hfinfo) {
@@ -242,8 +245,16 @@ GString* quoted_string = NULL;
return set_lval(TOKEN_FIELD, hfinfo);
}
else {
- /* No, so treat it as an unparsed string */
- return set_lval(TOKEN_UNPARSED, yytext);
+ /* Is it a function name? */
+ df_func_def = df_func_lookup(yytext);
+ if (df_func_def) {
+ /* yes, it's a dfilter function */
+ return set_lval(TOKEN_FUNCTION, df_func_def);
+ }
+ else {
+ /* No, so treat it as an unparsed string */
+ return set_lval(TOKEN_UNPARSED, yytext);
+ }
}
}
@@ -300,10 +311,12 @@ set_lval(int token, gpointer data)
case TOKEN_UNPARSED:
type_id = STTYPE_UNPARSED;
break;
+ case TOKEN_FUNCTION:
+ type_id = STTYPE_FUNCTION;
+ break;
default:
g_assert_not_reached();
}
-
stnode_init(df_lval, type_id, data);
return token;
}