[Scummvm-git-logs] scummvm master -> db3341e2f1b1f988dc809485432c3db1d66a0655
djsrv
noreply at scummvm.org
Tue Jun 28 05:06:13 UTC 2022
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
c38ac3ed1a DIRECTOR: LINGO: Add ignoreGlobal flag to Datum
158e33e64b DIRECTOR: LINGO: Set ignoreGlobal to true for XObjects
db3341e2f1 DIRECTOR: LINGO: Add tests for show/clearGlobals on XObjects
Commit: c38ac3ed1a2a44d055ea91e35ff85fa7691e06a1
https://github.com/scummvm/scummvm/commit/c38ac3ed1a2a44d055ea91e35ff85fa7691e06a1
Author: djsrv (dservilla at gmail.com)
Date: 2022-06-28T00:05:23-05:00
Commit Message:
DIRECTOR: LINGO: Add ignoreGlobal flag to Datum
Changed paths:
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 810767f56a6..c8873e8e5d6 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1660,7 +1660,11 @@ void LB::b_alert(int nargs) {
}
void LB::b_clearGlobals(int nargs) {
- g_lingo->_globalvars.clear();
+ for (DatumHash::iterator it = g_lingo->_globalvars.begin(); it != g_lingo->_globalvars.end(); it++) {
+ if (!it->_value.ignoreGlobal) {
+ g_lingo->_globalvars.erase(it);
+ }
+ }
}
void LB::b_cursor(int nargs) {
@@ -1691,7 +1695,9 @@ void LB::b_showGlobals(int nargs) {
global_out += ver.asString() + "\n";
if (g_lingo->_globalvars.size()) {
for (auto it = g_lingo->_globalvars.begin(); it != g_lingo->_globalvars.end(); it++) {
- global_out += it->_key + " = " + it->_value.asString() + "\n";
+ if (!it->_value.ignoreGlobal) {
+ global_out += it->_key + " = " + it->_value.asString() + "\n";
+ }
}
}
g_debugger->debugPrintf("%s", global_out.c_str());
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 9b1498f5445..afca5925aa2 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -622,6 +622,7 @@ Datum::Datum() {
type = VOID;
refCount = new int;
*refCount = 1;
+ ignoreGlobal = false;
}
Datum::Datum(const Datum &d) {
@@ -629,6 +630,7 @@ Datum::Datum(const Datum &d) {
u = d.u;
refCount = d.refCount;
*refCount += 1;
+ ignoreGlobal = false;
}
Datum& Datum::operator=(const Datum &d) {
@@ -639,6 +641,7 @@ Datum& Datum::operator=(const Datum &d) {
refCount = d.refCount;
*refCount += 1;
}
+ ignoreGlobal = false;
return *this;
}
@@ -654,6 +657,7 @@ Datum::Datum(double val) {
type = FLOAT;
refCount = new int;
*refCount = 1;
+ ignoreGlobal = false;
}
Datum::Datum(const Common::String &val) {
@@ -661,6 +665,7 @@ Datum::Datum(const Common::String &val) {
type = STRING;
refCount = new int;
*refCount = 1;
+ ignoreGlobal = false;
}
Datum::Datum(AbstractObject *val) {
@@ -674,6 +679,7 @@ Datum::Datum(AbstractObject *val) {
refCount = new int;
*refCount = 1;
}
+ ignoreGlobal = false;
}
Datum::Datum(const CastMemberID &val) {
@@ -681,6 +687,7 @@ Datum::Datum(const CastMemberID &val) {
type = CASTREF;
refCount = new int;
*refCount = 1;
+ ignoreGlobal = false;
}
Datum::Datum(const Common::Rect &rect) {
@@ -690,6 +697,7 @@ Datum::Datum(const Common::Rect &rect) {
u.farr->arr.push_back(Datum(rect.top));
u.farr->arr.push_back(Datum(rect.right));
u.farr->arr.push_back(Datum(rect.bottom));
+ ignoreGlobal = false;
}
void Datum::reset() {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 2a103adb211..779aa3882b8 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -147,6 +147,8 @@ struct Datum { /* interpreter stack type */
int *refCount;
+ bool ignoreGlobal; // True if this Datum should be ignored by showGlobals and clearGlobals
+
Datum();
Datum(const Datum &d);
Datum& operator=(const Datum &d);
Commit: 158e33e64bc62aa7b8ab55c1548eb6535f5801cf
https://github.com/scummvm/scummvm/commit/158e33e64bc62aa7b8ab55c1548eb6535f5801cf
Author: djsrv (dservilla at gmail.com)
Date: 2022-06-28T00:05:23-05:00
Commit Message:
DIRECTOR: LINGO: Set ignoreGlobal to true for XObjects
Changed paths:
engines/director/lingo/lingo.cpp
engines/director/lingo/lingo.h
engines/director/lingo/xlibs/aiff.cpp
engines/director/lingo/xlibs/applecdxobj.cpp
engines/director/lingo/xlibs/barakeobj.cpp
engines/director/lingo/xlibs/cdromxobj.cpp
engines/director/lingo/xlibs/fileio.cpp
engines/director/lingo/xlibs/flushxobj.cpp
engines/director/lingo/xlibs/gpid.cpp
engines/director/lingo/xlibs/jitdraw3.cpp
engines/director/lingo/xlibs/jwxini.cpp
engines/director/lingo/xlibs/labeldrvxobj.cpp
engines/director/lingo/xlibs/memoryxobj.cpp
engines/director/lingo/xlibs/miscx.cpp
engines/director/lingo/xlibs/movemousexobj.cpp
engines/director/lingo/xlibs/movutils.cpp
engines/director/lingo/xlibs/orthoplayxobj.cpp
engines/director/lingo/xlibs/palxobj.cpp
engines/director/lingo/xlibs/popupmenuxobj.cpp
engines/director/lingo/xlibs/serialportxobj.cpp
engines/director/lingo/xlibs/soundjam.cpp
engines/director/lingo/xlibs/videodiscxobj.cpp
engines/director/lingo/xlibs/winxobj.cpp
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index afca5925aa2..83b70ac7ea7 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -1513,4 +1513,9 @@ CastMemberID Lingo::resolveCastMember(const Datum &memberID, const Datum &castLi
return CastMemberID(-1, castLib.asInt());
}
+void Lingo::exposeXObject(const char *name, Datum obj) {
+ _globalvars[name] = obj;
+ _globalvars[name].ignoreGlobal = true;
+}
+
} // End of namespace Director
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 779aa3882b8..158654caad3 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -350,6 +350,7 @@ public:
Common::U32String evalChunkRef(const Datum &var);
Datum findVarV4(int varType, const Datum &id);
CastMemberID resolveCastMember(const Datum &memberID, const Datum &castLib);
+ void exposeXObject(const char *name, Datum obj);
int getAlignedType(const Datum &d1, const Datum &d2, bool numsOnly);
diff --git a/engines/director/lingo/xlibs/aiff.cpp b/engines/director/lingo/xlibs/aiff.cpp
index 85db50e111b..fc421306d53 100644
--- a/engines/director/lingo/xlibs/aiff.cpp
+++ b/engines/director/lingo/xlibs/aiff.cpp
@@ -71,7 +71,7 @@ void AiffXObj::open(int type) {
if (type == kXObj) {
AiffXObject::initMethods(xlibMethods);
AiffXObject *xobj = new AiffXObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
diff --git a/engines/director/lingo/xlibs/applecdxobj.cpp b/engines/director/lingo/xlibs/applecdxobj.cpp
index 34a2ab351c9..352458423c4 100644
--- a/engines/director/lingo/xlibs/applecdxobj.cpp
+++ b/engines/director/lingo/xlibs/applecdxobj.cpp
@@ -108,7 +108,7 @@ void AppleCDXObj::open(int type) {
if (type == kXObj) {
AppleCDXObject::initMethods(xlibMethods);
AppleCDXObject *xobj = new AppleCDXObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
diff --git a/engines/director/lingo/xlibs/barakeobj.cpp b/engines/director/lingo/xlibs/barakeobj.cpp
index 22f2b02814f..244cc0e5745 100644
--- a/engines/director/lingo/xlibs/barakeobj.cpp
+++ b/engines/director/lingo/xlibs/barakeobj.cpp
@@ -60,7 +60,7 @@ void BarakeObj::open(int type) {
if (type == kXObj) {
BarakeObject::initMethods(xlibMethods);
BarakeObject *xobj = new BarakeObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
diff --git a/engines/director/lingo/xlibs/cdromxobj.cpp b/engines/director/lingo/xlibs/cdromxobj.cpp
index a4e72ba3d21..231ec719400 100644
--- a/engines/director/lingo/xlibs/cdromxobj.cpp
+++ b/engines/director/lingo/xlibs/cdromxobj.cpp
@@ -153,7 +153,7 @@ void CDROMXObj::open(int type) {
if (type == kXObj) {
CDROMXObject::initMethods(xlibMethods);
CDROMXObject *xobj = new CDROMXObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
diff --git a/engines/director/lingo/xlibs/fileio.cpp b/engines/director/lingo/xlibs/fileio.cpp
index a1a36a71254..b3ee01ff1f8 100644
--- a/engines/director/lingo/xlibs/fileio.cpp
+++ b/engines/director/lingo/xlibs/fileio.cpp
@@ -62,7 +62,7 @@ void FileIO::open(int type) {
if (type == kXObj) {
FileObject::initMethods(xlibMethods);
FileObject *xobj = new FileObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
} else if (type == kXtraObj) {
// TODO - Implement Xtra
}
diff --git a/engines/director/lingo/xlibs/flushxobj.cpp b/engines/director/lingo/xlibs/flushxobj.cpp
index 247b11315f8..717ba94c020 100644
--- a/engines/director/lingo/xlibs/flushxobj.cpp
+++ b/engines/director/lingo/xlibs/flushxobj.cpp
@@ -68,7 +68,7 @@ void FlushXObj::open(int type) {
FlushXObject::initMethods(xlibMethods);
FlushXObject *xobj = new FlushXObject(kXObj);
for (uint i = 0; xlibNames[i]; i++) {
- g_lingo->_globalvars[xlibNames[i]] = xobj;
+ g_lingo->exposeXObject(xlibNames[i], xobj);
}
}
}
diff --git a/engines/director/lingo/xlibs/gpid.cpp b/engines/director/lingo/xlibs/gpid.cpp
index 7cc3a242315..d754194f9b5 100644
--- a/engines/director/lingo/xlibs/gpid.cpp
+++ b/engines/director/lingo/xlibs/gpid.cpp
@@ -66,7 +66,7 @@ void GpidXObj::open(int type) {
if (type == kXObj) {
ProductIdXObject::initMethods(xlibMethods);
ProductIdXObject *xobj = new ProductIdXObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
diff --git a/engines/director/lingo/xlibs/jitdraw3.cpp b/engines/director/lingo/xlibs/jitdraw3.cpp
index b3cac7f3357..d2e9b3828ed 100644
--- a/engines/director/lingo/xlibs/jitdraw3.cpp
+++ b/engines/director/lingo/xlibs/jitdraw3.cpp
@@ -93,7 +93,7 @@ void JITDraw3XObj::open(int type) {
if (type == kXObj) {
JITDraw3XObject::initMethods(xlibMethods);
JITDraw3XObject *xobj = new JITDraw3XObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
diff --git a/engines/director/lingo/xlibs/jwxini.cpp b/engines/director/lingo/xlibs/jwxini.cpp
index 4ac56f10343..ab710db8cf5 100644
--- a/engines/director/lingo/xlibs/jwxini.cpp
+++ b/engines/director/lingo/xlibs/jwxini.cpp
@@ -69,7 +69,7 @@ void JourneyWareXINIXObj::open(int type) {
if (type == kXObj) {
JourneyWareXINIXObject::initMethods(xlibMethods);
JourneyWareXINIXObject *xobj = new JourneyWareXINIXObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
diff --git a/engines/director/lingo/xlibs/labeldrvxobj.cpp b/engines/director/lingo/xlibs/labeldrvxobj.cpp
index 36222f85284..c563c3f0d9a 100644
--- a/engines/director/lingo/xlibs/labeldrvxobj.cpp
+++ b/engines/director/lingo/xlibs/labeldrvxobj.cpp
@@ -59,7 +59,7 @@ void LabelDrvXObj::open(int type) {
if (type == kXObj) {
LabelDrvXObject::initMethods(xlibMethods);
LabelDrvXObject *xobj = new LabelDrvXObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
diff --git a/engines/director/lingo/xlibs/memoryxobj.cpp b/engines/director/lingo/xlibs/memoryxobj.cpp
index 9d1841fa873..e48fedb87b7 100644
--- a/engines/director/lingo/xlibs/memoryxobj.cpp
+++ b/engines/director/lingo/xlibs/memoryxobj.cpp
@@ -74,7 +74,7 @@ void MemoryXObj::open(int type) {
if (type == kXObj) {
MemoryXObject::initMethods(xlibMethods);
MemoryXObject *xobj = new MemoryXObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
diff --git a/engines/director/lingo/xlibs/miscx.cpp b/engines/director/lingo/xlibs/miscx.cpp
index d798d4647b7..0f15c3eefa9 100644
--- a/engines/director/lingo/xlibs/miscx.cpp
+++ b/engines/director/lingo/xlibs/miscx.cpp
@@ -84,7 +84,7 @@ void MiscX::open(int type) {
if (type == kXObj) {
MiscXObject::initMethods(xlibMethods);
MiscXObject *xobj = new MiscXObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
diff --git a/engines/director/lingo/xlibs/movemousexobj.cpp b/engines/director/lingo/xlibs/movemousexobj.cpp
index d3fd83c4724..c71d6fc14d5 100644
--- a/engines/director/lingo/xlibs/movemousexobj.cpp
+++ b/engines/director/lingo/xlibs/movemousexobj.cpp
@@ -52,7 +52,7 @@ void MoveMouseXObj::open(int type) {
if (type == kXObj) {
MoveMouseXObject::initMethods(xlibMethods);
MoveMouseXObject *xobj = new MoveMouseXObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
} else if (type == kXtraObj) {
// TODO - Implement Xtra
}
diff --git a/engines/director/lingo/xlibs/movutils.cpp b/engines/director/lingo/xlibs/movutils.cpp
index 855db1caf01..dd6c5cd1551 100644
--- a/engines/director/lingo/xlibs/movutils.cpp
+++ b/engines/director/lingo/xlibs/movutils.cpp
@@ -114,7 +114,7 @@ void MovUtilsXObj::open(int type) {
if (type == kXObj) {
MovieUtilsXObject::initMethods(xlibMethods);
MovieUtilsXObject *xobj = new MovieUtilsXObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
diff --git a/engines/director/lingo/xlibs/orthoplayxobj.cpp b/engines/director/lingo/xlibs/orthoplayxobj.cpp
index e7204a6ec96..f2da3eeb281 100644
--- a/engines/director/lingo/xlibs/orthoplayxobj.cpp
+++ b/engines/director/lingo/xlibs/orthoplayxobj.cpp
@@ -121,7 +121,7 @@ void OrthoPlayXObj::open(int type) {
if (type == kXObj) {
OrthoPlayXObject::initMethods(xlibMethods);
OrthoPlayXObject *xobj = new OrthoPlayXObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
diff --git a/engines/director/lingo/xlibs/palxobj.cpp b/engines/director/lingo/xlibs/palxobj.cpp
index 5662f4e64eb..f089c271d11 100644
--- a/engines/director/lingo/xlibs/palxobj.cpp
+++ b/engines/director/lingo/xlibs/palxobj.cpp
@@ -62,7 +62,7 @@ void PalXObj::open(int type) {
if (type == kXObj) {
PalXObject::initMethods(xlibMethods);
PalXObject *xobj = new PalXObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
diff --git a/engines/director/lingo/xlibs/popupmenuxobj.cpp b/engines/director/lingo/xlibs/popupmenuxobj.cpp
index 4fbe5f0f5ab..e7b15198d08 100644
--- a/engines/director/lingo/xlibs/popupmenuxobj.cpp
+++ b/engines/director/lingo/xlibs/popupmenuxobj.cpp
@@ -74,7 +74,7 @@ void PopUpMenuXObj::open(int type) {
if (type == kXObj) {
PopUpMenuXObject::initMethods(xlibMethods);
PopUpMenuXObject *xobj = new PopUpMenuXObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
diff --git a/engines/director/lingo/xlibs/serialportxobj.cpp b/engines/director/lingo/xlibs/serialportxobj.cpp
index 4cbb1cb048a..3d6c47ac848 100644
--- a/engines/director/lingo/xlibs/serialportxobj.cpp
+++ b/engines/director/lingo/xlibs/serialportxobj.cpp
@@ -60,7 +60,7 @@ void SerialPortXObj::open(int type) {
if (type == kXObj) {
SerialPortXObject::initMethods(xlibMethods);
SerialPortXObject *xobj = new SerialPortXObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
diff --git a/engines/director/lingo/xlibs/soundjam.cpp b/engines/director/lingo/xlibs/soundjam.cpp
index 48320749f1e..becbb1fcb92 100644
--- a/engines/director/lingo/xlibs/soundjam.cpp
+++ b/engines/director/lingo/xlibs/soundjam.cpp
@@ -80,7 +80,7 @@ void SoundJam::open(int type) {
if (type == kXObj) {
SoundJamObject::initMethods(xlibMethods);
SoundJamObject *xobj = new SoundJamObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
diff --git a/engines/director/lingo/xlibs/videodiscxobj.cpp b/engines/director/lingo/xlibs/videodiscxobj.cpp
index 3b0ebca4faa..ddf8629e2cf 100644
--- a/engines/director/lingo/xlibs/videodiscxobj.cpp
+++ b/engines/director/lingo/xlibs/videodiscxobj.cpp
@@ -147,7 +147,7 @@ void VideodiscXObj::open(int type) {
if (type == kXObj) {
VideodiscXObject::initMethods(xlibMethods);
VideodiscXObject *xobj = new VideodiscXObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
diff --git a/engines/director/lingo/xlibs/winxobj.cpp b/engines/director/lingo/xlibs/winxobj.cpp
index 02162243777..e00992604e2 100644
--- a/engines/director/lingo/xlibs/winxobj.cpp
+++ b/engines/director/lingo/xlibs/winxobj.cpp
@@ -242,7 +242,7 @@ void RearWindowXObj::open(int type) {
if (type == kXObj) {
RearWindowXObject::initMethods(xlibMethods);
RearWindowXObject *xobj = new RearWindowXObject(kXObj);
- g_lingo->_globalvars[xlibName] = xobj;
+ g_lingo->exposeXObject(xlibName, xobj);
}
}
Commit: db3341e2f1b1f988dc809485432c3db1d66a0655
https://github.com/scummvm/scummvm/commit/db3341e2f1b1f988dc809485432c3db1d66a0655
Author: djsrv (dservilla at gmail.com)
Date: 2022-06-28T00:05:24-05:00
Commit Message:
DIRECTOR: LINGO: Add tests for show/clearGlobals on XObjects
Changed paths:
engines/director/lingo/tests/XObjects.lingo
diff --git a/engines/director/lingo/tests/XObjects.lingo b/engines/director/lingo/tests/XObjects.lingo
index a4f69f527f9..b4e0dde762d 100644
--- a/engines/director/lingo/tests/XObjects.lingo
+++ b/engines/director/lingo/tests/XObjects.lingo
@@ -21,3 +21,17 @@ scummVMAssert(objectp(FlushXObj) = 0)
scummVMAssert(objectp(RearWindow) = 1)
closeXlib()
scummVMAssert(objectp(RearWindow) = 0)
+
+-- test showGlobals and clearGlobals on XObjects
+clearGlobals()
+openXLib("FileIO")
+scummVMAssert(objectp(FileIO))
+
+showGlobals() -- FileIO should not be listed
+clearGlobals()
+scummVMAssert(objectp(FileIO)) -- FileIO should not be cleared
+
+set FileIO = "test"
+showGlobals() -- FileIO should be listed
+clearGlobals()
+scummVMAssert(voidp(FileIO)) -- FileIO should be cleared
More information about the Scummvm-git-logs
mailing list