package vaporize.library; import misc.*; import cs132.vapor.ast.*; import java.util.ArrayList; import java.util.HashSet; class CFGNode { private Node instruction; private ArrayList sources; private ArrayList dests; private HashSet reaching; private HashSet liveness; private int line; protected CFGNode(Node instruction) { this.instruction = instruction; this.sources = new ArrayList<>(); this.dests = new ArrayList<>(); this.reaching = new HashSet<>(); this.liveness = new HashSet<>(); this.line = this.instruction.sourcePos.line; } public String toString() { return this.instruction.toString(); } /** * For if we only have a line * number. (VBranch issues) */ // FIXME public boolean equals(Object other) { return (other instanceof CFGNode && (((CFGNode) other).instruction == this.instruction)) || (other instanceof Node && (((Node) other).sourcePos == this.instruction.sourcePos)) || (other instanceof Integer && (((Integer) other) .equals(this.instruction.sourcePos.line))); } protected void addSource(CFGNode node) { this.sources.add(node); } protected void addDest(CFGNode node) { this.dests.add(node); } protected void addReaching(String add) { MinimalLogger.info(String.format("Def %s at %s", add, this.line)); this.reaching.add(add); } protected void addLiveness(String add) { MinimalLogger.info(String.format("Use %s at %s", add, this.line)); this.liveness.add(add); } protected Node getInstruction() { return this.instruction; } protected ArrayList getSources() { return this.sources; } protected ArrayList getDests() { return this.dests; } protected HashSet getReaching() { return this.reaching; } protected HashSet getLiveness() { return this.liveness; } protected int getLine() { return this.line; } }