diff options
| author | 2018-04-09 10:24:20 +0200 | |
|---|---|---|
| committer | 2018-04-09 10:26:21 +0200 | |
| commit | 510b8da8874bdafa0bd72efbd9d0521ccc4d964d (patch) | |
| tree | e6b4383a262796e8b67b8992ec21d15cf7a29acb | |
| parent | 5037bbc102fec39fbdef810427c31cb0a1722709 (diff) | |
| download | OneRoll-510b8da8874bdafa0bd72efbd9d0521ccc4d964d.tar.gz OneRoll-510b8da8874bdafa0bd72efbd9d0521ccc4d964d.zip | |
-Fix #4 crash with mishaped command.
And prevent this error to happen with other nodes.
| -rw-r--r-- | node/executionnode.h | 11 | ||||
| -rw-r--r-- | node/filternode.cpp | 2 | ||||
| -rw-r--r-- | node/keepdiceexecnode.cpp | 2 | ||||
| -rw-r--r-- | node/rerolldicenode.cpp | 7 | ||||
| -rw-r--r-- | node/scalaroperatornode.cpp | 2 |
5 files changed, 17 insertions, 7 deletions
diff --git a/node/executionnode.h b/node/executionnode.h index a84bef0..796831d 100644 --- a/node/executionnode.h +++ b/node/executionnode.h @@ -10,9 +10,14 @@ class ExecutionNode { public: - enum DICE_ERROR_CODE {NO_DICE_ERROR,DIE_RESULT_EXPECTED,BAD_SYNTAXE, - ENDLESS_LOOP_ERROR,DIVIDE_BY_ZERO,NOTHING_UNDERSTOOD, - NO_DICE_TO_ROLL,TOO_MANY_DICE,NO_VARIBALE, + enum DICE_ERROR_CODE {NO_DICE_ERROR, + DIE_RESULT_EXPECTED, + BAD_SYNTAXE, + ENDLESS_LOOP_ERROR, + DIVIDE_BY_ZERO, + NOTHING_UNDERSTOOD, + NO_DICE_TO_ROLL, + TOO_MANY_DICE,NO_VARIBALE, INVALID_INDEX}; /** * @brief ExecutionNode diff --git a/node/filternode.cpp b/node/filternode.cpp index 462774b..b2a2db9 100644 --- a/node/filternode.cpp +++ b/node/filternode.cpp @@ -24,7 +24,7 @@ void FilterNode::run(ExecutionNode* previous) { return; } - DiceResult* previousDiceResult = static_cast<DiceResult*>(previous->getResult()); + DiceResult* previousDiceResult = dynamic_cast<DiceResult*>(previous->getResult()); m_result->setPrevious(previousDiceResult); if(nullptr!=previousDiceResult) { diff --git a/node/keepdiceexecnode.cpp b/node/keepdiceexecnode.cpp index 547e343..89cda38 100644 --- a/node/keepdiceexecnode.cpp +++ b/node/keepdiceexecnode.cpp @@ -40,7 +40,7 @@ void KeepDiceExecNode::run(ExecutionNode* previous) { return; } - DiceResult* previousDiceResult = static_cast<DiceResult*>(previous->getResult()); + DiceResult* previousDiceResult = dynamic_cast<DiceResult*>(previous->getResult()); m_result->setPrevious(previousDiceResult); if(nullptr!=previousDiceResult) { diff --git a/node/rerolldicenode.cpp b/node/rerolldicenode.cpp index c156dac..2ead761 100644 --- a/node/rerolldicenode.cpp +++ b/node/rerolldicenode.cpp @@ -19,7 +19,7 @@ void RerollDiceNode::run(ExecutionNode* previous) m_previousNode = previous; if((nullptr!=previous)&&(nullptr!=previous->getResult())) { - DiceResult* previous_result = static_cast<DiceResult*>(previous->getResult()); + DiceResult* previous_result = dynamic_cast<DiceResult*>(previous->getResult()); m_result->setPrevious(previous_result); if(nullptr!=previous_result) { @@ -47,6 +47,11 @@ void RerollDiceNode::run(ExecutionNode* previous) m_nextNode->run(this); } } + else + { + m_errors.insert(ExecutionNode::DIE_RESULT_EXPECTED, + QObject::tr(" The a operator expects dice result. Please check the documentation and fix your command.")); + } } } void RerollDiceNode::setValidator(Validator* val) diff --git a/node/scalaroperatornode.cpp b/node/scalaroperatornode.cpp index a9a19e3..17ddecb 100644 --- a/node/scalaroperatornode.cpp +++ b/node/scalaroperatornode.cpp @@ -54,7 +54,7 @@ void ScalarOperatorNode::run(ExecutionNode* previous) } if(nullptr!=previous) { - DiceResult* previousResult = static_cast<DiceResult*>(previous->getResult()); + DiceResult* previousResult = dynamic_cast<DiceResult*>(previous->getResult()); if(nullptr!=previousResult) { |