diff options
author | Johannes Schickel | 2014-05-27 02:04:08 +0200 |
---|---|---|
committer | Johannes Schickel | 2014-05-27 02:04:08 +0200 |
commit | 8b7672b64cc179660a4e1706db114b3b6b7073f7 (patch) | |
tree | c93e2c5758e545466c5624eb0e2b3099c9984a1e | |
parent | 96a901d1fb809a67a9067cd5bf7938a1148de47b (diff) | |
download | scummvm-rg350-8b7672b64cc179660a4e1706db114b3b6b7073f7.tar.gz scummvm-rg350-8b7672b64cc179660a4e1706db114b3b6b7073f7.tar.bz2 scummvm-rg350-8b7672b64cc179660a4e1706db114b3b6b7073f7.zip |
ALL: Introduce typesafe Debugger::registerVar functions.
This also adds a FIXME to SCI which registered an enum type as int...
-rw-r--r-- | engines/sci/console.cpp | 13 | ||||
-rw-r--r-- | engines/scumm/debugger.cpp | 8 | ||||
-rw-r--r-- | gui/debugger.h | 26 |
3 files changed, 35 insertions, 12 deletions
diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp index 1736ac7487..1c4228eb7d 100644 --- a/engines/sci/console.cpp +++ b/engines/sci/console.cpp @@ -79,11 +79,14 @@ Console::Console(SciEngine *engine) : GUI::Debugger(), assert(_engine->_gamestate); // Variables - registerVar("sleeptime_factor", &g_debug_sleeptime_factor, DVAR_INT, 0); - registerVar("gc_interval", &engine->_gamestate->scriptGCInterval, DVAR_INT, 0); - registerVar("simulated_key", &g_debug_simulated_key, DVAR_INT, 0); - registerVar("track_mouse_clicks", &g_debug_track_mouse_clicks, DVAR_BOOL, 0); - registerVar("script_abort_flag", &_engine->_gamestate->abortScriptProcessing, DVAR_INT, 0); + registerVar("sleeptime_factor", &g_debug_sleeptime_factor); + registerVar("gc_interval", &engine->_gamestate->scriptGCInterval); + registerVar("simulated_key", &g_debug_simulated_key); + registerVar("track_mouse_clicks", &g_debug_track_mouse_clicks); + // FIXME: This actually passes an enum type instead of an integer but no + // precaution is taken to assure that all assigned values are in the range + // of the enum type. We should handle this more carefully... + registerVar("script_abort_flag", (int *)&_engine->_gamestate->abortScriptProcessing); // General registerCmd("help", WRAP_METHOD(Console, cmdHelp)); diff --git a/engines/scumm/debugger.cpp b/engines/scumm/debugger.cpp index a08fa6e3d2..2b718b2cfe 100644 --- a/engines/scumm/debugger.cpp +++ b/engines/scumm/debugger.cpp @@ -58,10 +58,10 @@ ScummDebugger::ScummDebugger(ScummEngine *s) _vm = s; // Register variables - registerVar("scumm_speed", &_vm->_fastMode, DVAR_BYTE, 0); - registerVar("scumm_room", &_vm->_currentRoom, DVAR_BYTE, 0); - registerVar("scumm_roomresource", &_vm->_roomResource, DVAR_INT, 0); - registerVar("scumm_vars", &_vm->_scummVars, DVAR_INTARRAY, _vm->_numVariables); + registerVar("scumm_speed", &_vm->_fastMode); + registerVar("scumm_room", &_vm->_currentRoom); + registerVar("scumm_roomresource", &_vm->_roomResource); + registerVar("scumm_vars", &_vm->_scummVars, _vm->_numVariables); // Register commands registerCmd("continue", WRAP_METHOD(ScummDebugger, cmdExit)); diff --git a/gui/debugger.h b/gui/debugger.h index 319fa68dae..8c7481b61f 100644 --- a/gui/debugger.h +++ b/gui/debugger.h @@ -96,7 +96,7 @@ protected: int arraySize; }; - +private: /** * Register a variable with the debugger. This allows the user to read and modify * this variable. @@ -104,10 +104,30 @@ protected: * @param variable pointer to the actual storage of the variable * @param type the type of the variable (byte, int, bool, ...) * @paral arraySize for type DVAR_INTARRAY this specifies the size of the array - * - * @todo replace this single method by type safe variants. */ void registerVar(const Common::String &varname, void *variable, VarType type, int arraySize); + +protected: + void registerVar(const Common::String &varname, byte *variable) { + registerVar(varname, variable, DVAR_BYTE, 0); + } + + void registerVar(const Common::String &varname, int *variable) { + registerVar(varname, variable, DVAR_INT, 0); + } + + void registerVar(const Common::String &varname, bool *variable) { + registerVar(varname, variable, DVAR_BOOL, 0); + } + + void registerVar(const Common::String &varname, int32 **variable, int arraySize) { + registerVar(varname, variable, DVAR_INTARRAY, arraySize); + } + + void registerVar(const Common::String &varname, Common::String *variable) { + registerVar(varname, variable, DVAR_STRING, 0); + } + void registerCmd(const Common::String &cmdname, Debuglet *debuglet); |