diff --git a/Advanced Software Engineering/Advanced Software Engineering/Drawer.cs b/Advanced Software Engineering/Advanced Software Engineering/Drawer.cs index 660e8d5..55dee23 100644 --- a/Advanced Software Engineering/Advanced Software Engineering/Drawer.cs +++ b/Advanced Software Engineering/Advanced Software Engineering/Drawer.cs @@ -190,7 +190,7 @@ namespace Advanced_Software_Engineering { } public void SetVariable(string name, IValue value) { - variables.Add(name, value); + variables[name] = value; } public IValue GetVariable(string name) { 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 374a0a6..9316480 100644 --- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/DeclareVariable.cs +++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/DeclareVariable.cs @@ -9,9 +9,9 @@ namespace Advanced_Software_Engineering.Verbs.Value { private string name; //Common characters that people might try - private char[] illegalCharacters = "1234567890!?/+- \"'@#~;:><,.`¬|[]{}\\£$%^&*()".ToCharArray(); + private static readonly char[] illegalCharacters = "1234567890!?/+- \"'@#~;:><,.`¬|[]{}\\£$%^&*()".ToCharArray(); - private string[] illegalNames = + private static readonly string[] illegalNames = { "var", "move", "moveto", "drawto", "line", "lineto", @@ -73,6 +73,9 @@ namespace Advanced_Software_Engineering.Verbs.Value { if (drawer.CheckVariableExists(name)) throw new Exception("Declaration failed. " + name + " has been declared before"); if (!CheckName(name)) throw new Exception("'" + name + "' name not allowed"); + //preassign name + drawer.SetVariable(name, null); + //for single number assignments ["i", "=", "20"] if (assignmentStrings.Length == 3) value = ValueFactory.CreateValue(drawer, assignmentStrings[2]); diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/IValue.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/IValue.cs index 6c27245..9ca6a0a 100644 --- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/IValue.cs +++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/IValue.cs @@ -17,5 +17,7 @@ namespace Advanced_Software_Engineering.Verbs.Value { string GetOriginalType(); bool isInitialised(); + + IValue Clone(); } } \ No newline at end of file diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/UpdateVariable.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/UpdateVariable.cs index fbd9049..6502edb 100644 --- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/UpdateVariable.cs +++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/UpdateVariable.cs @@ -50,7 +50,7 @@ namespace Advanced_Software_Engineering.Verbs.Value { public void ExecuteVerb() { if (!drawer.CheckVariableExists(name)) throw new Exception("Cannot update variable because it is not declared"); - drawer.SetVariable(name, value); + drawer.SetVariable(name, value.Clone()); } public string GetDescription() { diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueObjects/ColorValue.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueObjects/ColorValue.cs index 0831036..81c6458 100644 --- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueObjects/ColorValue.cs +++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueObjects/ColorValue.cs @@ -62,5 +62,9 @@ namespace Advanced_Software_Engineering.Verbs.Value.ValueObjects { public bool isInitialised() { return true; } + + public IValue Clone() { + return new ColorValue(this.ToColor()); + } } } \ No newline at end of file diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/BoolValue.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/BoolValue.cs index 43f9213..f6ad676 100644 --- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/BoolValue.cs +++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/BoolValue.cs @@ -45,5 +45,9 @@ namespace Advanced_Software_Engineering.Verbs.Value.ValueTypes { public bool isInitialised() { return initialised; } + + public IValue Clone() { + return new BoolValue(value); + } } } \ No newline at end of file diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/ComparisonValue.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/ComparisonValue.cs index d5b6f23..53e1739 100644 --- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/ComparisonValue.cs +++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/ComparisonValue.cs @@ -72,5 +72,9 @@ namespace Advanced_Software_Engineering.Verbs.Value.ValueTypes { public int ToInt() { return Evaluate().ToInt(); } + + public IValue Clone() { + return new ComparisonValue(value1, value2, op); + } } } \ No newline at end of file diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/DoubleValue.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/DoubleValue.cs index 34652bc..0a50ab6 100644 --- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/DoubleValue.cs +++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/DoubleValue.cs @@ -48,5 +48,9 @@ namespace Advanced_Software_Engineering.Verbs.Value.ValueTypes { public bool isInitialised() { return initialised; } + + public IValue Clone() { + return new DoubleValue(value); + } } } \ No newline at end of file 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 a18c564..3a151ed 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,7 @@ namespace Advanced_Software_Engineering.Verbs.Value { private IValue Evaluate() { if (evaluated) return evaluatedValue; - string outputType = variable1.GetOriginalType(); + string outputType = variable1.Clone().GetOriginalType(); switch (outputType) { case "bool": @@ -119,7 +119,7 @@ namespace Advanced_Software_Engineering.Verbs.Value { } public string GetOriginalType() { - return variable1.GetOriginalType(); + return "expression"; } public bool isInitialised() { @@ -141,5 +141,9 @@ namespace Advanced_Software_Engineering.Verbs.Value { public int ToInt() { return Evaluate().ToInt(); } + + public IValue Clone() { + return Evaluate(); + } } } \ No newline at end of file diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/IntValue.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/IntValue.cs index d266973..3a890f5 100644 --- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/IntValue.cs +++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueTypes/IntValue.cs @@ -63,5 +63,9 @@ namespace Advanced_Software_Engineering.Verbs.Value.ValueTypes { public bool isInitialised() { return initialised; } + + public IValue Clone() { + return new IntValue(value); + } } } \ No newline at end of file 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 7e832f1..a34aa95 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 @@ -44,5 +44,9 @@ namespace Advanced_Software_Engineering.Verbs.Value.ValueTypes { public int ToInt() { return get().ToInt(); } + + public IValue Clone() { + return new VariableValue(drawer, variableName); + } } } \ No newline at end of file