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

dreammaster noreply at scummvm.org
Wed Jun 1 01:49: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:
8e55de7b77 AGS: Changed sccmd_info array from being global objects
b47407e804 AGS: Fix shadowed StringMap warnings
c4457ce443 AGS: Changed ComponentHandlers array from being global objects


Commit: 8e55de7b7792152dc9a9a31f6e3101199e791f70
    https://github.com/scummvm/scummvm/commit/8e55de7b7792152dc9a9a31f6e3101199e791f70
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2022-05-31T18:33:21-07:00

Commit Message:
AGS: Changed sccmd_info array from being global objects

Changed paths:
    engines/ags/ags.cpp
    engines/ags/engine/script/cc_instance.cpp
    engines/ags/engine/script/cc_instance.h


diff --git a/engines/ags/ags.cpp b/engines/ags/ags.cpp
index 413367bc944..526c0c6104f 100644
--- a/engines/ags/ags.cpp
+++ b/engines/ags/ags.cpp
@@ -52,6 +52,7 @@
 #include "ags/engine/main/main.h"
 #include "ags/engine/main/quit.h"
 #include "ags/engine/platform/base/ags_platform_driver.h"
+#include "ags/engine/script/cc_instance.h"
 #include "ags/engine/script/script.h"
 #include "ags/engine/ac/route_finder.h"
 #include "ags/shared/core/asset_manager.h"
@@ -75,6 +76,7 @@ AGSEngine::AGSEngine(OSystem *syst, const AGSGameDescription *gameDesc) : Engine
 	_gfxDriver(nullptr), _globals(nullptr), _forceTextAA(false) {
 	g_vm = this;
 
+	AGS3::script_commands_init();
 	_events = new EventsManager();
 	_globals = new ::AGS3::Globals();
 
@@ -99,6 +101,7 @@ AGSEngine::~AGSEngine() {
 	delete _events;
 	delete _music;
 	delete _globals;
+	AGS3::script_commands_free();
 }
 
 uint32 AGSEngine::getFeatures() const {
diff --git a/engines/ags/engine/script/cc_instance.cpp b/engines/ags/engine/script/cc_instance.cpp
index 384a61c3065..d2a08dc877a 100644
--- a/engines/ags/engine/script/cc_instance.cpp
+++ b/engines/ags/engine/script/cc_instance.cpp
@@ -76,82 +76,97 @@ struct ScriptCommandInfo {
 	bool                ArgIsReg[3];
 };
 
-const ScriptCommandInfo sccmd_info[CC_NUM_SCCMDS] = {
-	ScriptCommandInfo(0                    , "NULL"              , 0, kScOpNoArgIsReg),
-	ScriptCommandInfo(SCMD_ADD             , "addi"              , 2, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_SUB             , "subi"              , 2, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_REGTOREG        , "mov"               , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_WRITELIT        , "memwritelit"       , 2, kScOpNoArgIsReg),
-	ScriptCommandInfo(SCMD_RET             , "ret"               , 0, kScOpNoArgIsReg),
-	ScriptCommandInfo(SCMD_LITTOREG        , "movl"              , 2, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_MEMREAD         , "memread4"          , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_MEMWRITE        , "memwrite4"         , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_MULREG          , "mul"               , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_DIVREG          , "div"               , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_ADDREG          , "add"               , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_SUBREG          , "sub"               , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_BITAND          , "and"               , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_BITOR           , "or"                , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_ISEQUAL         , "cmpeq"             , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_NOTEQUAL        , "cmpne"             , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_GREATER         , "gt"                , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_LESSTHAN        , "lt"                , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_GTE             , "gte"               , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_LTE             , "lte"               , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_AND             , "land"              , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_OR              , "lor"               , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_CALL            , "call"              , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_MEMREADB        , "memread1"          , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_MEMREADW        , "memread2"          , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_MEMWRITEB       , "memwrite1"         , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_MEMWRITEW       , "memwrite2"         , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_JZ              , "jzi"               , 1, kScOpNoArgIsReg),
-	ScriptCommandInfo(SCMD_PUSHREG         , "push"              , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_POPREG          , "pop"               , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_JMP             , "jmpi"              , 1, kScOpNoArgIsReg),
-	ScriptCommandInfo(SCMD_MUL             , "muli"              , 2, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_CALLEXT         , "farcall"           , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_PUSHREAL        , "farpush"           , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_SUBREALSTACK    , "farsubsp"          , 1, kScOpNoArgIsReg),
-	ScriptCommandInfo(SCMD_LINENUM         , "sourceline"        , 1, kScOpNoArgIsReg),
-	ScriptCommandInfo(SCMD_CALLAS          , "callscr"           , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_THISBASE        , "thisaddr"          , 1, kScOpNoArgIsReg),
-	ScriptCommandInfo(SCMD_NUMFUNCARGS     , "setfuncargs"       , 1, kScOpNoArgIsReg),
-	ScriptCommandInfo(SCMD_MODREG          , "mod"               , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_XORREG          , "xor"               , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_NOTREG          , "not"               , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_SHIFTLEFT       , "shl"               , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_SHIFTRIGHT      , "shr"               , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_CALLOBJ         , "callobj"           , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_CHECKBOUNDS     , "checkbounds"       , 2, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_MEMWRITEPTR     , "memwrite.ptr"      , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_MEMREADPTR      , "memread.ptr"       , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_MEMZEROPTR      , "memwrite.ptr.0"    , 0, kScOpNoArgIsReg),
-	ScriptCommandInfo(SCMD_MEMINITPTR      , "meminit.ptr"       , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_LOADSPOFFS      , "load.sp.offs"      , 1, kScOpNoArgIsReg),
-	ScriptCommandInfo(SCMD_CHECKNULL       , "checknull.ptr"     , 0, kScOpNoArgIsReg),
-	ScriptCommandInfo(SCMD_FADD            , "faddi"             , 2, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_FSUB            , "fsubi"             , 2, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_FMULREG         , "fmul"              , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_FDIVREG         , "fdiv"              , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_FADDREG         , "fadd"              , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_FSUBREG         , "fsub"              , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_FGREATER        , "fgt"               , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_FLESSTHAN       , "flt"               , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_FGTE            , "fgte"              , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_FLTE            , "flte"              , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_ZEROMEMORY      , "zeromem"           , 1, kScOpNoArgIsReg),
-	ScriptCommandInfo(SCMD_CREATESTRING    , "newstring"         , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_STRINGSEQUAL    , "streq"             , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_STRINGSNOTEQ    , "strne"             , 2, kScOpTwoArgsAreReg),
-	ScriptCommandInfo(SCMD_CHECKNULLREG    , "checknull"         , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_LOOPCHECKOFF    , "loopcheckoff"      , 0, kScOpNoArgIsReg),
-	ScriptCommandInfo(SCMD_MEMZEROPTRND    , "memwrite.ptr.0.nd" , 0, kScOpNoArgIsReg),
-	ScriptCommandInfo(SCMD_JNZ             , "jnzi"              , 1, kScOpNoArgIsReg),
-	ScriptCommandInfo(SCMD_DYNAMICBOUNDS   , "dynamicbounds"     , 1, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_NEWARRAY        , "newarray"          , 3, kScOpOneArgIsReg),
-	ScriptCommandInfo(SCMD_NEWUSEROBJECT   , "newuserobject"     , 2, kScOpOneArgIsReg),
+struct ScriptCommands {
+	const ScriptCommandInfo _items[CC_NUM_SCCMDS] = {
+		ScriptCommandInfo(0                    , "NULL"              , 0, kScOpNoArgIsReg),
+		ScriptCommandInfo(SCMD_ADD             , "addi"              , 2, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_SUB             , "subi"              , 2, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_REGTOREG        , "mov"               , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_WRITELIT        , "memwritelit"       , 2, kScOpNoArgIsReg),
+		ScriptCommandInfo(SCMD_RET             , "ret"               , 0, kScOpNoArgIsReg),
+		ScriptCommandInfo(SCMD_LITTOREG        , "movl"              , 2, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_MEMREAD         , "memread4"          , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_MEMWRITE        , "memwrite4"         , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_MULREG          , "mul"               , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_DIVREG          , "div"               , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_ADDREG          , "add"               , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_SUBREG          , "sub"               , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_BITAND          , "and"               , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_BITOR           , "or"                , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_ISEQUAL         , "cmpeq"             , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_NOTEQUAL        , "cmpne"             , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_GREATER         , "gt"                , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_LESSTHAN        , "lt"                , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_GTE             , "gte"               , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_LTE             , "lte"               , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_AND             , "land"              , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_OR              , "lor"               , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_CALL            , "call"              , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_MEMREADB        , "memread1"          , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_MEMREADW        , "memread2"          , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_MEMWRITEB       , "memwrite1"         , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_MEMWRITEW       , "memwrite2"         , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_JZ              , "jzi"               , 1, kScOpNoArgIsReg),
+		ScriptCommandInfo(SCMD_PUSHREG         , "push"              , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_POPREG          , "pop"               , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_JMP             , "jmpi"              , 1, kScOpNoArgIsReg),
+		ScriptCommandInfo(SCMD_MUL             , "muli"              , 2, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_CALLEXT         , "farcall"           , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_PUSHREAL        , "farpush"           , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_SUBREALSTACK    , "farsubsp"          , 1, kScOpNoArgIsReg),
+		ScriptCommandInfo(SCMD_LINENUM         , "sourceline"        , 1, kScOpNoArgIsReg),
+		ScriptCommandInfo(SCMD_CALLAS          , "callscr"           , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_THISBASE        , "thisaddr"          , 1, kScOpNoArgIsReg),
+		ScriptCommandInfo(SCMD_NUMFUNCARGS     , "setfuncargs"       , 1, kScOpNoArgIsReg),
+		ScriptCommandInfo(SCMD_MODREG          , "mod"               , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_XORREG          , "xor"               , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_NOTREG          , "not"               , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_SHIFTLEFT       , "shl"               , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_SHIFTRIGHT      , "shr"               , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_CALLOBJ         , "callobj"           , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_CHECKBOUNDS     , "checkbounds"       , 2, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_MEMWRITEPTR     , "memwrite.ptr"      , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_MEMREADPTR      , "memread.ptr"       , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_MEMZEROPTR      , "memwrite.ptr.0"    , 0, kScOpNoArgIsReg),
+		ScriptCommandInfo(SCMD_MEMINITPTR      , "meminit.ptr"       , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_LOADSPOFFS      , "load.sp.offs"      , 1, kScOpNoArgIsReg),
+		ScriptCommandInfo(SCMD_CHECKNULL       , "checknull.ptr"     , 0, kScOpNoArgIsReg),
+		ScriptCommandInfo(SCMD_FADD            , "faddi"             , 2, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_FSUB            , "fsubi"             , 2, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_FMULREG         , "fmul"              , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_FDIVREG         , "fdiv"              , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_FADDREG         , "fadd"              , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_FSUBREG         , "fsub"              , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_FGREATER        , "fgt"               , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_FLESSTHAN       , "flt"               , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_FGTE            , "fgte"              , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_FLTE            , "flte"              , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_ZEROMEMORY      , "zeromem"           , 1, kScOpNoArgIsReg),
+		ScriptCommandInfo(SCMD_CREATESTRING    , "newstring"         , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_STRINGSEQUAL    , "streq"             , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_STRINGSNOTEQ    , "strne"             , 2, kScOpTwoArgsAreReg),
+		ScriptCommandInfo(SCMD_CHECKNULLREG    , "checknull"         , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_LOOPCHECKOFF    , "loopcheckoff"      , 0, kScOpNoArgIsReg),
+		ScriptCommandInfo(SCMD_MEMZEROPTRND    , "memwrite.ptr.0.nd" , 0, kScOpNoArgIsReg),
+		ScriptCommandInfo(SCMD_JNZ             , "jnzi"              , 1, kScOpNoArgIsReg),
+		ScriptCommandInfo(SCMD_DYNAMICBOUNDS   , "dynamicbounds"     , 1, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_NEWARRAY        , "newarray"          , 3, kScOpOneArgIsReg),
+		ScriptCommandInfo(SCMD_NEWUSEROBJECT   , "newuserobject"     , 2, kScOpOneArgIsReg),
+	};
+
+	const ScriptCommandInfo &operator[](uint idx) {
+		return _items[idx];
+	}
 };
+static ScriptCommands *g_commands;
+
+void script_commands_init() {
+	g_commands = new ScriptCommands();
+}
+
+void script_commands_free() {
+	delete g_commands;
+}
 
 const char *regnames[] = { "null", "sp", "mar", "ax", "bx", "cx", "op", "dx" };
 
@@ -450,7 +465,7 @@ int ccInstance::Run(int32_t curpc) {
 			return -1;
 		}
 
-		codeOp.ArgCount = sccmd_info[codeOp.Instruction.Code].ArgCount;
+		codeOp.ArgCount = (*g_commands)[codeOp.Instruction.Code].ArgCount;
 		if (pc + codeOp.ArgCount >= codeInst->codesize) {
 			cc_error("unexpected end of code data (%d; %d)", pc + codeOp.ArgCount, codeInst->codesize);
 			return -1;
@@ -1258,7 +1273,7 @@ void ccInstance::DumpInstruction(const ScriptOperation &op) const {
 
 	debugN("Line %3d, IP:%8d (SP:%p) ", line_num, pc, (void *)(registers[SREG_SP].RValue));
 
-	const ScriptCommandInfo &cmd_info = sccmd_info[op.Instruction.Code];
+	const ScriptCommandInfo &cmd_info = (*g_commands)[op.Instruction.Code];
 	debugN("%s", cmd_info.CmdName);
 
 	for (int i = 0; i < cmd_info.ArgCount; ++i) {
@@ -1606,10 +1621,10 @@ static int DetermineScriptLine(const int32_t *code, size_t codesz, size_t at_pc)
 	for (size_t pc = 0; (pc <= at_pc) && (pc < codesz); ++pc) {
 		int op = code[pc] & INSTANCE_ID_REMOVEMASK;
 		if (op < 0 || op >= CC_NUM_SCCMDS) return -1;
-		if (pc + sccmd_info[op].ArgCount >= codesz) return -1;
+		if (pc + (*g_commands)[op].ArgCount >= codesz) return -1;
 		if (op == SCMD_LINENUM)
 			line = code[pc + 1];
-		pc += sccmd_info[op].ArgCount;
+		pc += (*g_commands)[op].ArgCount;
 	}
 	return line;
 }
@@ -1690,7 +1705,7 @@ bool ccInstance::ReadOperation(ScriptOperation &op, int32_t at_pc)
     op.Instruction.InstanceId   = (op.Instruction.Code >> INSTANCE_ID_SHIFT) & INSTANCE_ID_MASK;
     op.Instruction.Code        &= INSTANCE_ID_REMOVEMASK; // now this is pure instruction code
 
-    int want_args = sccmd_info[op.Instruction.Code].ArgCount;
+    int want_args = (*g_commands)[op.Instruction.Code].ArgCount;
     if (at_pc + want_args >= codesize)
     {
         cc_error("unexpected end of code data at %d", at_pc + want_args);
diff --git a/engines/ags/engine/script/cc_instance.h b/engines/ags/engine/script/cc_instance.h
index 3895d68ed14..7bcf0bc20ae 100644
--- a/engines/ags/engine/script/cc_instance.h
+++ b/engines/ags/engine/script/cc_instance.h
@@ -215,6 +215,9 @@ protected:
 	void    PopFromFuncCallStack(FunctionCallStack &func_callstack, int32_t num_entries);
 };
 
+extern void script_commands_init();
+extern void script_commands_free();
+
 } // namespace AGS3
 
 #endif


Commit: b47407e80485495d0a0ca1d7f0e7c6bf69c448c3
    https://github.com/scummvm/scummvm/commit/b47407e80485495d0a0ca1d7f0e7c6bf69c448c3
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2022-05-31T18:35:39-07:00

Commit Message:
AGS: Fix shadowed StringMap warnings

Changed paths:
    engines/ags/globals.cpp
    engines/ags/globals.h


diff --git a/engines/ags/globals.cpp b/engines/ags/globals.cpp
index 83cd4a8e778..0a3f56dca54 100644
--- a/engines/ags/globals.cpp
+++ b/engines/ags/globals.cpp
@@ -368,7 +368,7 @@ Globals::Globals() {
 
 	// translation.cpp globals
 	_trans = new AGS::Shared::Translation();
-	_transtree = new StringMap();
+	_transtree = new AGS::Shared::StringMap();
 
 	// walk_behind.cpp globals
 	Common::fill(_walkBehindLeft, _walkBehindLeft + MAX_WALK_BEHINDS, 0);
diff --git a/engines/ags/globals.h b/engines/ags/globals.h
index 0e68f9efb65..5a22f037d13 100644
--- a/engines/ags/globals.h
+++ b/engines/ags/globals.h
@@ -61,7 +61,6 @@ namespace AGS3 {
 
 using String = AGS::Shared::String;
 using Version = AGS::Shared::Version;
-using StringMap = AGS::Shared::StringMap;
 
 namespace AGS {
 namespace Shared {
@@ -1347,7 +1346,7 @@ public:
 	 */
 
 	AGS::Shared::Translation *_trans;
-	StringMap *_transtree = nullptr;
+	AGS::Shared::StringMap *_transtree = nullptr;
 	String _trans_name, _trans_filename;
 	long _lang_offs_start = 0;
 	char _transFileName[MAX_PATH_SZ] = { 0 };


Commit: c4457ce4436e0f037198c47953c26d0f4ca4d532
    https://github.com/scummvm/scummvm/commit/c4457ce4436e0f037198c47953c26d0f4ca4d532
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2022-05-31T18:46:33-07:00

Commit Message:
AGS: Changed ComponentHandlers array from being global objects

Changed paths:
    engines/ags/ags.cpp
    engines/ags/engine/game/savegame_components.cpp
    engines/ags/engine/game/savegame_components.h


diff --git a/engines/ags/ags.cpp b/engines/ags/ags.cpp
index 526c0c6104f..30b79d049f1 100644
--- a/engines/ags/ags.cpp
+++ b/engines/ags/ags.cpp
@@ -47,6 +47,7 @@
 #include "ags/engine/debugging/debug_log.h"
 #include "ags/shared/debugging/out.h"
 #include "ags/engine/game/savegame.h"
+#include "ags/engine/game/savegame_components.h"
 #include "ags/engine/main/config.h"
 #include "ags/engine/main/engine.h"
 #include "ags/engine/main/main.h"
@@ -77,6 +78,7 @@ AGSEngine::AGSEngine(OSystem *syst, const AGSGameDescription *gameDesc) : Engine
 	g_vm = this;
 
 	AGS3::script_commands_init();
+	AGS3::Engine::SavegameComponents::component_handlers_init();
 	_events = new EventsManager();
 	_globals = new ::AGS3::Globals();
 
@@ -101,6 +103,7 @@ AGSEngine::~AGSEngine() {
 	delete _events;
 	delete _music;
 	delete _globals;
+	AGS3::Engine::SavegameComponents::component_handlers_free();
 	AGS3::script_commands_free();
 }
 
diff --git a/engines/ags/engine/game/savegame_components.cpp b/engines/ags/engine/game/savegame_components.cpp
index 5abf4003012..4bc8a5ae073 100644
--- a/engines/ags/engine/game/savegame_components.cpp
+++ b/engines/ags/engine/game/savegame_components.cpp
@@ -1021,128 +1021,141 @@ struct ComponentHandler {
 };
 
 // Array of supported components
-static const ComponentHandler ComponentHandlers[] = {
-	{
-		"Game State",
-		kGSSvgVersion_350_10,
-		kGSSvgVersion_Initial,
-		WriteGameState,
-		ReadGameState
-	},
-	{
-		"Audio",
-		2,
-		0,
-		WriteAudio,
-		ReadAudio
-	},
-	{
-		"Characters",
-		2,
-		0,
-		WriteCharacters,
-		ReadCharacters
-	},
-	{
-		"Dialogs",
-		0,
-		0,
-		WriteDialogs,
-		ReadDialogs
-	},
-	{
-		"GUI",
-		kGuiSvgVersion_36025,
-		kGuiSvgVersion_Initial,
-		WriteGUI,
-		ReadGUI
-	},
-	{
-		"Inventory Items",
-		0,
-		0,
-		WriteInventory,
-		ReadInventory
-	},
-	{
-		"Mouse Cursors",
-		1,
-		0,
-		WriteMouseCursors,
-		ReadMouseCursors
-	},
-	{
-		"Views",
-		0,
-		0,
-		WriteViews,
-		ReadViews
-	},
-	{
-		"Dynamic Sprites",
-		0,
-		0,
-		WriteDynamicSprites,
-		ReadDynamicSprites
-	},
-	{
-		"Overlays",
-		3,
-		0,
-		WriteOverlays,
-		ReadOverlays
-	},
-	{
-		"Dynamic Surfaces",
-		0,
-		0,
-		WriteDynamicSurfaces,
-		ReadDynamicSurfaces
-	},
-	{
-		"Script Modules",
-		0,
-		0,
-		WriteScriptModules,
-		ReadScriptModules
-	},
-	{
-		"Room States",
-		3,
-		0,
-		WriteRoomStates,
-		ReadRoomStates
-	},
-	{
-		"Loaded Room State",
-		3, // must correspond to "Room States"
-		0,
-		WriteThisRoom,
-		ReadThisRoom
-	},
-	{
-		"Managed Pool",
-		0,
-		0,
-		WriteManagedPool,
-		ReadManagedPool
-	},
-	{
-		"Plugin Data",
-		0,
-		0,
-		WritePluginData,
-		ReadPluginData
-	},
-	{ nullptr, 0, 0, nullptr, nullptr } // end of array
+struct ComponentHandlers {
+	const ComponentHandler _items[17] = {
+		{
+			"Game State",
+			kGSSvgVersion_350_10,
+			kGSSvgVersion_Initial,
+			WriteGameState,
+			ReadGameState
+		},
+		{
+			"Audio",
+			2,
+			0,
+			WriteAudio,
+			ReadAudio
+		},
+		{
+			"Characters",
+			2,
+			0,
+			WriteCharacters,
+			ReadCharacters
+		},
+		{
+			"Dialogs",
+			0,
+			0,
+			WriteDialogs,
+			ReadDialogs
+		},
+		{
+			"GUI",
+			kGuiSvgVersion_36025,
+			kGuiSvgVersion_Initial,
+			WriteGUI,
+			ReadGUI
+		},
+		{
+			"Inventory Items",
+			0,
+			0,
+			WriteInventory,
+			ReadInventory
+		},
+		{
+			"Mouse Cursors",
+			1,
+			0,
+			WriteMouseCursors,
+			ReadMouseCursors
+		},
+		{
+			"Views",
+			0,
+			0,
+			WriteViews,
+			ReadViews
+		},
+		{
+			"Dynamic Sprites",
+			0,
+			0,
+			WriteDynamicSprites,
+			ReadDynamicSprites
+		},
+		{
+			"Overlays",
+			3,
+			0,
+			WriteOverlays,
+			ReadOverlays
+		},
+		{
+			"Dynamic Surfaces",
+			0,
+			0,
+			WriteDynamicSurfaces,
+			ReadDynamicSurfaces
+		},
+		{
+			"Script Modules",
+			0,
+			0,
+			WriteScriptModules,
+			ReadScriptModules
+		},
+		{
+			"Room States",
+			3,
+			0,
+			WriteRoomStates,
+			ReadRoomStates
+		},
+		{
+			"Loaded Room State",
+			3, // must correspond to "Room States"
+			0,
+			WriteThisRoom,
+			ReadThisRoom
+		},
+		{
+			"Managed Pool",
+			0,
+			0,
+			WriteManagedPool,
+			ReadManagedPool
+		},
+		{
+			"Plugin Data",
+			0,
+			0,
+			WritePluginData,
+			ReadPluginData
+		},
+		{ nullptr, 0, 0, nullptr, nullptr } // end of array
+	};
+	const ComponentHandler &operator[](uint idx) {
+		return _items[idx];
+	}
 };
+ComponentHandlers *g_componentHandlers;
+
+void component_handlers_init() {
+	g_componentHandlers = new ComponentHandlers();
+}
 
+void component_handlers_free() {
+	delete g_componentHandlers;
+}
 
 typedef std::map<String, ComponentHandler> HandlersMap;
 void GenerateHandlersMap(HandlersMap &map) {
 	map.clear();
-	for (int i = 0; !ComponentHandlers[i].Name.IsEmpty(); ++i)
-		map[ComponentHandlers[i].Name] = ComponentHandlers[i];
+	for (int i = 0; !(*g_componentHandlers)[i].Name.IsEmpty(); ++i)
+		map[(*g_componentHandlers)[i].Name] = (*g_componentHandlers)[i];
 }
 
 // A helper struct to pass to (de)serialization handlers
@@ -1263,11 +1276,11 @@ HSaveError WriteComponent(Stream *out, const ComponentHandler &hdlr) {
 HSaveError WriteAllCommon(Stream *out) {
 	const String ComponentListTag = "Components";
 	WriteFormatTag(out, ComponentListTag, true);
-	for (int type = 0; !ComponentHandlers[type].Name.IsEmpty(); ++type) {
-		HSaveError err = WriteComponent(out, ComponentHandlers[type]);
+	for (int type = 0; !(*g_componentHandlers)[type].Name.IsEmpty(); ++type) {
+		HSaveError err = WriteComponent(out, (*g_componentHandlers)[type]);
 		if (!err) {
 			return new SavegameError(kSvgErr_ComponentSerialization,
-			                         String::FromFormat("Component: (#%d) %s", type, ComponentHandlers[type].Name.GetCStr()),
+			                         String::FromFormat("Component: (#%d) %s", type, (*g_componentHandlers)[type].Name.GetCStr()),
 			                         err);
 		}
 		update_polled_stuff_if_runtime();
diff --git a/engines/ags/engine/game/savegame_components.h b/engines/ags/engine/game/savegame_components.h
index 1aad5c4b132..9a696711cf9 100644
--- a/engines/ags/engine/game/savegame_components.h
+++ b/engines/ags/engine/game/savegame_components.h
@@ -41,6 +41,10 @@ struct PreservedParams;
 struct RestoredData;
 
 namespace SavegameComponents {
+
+extern void component_handlers_init();
+extern void component_handlers_free();
+
 // Reads all available components from the stream
 HSaveError    ReadAll(Stream *in, SavegameVersion svg_version, const PreservedParams &pp, RestoredData &r_data);
 // Writes a full list of common components to the stream




More information about the Scummvm-git-logs mailing list