[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