}
done:
+ /*
+ * Attributes and module calls aren't pure.
+ */
+ node->flags.pure = false;
+
if (!fr_sbuff_next_if_char(in, '}')) {
fr_strerror_const("Missing closing brace");
goto error;
case XLAT_TMPL:
if (tmpl_is_attr(node->vpt)) {
+ fr_assert(!node->flags.pure);
INFO_INDENT("attribute (%s)", tmpl_da(node->vpt)->name);
if (tmpl_num(node->vpt) != NUM_ANY) {
INFO_INDENT("{");
// attr or list
fr_assert(tmpl_is_list(node->vpt) || tmpl_is_attr(node->vpt));
fr_assert(talloc_parent(node->vpt) == node);
+ fr_assert(!node->flags.pure);
/*
* We prefer the name from the configuration file, otherwise when we get
node = xlat_exp_alloc(head, XLAT_TMPL, vpt->name, vpt->len);
node->vpt = talloc_move(node, vpt_p);
+ fr_assert(!node->flags.pure);
done:
xlat_exp_insert_tail(head, node);