protected void InjectSteps() { foreach (var label in this.JumpLabels) { var tostep = this.Steps.First(s => s.Node == label.Node); label.Output.Replace("${" + label.Node.GetHashCode() + "}", tostep.Step.ToString()); } for (int i = 0; i < this.Steps.Count; i++) { var step = this.Steps[i]; if (i != 0) { this.WriteNewLine(); } var output = step.Output.ToString(); if (string.IsNullOrWhiteSpace(output) && step.JumpToStep == (i + 1)) { continue; } this.Write("case " + i + ": "); this.BeginBlock(); bool addNewLine = false; if (step.FromTaskNumber > -1) { var expression = this.AwaitExpressions[step.FromTaskNumber - 1]; if (this.IsTaskResult(expression)) { this.Write(string.Format("$taskResult{0} = $task{0}.getResult();", step.FromTaskNumber)); } else { this.Write(string.Format("$task{0}.getResult();", step.FromTaskNumber)); } addNewLine = true; } if (!string.IsNullOrWhiteSpace(output)) { if (addNewLine) { this.WriteNewLine(); } this.Write(this.WriteIndentToString(output.TrimEnd())); } if (!this.IsOnlyWhitespaceOnPenultimateLine(false)) { addNewLine = true; } if (step.JumpToStep > -1 && !AbstractEmitterBlock.IsJumpStatementLast(output)) { if (addNewLine) { this.WriteNewLine(); } this.Write("$step = " + step.JumpToStep + ";"); this.WriteNewLine(); this.Write("continue;"); } else if (step.JumpToNode != null && !AbstractEmitterBlock.IsJumpStatementLast(output)) { var tostep = this.Steps.First(s => s.Node == step.JumpToNode); if (addNewLine) { this.WriteNewLine(); } this.Write("$step = " + tostep.Step + ";"); this.WriteNewLine(); this.Write("continue;"); } else if (i == (this.Steps.Count - 1) && !AbstractEmitterBlock.IsReturnLast(output)) { if (addNewLine) { this.WriteNewLine(); } if (this.IsTaskReturn) { this.Write("$returnTask.setResult(null);"); this.WriteNewLine(); } this.Write("return;"); } this.WriteNewLine(); this.EndBlock(); } this.WriteNewLine(); this.Write("default: "); this.BeginBlock(); if (this.IsTaskReturn) { this.Write("$returnTask.setResult(null);"); this.WriteNewLine(); } this.Write("return;"); this.WriteNewLine(); this.EndBlock(); }