MCPcopy Create free account
hub / github.com/amule-project/amule / php_eval_compare

Function php_eval_compare

src/webserver/src/php_syntree.cpp:1583–1661  ·  view source on GitHub ↗

* Same as simple_math, but result is always bool */

Source from the content-addressed store, hash-verified

1581 * Same as simple_math, but result is always bool
1582 */
1583void php_eval_compare(PHP_EXP_OP op, PHP_VALUE_NODE *op1, PHP_VALUE_NODE *op2, PHP_VALUE_NODE *result)
1584{
1585 result->type = PHP_VAL_BOOL;
1586 if ( (op1->type == PHP_VAL_STRING) || (op2->type == PHP_VAL_STRING) ) {
1587 cast_value_str(op1);
1588 cast_value_str(op2);
1589 int cmp_val = strcmp(op1->str_val, op2->str_val);
1590 switch(op) {
1591 case PHP_OP_EQ:
1592 result->int_val = (cmp_val == 0);
1593 break;
1594 case PHP_OP_NEQ:
1595 result->int_val = (cmp_val != 0);
1596 break;
1597 case PHP_OP_GRT:
1598 result->int_val = (cmp_val > 0);
1599 break;
1600 case PHP_OP_LWR:
1601 result->int_val = (cmp_val < 0);
1602 break;
1603 case PHP_OP_GRT_EQ:
1604 result->int_val = (cmp_val >= 0);
1605 break;
1606 case PHP_OP_LWR_EQ:
1607 result->int_val = (cmp_val <= 0);
1608 break;
1609 default:
1610 php_report_error(PHP_INTERNAL_ERROR, "This op is not compare op");
1611 }
1612 } else {
1613 PHP_VALUE_TYPE restype = cast_type_resolve(op1, op2);
1614 switch(op) {
1615 case PHP_OP_EQ:
1616 if ( restype == PHP_VAL_FLOAT ) {
1617 result->int_val = op1->float_val == op2->float_val;
1618 } else {
1619 result->int_val = op1->int_val == op2->int_val;
1620 }
1621 break;
1622 case PHP_OP_NEQ:
1623 if ( restype == PHP_VAL_FLOAT ) {
1624 result->int_val = op1->float_val != op2->float_val;
1625 } else {
1626 result->int_val = op1->int_val != op2->int_val;
1627 }
1628 break;
1629 case PHP_OP_GRT:
1630 if ( restype == PHP_VAL_FLOAT ) {
1631 result->int_val = op1->float_val > op2->float_val;
1632 } else {
1633 result->int_val = op1->int_val > op2->int_val;
1634 }
1635 break;
1636 case PHP_OP_GRT_EQ:
1637 if ( restype == PHP_VAL_FLOAT ) {
1638 result->int_val = op1->float_val >= op2->float_val;
1639 } else {
1640 result->int_val = op1->int_val >= op2->int_val;

Callers 2

php_expr_evalFunction · 0.85
php_executeFunction · 0.85

Calls 3

cast_value_strFunction · 0.85
php_report_errorFunction · 0.85
cast_type_resolveFunction · 0.85

Tested by

no test coverage detected