Skip to content

Commit

Permalink
SLUDGE: Move unlinkVar into struct Variable
Browse files Browse the repository at this point in the history
  • Loading branch information
yinsimei committed May 31, 2018
1 parent 6004cd3 commit 04444b7
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 37 deletions.
8 changes: 4 additions & 4 deletions engines/sludge/builtin.cpp
Expand Up @@ -205,7 +205,7 @@ builtIn(getMatchingFiles) {
UNUSEDALL
Common::String newText = getTextFromAnyVar(fun->stack->thisVar);
trimStack(fun->stack);
unlinkVar(fun->reg);
fun->reg.unlinkVar();

// Return value
fun->reg.varType = SVT_STACK;
Expand Down Expand Up @@ -498,7 +498,7 @@ builtIn(stringLength) {

builtIn(newStack) {
UNUSEDALL
unlinkVar(fun->reg);
fun->reg.unlinkVar();

// Return value
fun->reg.varType = SVT_STACK;
Expand Down Expand Up @@ -2236,7 +2236,7 @@ builtIn(loadCustomData) {
return BR_ERROR;
trimStack(fun->stack);

unlinkVar(fun->reg);
fun->reg.unlinkVar();
fun->reg.varType = SVT_STACK;
fun->reg.varData.theStack = new StackHandler;
if (!checkNew(fun->reg.varData.theStack))
Expand Down Expand Up @@ -2311,7 +2311,7 @@ builtIn(getPixelColour) {
return BR_ERROR;
trimStack(fun->stack);

unlinkVar(fun->reg);
fun->reg.unlinkVar();
fun->reg.varType = SVT_STACK;
fun->reg.varData.theStack = new StackHandler;
if (!checkNew(fun->reg.varData.theStack))
Expand Down
8 changes: 4 additions & 4 deletions engines/sludge/function.cpp
Expand Up @@ -100,9 +100,9 @@ void finishFunction(LoadedFunction *fun) {
fatal(ERROR_NON_EMPTY_STACK);
delete[] fun->compiledLines;
for (a = 0; a < fun->numLocals; a++)
unlinkVar(fun->localVars[a]);
fun->localVars[a].unlinkVar();
delete[] fun->localVars;
unlinkVar(fun->reg);
fun->reg.unlinkVar();
delete fun;
fun = NULL;
}
Expand All @@ -115,9 +115,9 @@ void abortFunction(LoadedFunction *fun) {
trimStack(fun->stack);
delete []fun->compiledLines;
for (a = 0; a < fun->numLocals; a++)
unlinkVar(fun->localVars[a]);
fun->localVars[a].unlinkVar();
delete []fun->localVars;
unlinkVar(fun->reg);
fun->reg.unlinkVar();
if (fun->calledBy)
abortFunction(fun->calledBy);
delete fun;
Expand Down
2 changes: 1 addition & 1 deletion engines/sludge/loadsave.cpp
Expand Up @@ -257,7 +257,7 @@ bool loadGame(const Common::String &fname) {
}

for (int a = 0; a < numGlobals; a++) {
unlinkVar(globalVars[a]);
globalVars[a].unlinkVar();
loadVariable(&globalVars[a], fp);
}

Expand Down
54 changes: 27 additions & 27 deletions engines/sludge/variable.cpp
Expand Up @@ -38,36 +38,36 @@ const char *typeName[] = { "undefined", "number", "user function", "string",
"built-in function", "file", "stack", "object type", "animation",
"costume" };

void unlinkVar(Variable &thisVar) {
switch (thisVar.varType) {
void Variable::unlinkVar() {
switch (varType) {
case SVT_STRING:
delete []thisVar.varData.theString;
thisVar.varData.theString = NULL;
delete []varData.theString;
varData.theString = NULL;
break;

case SVT_STACK:
thisVar.varData.theStack->timesUsed--;
if (thisVar.varData.theStack->timesUsed <= 0) {
while (thisVar.varData.theStack->first)
trimStack(thisVar.varData.theStack->first);
delete thisVar.varData.theStack;
thisVar.varData.theStack = NULL;
varData.theStack->timesUsed--;
if (varData.theStack->timesUsed <= 0) {
while (varData.theStack->first)
trimStack(varData.theStack->first);
delete varData.theStack;
varData.theStack = NULL;
}
break;

case SVT_FASTARRAY:
thisVar.varData.fastArray->timesUsed--;
if (thisVar.varData.theStack->timesUsed <= 0) {
delete thisVar.varData.fastArray->fastVariables;
delete[] thisVar.varData.fastArray;
thisVar.varData.fastArray = NULL;
varData.fastArray->timesUsed--;
if (varData.theStack->timesUsed <= 0) {
delete varData.fastArray->fastVariables;
delete[] varData.fastArray;
varData.fastArray = NULL;
}
break;

case SVT_ANIM:
if (thisVar.varData.animHandler) {
delete thisVar.varData.animHandler;
thisVar.varData.animHandler = nullptr;
if (varData.animHandler) {
delete varData.animHandler;
varData.animHandler = nullptr;
}
break;

Expand All @@ -77,13 +77,13 @@ void unlinkVar(Variable &thisVar) {
}

void setVariable(Variable &thisVar, VariableType vT, int value) {
unlinkVar(thisVar);
thisVar.unlinkVar();
thisVar.varType = vT;
thisVar.varData.intValue = value;
}

void newAnimationVariable(Variable &thisVar, PersonaAnimation *i) {
unlinkVar(thisVar);
thisVar.unlinkVar();
thisVar.varType = SVT_ANIM;
thisVar.varData.animHandler = i;
}
Expand All @@ -100,7 +100,7 @@ PersonaAnimation *getAnimationFromVar(Variable &thisVar) {
}

void newCostumeVariable(Variable &thisVar, Persona *i) {
unlinkVar(thisVar);
thisVar.unlinkVar();
thisVar.varType = SVT_COSTUME;
thisVar.varData.costumeHandler = i;
}
Expand Down Expand Up @@ -198,7 +198,7 @@ void addVariablesInSecond(Variable &var1, Variable &var2) {
Common::String string1 = getTextFromAnyVar(var1);
Common::String string2 = getTextFromAnyVar(var2);

unlinkVar(var2);
var2.unlinkVar();
var2.varData.theString = createCString(string1 + string2);
var2.varType = SVT_STRING;
}
Expand Down Expand Up @@ -240,7 +240,7 @@ void compareVariablesInSecond(const Variable &var1, Variable &var2) {
}

void makeTextVar(Variable &thisVar, const Common::String &txt) {
unlinkVar(thisVar);
thisVar.unlinkVar();
thisVar.varType = SVT_STRING;
thisVar.varData.theString = createCString(txt);
}
Expand Down Expand Up @@ -376,7 +376,7 @@ bool copyMain(const Variable &from, Variable &to) {
}

bool copyVariable(const Variable &from, Variable &to) {
unlinkVar(to);
to.unlinkVar();
return copyMain(from, to);
}

Expand All @@ -389,7 +389,7 @@ Variable *fastArrayGetByIndex(FastArrayHandler *vS, uint theIndex) {
bool makeFastArraySize(Variable &to, int size) {
if (size < 0)
return fatal("Can't create a fast array with a negative number of elements!");
unlinkVar(to);
to.unlinkVar();
to.varType = SVT_FASTARRAY;
to.varData.fastArray = new FastArrayHandler;
if (!checkNew(to.varData.fastArray))
Expand Down Expand Up @@ -476,7 +476,7 @@ int deleteVarFromStack(const Variable &va, VariableStack *&thisStack, bool allOf
if (compareVars((*huntVar)->thisVar, va)) {
killMe = *huntVar;
*huntVar = killMe->next;
unlinkVar(killMe->thisVar);
killMe->thisVar.unlinkVar();
delete killMe;
if (!allOfEm)
return 1;
Expand Down Expand Up @@ -522,7 +522,7 @@ void trimStack(VariableStack *&stack) {
//debugC(2, kSludgeDebugStackMachine, "Variable %s was removed from stack", getTextFromAnyVar(killMe->thisVar));

// When calling this, we've ALWAYS checked that stack != NULL
unlinkVar(killMe->thisVar);
killMe->thisVar.unlinkVar();
delete killMe;
}

Expand Down
3 changes: 2 additions & 1 deletion engines/sludge/variable.h
Expand Up @@ -73,6 +73,8 @@ struct Variable {
varType = SVT_NULL;
varData.intValue = 0;
}

void unlinkVar();
};

struct VariableStack {
Expand All @@ -93,7 +95,6 @@ void compareVariablesInSecond(const Variable &var1, Variable &var2);

// Misc.

void unlinkVar(Variable &thisVar);
Common::String getTextFromAnyVar(const Variable &from);
struct Persona *getCostumeFromVar(Variable &thisVar);
struct PersonaAnimation *getAnimationFromVar(Variable &thisVar);
Expand Down

0 comments on commit 04444b7

Please sign in to comment.