Commit 4b135d09 authored by Pavel Tvrdik's avatar Pavel Tvrdik
Browse files

Birdtest: Add function format in grammar for stringify expression

parent bb721f0d
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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'); } */

+15 −0
Original line number Diff line number Diff line
@@ -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;