public override void Emit(CodeWriter writer) { Condition.Emit(writer); var endLabel = new Label(); if (this.FalseBody == null) { // single body writer.JumpWhenFalse(endLabel); TrueBody.Emit(writer); } else { // double body var falseLabel = new Label(); writer.JumpWhenFalse(falseLabel); TrueBody.Emit(writer); writer.Jump(endLabel); writer.DefineLabel(falseLabel); FalseBody.Emit(writer); } writer.DefineLabel(endLabel); }
public override string WriteLua(int indentLevel) { StringBuilder str = new StringBuilder(); if (IsElseIf) { str.Append($"elseif {Condition} then\n"); } else { str.Append($"if {Condition} then\n"); } if (TrueBody != null) { str.Append(TrueBody.PrintBlock(indentLevel).AddIndent()); } if (FalseBody != null) { str.Append("\n"); // Check for elseif if (FalseBody.Instructions.Count() == 1 && FalseBody.Instructions.First() is IfStatement s && s.Follow == null) { s.IsElseIf = true; str.Append(FalseBody.PrintBlock(indentLevel)); } else { for (int i = 0; i < indentLevel; i++) { str.Append("\t"); } str.Append("else\n"); str.Append(FalseBody.PrintBlock(indentLevel).AddIndent()); } }