diff --git a/Advanced Software Engineering/Advanced Software Engineering/Advanced Software Engineering.csproj b/Advanced Software Engineering/Advanced Software Engineering/Advanced Software Engineering.csproj
index 8fe2f6e..79ad8b9 100644
--- a/Advanced Software Engineering/Advanced Software Engineering/Advanced Software Engineering.csproj
+++ b/Advanced Software Engineering/Advanced Software Engineering/Advanced Software Engineering.csproj
@@ -94,7 +94,6 @@
-
diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/DeclareMethod.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/DeclareMethod.cs
index 9b934fd..f70c6c7 100644
--- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/DeclareMethod.cs
+++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/DeclareMethod.cs
@@ -7,15 +7,17 @@ using System.Threading.Tasks;
namespace Advanced_Software_Engineering.Verbs.Flow {
class DeclareMethod : IVerb, IVerbChunk {
-
- MethodChunk methodChunk;
+ string methodName;
+ Drawer drawer;
- public DeclareMethod(MethodChunk methodChunk) {
- this.methodChunk = methodChunk;
+ public DeclareMethod(Drawer drawer, string methodName) {
+ this.drawer = drawer;
+ this.methodName = methodName;
}
public void AddVerb(IVerb verb) {
+ MethodChunk methodChunk = drawer.Methods[methodName];
methodChunk.AddVerb(verb);
}
diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/IncreaseStack.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/IncreaseStack.cs
deleted file mode 100644
index c8c9272..0000000
--- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/IncreaseStack.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using Advanced_Software_Engineering.Verbs.Value;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Advanced_Software_Engineering.Verbs.Flow {
- public class IncreaseStack : IVerb {
-
- ValueStorage valueStorage;
-
- public IncreaseStack(ValueStorage valueStorage) {
- valueStorage.IncreaseStack();
- this.valueStorage = valueStorage;
- }
-
- public void ExecuteVerb() {
- valueStorage.IncreaseStack();
- }
-
- public string GetDescription() {
- return "Increase the stack";
- }
- }
-}
diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/MethodChunk.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/MethodChunk.cs
index db1337f..2dfacdd 100644
--- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/MethodChunk.cs
+++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/MethodChunk.cs
@@ -8,6 +8,7 @@ namespace Advanced_Software_Engineering.Verbs.Flow {
ValueStorage valueStorage;
DeclareVariable[] variables;
+ UpdateVariable[] updateVariables;
bool init = false;
IValue result;
@@ -26,12 +27,32 @@ namespace Advanced_Software_Engineering.Verbs.Flow {
return variables;
}
+ public void SetVariableValues(UpdateVariable[] updateVariables) {
+ this.updateVariables = updateVariables;
+ }
+
+ public MethodChunk DuplicateForExecution() {
+ MethodChunk method = new MethodChunk(valueStorage, variables);
+ method.SetVariableValues(updateVariables);
+
+ foreach (IVerb verb in base.GetVerbs()) method.AddVerb(verb);
+
+ return method;
+ }
+
public new void ExecuteVerb() {
init = false;
result = null;
- // The stack increased artificially
- //valueStorage.IncreaseStack();
+ valueStorage.IncreaseStack();
+
+ //Declare everything
+ foreach (DeclareVariable variable in variables) variable.ExecuteVerb();
+
+ //Set the values of everything
+ foreach (UpdateVariable variable in updateVariables) variable.ExecuteVerb();
+
+ //Run code
base.ExecuteVerb();
if (valueStorage.CheckVariableExists("ret")) {
result = valueStorage.GetVariable("ret");
diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/VerbChunk.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/VerbChunk.cs
index 7f32e29..b4a0a91 100644
--- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/VerbChunk.cs
+++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/VerbChunk.cs
@@ -21,6 +21,10 @@ namespace Advanced_Software_Engineering.Verbs.Flow {
foreach (IVerb verb in verbs) verb.ExecuteVerb();
}
+ public IVerb[] GetVerbs() {
+ return verbs.ToArray();
+ }
+
public string GetDescription() {
string s = "VerbChunk Start";
foreach (IVerb verb in verbs) s += "\n" + verb.GetDescription();
diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/DeclareVariable.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/DeclareVariable.cs
index ba8f5ad..b7569b3 100644
--- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/DeclareVariable.cs
+++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/DeclareVariable.cs
@@ -109,7 +109,8 @@ namespace Advanced_Software_Engineering.Verbs.Value {
}
public void ExecuteVerb() {
- storage.SetVariable(name, value);
+ if (value != null) storage.SetVariable(name, value.Clone());
+ else storage.SetVariable(name, value);
}
public string GetDescription() {
diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueStorage.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueStorage.cs
index 609ec12..1abf4c4 100644
--- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueStorage.cs
+++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueStorage.cs
@@ -62,7 +62,7 @@ namespace Advanced_Software_Engineering.Verbs.Value {
public IValue GetVariable(string name) {
for (int stack = currentStack; stack >= 0; stack--) {
- if (CheckVariableExists(name, stack)) return GetVariable(name, stack);
+ if (CheckVariableExists(name, stack) && GetVariable(name, stack) != null) return GetVariable(name, stack);
}
throw new Exception("Cannot find variable " + name);
}
diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/ExpressionValue.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/ExpressionValue.cs
index ed4ce66..d2fcd87 100644
--- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/ExpressionValue.cs
+++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/ExpressionValue.cs
@@ -57,7 +57,10 @@ namespace Advanced_Software_Engineering.Verbs.Value {
private IValue Evaluate() {
if (evaluated) return evaluatedValue;
- string outputType = variable1.Clone().GetOriginalType();
+ IValue variable1 = this.variable1.Clone();
+ IValue variable2 = this.variable2.Clone();
+
+ string outputType = variable1.GetOriginalType();
switch (outputType) {
case "bool":
diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/VariableValue.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/VariableValue.cs
index 19b08c7..512b3f4 100644
--- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/VariableValue.cs
+++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/VariableValue.cs
@@ -46,7 +46,7 @@ namespace Advanced_Software_Engineering.Verbs.Value.ValueTypes {
}
public IValue Clone() {
- return new VariableValue(storage, variableName);
+ return get().Clone();
}
}
}
\ No newline at end of file
diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/VerbFactory.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/VerbFactory.cs
index 782e017..2157b75 100644
--- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/VerbFactory.cs
+++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/VerbFactory.cs
@@ -113,10 +113,12 @@ namespace Advanced_Software_Engineering {
}
methodParameters = methodParameterList.ToArray();
}
+
+ //Get method name
string methodName = commandParameters[0];
MethodChunk methodChunk = new MethodChunk(rootValueStorage, methodParameters);
- DeclareMethod declareMethod = new DeclareMethod(methodChunk);
+ DeclareMethod declareMethod = new DeclareMethod(drawer, methodName);
drawer.Methods.Add(methodName, methodChunk);
verbChunks.Add(declareMethod);
@@ -159,27 +161,15 @@ namespace Advanced_Software_Engineering {
*
*/
- VerbChunk localChunk = new VerbChunk();
- localChunk.AddVerb(new IncreaseStack(rootValueStorage));
-
- // Declare all of the variables first
- foreach (DeclareVariable variable in methodChunk.GetVariables()) localChunk.AddVerb(variable);
// Update the values of the variables
+ List UpdateVariableList = new List();
for (int variableIndex = 0; variableIndex < methodVariableNames.Length; variableIndex++) {
- UpdateVariable variableDeclaration = new UpdateVariable(rootValueStorage, methodVariableNames[variableIndex], parameters[variableIndex]);
- localChunk.AddVerb(variableDeclaration);
+ UpdateVariableList.Add(new UpdateVariable(rootValueStorage, methodVariableNames[variableIndex], parameters[variableIndex]));
}
- // localChunk.AddVerb(methodChunk);
-
- //Add chunk to chunk stack
- localChunk.AddVerb(methodChunk);
- //verbChunks.Add(localChunk);
-
- //chunkDepth = verbChunks.Count - 1;
- //currentChunk = verbChunks[chunkDepth];
- tmpVerb = localChunk;
+ methodChunk.SetVariableValues(UpdateVariableList.ToArray());
+ tmpVerb = methodChunk.DuplicateForExecution();
}
//process drawing commands and extras