[Scummvm-git-logs] scummvm master -> c731d6c3dd52fd9185d3e28867d4a96e292e2e66

bluegr bluegr at gmail.com
Thu Sep 2 18:41:19 UTC 2021


This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
74129492ba CINE: Avoid using static objects with destructors
4c93db227a ILLUSIONS: Avoid using static objects with destructors
5f6e65b93b SUPERNOVA: Avoid using static objects with destructors
c731d6c3dd LAB: Avoid using static objects with destructors


Commit: 74129492ba55294ef921440830d1db1d444c420c
    https://github.com/scummvm/scummvm/commit/74129492ba55294ef921440830d1db1d444c420c
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2021-09-02T21:41:14+03:00

Commit Message:
CINE: Avoid using static objects with destructors

Changed paths:
    engines/cine/cine.cpp
    engines/cine/cine.h
    engines/cine/prc.cpp
    engines/cine/rel.cpp
    engines/cine/saveload.cpp
    engines/cine/script.h
    engines/cine/script_fw.cpp
    engines/cine/various.cpp


diff --git a/engines/cine/cine.cpp b/engines/cine/cine.cpp
index 212e082569..7e89369660 100644
--- a/engines/cine/cine.cpp
+++ b/engines/cine/cine.cpp
@@ -126,6 +126,7 @@ Common::Error CineEngine::run() {
 
 		delete renderer;
 		delete[] collisionPage;
+		delete _scriptInfo;
 	} while (_restartRequested);
 
 	delete g_sound;
@@ -176,7 +177,7 @@ void CineEngine::initialize() {
 	Common::fill(g_cine->_zoneQuery.begin(), g_cine->_zoneQuery.end(), 0);
 
 	setDefaultGameSpeed();
-	setupOpcodes();
+	_scriptInfo = setupOpcodes();
 
 	initLanguage(getLanguage());
 
diff --git a/engines/cine/cine.h b/engines/cine/cine.h
index 447554c759..a7bc2af2b8 100644
--- a/engines/cine/cine.h
+++ b/engines/cine/cine.h
@@ -184,6 +184,7 @@ public:
 	 */
 	ScriptVars _globalVars;
 	RawScriptArray _scriptTable; ///< Table of script bytecode
+	FWScriptInfo *_scriptInfo;
 
 	Common::Array<int16> _zoneData;
 	Common::Array<uint16> _zoneQuery; ///< Only exists in Operation Stealth
diff --git a/engines/cine/prc.cpp b/engines/cine/prc.cpp
index 553f2f80ac..4d5ed7e6f6 100644
--- a/engines/cine/prc.cpp
+++ b/engines/cine/prc.cpp
@@ -85,7 +85,7 @@ bool loadPrc(const char *pPrcName) {
 		uint16 size = g_cine->_scriptTable[i]->_size;
 		// TODO: delete the test?
 		if (size) {
-			g_cine->_scriptTable[i]->setData(*scriptInfo, scriptPtr);
+			g_cine->_scriptTable[i]->setData(*g_cine->_scriptInfo, scriptPtr);
 			scriptPtr += size;
 		}
 	}
diff --git a/engines/cine/rel.cpp b/engines/cine/rel.cpp
index 09b8499618..172ec6c6bf 100644
--- a/engines/cine/rel.cpp
+++ b/engines/cine/rel.cpp
@@ -63,7 +63,7 @@ void loadRel(char *pRelName) {
 		size = g_cine->_relTable[i]->_size;
 		// TODO: delete the test?
 		if (size) {
-			g_cine->_relTable[i]->setData(*scriptInfo, ptr);
+			g_cine->_relTable[i]->setData(*g_cine->_scriptInfo, ptr);
 			ptr += size;
 		}
 	}
diff --git a/engines/cine/saveload.cpp b/engines/cine/saveload.cpp
index 9ab8351550..5eccbc8859 100644
--- a/engines/cine/saveload.cpp
+++ b/engines/cine/saveload.cpp
@@ -210,11 +210,11 @@ void loadScriptFromSave(Common::SeekableReadStream &fHandle, bool isGlobal) {
 	// original code loaded everything into globalScripts, this should be
 	// the correct behavior
 	if (isGlobal) {
-		ScriptPtr tmp(scriptInfo->create(*g_cine->_scriptTable[idx], idx, labels, localVars, compare, pos));
+		ScriptPtr tmp(g_cine->_scriptInfo->create(*g_cine->_scriptTable[idx], idx, labels, localVars, compare, pos));
 		assert(tmp);
 		g_cine->_globalScripts.push_back(tmp);
 	} else {
-		ScriptPtr tmp(scriptInfo->create(*g_cine->_relTable[idx], idx, labels, localVars, compare, pos));
+		ScriptPtr tmp(g_cine->_scriptInfo->create(*g_cine->_relTable[idx], idx, labels, localVars, compare, pos));
 		assert(tmp);
 		g_cine->_objectScripts.push_back(tmp);
 	}
diff --git a/engines/cine/script.h b/engines/cine/script.h
index c088544a42..c4c0c1bed9 100644
--- a/engines/cine/script.h
+++ b/engines/cine/script.h
@@ -367,9 +367,7 @@ typedef Common::Array<RawObjectScriptPtr> RawObjectScriptArray;
 
 #define NUM_MAX_SCRIPT 50
 
-extern FWScriptInfo *scriptInfo;
-
-void setupOpcodes();
+FWScriptInfo *setupOpcodes();
 
 void decompileScript(const byte *scriptPtr, uint16 scriptSize, uint16 scriptIdx);
 void dumpScript(char *dumpName);
diff --git a/engines/cine/script_fw.cpp b/engines/cine/script_fw.cpp
index 25b811ff67..1423c780a0 100644
--- a/engines/cine/script_fw.cpp
+++ b/engines/cine/script_fw.cpp
@@ -206,20 +206,16 @@ void FWScript::setupTable() {
 	FWScript::_numOpcodes = ARRAYSIZE(opcodeTable);
 }
 
-FWScriptInfo *scriptInfo; ///< Script factory
-
 /**
  * @todo replace with script subsystem
  */
-void setupOpcodes() {
-	static FWScriptInfo fw;
-	static OSScriptInfo os;
+FWScriptInfo *setupOpcodes() {
 	if (g_cine->getGameType() == Cine::GType_FW) {
 		FWScript::setupTable();
-		scriptInfo = &fw;
+		return new FWScriptInfo();
 	} else {
 		OSScript::setupTable();
-		scriptInfo = &os;
+		return new OSScriptInfo();
 	}
 }
 
@@ -2015,7 +2011,7 @@ int FWScript::o1_unloadMask5() {
 //-----------------------------------------------------------------------
 
 void addScriptToGlobalScripts(uint16 idx) {
-	ScriptPtr tmp(scriptInfo->create(*g_cine->_scriptTable[idx], idx));
+	ScriptPtr tmp(g_cine->_scriptInfo->create(*g_cine->_scriptTable[idx], idx));
 	assert(tmp);
 	g_cine->_globalScripts.push_back(tmp);
 }
diff --git a/engines/cine/various.cpp b/engines/cine/various.cpp
index 85a0d6f47f..80fb98899b 100644
--- a/engines/cine/various.cpp
+++ b/engines/cine/various.cpp
@@ -177,7 +177,7 @@ uint safeControlAccessMinMs() {
 }
 
 void runObjectScript(int16 entryIdx) {
-	ScriptPtr tmp(scriptInfo->create(*g_cine->_relTable[entryIdx], entryIdx));
+	ScriptPtr tmp(g_cine->_scriptInfo->create(*g_cine->_relTable[entryIdx], entryIdx));
 	assert(tmp);
 	g_cine->_objectScripts.push_back(tmp);
 }


Commit: 4c93db227a690eadc9a0ccb61ae800c998bed10b
    https://github.com/scummvm/scummvm/commit/4c93db227a690eadc9a0ccb61ae800c998bed10b
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2021-09-02T21:41:14+03:00

Commit Message:
ILLUSIONS: Avoid using static objects with destructors

Changed paths:
    engines/illusions/bbdou/illusions_bbdou.cpp
    engines/illusions/duckman/illusions_duckman.cpp
    engines/illusions/illusions.h
    engines/illusions/saveload.cpp


diff --git a/engines/illusions/bbdou/illusions_bbdou.cpp b/engines/illusions/bbdou/illusions_bbdou.cpp
index 05b37beed7..d32fcf6a61 100644
--- a/engines/illusions/bbdou/illusions_bbdou.cpp
+++ b/engines/illusions/bbdou/illusions_bbdou.cpp
@@ -668,14 +668,14 @@ void IllusionsEngine_BBDOU::reset() {
 
 void IllusionsEngine_BBDOU::loadSavegameFromScript(int16 slotNum, uint32 callingThreadId) {
 	// NOTE Just loads the savegame, doesn't activate it yet
-	const char *fileName = getSavegameFilename(_savegameSlotNum);
-	_loadGameResult = loadgame(fileName);
+	Common::String fileName = getSavegameFilename(_targetName, _savegameSlotNum);
+	_loadGameResult = loadgame(fileName.c_str());
 }
 
 void IllusionsEngine_BBDOU::saveSavegameFromScript(int16 slotNum, uint32 callingThreadId) {
 	// TODO
-	// const char *fileName = getSavegameFilename(slotNum);
-	_saveGameResult = false;//savegame(fileName, _savegameDescription.c_str());
+	// Common::String fileName = getSavegameFilename(_targetName, slotNum);
+	_saveGameResult = false;//savegame(fileName.c_str(), _savegameDescription.c_str());
 }
 
 void IllusionsEngine_BBDOU::activateSavegame(uint32 callingThreadId) {
diff --git a/engines/illusions/duckman/illusions_duckman.cpp b/engines/illusions/duckman/illusions_duckman.cpp
index 0821dfd4e7..ca00241402 100644
--- a/engines/illusions/duckman/illusions_duckman.cpp
+++ b/engines/illusions/duckman/illusions_duckman.cpp
@@ -1278,8 +1278,8 @@ bool IllusionsEngine_Duckman::loadSavegameFromScript(int16 slotNum, uint32 calli
 		return false; // TODO need to handle reset from new game (without exising savegame).
 	}
 
-	const char *fileName = getSavegameFilename(_savegameSlotNum);
-	bool success = loadgame(fileName);
+	Common::String fileName = getSavegameFilename(_targetName, _savegameSlotNum);
+	bool success = loadgame(fileName.c_str());
 	if (success)
 		activateSavegame(callingThreadId);
 	_gameState->deleteReadStream();
@@ -1287,8 +1287,8 @@ bool IllusionsEngine_Duckman::loadSavegameFromScript(int16 slotNum, uint32 calli
 }
 
 bool IllusionsEngine_Duckman::saveSavegameFromScript(int16 slotNum, uint32 callingThreadId) {
-	const char *fileName = getSavegameFilename(_savegameSlotNum);
-	return savegame(fileName, _savegameDescription.c_str());
+	Common::String fileName = getSavegameFilename(_targetName, _savegameSlotNum);
+	return savegame(fileName.c_str(), _savegameDescription.c_str());
 }
 
 void IllusionsEngine_Duckman::activateSavegame(uint32 callingThreadId) {
diff --git a/engines/illusions/illusions.h b/engines/illusions/illusions.h
index 2e2dcfb4d6..34f9816585 100644
--- a/engines/illusions/illusions.h
+++ b/engines/illusions/illusions.h
@@ -229,7 +229,6 @@ public:
 	Common::Error removeGameState(int slot);
 	bool savegame(const char *filename, const char *description);
 	bool loadgame(const char *filename);
-	const char *getSavegameFilename(int num);
 	bool existsSavegame(int num);
 	static Common::String getSavegameFilename(const Common::String &target, int num);
 	static kReadSaveHeaderError readSaveHeader(Common::SeekableReadStream *in, SaveHeader &header, bool skipThumbnail = true);
diff --git a/engines/illusions/saveload.cpp b/engines/illusions/saveload.cpp
index f46496abad..a9475a33d4 100644
--- a/engines/illusions/saveload.cpp
+++ b/engines/illusions/saveload.cpp
@@ -126,8 +126,8 @@ bool IllusionsEngine::loadgame(const char *filename) {
 
 Common::Error IllusionsEngine::loadGameState(int slot) {
 	_resumeFromSavegameRequested = false;
-	const char *fileName = getSavegameFilename(slot);
-	if (!loadgame(fileName))
+	Common::String fileName = getSavegameFilename(_targetName, slot);
+	if (!loadgame(fileName.c_str()))
 		return Common::kReadingFailed;
 	_resumeFromSavegameRequested = true;
 	_savegameSlotNum = slot;
@@ -135,25 +135,19 @@ Common::Error IllusionsEngine::loadGameState(int slot) {
 }
 
 Common::Error IllusionsEngine::saveGameState(int slot, const Common::String &description, bool isAutosave) {
-	const char *fileName = getSavegameFilename(slot);
-	if (!savegame(fileName, description.c_str()))
+	Common::String fileName = getSavegameFilename(_targetName, slot);
+	if (!savegame(fileName.c_str(), description.c_str()))
 		return Common::kWritingFailed;
 	return Common::kNoError;
 }
 
 Common::Error IllusionsEngine::removeGameState(int slot) {
 	Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
-	Common::String filename = Illusions::IllusionsEngine::getSavegameFilename(_targetName, slot);
+	Common::String filename = getSavegameFilename(_targetName, slot);
 	saveFileMan->removeSavefile(filename.c_str());
 	return Common::kNoError;
 }
 
-const char *IllusionsEngine::getSavegameFilename(int num) {
-	static Common::String filename;
-	filename = getSavegameFilename(_targetName, num);
-	return filename.c_str();
-}
-
 Common::String IllusionsEngine::getSavegameFilename(const Common::String &target, int num) {
 	assert(num >= 0 && num <= 999);
 	return Common::String::format("%s.%03d", target.c_str(), num);


Commit: 5f6e65b93beda8f0e2a1f9c70d67e3b9d878cf3b
    https://github.com/scummvm/scummvm/commit/5f6e65b93beda8f0e2a1f9c70d67e3b9d878cf3b
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2021-09-02T21:41:14+03:00

Commit Message:
SUPERNOVA: Avoid using static objects with destructors

Changed paths:
    engines/supernova/supernova1/state.cpp


diff --git a/engines/supernova/supernova1/state.cpp b/engines/supernova/supernova1/state.cpp
index c75cb00f00..4eda1ba25f 100644
--- a/engines/supernova/supernova1/state.cpp
+++ b/engines/supernova/supernova1/state.cpp
@@ -405,7 +405,7 @@ void GameManager1::corridorOnEntrance() {
 }
 
 void GameManager1::telomat(int nr) {
-	static Common::String name[8] = {
+	static const char *const name[8] = {
 		"DR. ALAB HANSI",
 		"ALAB HANSI",
 		"SAVAL LUN",
@@ -416,7 +416,7 @@ void GameManager1::telomat(int nr) {
 		"x"
 	};
 
-	static Common::String name2[4] = {
+	static const char *const name2[4] = {
 		"Alab Hansi",
 		"Saval Lun",
 		"Ugnul Tschabb",
@@ -506,7 +506,7 @@ void GameManager1::telomat(int nr) {
 			_vm->removeMessage();
 			if (_state._nameSeen[nr]) {
 				Common::String string = _vm->getGameString(kStringTelomat2);
-				_vm->setGameString(kStringPlaceholder1, Common::String::format(string.c_str(), name2[nr].c_str()));
+				_vm->setGameString(kStringPlaceholder1, Common::String::format(string.c_str(), name2[nr]));
 				dial1[1] = kStringPlaceholder1;
 				_currentRoom->addSentence(1, 1);
 			} else


Commit: c731d6c3dd52fd9185d3e28867d4a96e292e2e66
    https://github.com/scummvm/scummvm/commit/c731d6c3dd52fd9185d3e28867d4a96e292e2e66
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2021-09-02T21:41:14+03:00

Commit Message:
LAB: Avoid using static objects with destructors

Changed paths:
    engines/lab/interface.cpp


diff --git a/engines/lab/interface.cpp b/engines/lab/interface.cpp
index bac1155725..9b169b852f 100644
--- a/engines/lab/interface.cpp
+++ b/engines/lab/interface.cpp
@@ -191,9 +191,7 @@ void Interface::mayShowCrumbIndicator() {
 		return;
 
 	if (_vm->_droppingCrumbs && _vm->isMainDisplay()) {
-		static byte *imgData = new byte[CRUMBSWIDTH * CRUMBSHEIGHT];
-		memcpy(imgData, dropCrumbsImageData, CRUMBSWIDTH * CRUMBSHEIGHT);
-		static Image dropCrumbsImage(CRUMBSWIDTH, CRUMBSHEIGHT, imgData, _vm);
+		Image dropCrumbsImage(CRUMBSWIDTH, CRUMBSHEIGHT, dropCrumbsImageData, _vm, false);
 
 		dropCrumbsImage.drawMaskImage(612, 4);
 	}
@@ -231,9 +229,7 @@ void Interface::mayShowCrumbIndicatorOff() {
 		return;
 
 	if (_vm->isMainDisplay()) {
-		static byte *imgData = new byte[CRUMBSWIDTH * CRUMBSHEIGHT];
-		memcpy(imgData, dropCrumbsOffImageData, CRUMBSWIDTH * CRUMBSHEIGHT);
-		static Image dropCrumbsOffImage(CRUMBSWIDTH, CRUMBSHEIGHT, imgData, _vm);
+		Image dropCrumbsOffImage(CRUMBSWIDTH, CRUMBSHEIGHT, dropCrumbsOffImageData, _vm, false);
 
 		dropCrumbsOffImage.drawMaskImage(612, 4);
 	}




More information about the Scummvm-git-logs mailing list