condexpr
struct condexpr *fi_optx; /* options expression */
struct condexpr *not;
struct condexpr *left;
struct condexpr *right;
struct condexpr *dm_opts; /* options */
void addfile(const char *, struct condexpr *, u_char, const char *);
int expr_eval(struct condexpr *, int (*)(const char *, void *), void *);
void appendcondmkoption(struct condexpr *, const char *, const char *);
struct condexpr *condexpr_create(enum condexpr_types);
void condexpr_destroy(struct condexpr *);
expr_eval(struct condexpr *expr, int (*fn)(const char *, void *), void *ctx)
addfile(const char *path, struct condexpr *optx, u_char flags, const char *rule)
condexpr:
| '(' condexpr ')' { $$ = $2; }
struct condexpr *cx = wrapstack[i].ptr;
DEF_ALLOCWRAP(condexpr);
static struct condexpr *
struct condexpr *cx;
static struct condexpr *
mk_cx_not(struct condexpr *sub)
struct condexpr *cx;
static struct condexpr *
mk_cx_and(struct condexpr *left, struct condexpr *right)
struct condexpr *cx;
static struct condexpr *
mk_cx_or(struct condexpr *left, struct condexpr *right)
struct condexpr *cx;
static struct condexpr *mk_cx_atom(const char *);
static struct condexpr *mk_cx_not(struct condexpr *);
static struct condexpr *mk_cx_and(struct condexpr *, struct condexpr *);
static struct condexpr *mk_cx_or(struct condexpr *, struct condexpr *);
struct condexpr *condexpr;
%type <condexpr> fopts condexpr condatom
%type <condexpr> cond_or_expr cond_and_expr cond_prefix_expr
%type <condexpr> cond_base_expr
| condexpr { $$ = $1; }
condexpr mkvarname PLUSEQ value { appendcondmkoption($1, $2, $4); }
DECL_ALLOCWRAP(condexpr);
appendcondmkoption(struct condexpr *cond, const char *name, const char *value)
emitopts(FILE *fp, struct condexpr *cond, int include)
struct condexpr *cond;
struct condexpr *cond, struct nvlist *nv_nodes)
struct condexpr *, struct nvlist *);
struct condexpr *
struct condexpr *cx;
condexpr_destroy(struct condexpr *expr)