diff options
Diffstat (limited to 'engines/sci/engine/klists.cpp')
-rw-r--r-- | engines/sci/engine/klists.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/engines/sci/engine/klists.cpp b/engines/sci/engine/klists.cpp index de5d7f1536..305d459ac1 100644 --- a/engines/sci/engine/klists.cpp +++ b/engines/sci/engine/klists.cpp @@ -586,7 +586,8 @@ reg_t kListIndexOf(EngineState *s, int argc, reg_t *argv) { } reg_t kListEachElementDo(EngineState *s, int argc, reg_t *argv) { - List *list = s->_segMan->lookupList(argv[0]); + const reg_t listReg = argv[0]; + List *list = s->_segMan->lookupList(listReg); Node *curNode = s->_segMan->lookupNode(list->first); Selector slc = argv[1].toUint16(); @@ -627,13 +628,16 @@ reg_t kListEachElementDo(EngineState *s, int argc, reg_t *argv) { curNode = s->_segMan->lookupNode(list->nextNodes[list->numRecursions]); } - --list->numRecursions; + if (s->_segMan->isValidAddr(listReg, SEG_TYPE_LISTS)) { + --list->numRecursions; + } return s->r_acc; } reg_t kListFirstTrue(EngineState *s, int argc, reg_t *argv) { - List *list = s->_segMan->lookupList(argv[0]); + const reg_t listReg = argv[0]; + List *list = s->_segMan->lookupList(listReg); Node *curNode = s->_segMan->lookupNode(list->first); Selector slc = argv[1].toUint16(); @@ -678,13 +682,16 @@ reg_t kListFirstTrue(EngineState *s, int argc, reg_t *argv) { curNode = s->_segMan->lookupNode(list->nextNodes[list->numRecursions]); } - --list->numRecursions; + if (s->_segMan->isValidAddr(listReg, SEG_TYPE_LISTS)) { + --list->numRecursions; + } return s->r_acc; } reg_t kListAllTrue(EngineState *s, int argc, reg_t *argv) { - List *list = s->_segMan->lookupList(argv[0]); + const reg_t listReg = argv[0]; + List *list = s->_segMan->lookupList(listReg); Node *curNode = s->_segMan->lookupNode(list->first); reg_t curObject; @@ -723,7 +730,9 @@ reg_t kListAllTrue(EngineState *s, int argc, reg_t *argv) { curNode = s->_segMan->lookupNode(list->nextNodes[list->numRecursions]); } - --list->numRecursions; + if (s->_segMan->isValidAddr(listReg, SEG_TYPE_LISTS)) { + --list->numRecursions; + } return s->r_acc; } |