diff options
author | Simei Yin | 2018-05-31 22:55:36 +0200 |
---|---|---|
committer | Simei Yin | 2018-05-31 23:15:09 +0200 |
commit | ca583ebfcfc420d0b303256a9a088bb2327ea907 (patch) | |
tree | ddf0074373f86a9662386edb7bfbdd7c73ebd152 /engines/sludge | |
parent | 9fb57f944d1105c084b4cf54e037a66b9eb34740 (diff) | |
download | scummvm-rg350-ca583ebfcfc420d0b303256a9a088bb2327ea907.tar.gz scummvm-rg350-ca583ebfcfc420d0b303256a9a088bb2327ea907.tar.bz2 scummvm-rg350-ca583ebfcfc420d0b303256a9a088bb2327ea907.zip |
SLUDGE: Move last stack finding function to struct VariableStack
Diffstat (limited to 'engines/sludge')
-rw-r--r-- | engines/sludge/builtin.cpp | 6 | ||||
-rw-r--r-- | engines/sludge/variable.cpp | 6 | ||||
-rw-r--r-- | engines/sludge/variable.h | 7 |
3 files changed, 10 insertions, 9 deletions
diff --git a/engines/sludge/builtin.cpp b/engines/sludge/builtin.cpp index 61f1726ec0..bf7c4228d3 100644 --- a/engines/sludge/builtin.cpp +++ b/engines/sludge/builtin.cpp @@ -609,7 +609,8 @@ builtIn(deleteFromStack) { fun->reg.setVariable(SVT_INT, deleteVarFromStack(fun->stack->thisVar, fun->stack->next->thisVar.varData.theStack->first, false)); // Horrible hacking because 'last' value might now be wrong! - fun->stack->next->thisVar.varData.theStack->last = stackFindLast(fun->stack->next->thisVar.varData.theStack->first); + VariableStack *nextFirstStack = fun->stack->next->thisVar.varData.theStack->first; + fun->stack->next->thisVar.varData.theStack->last = (nextFirstStack == NULL) ? NULL : nextFirstStack->stackFindLast(); trimStack(fun->stack); trimStack(fun->stack); @@ -627,7 +628,8 @@ builtIn(deleteAllFromStack) { fun->reg.setVariable(SVT_INT, deleteVarFromStack(fun->stack->thisVar, fun->stack->next->thisVar.varData.theStack->first, true)); // Horrible hacking because 'last' value might now be wrong! - fun->stack->next->thisVar.varData.theStack->last = stackFindLast(fun->stack->next->thisVar.varData.theStack->first); + VariableStack *nextFirstStack = fun->stack->next->thisVar.varData.theStack->first; + fun->stack->next->thisVar.varData.theStack->last = (nextFirstStack == NULL) ? NULL : nextFirstStack->stackFindLast(); trimStack(fun->stack); trimStack(fun->stack); diff --git a/engines/sludge/variable.cpp b/engines/sludge/variable.cpp index 9b72185cb8..5da52483e6 100644 --- a/engines/sludge/variable.cpp +++ b/engines/sludge/variable.cpp @@ -492,10 +492,8 @@ int deleteVarFromStack(const Variable &va, VariableStack *&thisStack, bool allOf } // Would be a LOT better just to keep this up to date in the above function... ah well -VariableStack *stackFindLast(VariableStack *hunt) { - if (hunt == NULL) - return NULL; - +VariableStack *VariableStack::stackFindLast() { + VariableStack *hunt = this; while (hunt->next) hunt = hunt->next; diff --git a/engines/sludge/variable.h b/engines/sludge/variable.h index dafc761019..51fba77e85 100644 --- a/engines/sludge/variable.h +++ b/engines/sludge/variable.h @@ -121,6 +121,9 @@ struct VariableStack { // Variable getter & setter bool stackSetByIndex(uint, const Variable &); Variable *stackGetByIndex(uint); + + // Find last + VariableStack *stackFindLast(); }; // Stacky stuff @@ -128,9 +131,7 @@ struct VariableStack { bool addVarToStack(const Variable &va, VariableStack *&thisStack); bool addVarToStackQuick(Variable &va, VariableStack *&thisStack); void trimStack(VariableStack *&stack); -int deleteVarFromStack(const Variable &va, VariableStack *&thisStack, - bool allOfEm = false); -VariableStack *stackFindLast(VariableStack *hunt); +int deleteVarFromStack(const Variable &va, VariableStack *&thisStack, bool allOfEm = false); bool copyStack(const Variable &from, Variable &to); int stackSize(const StackHandler *me); bool getSavedGamesStack(StackHandler *sH, const Common::String &ext); |