aboutsummaryrefslogtreecommitdiffstats
path: root/filter
diff options
context:
space:
mode:
authorMaria Matejka <mq@ucw.cz>2023-06-22 17:25:18 +0200
committerMaria Matejka <mq@ucw.cz>2023-06-22 17:25:18 +0200
commit5f2ecb2298a6fe4b2fcd9efc0b39c36202496c2c (patch)
treecbce11eb8987f9b505a304d17e0e8d31651caf67 /filter
parentf8bcb037b5b71a19209f1b63d52895c8c34c675b (diff)
parent52bae235b716a3c8d629ddf1306178568c69833f (diff)
downloadbird-5f2ecb2298a6fe4b2fcd9efc0b39c36202496c2c.tar.gz
Merge tag 'v2.13.1'
Diffstat (limited to 'filter')
-rw-r--r--filter/decl.m46
-rw-r--r--filter/f-inst.c1
-rw-r--r--filter/test.conf25
3 files changed, 26 insertions, 6 deletions
diff --git a/filter/decl.m4 b/filter/decl.m4
index 5b35b672..7c863bdc 100644
--- a/filter/decl.m4
+++ b/filter/decl.m4
@@ -200,7 +200,7 @@ FID_INTERPRET_BODY()')
# Executing another filter line. This replaces the recursion
# that was needed in the former implementation.
m4_define(LINEX, `FID_INTERPRET_EXEC()LINEX_($1)FID_INTERPRET_NEW()return $1 FID_INTERPRET_BODY()')
-m4_define(LINEX_, `do {
+m4_define(LINEX_, `do if ($1) {
fstk->estk[fstk->ecnt].pos = 0;
fstk->estk[fstk->ecnt].line = $1;
fstk->estk[fstk->ecnt].ventry = fstk->vcnt;
@@ -227,9 +227,7 @@ if (!f_same(f1->fl$1, f2->fl$1)) return 0;
FID_ITERATE_BODY()m4_dnl
if (whati->fl$1) BUFFER_PUSH(fit->lines) = whati->fl$1;
FID_INTERPRET_EXEC()m4_dnl
-do { if (whati->fl$1) {
- LINEX_(whati->fl$1);
-} } while(0)
+LINEX_(whati->fl$1)
FID_INTERPRET_NEW()m4_dnl
return whati->f$1
FID_INTERPRET_BODY()')
diff --git a/filter/f-inst.c b/filter/f-inst.c
index e4b47ff4..33436853 100644
--- a/filter/f-inst.c
+++ b/filter/f-inst.c
@@ -1327,7 +1327,6 @@
FID_HIC(,break,return NULL);
}
}
- /* It is actually possible to have t->data NULL */
LINEX(t->data);
}
diff --git a/filter/test.conf b/filter/test.conf
index 600c551e..e9e3af89 100644
--- a/filter/test.conf
+++ b/filter/test.conf
@@ -39,6 +39,18 @@ bt_test_same(onef, oneg, 1);
bt_test_same(onef, twof, 0);
/*
+ * Testing filter corner cases
+ * ---------------------------
+ */
+
+function t_nothing() {}
+bt_test_suite(t_nothing, "Testing nothing");
+
+function t_metanothing() { t_nothing(); }
+bt_test_suite(t_metanothing, "Testing meta nothing");
+
+
+/*
* Testing boolean expressions
* ---------------------------
*/
@@ -76,6 +88,14 @@ bt_test_suite(t_bool, "Testing boolean expressions");
* ----------------
*/
+function aux_t_int(int t; int u)
+{
+ case t {
+ 1: {}
+ else: {}
+ }
+}
+
define four = 4;
define xyzzy = (120+10);
define '1a-a1' = (xyzzy-100);
@@ -120,7 +140,10 @@ function t_int()
else: bt_assert(false);
}
-
+ aux_t_int(1, 2);
+ aux_t_int(1, 3);
+ aux_t_int(2, 3);
+ aux_t_int(2, 2);
}
bt_test_suite(t_int, "Testing integers");