提交 72335514 authored 作者: lazedo's avatar lazedo

FS_10597: [mod_expr] add logic AND & OR

上级 bfa39a45
...@@ -946,3 +946,35 @@ case EXPR_NODEFUNC_MANY: ...@@ -946,3 +946,35 @@ case EXPR_NODEFUNC_MANY:
break; 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;
}
...@@ -82,6 +82,8 @@ int exprFuncListInit(exprFuncList * flist) ...@@ -82,6 +82,8 @@ int exprFuncListInit(exprFuncList * flist)
EXPR_ADDFUNC_TYPE("not", EXPR_NODEFUNC_NOT, 1, 1, 0, 0); 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("for", EXPR_NODEFUNC_FOR, 4, -1, 0, 0);
EXPR_ADDFUNC_TYPE("many", EXPR_NODEFUNC_MANY, 1, -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; return EXPR_ERROR_NOERROR;
} }
......
...@@ -97,7 +97,9 @@ extern "C" { ...@@ -97,7 +97,9 @@ extern "C" {
EXPR_NODEFUNC_OR, EXPR_NODEFUNC_OR,
EXPR_NODEFUNC_NOT, EXPR_NODEFUNC_NOT,
EXPR_NODEFUNC_FOR, EXPR_NODEFUNC_FOR,
EXPR_NODEFUNC_MANY EXPR_NODEFUNC_MANY,
EXPR_NODEFUNC_LOGICAL_AND,
EXPR_NODEFUNC_LOGICAL_OR
}; };
/* Forward declarations */ /* Forward declarations */
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论