bufixes when printing to image

This commit is contained in:
ChUrl
2021-01-30 16:06:18 +01:00
parent e79980479f
commit 2a1246d2fb
3 changed files with 15 additions and 4 deletions

View File

@ -96,7 +96,11 @@ public final class DataFlowGraph {
for (DataFlowNode node : this.graph) { for (DataFlowNode node : this.graph) {
// Successors // Successors
for (DataFlowNode succ : node.getSuccessors()) { for (DataFlowNode succ : node.getSuccessors()) {
dot.append(node.getId()).append(" -> ").append(succ.getId()).append(";\n"); if (!dot.toString().contains(node.getId() + " -> " + succ.getId())) {
// No duplicate arrows
dot.append(node.getId()).append(" -> ").append(succ.getId()).append(";\n");
}
} }
// Predecessors // Predecessors

View File

@ -141,6 +141,8 @@ public class FlowBasicBlock {
return this.instructions.stream() return this.instructions.stream()
.map(inst -> inst.toString().trim() + "\\n") .map(inst -> inst.toString().trim() + "\\n")
.map(inst -> inst.replace("\"", "\\\"")) .map(inst -> inst.replace("\"", "\\\""))
.map(inst -> inst.replace("<", "less"))
.map(inst -> inst.replace(">", "greater"))
.collect(Collectors.joining()); .collect(Collectors.joining());
} }

View File

@ -34,7 +34,6 @@ public class FlowGraph {
public void addLabel(String label) { public void addLabel(String label) {
final FlowBasicBlock newBlock = new FlowBasicBlock(label); final FlowBasicBlock newBlock = new FlowBasicBlock(label);
// Resolve missing successors/predecessors from jumps // Resolve missing successors/predecessors from jumps
if (this.predecessorMap.containsKey(label)) { if (this.predecessorMap.containsKey(label)) {
this.predecessorMap.get(label).addSuccessor(newBlock); this.predecessorMap.get(label).addSuccessor(newBlock);
@ -54,7 +53,7 @@ public class FlowGraph {
final FlowBasicBlock newBlock = new FlowBasicBlock(); final FlowBasicBlock newBlock = new FlowBasicBlock();
if (!"goto".equals(jumpInstruction)) { if (!"goto".equals(jumpInstruction)) {
// Goto always jumps // Goto always jumps, so we don't have a direct relation in order of the code
newBlock.addPredecessor(this.getCurrentBlock()); // Obvious predecessor of new block newBlock.addPredecessor(this.getCurrentBlock()); // Obvious predecessor of new block
this.getCurrentBlock().addSuccessor(newBlock); // Obvious successor of current block this.getCurrentBlock().addSuccessor(newBlock); // Obvious successor of current block
@ -160,6 +159,8 @@ public class FlowGraph {
.append("node[shape=Mrecord]\n"); .append("node[shape=Mrecord]\n");
for (FlowBasicBlock block : this.basicBlocks) { for (FlowBasicBlock block : this.basicBlocks) {
System.out.println(block);
System.out.println("-".repeat(100));
dot.append(block.getId()) dot.append(block.getId())
.append(" [label=\"{<f0> ") .append(" [label=\"{<f0> ")
.append(this.basicBlocks.indexOf(block)) .append(this.basicBlocks.indexOf(block))
@ -179,7 +180,11 @@ public class FlowGraph {
for (FlowBasicBlock block : this.basicBlocks) { for (FlowBasicBlock block : this.basicBlocks) {
// Successors // Successors
for (FlowBasicBlock succ : block.getSuccessorSet()) { for (FlowBasicBlock succ : block.getSuccessorSet()) {
dot.append(block.getId()).append(" -> ").append(succ.getId()).append(";\n"); if (!dot.toString().contains(block.getId() + " -> " + succ.getId())) {
// No duplicate arrows
dot.append(block.getId()).append(" -> ").append(succ.getId()).append(";\n");
}
} }
// Predecessors // Predecessors