36static void debug(
const char* fmt, ...);
84 name =
mapGet(expr,
"check");
100 arg =
mapGet(expr,
"exists");
114 name =
mapGet(arg,
"name");
129 name =
mapGet(expr,
"variable-exists");
146 arg =
mapGet(expr,
"equal");
152 left =
mapGet(arg,
"left");
167 right =
mapGet(arg,
"right");
191 arg =
mapGet(expr,
"not-equal");
197 left =
mapGet(arg,
"left");
212 right =
mapGet(arg,
"right");
236 arg =
mapGet(expr,
"regex-match");
242 left =
mapGet(arg,
"left");
257 right =
mapGet(arg,
"right");
275 arg =
mapGet(expr,
"iregex-match");
281 left =
mapGet(arg,
"left");
296 right =
mapGet(arg,
"right");
314 arg =
mapGet(expr,
"and");
320 left =
mapGet(arg,
"left");
335 right =
mapGet(arg,
"right");
365 left =
mapGet(arg,
"left");
380 right =
mapGet(arg,
"right");
402 arg =
mapGet(expr,
"not");
433 name =
mapGet(expr,
"variable-reference");
450 arg =
mapGet(expr,
"funcall");
456 name =
mapGet(arg,
"name");
465 args =
mapGet(arg,
"arguments");
471 for (i = 0; i <
listSize(args); i++) {
478 debug(
"funcall null argument %u",
520 arg =
mapGet(expr,
"substring");
526 string =
mapGet(arg,
"expression");
527 if (
string == NULL) {
534 offset =
mapGet(arg,
"offset");
535 if (offset == NULL) {
542 length =
mapGet(arg,
"length");
543 if (length == NULL) {
560 arg =
mapGet(expr,
"suffix");
566 string =
mapGet(arg,
"expression");
567 if (
string == NULL) {
574 length =
mapGet(arg,
"length");
575 if (length == NULL) {
590 arg =
mapGet(expr,
"lowercase");
606 arg =
mapGet(expr,
"uppercase");
624 arg =
mapGet(expr,
"option");
638 name =
mapGet(arg,
"name");
664 arg =
mapGet(expr,
"const-data");
681 arg =
mapGet(expr,
"packet");
687 offset =
mapGet(arg,
"offset");
688 if (offset == NULL) {
695 length =
mapGet(arg,
"length");
696 if (length == NULL) {
713 arg =
mapGet(expr,
"concat");
719 left =
mapGet(arg,
"left");
727 right =
mapGet(arg,
"right");
743 arg =
mapGet(expr,
"encapsulate");
758 arg =
mapGet(expr,
"encode-int8");
774 arg =
mapGet(expr,
"encode-int16");
790 arg =
mapGet(expr,
"encode-int32");
806 arg =
mapGet(expr,
"gethostbyname");
826 arg =
mapGet(expr,
"binary-to-ascii");
832 base =
mapGet(arg,
"base");
840 width =
mapGet(arg,
"width");
848 separator =
mapGet(arg,
"separator");
849 if (separator == NULL) {
873 return "server-name";
882 arg =
mapGet(expr,
"reverse");
888 width =
mapGet(arg,
"width");
913 arg =
mapGet(expr,
"pick-first-value");
919 for (i = 0; i <
listSize(arg); i++) {
939 return "host-decl-name";
943 return "leased-address";
952 arg =
mapGet(expr,
"config-option");
966 name =
mapGet(arg,
"name");
982 return "gethostname";
992 arg =
mapGet(expr,
"v6relay");
998 relay =
mapGet(arg,
"relay");
1030 snprintf(buf,
sizeof(buf),
"%lld", (
long long)
intValue(expr));
1049 arg =
mapGet(expr,
"extract-int8");
1065 arg =
mapGet(expr,
"extract-int16");
1081 arg =
mapGet(expr,
"extract-int32");
1097 arg =
mapGet(expr,
"const-int");
1103 snprintf(buf,
sizeof(buf),
"%lld", (
long long)
intValue(arg));
1110 return "lease-time";
1120 arg =
mapGet(expr,
"add");
1126 left =
mapGet(arg,
"left");
1135 if (add_parenthesis)
1138 if (add_parenthesis)
1141 right =
mapGet(arg,
"right");
1142 if (right == NULL) {
1149 if (add_parenthesis)
1152 if (add_parenthesis)
1165 arg =
mapGet(expr,
"subtract");
1171 left =
mapGet(arg,
"left");
1180 if (add_parenthesis)
1183 if (add_parenthesis)
1186 right =
mapGet(arg,
"right");
1187 if (right == NULL) {
1194 if (add_parenthesis)
1197 if (add_parenthesis)
1210 arg =
mapGet(expr,
"multiply");
1216 left =
mapGet(arg,
"left");
1225 if (add_parenthesis)
1228 if (add_parenthesis)
1231 right =
mapGet(arg,
"right");
1232 if (right == NULL) {
1239 if (add_parenthesis)
1242 if (add_parenthesis)
1255 arg =
mapGet(expr,
"divide");
1261 left =
mapGet(arg,
"left");
1270 if (add_parenthesis)
1273 if (add_parenthesis)
1276 right =
mapGet(arg,
"right");
1277 if (right == NULL) {
1284 if (add_parenthesis)
1287 if (add_parenthesis)
1300 arg =
mapGet(expr,
"remainder");
1306 left =
mapGet(arg,
"left");
1315 if (add_parenthesis)
1318 if (add_parenthesis)
1321 right =
mapGet(arg,
"right");
1322 if (right == NULL) {
1329 if (add_parenthesis)
1332 if (add_parenthesis)
1345 arg =
mapGet(expr,
"binary-and");
1351 left =
mapGet(arg,
"left");
1360 if (add_parenthesis)
1363 if (add_parenthesis)
1366 right =
mapGet(arg,
"right");
1367 if (right == NULL) {
1374 if (add_parenthesis)
1377 if (add_parenthesis)
1390 arg =
mapGet(expr,
"binary-or");
1396 left =
mapGet(arg,
"left");
1405 if (add_parenthesis)
1408 if (add_parenthesis)
1411 right =
mapGet(arg,
"right");
1412 if (right == NULL) {
1419 if (add_parenthesis)
1422 if (add_parenthesis)
1435 arg =
mapGet(expr,
"binary-xor");
1441 left =
mapGet(arg,
"left");
1450 if (add_parenthesis)
1453 if (add_parenthesis)
1456 right =
mapGet(arg,
"right");
1457 if (right == NULL) {
1464 if (add_parenthesis)
1467 if (add_parenthesis)
1474 return "client-state";
1482debug(
const char* fmt, ...)
1486 va_start(list, fmt);
1487 vfprintf(stderr, fmt, list);
1488 fprintf(stderr,
"\n");
void print_expression(char *name, struct expression *expr) const
void concatString(struct string *s, const struct string *a)
struct string * makeString(int l, const char *s)
isc_boolean_t boolValue(const struct element *e)
struct string * allocString(void)
void appendString(struct string *s, const char *a)
struct element * listGet(struct element *l, int i)
struct string * stringValue(struct element *e)
isc_boolean_t mapContains(const struct element *m, const char *k)
struct string * quote(struct string *s)
size_t listSize(const struct element *l)
struct element * mapGet(struct element *m, const char *k)
int64_t intValue(const struct element *e)
const char * print_numeric_expression(struct element *expr, isc_boolean_t *lose)
const char * print_boolean_expression(struct element *expr, isc_boolean_t *lose)
const char * print_data_expression(struct element *expr, isc_boolean_t *lose)
int expr_precedence(enum expr_op, struct element *)
int is_boolean_expression(struct expression *expr)
int is_numeric_expression(struct expression *expr)
int is_data_expression(struct expression *expr)