Private
Public Access
Implemented While loops
This commit is contained in:
1 parent
229ce3ca56
commit
40754aae69
4 files changed
+35
-3
No files matched your search
+1
@@ -96,6 +96,7 @@
|
|||||||
<Compile Include="Verbs\Flow\IfChunk.cs" />
|
<Compile Include="Verbs\Flow\IfChunk.cs" />
|
||||||
<Compile Include="Verbs\Flow\IVerbChunk.cs" />
|
<Compile Include="Verbs\Flow\IVerbChunk.cs" />
|
||||||
<Compile Include="Verbs\Flow\MethodChunk.cs" />
|
<Compile Include="Verbs\Flow\MethodChunk.cs" />
|
||||||
|
<Compile Include="Verbs\Flow\WhileChunk.cs" />
|
||||||
<Compile Include="Verbs\Value\ValueObjects\PointValue.cs" />
|
<Compile Include="Verbs\Value\ValueObjects\PointValue.cs" />
|
||||||
<Compile Include="Verbs\Value\ValueStorage.cs" />
|
<Compile Include="Verbs\Value\ValueStorage.cs" />
|
||||||
<Compile Include="Verbs\Value\ValueTypes\ComparisonValue.cs" />
|
<Compile Include="Verbs\Value\ValueTypes\ComparisonValue.cs" />
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
using Advanced_Software_Engineering.Verbs.Value;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Advanced_Software_Engineering.Verbs.Flow {
|
||||||
|
public class WhileChunk : VerbChunk, IVerbChunk, IVerb {
|
||||||
|
|
||||||
|
IValue conditional;
|
||||||
|
ValueStorage valueStorage;
|
||||||
|
|
||||||
|
public WhileChunk(ValueStorage valueStorage, IValue conditional) : base() {
|
||||||
|
this.conditional = conditional;
|
||||||
|
this.valueStorage = valueStorage;
|
||||||
|
valueStorage.IncreaseStack();
|
||||||
|
}
|
||||||
|
|
||||||
|
public new void ExecuteVerb() {
|
||||||
|
valueStorage.IncreaseStack();
|
||||||
|
while (conditional.ToBool()) base.ExecuteVerb();
|
||||||
|
valueStorage.DecreaseStack();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-3
@@ -55,8 +55,6 @@ namespace Advanced_Software_Engineering.Verbs.Value {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private IValue Evaluate() {
|
private IValue Evaluate() {
|
||||||
if (evaluated) return evaluatedValue;
|
|
||||||
|
|
||||||
IValue variable1 = this.variable1.Clone();
|
IValue variable1 = this.variable1.Clone();
|
||||||
IValue variable2 = this.variable2.Clone();
|
IValue variable2 = this.variable2.Clone();
|
||||||
|
|
||||||
@@ -92,7 +90,7 @@ namespace Advanced_Software_Engineering.Verbs.Value {
|
|||||||
case "color":
|
case "color":
|
||||||
throw new Exception("Colors are immutable");
|
throw new Exception("Colors are immutable");
|
||||||
}
|
}
|
||||||
evaluated = true;
|
|
||||||
return evaluatedValue;
|
return evaluatedValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -97,6 +97,16 @@ namespace Advanced_Software_Engineering {
|
|||||||
} else throw new Exception(command + " has an incorrect number of parameters");
|
} else throw new Exception(command + " has an incorrect number of parameters");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "while":
|
||||||
|
if (commandParameters.Length == 1) {
|
||||||
|
verbChunks.Add(new WhileChunk(rootValueStorage, ValueFactory.CreateValue(rootValueStorage, commandParameters[0])));
|
||||||
|
chunkDepth = verbChunks.Count - 1;
|
||||||
|
currentChunk = verbChunks[chunkDepth];
|
||||||
|
parsed = true;
|
||||||
|
tmpVerb = new NoOp();
|
||||||
|
} else throw new Exception(command + " has an incorrect number of parameters");
|
||||||
|
break;
|
||||||
|
|
||||||
case "def":
|
case "def":
|
||||||
if (drawer.verbChunkGeneratingMethod) throw new Exception("Cannot declare a method while declaring method");
|
if (drawer.verbChunkGeneratingMethod) throw new Exception("Cannot declare a method while declaring method");
|
||||||
else if (chunkDepth != 0) throw new Exception("Cannot declare a method above root chunk"); //TODO, explain better
|
else if (chunkDepth != 0) throw new Exception("Cannot declare a method above root chunk"); //TODO, explain better
|
||||||
|
|||||||
Reference in new issue
Block a user