public void WriteNode_No_Items() { var stringBuilder = new StringBuilder(); var writer = new DotWriter(new StringWriter(stringBuilder)); writer.WriteNode("1", "header"); stringBuilder.ToString().Should().BeIgnoringLineEndings("1 [shape=record label=\"{header}\"]\r\n"); }
public void WriteNode_With_Encoding() { var stringBuilder = new StringBuilder(); var writer = new DotWriter(new StringWriter(stringBuilder)); writer.WriteNode("1", "header", "\r", "\n", "{", "}", "<", ">", "|", "\""); stringBuilder.ToString().Should().BeIgnoringLineEndings(@"1 [shape=record label=""{header||\n|\{|\}|\<|\>|\||\""}""]" + "\r\n"); }
public void Visit(string methodName, UCFG ucfg) { writer.WriteGraphStart(methodName); writer.WriteNode(EntryBlockId, EntryBlockId, ucfg.Parameters.ToArray()); foreach (var entry in ucfg.Entries) { writer.WriteEdge(EntryBlockId, entry, string.Empty); } foreach (var block in ucfg.BasicBlocks) { Visit(block); } writer.WriteNode(ExitBlockId, ExitBlockId); writer.WriteGraphEnd(); }
private void WriteNode(Block block, SyntaxNode terminator = null) { var header = block.GetType().Name.SplitCamelCaseToWords().First().ToUpperInvariant(); if (terminator != null) { // shorten the text var terminatorType = terminator.Kind().ToString().Replace("Syntax", string.Empty); header += ":" + terminatorType; } writer.WriteNode(blockId.Get(block), header, block.Instructions.Select(i => i.ToString()).ToArray()); }