public override IValue Evaluate()
{
StringBuilder builder = new StringBuilder();
List<bool> conditions = new List<bool>();
builder.Append(
new LivelinessExpression(
new ConstantExpression(new BoolValue(false)),
_ifCondCode)
.Evaluate().AsString);
var ifIsAlive = _ifCond.EvaluateCondition();
conditions.Add(ifIsAlive);
builder.Append(
new LivelinessExpression(
new ConstantExpression(new BoolValue(ifIsAlive)),
_ifBlock)
.Evaluate().AsString);
foreach (var elseIf in _elseIfCodeCondBlocks)
{
builder.Append(
new LivelinessExpression(
new ConstantExpression(new BoolValue(false)),
elseIf.Item1)
.Evaluate().AsString);
var elseIfIsAlive = !ifIsAlive && elseIf.Item2.EvaluateCondition();
conditions.Add(elseIfIsAlive);
builder.Append(
new LivelinessExpression(
new ConstantExpression(new BoolValue(elseIfIsAlive)),
elseIf.Item3)
.Evaluate().AsString);
}
if (_elseCondCode != null)
{
builder.Append(
new LivelinessExpression(
new ConstantExpression(new BoolValue(false)),
_elseCondCode)
.Evaluate().AsString);
var elseIsAlive = conditions.All(condition => !condition);
builder.Append(
new LivelinessExpression(
new ConstantExpression(new BoolValue(elseIsAlive)),
_elseBlock)
.Evaluate().AsString);
}
builder.Append(
new LivelinessExpression(
new ConstantExpression(new BoolValue(false)),
_endIfCode)
.Evaluate().AsString);
return new StringValue(builder.ToString());
}
}