aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--booleancondition.cpp5
-rw-r--r--node/scalaroperatornode.cpp7
-rw-r--r--operationcondition.cpp4
-rw-r--r--parsingtoolbox.cpp8
4 files changed, 21 insertions, 3 deletions
diff --git a/booleancondition.cpp b/booleancondition.cpp
index c81f5ab..6747727 100644
--- a/booleancondition.cpp
+++ b/booleancondition.cpp
@@ -159,5 +159,8 @@ qint64 BooleanCondition::valueToScalar() const
m_value->run(nullptr);
auto result= m_value->getResult();
- return result->getResult(Dice::RESULT_TYPE::SCALAR).toInt();
+ if(result)
+ return result->getResult(Dice::RESULT_TYPE::SCALAR).toInt();
+ else
+ return 0;
}
diff --git a/node/scalaroperatornode.cpp b/node/scalaroperatornode.cpp
index 9edbcdc..821150b 100644
--- a/node/scalaroperatornode.cpp
+++ b/node/scalaroperatornode.cpp
@@ -66,6 +66,13 @@ void ScalarOperatorNode::run(ExecutionNode* previous)
m_internalNode->getResult()->setPrevious(previousResult);
}
+ if(internalResult == nullptr)
+ {
+ m_errors.insert(Dice::ERROR_CODE::NO_VALID_RESULT,
+ QObject::tr("No Valid result in arithmetic operatoion: %1").arg(toString(true)));
+ return;
+ }
+
switch(m_arithmeticOperator)
{
case Die::PLUS:
diff --git a/operationcondition.cpp b/operationcondition.cpp
index 67b10fc..507416d 100644
--- a/operationcondition.cpp
+++ b/operationcondition.cpp
@@ -41,6 +41,10 @@ void OperationCondition::setBoolean(BooleanCondition* boolean)
qint64 OperationCondition::hasValid(Die* b, bool recursive, bool unhighlight) const
{
+ if(nullptr == m_boolean)
+ {
+ return 0;
+ }
QList<qint64> listValues;
if(recursive)
{
diff --git a/parsingtoolbox.cpp b/parsingtoolbox.cpp
index 702019d..2453eb7 100644
--- a/parsingtoolbox.cpp
+++ b/parsingtoolbox.cpp
@@ -204,13 +204,17 @@ Validator* ParsingToolBox::readValidator(QString& str, bool hasSquare)
{
OperationCondition* condition= new OperationCondition();
condition->setValueNode(operandNode);
- Validator* valid= readValidator(str,hasSquare);
+ Validator* valid= readValidator(str, hasSquare);
BooleanCondition* boolC= dynamic_cast<BooleanCondition*>(valid);
if(nullptr != boolC)
{
condition->setBoolean(boolC);
+ returnVal= condition;
+ }
+ else
+ {
+ delete condition;
}
- returnVal= condition;
}
}
else if(readOperand(str, operandNode))