Private
Public Access
Made it possible to access variables down the stack
This commit is contained in:
1 parent
07b7e86a63
commit
c3f1c82395
1 file changed
+21
-14
+21
-14
@@ -16,8 +16,9 @@ namespace Advanced_Software_Engineering.Verbs.Value {
|
||||
SetStack(0);
|
||||
}
|
||||
|
||||
public void SetStack(int stack) {
|
||||
currentStack = stack < 0 ? 0 : stack;
|
||||
private void SetStack(int stack) {
|
||||
if (stack < 0) throw new Exception("Stack cannot be less than 0");
|
||||
|
||||
if (!Variables.ContainsKey(stack)) Variables.Add(currentStack, new Dictionary<string, IValue>());
|
||||
}
|
||||
|
||||
@@ -34,36 +35,42 @@ namespace Advanced_Software_Engineering.Verbs.Value {
|
||||
}
|
||||
}
|
||||
|
||||
public void SetVariable(string name, int stack, IValue value) {
|
||||
if (stack == 0) Variables[stack][name] = value;
|
||||
else {
|
||||
if (CheckVariableExists(name, stack)) Variables[stack][name] = value;
|
||||
else if (CheckVariableExists(name, 0)) Variables[0][name] = value;
|
||||
else Variables[stack][name] = value;
|
||||
private void SetVariable(string name, int stack, IValue value) {
|
||||
for (int internalStack = stack; internalStack >= 0; internalStack--) {
|
||||
if (value == null || CheckVariableExists(name, internalStack)) {
|
||||
Variables[internalStack][name] = value;
|
||||
return;
|
||||
}
|
||||
}
|
||||
Variables[stack][name] = value;
|
||||
}
|
||||
|
||||
public void SetVariable(string name, IValue value) {
|
||||
SetVariable(name, currentStack, value);
|
||||
}
|
||||
|
||||
public IValue GetVariable(string name, int stack) {
|
||||
private IValue GetVariable(string name, int stack) {
|
||||
return Variables[stack][name];
|
||||
}
|
||||
|
||||
public IValue GetVariable(string name) {
|
||||
if (currentStack > 0 && CheckVariableExists(name, currentStack)) return GetVariable(name, currentStack);
|
||||
else if (CheckVariableExists(name, 0)) return GetVariable(name, 0);
|
||||
else throw new Exception("Cannot find variable " + name);
|
||||
for (int stack = currentStack; stack >= 0; stack--) {
|
||||
if (CheckVariableExists(name, stack)) return GetVariable(name, stack);
|
||||
}
|
||||
throw new Exception("Cannot find variable " + name);
|
||||
}
|
||||
|
||||
public bool CheckVariableExists(string name, int stack) {
|
||||
private bool CheckVariableExists(string name, int stack) {
|
||||
if (name == null) return false;
|
||||
return Variables[stack].ContainsKey(name);
|
||||
}
|
||||
|
||||
public bool CheckVariableExists(string name) {
|
||||
return CheckVariableExists(name, currentStack) || CheckVariableExists(name, 0);
|
||||
if (name == null) return false;
|
||||
for (int stack = currentStack; stack >= 0; stack--) {
|
||||
if (CheckVariableExists(name, stack)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user