public override string GenerateControl(ControlInput input, ControlGenerationData data, int indent) { var output = string.Empty; data.hasBroke = true; if (input == Unit.enter) { return(CodeBuilder.Indent(indent) + "break".ConstructHighlight() + ";"); } return(base.GenerateControl(input, data, indent)); }
public override string GenerateControl(ControlInput input, ControlGenerationData data, int indent) { var output = string.Empty; var trueData = new ControlGenerationData() { mustBreak = data.mustBreak, mustReturn = data.mustReturn, returns = data.returns }; var falseData = new ControlGenerationData() { mustBreak = data.mustBreak, mustReturn = data.mustReturn, returns = data.returns }; if (input == Unit.enter) { output += CodeBuilder.Indent(indent) + "if".ConstructHighlight() + " (" + GenerateValue(Unit.condition) + ")"; output += "\n"; output += CodeBuilder.OpenBody(indent); output += "\n"; output += (Unit.ifTrue.hasAnyConnection ? (Unit.ifTrue.connection.destination.unit as Unit).GenerateControl(Unit.ifTrue.connection.destination, trueData, indent + 1) : string.Empty); output += "\n"; output += CodeBuilder.CloseBody(indent); if (Unit.ifFalse.hasAnyConnection) { output += "\n"; output += CodeBuilder.Indent(indent) + "else".ConstructHighlight(); output += "\n"; output += CodeBuilder.OpenBody(indent); output += "\n"; output += (Unit.ifFalse.hasAnyConnection ? (Unit.ifFalse.connection.destination.unit as Unit).GenerateControl(Unit.ifFalse.connection.destination, falseData, indent + 1) : string.Empty); output += "\n"; output += CodeBuilder.CloseBody(indent); } } if (data.mustBreak) { if (!trueData.hasBroke || !falseData.hasBroke) { data.hasBroke = false; } else { data.hasBroke = true; } } return(output); }
public static string GenerateControl <T>(this T node, ControlInput input, ControlGenerationData data, int indent) where T : Unit { return(NodeGenerator <T> .GetSingleDecorator(node, node).GenerateControl(input, data, indent)); }
public override string GenerateControl(ControlInput input, ControlGenerationData data, int indent) { var output = string.Empty; if (input == Unit.enter) { var values = Unit.branches; var outputs = Unit.outputs.ToArray(); var isLiteral = Unit.selector.hasValidConnection && Unit.selector.connection.source.unit as Literal != null; var localName = string.Empty; if (isLiteral) { localName = data.AddLocalName("str"); } var newLiteral = isLiteral ? CodeBuilder.Indent(indent) + "var ".ConstructHighlight() + $"{localName} = " + ((Unit)Unit.selector.connection.source.unit).GenerateValue(Unit.selector.connection.source) + ";" : string.Empty; var @enum = Unit.selector.hasValidConnection ? (isLiteral ? localName : ((Unit)Unit.selector.connection.source.unit).GenerateValue(Unit.selector.connection.source)) : base.GenerateControl(input, data, indent); if (isLiteral) { output += newLiteral + "\n"; } output += CodeBuilder.Indent(indent) + "switch".ConstructHighlight() + $" ({@enum})"; output += "\n"; output += CodeBuilder.Indent(indent) + "{"; output += "\n"; for (int i = 0; i < values.Count; i++) { var _connection = ((ControlOutput)outputs[i])?.connection; output += CodeBuilder.Indent(indent + 1) + "case ".ConstructHighlight() + $@" ""{values[i].Key}""".StringHighlight() + ":"; output += "\n"; var _controlData = new ControlGenerationData(); _controlData.returns = data.returns; _controlData.hasBroke = data.hasBroke; _controlData.mustBreak = _controlData.returns == typeof(Void); _controlData.mustReturn = !_controlData.mustBreak; _controlData.localNames = data.localNames; if (((ControlOutput)outputs[i]).hasValidConnection) { output += ((Unit)_connection.destination.unit).GenerateControl(_connection.destination as ControlInput, _controlData, indent + 2); output += "\n"; } if (_controlData.mustBreak && !_controlData.hasBroke) { output += CodeBuilder.Indent(indent + 2) + "/* Case Must Break */".WarningHighlight() + "\n"; } if (_controlData.mustReturn && !_controlData.hasReturned) { output += CodeBuilder.Indent(indent + 2) + "/* Case Must Return or Break */".WarningHighlight() + "\n"; } } var connection = [email protected]; output += CodeBuilder.Indent(indent + 1) + "default ".ConstructHighlight() + ":"; output += "\n"; var controlData = new ControlGenerationData(); controlData.returns = data.returns; controlData.hasBroke = data.hasBroke; controlData.mustBreak = controlData.returns == typeof(Void); controlData.mustReturn = !controlData.mustBreak; controlData.localNames = data.localNames; if ([email protected]) { output += ((Unit)connection.destination.unit).GenerateControl(connection.destination as ControlInput, controlData, indent + 2); output += "\n"; } if (controlData.mustBreak && !controlData.hasBroke) { output += CodeBuilder.Indent(indent + 2) + "/* Case Must Break */".WarningHighlight() + "\n"; } if (controlData.mustReturn && !controlData.hasReturned) { output += CodeBuilder.Indent(indent + 2) + "/* Case Must Return or Break */".WarningHighlight() + "\n"; } output += CodeBuilder.Indent(indent) + "}"; output += "\n"; return(output); } return(base.GenerateControl(input, data, indent)); }
public virtual string GenerateControl(ControlInput input, ControlGenerationData data, int indent) { return(CodeBuilder.Indent(indent) + $"/* Port '{ input.key }' of '{ input.unit.GetType().Name }' Missing Generator. */"); }
public override string GenerateControl(ControlInput input, ControlGenerationData data, int indent) { var output = string.Empty; if (input == Unit.enter) { var values = Unit.enumType.GetEnumValues(); var outputs = Unit.outputs.ToArray(); var isLiteral = [email protected] && [email protected] as Literal != null; var localName = string.Empty; if (isLiteral) { localName = data.AddLocalName("@enum"); } var newLiteral = isLiteral ? CodeBuilder.Indent(indent) + "var ".ConstructHighlight() + localName + " = " + ((Unit)[email protected]).GenerateValue([email protected]) : string.Empty; var @enum = [email protected] ? (isLiteral ? localName : ((Unit)[email protected]).GenerateValue([email protected])) : base.GenerateControl(input, data, indent); if (isLiteral) { output += newLiteral + "\n"; } output += CodeBuilder.Indent(indent) + "switch".ConstructHighlight() + " (" + @enum + ")"; output += "\n"; output += CodeBuilder.Indent(indent) + "{"; output += "\n"; for (int i = 0; i < values.Length; i++) { var connection = ((ControlOutput)outputs[i])?.connection; output += CodeBuilder.Indent(indent + 1) + "case ".ConstructHighlight() + Unit.enumType.Name.EnumHighlight() + "." + values.GetValue(i).ToString() + ":"; output += "\n"; var controlData = new ControlGenerationData(); controlData.returns = data.returns; controlData.mustBreak = controlData.returns == typeof(Void); controlData.mustReturn = !controlData.mustBreak; controlData.localNames = data.localNames; if (((ControlOutput)outputs[i]).hasValidConnection) { output += ((Unit)connection.destination.unit).GenerateControl(connection.destination as ControlInput, controlData, indent + 2); output += "\n"; } if (controlData.mustBreak && !controlData.hasBroke) { output += CodeBuilder.Indent(indent + 2) + "/* Case Must Break */".WarningHighlight() + "\n"; } if (controlData.mustReturn && !controlData.hasReturned) { output += CodeBuilder.Indent(indent + 2) + "/* Case Must Return or Break */".WarningHighlight() + "\n"; } } output += CodeBuilder.Indent(indent) + "}"; output += "\n"; return(output); } return(base.GenerateControl(input, data, indent)); }