[Scummvm-git-logs] scummvm master -> 5043af356e4d05a21a0810a3e74bfaf9efd13973
rvanlaar
roland at rolandvanlaar.nl
Thu Aug 20 10:29:42 UTC 2020
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
5043af356e DIRECTOR: LINGO: implement setAt beyond array size
Commit: 5043af356e4d05a21a0810a3e74bfaf9efd13973
https://github.com/scummvm/scummvm/commit/5043af356e4d05a21a0810a3e74bfaf9efd13973
Author: Roland van Laar (roland at rolandvanlaar.nl)
Date: 2020-08-20T12:28:49+02:00
Commit Message:
DIRECTOR: LINGO: implement setAt beyond array size
setAt(lst, 10, 1) will set the 10th element (1 indexed) to 1.
When the array size is smaller than 10, setAt will pad the list will
pad the lst with zeros and add the 1 at the end.
Changed paths:
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/tests/lists.lingo
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 72f6664687..8b929dba1d 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1015,8 +1015,10 @@ void LB::b_setAt(int nargs) {
if ((uint)index <= list.u.farr->size()) {
list.u.farr->operator[](index - 1) = value;
} else {
- // TODO: Extend the list if we request an index beyond it
- ARRBOUNDSCHECK(index, list);
+ int inserts = index - list.u.farr->size();
+ while (--inserts)
+ list.u.farr->push_back(Datum(0));
+ list.u.farr->push_back(value);
}
break;
case PARRAY:
diff --git a/engines/director/lingo/tests/lists.lingo b/engines/director/lingo/tests/lists.lingo
index c6389a0cad..0798182aaf 100644
--- a/engines/director/lingo/tests/lists.lingo
+++ b/engines/director/lingo/tests/lists.lingo
@@ -74,3 +74,13 @@ set delim_array to "one: two: three: four"
set res to item 3 of delim_array
scummvmAssert(res=" three")
set the itemDelimiter = save
+
+-- setAt
+set lst to []
+setAt lst,1,5
+scummvmAssert(lst = [5])
+set lst to []
+setAt lst,3,5
+scummvmAssert(lst = [0,0,5])
+setAt lst,2,5
+scummvmAssert(lst = [0,5,5])
More information about the Scummvm-git-logs
mailing list