break;
}
+
+/* logical and */
+case EXPR_NODEFUNC_LOGICAL_AND:
+{
+ err = exprEvalNode(obj, nodes->data.function.nodes, 0, &d1);
+
+ if (!err)
+ err = exprEvalNode(obj, nodes->data.function.nodes, 1, &d2);
+
+ if (!err) {
+ *val = (EXPRTYPE) (((unsigned int)d1) & ((unsigned int)d2));
+ } else
+ return err;
+
+ break;
+}
+
+/* or */
+case EXPR_NODEFUNC_LOGICAL_OR:
+{
+ err = exprEvalNode(obj, nodes->data.function.nodes, 0, &d1);
+
+ if (!err)
+ err = exprEvalNode(obj, nodes->data.function.nodes, 1, &d2);
+
+ if (!err) {
+ *val = (EXPRTYPE) (((unsigned int)d1) | ((unsigned int)d2));
+ } else
+ return err;
+
+ break;
+}
EXPR_ADDFUNC_TYPE("not", EXPR_NODEFUNC_NOT, 1, 1, 0, 0);
EXPR_ADDFUNC_TYPE("for", EXPR_NODEFUNC_FOR, 4, -1, 0, 0);
EXPR_ADDFUNC_TYPE("many", EXPR_NODEFUNC_MANY, 1, -1, 0, 0);
+ EXPR_ADDFUNC_TYPE("land", EXPR_NODEFUNC_LOGICAL_AND, 2, 2, 0, 0);
+ EXPR_ADDFUNC_TYPE("lor", EXPR_NODEFUNC_LOGICAL_OR, 2, 2, 0, 0);
return EXPR_ERROR_NOERROR;
}
EXPR_NODEFUNC_OR,
EXPR_NODEFUNC_NOT,
EXPR_NODEFUNC_FOR,
- EXPR_NODEFUNC_MANY
+ EXPR_NODEFUNC_MANY,
+ EXPR_NODEFUNC_LOGICAL_AND,
+ EXPR_NODEFUNC_LOGICAL_OR
};
/* Forward declarations */