aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/libparser/node/bind.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libparser/node/bind.cpp')
-rw-r--r--src/libparser/node/bind.cpp37
1 files changed, 23 insertions, 14 deletions
diff --git a/src/libparser/node/bind.cpp b/src/libparser/node/bind.cpp
index 41449d8..9c502df 100644
--- a/src/libparser/node/bind.cpp
+++ b/src/libparser/node/bind.cpp
@@ -38,27 +38,36 @@ void BindNode::run(ExecutionNode* previous)
for(auto start : *m_startList)
{
ExecutionNode* last= getLatestNode(start);
- if(nullptr != last)
+ if(!last)
+ continue;
+
+ auto tmpResult= last->getResult();
+ QSet<Result*> alreadyVisited;
+ while(nullptr != tmpResult && !alreadyVisited.contains(tmpResult))
{
- auto tmpResult= last->getResult();
- while(nullptr != tmpResult)
+ alreadyVisited.insert(tmpResult);
+ DiceResult* dice= dynamic_cast<DiceResult*>(tmpResult);
+
+ if(nullptr != dice)
{
- DiceResult* dice= dynamic_cast<DiceResult*>(tmpResult);
- if(nullptr != dice)
+ m_diceResult->setHomogeneous(false);
+ auto list= dice->getResultList();
+ for(int i= 0; i < list.size(); ++i)
{
- m_diceResult->setHomogeneous(false);
- for(auto& die : dice->getResultList())
+ auto die= list[i];
+
+ if(!die)
+ continue;
+
+ if(!die->hasBeenDisplayed())
{
- if(!die->hasBeenDisplayed())
- {
- Die* tmpdie= new Die(*die);
- die->displayed();
- m_diceResult->getResultList().append(tmpdie);
- }
+ Die* tmpdie= new Die(*die);
+ die->displayed();
+ m_diceResult->getResultList().append(tmpdie);
}
}
- tmpResult= tmpResult->getPrevious();
}
+ tmpResult= tmpResult->getPrevious();
}
}
}