mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
Исправляем ошибку обработки неравенства для строк в сценарии
This commit is contained in:
@@ -156,8 +156,8 @@ class BinaryExprAST : public ExprAST {
|
|||||||
IoTValue *lhs = LHS->exec(); // если присваивания не произошло, значит операция иная и необходимо значение левого операнда
|
IoTValue *lhs = LHS->exec(); // если присваивания не произошло, значит операция иная и необходимо значение левого операнда
|
||||||
if (lhs == nullptr) return nullptr;
|
if (lhs == nullptr) return nullptr;
|
||||||
|
|
||||||
// все бинарные операции кроме +, - и == обязаны работать с числами
|
// все бинарные операции кроме +, -, != и == обязаны работать с числами
|
||||||
if (Op != '+' && Op != '-' && Op != tok_equal) {
|
if (Op != '+' && Op != '-' && Op != tok_equal && Op != tok_notequal) {
|
||||||
// поэтому преобразовываем строки в булевые интерпретации
|
// поэтому преобразовываем строки в булевые интерпретации
|
||||||
if (!lhs->isDecimal) lhs->valD = lhs->valS != ""; // пустая строка = false
|
if (!lhs->isDecimal) lhs->valD = lhs->valS != ""; // пустая строка = false
|
||||||
if (!rhs->isDecimal) rhs->valD = rhs->valS != ""; // пустая строка = false
|
if (!rhs->isDecimal) rhs->valD = rhs->valS != ""; // пустая строка = false
|
||||||
@@ -175,9 +175,6 @@ class BinaryExprAST : public ExprAST {
|
|||||||
case tok_greateq:
|
case tok_greateq:
|
||||||
val.valD = lhs->valD >= rhs->valD;
|
val.valD = lhs->valD >= rhs->valD;
|
||||||
break;
|
break;
|
||||||
case tok_notequal:
|
|
||||||
val.valD = lhs->valD != rhs->valD;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '*':
|
case '*':
|
||||||
val.valD = lhs->valD * rhs->valD;
|
val.valD = lhs->valD * rhs->valD;
|
||||||
@@ -199,7 +196,7 @@ class BinaryExprAST : public ExprAST {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else { // иначе имеем дело с операциями + или - или ==, которые могут работать с разными типами данных
|
} else { // иначе имеем дело с операциями + или - или == или !=, которые могут работать с разными типами данных
|
||||||
if (lhs->isDecimal && lhs->valS == "") lhs->valS = (String)lhs->valD; // небольшой костыль пока не переделаем работу со значениями, планируется добавить long, работу со временем, перенести округление и модификаторы в IoTValue
|
if (lhs->isDecimal && lhs->valS == "") lhs->valS = (String)lhs->valD; // небольшой костыль пока не переделаем работу со значениями, планируется добавить long, работу со временем, перенести округление и модификаторы в IoTValue
|
||||||
if (rhs->isDecimal && rhs->valS == "") rhs->valS = (String)rhs->valD; // пока для сохранения округления в IoTItem применяется хитрость с сохранением внешнего вида числа в строку valS,
|
if (rhs->isDecimal && rhs->valS == "") rhs->valS = (String)rhs->valD; // пока для сохранения округления в IoTItem применяется хитрость с сохранением внешнего вида числа в строку valS,
|
||||||
// но некоторые модули и системные не делают этого, поэтому отлавливаем эту ситуацию тут и учитываем.
|
// но некоторые модули и системные не делают этого, поэтому отлавливаем эту ситуацию тут и учитываем.
|
||||||
@@ -211,6 +208,13 @@ class BinaryExprAST : public ExprAST {
|
|||||||
val.valD = compStr(lhs->valS, rhs->valS);
|
val.valD = compStr(lhs->valS, rhs->valS);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case tok_notequal:
|
||||||
|
if (lhs->isDecimal && rhs->isDecimal)
|
||||||
|
val.valD = lhs->valD != rhs->valD;
|
||||||
|
else
|
||||||
|
val.valD = !compStr(lhs->valS, rhs->valS);
|
||||||
|
break;
|
||||||
|
|
||||||
case '+':
|
case '+':
|
||||||
if (lhs->isDecimal && rhs->isDecimal)
|
if (lhs->isDecimal && rhs->isDecimal)
|
||||||
val.valD = lhs->valD + rhs->valD;
|
val.valD = lhs->valD + rhs->valD;
|
||||||
|
|||||||
Reference in New Issue
Block a user