]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Birdtest: Add function format in grammar for stringify expression
authorPavel Tvrdik <pawel.tvrdik@gmail.com>
Wed, 16 Nov 2016 11:15:43 +0000 (12:15 +0100)
committerPavel Tvrdik <pawel.tvrdik@gmail.com>
Wed, 16 Nov 2016 11:22:01 +0000 (12:22 +0100)
filter/config.Y
filter/filter.c

index ec29ea7e4a975be814cb3ed63585bfe14060683d..eecebf618e356452d69046e048456fa0f32c6105 100644 (file)
@@ -406,7 +406,7 @@ CF_KEYWORDS(FUNCTION, PRINT, PRINTN, UNSET, RETURN,
        PREPEND, FIRST, LAST, LAST_NONAGGREGATED, MATCH,
        EMPTY,
        FILTER, WHERE, EVAL,
-       BT_ASSERT, BT_TEST_SUITE)
+       BT_ASSERT, BT_TEST_SUITE, FORMAT)
 
 %nonassoc THEN
 %nonassoc ELSE
@@ -916,6 +916,7 @@ term:
  | ROA_CHECK '(' rtable ')' { $$ = f_generate_roa_check($3, NULL, NULL); }
  | ROA_CHECK '(' rtable ',' term ',' term ')' { $$ = f_generate_roa_check($3, $5, $7); }
 
+ | FORMAT '(' term ')' {  $$ = f_new_inst(); $$->code = P('f','m'); $$->a1.p = $3; }
 
 /* | term '.' LEN { $$->code = P('P','l'); } */
 
index 88d138a0306a4749ae23e33946d529825f03b911..145ff4b3af241a55f0c438dccf57a4e17b8f6276 100644 (file)
@@ -563,6 +563,14 @@ f_rta_cow(void)
   (*f_rte)->attrs = rta_do_cow((*f_rte)->attrs, f_pool);
 }
 
+static char *
+val_format_str(struct f_val v) {
+  buffer b;
+  LOG_BUFFER_INIT(b);
+  val_format(v, &b);
+  return lp_strdup(f_pool, b.start);
+}
+
 static struct tbf rl_runtime_err = TBF_DEFAULT_LOG_LIMITS;
 
 #define runtime(fmt, ...) do { \
@@ -1477,6 +1485,13 @@ interpret(struct f_inst *what)
 
     break;
 
+  case P('f','m'):     /* Format */
+    ONEARG;
+
+    res.type = T_STRING;
+    res.val.s = val_format_str(v1);
+    break;
+
   case P('a','s'):     /* Birdtest Assert */
     ONEARG;